Compare commits

..

142 Commits

Author SHA1 Message Date
Sabe Jones
5c7227fc02 4.161.3 2020-10-02 14:36:25 -05:00
Sabe Jones
4a99fc5a74 fix(mobile): provide interim event 2020-10-02 14:36:15 -05:00
Sabe Jones
21d008aaee 4.161.2 2020-10-01 17:08:04 -05:00
Sabe Jones
0d4ed102a0 chore(news): Bailey 2020-10-01 17:07:51 -05:00
Sabe Jones
83bcfcde06 Merge branch 'develop' into release 2020-10-01 16:52:42 -05:00
Bart Enkelaar
32ac00b417 Fix vue test stacktraces (#12612)
* Issue 10786 - Add unit test for Home component

* Issue 10786 - Improve test setup and test invite parameter variations

* Issue 10786 - Improve Vue.js test isolation by adding async keyword to dispatch function

* Issue 10786 - Missing action does not need to be awaited

* fix(vuejs-unit-tests): Fewer stacktraces in avatar.spec.js

* No more stacktraces in avatar.spec.js

* Register dummy directive in chatCard.spec.js

* Resolve stacktraces in column.spec.js

* Resolve stacktrace in notifications.spec.js

* Resolve warnings in user.spec.js

* Resolve asynchronous stacktrace from home.spec.js

* Remove unnecessary mount call.

* Clear up some let clutter in column.spec.js
2020-10-01 19:08:34 +02:00
Sabe Jones
2a00aefdd6 4.161.1 2020-10-01 11:24:41 -05:00
Sabe Jones
679d615224 Squashed commit of the following:
commit dd4d53a68ccf547857c05402cdb569460589a223
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Oct 1 11:17:04 2020 -0500

    refactor(event): needless event thing

commit d1254af5218f6ae85bc64b45c55aea46388b665b
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Oct 1 10:56:06 2020 -0500

    fix(event): clone, not reassign

commit 50bd3199dc35ff215f7cb80b8e5db6770e7f436a
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Oct 1 10:36:39 2020 -0500

    fix(event): create interim period and handle it in gear generation
2020-10-01 11:24:31 -05:00
Melior
73c5764d63 Merge branch 'develop' of github.com:HabitRPG/habitica into develop 2020-09-29 21:54:24 +02:00
Sabe Jones
205d2758de Merge branch 'release' into develop 2020-09-29 14:19:29 -05:00
Sabe Jones
efe7ea52bc 4.161.0 2020-09-29 14:16:38 -05:00
Sabe Jones
938152edea chore(news): Bailey 2020-09-29 14:16:25 -05:00
Jostein Skjånes
3e1e9b6d56 Translated using Weblate (Norwegian Bokmål)
Currently translated at 71.4% (125 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/nb_NO/
2020-09-29 18:02:36 +02:00
Jostein Skjånes
8b01d1a88c Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.4% (196 of 212 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/nb_NO/
2020-09-29 18:02:36 +02:00
Kitty Kat
9910fb7b99 Translated using Weblate (Hindi)
Currently translated at 13.1% (43 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/hi/
2020-09-29 15:01:40 +02:00
Yowi
a91d639606 Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/es_419/
2020-09-29 15:01:39 +02:00
そら
eaeb942ad8 Translated using Weblate (Japanese)
Currently translated at 96.0% (168 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
2020-09-29 15:01:38 +02:00
Yowi
c509d0edbd Translated using Weblate (Spanish (Latin America))
Currently translated at 87.0% (108 of 124 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/es_419/
2020-09-29 15:01:37 +02:00
Yowi
59566d9d65 Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/es_419/
2020-09-29 15:01:37 +02:00
Yowi
e457b8ddc0 Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/es_419/
2020-09-29 15:01:36 +02:00
Yowi
a43f7734dc Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/es_419/
2020-09-29 15:01:36 +02:00
Yowi
2618825ce2 Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (180 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/es_419/
2020-09-29 15:01:35 +02:00
そら
af35cbb743 Translated using Weblate (Japanese)
Currently translated at 98.8% (178 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
2020-09-29 15:01:34 +02:00
Yıldıray
989361bb46 Translated using Weblate (Turkish)
Currently translated at 97.9% (292 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/tr/
2020-09-29 05:42:40 +02:00
Yıldıray
b18225561e Translated using Weblate (Turkish)
Currently translated at 94.4% (170 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/tr/
2020-09-29 05:42:39 +02:00
そら
a500119879 Translated using Weblate (Japanese)
Currently translated at 96.0% (168 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
2020-09-28 21:28:48 +02:00
Yowi
4d2a738748 Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/es_419/
2020-09-28 21:28:47 +02:00
Yowi
38047b9d5c Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/es_419/
2020-09-28 21:28:46 +02:00
そら
035a6be8b7 Translated using Weblate (Japanese)
Currently translated at 99.0% (499 of 504 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/
2020-09-28 21:28:45 +02:00
Chalda Pnuzig
e3bc4a5fc7 Translated using Weblate (Italian)
Currently translated at 100.0% (716 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/
2020-09-28 21:28:44 +02:00
そら
d8d825c6b0 Translated using Weblate (Japanese)
Currently translated at 98.8% (178 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
2020-09-28 21:28:41 +02:00
Sabe Jones
f47c243cb0 fix(potions): previously-available text 2020-09-28 09:52:49 -05:00
dependabot-preview[bot]
8c31f944fa build(deps): bump vue-router from 3.4.3 to 3.4.5 in /website/client (#12622)
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.4.3 to 3.4.5.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.4.3...v3.4.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-28 11:03:22 +02:00
dependabot-preview[bot]
931403ef0b build(deps): bump amplitude-js from 7.1.1 to 7.2.2 in /website/client (#12626)
Bumps [amplitude-js](https://github.com/amplitude/amplitude-javascript) from 7.1.1 to 7.2.2.
- [Release notes](https://github.com/amplitude/amplitude-javascript/releases)
- [Changelog](https://github.com/amplitude/Amplitude-JavaScript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/amplitude/amplitude-javascript/compare/v7.1.1...v7.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-28 11:03:06 +02:00
dependabot-preview[bot]
17ff5f4640 build(deps): bump moment from 2.28.0 to 2.29.0 in /website/client (#12620)
Bumps [moment](https://github.com/moment/moment) from 2.28.0 to 2.29.0.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.28.0...2.29.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-28 11:02:52 +02:00
dependabot-preview[bot]
ea590307c9 build(deps): bump moment from 2.28.0 to 2.29.0 (#12619)
Bumps [moment](https://github.com/moment/moment) from 2.28.0 to 2.29.0.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.28.0...2.29.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-28 11:02:45 +02:00
dependabot-preview[bot]
e12597b330 build(deps): bump jwks-rsa from 1.9.0 to 1.10.1 (#12616)
Bumps [jwks-rsa](https://github.com/auth0/node-jwks-rsa) from 1.9.0 to 1.10.1.
- [Release notes](https://github.com/auth0/node-jwks-rsa/releases)
- [Changelog](https://github.com/auth0/node-jwks-rsa/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/node-jwks-rsa/compare/v1.9.0...v1.10.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-28 11:02:30 +02:00
Dennis Spaag
dd92b20ef5 Translated using Weblate (Latin)
Currently translated at 78.7% (1710 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/la/
2020-09-28 08:05:16 +02:00
blacksheep47
fd0365eec9 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
2020-09-28 08:05:12 +02:00
blacksheep47
cdeefcf4e9 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.0% (2150 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
2020-09-28 03:13:28 +02:00
blacksheep47
5d799546ff Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (175 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/
2020-09-28 02:30:53 +02:00
Yowi
931bd33a9f Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/es_419/
2020-09-28 02:30:53 +02:00
Yowi
0b07aae1bb Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (362 of 362 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/es_419/
2020-09-28 02:30:52 +02:00
blacksheep47
4ff769db0c Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (189 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/
2020-09-28 02:30:51 +02:00
blacksheep47
5456cc2348 Translated using Weblate (Chinese (Simplified))
Currently translated at 98.7% (2143 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
2020-09-28 02:30:50 +02:00
blacksheep47
97baa69a8d Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (180 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hans/
2020-09-28 02:30:46 +02:00
そら
66644b7369 Translated using Weblate (Japanese)
Currently translated at 96.0% (168 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
2020-09-27 17:15:38 +02:00
Chalda Pnuzig
4dcac53d6d Translated using Weblate (Italian)
Currently translated at 100.0% (175 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
2020-09-27 17:15:37 +02:00
Chalda Pnuzig
ead1c1b851 Translated using Weblate (Italian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/it/
2020-09-27 17:15:37 +02:00
Chalda Pnuzig
f3a1ac425f Translated using Weblate (Italian)
Currently translated at 100.0% (504 of 504 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/
2020-09-27 17:15:36 +02:00
Chalda Pnuzig
e450e7d975 Translated using Weblate (Italian)
Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
2020-09-27 17:15:35 +02:00
そら
4984f99de0 Translated using Weblate (Japanese)
Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/
2020-09-27 17:15:31 +02:00
Chalda Pnuzig
3ae6bfcb57 Translated using Weblate (Italian)
Currently translated at 100.0% (362 of 362 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/it/
2020-09-27 17:15:30 +02:00
Koldo Almandoz Forcen
5c6f727c4b Translated using Weblate (Basque)
Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/eu/
2020-09-27 01:40:50 +02:00
Anonymous
4bbb75a6a3 Translated using Weblate (Basque)
Currently translated at 37.6% (35 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/eu/
2020-09-27 01:40:50 +02:00
Koldo Almandoz Forcen
a2dee15289 Translated using Weblate (Basque)
Currently translated at 37.6% (35 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/eu/
2020-09-27 01:40:50 +02:00
Koldo Almandoz Forcen
db59a4b925 Translated using Weblate (Spanish)
Currently translated at 82.2% (144 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es/
2020-09-27 01:40:49 +02:00
@ALESTHETIC
96aaa6f0e3 Translated using Weblate (Spanish)
Currently translated at 96.4% (537 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/
2020-09-27 01:40:49 +02:00
Koldo Almandoz Forcen
9eb7654a3c Translated using Weblate (Spanish)
Currently translated at 96.4% (537 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/
2020-09-27 01:40:48 +02:00
Anonymous
d2902910bd Translated using Weblate (Turkish)
Currently translated at 61.2% (57 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/tr/
2020-09-27 01:40:47 +02:00
Ahmet Burak Baraklı
3a7c9b1c1f Translated using Weblate (Turkish)
Currently translated at 61.2% (57 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/tr/
2020-09-27 01:40:47 +02:00
@ALESTHETIC
6c214df289 Translated using Weblate (Spanish)
Currently translated at 95.8% (534 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/
2020-09-26 23:52:17 +02:00
Koldo Almandoz Forcen
c2fe33650c Translated using Weblate (Spanish)
Currently translated at 95.8% (534 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/
2020-09-26 23:52:14 +02:00
Anonymous
53748d62f6 Translated using Weblate (Spanish)
Currently translated at 95.5% (532 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/
2020-09-26 23:48:10 +02:00
Anonymous
c0364c0e00 Translated using Weblate (Basque)
Currently translated at 15.0% (14 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/eu/
2020-09-26 22:40:48 +02:00
Koldo Almandoz Forcen
2ccaa02e7e Translated using Weblate (Basque)
Currently translated at 15.0% (14 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/eu/
2020-09-26 22:40:45 +02:00
Anonymous
943bf1442d Translated using Weblate (Basque)
Currently translated at 7.5% (7 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/eu/
2020-09-26 22:36:47 +02:00
Koldo Almandoz Forcen
76f13abee1 Translated using Weblate (Basque)
Currently translated at 7.5% (7 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/eu/
2020-09-26 22:36:45 +02:00
Anonymous
06a0147a97 Translated using Weblate (Basque)
Currently translated at 6.4% (6 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/eu/
2020-09-26 22:35:23 +02:00
そら
03984df562 Translated using Weblate (Japanese)
Currently translated at 96.0% (168 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
2020-09-26 09:52:29 +02:00
Yowi
f95ad1201d Translated using Weblate (Spanish (Latin America))
Currently translated at 85.3% (611 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/es_419/
2020-09-26 05:40:00 +02:00
Yowi
91e311284a Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (1 of 1 strings)

Translation: Habitica/Merch
Translate-URL: https://translate.habitica.com/projects/habitica/merch/es_419/
2020-09-26 05:39:56 +02:00
Benoit Hetru
ab554320f3 Translated using Weblate (French)
Currently translated at 100.0% (175 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/
2020-09-26 05:39:56 +02:00
Bénédicte Botelle
e5afb89706 Translated using Weblate (French)
Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/fr/
2020-09-26 05:39:55 +02:00
Yowi
0c1d78acdb Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/es_419/
2020-09-26 05:39:55 +02:00
Bénédicte Botelle
3361ed1f2d Translated using Weblate (French)
Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/
2020-09-26 05:39:54 +02:00
Benoit Hetru
4d7d8e84c5 Translated using Weblate (French)
Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/
2020-09-26 05:39:53 +02:00
Benoit Hetru
28d3611c4a Translated using Weblate (French)
Currently translated at 100.0% (189 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/
2020-09-26 05:39:53 +02:00
Benoit Hetru
fbb758fa89 Translated using Weblate (French)
Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/
2020-09-26 05:39:52 +02:00
Bénédicte Botelle
40f9651378 Translated using Weblate (French)
Currently translated at 100.0% (557 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/
2020-09-26 05:39:48 +02:00
Benoit Hetru
e90041976b Translated using Weblate (French)
Currently translated at 100.0% (557 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/
2020-09-26 05:39:48 +02:00
Sabe Jones
6d737330f2 chore(sprites): compile 2020-09-25 16:06:45 -05:00
Sabe Jones
910c49df4f feat(content): Mystery Items and avatar customizations 2020-09-25 16:06:37 -05:00
Melior
1a46fac7bf Translated using Weblate (French)
Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (189 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/

Translated using Weblate (Japanese)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/

Translated using Weblate (Japanese)

Currently translated at 96.0% (168 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 81.5% (1771 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/
2020-09-25 22:38:13 +02:00
Sabe Jones
6bbdd74927 Merge branch 'release' into develop 2020-09-25 14:47:10 -05:00
Sabe Jones
dd4c9c2536 4.160.1 2020-09-25 14:46:14 -05:00
Sabe Jones
0a6b22fdd9 fix(potions): erroneous Ghost overbuy warnings 2020-09-25 14:45:56 -05:00
RaitheOfDureya
d940066ea2 Removed unused I18N strings from the pets.json files (related to issue #9957) (#12559)
* Removed unused I18N strings from the `pets.json` file (locales\en)

* Removed unused I18N strings from the `pets.json` file in all the languages

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-25 11:49:13 +02:00
RaitheOfDureya
7be3143e55 Removed unused I18N strings from the messages.json files (related to issue #9957) (#12563)
* Removed unused I18N strings from the `messages.json` file (locales\en)

* Removed unused I18N `messages.json` strings from all the other languages

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-25 11:47:36 +02:00
RaitheOfDureya
b42875e2e1 Removed unused I18N strings from the quests.json files (related to issue #9957) (#12558)
* Removed unused I18N strings from the `quests.json` file (locales/en)

* Remove whereAreMyQuests, yourQuests and getMoreQuests (locales/en)

* Removed unused I18N `quests.json` strings from all the others languages

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-25 11:47:17 +02:00
Matteo Pagliazzi
6c6e8f0001 Merge branch 'benkelaar-12482-xml-export' into develop 2020-09-25 11:21:35 +02:00
Matteo Pagliazzi
8219dfd9e6 fix(integration tests): remove duplicate test file 2020-09-25 11:21:24 +02:00
Matteo Pagliazzi
025b994224 Merge branch '12482-xml-export' of https://github.com/benkelaar/habitica into benkelaar-12482-xml-export 2020-09-25 11:20:11 +02:00
Alexandrea Beh
b056763f09 Issue 11450 Adding keyboard accessibility to task board controls and purchases (#12363)
* intial draft adding keyboard accessibility to task board controls

* cleanup

* finish adding keyboard accessibility for task dropdown, rewards

* add notEnough conditions to disable purchase button

* fix(lint): remove console.log from buy modal

* add missing comma, use focus-within instead of focus-visible

* missed one more focus visible

* override browser default focus styling

* move focus styling to tasks only

* add rounded border

* fix element height on focus, rounded borders

* fix dropdown margin to avoid element resizing

* styling updates on focus

* fix spacing around task checklist

* fix border around dropdown item

* remove spacing that made tasks with notes jump

* keep disabled habit control styling when not focused

* revert unintended spacing

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-25 10:29:13 +02:00
Bart Enkelaar
6e91326648 fix(dataexport) - 12482 - Extract xml marshalling into library
- Add integration test on dataexport endpoint
- Add library with unit test for xml marshalling
2020-09-25 08:57:05 +02:00
Bart Enkelaar
8b9c76a2b7 fix(12842) - Remove duplication in gulp-tests.js 2020-09-25 08:57:05 +02:00
Bart Enkelaar
c4fc2d825d fix(export) - Issue 12482 - Fix messages in xml export. 2020-09-25 08:57:05 +02:00
Melior
411ac94986 Merge branch 'develop' of github.com:HabitRPG/habitica into develop 2020-09-24 21:34:24 +02:00
Jostein Skjånes
8b952a6caf Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/nb_NO/
2020-09-24 21:21:28 +02:00
Jostein Skjånes
b21bf0d428 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/nb_NO/
2020-09-24 21:21:26 +02:00
Jostein Skjånes
1b5134c0bc Translated using Weblate (Norwegian Bokmål)
Currently translated at 88.5% (124 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/nb_NO/
2020-09-24 21:21:26 +02:00
Sabe Jones
54ffe1d3b6 4.160.0 2020-09-24 14:13:36 -05:00
Sabe Jones
ff77455b00 Merge branch 'sabrecat/vampotions' into release 2020-09-24 14:13:29 -05:00
Jostein Skjånes
22eaefb3b2 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/nb_NO/
2020-09-24 15:42:24 +02:00
Anas HARNOUCH
b9710c4180 Translated using Weblate (French)
Currently translated at 100.0% (175 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/
2020-09-24 15:42:23 +02:00
blacksheep47
919b30c237 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.8% (185 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/
2020-09-24 15:42:22 +02:00
Anas HARNOUCH
9a51d200f7 Translated using Weblate (French)
Currently translated at 100.0% (189 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/
2020-09-24 15:42:22 +02:00
Bénédicte Botelle
170df77c3d Translated using Weblate (French)
Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/
2020-09-24 15:42:21 +02:00
Anas HARNOUCH
043f34d619 Translated using Weblate (French)
Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/
2020-09-24 15:42:21 +02:00
Kitty Kat
0b20f8a980 Translated using Weblate (Hindi)
Currently translated at 75.7% (422 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/hi/
2020-09-24 06:30:57 +02:00
そら
7f208eb141 Translated using Weblate (Japanese)
Currently translated at 96.0% (168 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
2020-09-24 06:30:56 +02:00
Melior
75a196dd3b Translated using Weblate (Hindi)
Currently translated at 11.8% (39 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/hi/

Translated using Weblate (Chinese (Hong Kong))

Currently translated at 100.0% (15 of 15 strings)

Translation: Habitica/Death
Translate-URL: https://translate.habitica.com/projects/habitica/death/zh_Hant_HK/

Translated using Weblate (Hungarian)

Currently translated at 31.1% (29 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hu/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 67.4% (118 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 86.8% (622 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (27 of 27 strings)

Translation: Habitica/Loginincentives
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (362 of 362 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/nb_NO/

Translated using Weblate (Dutch)

Currently translated at 98.6% (2141 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 36.3% (53 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 2.4% (8 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 80.3% (45 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 78.2% (436 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (27 of 27 strings)

Translation: Habitica/Loginincentives
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (189 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 78.4% (1703 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (4 of 4 strings)

Translation: Habitica/Noscript
Translate-URL: https://translate.habitica.com/projects/habitica/noscript/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 75.5% (421 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (189 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 78.4% (1703 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (15 of 15 strings)

Translation: Habitica/Death
Translate-URL: https://translate.habitica.com/projects/habitica/death/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nb_NO/

Translated using Weblate (Spanish (Latin America))

Currently translated at 81.5% (1771 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/

Translated using Weblate (Japanese)

Currently translated at 99.0% (499 of 504 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 75.5% (421 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 75.5% (421 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nb_NO/

Translated using Weblate (Italian)

Currently translated at 100.0% (175 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/

Translated using Weblate (French)

Currently translated at 98.8% (173 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/

Translated using Weblate (Italian)

Currently translated at 100.0% (189 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (180 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/it/

Translated using Weblate (Hindi)

Currently translated at 11.8% (39 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/hi/

Translated using Weblate (Russian)

Currently translated at 91.4% (160 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (175 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (175 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/

Translated using Weblate (German)

Currently translated at 100.0% (175 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/

Translated using Weblate (Spanish (Latin America))

Currently translated at 81.5% (1771 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/

Translated using Weblate (Russian)

Currently translated at 98.4% (186 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (189 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/

Translated using Weblate (German)

Currently translated at 100.0% (189 of 189 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/de/

Translated using Weblate (Russian)

Currently translated at 94.6% (2054 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2171 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (German)

Currently translated at 99.5% (2162 of 2171 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Russian)

Currently translated at 100.0% (180 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (180 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/

Translated using Weblate (French)

Currently translated at 100.0% (180 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/

Translated using Weblate (German)

Currently translated at 100.0% (180 of 180 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/de/
2020-09-24 02:59:26 +02:00
Sabe Jones
701a6170a3 chore(sprites): compile 2020-09-23 14:09:49 -05:00
Sabe Jones
ee70ed6146 feat(content): Vampire Hatching Potions 2020-09-23 14:09:38 -05:00
RaitheOfDureya
d45a6f260d Removed unused I18N loginIncentives.json strings from all languages (#12566) 2020-09-23 17:44:39 +02:00
RaitheOfDureya
de09e56f67 Removed unused I18N strings from all limited.json files (#12567)
Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-22 22:14:49 +02:00
Matteo Pagliazzi
17b520de12 Merge branch 'RaitheOfDureya-remove-unused-maintenance' into develop 2020-09-22 21:56:32 +02:00
Matteo Pagliazzi
0655e2e0a0 Merge branch 'remove-unused-maintenance' of https://github.com/RaitheOfDureya/habitica into RaitheOfDureya-remove-unused-maintenance 2020-09-22 21:56:20 +02:00
RaitheOfDureya
bcf489f847 Removed unused I18N strings from the merch.json files (related to issue #9957) (#12564)
* Removed unused I18N strings from the `merch.json` file (locales\en)

* Removed unused I18N `merch.json` strings from all the other languages
2020-09-22 20:05:58 +02:00
RaitheOfDureya
adc2207249 Removed unused I18N strings from the noscript.json files (related to issue #9957) (#12562)
* Removed unused I18N strings from the `nostring.json` file (locales\en)

* Removed unused I18N `noscript.json` strings from all the others languages
2020-09-22 20:03:41 +02:00
Matteo Pagliazzi
1c205a96fb Merge branch 'RaitheOfDureya-remove-unused-npc' into develop 2020-09-22 20:01:01 +02:00
Matteo Pagliazzi
8e2bbbd570 Merge branch 'remove-unused-npc' of https://github.com/RaitheOfDureya/habitica into RaitheOfDureya-remove-unused-npc 2020-09-22 20:00:51 +02:00
Matteo Pagliazzi
13d1f1b48b Merge #12553 - Removed unused I18N strings from the rebirth.json files
Squashed commit of the following:

commit 9de806e00296e9e8659ccde25085eb3b8a6639c4
Merge: 7c4faf8b7a 7361029289
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Tue Sep 22 19:52:09 2020 +0200

    Merge branch 'remove-unused-rebirth' of https://github.com/RaitheOfDureya/habitica into RaitheOfDureya-remove-unused-rebirth

commit 7361029289
Author: Raithe Of Dureya <raitheofdureya@gmail.com>
Date:   Fri Sep 11 13:43:59 2020 +0200

    Removed `rebirth.json`'s unused I18N strings from other languages

commit acd7786580
Author: Raithe Of Dureya <raitheofdureya@gmail.com>
Date:   Tue Sep 8 20:47:59 2020 +0200

    Removed unused I18N strings from the `rebirth.json` file (locales/en)
2020-09-22 19:52:55 +02:00
Bart Enkelaar
7c4faf8b7a fix(chat) - issue 12586 - can't put links without titles in message boxes (#12594) 2020-09-22 19:28:37 +02:00
Melior
82be621850 Merge branch 'origin/develop' into Weblate. 2020-09-22 17:07:35 +02:00
Sabe Jones
265fb7c5f6 Merge branch 'release' into develop 2020-09-22 09:49:49 -05:00
Melior
29a278d0bc Merge branch 'origin/develop' into Weblate. 2020-09-22 16:17:25 +02:00
Melior
2fb9dfe909 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 78.5% (44 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (362 of 362 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/nb_NO/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 98.2% (55 of 56 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 71.4% (40 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 86.8% (622 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 88.0% (118 of 134 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 86.8% (622 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (31 of 31 strings)

Translation: Habitica/Maintenance
Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (15 of 15 strings)

Translation: Habitica/Death
Translate-URL: https://translate.habitica.com/projects/habitica/death/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 84.8% (307 of 362 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 91.5% (194 of 212 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 93.0% (161 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 67.8% (38 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 86.8% (622 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 7.5% (11 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 90.7% (157 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 64.2% (36 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 88.0% (118 of 134 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 86.8% (622 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 86.4% (121 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (27 of 27 strings)

Translation: Habitica/Loginincentives
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 83.3% (5 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 99.8% (500 of 501 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 79.5% (1703 of 2141 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nb_NO/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nb_NO/

Translated using Weblate (Spanish (Latin America))

Currently translated at 87.5% (7 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 82.7% (1771 of 2141 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (362 of 362 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (716 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 87.5% (7 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 82.7% (1771 of 2141 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/

Translated using Weblate (Korean)

Currently translated at 73.1% (68 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ko/

Translated using Weblate (Korean)

Currently translated at 73.1% (68 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ko/

Translated using Weblate (Spanish (Latin America))

Currently translated at 82.7% (1771 of 2141 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/

Translated using Weblate (Korean)

Currently translated at 95.3% (284 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ko/

Translated using Weblate (Korean)

Currently translated at 95.3% (284 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ko/

Translated using Weblate (Korean)

Currently translated at 97.3% (224 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ko/

Translated using Weblate (Korean)

Currently translated at 96.3% (287 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ko/

Translated using Weblate (Korean)

Currently translated at 52.7% (77 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/ko/

Translated using Weblate (Korean)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ko/

Translated using Weblate (Korean)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ko/

Translated using Weblate (Korean)

Currently translated at 67.7% (63 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ko/

Translated using Weblate (Spanish (Latin America))

Currently translated at 82.7% (1771 of 2141 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 82.7% (1771 of 2141 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/

Translated using Weblate (French)

Currently translated at 100.0% (557 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/

Translated using Weblate (Swedish)

Currently translated at 66.4% (123 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/sv/

Translated using Weblate (Swedish)

Currently translated at 83.6% (1792 of 2141 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/sv/

Translated using Weblate (Swedish)

Currently translated at 92.1% (513 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/sv/

Translated using Weblate (Spanish (Latin America))

Currently translated at 82.7% (1771 of 2141 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/es_419/

Translated using Weblate (Hindi)

Currently translated at 97.8% (91 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hi/
2020-09-22 16:12:26 +02:00
Sabe Jones
8ca369f937 Merge branch 'release' into develop 2020-09-22 09:10:11 -05:00
Matteo Pagliazzi
caa02141b8 Merge branch 'release' into develop 2020-09-22 15:53:28 +02:00
dependabot-preview[bot]
a1cea3b584 build(deps): bump @google-cloud/trace-agent from 5.1.0 to 5.1.1 (#12595)
Bumps [@google-cloud/trace-agent](https://github.com/googleapis/cloud-trace-nodejs) from 5.1.0 to 5.1.1.
- [Release notes](https://github.com/googleapis/cloud-trace-nodejs/releases)
- [Changelog](https://github.com/googleapis/cloud-trace-nodejs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/googleapis/cloud-trace-nodejs/compare/v5.1.0...v5.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-21 17:19:12 +02:00
dependabot-preview[bot]
1b260aee52 build(deps): bump got from 11.6.2 to 11.7.0 (#12597)
Bumps [got](https://github.com/sindresorhus/got) from 11.6.2 to 11.7.0.
- [Release notes](https://github.com/sindresorhus/got/releases)
- [Commits](https://github.com/sindresorhus/got/compare/v11.6.2...v11.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-21 17:19:04 +02:00
dependabot-preview[bot]
f2182428e5 build(deps): bump validator from 13.1.1 to 13.1.17 (#12598)
Bumps [validator](https://github.com/chriso/validator.js) from 13.1.1 to 13.1.17.
- [Release notes](https://github.com/chriso/validator.js/releases)
- [Changelog](https://github.com/validatorjs/validator.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/chriso/validator.js/compare/13.1.1...13.1.17)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-21 17:18:46 +02:00
dependabot-preview[bot]
996b8f67c5 build(deps): bump sass from 1.26.10 to 1.26.11 in /website/client (#12600)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.10 to 1.26.11.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.26.10...1.26.11)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-21 17:18:38 +02:00
dependabot-preview[bot]
b297b2a48a build(deps): bump validator from 13.1.1 to 13.1.17 in /website/client (#12601)
Bumps [validator](https://github.com/chriso/validator.js) from 13.1.1 to 13.1.17.
- [Release notes](https://github.com/chriso/validator.js/releases)
- [Changelog](https://github.com/validatorjs/validator.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/chriso/validator.js/compare/13.1.1...13.1.17)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-21 17:18:24 +02:00
Matteo Pagliazzi
74eab5bba9 Merge pull request #12603 from HabitRPG/dependabot/npm_and_yarn/website/client/bootstrap-vue-2.17.3
build(deps): bump bootstrap-vue from 2.17.0 to 2.17.3 in /website/client
2020-09-21 17:17:59 +02:00
Matteo Pagliazzi
87504f4d76 Merge pull request #12602 from HabitRPG/dependabot/npm_and_yarn/website/client/webpack-4.44.2
build(deps): bump webpack from 4.44.1 to 4.44.2 in /website/client
2020-09-21 17:17:49 +02:00
dependabot-preview[bot]
cd11d4c179 build(deps): bump bootstrap-vue from 2.17.0 to 2.17.3 in /website/client
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.17.0 to 2.17.3.
- [Release notes](https://github.com/bootstrap-vue/bootstrap-vue/releases)
- [Changelog](https://github.com/bootstrap-vue/bootstrap-vue/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/bootstrap-vue/bootstrap-vue/compare/v2.17.0...v2.17.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-21 08:25:12 +00:00
dependabot-preview[bot]
e821fab4a3 build(deps): bump webpack from 4.44.1 to 4.44.2 in /website/client
Bumps [webpack](https://github.com/webpack/webpack) from 4.44.1 to 4.44.2.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.44.1...v4.44.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-21 08:24:14 +00:00
Raithe Of Dureya
bf014ad781 Removed all maintenance.json files since no I18N string is being used 2020-09-14 15:57:04 +02:00
Raithe Of Dureya
b1fc88d330 Removed unused I18N npc.json strings from all the other languages 2020-09-14 15:08:51 +02:00
Raithe Of Dureya
1e54a474b1 Removed unused I18N strings from the npc.json file (locales\en) 2020-09-14 14:46:45 +02:00
931 changed files with 11766 additions and 26039 deletions

View File

@@ -3,9 +3,7 @@ import { exec } from 'child_process';
import gulp from 'gulp';
import os from 'os';
import nconf from 'nconf';
import {
pipe,
} from './taskHelper';
import { pipe } from './taskHelper';
import {
getDevelopmentConnectionUrl,
getDefaultConnectionOptions,
@@ -21,15 +19,16 @@ const TEST_DB_URI = nconf.get('TEST_DB_URI');
const SANITY_TEST_COMMAND = 'npm run test:sanity';
const COMMON_TEST_COMMAND = 'npm run test:common';
const CONTENT_TEST_COMMAND = 'npm run test:content';
const CONTENT_OPTIONS = { maxBuffer: 1024 * 500 };
const LIMIT_MAX_BUFFER_OPTIONS = { maxBuffer: 1024 * 500 };
/* Helper methods for reporting test summary */
/* Helper method for reporting test summary */
const testResults = [];
const testCount = (stdout, regexp) => {
const match = stdout.match(regexp);
return parseInt(match && (match[1] || 0), 10);
};
/* Helper methods to correctly run child test processes */
const testBin = (string, additionalEnvVariables = '') => {
if (os.platform() === 'win32') {
if (additionalEnvVariables !== '') {
@@ -41,6 +40,15 @@ const testBin = (string, additionalEnvVariables = '') => {
return `NODE_ENV=test ${additionalEnvVariables} ${string}`;
};
function runInChildProcess (command, options = {}, envVariables = '') {
return done => pipe(exec(testBin(command, envVariables), options, done));
}
function integrationTestCommand (testDir, coverageDir) {
return `istanbul cover --dir coverage/${coverageDir} --report lcovonly node_modules/mocha/bin/_mocha -- ${testDir} --recursive --require ./test/helpers/start-server`;
}
/* Test task definitions */
gulp.task('test:nodemon', gulp.series(done => {
process.env.PORT = TEST_SERVER_PORT; // eslint-disable-line no-process-env
process.env.NODE_DB_URI = TEST_DB_URI; // eslint-disable-line no-process-env
@@ -82,31 +90,9 @@ gulp.task('test:prepare', gulp.series(
done => done(),
));
gulp.task('test:sanity', cb => {
const runner = exec(
testBin(SANITY_TEST_COMMAND),
err => {
if (err) {
process.exit(1);
}
cb();
},
);
pipe(runner);
});
gulp.task('test:sanity', runInChildProcess(SANITY_TEST_COMMAND));
gulp.task('test:common', gulp.series('test:prepare:build', cb => {
const runner = exec(
testBin(COMMON_TEST_COMMAND),
err => {
if (err) {
process.exit(1);
}
cb();
},
);
pipe(runner);
}));
gulp.task('test:common', gulp.series('test:prepare:build', runInChildProcess(COMMON_TEST_COMMAND)));
gulp.task('test:common:clean', cb => {
pipe(exec(testBin(COMMON_TEST_COMMAND), () => cb()));
@@ -130,22 +116,11 @@ gulp.task('test:common:safe', gulp.series('test:prepare:build', cb => {
pipe(runner);
}));
gulp.task('test:content', gulp.series('test:prepare:build', cb => {
const runner = exec(
testBin(CONTENT_TEST_COMMAND),
CONTENT_OPTIONS,
err => {
if (err) {
process.exit(1);
}
cb();
},
);
pipe(runner);
}));
gulp.task('test:content', gulp.series('test:prepare:build',
runInChildProcess(CONTENT_TEST_COMMAND, LIMIT_MAX_BUFFER_OPTIONS)));
gulp.task('test:content:clean', cb => {
pipe(exec(testBin(CONTENT_TEST_COMMAND), CONTENT_OPTIONS, () => cb()));
pipe(exec(testBin(CONTENT_TEST_COMMAND), LIMIT_MAX_BUFFER_OPTIONS, () => cb()));
});
gulp.task('test:content:watch', gulp.series('test:content:clean', () => gulp.watch(['common/script/content/**', 'test/**'], gulp.series('test:content:clean', done => done()))));
@@ -153,7 +128,7 @@ gulp.task('test:content:watch', gulp.series('test:content:clean', () => gulp.wat
gulp.task('test:content:safe', gulp.series('test:prepare:build', cb => {
const runner = exec(
testBin(CONTENT_TEST_COMMAND),
CONTENT_OPTIONS,
LIMIT_MAX_BUFFER_OPTIONS,
(err, stdout) => { // eslint-disable-line handle-callback-err
testResults.push({
suite: 'Content Specs\t',
@@ -167,76 +142,39 @@ gulp.task('test:content:safe', gulp.series('test:prepare:build', cb => {
pipe(runner);
}));
gulp.task('test:api:unit:run', done => {
const runner = exec(
testBin('istanbul cover --dir coverage/api-unit node_modules/mocha/bin/_mocha -- test/api/unit --recursive --require ./test/helpers/start-server'),
err => {
if (err) {
process.exit(1);
}
done();
},
);
pipe(runner);
});
gulp.task('test:api:unit:run',
runInChildProcess(integrationTestCommand('test/api/unit', 'coverage/api-unit')));
gulp.task('test:api:unit:watch', () => gulp.watch(['website/server/libs/*', 'test/api/unit/**/*', 'website/server/controllers/**/*'], gulp.series('test:api:unit:run', done => done())));
gulp.task('test:api-v3:integration', gulp.series('test:prepare:mongo', done => {
const runner = exec(
testBin('istanbul cover --dir coverage/api-v3-integration --report lcovonly node_modules/mocha/bin/_mocha -- test/api/v3/integration --recursive --require ./test/helpers/start-server'),
{ maxBuffer: 500 * 1024 },
err => {
if (err) {
process.exit(1);
}
done();
},
);
pipe(runner);
}));
gulp.task('test:api-v3:integration', gulp.series('test:prepare:mongo',
runInChildProcess(
integrationTestCommand('test/api/v3/integration', 'coverage/api-v3-integration'),
LIMIT_MAX_BUFFER_OPTIONS,
)));
gulp.task('test:api-v3:integration:watch', () => gulp.watch([
'website/server/controllers/api-v3/**/*', 'common/script/ops/*', 'website/server/libs/*.js',
'test/api/v3/integration/**/*',
], gulp.series('test:api-v3:integration', done => done())));
gulp.task('test:api-v3:integration:separate-server', done => {
const runner = exec(
testBin('mocha test/api/v3/integration --recursive --require ./test/helpers/start-server', 'LOAD_SERVER=0'),
{ maxBuffer: 500 * 1024 },
err => done(err),
);
gulp.task('test:api-v3:integration:separate-server', runInChildProcess(
'mocha test/api/v3/integration --recursive --require ./test/helpers/start-server',
LIMIT_MAX_BUFFER_OPTIONS,
'LOAD_SERVER=0',
));
pipe(runner);
});
gulp.task('test:api-v4:integration', gulp.series('test:prepare:mongo',
runInChildProcess(
integrationTestCommand('test/api/v4', 'api-v4-integration'),
LIMIT_MAX_BUFFER_OPTIONS,
)));
gulp.task('test:api-v4:integration', gulp.series('test:prepare:mongo', done => {
const runner = exec(
testBin('istanbul cover --dir coverage/api-v4-integration --report lcovonly node_modules/mocha/bin/_mocha -- test/api/v4 --recursive --require ./test/helpers/start-server'),
{ maxBuffer: 500 * 1024 },
err => {
if (err) {
process.exit(1);
}
done();
},
);
pipe(runner);
}));
gulp.task('test:api-v4:integration:separate-server', done => {
const runner = exec(
testBin('mocha test/api/v4 --recursive --require ./test/helpers/start-server', 'LOAD_SERVER=0'),
{ maxBuffer: 500 * 1024 },
err => done(err),
);
pipe(runner);
});
gulp.task('test:api-v4:integration:separate-server', runInChildProcess(
'mocha test/api/v4 --recursive --require ./test/helpers/start-server',
LIMIT_MAX_BUFFER_OPTIONS,
'LOAD_SERVER=0',
));
gulp.task('test:api:unit', gulp.series(
'test:prepare:mongo',

137
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{
"name": "habitica",
"version": "4.159.1",
"version": "4.161.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -1050,9 +1050,9 @@
}
},
"@google-cloud/common": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.3.2.tgz",
"integrity": "sha512-W7JRLBEJWYtZQQuGQX06U6GBOSLrSrlvZxv6kGNwJtFrusu6AVgZltQ9Pajuz9Dh9aSXy9aTnBcyxn2/O0EGUw==",
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.4.0.tgz",
"integrity": "sha512-bVMQlK4aZEeopo2oJwDUJiBhPVjRRQHfFCCv9JowmKS3L//PBHNDJzC/LxJixGZEU3fh3YXkUwm67JZ5TBCCNQ==",
"requires": {
"@google-cloud/projectify": "^2.0.0",
"@google-cloud/promisify": "^2.0.0",
@@ -1071,14 +1071,14 @@
"integrity": "sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ=="
},
"@google-cloud/promisify": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.2.tgz",
"integrity": "sha512-EvuabjzzZ9E2+OaYf+7P9OAiiwbTxKYL0oGLnREQd+Su2NTQBpomkdlkBowFvyWsaV0d1sSGxrKpSNcrhPqbxg=="
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.3.tgz",
"integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw=="
},
"@google-cloud/trace-agent": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-5.1.0.tgz",
"integrity": "sha512-OPtIXET63QI1ved7Dyxmrx6o1tNJ++aX+WPm0OfNtYFCn8BPzVMBw/ZCsRmwL6nL+jY1jJ0N9teUO7abCvwpfg==",
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-5.1.1.tgz",
"integrity": "sha512-YTcK0RLN90pLCprg0XC8uV4oAVd79vsXhkcxmEVwiOOYjUDvSrAhb7y/0SY606zgfhJHmUTNb/fZSWEtZP/slQ==",
"requires": {
"@google-cloud/common": "^3.0.0",
"@opencensus/propagation-stackdriver": "0.0.22",
@@ -1312,9 +1312,9 @@
"integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g=="
},
"@types/express": {
"version": "4.17.7",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.7.tgz",
"integrity": "sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ==",
"version": "4.17.8",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.8.tgz",
"integrity": "sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ==",
"requires": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "*",
@@ -1332,9 +1332,9 @@
}
},
"@types/express-serve-static-core": {
"version": "4.17.9",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.9.tgz",
"integrity": "sha512-DG0BYg6yO+ePW+XoDENYz8zhNGC3jDDEpComMYn7WJc4mY1Us8Rw9ax2YhJXxpyk2SF47PQAoQ0YyVT1a0bEkA==",
"version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz",
"integrity": "sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA==",
"requires": {
"@types/node": "*",
"@types/qs": "*",
@@ -1445,9 +1445,9 @@
"optional": true
},
"@types/qs": {
"version": "6.9.4",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.4.tgz",
"integrity": "sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ=="
"version": "6.9.5",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz",
"integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ=="
},
"@types/range-parser": {
"version": "1.2.3",
@@ -2141,7 +2141,6 @@
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
"integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
"dev": true,
"requires": {
"follow-redirects": "1.5.10"
}
@@ -6151,9 +6150,9 @@
}
},
"gaxios": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.0.4.tgz",
"integrity": "sha512-97NmFuMETFQh6gqPUxkqjxRMjmY8aRKRMphIkgO/b90AbCt5wAVuXsp8oWjIXlLN2pIK/fsXD8edcM7ULkFMLg==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.2.0.tgz",
"integrity": "sha512-+6WPeVzPvOshftpxJwRi2Ozez80tn/hdtOUag7+gajDHRJvAblKxTFSSMPtr2hmnLy7p0mvYz0rMXLBl8pSO7Q==",
"requires": {
"abort-controller": "^3.0.0",
"extend": "^3.0.2",
@@ -6163,9 +6162,9 @@
}
},
"gcp-metadata": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.1.4.tgz",
"integrity": "sha512-5J/GIH0yWt/56R3dNaNWPGQ/zXsZOddYECfJaqxFWgrZ9HC2Kvc5vl9upOgUUHKzURjAVf2N+f6tEJiojqXUuA==",
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.0.tgz",
"integrity": "sha512-vQZD57cQkqIA6YPGXM/zc+PIZfNRFdukWGsGZ5+LcJzesi5xp6Gn7a02wRJi4eXPyArNMIYpPET4QMxGqtlk6Q==",
"requires": {
"gaxios": "^3.0.0",
"json-bigint": "^1.0.0"
@@ -6676,9 +6675,9 @@
}
},
"google-auth-library": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.0.5.tgz",
"integrity": "sha512-Wj31lfTm2yR4g3WfOOB1Am1tt478Xq9OvzTPQJi17tn/I9R5IcsxjANBsE93nYmxYxtwDedhOdIb8l3vSPG49Q==",
"version": "6.0.6",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.0.6.tgz",
"integrity": "sha512-fWYdRdg55HSJoRq9k568jJA1lrhg9i2xgfhVIMJbskUmbDpJGHsbv9l41DGhCDXM21F9Kn4kUwdysgxSYBYJUw==",
"requires": {
"arrify": "^2.0.0",
"base64-js": "^1.3.0",
@@ -6692,17 +6691,17 @@
}
},
"google-p12-pem": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.2.tgz",
"integrity": "sha512-tbjzndQvSIHGBLzHnhDs3cL4RBjLbLXc2pYvGH+imGVu5b4RMAttUTdnmW2UH0t11QeBTXZ7wlXPS7hrypO/tg==",
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz",
"integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==",
"requires": {
"node-forge": "^0.9.0"
"node-forge": "^0.10.0"
}
},
"got": {
"version": "11.6.2",
"resolved": "https://registry.npmjs.org/got/-/got-11.6.2.tgz",
"integrity": "sha512-/21qgUePCeus29Jk7MEti8cgQUNXFSWfIevNIk4H7u1wmXNDrGPKPY6YsPY+o9CIT/a2DjCjRz0x1nM9FtS2/A==",
"version": "11.7.0",
"resolved": "https://registry.npmjs.org/got/-/got-11.7.0.tgz",
"integrity": "sha512-7en2XwH2MEqOsrK0xaKhbWibBoZqy+f1RSUoIeF1BLcnf+pyQdDsljWMfmOh+QKJwuvDIiKx38GtPh5wFdGGjg==",
"requires": {
"@sindresorhus/is": "^3.1.1",
"@szmarczak/http-timer": "^4.0.5",
@@ -6766,9 +6765,9 @@
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
},
"keyv": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz",
"integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==",
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
"integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
"requires": {
"json-buffer": "3.0.1"
}
@@ -6816,9 +6815,9 @@
"dev": true
},
"gtoken": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.0.2.tgz",
"integrity": "sha512-lull70rHCTvRTmAt+R/6W5bTtx4MjHku7AwJwK5fGqhOmygcZud0nrZcX+QUNfBJwCzqy7S5i1Bc4NYnr5PMMA==",
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.0.3.tgz",
"integrity": "sha512-Nyd1wZCMRc2dj/mAD0LlfQLcAO06uKdpKJXvK85SGrF5+5+Bpfil9u/2aw35ltvEHjvl0h5FMKN5knEU+9JrOg==",
"requires": {
"gaxios": "^3.0.0",
"google-p12-pem": "^3.0.0",
@@ -8379,27 +8378,19 @@
}
},
"jwks-rsa": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.9.0.tgz",
"integrity": "sha512-UPCfQQg0s2kF2Ju6UFJrQH73f7MaVN/hKBnYBYOp+X9KN4y6TLChhLtaXS5nRKbZqshwVdrZ9OY63m/Q9CLqcg==",
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.10.1.tgz",
"integrity": "sha512-UmjOsATVu7eQr17wbBCS+BSoz5LFtl57PtNXHbHFeT1WKomHykCHtn7c8inWVI7tpnsy6CZ1KOMJTgipFwXPig==",
"requires": {
"@types/express-jwt": "0.0.42",
"axios": "^0.19.2",
"debug": "^4.1.0",
"http-proxy-agent": "^4.0.1",
"https-proxy-agent": "^5.0.0",
"jsonwebtoken": "^8.5.1",
"limiter": "^1.1.5",
"lru-memoizer": "^2.1.2",
"ms": "^2.1.2"
},
"dependencies": {
"axios": {
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
"integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
"requires": {
"follow-redirects": "1.5.10"
}
}
}
},
"jws": {
@@ -9355,9 +9346,9 @@
"integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is="
},
"moment": {
"version": "2.28.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.28.0.tgz",
"integrity": "sha512-Z5KOjYmnHyd/ukynmFd/WwyXHd7L4J9vTI/nn5Ap9AVUgaAE15VvQ9MOGmJJygEUklupqIrFnor/tjTwRU+tQw=="
"version": "2.29.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.0.tgz",
"integrity": "sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA=="
},
"moment-recur": {
"version": "1.0.7",
@@ -9934,9 +9925,9 @@
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"node-forge": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz",
"integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ=="
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
"integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
},
"node-gcm": {
"version": "1.0.3",
@@ -11737,12 +11728,11 @@
"integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
},
"retry-request": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.1.tgz",
"integrity": "sha512-BINDzVtLI2BDukjWmjAIRZ0oglnCAkpP2vQjM3jdLhmT62h0xnQgciPwBRDAvHqpkPT2Wo1XuUyLyn6nbGrZQQ==",
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.3.tgz",
"integrity": "sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ==",
"requires": {
"debug": "^4.1.1",
"through2": "^3.0.1"
"debug": "^4.1.1"
}
},
"reusify": {
@@ -13113,15 +13103,6 @@
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"through2": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
"integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
"requires": {
"inherits": "^2.0.4",
"readable-stream": "2 || 3"
}
},
"through2-concurrent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-2.0.0.tgz",
@@ -13886,9 +13867,9 @@
}
},
"validator": {
"version": "13.1.1",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.1.1.tgz",
"integrity": "sha512-8GfPiwzzRoWTg7OV1zva1KvrSemuMkv07MA9TTl91hfhe+wKrsrgVN4H2QSFd/U/FhiU3iWPYVgvbsOGwhyFWw=="
"version": "13.1.17",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.1.17.tgz",
"integrity": "sha512-zL5QBoemJ3jYFb2/j38y7ljhwYGXVLUp8H6W1nVxadnAOvUOytec+L7BHh1oBQ82/TzWXHd+GSaxUWp4lROkLg=="
},
"value-or-function": {
"version": "3.0.0",

View File

@@ -1,13 +1,13 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.159.1",
"version": "4.161.3",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/preset-env": "^7.11.5",
"@babel/register": "^7.11.5",
"@google-cloud/trace-agent": "^5.1.0",
"@google-cloud/trace-agent": "^5.1.1",
"@slack/client": "^4.12.0",
"accepts": "^1.3.5",
"amazon-payments": "^0.2.8",
@@ -30,7 +30,7 @@
"express-basic-auth": "^1.1.5",
"express-validator": "^5.2.0",
"glob": "^7.1.6",
"got": "^11.6.2",
"got": "^11.7.0",
"gulp": "^4.0.0",
"gulp-babel": "^8.0.0",
"gulp-imagemin": "^7.1.0",
@@ -42,11 +42,11 @@
"in-app-purchase": "^1.11.3",
"js2xmlparser": "^4.0.1",
"jsonwebtoken": "^8.5.1",
"jwks-rsa": "^1.9.0",
"jwks-rsa": "^1.10.1",
"lodash": "^4.17.20",
"merge-stream": "^2.0.0",
"method-override": "^3.0.0",
"moment": "^2.28.0",
"moment": "^2.29.0",
"moment-recur": "^1.0.7",
"mongoose": "^5.10.3",
"morgan": "^1.10.0",
@@ -71,7 +71,7 @@
"universal-analytics": "^0.4.23",
"useragent": "^2.1.9",
"uuid": "^8.3.0",
"validator": "^13.1.1",
"validator": "^13.1.17",
"vinyl-buffer": "^1.0.1",
"winston": "^3.3.3",
"winston-loggly-bulk": "^3.1.1",

View File

@@ -171,28 +171,32 @@ describe('highlightMentions', () => {
it('github issue 12118, method crashes when square brackets are used', async () => {
const text = '[test]';
let err;
const result = await highlightMentions(text);
try {
await highlightMentions(text);
} catch (e) {
err = e;
}
expect(err).to.be.undefined;
expect(result[0]).to.equal(text);
});
it('github issue 12138, method crashes when regex chars are used in code block', async () => {
const text = '`[test]`';
let err;
const result = await highlightMentions(text);
try {
await highlightMentions(text);
} catch (e) {
err = e;
}
expect(result[0]).to.equal(text);
});
expect(err).to.be.undefined;
it('github issue 12586, method crashes when empty link is used', async () => {
const text = '[]()';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
it('github issue 12586, method crashes when link without title is used', async () => {
const text = '[](www.google.com)';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
});

View File

@@ -0,0 +1,44 @@
import * as xmlMarshaller from '../../../../website/server/libs/xmlMarshaller';
describe('xml marshaller marshalls user data', () => {
const minimumUser = {
pinnedItems: [],
unpinnedItems: [],
inbox: {},
};
function userDataWith (fields) {
return { ...minimumUser, ...fields };
}
it('maps the newMessages field to have id as a value in a list.', () => {
const userData = userDataWith({
newMessages: {
'283171a5-422c-4991-bc78-95b1b5b51629': {
name: 'The Language Hackers',
value: true,
},
'283171a6-422c-4991-bc78-95b1b5b51629': {
name: 'The Bug Hackers',
value: false,
},
},
});
const xml = xmlMarshaller.marshallUserData(userData);
expect(xml).to.equal(`<user>
<inbox/>
<newMessages>
<id>283171a5-422c-4991-bc78-95b1b5b51629</id>
<name>The Language Hackers</name>
<value>true</value>
</newMessages>
<newMessages>
<id>283171a6-422c-4991-bc78-95b1b5b51629</id>
<name>The Bug Hackers</name>
<value>false</value>
</newMessages>
</user>`);
});
});

View File

@@ -4891,14 +4891,6 @@
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz",
"integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q=="
},
"@types/mini-css-extract-plugin": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/@types/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.1.tgz",
"integrity": "sha512-+mN04Oszdz9tGjUP/c1ReVwJXxSniLd7lF++sv+8dkABxVNthg6uccei+4ssKxRHGoMmPxdn7uBdJWONSJGTGQ==",
"requires": {
"@types/webpack": "*"
}
},
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -6444,6 +6436,11 @@
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -6547,22 +6544,19 @@
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.0.0-beta.7",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.7.tgz",
"integrity": "sha512-xQ8/GZmRPdQ3EinnE0IXwdVoDzh7Dowo0MowoyBuScEBXrRabw6At5/IdtD3waKklKW5PGokPsm8KRN6rvQ1cw==",
"version": "npm:vue-loader@16.0.0-beta.8",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.8.tgz",
"integrity": "sha512-oouKUQWWHbSihqSD7mhymGPX1OQ4hedzAHyvm8RdyHh6m3oIvoRF+NM45i/bhNOlo8jCnuJhaSUf/6oDjv978g==",
"requires": {
"@types/mini-css-extract-plugin": "^0.9.1",
"chalk": "^3.0.0",
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^1.2.3",
"merge-source-map": "^1.1.0",
"source-map": "^0.6.1"
"loader-utils": "^2.0.0"
},
"dependencies": {
"chalk": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -6573,6 +6567,16 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -6965,9 +6969,9 @@
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
},
"amplitude-js": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/amplitude-js/-/amplitude-js-7.1.1.tgz",
"integrity": "sha512-grEQf0p4V/q4aIcGYdGEJ6EquBXu91R/RorsYTQvh9O6sxjpwHf5vSDICQJq7twEElBrSHoSF77GUvC9ZTBj4A==",
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/amplitude-js/-/amplitude-js-7.2.2.tgz",
"integrity": "sha512-Y1/kw/NaxMdqwBnkbjPywpjPbSmuVuszFLQ9tw56P6YraljvbMC93afHQvLC/3zG5SImDnykbg/8HxrWFDhsLg==",
"requires": {
"@amplitude/ua-parser-js": "0.7.24",
"blueimp-md5": "^2.10.0",
@@ -7435,13 +7439,14 @@
}
},
"asn1.js": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
"integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
"integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
"requires": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
"minimalistic-assert": "^1.0.0",
"safer-buffer": "^2.1.0"
},
"dependencies": {
"bn.js": {
@@ -8192,14 +8197,14 @@
"integrity": "sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg=="
},
"blueimp-md5": {
"version": "2.17.0",
"resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.17.0.tgz",
"integrity": "sha512-x5PKJHY5rHQYaADj6NwPUR2QRCUVSggPzrUKkeENpj871o9l9IefJbO2jkT5UvYykeOK9dx0VmkIo6dZ+vThYw=="
"version": "2.18.0",
"resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz",
"integrity": "sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q=="
},
"bn.js": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
"integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
"integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
},
"body-parser": {
"version": "1.19.0",
@@ -8269,9 +8274,9 @@
"integrity": "sha512-vlGn0bcySYl/iV+BGA544JkkZP5LB3jsmkeKLFQakCOwCM3AOk7VkldBz4jrzSe+Z0Ezn99NVXa1o45cQY4R6A=="
},
"bootstrap-vue": {
"version": "2.17.0",
"resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.17.0.tgz",
"integrity": "sha512-cYeoVTxAP0koMseCwSl4KQgcdm2M6COfn3F0UaecGkaWy6Vf5Jl+VjDctaR4SvkHZ693tHjW28s/icbsGtKRjQ==",
"version": "2.17.3",
"resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.17.3.tgz",
"integrity": "sha512-upX5LktvsecbBsLnjwaSQoDCsYfneToOweOaERt+Cc/cT6P44zODzpxZa54HZEAbE5gSE5mJmDacUrs02qAR8g==",
"requires": {
"@nuxt/opencollective": "^0.3.0",
"bootstrap": ">=4.5.2 <5.0.0",
@@ -8488,15 +8493,15 @@
}
},
"browserify-sign": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz",
"integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
"integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
"requires": {
"bn.js": "^5.1.1",
"browserify-rsa": "^4.0.1",
"create-hash": "^1.2.0",
"create-hmac": "^1.1.7",
"elliptic": "^6.5.2",
"elliptic": "^6.5.3",
"inherits": "^2.0.4",
"parse-asn1": "^5.1.5",
"readable-stream": "^3.6.0",
@@ -9646,12 +9651,12 @@
}
},
"create-ecdh": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
"integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
"integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
"requires": {
"bn.js": "^4.1.0",
"elliptic": "^6.0.0"
"elliptic": "^6.5.3"
},
"dependencies": {
"bn.js": {
@@ -15241,9 +15246,9 @@
}
},
"moment": {
"version": "2.28.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.28.0.tgz",
"integrity": "sha512-Z5KOjYmnHyd/ukynmFd/WwyXHd7L4J9vTI/nn5Ap9AVUgaAE15VvQ9MOGmJJygEUklupqIrFnor/tjTwRU+tQw=="
"version": "2.29.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.0.tgz",
"integrity": "sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA=="
},
"move-concurrently": {
"version": "1.0.1",
@@ -16043,13 +16048,12 @@
}
},
"parse-asn1": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
"integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
"integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
"requires": {
"asn1.js": "^4.0.0",
"asn1.js": "^5.2.0",
"browserify-aes": "^1.0.0",
"create-hash": "^1.1.0",
"evp_bytestokey": "^1.0.0",
"pbkdf2": "^3.0.3",
"safe-buffer": "^5.1.1"
@@ -18390,9 +18394,9 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sass": {
"version": "1.26.10",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz",
"integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==",
"version": "1.26.11",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.26.11.tgz",
"integrity": "sha512-W1l/+vjGjIamsJ6OnTe0K37U2DBO/dgsv2Z4c89XQ8ZOO6l/VwkqwLSqoYzJeJs6CLuGSTRWc91GbQFL3lvrvw==",
"requires": {
"chokidar": ">=2.0.0 <4.0.0"
}
@@ -20870,9 +20874,9 @@
}
},
"validator": {
"version": "13.1.1",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.1.1.tgz",
"integrity": "sha512-8GfPiwzzRoWTg7OV1zva1KvrSemuMkv07MA9TTl91hfhe+wKrsrgVN4H2QSFd/U/FhiU3iWPYVgvbsOGwhyFWw=="
"version": "13.1.17",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.1.17.tgz",
"integrity": "sha512-zL5QBoemJ3jYFb2/j38y7ljhwYGXVLUp8H6W1nVxadnAOvUOytec+L7BHh1oBQ82/TzWXHd+GSaxUWp4lROkLg=="
},
"vary": {
"version": "1.1.2",
@@ -20977,9 +20981,9 @@
}
},
"vue-router": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz",
"integrity": "sha512-BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A=="
"version": "3.4.5",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.5.tgz",
"integrity": "sha512-ioRY5QyDpXM9TDjOX6hX79gtaMXSVDDzSlbIlyAmbHNteIL81WIVB2e+jbzV23vzxtoV0krdS2XHm+GxFg+Nxg=="
},
"vue-style-loader": {
"version": "4.1.2",
@@ -21086,9 +21090,9 @@
}
},
"chokidar": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz",
"integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==",
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz",
"integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==",
"optional": true,
"requires": {
"anymatch": "~3.1.1",
@@ -21191,9 +21195,9 @@
"integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
},
"webpack": {
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz",
"integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==",
"version": "4.44.2",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz",
"integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==",
"requires": {
"@webassemblyjs/ast": "1.9.0",
"@webassemblyjs/helper-module-context": "1.9.0",
@@ -21233,21 +21237,29 @@
"minimist": "^1.2.5"
}
},
"serialize-javascript": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
"integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
"requires": {
"randombytes": "^2.1.0"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"terser-webpack-plugin": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz",
"integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==",
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
"integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
"requires": {
"cacache": "^12.0.2",
"find-cache-dir": "^2.1.0",
"is-wsl": "^1.1.0",
"schema-utils": "^1.0.0",
"serialize-javascript": "^3.1.0",
"serialize-javascript": "^4.0.0",
"source-map": "^0.6.1",
"terser": "^4.1.2",
"webpack-sources": "^1.4.0",

View File

@@ -24,12 +24,12 @@
"@vue/cli-plugin-unit-mocha": "^4.5.6",
"@vue/cli-service": "^4.5.6",
"@vue/test-utils": "1.0.0-beta.29",
"amplitude-js": "^7.1.1",
"amplitude-js": "^7.2.2",
"axios": "^0.19.2",
"axios-progress-bar": "^1.2.0",
"babel-eslint": "^10.1.0",
"bootstrap": "^4.5.2",
"bootstrap-vue": "^2.17.0",
"bootstrap-vue": "^2.17.3",
"chai": "^4.1.2",
"core-js": "^3.6.5",
"eslint": "^6.8.0",
@@ -42,9 +42,9 @@
"intro.js": "^2.9.3",
"jquery": "^3.5.1",
"lodash": "^4.17.20",
"moment": "^2.28.0",
"moment": "^2.29.0",
"nconf": "^0.10.0",
"sass": "^1.26.10",
"sass": "^1.26.11",
"sass-loader": "^8.0.2",
"smartbanner.js": "^1.16.0",
"svg-inline-loader": "^0.8.2",
@@ -52,14 +52,14 @@
"svgo": "^1.3.2",
"svgo-loader": "^2.2.1",
"uuid": "^8.3.0",
"validator": "^13.1.1",
"validator": "^13.1.17",
"vue": "^2.6.12",
"vue-cli-plugin-storybook": "^0.6.1",
"vue-mugen-scroll": "^0.2.6",
"vue-router": "^3.4.3",
"vue-router": "^3.4.5",
"vue-template-compiler": "^2.6.12",
"vuedraggable": "^2.24.1",
"vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0",
"webpack": "^4.44.1"
"webpack": "^4.44.2"
}
}

View File

@@ -1,33 +1,51 @@
.promo_armoire_backgrounds_202009 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -434px;
background-position: 0px -452px;
width: 423px;
height: 147px;
}
.promo_fall_festival_2019 {
.promo_fall_customizations {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -244px;
width: 336px;
height: 207px;
}
.promo_fall_festival_2019 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -532px 0px;
width: 360px;
height: 189px;
}
.promo_fall_festival_2020 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -532px 0px;
background-position: -532px -190px;
width: 360px;
height: 174px;
}
.promo_mystery_202009 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -532px -175px;
background-position: 0px -600px;
width: 282px;
height: 147px;
}
.promo_mystery_202010 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -283px -600px;
width: 282px;
height: 147px;
}
.promo_take_this {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -532px -323px;
background-position: -893px -170px;
width: 96px;
height: 69px;
}
.promo_vampire_potions {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -424px -452px;
width: 423px;
height: 147px;
}
.scene_positivity {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px 0px;
@@ -36,7 +54,13 @@
}
.scene_squall {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -361px -244px;
background-position: -893px 0px;
width: 141px;
height: 169px;
}
.scene_strength {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -337px -244px;
width: 192px;
height: 129px;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,576 +1,606 @@
.weapon_special_3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1629px -1371px;
width: 90px;
height: 90px;
}
.weapon_special_aetherCrystals {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1629px -1280px;
width: 114px;
height: 90px;
}
.weapon_special_bardInstrument {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1306px -1315px;
width: 90px;
height: 90px;
}
.weapon_special_fencingFoil {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1397px -1315px;
width: 90px;
height: 90px;
}
.weapon_special_lunarScythe {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1488px -1315px;
width: 90px;
height: 90px;
}
.weapon_special_mammothRiderSpear {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1428px -1315px;
background-position: -190px -1466px;
width: 90px;
height: 90px;
}
.weapon_special_nomadsScimitar {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1519px -1315px;
background-position: -281px -1466px;
width: 90px;
height: 90px;
}
.weapon_special_pageBanner {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -190px -1529px;
background-position: -372px -1466px;
width: 90px;
height: 90px;
}
.weapon_special_roguishRainbowMessage {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -281px -1529px;
background-position: -463px -1466px;
width: 90px;
height: 90px;
}
.weapon_special_skeletonKey {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -372px -1529px;
background-position: -554px -1466px;
width: 90px;
height: 90px;
}
.weapon_special_tachi {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -463px -1529px;
background-position: -645px -1466px;
width: 90px;
height: 90px;
}
.weapon_special_taskwoodsLantern {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -554px -1529px;
background-position: -736px -1466px;
width: 90px;
height: 90px;
}
.weapon_special_tridentOfCrashingTides {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -645px -1529px;
background-position: -827px -1466px;
width: 90px;
height: 90px;
}
.weapon_warrior_0 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -736px -1529px;
background-position: -918px -1466px;
width: 90px;
height: 90px;
}
.weapon_warrior_1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -827px -1529px;
background-position: -1009px -1466px;
width: 90px;
height: 90px;
}
.weapon_warrior_2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -918px -1529px;
background-position: -1100px -1466px;
width: 90px;
height: 90px;
}
.weapon_warrior_3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1009px -1529px;
background-position: -1191px -1466px;
width: 90px;
height: 90px;
}
.weapon_warrior_4 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1100px -1529px;
background-position: -1282px -1466px;
width: 90px;
height: 90px;
}
.weapon_warrior_5 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1191px -1529px;
background-position: -1373px -1466px;
width: 90px;
height: 90px;
}
.weapon_warrior_6 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1282px -1529px;
background-position: -1464px -1466px;
width: 90px;
height: 90px;
}
.weapon_wizard_0 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1373px -1529px;
background-position: -1555px -1466px;
width: 90px;
height: 90px;
}
.weapon_wizard_1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1464px -1529px;
background-position: -1646px -1466px;
width: 90px;
height: 90px;
}
.weapon_wizard_2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1555px -1529px;
background-position: 0px -1608px;
width: 90px;
height: 90px;
}
.weapon_wizard_3 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1646px -1529px;
background-position: -91px -1608px;
width: 90px;
height: 90px;
}
.weapon_wizard_4 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: 0px -1671px;
background-position: -182px -1608px;
width: 90px;
height: 90px;
}
.weapon_wizard_5 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -91px -1671px;
background-position: -273px -1608px;
width: 90px;
height: 90px;
}
.weapon_wizard_6 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -182px -1671px;
background-position: -364px -1608px;
width: 90px;
height: 90px;
}
.Pet_Currency_Gem {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1214px -1671px;
background-position: -1603px -1608px;
width: 68px;
height: 68px;
}
.Pet_Currency_Gem1x {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1778px -596px;
background-position: -1780px -596px;
width: 15px;
height: 13px;
}
.Pet_Currency_Gem2x {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1746px -828px;
background-position: -1748px -828px;
width: 30px;
height: 26px;
}
.PixelPaw-Gold {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1746px -724px;
background-position: -1748px -724px;
width: 51px;
height: 51px;
}
.PixelPaw {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1746px -776px;
background-position: -1748px -776px;
width: 51px;
height: 51px;
}
.PixelPaw002 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -856px;
background-position: -1750px -856px;
width: 51px;
height: 51px;
}
.avatar_floral_healer {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -1401px;
background-position: -906px -1315px;
width: 99px;
height: 99px;
}
.avatar_floral_rogue {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1128px -1315px;
background-position: -1006px -1315px;
width: 99px;
height: 99px;
}
.avatar_floral_warrior {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1228px -1315px;
background-position: -1106px -1315px;
width: 99px;
height: 99px;
}
.avatar_floral_wizard {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1328px -1315px;
background-position: -1206px -1315px;
width: 99px;
height: 99px;
}
.avatar_snowball_healer {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -856px;
background-position: -1629px -856px;
width: 120px;
height: 105px;
}
.avatar_snowball_rogue {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -962px;
background-position: -1629px -962px;
width: 120px;
height: 105px;
}
.avatar_snowball_warrior {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -1068px;
background-position: -1629px -1068px;
width: 120px;
height: 105px;
}
.avatar_snowball_wizard {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -1174px;
background-position: -1629px -1174px;
width: 120px;
height: 105px;
}
.empty_bottles {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -222px -1466px;
background-position: -138px -1699px;
width: 64px;
height: 54px;
}
.ghost {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -273px -1671px;
background-position: -455px -1608px;
width: 90px;
height: 90px;
}
.inventory_present {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1100px -944px;
background-position: -1320px -1164px;
width: 68px;
height: 68px;
}
.inventory_present_01 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1712px -1280px;
background-position: -1720px -1371px;
width: 68px;
height: 68px;
}
.inventory_present_02 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1727px -1401px;
background-position: -220px -324px;
width: 68px;
height: 68px;
}
.inventory_present_03 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -220px -203px;
background-position: -660px -435px;
width: 68px;
height: 68px;
}
.inventory_present_04 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -220px -272px;
background-position: -660px -504px;
width: 68px;
height: 68px;
}
.inventory_present_05 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -220px -341px;
background-position: -660px -573px;
width: 68px;
height: 68px;
}
.inventory_present_06 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -660px -435px;
background-position: -880px -655px;
width: 68px;
height: 68px;
}
.inventory_present_07 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -660px -504px;
background-position: -880px -724px;
width: 68px;
height: 68px;
}
.inventory_present_08 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -660px -573px;
background-position: -880px -793px;
width: 68px;
height: 68px;
}
.inventory_present_09 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -880px -655px;
background-position: -1100px -875px;
width: 68px;
height: 68px;
}
.inventory_present_10 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -880px -724px;
background-position: -1100px -944px;
width: 68px;
height: 68px;
}
.inventory_present_11 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -880px -793px;
background-position: -1100px -1013px;
width: 68px;
height: 68px;
}
.inventory_present_12 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1100px -875px;
background-position: -1320px -1095px;
width: 68px;
height: 68px;
}
.inventory_special_birthday {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1100px -1013px;
background-position: -1320px -1233px;
width: 68px;
height: 68px;
}
.inventory_special_congrats {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1320px -1095px;
background-position: -637px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_fortify {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1320px -1164px;
background-position: -706px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_getwell {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1320px -1233px;
background-position: -775px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_goodluck {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -455px -1671px;
background-position: -844px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_greeting {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -524px -1671px;
background-position: -913px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_nye {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -593px -1671px;
background-position: -982px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_opaquePotion {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -662px -1671px;
background-position: -1051px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_seafoam {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -731px -1671px;
background-position: -1120px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_shinySeed {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -800px -1671px;
background-position: -1189px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_snowball {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -869px -1671px;
background-position: -1258px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_spookySparkles {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -938px -1671px;
background-position: -1327px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_thankyou {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1007px -1671px;
background-position: -1396px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_trinket {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1076px -1671px;
background-position: -1465px -1608px;
width: 68px;
height: 68px;
}
.inventory_special_valentine {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1145px -1671px;
background-position: -1534px -1608px;
width: 68px;
height: 68px;
}
.knockout {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1407px -1251px;
background-position: -1407px -1245px;
width: 120px;
height: 47px;
}
.pet_key {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1283px -1671px;
background-position: -1672px -1608px;
width: 68px;
height: 68px;
}
.rebirth_orb {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1352px -1671px;
background-position: 0px -1699px;
width: 68px;
height: 68px;
}
.seafoam_star {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -364px -1671px;
background-position: -546px -1608px;
width: 90px;
height: 90px;
}
.shop_armoire {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1421px -1671px;
background-position: -69px -1699px;
width: 68px;
height: 68px;
}
.zzz {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -962px;
background-position: -1750px -962px;
width: 40px;
height: 40px;
}
.zzz_light {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -908px;
background-position: -1750px -908px;
width: 40px;
height: 40px;
}
.notif_inventory_present_01 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -1003px;
background-position: -1750px -1003px;
width: 28px;
height: 28px;
}
.notif_inventory_present_02 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -1032px;
background-position: -1750px -1032px;
width: 28px;
height: 28px;
}
.notif_inventory_present_03 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -1068px;
background-position: -1750px -1068px;
width: 28px;
height: 28px;
}
.notif_inventory_present_04 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -1097px;
background-position: -1750px -1097px;
width: 28px;
height: 28px;
}
.notif_inventory_present_05 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -1126px;
background-position: -1750px -1126px;
width: 28px;
height: 28px;
}
.notif_inventory_present_06 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -1174px;
background-position: -1750px -1174px;
width: 28px;
height: 28px;
}
.notif_inventory_present_07 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -1203px;
background-position: -1750px -1203px;
width: 28px;
height: 28px;
}
.notif_inventory_present_08 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1748px -1232px;
background-position: -1750px -1232px;
width: 28px;
height: 28px;
}
.notif_inventory_present_09 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1712px -1368px;
background-position: -1744px -1280px;
width: 28px;
height: 28px;
}
.notif_inventory_present_10 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1741px -1368px;
background-position: -1773px -1280px;
width: 28px;
height: 28px;
}
.notif_inventory_present_11 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1770px -1368px;
background-position: -1744px -1309px;
width: 28px;
height: 28px;
}
.notif_inventory_present_12 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1727px -1470px;
background-position: -1773px -1309px;
width: 28px;
height: 28px;
}
.notif_inventory_special_birthday {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1778px -449px;
background-position: -1780px -449px;
width: 20px;
height: 24px;
}
.notif_inventory_special_congrats {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1778px -524px;
background-position: -1780px -524px;
width: 20px;
height: 22px;
}
.notif_inventory_special_getwell {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1778px -547px;
background-position: -1780px -547px;
width: 20px;
height: 22px;
}
.notif_inventory_special_goodluck {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1778px -422px;
background-position: -1780px -422px;
width: 20px;
height: 26px;
}
.notif_inventory_special_greeting {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1778px -573px;
background-position: -1780px -573px;
width: 20px;
height: 22px;
}
.notif_inventory_special_nye {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1777px -828px;
background-position: -1779px -828px;
width: 24px;
height: 26px;
}
.notif_inventory_special_thankyou {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1778px -474px;
background-position: -1780px -474px;
width: 20px;
height: 24px;
}
.notif_inventory_special_valentine {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1778px -499px;
background-position: -1780px -499px;
width: 20px;
height: 24px;
}
.npc_bailey {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1737px -1529px;
background-position: -1737px -1466px;
width: 60px;
height: 72px;
}
.npc_justin {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -1280px;
background-position: -220px -203px;
width: 84px;
height: 120px;
}
.npc_matt {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -932px -1315px;
background-position: -710px -1315px;
width: 195px;
height: 138px;
}
@@ -582,7 +612,7 @@
}
.banner_flair_dysheartener {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1712px -1349px;
background-position: -1720px -1440px;
width: 69px;
height: 18px;
}
@@ -594,7 +624,7 @@
}
.quest_alligator {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1407px -648px;
background-position: -1407px -642px;
width: 201px;
height: 213px;
}
@@ -612,13 +642,13 @@
}
.quest_atom1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -222px -1315px;
background-position: 0px -1315px;
width: 250px;
height: 150px;
}
.quest_atom2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -724px -1315px;
background-position: -502px -1315px;
width: 207px;
height: 138px;
}
@@ -642,13 +672,13 @@
}
.quest_basilist {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: 0px -1529px;
background-position: 0px -1466px;
width: 189px;
height: 141px;
}
.quest_beetle {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1407px -862px;
background-position: -1407px -856px;
width: 204px;
height: 201px;
}
@@ -678,7 +708,7 @@
}
.quest_cow {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px 0px;
background-position: -1629px 0px;
width: 174px;
height: 213px;
}
@@ -690,13 +720,13 @@
}
.quest_dilatoryDistress1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1407px -437px;
background-position: -1407px -431px;
width: 210px;
height: 210px;
}
.quest_dilatoryDistress2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -422px;
background-position: -1629px -422px;
width: 150px;
height: 150px;
}
@@ -726,13 +756,13 @@
}
.quest_egg {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -214px;
background-position: -1629px -214px;
width: 165px;
height: 207px;
}
.quest_evilsanta {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -724px;
background-position: -1629px -724px;
width: 118px;
height: 131px;
}
@@ -762,7 +792,7 @@
}
.quest_frog {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: 0px -1315px;
background-position: -1407px 0px;
width: 221px;
height: 213px;
}
@@ -780,7 +810,7 @@
}
.quest_goldenknight2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -473px -1315px;
background-position: -251px -1315px;
width: 250px;
height: 150px;
}
@@ -810,7 +840,7 @@
}
.quest_hedgehog {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1407px -1064px;
background-position: -1407px -1058px;
width: 219px;
height: 186px;
}
@@ -858,7 +888,7 @@
}
.quest_mayhemMistiflying1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1627px -573px;
background-position: -1629px -573px;
width: 150px;
height: 150px;
}
@@ -882,13 +912,7 @@
}
.quest_moon1 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1407px -220px;
background-position: -1407px -214px;
width: 216px;
height: 216px;
}
.quest_moon2 {
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
background-position: -1407px 0px;
width: 219px;
height: 219px;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 355 KiB

After

Width:  |  Height:  |  Size: 357 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 KiB

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 KiB

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 151 KiB

View File

@@ -295,7 +295,10 @@
&-control {
&-bg { background: $gray-600; }
&-inner {
border: 1px solid $gray-300;
&:not(:focus) {
border: 1px solid $gray-300 !important;
}
opacity: 0.75;
.negative, .positive {

View File

@@ -227,7 +227,7 @@ export default {
return this.member.preferences.costume ? 'costume' : 'equipped';
},
specialMountClass () {
if (!this.avatarOnly && this.member.items.currentMount && this.member.items.currentMount.indexOf('Kangaroo') !== -1) {
if (!this.avatarOnly && this.member.items.currentMount && this.member.items.currentMount.includes('Kangaroo')) {
return 'offset-kangaroo';
}

View File

@@ -8,6 +8,8 @@
v-if="withPin"
class="badge-dialog"
@click.prevent.stop="togglePinned()"
@keypress.enter.prevent.stop="togglePinned()"
tabindex="0"
>
<pin-badge
:pinned="isPinned"
@@ -18,6 +20,8 @@
class="svg-icon icon-12 close-icon"
aria-hidden="true"
@click="hideDialog()"
@keypress.enter="hideDialog()"
tabindex="0"
v-html="icons.close"
></span>
</div>
@@ -145,10 +149,13 @@
v-else
class="btn btn-primary"
:disabled="item.key === 'gem' && gemsLeft === 0 ||
attemptingToPurchaseMoreGemsThanAreLeft || numberInvalid || item.locked"
attemptingToPurchaseMoreGemsThanAreLeft || numberInvalid || item.locked ||
!preventHealthPotion ||
!enoughCurrency(getPriceClass(), item.value * selectedAmountToBuy)"
:class="{'notEnough': !preventHealthPotion ||
!enoughCurrency(getPriceClass(), item.value * selectedAmountToBuy)}"
@click="buyItem()"
tabindex="0"
>
{{ $t('buyNow') }}
</button>
@@ -289,6 +296,10 @@
margin-top: 24px;
margin-bottom: 24px;
min-width: 6rem;
&:focus {
border: 2px solid black;
}
}
.balance {
@@ -554,12 +565,16 @@ export default {
}
const ownedPets = reduce(this.user.items.pets, (sum, petValue, petKey) => {
if (petKey.includes(this.item.key) && petValue > 0) return sum + 1;
if (petKey.includes(this.item.key) && petValue > 0
&& !petKey.includes('JackOLantern') // Jack-O-Lantern has "Ghost" version
) return sum + 1;
return sum;
}, 0);
const ownedMounts = reduce(this.user.items.mounts, (sum, mountValue, mountKey) => {
if (mountKey.includes(this.item.key) && mountValue === true) return sum + 1;
if (mountKey.includes(this.item.key) && mountValue === true
&& !mountKey.includes('JackOLantern')
) return sum + 1;
return sum;
}, 0);

View File

@@ -4,6 +4,8 @@
:id="itemId"
class="item-wrapper"
@click="click()"
@keypress.enter="click()"
tabindex="0"
>
<div
class="item"
@@ -63,7 +65,7 @@
<b-popover
v-if="showPopover"
:target="itemId"
triggers="hover"
triggers="hover, focus"
:placement="popoverPosition"
>
<slot

View File

@@ -31,6 +31,8 @@
class="filter small-text"
:class="{active: activeFilter.label === filter}"
@click="activateFilter(type, filter)"
@keypress.enter="activateFilter(type, filter)"
tabindex="0"
>
{{ $t(filter) }}
</div>
@@ -128,6 +130,7 @@
<span
class="badge-top"
@click.prevent.stop="togglePinned(ctx.item)"
@keypress.enter.prevent.stop="togglePinned(ctx.item)"
>
<pin-badge
:pinned="ctx.item.pinned"
@@ -156,6 +159,10 @@
display: block;
}
.item:focus-within .badge-pin {
display: block;
}
.tasks-column {
min-height: 556px;
}

View File

@@ -38,6 +38,9 @@
}, controlClass.up.inner]"
@click="(isUser && task.up && (!task.group.approval.requested
|| task.group.approval.approved)) ? score('up') : null"
@keypress.enter="(isUser && task.up && (!task.group.approval.requested
|| task.group.approval.approved)) ? score('up') : null"
tabindex="0"
>
<div
v-if="!isUser"
@@ -65,6 +68,9 @@
:class="controlClass.inner"
@click="isUser && !task.group.approval.requested
? score(task.completed ? 'down' : 'up' ) : null"
@keypress.enter="isUser && !task.group.approval.requested
? score(task.completed ? 'down' : 'up' ) : null"
tabindex="0"
>
<div
v-if="!isUser"
@@ -92,6 +98,8 @@
class="task-clickable-area"
:class="{'task-clickable-area-user': isUser}"
@click="edit($event, task)"
@keypress.enter="edit($event, task)"
tabindex="0"
>
<div class="d-flex justify-content-between">
<h3
@@ -103,6 +111,7 @@
v-if="!isRunningYesterdailies && showOptions"
ref="taskDropdown"
v-b-tooltip.hover.top="$t('options')"
tabindex="0"
class="task-dropdown"
:right="task.type === 'reward'"
>
@@ -117,6 +126,8 @@
v-if="showEdit"
ref="editTaskItem"
class="dropdown-item edit-task-item"
tabindex="0"
@keypress.enter="edit($event, task)"
>
<span class="dropdown-icon-item">
<span
@@ -130,6 +141,8 @@
v-if="isUser"
class="dropdown-item"
@click="moveToTop"
tabindex="0"
@keypress.enter="moveToTop"
>
<span class="dropdown-icon-item">
<span
@@ -143,6 +156,8 @@
v-if="isUser"
class="dropdown-item"
@click="moveToBottom"
tabindex="0"
@keypress.enter="moveToBottom"
>
<span class="dropdown-icon-item">
<span
@@ -156,6 +171,8 @@
v-if="showDelete"
class="dropdown-item"
@click="destroy"
tabindex="0"
@keypress.enter="destroy"
>
<span class="dropdown-icon-item delete-task-item">
<span
@@ -185,7 +202,9 @@
? 'expand': 'collapse'}Checklist`)"
class="collapse-checklist mb-2 d-flex align-items-center expand-toggle"
:class="{open: !task.collapseChecklist}"
tabindex="0"
@click="collapseChecklist(task)"
@keypress.enter="collapseChecklist(task)"
>
<div
v-once
@@ -207,10 +226,12 @@
<input
:id="`checklist-${item.id}-${random}`"
class="custom-control-input"
tabindex="0"
type="checkbox"
:checked="item.completed"
:disabled="castingSpell || !isUser"
@change="toggleChecklistItem(item)"
@keypress.enter="toggleChecklistItem(item)"
>
<label
v-markdown="item.text"
@@ -330,6 +351,9 @@
}, controlClass.down.inner]"
@click="(isUser && task.down && (!task.group.approval.requested
|| task.group.approval.approved)) ? score('down') : null"
@keypress.enter="(isUser && task.down && (!task.group.approval.requested
|| task.group.approval.approved)) ? score('down') : null"
tabindex="0"
>
<div
v-if="!isUser"
@@ -350,6 +374,8 @@
class="right-control d-flex align-items-center justify-content-center reward-control"
:class="controlClass.bg"
@click="isUser ? score('down') : null"
@keypress.enter="isUser ? score('down') : null"
tabindex="0"
>
<div
class="svg-icon"
@@ -373,6 +399,19 @@
<!-- eslint-disable max-len -->
<style lang="scss" scoped>
@import '~@/assets/scss/colors.scss';
.task-best-control-inner-habit:focus {
transition: none;
}
*:focus {
outline: none;
transition: none;
border: $purple-400 solid 1px;
:not(task-best-control-inner-habit) { // round icon
border-radius: 2px;
}
}
.control-bottom-box {
border-bottom-left-radius: 0 !important;
@@ -395,14 +434,16 @@
border-radius: 2px;
position: relative;
&:hover:not(.task-not-editable) {
&:hover:not(.task-not-editable),
&:focus-within:not(.task-not-editable) {
box-shadow: 0 1px 8px 0 rgba($black, 0.12), 0 4px 4px 0 rgba($black, 0.16);
z-index: 11;
}
}
.task:not(.groupTask) {
&:hover {
&:hover,
&:focus-within {
.left-control, .right-control, .task-content {
border-color: $purple-400;
}
@@ -410,7 +451,8 @@
}
.task.groupTask {
&:hover:not(.task-not-editable) {
&:hover:not(.task-not-editable),
&:focus-within:not(.task-not-editable) {
border: $purple-400 solid 1px;
border-radius: 3px;
margin: -1px; // to counter the border width
@@ -455,10 +497,16 @@
.task-clickable-area {
padding: 7px 8px;
padding-bottom: 0px;
border: transparent solid 1px;
&-user {
padding-right: 0px;
}
&:focus {
border-radius: 2px;
border: $purple-400 solid 1px;
}
}
.task-title + .task-dropdown ::v-deep .dropdown-menu {
@@ -482,6 +530,20 @@
opacity: 1;
}
.task:focus-within ::v-deep .habitica-menu-dropdown .habitica-menu-dropdown-toggle {
opacity: 1;
}
.task ::v-deep .habitica-menu-dropdown:focus-within {
opacity: 1;
border: $purple-400 solid 1px;
border-radius: 2px;
}
.task ::v-deep .habitica-menu-dropdown {
border: transparent solid 1px;
}
.task-clickable-area ::v-deep .habitica-menu-dropdown.open .habitica-menu-dropdown-toggle {
opacity: 1;
@@ -494,20 +556,26 @@
color: $purple-400 !important;
}
.task-clickable-area ::v-deep .habitica-menu-dropdown .habitica-menu-dropdown-toggle:focus-within .svg-icon {
color: $purple-400 !important;
}
.task-dropdown {
max-height: 16px;
max-height: 18px;
}
.task-dropdown ::v-deep .dropdown-menu {
.dropdown-item {
cursor: pointer !important;
transition: none;
border: transparent solid 1px;
* {
transition: none;
}
&:hover {
&:hover,
&:focus {
color: $purple-300;
.svg-icon.push-to-top, .svg-icon.push-to-bottom {
@@ -516,6 +584,11 @@
}
}
}
&:focus {
border-radius: 2px;
border: $purple-400 solid 1px;
}
}
}
@@ -551,14 +624,10 @@
}
}
.checklist {
&.isOpen {
.checklist.isOpen {
margin-bottom: 2px;
}
margin-top: -3px;
}
.collapse-checklist {
padding: 2px 6px;
border-radius: 1px;
@@ -567,8 +636,10 @@
line-height: 1.2;
text-align: center;
color: $gray-200;
border: transparent solid 1px;
&.open {
&:focus {
border: $purple-400 solid 1px;
}
span {
@@ -706,6 +777,11 @@
transition-duration: 0.15s;
transition-property: border-color, background, color;
transition-timing-function: ease-in;
border: transparent solid 1px;
&:focus {
border: $purple-400 solid 1px;
}
}
.left-control {
border-top-left-radius: 2px;
@@ -1012,7 +1088,6 @@ export default {
},
edit (e, task) {
if (this.isRunningYesterdailies || !this.showEdit) return;
const target = e.target || e.srcElement;
/*

View File

@@ -1,4 +1,6 @@
import Vue from 'vue';
import merge from 'lodash/merge';
import Avatar from '@/components/avatar';
import generateStore from '@/store';
@@ -6,14 +8,10 @@ context('avatar.vue', () => {
let Constructr;
let vm;
beforeEach(() => {
Constructr = Vue.extend(Avatar);
vm = new Constructr({
propsData: {
member: {
const baseMember = {
stats: {
buffs: {},
class: 'warrior',
},
preferences: {
hair: {},
@@ -23,9 +21,14 @@ context('avatar.vue', () => {
equipped: {},
},
},
},
},
}).$mount();
};
beforeEach(() => {
Constructr = Vue.extend(Avatar);
vm = new Constructr({
propsData: { member: baseMember },
});
vm.$store = generateStore();
});
@@ -36,11 +39,11 @@ context('avatar.vue', () => {
describe('hasClass', () => {
beforeEach(() => {
vm.member = {
vm.member = merge({
stats: { lvl: 17 },
preferences: { disableClasses: true },
flags: { classSelected: false },
};
}, baseMember);
});
it('accurately reports class status', () => {
@@ -54,14 +57,6 @@ context('avatar.vue', () => {
});
describe('isBuffed', () => {
beforeEach(() => {
vm.member = {
stats: {
buffs: {},
},
};
});
it('accurately reports if buffed', () => {
expect(vm.isBuffed).to.equal(undefined);
@@ -72,29 +67,23 @@ context('avatar.vue', () => {
});
describe('paddingTop', () => {
beforeEach(() => {
vm.member = {
items: {},
};
});
xit('defaults to 27px', () => {
vm.avatarOnly = true;
expect(vm.paddingTop).to.equal('27px');
});
it('is 24px if user has a pet', () => {
vm.member.items = {
vm.member.items = merge({
currentPet: { name: 'Foo' },
};
}, baseMember.items);
expect(vm.paddingTop).to.equal('24px');
});
it('is 0px if user has a mount', () => {
vm.member.items = {
currentMount: { name: 'Bar' },
};
vm.member.items = merge({
currentMount: 'Bar',
}, baseMember.items);
expect(vm.paddingTop).to.equal('0px');
});
@@ -106,28 +95,25 @@ context('avatar.vue', () => {
});
describe('costumeClass', () => {
beforeEach(() => {
vm.member = {
preferences: {},
};
});
it('returns if showing equipped gear', () => {
expect(vm.costumeClass).to.equal('equipped');
});
it('returns if wearing a costume', () => {
vm.member.preferences = { costume: true };
vm.member.preferences = { costume: true, hair: {} };
vm.member.items.gear.costume = {};
expect(vm.costumeClass).to.equal('costume');
});
});
describe('visualBuffs', () => {
it('returns an array of buffs', () => {
vm.member = {
vm.member = merge({
stats: {
class: 'warrior',
},
};
}, baseMember);
expect(vm.visualBuffs).to.include({ snowball: 'avatar_snowball_warrior' });
expect(vm.visualBuffs).to.include({ spookySparkles: 'ghost' });
@@ -138,7 +124,10 @@ context('avatar.vue', () => {
describe('backgroundClass', () => {
beforeEach(() => {
vm.member.preferences = { background: 'pony' };
vm.member.preferences = {
hair: {},
background: 'pony',
};
});
it('shows the background', () => {
@@ -161,17 +150,11 @@ context('avatar.vue', () => {
describe('specialMountClass', () => {
it('checks if riding a Kangaroo', () => {
vm.member = {
stats: {
class: 'None',
},
items: {},
};
expect(vm.specialMountClass).to.equal(null);
vm.member.items = {
currentMount: ['Kangaroo'],
currentMount: 'Kangaroo',
gear: { equipped: {} },
};
expect(vm.specialMountClass).to.equal('offset-kangaroo');
@@ -180,24 +163,22 @@ context('avatar.vue', () => {
describe('skinClass', () => {
it('returns current skin color', () => {
vm.member = {
stats: {},
vm.member = merge({
preferences: {
skin: 'blue',
},
};
}, baseMember);
expect(vm.skinClass).to.equal('skin_blue');
});
it('returns if sleep or not', () => {
vm.member = {
stats: {},
vm.member = merge({
preferences: {
skin: 'blue',
sleep: false,
},
};
}, baseMember);
expect(vm.skinClass).to.equal('skin_blue');
@@ -210,14 +191,14 @@ context('avatar.vue', () => {
context('methods', () => {
describe('getGearClass', () => {
beforeEach(() => {
vm.member = {
vm.member = merge({
items: {
gear: {
equipped: { Hat: 'Fancy Tophat' },
},
},
preferences: { costume: false },
};
}, baseMember);
});
it('returns undefined if no match', () => {
@@ -242,7 +223,7 @@ context('avatar.vue', () => {
});
beforeEach(() => {
vm.member = {
vm.member = merge({
items: {
gear: {
equipped: {
@@ -254,13 +235,13 @@ context('avatar.vue', () => {
},
},
preferences: { costume: false },
};
}, baseMember);
});
});
describe('show avatar', () => {
beforeEach(() => {
vm.member = {
vm.member = merge({
stats: {
buffs: {
snowball: false,
@@ -269,7 +250,7 @@ context('avatar.vue', () => {
shinySeed: false,
},
},
};
}, baseMember);
});
it('does if not showing visual buffs', () => {
expect(vm.showAvatar()).to.equal(true);

View File

@@ -1,3 +1,4 @@
import Vue from 'vue';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import ChatCard from '@/components/chat/chatCard.vue';
@@ -5,6 +6,7 @@ import Store from '@/libs/store';
const localVue = createLocalVue();
localVue.use(Store);
localVue.use(Vue.directive('b-tooltip', {}));
describe('ChatCard', () => {
function createMessage (text) {

View File

@@ -0,0 +1,109 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import Home from '@/components/static/home.vue';
import Store from '@/libs/store';
import * as Analytics from '@/libs/analytics';
const localVue = createLocalVue();
localVue.use(Store);
describe('Home', () => {
let registerStub;
let socialAuthStub;
let store;
let wrapper;
function mountWrapper (query) {
return shallowMount(Home, {
store,
localVue,
mocks: {
$t: string => string,
$route: { query: query || {} },
},
});
}
async function fillOutUserForm (username, email, password) {
await wrapper.find('#usernameInput').setValue(username);
await wrapper.find('input[type=email]').setValue(email);
await wrapper.findAll('input[type=password]').setValue(password);
}
beforeEach(() => {
registerStub = sinon.stub();
socialAuthStub = sinon.stub();
store = new Store({
state: {},
getters: {},
actions: {
'auth:register': registerStub,
'auth:socialAuth': socialAuthStub,
'auth:verifyUsername': () => Promise.resolve({}),
},
});
sinon.stub(Analytics, 'track');
wrapper = mountWrapper();
});
afterEach(sinon.restore);
it('has a visible title', () => {
expect(wrapper.find('h1').text()).to.equal('motivateYourself');
});
describe('signup form', () => {
it('registers a user from the form', async () => {
const username = 'newUser';
const email = 'rookie@habitica.com';
const password = 'ImmaG3tProductive!';
await fillOutUserForm(username, email, password);
await wrapper.find('form').trigger('submit');
expect(registerStub.calledOnce).to.be.true;
expect(registerStub.getCall(0).args[1]).to.deep.equal({
username,
email,
password,
passwordConfirm: password,
groupInvite: '',
});
});
it('registers a user with group invite if groupInvite in the query', async () => {
const groupInvite = 'TheBestGroup';
wrapper = mountWrapper({ groupInvite });
await fillOutUserForm('invitedUser', 'invited@habitica.com', '1veGotFri3ndsHooray!');
await wrapper.find('form').trigger('submit');
expect(registerStub.calledOnce).to.be.true;
expect(registerStub.getCall(0).args[1].groupInvite).to.equal(groupInvite);
});
it('registers a user with group invite if p in the query', async () => {
const p = 'ThePiGroup';
wrapper = mountWrapper({ p });
await fillOutUserForm('alsoInvitedUser', 'invited2@habitica.com', '1veGotFri3nds2!');
await wrapper.find('form').trigger('submit');
expect(registerStub.calledOnce).to.be.true;
expect(registerStub.getCall(0).args[1].groupInvite).to.equal(p);
});
it('registers a user with group invite invite if both p and groupInvite are in the query', async () => {
const groupInvite = 'StillTheBestGroup';
wrapper = mountWrapper({ p: 'LesserGroup', groupInvite });
await fillOutUserForm('doublyInvitedUser', 'invited3@habitica.com', '1veGotSm4rtFri3nds!');
await wrapper.find('form').trigger('submit');
expect(registerStub.calledOnce).to.be.true;
expect(registerStub.getCall(0).args[1].groupInvite).to.equal(groupInvite);
});
});
});

View File

@@ -20,7 +20,7 @@ describe('Notifications', () => {
lvl: 0,
},
flags: {},
preferences: {},
preferences: { suppressModals: {} },
party: {
quest: {
},
@@ -55,6 +55,7 @@ describe('Notifications', () => {
expect(wrapper.vm.userHasClass).to.be.true;
});
describe('user exp notifcation', () => {
it('notifies when user gets more exp', () => {
const expSpy = sinon.spy(wrapper.vm, 'exp');

View File

@@ -1,4 +1,4 @@
import { mount, createLocalVue } from '@vue/test-utils';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import TaskColumn from '@/components/tasks/column.vue';
import Store from '@/libs/store';
@@ -7,10 +7,6 @@ localVue.use(Store);
describe('Task Column', () => {
let wrapper;
let store; let
getters;
let habits; let taskListOverride; let
tasks;
function makeWrapper (additionalSetup = {}) {
const type = 'habit';
@@ -19,9 +15,12 @@ describe('Task Column', () => {
};
const stubs = ['b-modal']; // <b-modal> is a custom component and not tested here
return mount(TaskColumn, {
propsData: {
type,
return shallowMount(TaskColumn, {
propsData: { type },
store: {
getters: {
'tasks:getFilteredTaskList': () => [],
},
},
mocks,
stubs,
@@ -56,6 +55,9 @@ describe('Task Column', () => {
});
describe('Computed Properties', () => {
let taskListOverride;
let habits;
beforeEach(() => {
habits = [
{ id: 1 },
@@ -67,14 +69,14 @@ describe('Task Column', () => {
{ id: 4 },
];
getters = {
const getters = {
// (...) => { ... } will return a value
// (...) => (...) => { ... } will return a function
// Task Column expects a function
'tasks:getFilteredTaskList': () => () => habits,
};
store = new Store({ getters });
const store = new Store({ getters });
wrapper = makeWrapper({ store });
});
@@ -103,6 +105,8 @@ describe('Task Column', () => {
});
describe('Methods', () => {
let tasks;
describe('Filter By Tags', () => {
beforeEach(() => {
tasks = [

View File

@@ -6,6 +6,19 @@ const localVue = createLocalVue();
localVue.use(Store);
describe('Tasks User', () => {
function createWrapper (challengeTag) {
const store = new Store({
state: { user: { data: { tags: [challengeTag] } } },
getters: {},
});
return shallowMount(User, {
store,
localVue,
mocks: { $t: s => s },
stubs: ['b-tooltip'],
});
}
describe('Computed Properties', () => {
it('should render a challenge tag under challenge header in tag filter popup when the challenge is active', () => {
const activeChallengeTag = {
@@ -13,20 +26,7 @@ describe('Tasks User', () => {
name: 'Challenge1',
challenge: true,
};
const state = {
user: {
data: {
tags: [activeChallengeTag],
},
},
};
const getters = {};
const store = new Store({ state, getters });
const wrapper = shallowMount(User, {
store,
localVue,
});
const wrapper = createWrapper(activeChallengeTag);
const computedTagsByType = wrapper.vm.tagsByType;
expect(computedTagsByType.challenges.tags.length).to.equal(1);
@@ -40,20 +40,7 @@ describe('Tasks User', () => {
name: 'Challenge1',
challenge: false,
};
const state = {
user: {
data: {
tags: [inactiveChallengeTag],
},
},
};
const getters = {};
const store = new Store({ state, getters });
const wrapper = shallowMount(User, {
store,
localVue,
});
const wrapper = createWrapper(inactiveChallengeTag);
const computedTagsByType = wrapper.vm.tagsByType;
expect(computedTagsByType.challenges.tags.length).to.equal(0);

View File

@@ -1,7 +1,4 @@
{
"limitedEdition": "Limited Edition",
"seasonalEdition": "Seasonal Edition",
"winterColors": "Winter Colors",
"annoyingFriends": "Annoying Friends",
"annoyingFriendsText": "Got snowballed <%= count %> times by party members.",
"alarmingFriends": "Alarming Friends",
@@ -61,7 +58,6 @@
"nye2": "Happy New Year! May you earn many a Perfect Day.",
"nye3": "Happy New Year! May your To-Do list stay short and sweet.",
"nye4": "Happy New Year! May you not get attacked by a raging Hippogriff.",
"holidayCard": "Received a holiday card!",
"mightyBunnySet": "Mighty Bunny (Warrior)",
"magicMouseSet": "Magic Mouse (Mage)",
"lovingPupSet": "Loving Pup (Healer)",

View File

@@ -3,16 +3,12 @@
"earnedRewardForDevotion": "You have earned <%= reward %> for being committed to improving your life.",
"nextRewardUnlocksIn": "Check-ins until your next prize: <%= numberOfCheckinsLeft %>",
"awesome": "Awesome!",
"totalCount": "<%= count %> total count",
"countLeft": "Check-ins until next reward: <%= count %>",
"incentivesDescription": "When it comes to building habits, consistency is key. Each day you check-in you get closer to a prize.",
"totalCheckins": "<%= count %> Check-Ins",
"checkinEarned": "Your Check-In Counter went up!",
"unlockedCheckInReward": "You unlocked a Check-In Prize!",
"totalCheckinsTitle": "Total Check-Ins",
"checkinProgressTitle": "Progress until next",
"incentiveBackgroundsUnlockedWithCheckins": "Locked Plain Backgrounds will unlock with Daily Check-Ins.",
"checkinReceivedAllRewardsMessage": "You have received all the Check-In prizes available! Congratulations!",
"oneOfAllPetEggs": "one of each standard Pet Egg",
"twoOfAllPetEggs": "two of each standard Pet Egg",
"threeOfAllPetEggs": "three of each standard Pet Egg",

View File

@@ -1,34 +0,0 @@
{
"habiticaBackSoon": "Don't worry, Habitica will be back soon!",
"importantMaintenance": "We are doing important maintenance that we estimate will last until 10pm Pacific Time (5am UTC).",
"maintenance": "Maintenance",
"maintenanceMoreInfo": "Want more information about the maintenance? <%= linkStart %>Check out our info page<%= linkEnd %>.",
"noDamageKeepStreaks": "You will NOT take damage or lose streaks!",
"thanksForPatience": "Thanks for your patience!",
"twitterMaintenanceUpdates": "For the most recent updates, watch our <a href='https://twitter.com/habitica'>Twitter</a>, where we will be posting status information.",
"veteranPetAward": "At the end, you will receive a Veteran pet!",
"maintenanceInfoTitle": "Information about Upcoming Maintenance to Habitica",
"maintenanceInfoWhat": "What is happening?",
"maintenanceInfoWhatText": "On May 21, Habitica will be down for maintenance for most of the day. You will not take any damage or have your account harmed during that weekend, even if you cant log in to check off your Dailies in time! We will be working very hard to make the downtime as short as possible, and will be posting regular updates on <a href='https://twitter.com/habitica' target='_blank'>our Twitter account</a>. At the end of the downtime, to thank everyone for their patience, you will all receive a rare pet!",
"maintenanceInfoWhy": "Why is this happening?",
"maintenanceInfoWhyText": "For the past several months, we have been thoroughly revamping Habitica behind-the-scenes. Specifically, we have rewritten the API. While it may not look much different on the surface, its a whole new world underneath. This will allow us WAY more flexibility when we want to build features in the future, and lead to improved performance!",
"maintenanceInfoTechDetails": "Want more details on the technical side of the process? Visit <a href='http://devs.habitica.com/' target='_blank'>The Forge, our dev blog</a>.",
"maintenanceInfoMore": "More Information",
"maintenanceInfoAccountChanges": "What changes will I see to my account after the rewrite is complete?",
"maintenanceInfoAccountChangesText": "At first, there wont be any notable changes aside from performance improvements for features such as Challenges. If you notice any changes that shouldnt be there, email us at <%= hrefTechAssistanceEmail %> and we will investigate them for you!",
"maintenanceInfoAddFeatures": "What kind of features will this allow Habitica to add?",
"maintenanceInfoAddFeaturesText": "Completing this rewrite will allow us to start building out improved chat and Guilds, plans for organizations and families, and additional productivity features like Monthlies and the ability to record yesterdays activity! Those are all involved features on their own, so it will take time to build them, but until we were finished with this rewrite, there was no way we could start them.",
"maintenanceInfoHowLong": "How long will the maintenance take?",
"maintenanceInfoHowLongText": "We have to migrate tasks and data for all 1.3 million Habitica users -- not an easy task! We anticipate that it will take place between approximately 1pm Pacific Time (8pm UTC) and 10pm Pacific Time (5am UTC). Rest assured that were doing everything we can to make it go as quickly as possible! You can follow <a href='https://twitter.com/habitica' target='_blank'>updates on our Twitter</a>.",
"maintenanceInfoStatsAffected": "How will my Dailies, Streaks, Buffs, and Quests be affected?",
"maintenanceInfoStatsAffectedText1": "You will NOT take any damage or lose any streaks that weekend, but otherwise, your day will reset normally! Dailies that you checked will become unchecked, buffs will reset, etc. If you are in a Collection Quest, you will still find items. If you are in a Boss Battle, you will still deal damage to the Boss, but the Boss will not deal damage to you. (Even monsters need a break!)",
"maintenanceInfoStatsAffectedText2": "After a lot of thought, our team concluded that this was the most fair way to handle the fact that many users will not be able to check off their Dailies normally during the maintenance. Were sorry for any inconvenience this causes!",
"maintenanceInfoSeeTasks": "What if I need to see my task list?",
"maintenanceInfoSeeTasksText": "If you know that you will need to see your task list on Saturday to remind yourself what you have to do, we recommend that before the maintenance begins, you take a screenshot of your tasks so that you can use it as a reference.",
"maintenanceInfoRarePet": "What kind of rare pet will I receive?",
"maintenanceInfoRarePetText": "To thank you for your patience during the downtime, everyone will get a rare Veteran Pet. If youve never received a Veteran Pet before, you will receive a Veteran Wolf. If you already have a Veteran Wolf, you will receive a Veteran Tiger. And if you already have a Veteran Wolf and a Veteran Tiger, you will receive a never-before-seen Veteran pet! After the migration is completed, it may take several hours for your pet to show up, but never fear, everyone will get one.",
"maintenanceInfoWho": "Who worked on this massive project?",
"maintenanceInfoWhoText": "Were glad you asked! It was spearheaded by our amazing contributor paglias, with lots of help from Blade, TheHollidayInn, SabreCat, Victor Pudeyev, TheUnknown, and Alys.",
"maintenanceInfoTesting": "The new version was also tirelessly tested by a bunch of our amazing open-source volunteers. Thank you -- we couldn't have done this without you."
}

View File

@@ -1,20 +1,3 @@
{
"merch" : "Merchandise",
"merchandiseDescription": "Looking for t-shirts, mugs, or stickers to show off your Habitica pride? Click here!",
"merch-teespring-summary" : "Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-goto" : "Get a Habitica T-shirt",
"merch-teespring-mug-summary" : "Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-mug-goto" : "Get a Habitica Mug",
"merch-teespring-eu-summary" : "EUROPEAN VERSION : Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-eu-goto" : "Get a Habitica T-shirt (EU)",
"merch-teespring-mug-eu-summary" : "EUROPEAN VERSION : Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-mug-eu-goto" : "Get a Habitica Mug (EU)",
"merch-stickermule-summary" : "Stick proud Melior wherever you (or someone else) need a reminder of both present and future accomplishments!",
"merch-stickermule-goto" : "Get Habitica stickers"
"merch" : "Merchandise"
}

View File

@@ -1,7 +1,6 @@
{
"messageLostItem": "Your <%= itemText %> broke.",
"messageTaskNotFound": "Task not found.",
"messageDuplicateTaskID": "A task with that ID already exists.",
"messageTagNotFound": "Tag not found.",
"messagePetNotFound": ":pet not found in user.items.pets",
"messageFoodNotFound": ":food not found in user.items.food",
@@ -12,7 +11,6 @@
"messageLikesFood": "<%= egg %> really likes <%= foodText %>!",
"messageDontEnjoyFood": "<%= egg %> eats <%= foodText %> but doesn't seem to enjoy it.",
"messageBought": "Bought <%= itemText %>",
"messageEquipped": " <%= itemText %> equipped.",
"messageUnEquipped": "<%= itemText %> unequipped.",
"messageMissingEggPotion": "You're missing either that egg or that potion",
"messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.",
@@ -24,10 +22,7 @@
"messageDropFood": "You've found <%= dropText %>!",
"messageDropEgg": "You've found a <%= dropText %> Egg!",
"messageDropPotion": "You've found a <%= dropText %> Hatching Potion!",
"messageDropQuest": "You've found a quest!",
"messageDropMysteryItem": "You open the box and find <%= dropText %>!",
"messageFoundQuest": "You've found the quest \"<%= questText %>\"!",
"messageAlreadyPurchasedGear": "You purchased this gear in the past, but do not currently own it. You can buy it again in the rewards column on the tasks page.",
"messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.",
"previousGearNotOwned": "You need to purchase a lower level gear before this one.",
"messageHealthAlreadyMax": "You already have maximum health.",
@@ -36,12 +31,6 @@
"armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropText %>. What's that doing in here?",
"armoireExp": "You wrestle with the Armoire and gain Experience. Take that!",
"messageInsufficientGems": "Not enough gems!",
"messageAuthPasswordMustMatch": ":password and :confirmPassword don't match",
"messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required",
"messageAuthEmailTaken": "Email already taken",
"messageAuthNoUserFound": "No user found.",
"messageAuthMustBeLoggedIn": "You must be logged in.",
"messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request",
"messageGroupAlreadyInParty": "Already in a party, try refreshing.",
"messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!",
"messageGroupRequiresInvite": "Can't join a group you're not invited to.",
@@ -55,7 +44,6 @@
"messageGroupChatSpam": "Whoops, looks like you're posting too many messages! Please wait a minute and try again. The Tavern chat only holds 200 messages at a time, so Habitica encourages posting longer, more thoughtful messages and consolidating replies. Can't wait to hear what you have to say. :)",
"messageCannotLeaveWhileQuesting": "You cannot accept this party invitation while you are in a quest. If you'd like to join this party, you must first abort your quest, which you can do from your party screen. You will be given back the quest scroll.",
"messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.",
"messageUserOperationNotFound": "<%= operation %> operation not found",
"messageNotificationNotFound": "Notification not found.",
"messageNotAbleToBuyInBulk": "This item cannot be purchased in quantities above 1.",
"notificationsRequired": "Notification ids are required.",

View File

@@ -1,6 +1,6 @@
{
"jsDisabledHeading": "Alas! Your browser doesn't have JavaScript enabled",
"jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly",
"jsDisabledText": "Habitica can't properly display the site without it!",
"jsDisabledLink": "Please enable JavaScript to continue!"
}

View File

@@ -6,7 +6,6 @@
"welcomeBack": "Welcome back!",
"justin": "Justin",
"justinIntroMessage1": "Hello there! You must be new here. My name is <strong>Justin</strong>, and I'll be your guide in Habitica.",
"justinIntroMessage2": "To start, you'll need to create an avatar.",
"justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?",
"justinIntroMessageUsername": "Before we begin, lets figure out what to call you. Below youll find a display name and username Ive generated for you. After youve picked a display name and username, well get started by creating an avatar!",
"justinIntroMessageAppearance": "So how would you like to look? Dont worry, you can change this later.",
@@ -15,7 +14,6 @@
"next": "Next",
"randomize": "Randomize",
"mattBoch": "Matt Boch",
"mattShall": "Shall I bring you your steed, <%= name %>? Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!",
"mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. Starting at level 3, you will find eggs and potions to hatch pets with. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into hardy mounts.",
"welcomeToTavern": "Welcome to The Tavern!",
"sleepDescription": "Need a break? Check into Daniel's Inn to pause some of Habitica's more difficult game mechanics:",
@@ -28,20 +26,9 @@
"staffAndModerators": "Staff and Moderators",
"communityGuidelinesIntro": "Habitica tries to create a welcoming environment for users of all ages and backgrounds, especially in public spaces like the Tavern. If you have any questions, please consult our <a href='/static/community-guidelines' target='_blank'>Community Guidelines</a>.",
"acceptCommunityGuidelines": "I agree to follow the Community Guidelines",
"daniel": "Daniel",
"danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.",
"danielText2": "Be warned: If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.",
"danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...",
"danielText2Broken": "Oh... If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn...",
"worldBossEvent": "World Boss Event",
"worldBossDescription": "World Boss Description",
"alexander": "Alexander the Merchant",
"welcomeMarket": "Welcome to the Market! Buy hard-to-find eggs and potions! Sell your extras! Commission useful services! Come see what we have to offer.",
"welcomeMarketMobile": "Welcome to the Market! Buy hard-to-find eggs and potions! Come see what we have to offer.",
"displayItemForGold": "Do you want to sell a <strong><%= itemType %></strong>?",
"displayEggForGold": "Do you want to sell a <strong><%= itemType %> Egg</strong>?",
"displayPotionForGold": "Do you want to sell a <strong><%= itemType %> Potion</strong>?",
"sellForGold": "Sell it for <%= gold %> Gold",
"howManyToSell": "How many would you like to sell?",
"yourBalance": "Your balance",
"sell": "Sell",
@@ -72,10 +59,7 @@
"unpinnedItem": "You unpinned <%= item %>! It will no longer display in your Rewards column.",
"cannotUnpinArmoirPotion": "The Health Potion and Enchanted Armoire cannot be unpinned.",
"purchasedItem": "You bought <%= itemName %>",
"ian": "Ian",
"ianText": "Welcome to the Quest Shop! Here you can use Quest Scrolls to battle monsters with your friends. Be sure to check out our fine array of Quest Scrolls for purchase on the right!",
"ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!",
"ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...",
"featuredQuests": "Featured Quests!",
"cannotBuyItem": "You can't buy this item.",
"mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.",
@@ -97,14 +81,8 @@
"newBaileyUpdate": "New Bailey Update!",
"tellMeLater": "Tell Me Later",
"dismissAlert": "Dismiss This Alert",
"donateText1": "Adds 20 Gems to your account. Gems are used to buy special in-game items, such as shirts and hairstyles.",
"donateText2": "Help support Habitica",
"donateText3": "Habitica is an open source project that depends on our users for support. The money you spend on gems helps us keep the servers running, maintain a small staff, develop new features, and provide incentives for our volunteer programmers. Thank you for your generosity!",
"donationDesc": "20 Gems, Donation to Habitica",
"payWithCard": "Pay with Card",
"payNote": "Note: PayPal sometimes takes a long time to clear. We recommend paying with card.",
"card": "Credit Card (using Stripe)",
"amazonInstructions": "Click the button to pay using Amazon Payments",
"paymentMethods": "Purchase using",
"paymentSuccessful": "Your payment was successful!",
"paymentYouReceived": "You received:",
@@ -114,25 +92,10 @@
"success": "Success!",
"classGear": "Class Gear",
"classGearText": "Congratulations on choosing a class! I've added your new basic weapon to your inventory. Take a look below to equip it!",
"classStats": "These are your class's Stats; they affect the game-play. Each time you level up, you get one Point to allocate to a particular Stat. Hover over each Stat for more information.",
"autoAllocate": "Auto Allocate",
"autoAllocateText": "If 'Automatic Allocation' is selected, your avatar gains Stats automatically based on your tasks' Stats, which you can find in <strong>TASK > Edit > Advanced Settings > Stat Allocation</strong>. Eg, if you hit the gym often, and your 'Gym' Daily is set to 'Strength', you'll gain Strength automatically.",
"spells": "Skills",
"spellsText": "You can now unlock class-specific skills. You'll see your first at level 11. Your mana replenishes 10 points per day, plus 1 point per completed <a target='_blank' href='http://habitica.wikia.com/wiki/Todos'>To-Do</a>.",
"skillsTitle": "Skills",
"toDo": "To-Do",
"moreClass": "For more information on the class-system, see <a href='http://habitica.wikia.com/wiki/Class_System' target='_blank'>Wikia</a>.",
"tourWelcome": "Welcome to Habitica! This is your To-Do list. Check off a task to proceed!",
"tourExp": "Great job! Checking off a task gives you Experience and Gold!",
"tourDailies": "This column is for Daily tasks. To proceed, enter a task you should do every day! <strong>Sample Dailies</strong>: <strong>Make Bed</strong>, <strong>Floss</strong>, <strong>Check Work Email</strong>",
"tourCron": "Splendid! Your Dailies will reset every day.",
"tourHP": "Watch out! If you don't complete a Daily by midnight, it will hurt you!",
"tourHabits": "This column is for good and bad Habits that you do many times a day! To proceed, click the pencil to edit the names, then click the checkmark to save.",
"tourStats": "Good Habits add Experience and Gold! Bad Habits remove health.",
"tourGP": "To proceed, buy the Training Sword with the gold you just earned!",
"tourAvatar": "<strong>Customize Your Avatar</strong><ul><li>Your avatar represents you.</li><li>Customize now, or return later.</li><li>Your avatar starts plain until you've earned Equipment!</li></ul>",
"tourScrollDown": "Be sure to scroll all the way down to see all the options! Click on your avatar again to return to the tasks page.",
"tourMuchMore": "When you're done with tasks, you can form a Party with friends, chat in the shared-interest Guilds, join Challenges, and more!",
"tourStatsPage": "This is your Stats page! Earn achievements by completing the listed tasks.",
"tourTavernPage": "Welcome to the Tavern, an all-ages chat room! You can keep your Dailies from hurting you in case of illness or travel by clicking \"Pause Damage\". Come say hi!",
"tourPartyPage": "Your Party will help you stay accountable. Invite friends to unlock a Quest Scroll!",
@@ -147,16 +110,6 @@
"tourOkay": "Okay!",
"tourAwesome": "Awesome!",
"tourSplendid": "Splendid!",
"tourNifty": "Nifty!",
"tourAvatarProceed": "Show me my tasks!",
"tourToDosBrief": "<strong>To-Do List</strong><ul><li>Check off To-Dos to earn Gold & Experience!</li><li>To-Dos never make your avatar lose Health.</li></ul>",
"tourDailiesBrief": "<strong>Daily Tasks</strong><ul><li>Dailies repeat every day.</li><li>You lose Health if you skip Dailies.</li></ul>",
"tourDailiesProceed": "I'll be careful!",
"tourHabitsBrief": "<strong>Good & Bad Habits</strong><ul><li>Good Habits award Gold & Experience.</li><li>Bad Habits make you lose Health.</li></ul>",
"tourHabitsProceed": "Makes sense!",
"tourRewardsBrief": "<strong>Reward List</strong><ul><li>Spend your hard-earned Gold here!</li><li>Purchase Equipment for your avatar, or set custom Rewards.</li></ul>",
"tourRewardsArmoire": "<strong>Reward List</strong><ul><li>Spend your hard-earned Gold here!</li><li>Purchase Equipment for your avatar, get a random prize from the Enchanted Armoire, or set custom Rewards.</li></ul>",
"tourRewardsProceed": "That's all!",
"welcomeToHabit": "Welcome to Habitica!",
"welcome1": "Create a basic avatar.",
"welcome1notes": "This avatar will represent you as you progress.",
@@ -164,8 +117,6 @@
"welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!",
"welcome3": "Progress in life and the game!",
"welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!",
"welcome4": "Avoid bad habits that drain Health (HP), or your avatar will die!",
"welcome5": "Now you'll customize your avatar and set up your tasks...",
"imReady": "Enter Habitica",
"limitedOffer": "Available until <%= date %>"
}

View File

@@ -1,9 +1,6 @@
{
"quests": "Quests",
"quest": "quest",
"whereAreMyQuests": "Quests are now available on their own page! Click on Inventory -> Quests to find them.",
"yourQuests": "Your Quests",
"questsForSale": "Quests for Sale",
"petQuests": "Pet and Mount Quests",
"unlockableQuests": "Unlockable Quests",
"goldQuests": "Masterclasser Quest Lines",
@@ -14,27 +11,16 @@
"completed": "Completed!",
"rewardsAllParticipants": "Rewards for all Quest Participants",
"rewardsQuestOwner": "Additional Rewards for Quest Owner",
"questOwnerReceived": "The Quest Owner Has Also Received",
"youWillReceive": "You Will Receive",
"questOwnerWillReceive": "The Quest Owner Will Also Receive",
"youReceived": "You've Received",
"dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.",
"questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.",
"questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...",
"inviteParty": "Invite Party to Quest",
"questInvitation": "Quest Invitation:",
"questInvitationTitle": "Quest Invitation",
"questInvitationInfo": "Invitation for the Quest <%= quest %>",
"invitedToQuest": "You were invited to the Quest <span class=\"notification-bold-blue\"><%= quest %></span>",
"askLater": "Ask Later",
"questLater": "Quest Later",
"buyQuest": "Buy Quest",
"accepted": "Accepted",
"declined": "Declined",
"rejected": "Rejected",
"pending": "Pending",
"questStart": "Once all members have either accepted or rejected, the quest begins. Only those that clicked \"accept\" will be able to participate in the quest and receive the drops. If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\". The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\".",
"questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...",
"questCollection": "+ <%= val %> quest item(s) found",
"questDamage": "+ <%= val %> damage to boss",
"begin": "Begin",
@@ -43,56 +29,20 @@
"rage": "Rage",
"collect": "Collect",
"collected": "Collected",
"collectionItems": "<%= number %> <%= items %>",
"itemsToCollect": "Items to Collect",
"bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! <strong>All damage to and from a boss is tallied on cron (your day roll-over).</strong>",
"bossDmg2": "Only participants will fight the boss and share in the quest loot.",
"bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... <strong>All damage to and from a boss is tallied on cron (your day roll-over)...</strong>",
"bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...",
"tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Rage Bar. When the Rage bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.",
"tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...",
"bossColl1": "To collect items, do your positive tasks. Quest items drop just like normal items; you can monitor your quest item drops by hovering over the quest progress icon.",
"bossColl2": "Only participants can collect items and share in the quest loot.",
"bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; you can monitor your quest item drops by hovering over the quest progress icon...",
"bossColl2Broken": "Only participants can collect items and share in the quest loot...",
"abort": "Abort",
"leaveQuest": "Leave Quest",
"sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.",
"questOwner": "Quest Owner",
"questTaskDamage": "+ <%= damage %> pending damage to boss",
"questTaskCollection": "<%= items %> items collected today",
"questOwnerNotInPendingQuest": "The quest owner has left the quest and can no longer begin it. It is recommended that you cancel it now. The quest owner will retain possession of the quest scroll.",
"questOwnerNotInRunningQuest": "The quest owner has left the quest. You can abort the quest if you need to. You can also allow it to keep running and all remaining participants will receive the quest rewards when the quest finishes.",
"questOwnerNotInPendingQuestParty": "The quest owner has left the party and can no longer begin the quest. It is recommended that you cancel it now. The quest scroll will be returned to the quest owner.",
"questOwnerNotInRunningQuestParty": "The quest owner has left the party. You can abort the quest if you need to but you can also leave it running and all remaining participants will receive the quest rewards when the quest finishes.",
"questParticipants": "Participants",
"scrolls": "Quest Scrolls",
"noScrolls": "You don't have any quest scrolls.",
"scrollsText1": "Quests require parties. If you want to quest solo,",
"scrollsText2": "create an empty party",
"scrollsPre": "You haven't unlocked this quest yet!",
"alreadyEarnedQuestLevel": "You already earned this quest by attaining Level <%= level %>.",
"alreadyEarnedQuestReward": "You already earned this quest by completing <%= priorQuest %>.",
"completedQuests": "Completed the following quests",
"mustComplete": "You must first complete <%= quest %>.",
"mustLevel": "You must be level <%= level %> to begin this quest.",
"mustLvlQuest": "You must be level <%= level %> to buy this quest!",
"mustInviteFriend": "To earn this quest, invite a friend to your Party. Invite someone now?",
"unlockByQuesting": "To unlock this quest, complete <%= title %>.",
"questConfirm": "Are you sure? Only <%= questmembers %> of your <%= totalmembers %> party members have joined this quest! Quests start automatically when all players have joined or rejected the invitation.",
"sureCancel": "Are you sure you want to cancel this quest? All invitation acceptances will be lost. The quest owner will retain possession of the quest scroll.",
"sureAbort": "Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner.",
"doubleSureAbort": "Are you double sure? Make sure they won't hate you forever!",
"questWarning": "If new players join the party before the quest starts, they will also receive an invitation. However once the quest has started, no new party members can join the quest.",
"questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...",
"bossRageTitle": "Rage",
"bossRageDescription": "When this bar fills, the boss will unleash a special attack!",
"startAQuest": "START A QUEST",
"startQuest": "Start Quest",
"whichQuestStart": "Which quest do you want to start?",
"getMoreQuests": "Get more quests",
"unlockedAQuest": "You unlocked a quest!",
"leveledUpReceivedQuest": "You leveled up to <strong>Level <%= level %></strong> and received a quest scroll!",
"questInvitationDoesNotExist": "No quest invitation has been sent out yet.",
"questInviteNotFound": "No quest invitation found.",
"guildQuestsNotSupported": "Guilds cannot be invited on quests.",
@@ -113,13 +63,9 @@
"onlyLeaderCancelQuest": "Only the group or quest leader can cancel the quest.",
"questNotPending": "There is no quest to start.",
"questOrGroupLeaderOnlyStartQuest": "Only the quest leader or group leader can force start the quest",
"createAccountReward": "Create Account",
"loginIncentiveQuest": "To unlock this quest, check in to Habitica on <%= count %> different days!",
"loginIncentiveQuestObtained": "You earned this quest by checking in to Habitica on <%= count %> different days!",
"loginReward": "<%= count %> Check-ins",
"createAccountQuest": "You received this quest when you joined Habitica! If a friend joins, they'll get one too.",
"questBundles": "Discounted Quest Bundles",
"buyQuestBundle": "Buy Quest Bundle",
"noQuestToStart": "Cant find a quest to start? Try checking out the Quest Shop in the Market for new releases!",
"pendingDamage": "<%= damage %> pending damage",
"pendingDamageLabel": "pending damage",

View File

@@ -1,19 +1,6 @@
{
"rebirthNew": "Rebirth: New Adventure Available!",
"rebirthUnlock": "You've unlocked Rebirth! This special Market item allows you to begin a new game at level 1 while keeping your tasks, achievements, pets, and more. Use it to breathe new life into Habitica if you feel you've achieved it all, or to experience new features with the fresh eyes of a beginning character!",
"rebirthBegin": "Rebirth: Begin a New Adventure",
"rebirthStartOver": "Rebirth starts your character over from Level 1.",
"rebirthAdvList1": "You return to full Health.",
"rebirthAdvList2": "You have no Experience or Gold.",
"rebirthAdvList3": "Your Habits, Dailies, and To-Dos reset to yellow, and streaks reset, except for challenge tasks.",
"rebirthAdvList4": "You have the starting class of Warrior until you earn a new class.",
"rebirthInherit": "Your new character inherits a few things from their predecessor:",
"rebirthInList1": "Tasks, history, equipment, and settings remain.",
"rebirthInList2": "Challenge, Guild, and Party memberships remain.",
"rebirthInList3": "Gems, backer tiers, and contributor levels remain.",
"rebirthInList4": "Items obtained from Gems or drops (such as pets and mounts) remain.",
"rebirthEarnAchievement": "You also earn an Achievement for beginning a new adventure!",
"beReborn": "Be Reborn",
"rebirthAchievement": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is <%= level %>. To stack this Achievement, begin your next new adventure when you've reached an even higher Level!",
"rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!",
"rebirthBegan": "Began a New Adventure",
@@ -23,7 +10,5 @@
"rebirthOrbNoLevel": "Used an Orb of Rebirth to start over.",
"rebirthPop": "Instantly restart your character as a Level 1 Warrior while retaining achievements, collectibles, and equipment. Your tasks and their history will remain but they will be reset to yellow. Your streaks will be removed except from challenge tasks. Your Gold, Experience, Mana, and the effects of all Skills will be removed. All of this will take effect immediately. For more information, see the wiki's <a href='http://habitica.wikia.com/wiki/Orb_of_Rebirth' target='_blank'>Orb of Rebirth</a> page.",
"rebirthName": "Orb of Rebirth",
"reborn": "Reborn, max level <%= reLevel %>",
"confirmReborn": "Are you sure?",
"rebirthComplete": "You have been reborn!"
}

View File

@@ -1,7 +1,4 @@
{
"limitedEdition": "Limited Edition",
"seasonalEdition": "Seasonal Edition",
"winterColors": "Winter Colors",
"annoyingFriends": "Annoying Friends",
"annoyingFriendsText": "Got snowballed <%= count %> times by party members.",
"alarmingFriends": "Alarming Friends",
@@ -61,7 +58,6 @@
"nye2": "Happy New Year! May you earn many a Perfect Day.",
"nye3": "Happy New Year! May your To-Do list stay short and sweet.",
"nye4": "Happy New Year! May you not get attacked by a raging Hippogriff.",
"holidayCard": "Received a holiday card!",
"mightyBunnySet": "Mighty Bunny (Warrior)",
"magicMouseSet": "Magic Mouse (Mage)",
"lovingPupSet": "Loving Pup (Healer)",

View File

@@ -3,16 +3,12 @@
"earnedRewardForDevotion": "You have earned <%= reward %> for being committed to improving your life.",
"nextRewardUnlocksIn": "Check-ins until your next prize: <%= numberOfCheckinsLeft %>",
"awesome": "Awesome!",
"totalCount": "<%= count %> total count",
"countLeft": "Check-ins until next reward: <%= count %>",
"incentivesDescription": "When it comes to building habits, consistency is key. Each day you check-in you get closer to a prize.",
"totalCheckins": "<%= count %> Check-Ins",
"checkinEarned": "Your Check-In Counter went up!",
"unlockedCheckInReward": "You unlocked a Check-In Prize!",
"totalCheckinsTitle": "Total Check-Ins",
"checkinProgressTitle": "Progress until next",
"incentiveBackgroundsUnlockedWithCheckins": "Locked Plain Backgrounds will unlock with Daily Check-Ins.",
"checkinReceivedAllRewardsMessage": "You have received all the Check-In prizes available! Congratulations!",
"oneOfAllPetEggs": "one of each standard Pet Egg",
"twoOfAllPetEggs": "two of each standard Pet Egg",
"threeOfAllPetEggs": "three of each standard Pet Egg",

View File

@@ -1,34 +0,0 @@
{
"habiticaBackSoon": "Don't worry, Habitica will be back soon!",
"importantMaintenance": "We are doing important maintenance that we estimate will last until 10pm Pacific Time (5am UTC).",
"maintenance": "Maintenance",
"maintenanceMoreInfo": "Want more information about the maintenance? <%= linkStart %>Check out our info page<%= linkEnd %>.",
"noDamageKeepStreaks": "You will NOT take damage or lose streaks!",
"thanksForPatience": "Thanks for your patience!",
"twitterMaintenanceUpdates": "For the most recent updates, watch our <a href='https://twitter.com/habitica'>Twitter</a>, where we will be posting status information.",
"veteranPetAward": "At the end, you will receive a Veteran pet!",
"maintenanceInfoTitle": "Information about Upcoming Maintenance to Habitica",
"maintenanceInfoWhat": "What is happening?",
"maintenanceInfoWhatText": "On May 21, Habitica will be down for maintenance for most of the day. You will not take any damage or have your account harmed during that weekend, even if you cant log in to check off your Dailies in time! We will be working very hard to make the downtime as short as possible, and will be posting regular updates on <a href='https://twitter.com/habitica' target='_blank'>our Twitter account</a>. At the end of the downtime, to thank everyone for their patience, you will all receive a rare pet!",
"maintenanceInfoWhy": "Why is this happening?",
"maintenanceInfoWhyText": "For the past several months, we have been thoroughly revamping Habitica behind-the-scenes. Specifically, we have rewritten the API. While it may not look much different on the surface, its a whole new world underneath. This will allow us WAY more flexibility when we want to build features in the future, and lead to improved performance!",
"maintenanceInfoTechDetails": "Want more details on the technical side of the process? Visit <a href='http://devs.habitica.com/' target='_blank'>The Forge, our dev blog</a>.",
"maintenanceInfoMore": "More Information",
"maintenanceInfoAccountChanges": "What changes will I see to my account after the rewrite is complete?",
"maintenanceInfoAccountChangesText": "At first, there wont be any notable changes aside from performance improvements for features such as Challenges. If you notice any changes that shouldnt be there, email us at <%= hrefTechAssistanceEmail %> and we will investigate them for you!",
"maintenanceInfoAddFeatures": "What kind of features will this allow Habitica to add?",
"maintenanceInfoAddFeaturesText": "Completing this rewrite will allow us to start building out improved chat and Guilds, plans for organizations and families, and additional productivity features like Monthlies and the ability to record yesterdays activity! Those are all involved features on their own, so it will take time to build them, but until we were finished with this rewrite, there was no way we could start them.",
"maintenanceInfoHowLong": "How long will the maintenance take?",
"maintenanceInfoHowLongText": "We have to migrate tasks and data for all 1.3 million Habitica users -- not an easy task! We anticipate that it will take place between approximately 1pm Pacific Time (8pm UTC) and 10pm Pacific Time (5am UTC). Rest assured that were doing everything we can to make it go as quickly as possible! You can follow <a href='https://twitter.com/habitica' target='_blank'>updates on our Twitter</a>.",
"maintenanceInfoStatsAffected": "How will my Dailies, Streaks, Buffs, and Quests be affected?",
"maintenanceInfoStatsAffectedText1": "You will NOT take any damage or lose any streaks that weekend, but otherwise, your day will reset normally! Dailies that you checked will become unchecked, buffs will reset, etc. If you are in a Collection Quest, you will still find items. If you are in a Boss Battle, you will still deal damage to the Boss, but the Boss will not deal damage to you. (Even monsters need a break!)",
"maintenanceInfoStatsAffectedText2": "After a lot of thought, our team concluded that this was the most fair way to handle the fact that many users will not be able to check off their Dailies normally during the maintenance. Were sorry for any inconvenience this causes!",
"maintenanceInfoSeeTasks": "What if I need to see my task list?",
"maintenanceInfoSeeTasksText": "If you know that you will need to see your task list on Saturday to remind yourself what you have to do, we recommend that before the maintenance begins, you take a screenshot of your tasks so that you can use it as a reference.",
"maintenanceInfoRarePet": "What kind of rare pet will I receive?",
"maintenanceInfoRarePetText": "To thank you for your patience during the downtime, everyone will get a rare Veteran Pet. If youve never received a Veteran Pet before, you will receive a Veteran Wolf. If you already have a Veteran Wolf, you will receive a Veteran Tiger. And if you already have a Veteran Wolf and a Veteran Tiger, you will receive a never-before-seen Veteran pet! After the migration is completed, it may take several hours for your pet to show up, but never fear, everyone will get one.",
"maintenanceInfoWho": "Who worked on this massive project?",
"maintenanceInfoWhoText": "Were glad you asked! It was spearheaded by our amazing contributor paglias, with lots of help from Blade, TheHollidayInn, SabreCat, Victor Pudeyev, TheUnknown, and Alys.",
"maintenanceInfoTesting": "The new version was also tirelessly tested by a bunch of our amazing open-source volunteers. Thank you -- we couldn't have done this without you."
}

View File

@@ -1,20 +1,3 @@
{
"merch" : "Handelsware",
"merchandiseDescription": "Looking for t-shirts, mugs, or stickers to show off your Habitica pride? Click here!",
"merch-teespring-summary" : "Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-goto" : "Kry 'n Habitica T-hemp",
"merch-teespring-mug-summary" : "Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-mug-goto" : "Kry 'n Habitica Beker",
"merch-teespring-eu-summary" : "EUROPEAN VERSION : Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-eu-goto" : "Kry 'n Habitica T-hemp (EU)",
"merch-teespring-mug-eu-summary" : "EUROPEAN VERSION : Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-mug-eu-goto" : "Kry 'n Habitica Mug (EU)",
"merch-stickermule-summary" : "Stick proud Melior wherever you (or someone else) need a reminder of both present and future accomplishments!",
"merch-stickermule-goto" : "Kry Habitica plakkers"
"merch" : "Handelsware"
}

View File

@@ -1,7 +1,6 @@
{
"messageLostItem": "Jou <%= itemText %> het gebreek.",
"messageTaskNotFound": "Taak nie gevind nie.",
"messageDuplicateTaskID": "'n Taak met daardie ID bestaan reeds.",
"messageTagNotFound": "Etiket nie gevind nie.",
"messagePetNotFound": ":pet was nie gevind in user.items.pets nie",
"messageFoodNotFound": ":food was nie gevind in user.items.food nie",
@@ -12,7 +11,6 @@
"messageLikesFood": "<%= egg %> really likes <%= foodText %>!",
"messageDontEnjoyFood": "<%= egg %> eats <%= foodText %> but doesn't seem to enjoy it.",
"messageBought": "Bought <%= itemText %>",
"messageEquipped": " <%= itemText %> equipped.",
"messageUnEquipped": "<%= itemText %> unequipped.",
"messageMissingEggPotion": "You're missing either that egg or that potion",
"messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.",
@@ -24,10 +22,7 @@
"messageDropFood": "You've found <%= dropText %>!",
"messageDropEgg": "You've found a <%= dropText %> Egg!",
"messageDropPotion": "You've found a <%= dropText %> Hatching Potion!",
"messageDropQuest": "You've found a quest!",
"messageDropMysteryItem": "You open the box and find <%= dropText %>!",
"messageFoundQuest": "You've found the quest \"<%= questText %>\"!",
"messageAlreadyPurchasedGear": "You purchased this gear in the past, but do not currently own it. You can buy it again in the rewards column on the tasks page.",
"messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.",
"previousGearNotOwned": "You need to purchase a lower level gear before this one.",
"messageHealthAlreadyMax": "You already have maximum health.",
@@ -36,12 +31,6 @@
"armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropText %>. What's that doing in here?",
"armoireExp": "Jy stoei met die Kast en ontvang Ondervinding. Vat so!",
"messageInsufficientGems": "Nie genoeg edelstene nie!",
"messageAuthPasswordMustMatch": ":password en :confirmPassword is nie dieselfde nie",
"messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword is vereis",
"messageAuthEmailTaken": "E-Pos reeds gevat",
"messageAuthNoUserFound": "Geen verbruiker gevind nie.",
"messageAuthMustBeLoggedIn": "Jy moet ingesluit wees.",
"messageAuthMustIncludeTokens": "Jy moet 'n teiken en 'n vid(verbruiker id) in jou versoek insluit",
"messageGroupAlreadyInParty": "Reeds in 'n party, probeer herlaai.",
"messageGroupOnlyLeaderCanUpdate": "Net die groep leier kan die groep op dateer!",
"messageGroupRequiresInvite": "Kan nie by 'n groep aansluit waarnatoe jy nie genooi is nie.",
@@ -55,7 +44,6 @@
"messageGroupChatSpam": "Whoops, looks like you're posting too many messages! Please wait a minute and try again. The Tavern chat only holds 200 messages at a time, so Habitica encourages posting longer, more thoughtful messages and consolidating replies. Can't wait to hear what you have to say. :)",
"messageCannotLeaveWhileQuesting": "You cannot accept this party invitation while you are in a quest. If you'd like to join this party, you must first abort your quest, which you can do from your party screen. You will be given back the quest scroll.",
"messageUserOperationProtected": "pad `<%= operation %>` was nie gespaar nie, want dit is 'n beskermde pad.",
"messageUserOperationNotFound": "<%= operation %> instruksie nie gevind nie",
"messageNotificationNotFound": "Notification not found.",
"messageNotAbleToBuyInBulk": "This item cannot be purchased in quantities above 1.",
"notificationsRequired": "Notification ids are required.",

View File

@@ -1,6 +1,6 @@
{
"jsDisabledHeading": "Aggenee! Jou webblaaier het nie JavaScript aangeskakel nie",
"jsDisabledHeadingFull": "Aggenee! Jou webblaaier het nie JavaScript aangeskakel nie, en sonder dit kan Habitica nie behoorlik werk nie",
"jsDisabledText": "Habitica kan nie behoorlik die bladsy sonder dit wys nie!",
"jsDisabledLink": "Skakel asseblief JavaScript aan om voort te gaan!"
}

View File

@@ -6,7 +6,6 @@
"welcomeBack": "Welcome back!",
"justin": "Justin",
"justinIntroMessage1": "Hello there! You must be new here. My name is <strong>Justin</strong>, and I'll be your guide in Habitica.",
"justinIntroMessage2": "To start, you'll need to create an avatar.",
"justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?",
"justinIntroMessageUsername": "Before we begin, lets figure out what to call you. Below youll find a display name and username Ive generated for you. After youve picked a display name and username, well get started by creating an avatar!",
"justinIntroMessageAppearance": "So how would you like to look? Dont worry, you can change this later.",
@@ -15,7 +14,6 @@
"next": "Next",
"randomize": "Randomize",
"mattBoch": "Matt Boch",
"mattShall": "Shall I bring you your steed, <%= name %>? Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!",
"mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. Starting at level 3, you will find eggs and potions to hatch pets with. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into hardy mounts.",
"welcomeToTavern": "Welcome to The Tavern!",
"sleepDescription": "Need a break? Check into Daniel's Inn to pause some of Habitica's more difficult game mechanics:",
@@ -28,20 +26,9 @@
"staffAndModerators": "Staff and Moderators",
"communityGuidelinesIntro": "Habitica tries to create a welcoming environment for users of all ages and backgrounds, especially in public spaces like the Tavern. If you have any questions, please consult our <a href='/static/community-guidelines' target='_blank'>Community Guidelines</a>.",
"acceptCommunityGuidelines": "I agree to follow the Community Guidelines",
"daniel": "Daniel",
"danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.",
"danielText2": "Be warned: If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.",
"danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...",
"danielText2Broken": "Oh... If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn...",
"worldBossEvent": "World Boss Event",
"worldBossDescription": "World Boss Description",
"alexander": "Alexander the Merchant",
"welcomeMarket": "Welcome to the Market! Buy hard-to-find eggs and potions! Sell your extras! Commission useful services! Come see what we have to offer.",
"welcomeMarketMobile": "Welcome to the Market! Buy hard-to-find eggs and potions! Come see what we have to offer.",
"displayItemForGold": "Do you want to sell a <strong><%= itemType %></strong>?",
"displayEggForGold": "Do you want to sell a <strong><%= itemType %> Egg</strong>?",
"displayPotionForGold": "Do you want to sell a <strong><%= itemType %> Potion</strong>?",
"sellForGold": "Sell it for <%= gold %> Gold",
"howManyToSell": "How many would you like to sell?",
"yourBalance": "Your balance",
"sell": "Sell",
@@ -72,10 +59,7 @@
"unpinnedItem": "You unpinned <%= item %>! It will no longer display in your Rewards column.",
"cannotUnpinArmoirPotion": "The Health Potion and Enchanted Armoire cannot be unpinned.",
"purchasedItem": "You bought <%= itemName %>",
"ian": "Ian",
"ianText": "Welcome to the Quest Shop! Here you can use Quest Scrolls to battle monsters with your friends. Be sure to check out our fine array of Quest Scrolls for purchase on the right!",
"ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!",
"ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...",
"featuredQuests": "Featured Quests!",
"cannotBuyItem": "You can't buy this item.",
"mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.",
@@ -97,14 +81,8 @@
"newBaileyUpdate": "New Bailey Update!",
"tellMeLater": "Tell Me Later",
"dismissAlert": "Dismiss This Alert",
"donateText1": "Adds 20 Gems to your account. Gems are used to buy special in-game items, such as shirts and hairstyles.",
"donateText2": "Help support Habitica",
"donateText3": "Habitica is an open source project that depends on our users for support. The money you spend on gems helps us keep the servers running, maintain a small staff, develop new features, and provide incentives for our volunteer programmers. Thank you for your generosity!",
"donationDesc": "20 Gems, Donation to Habitica",
"payWithCard": "Pay with Card",
"payNote": "Note: PayPal sometimes takes a long time to clear. We recommend paying with card.",
"card": "Credit Card (using Stripe)",
"amazonInstructions": "Click the button to pay using Amazon Payments",
"paymentMethods": "Purchase using",
"paymentSuccessful": "Your payment was successful!",
"paymentYouReceived": "You received:",
@@ -114,25 +92,10 @@
"success": "Success!",
"classGear": "Class Gear",
"classGearText": "Congratulations on choosing a class! I've added your new basic weapon to your inventory. Take a look below to equip it!",
"classStats": "These are your class's Stats; they affect the game-play. Each time you level up, you get one Point to allocate to a particular Stat. Hover over each Stat for more information.",
"autoAllocate": "Auto Allocate",
"autoAllocateText": "If 'Automatic Allocation' is selected, your avatar gains Stats automatically based on your tasks' Stats, which you can find in <strong>TASK > Edit > Advanced Settings > Stat Allocation</strong>. Eg, if you hit the gym often, and your 'Gym' Daily is set to 'Strength', you'll gain Strength automatically.",
"spells": "Skills",
"spellsText": "You can now unlock class-specific skills. You'll see your first at level 11. Your mana replenishes 10 points per day, plus 1 point per completed <a target='_blank' href='http://habitica.wikia.com/wiki/Todos'>To-Do</a>.",
"skillsTitle": "Skills",
"toDo": "To-Do",
"moreClass": "For more information on the class-system, see <a href='http://habitica.wikia.com/wiki/Class_System' target='_blank'>Wikia</a>.",
"tourWelcome": "Welcome to Habitica! This is your To-Do list. Check off a task to proceed!",
"tourExp": "Great job! Checking off a task gives you Experience and Gold!",
"tourDailies": "This column is for Daily tasks. To proceed, enter a task you should do every day! <strong>Sample Dailies</strong>: <strong>Make Bed</strong>, <strong>Floss</strong>, <strong>Check Work Email</strong>",
"tourCron": "Splendid! Your Dailies will reset every day.",
"tourHP": "Watch out! If you don't complete a Daily by midnight, it will hurt you!",
"tourHabits": "This column is for good and bad Habits that you do many times a day! To proceed, click the pencil to edit the names, then click the checkmark to save.",
"tourStats": "Good Habits add Experience and Gold! Bad Habits remove health.",
"tourGP": "To proceed, buy the Training Sword with the gold you just earned!",
"tourAvatar": "<strong>Customize Your Avatar</strong><ul><li>Your avatar represents you.</li><li>Customize now, or return later.</li><li>Your avatar starts plain until you've earned Equipment!</li></ul>",
"tourScrollDown": "Be sure to scroll all the way down to see all the options! Click on your avatar again to return to the tasks page.",
"tourMuchMore": "When you're done with tasks, you can form a Party with friends, chat in the shared-interest Guilds, join Challenges, and more!",
"tourStatsPage": "This is your Stats page! Earn achievements by completing the listed tasks.",
"tourTavernPage": "Welcome to the Tavern, an all-ages chat room! You can keep your Dailies from hurting you in case of illness or travel by clicking \"Pause Damage\". Come say hi!",
"tourPartyPage": "Your Party will help you stay accountable. Invite friends to unlock a Quest Scroll!",
@@ -147,16 +110,6 @@
"tourOkay": "Okay!",
"tourAwesome": "Awesome!",
"tourSplendid": "Splendid!",
"tourNifty": "Nifty!",
"tourAvatarProceed": "Show me my tasks!",
"tourToDosBrief": "<strong>To-Do List</strong><ul><li>Check off To-Dos to earn Gold & Experience!</li><li>To-Dos never make your avatar lose Health.</li></ul>",
"tourDailiesBrief": "<strong>Daily Tasks</strong><ul><li>Dailies repeat every day.</li><li>You lose Health if you skip Dailies.</li></ul>",
"tourDailiesProceed": "I'll be careful!",
"tourHabitsBrief": "<strong>Good & Bad Habits</strong><ul><li>Good Habits award Gold & Experience.</li><li>Bad Habits make you lose Health.</li></ul>",
"tourHabitsProceed": "Makes sense!",
"tourRewardsBrief": "<strong>Reward List</strong><ul><li>Spend your hard-earned Gold here!</li><li>Purchase Equipment for your avatar, or set custom Rewards.</li></ul>",
"tourRewardsArmoire": "<strong>Reward List</strong><ul><li>Spend your hard-earned Gold here!</li><li>Purchase Equipment for your avatar, get a random prize from the Enchanted Armoire, or set custom Rewards.</li></ul>",
"tourRewardsProceed": "That's all!",
"welcomeToHabit": "Welcome to Habitica!",
"welcome1": "Create a basic avatar.",
"welcome1notes": "This avatar will represent you as you progress.",
@@ -164,8 +117,6 @@
"welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!",
"welcome3": "Progress in life and the game!",
"welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!",
"welcome4": "Avoid bad habits that drain Health (HP), or your avatar will die!",
"welcome5": "Now you'll customize your avatar and set up your tasks...",
"imReady": "Enter Habitica",
"limitedOffer": "Available until <%= date %>"
}

View File

@@ -1,9 +1,6 @@
{
"quests": "Quests",
"quest": "quest",
"whereAreMyQuests": "Quests are now available on their own page! Click on Inventory -> Quests to find them.",
"yourQuests": "Your Quests",
"questsForSale": "Quests for Sale",
"petQuests": "Pet and Mount Quests",
"unlockableQuests": "Unlockable Quests",
"goldQuests": "Masterclasser Quest Lines",
@@ -14,27 +11,16 @@
"completed": "Completed!",
"rewardsAllParticipants": "Rewards for all Quest Participants",
"rewardsQuestOwner": "Additional Rewards for Quest Owner",
"questOwnerReceived": "The Quest Owner Has Also Received",
"youWillReceive": "You Will Receive",
"questOwnerWillReceive": "The Quest Owner Will Also Receive",
"youReceived": "You've Received",
"dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.",
"questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.",
"questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...",
"inviteParty": "Invite Party to Quest",
"questInvitation": "Quest Invitation:",
"questInvitationTitle": "Quest Invitation",
"questInvitationInfo": "Invitation for the Quest <%= quest %>",
"invitedToQuest": "You were invited to the Quest <span class=\"notification-bold-blue\"><%= quest %></span>",
"askLater": "Ask Later",
"questLater": "Quest Later",
"buyQuest": "Buy Quest",
"accepted": "Accepted",
"declined": "Declined",
"rejected": "Rejected",
"pending": "Pending",
"questStart": "Once all members have either accepted or rejected, the quest begins. Only those that clicked \"accept\" will be able to participate in the quest and receive the drops. If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\". The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\".",
"questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...",
"questCollection": "+ <%= val %> quest item(s) found",
"questDamage": "+ <%= val %> damage to boss",
"begin": "Begin",
@@ -43,56 +29,20 @@
"rage": "Rage",
"collect": "Collect",
"collected": "Collected",
"collectionItems": "<%= number %> <%= items %>",
"itemsToCollect": "Items to Collect",
"bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! <strong>All damage to and from a boss is tallied on cron (your day roll-over).</strong>",
"bossDmg2": "Only participants will fight the boss and share in the quest loot.",
"bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... <strong>All damage to and from a boss is tallied on cron (your day roll-over)...</strong>",
"bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...",
"tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Rage Bar. When the Rage bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.",
"tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...",
"bossColl1": "To collect items, do your positive tasks. Quest items drop just like normal items; you can monitor your quest item drops by hovering over the quest progress icon.",
"bossColl2": "Only participants can collect items and share in the quest loot.",
"bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; you can monitor your quest item drops by hovering over the quest progress icon...",
"bossColl2Broken": "Only participants can collect items and share in the quest loot...",
"abort": "Abort",
"leaveQuest": "Leave Quest",
"sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.",
"questOwner": "Quest Owner",
"questTaskDamage": "+ <%= damage %> pending damage to boss",
"questTaskCollection": "<%= items %> items collected today",
"questOwnerNotInPendingQuest": "The quest owner has left the quest and can no longer begin it. It is recommended that you cancel it now. The quest owner will retain possession of the quest scroll.",
"questOwnerNotInRunningQuest": "The quest owner has left the quest. You can abort the quest if you need to. You can also allow it to keep running and all remaining participants will receive the quest rewards when the quest finishes.",
"questOwnerNotInPendingQuestParty": "The quest owner has left the party and can no longer begin the quest. It is recommended that you cancel it now. The quest scroll will be returned to the quest owner.",
"questOwnerNotInRunningQuestParty": "The quest owner has left the party. You can abort the quest if you need to but you can also leave it running and all remaining participants will receive the quest rewards when the quest finishes.",
"questParticipants": "Participants",
"scrolls": "Quest Scrolls",
"noScrolls": "You don't have any quest scrolls.",
"scrollsText1": "Quests require parties. If you want to quest solo,",
"scrollsText2": "create an empty party",
"scrollsPre": "You haven't unlocked this quest yet!",
"alreadyEarnedQuestLevel": "You already earned this quest by attaining Level <%= level %>.",
"alreadyEarnedQuestReward": "You already earned this quest by completing <%= priorQuest %>.",
"completedQuests": "Completed the following quests",
"mustComplete": "You must first complete <%= quest %>.",
"mustLevel": "You must be level <%= level %> to begin this quest.",
"mustLvlQuest": "You must be level <%= level %> to buy this quest!",
"mustInviteFriend": "To earn this quest, invite a friend to your Party. Invite someone now?",
"unlockByQuesting": "To unlock this quest, complete <%= title %>.",
"questConfirm": "Are you sure? Only <%= questmembers %> of your <%= totalmembers %> party members have joined this quest! Quests start automatically when all players have joined or rejected the invitation.",
"sureCancel": "Are you sure you want to cancel this quest? All invitation acceptances will be lost. The quest owner will retain possession of the quest scroll.",
"sureAbort": "Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner.",
"doubleSureAbort": "Are you double sure? Make sure they won't hate you forever!",
"questWarning": "If new players join the party before the quest starts, they will also receive an invitation. However once the quest has started, no new party members can join the quest.",
"questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...",
"bossRageTitle": "Rage",
"bossRageDescription": "When this bar fills, the boss will unleash a special attack!",
"startAQuest": "START A QUEST",
"startQuest": "Start Quest",
"whichQuestStart": "Which quest do you want to start?",
"getMoreQuests": "Get more quests",
"unlockedAQuest": "You unlocked a quest!",
"leveledUpReceivedQuest": "You leveled up to <strong>Level <%= level %></strong> and received a quest scroll!",
"questInvitationDoesNotExist": "No quest invitation has been sent out yet.",
"questInviteNotFound": "No quest invitation found.",
"guildQuestsNotSupported": "Guilds cannot be invited on quests.",
@@ -113,13 +63,9 @@
"onlyLeaderCancelQuest": "Only the group or quest leader can cancel the quest.",
"questNotPending": "There is no quest to start.",
"questOrGroupLeaderOnlyStartQuest": "Only the quest leader or group leader can force start the quest",
"createAccountReward": "Create Account",
"loginIncentiveQuest": "To unlock this quest, check in to Habitica on <%= count %> different days!",
"loginIncentiveQuestObtained": "You earned this quest by checking in to Habitica on <%= count %> different days!",
"loginReward": "<%= count %> Check-ins",
"createAccountQuest": "You received this quest when you joined Habitica! If a friend joins, they'll get one too.",
"questBundles": "Discounted Quest Bundles",
"buyQuestBundle": "Buy Quest Bundle",
"noQuestToStart": "Cant find a quest to start? Try checking out the Quest Shop in the Market for new releases!",
"pendingDamage": "<%= damage %> pending damage",
"pendingDamageLabel": "pending damage",

View File

@@ -1,19 +1,6 @@
{
"rebirthNew": "Wedergeboorte: Nuwe Avontuur Beskikbaar!",
"rebirthUnlock": "Jy het Wedergeboorte ontsluit! Hierdie spesiale Mark item laat jou 'n nuwe spel op vlak 1 begin, terwyl jy jou take, prestasies, troeteldiere, en meer hou. Gebruik dit om nuwe lewe in Habitica in te blaas as jy dink jy al als bereik het, of om nuwe funksies te beleef met die vars oë van 'n begin karakter!",
"rebirthBegin": "Wedergeboorte: Begin 'n Nuwe Avontuur",
"rebirthStartOver": "Wedergeboorte begin jou karakter oor vanaf vlak 1.",
"rebirthAdvList1": "Jy keer terug tot volle Gesondheid.",
"rebirthAdvList2": "Jy het geen ondervinding of goud nie.",
"rebirthAdvList3": "Your Habits, Dailies, and To-Dos reset to yellow, and streaks reset, except for challenge tasks.",
"rebirthAdvList4": "Jy het die begin klas van Vegter tot jy 'n nuwe klas verdien.",
"rebirthInherit": "Jou nuwe karakter erf 'n paar dinge van hul voorganger:",
"rebirthInList1": "Tasks, history, equipment, and settings remain.",
"rebirthInList2": "Uitdaging, Gilde en Party lidmaatskappe bly.",
"rebirthInList3": "Edelstene, ondersteuner vlakke, en bydraer vlakke bly.",
"rebirthInList4": "Items obtained from Gems or drops (such as pets and mounts) remain.",
"rebirthEarnAchievement": "Jy bereik ook 'n Prestasie vir die begin van 'n nuwe Avontuur!",
"beReborn": "Wees Wedergebore",
"rebirthAchievement": "Jy het 'n nuwe avontuur begin! Hierdie is Wedergeboorte <%= number %> vir jou, en die hoogste Vlak jy het bereik is <%= level %>. Om hierdie Prestasie op te hoop, begin jou volgende nuwe avontuur wanneer jy 'n selfs hoër Vlak bereik het!",
"rebirthAchievement100": "Jy het 'n nuwe avontuur begin! Hierdie is Wedergeboorte <%= number %> vir jou, en jou hoogste Vlak bereik is 100 of hoër. Om hierdie bereiking op te hoop, begin jou volgende avontuur wanneer jy ten minste vlak 100 bereik het!",
"rebirthBegan": "Het 'n Nuwe Avontuur begin.",
@@ -23,7 +10,5 @@
"rebirthOrbNoLevel": "Used an Orb of Rebirth to start over.",
"rebirthPop": "Instantly restart your character as a Level 1 Warrior while retaining achievements, collectibles, and equipment. Your tasks and their history will remain but they will be reset to yellow. Your streaks will be removed except from challenge tasks. Your Gold, Experience, Mana, and the effects of all Skills will be removed. All of this will take effect immediately. For more information, see the wiki's <a href='http://habitica.wikia.com/wiki/Orb_of_Rebirth' target='_blank'>Orb of Rebirth</a> page.",
"rebirthName": "Orb van Wedergeboorte",
"reborn": "Wedergebore, hoogste vlak <%= reLevel %>",
"confirmReborn": "Is jy seker?",
"rebirthComplete": "You have been reborn!"
}

View File

@@ -1,7 +1,4 @@
{
"limitedEdition": "الإصدارات المحدودة",
"seasonalEdition": "إصدار موسمي",
"winterColors": "ألوان الشتاء",
"annoyingFriends": "الأصدقاء المزعجون",
"annoyingFriendsText": "Got snowballed <%= count %> times by party members.",
"alarmingFriends": "Alarming Friends",
@@ -61,7 +58,6 @@
"nye2": "Happy New Year! May you earn many a Perfect Day.",
"nye3": "Happy New Year! May your To-Do list stay short and sweet.",
"nye4": "Happy New Year! May you not get attacked by a raging Hippogriff.",
"holidayCard": "Received a holiday card!",
"mightyBunnySet": "Mighty Bunny (Warrior)",
"magicMouseSet": "Magic Mouse (Mage)",
"lovingPupSet": "Loving Pup (Healer)",

View File

@@ -3,16 +3,12 @@
"earnedRewardForDevotion": "You have earned <%= reward %> for being committed to improving your life.",
"nextRewardUnlocksIn": "Check-ins until your next prize: <%= numberOfCheckinsLeft %>",
"awesome": "Awesome!",
"totalCount": "<%= count %> total count",
"countLeft": "Check-ins until next reward: <%= count %>",
"incentivesDescription": "When it comes to building habits, consistency is key. Each day you check-in you get closer to a prize.",
"totalCheckins": "<%= count %> Check-Ins",
"checkinEarned": "Your Check-In Counter went up!",
"unlockedCheckInReward": "You unlocked a Check-In Prize!",
"totalCheckinsTitle": "Total Check-Ins",
"checkinProgressTitle": "Progress until next",
"incentiveBackgroundsUnlockedWithCheckins": "Locked Plain Backgrounds will unlock with Daily Check-Ins.",
"checkinReceivedAllRewardsMessage": "You have received all the Check-In prizes available! Congratulations!",
"oneOfAllPetEggs": "one of each standard Pet Egg",
"twoOfAllPetEggs": "two of each standard Pet Egg",
"threeOfAllPetEggs": "three of each standard Pet Egg",

View File

@@ -1,33 +0,0 @@
{
"habiticaBackSoon": "لا تقلق، سوف يعود Habitica قريباً!",
"importantMaintenance": "اننا نقوم بصيانة مهمة ونحن نقدرأن تستمر حتى 10 مساءاً (5 صباحا بتوقيت UTC)",
"maintenance": "الصيانة",
"maintenanceMoreInfo": "هل تريد المزيد من المعلومات حول صيانة؟ <%= linkStart %>تفحص صفحة معلومات<%= linkEnd %>.",
"noDamageKeepStreaks": "You will NOT take damage or lose streaks!",
"thanksForPatience": "شكرا على صبرك!",
"twitterMaintenanceUpdates": "لأخر التحديثات, شاهد<a href='https://twitter.com/habitica'>تويتر</a>, المكان الذي ننشر فيه معلومات التحديثات.",
"veteranPetAward": "في النهاية سوف تحصل على حيوان أليف متمرس!",
"maintenanceInfoTitle": "معلومات عن صيانة Habitica القادمة",
"maintenanceInfoWhat": "مالذي حدث؟",
"maintenanceInfoWhatText": "On May 21, Habitica will be down for maintenance for most of the day. You will not take any damage or have your account harmed during that weekend, even if you cant log in to check off your Dailies in time! We will be working very hard to make the downtime as short as possible, and will be posting regular updates on <a href='https://twitter.com/habitica' target='_blank'>our Twitter account</a>. At the end of the downtime, to thank everyone for their patience, you will all receive a rare pet!",
"maintenanceInfoWhy": "ما الذي حدث؟",
"maintenanceInfoWhyText": "خلال الأشهر العديدة الماضية أجرينا إصلاحًا شاملًا لHabitica خلف الكواليس، لقد أعدنا كتابة الAPI على وجه الخصوص. في حين أنه قد لا يبدو مختلفاً كثيراً من الخارج إلا أنه عالم جديد تمامًا من تحت. سيتيح لنا هذا المزيد من المرونة عندما نريد بناء ميزات في المستقبل، وسيؤدي إلى أداء أفضل!",
"maintenanceInfoTechDetails": "تريد المزيد من التفاصيل عن الجانب الفني من العملية؟ قم بزيارة <a href='http://devs.habitica.com/' target='_blank'>The Forge مدونة التطورات الخاصة بنا</a>.",
"maintenanceInfoMore": "المزيد من المعلومات",
"maintenanceInfoAccountChanges": "ما هي التغييرات التي سوف أراها على حسابي بعد إنتهاء اعادة الكتابة؟",
"maintenanceInfoAccountChangesText": "At first, there wont be any notable changes aside from performance improvements for features such as Challenges. If you notice any changes that shouldnt be there, email us at <%= hrefTechAssistanceEmail %> and we will investigate them for you!",
"maintenanceInfoAddFeatures": "ما هي أنواع المميزات التي سيسمح لHabitica بإضافتها؟",
"maintenanceInfoAddFeaturesText": "Completing this rewrite will allow us to start building out improved chat and Guilds, plans for organizations and families, and additional productivity features like Monthlies and the ability to record yesterdays activity! Those are all involved features on their own, so it will take time to build them, but until we were finished with this rewrite, there was no way we could start them.",
"maintenanceInfoHowLong": "كم ستستغرق الصيانة؟",
"maintenanceInfoHowLongText": "يجب علينا نقل المهام والبيانات لجميع مستخدمي Habitica البالغ عددهم ١،٣ مليون شخص - ليست مهمة سهلة! نتوقع أن يتم ذلك تقريباً ما بين الساعة الواحدة ظهراً بتوقيت المحيط الهادئ (الساعة ٨ مساءاً بتوقيت UTC) و١٠ مساءاً بتوقيت المحيط الهادئ (الساعة ٥ صباحاً بتوقيت UTC). كن مطمئناً أننا نبذل كل ما في وسعنا لجعله يسير في أسرع وقت ممكن! يمكنك متابعة <a href='https://twitter.com/habitica' target='_blank'>التحديثات على حساب تويتر الخاص بنا</a>.",
"maintenanceInfoStatsAffected": "How will my Dailies, Streaks, Buffs, and Quests be affected?",
"maintenanceInfoStatsAffectedText1": "You will NOT take any damage or lose any streaks that weekend, but otherwise, your day will reset normally! Dailies that you checked will become unchecked, buffs will reset, etc. If you are in a Collection Quest, you will still find items. If you are in a Boss Battle, you will still deal damage to the Boss, but the Boss will not deal damage to you. (Even monsters need a break!)",
"maintenanceInfoStatsAffectedText2": "After a lot of thought, our team concluded that this was the most fair way to handle the fact that many users will not be able to check off their Dailies normally during the maintenance. Were sorry for any inconvenience this causes!",
"maintenanceInfoSeeTasks": "ماذا لو كنت بحاجة لرؤية قائمة المهام الخاصة بي؟",
"maintenanceInfoSeeTasksText": "إذا كنت تعلم أنك ستحتاج إلى رؤية قائمة المهام الخاصة بك يوم السبت لتذكير نفسك بما يجب عليك القيام به، فنحن نوصي قبل بدء الصيانة بأخذ لقطة شاشة لمهامك بحيث يمكنك استخدامها كمرجع.",
"maintenanceInfoRarePet": "أي نوع من الحيوانات الأليفة النادرة سوف أتلقى؟",
"maintenanceInfoRarePetText": "لنشكركم على صبركم خلال فترة التوقف، سيحصل الجميع على حيوان نادر متمرس. إذا لم تستلم حيواناً أليفاً متمرساً قط فستحصل على ذئب متمرس. إذا كان لديك بالفعل ذئب متمرس فسوف تتلقى نمراً متمرساً. وإذا كان لديك بالفعل ذئب ونمر قدامى متمرسين فستحصل على حيوان أليف متمرس لم يسبق وأن رآه أحد! بعد اكتمال عملية التحويل قد يستغرق الأمر عدة ساعات حتى يظهر حيوانك الأليف، لكن لا تخف أبدًا، فكل شخص سيحصل على واحدة.",
"maintenanceInfoWho": "من الذي عمل على هذا المشروع الضخم؟",
"maintenanceInfoWhoText": "نحن سعداء لأنك سألت! وقد ترأسها المساهم المذهل لدينا paglias، مع الكثير من المساعدة منBlade ، TheHollidayInn ،SabreCa ،Victor Pudeyev ،TheUnknown، وAlys.",
"maintenanceInfoTesting": "كما تم اختبار الإصدار الجديد بلا كلل من قبل مجموعة من المتطوعين المذهلين في برامج مفتوحة المصدر. شكرًا لكم - لم نكن لنتمكن من فعل هذا بدونكم."
}

View File

@@ -1,14 +1,3 @@
{
"merch": "بضائع",
"merchandiseDescription": "هل تبحث عن قمصان أو أكواب أو ملصقات لإظهار فخرك بHabitica؟ انقر هنا!",
"merch-teespring-summary": "Teespring هو نظام أساسي يُسَهل على أي شخص صنع وبيع منتجات عالية الجودة يحبها الناس دون تكلفة أو مخاطرة.",
"merch-teespring-goto": "احصل على قميص Habitica",
"merch-teespring-mug-summary": "Teespring هو نظام أساسي يُسَهل على أي شخص صنع وبيع منتجات عالية الجودة يحبها الناس دون تكلفة أو مخاطرة.",
"merch-teespring-mug-goto": "احصل على كوب Habitica",
"merch-teespring-eu-summary": "إصدار أوروبي: Teespring هو نظام أساسي يُسَهل على أي شخص صنع وبيع منتجات عالية الجودة يحبها الناس دون تكلفة أو مخاطرة.",
"merch-teespring-eu-goto": "احصل على قميص Habitica (EU)",
"merch-teespring-mug-eu-summary": "إصدار أوروبي: Teespring هو نظام أساسي يُسَهل على أي شخص صنع وبيع منتجات عالية الجودة يحبها الناس دون تكلفة أو مخاطرة.",
"merch-teespring-mug-eu-goto": "احصل على كوب Habitica (EU)",
"merch-stickermule-summary": "الصق Melior فخور أينما تكون أنت (أو شخص آخر) بحاجة إلى تذكير بالإنجازات الحالية والمستقبلية!",
"merch-stickermule-goto": "احصل على ملصقات Habitica"
"merch": "بضائع"
}

View File

@@ -1,7 +1,6 @@
{
"messageLostItem": "انكسر <%= itemText %> الخاص بك.",
"messageTaskNotFound": "لم توجد المهمة.",
"messageDuplicateTaskID": "A task with that ID already exists.",
"messageTagNotFound": "الوسم لم يوجد.",
"messagePetNotFound": "لم يتم العثور على :pet في user.items.pets",
"messageFoodNotFound": "لم يتم العثور على :food في user.items.food",
@@ -12,7 +11,6 @@
"messageLikesFood": "<%= egg %> يحب <%= foodText %> كثيراً!",
"messageDontEnjoyFood": "<%= egg %> يأكل <%= foodText %> ولكنه لا يبدو مستمتعاً.",
"messageBought": "لقد اشتريت <%= itemText %>",
"messageEquipped": " <%= itemText %> equipped.",
"messageUnEquipped": "<%= itemText %> unequipped.",
"messageMissingEggPotion": "تفتقد أيًا من تلك البيضة أو جرعة الفقس.",
"messageInvalidEggPotionCombo": "لا يمكنك فقس بيض حيوانات التنقيب مع جرع فقس سحرية! جرب بيضة أخرى.",
@@ -24,10 +22,7 @@
"messageDropFood": "لقد عثرت على <%= dropText %>!",
"messageDropEgg": "لقد عثرت على بيضة <%= dropText %>!",
"messageDropPotion": "لقد عثرت على جرعة فقس <%= dropText %>!",
"messageDropQuest": "You've found a quest!",
"messageDropMysteryItem": "لقد فتحت الصندوع وعثرت على <%= dropText %>!",
"messageFoundQuest": "لقد عثرت على التنقيب \"<%= questText %>\"!",
"messageAlreadyPurchasedGear": "لقد اشتريت هذه المعدة في الماضي، ولكنك لا تملكها حاليًا. يمكنك شراؤها مرة أخرى في عمود المكافآت في صفحة المهام.",
"messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.",
"previousGearNotOwned": "أنت بحاجة إلى شراء معدة منخفضة المستوى قبل هذه.",
"messageHealthAlreadyMax": "You already have maximum health.",
@@ -36,12 +31,6 @@
"armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropText %>. What's that doing in here?",
"armoireExp": "You wrestle with the Armoire and gain Experience. Take that!",
"messageInsufficientGems": "Not enough gems!",
"messageAuthPasswordMustMatch": ":password and :confirmPassword don't match",
"messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required",
"messageAuthEmailTaken": "البريد الالكتروني مأخوذ",
"messageAuthNoUserFound": "لم يتم العثور على المستخدم.",
"messageAuthMustBeLoggedIn": "يجب أن تكون قد سجلت دخولك.",
"messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request",
"messageGroupAlreadyInParty": "بالفعل في فريق، جرّب إعادة التحميل.",
"messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!",
"messageGroupRequiresInvite": "Can't join a group you're not invited to.",
@@ -55,7 +44,6 @@
"messageGroupChatSpam": "Whoops, looks like you're posting too many messages! Please wait a minute and try again. The Tavern chat only holds 200 messages at a time, so Habitica encourages posting longer, more thoughtful messages and consolidating replies. Can't wait to hear what you have to say. :)",
"messageCannotLeaveWhileQuesting": "You cannot accept this party invitation while you are in a quest. If you'd like to join this party, you must first abort your quest, which you can do from your party screen. You will be given back the quest scroll.",
"messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.",
"messageUserOperationNotFound": "عملية <%= operation %> غير موجودة",
"messageNotificationNotFound": "الإشعار غير موجود.",
"messageNotAbleToBuyInBulk": "لا يمكن شراء هذا العنصر بكميات أكثر من ١.",
"notificationsRequired": "Notification ids are required.",

View File

@@ -1,6 +1,6 @@
{
"jsDisabledHeading": "للأسف، الجافا سكريبت غير مفعل على متصفحكم",
"jsDisabledHeadingFull": "للأسف، الجافا سكريبت غير مفعل على متصفحكم، و من دونه لا يمكن ل Habitica أن يعمل بشكل صحيح",
"jsDisabledText": "لا يمكن ل Habitica عرض الموقع بشكل صحيح من دونه",
"jsDisabledLink": "المرجو منكم تفعيل الجافا سكريبت للمواصلة"
}

View File

@@ -6,7 +6,6 @@
"welcomeBack": "Welcome back!",
"justin": "جستن",
"justinIntroMessage1": "Hello there! You must be new here. My name is <strong>Justin</strong>, and I'll be your guide in Habitica.",
"justinIntroMessage2": "To start, you'll need to create an avatar.",
"justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?",
"justinIntroMessageUsername": "Before we begin, lets figure out what to call you. Below youll find a display name and username Ive generated for you. After youve picked a display name and username, well get started by creating an avatar!",
"justinIntroMessageAppearance": "So how would you like to look? Dont worry, you can change this later.",
@@ -15,7 +14,6 @@
"next": "Next",
"randomize": "Randomize",
"mattBoch": "ماتّ بوتش",
"mattShall": "Shall I bring you your steed, <%= name %>? Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!",
"mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. Starting at level 3, you will find eggs and potions to hatch pets with. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into hardy mounts.",
"welcomeToTavern": "Welcome to The Tavern!",
"sleepDescription": "Need a break? Check into Daniel's Inn to pause some of Habitica's more difficult game mechanics:",
@@ -28,20 +26,9 @@
"staffAndModerators": "Staff and Moderators",
"communityGuidelinesIntro": "Habitica tries to create a welcoming environment for users of all ages and backgrounds, especially in public spaces like the Tavern. If you have any questions, please consult our <a href='/static/community-guidelines' target='_blank'>Community Guidelines</a>.",
"acceptCommunityGuidelines": "I agree to follow the Community Guidelines",
"daniel": "دانيل",
"danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.",
"danielText2": "Be warned: If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.",
"danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...",
"danielText2Broken": "Oh... If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn...",
"worldBossEvent": "World Boss Event",
"worldBossDescription": "World Boss Description",
"alexander": "التاجر ألكسندر",
"welcomeMarket": "مرحبًا بك في المتجر! اشتر البيض والجرعات التي يصعب العثور عليها! بع ما لا تحتاج إليه! احصل على الخدمات المفيدة! تعال وانظر إلى ما نقدمه.",
"welcomeMarketMobile": "Welcome to the Market! Buy hard-to-find eggs and potions! Come see what we have to offer.",
"displayItemForGold": "هل تريد بيع <strong><%= itemType %></strong> ؟",
"displayEggForGold": "Do you want to sell a <strong><%= itemType %> Egg</strong>?",
"displayPotionForGold": "Do you want to sell a <strong><%= itemType %> Potion</strong>?",
"sellForGold": "بعها مقابل <%= gold %> ذهب",
"howManyToSell": "How many would you like to sell?",
"yourBalance": "Your balance",
"sell": "Sell",
@@ -72,10 +59,7 @@
"unpinnedItem": "You unpinned <%= item %>! It will no longer display in your Rewards column.",
"cannotUnpinArmoirPotion": "The Health Potion and Enchanted Armoire cannot be unpinned.",
"purchasedItem": "You bought <%= itemName %>",
"ian": "إيان",
"ianText": "Welcome to the Quest Shop! Here you can use Quest Scrolls to battle monsters with your friends. Be sure to check out our fine array of Quest Scrolls for purchase on the right!",
"ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!",
"ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...",
"featuredQuests": "Featured Quests!",
"cannotBuyItem": "You can't buy this item.",
"mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.",
@@ -97,14 +81,8 @@
"newBaileyUpdate": "New Bailey Update!",
"tellMeLater": "Tell Me Later",
"dismissAlert": "اغلق هذا الإعلان",
"donateText1": "إضافة 20 جوهرة إلى حسابك. تستخدم الجواهر لشراء بعض الأشياء المميزة داخل اللعبة، كالأقمصة وتسريحات الشعر.",
"donateText2": "ساهم في دعم Habitica",
"donateText3": "Habitica is an open source project that depends on our users for support. The money you spend on gems helps us keep the servers running, maintain a small staff, develop new features, and provide incentives for our volunteer programmers. Thank you for your generosity!",
"donationDesc": "20 جوهرة، تبرع إلى Habitica",
"payWithCard": "ادفع بالبطاقة",
"payNote": "ملاحظة: في بعض الأحيان، يطول باي بال في إتمام العملية. ننصحك بالدفع عن طريق بطاقة الإئتمان.",
"card": "Credit Card (using Stripe)",
"amazonInstructions": "اضغط الزر للدفع باستخدام أمازون",
"paymentMethods": "اشتري باستخدام",
"paymentSuccessful": "Your payment was successful!",
"paymentYouReceived": "You received:",
@@ -114,25 +92,10 @@
"success": "Success!",
"classGear": "عتاد الفئة",
"classGearText": "Congratulations on choosing a class! I've added your new basic weapon to your inventory. Take a look below to equip it!",
"classStats": "These are your class's Stats; they affect the game-play. Each time you level up, you get one Point to allocate to a particular Stat. Hover over each Stat for more information.",
"autoAllocate": "توزيع تلقائي",
"autoAllocateText": "If 'Automatic Allocation' is selected, your avatar gains Stats automatically based on your tasks' Stats, which you can find in <strong>TASK > Edit > Advanced Settings > Stat Allocation</strong>. Eg, if you hit the gym often, and your 'Gym' Daily is set to 'Strength', you'll gain Strength automatically.",
"spells": "Skills",
"spellsText": "You can now unlock class-specific skills. You'll see your first at level 11. Your mana replenishes 10 points per day, plus 1 point per completed <a target='_blank' href='http://habitica.wikia.com/wiki/Todos'>To-Do</a>.",
"skillsTitle": "Skills",
"toDo": "مهمة",
"moreClass": "For more information on the class-system, see <a href='http://habitica.wikia.com/wiki/Class_System' target='_blank'>Wikia</a>.",
"tourWelcome": "مرحبا بك في Habitica! هذه هي لائحة المهمات. اشطب مهمة للتقدم!",
"tourExp": "برافو! شطب مهمة يعطيك خبرة وذهب!",
"tourDailies": "This column is for Daily tasks. To proceed, enter a task you should do every day! <strong>Sample Dailies</strong>: <strong>Make Bed</strong>, <strong>Floss</strong>, <strong>Check Work Email</strong>",
"tourCron": "رائع! يومياتك تبدأ من جديد كل يوم.",
"tourHP": "احذر! إن لم تنجز مهمة قبل منتصف الليل، ستؤذيك!",
"tourHabits": "This column is for good and bad Habits that you do many times a day! To proceed, click the pencil to edit the names, then click the checkmark to save.",
"tourStats": "العادات الجيدة تضيف خبرة وذهب! والعادات السيئة تنقص الصحة.",
"tourGP": "للتقدم، اشتر سيف تدريب بالذهب الذي كسبته للتو!",
"tourAvatar": "<strong>Customize Your Avatar</strong><ul><li>Your avatar represents you.</li><li>Customize now, or return later.</li><li>Your avatar starts plain until you've earned Equipment!</li></ul>",
"tourScrollDown": "Be sure to scroll all the way down to see all the options! Click on your avatar again to return to the tasks page.",
"tourMuchMore": "When you're done with tasks, you can form a Party with friends, chat in the shared-interest Guilds, join Challenges, and more!",
"tourStatsPage": "هذه هي صفحة الإحصائية! اكسب الإنجازات بإكمال المهمات في اللائحة.",
"tourTavernPage": "Welcome to the Tavern, an all-ages chat room! You can keep your Dailies from hurting you in case of illness or travel by clicking \"Pause Damage\". Come say hi!",
"tourPartyPage": "فريقك سيساعدك أن تتحمل المسئولية. ادعو أصدقائك لتحصل على لفيفة تنقيب!",
@@ -147,16 +110,6 @@
"tourOkay": "حسناً!",
"tourAwesome": "رائع!",
"tourSplendid": "عظيم!",
"tourNifty": "أنيق!",
"tourAvatarProceed": "أرني مهماتي!",
"tourToDosBrief": "<strong>To-Do List</strong><ul><li>Check off To-Dos to earn Gold & Experience!</li><li>To-Dos never make your avatar lose Health.</li></ul>",
"tourDailiesBrief": "<strong>Daily Tasks</strong><ul><li>Dailies repeat every day.</li><li>You lose Health if you skip Dailies.</li></ul>",
"tourDailiesProceed": "سأكون حذراً!",
"tourHabitsBrief": "<strong>Good & Bad Habits</strong><ul><li>Good Habits award Gold & Experience.</li><li>Bad Habits make you lose Health.</li></ul>",
"tourHabitsProceed": "شيء منطقي!",
"tourRewardsBrief": "<strong>Reward List</strong><ul><li>Spend your hard-earned Gold here!</li><li>Purchase Equipment for your avatar, or set custom Rewards.</li></ul>",
"tourRewardsArmoire": "<strong>Reward List</strong><ul><li>Spend your hard-earned Gold here!</li><li>Purchase Equipment for your avatar, get a random prize from the Enchanted Armoire, or set custom Rewards.</li></ul>",
"tourRewardsProceed": "هذا كل شيء!",
"welcomeToHabit": "أهلاً وسهلاً بك في Habitica!",
"welcome1": "صنع شخصية بسيطة",
"welcome1notes": "هذه الشخصية ستمثلك و أنت تتقدم.",
@@ -164,8 +117,6 @@
"welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!",
"welcome3": "تقدم في الحياة واللعبة!",
"welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!",
"welcome4": "تجنب العادات السيئة التي تنقص نقاط الحياة (HP)، و إلا ستموت شخصيتك! ",
"welcome5": "Now you'll customize your avatar and set up your tasks...",
"imReady": "ادخل Habitica",
"limitedOffer": "Available until <%= date %>"
}

View File

@@ -1,9 +1,6 @@
{
"quests": "التناقيب",
"quest": "تنقيب",
"whereAreMyQuests": "Quests are now available on their own page! Click on Inventory -> Quests to find them.",
"yourQuests": "مغامراتك",
"questsForSale": "مغامرات للبيع",
"petQuests": "Pet and Mount Quests",
"unlockableQuests": "Unlockable Quests",
"goldQuests": "Masterclasser Quest Lines",
@@ -14,27 +11,16 @@
"completed": "\t\nمنتهى!",
"rewardsAllParticipants": "Rewards for all Quest Participants",
"rewardsQuestOwner": "Additional Rewards for Quest Owner",
"questOwnerReceived": "The Quest Owner Has Also Received",
"youWillReceive": "You Will Receive",
"questOwnerWillReceive": "The Quest Owner Will Also Receive",
"youReceived": "لقد استلمت",
"dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.",
"questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.",
"questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...",
"inviteParty": "Invite Party to Quest",
"questInvitation": "Quest Invitation:",
"questInvitationTitle": "دعوة إلى مغامرة",
"questInvitationInfo": "دعوة للمشاركة في المغامرة <%= quest %>",
"invitedToQuest": "You were invited to the Quest <span class=\"notification-bold-blue\"><%= quest %></span>",
"askLater": "اسألني فيما بعد",
"questLater": "Quest Later",
"buyQuest": "شراء التنقيب",
"accepted": "مقبول",
"declined": "Declined",
"rejected": "مرفوض",
"pending": "جار الانتظار",
"questStart": "Once all members have either accepted or rejected, the quest begins. Only those that clicked \"accept\" will be able to participate in the quest and receive the drops. If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\". The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\".",
"questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...",
"questCollection": "+ <%= val %> quest item(s) found",
"questDamage": "+ <%= val %> damage to boss",
"begin": "البدء",
@@ -43,56 +29,20 @@
"rage": "غضب",
"collect": "اجمع",
"collected": "جمع",
"collectionItems": "<%= number %> <%= items %>",
"itemsToCollect": "أغراض للجمع",
"bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! <strong>All damage to and from a boss is tallied on cron (your day roll-over).</strong>",
"bossDmg2": "Only participants will fight the boss and share in the quest loot.",
"bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... <strong>All damage to and from a boss is tallied on cron (your day roll-over)...</strong>",
"bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...",
"tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Rage Bar. When the Rage bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.",
"tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...",
"bossColl1": "To collect items, do your positive tasks. Quest items drop just like normal items; you can monitor your quest item drops by hovering over the quest progress icon.",
"bossColl2": "Only participants can collect items and share in the quest loot.",
"bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; you can monitor your quest item drops by hovering over the quest progress icon...",
"bossColl2Broken": "Only participants can collect items and share in the quest loot...",
"abort": "إلغاء",
"leaveQuest": "اترك المغامرة",
"sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.",
"questOwner": "صاحب المغامرة",
"questTaskDamage": "+ <%= damage %> pending damage to boss",
"questTaskCollection": "<%= items %> items collected today",
"questOwnerNotInPendingQuest": "The quest owner has left the quest and can no longer begin it. It is recommended that you cancel it now. The quest owner will retain possession of the quest scroll.",
"questOwnerNotInRunningQuest": "The quest owner has left the quest. You can abort the quest if you need to. You can also allow it to keep running and all remaining participants will receive the quest rewards when the quest finishes.",
"questOwnerNotInPendingQuestParty": "The quest owner has left the party and can no longer begin the quest. It is recommended that you cancel it now. The quest scroll will be returned to the quest owner.",
"questOwnerNotInRunningQuestParty": "The quest owner has left the party. You can abort the quest if you need to but you can also leave it running and all remaining participants will receive the quest rewards when the quest finishes.",
"questParticipants": "Participants",
"scrolls": "لفائف التنقيب",
"noScrolls": "ليس لديك أية لفائف تنقيب.",
"scrollsText1": "التناقيب تحتاج إلى فرق. إن كنت تريد أن تشارك في تنقيب لوحدك،",
"scrollsText2": "فقم بإنشاء فريق فاضي",
"scrollsPre": "You haven't unlocked this quest yet!",
"alreadyEarnedQuestLevel": "You already earned this quest by attaining Level <%= level %>.",
"alreadyEarnedQuestReward": "You already earned this quest by completing <%= priorQuest %>.",
"completedQuests": "تم إكمال التناقيب التالية",
"mustComplete": "يجب عليك أن تكمل <%= quest %> أولاً.",
"mustLevel": "You must be level <%= level %> to begin this quest.",
"mustLvlQuest": "يجب أن تكون في المستوى <%= level %> لتتمكن من شراء هذا التنقيب!",
"mustInviteFriend": "To earn this quest, invite a friend to your Party. Invite someone now?",
"unlockByQuesting": "To unlock this quest, complete <%= title %>.",
"questConfirm": "Are you sure? Only <%= questmembers %> of your <%= totalmembers %> party members have joined this quest! Quests start automatically when all players have joined or rejected the invitation.",
"sureCancel": "Are you sure you want to cancel this quest? All invitation acceptances will be lost. The quest owner will retain possession of the quest scroll.",
"sureAbort": "Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner.",
"doubleSureAbort": "Are you double sure? Make sure they won't hate you forever!",
"questWarning": "If new players join the party before the quest starts, they will also receive an invitation. However once the quest has started, no new party members can join the quest.",
"questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...",
"bossRageTitle": "غضب",
"bossRageDescription": "When this bar fills, the boss will unleash a special attack!",
"startAQuest": "إبدأ مغامرة",
"startQuest": "إبدأ المغامرة",
"whichQuestStart": "Which quest do you want to start?",
"getMoreQuests": "احصل على المزيد من المغامرت",
"unlockedAQuest": "You unlocked a quest!",
"leveledUpReceivedQuest": "You leveled up to <strong>Level <%= level %></strong> and received a quest scroll!",
"questInvitationDoesNotExist": "No quest invitation has been sent out yet.",
"questInviteNotFound": "No quest invitation found.",
"guildQuestsNotSupported": "Guilds cannot be invited on quests.",
@@ -113,13 +63,9 @@
"onlyLeaderCancelQuest": "Only the group or quest leader can cancel the quest.",
"questNotPending": "There is no quest to start.",
"questOrGroupLeaderOnlyStartQuest": "Only the quest leader or group leader can force start the quest",
"createAccountReward": "Create Account",
"loginIncentiveQuest": "To unlock this quest, check in to Habitica on <%= count %> different days!",
"loginIncentiveQuestObtained": "You earned this quest by checking in to Habitica on <%= count %> different days!",
"loginReward": "<%= count %> Check-ins",
"createAccountQuest": "You received this quest when you joined Habitica! If a friend joins, they'll get one too.",
"questBundles": "Discounted Quest Bundles",
"buyQuestBundle": "Buy Quest Bundle",
"noQuestToStart": "Cant find a quest to start? Try checking out the Quest Shop in the Market for new releases!",
"pendingDamage": "<%= damage %> pending damage",
"pendingDamageLabel": "pending damage",

View File

@@ -1,19 +1,6 @@
{
"rebirthNew": "البعث : مغامرة جديدة قد أتيحت !",
"rebirthUnlock": "You've unlocked Rebirth! This special Market item allows you to begin a new game at level 1 while keeping your tasks, achievements, pets, and more. Use it to breathe new life into Habitica if you feel you've achieved it all, or to experience new features with the fresh eyes of a beginning character!",
"rebirthBegin": "البعث : إبدأ مغامرة جديدة",
"rebirthStartOver": "Rebirth starts your character over from Level 1.",
"rebirthAdvList1": "يتم استعادتك إلى الصحة الكاملة.",
"rebirthAdvList2": "You have no Experience or Gold.",
"rebirthAdvList3": "Your Habits, Dailies, and To-Dos reset to yellow, and streaks reset, except for challenge tasks.",
"rebirthAdvList4": "سوف تعود إلى فئة البدء \"المحارب\" حتى تتعلم فئة جديدة.",
"rebirthInherit": "شخصيتك الجديد سترث بعض الأشياء من الشخصية السابقه :",
"rebirthInList1": "Tasks, history, equipment, and settings remain.",
"rebirthInList2": "عضويات التحدي، الرابطة ، والفريق ستبقى كما هي .",
"rebirthInList3": "Gems, backer tiers, and contributor levels remain.",
"rebirthInList4": "Items obtained from Gems or drops (such as pets and mounts) remain.",
"rebirthEarnAchievement": "ستحقق ايضا انجازا لبدء مغامرة جديدة",
"beReborn": "أولد من جديد",
"rebirthAchievement": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is <%= level %>. To stack this Achievement, begin your next new adventure when you've reached an even higher Level!",
"rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!",
"rebirthBegan": "إبدأ مغامرة جديدة",
@@ -23,7 +10,5 @@
"rebirthOrbNoLevel": "Used an Orb of Rebirth to start over.",
"rebirthPop": "Instantly restart your character as a Level 1 Warrior while retaining achievements, collectibles, and equipment. Your tasks and their history will remain but they will be reset to yellow. Your streaks will be removed except from challenge tasks. Your Gold, Experience, Mana, and the effects of all Skills will be removed. All of this will take effect immediately. For more information, see the wiki's <a href='http://habitica.wikia.com/wiki/Orb_of_Rebirth' target='_blank'>Orb of Rebirth</a> page.",
"rebirthName": "Orb of Rebirth",
"reborn": "Reborn, max level <%= reLevel %>",
"confirmReborn": "Are you sure?",
"rebirthComplete": "You have been reborn!"
}

View File

@@ -1,7 +1,4 @@
{
"limitedEdition": "Limited Edition",
"seasonalEdition": "Seasonal Edition",
"winterColors": "Winter Colors",
"annoyingFriends": "Annoying Friends",
"annoyingFriendsText": "Got snowballed <%= count %> times by party members.",
"alarmingFriends": "Alarming Friends",
@@ -61,7 +58,6 @@
"nye2": "Happy New Year! May you earn many a Perfect Day.",
"nye3": "Happy New Year! May your To-Do list stay short and sweet.",
"nye4": "Happy New Year! May you not get attacked by a raging Hippogriff.",
"holidayCard": "Received a holiday card!",
"mightyBunnySet": "Mighty Bunny (Warrior)",
"magicMouseSet": "Magic Mouse (Mage)",
"lovingPupSet": "Loving Pup (Healer)",

View File

@@ -3,16 +3,12 @@
"earnedRewardForDevotion": "You have earned <%= reward %> for being committed to improving your life.",
"nextRewardUnlocksIn": "Check-ins until your next prize: <%= numberOfCheckinsLeft %>",
"awesome": "Awesome!",
"totalCount": "<%= count %> total count",
"countLeft": "Check-ins until next reward: <%= count %>",
"incentivesDescription": "When it comes to building habits, consistency is key. Each day you check-in you get closer to a prize.",
"totalCheckins": "<%= count %> Check-Ins",
"checkinEarned": "Your Check-In Counter went up!",
"unlockedCheckInReward": "You unlocked a Check-In Prize!",
"totalCheckinsTitle": "Total Check-Ins",
"checkinProgressTitle": "Progress until next",
"incentiveBackgroundsUnlockedWithCheckins": "Locked Plain Backgrounds will unlock with Daily Check-Ins.",
"checkinReceivedAllRewardsMessage": "You have received all the Check-In prizes available! Congratulations!",
"oneOfAllPetEggs": "one of each standard Pet Egg",
"twoOfAllPetEggs": "two of each standard Pet Egg",
"threeOfAllPetEggs": "three of each standard Pet Egg",

View File

@@ -1,34 +0,0 @@
{
"habiticaBackSoon": "Don't worry, Habitica will be back soon!",
"importantMaintenance": "We are doing important maintenance that we estimate will last until 10pm Pacific Time (5am UTC).",
"maintenance": "Maintenance",
"maintenanceMoreInfo": "Want more information about the maintenance? <%= linkStart %>Check out our info page<%= linkEnd %>.",
"noDamageKeepStreaks": "You will NOT take damage or lose streaks!",
"thanksForPatience": "Thanks for your patience!",
"twitterMaintenanceUpdates": "For the most recent updates, watch our <a href='https://twitter.com/habitica'>Twitter</a>, where we will be posting status information.",
"veteranPetAward": "At the end, you will receive a Veteran pet!",
"maintenanceInfoTitle": "Information about Upcoming Maintenance to Habitica",
"maintenanceInfoWhat": "What is happening?",
"maintenanceInfoWhatText": "On May 21, Habitica will be down for maintenance for most of the day. You will not take any damage or have your account harmed during that weekend, even if you cant log in to check off your Dailies in time! We will be working very hard to make the downtime as short as possible, and will be posting regular updates on <a href='https://twitter.com/habitica' target='_blank'>our Twitter account</a>. At the end of the downtime, to thank everyone for their patience, you will all receive a rare pet!",
"maintenanceInfoWhy": "Why is this happening?",
"maintenanceInfoWhyText": "For the past several months, we have been thoroughly revamping Habitica behind-the-scenes. Specifically, we have rewritten the API. While it may not look much different on the surface, its a whole new world underneath. This will allow us WAY more flexibility when we want to build features in the future, and lead to improved performance!",
"maintenanceInfoTechDetails": "Want more details on the technical side of the process? Visit <a href='http://devs.habitica.com/' target='_blank'>The Forge, our dev blog</a>.",
"maintenanceInfoMore": "More Information",
"maintenanceInfoAccountChanges": "What changes will I see to my account after the rewrite is complete?",
"maintenanceInfoAccountChangesText": "At first, there wont be any notable changes aside from performance improvements for features such as Challenges. If you notice any changes that shouldnt be there, email us at <%= hrefTechAssistanceEmail %> and we will investigate them for you!",
"maintenanceInfoAddFeatures": "What kind of features will this allow Habitica to add?",
"maintenanceInfoAddFeaturesText": "Completing this rewrite will allow us to start building out improved chat and Guilds, plans for organizations and families, and additional productivity features like Monthlies and the ability to record yesterdays activity! Those are all involved features on their own, so it will take time to build them, but until we were finished with this rewrite, there was no way we could start them.",
"maintenanceInfoHowLong": "How long will the maintenance take?",
"maintenanceInfoHowLongText": "We have to migrate tasks and data for all 1.3 million Habitica users -- not an easy task! We anticipate that it will take place between approximately 1pm Pacific Time (8pm UTC) and 10pm Pacific Time (5am UTC). Rest assured that were doing everything we can to make it go as quickly as possible! You can follow <a href='https://twitter.com/habitica' target='_blank'>updates on our Twitter</a>.",
"maintenanceInfoStatsAffected": "How will my Dailies, Streaks, Buffs, and Quests be affected?",
"maintenanceInfoStatsAffectedText1": "You will NOT take any damage or lose any streaks that weekend, but otherwise, your day will reset normally! Dailies that you checked will become unchecked, buffs will reset, etc. If you are in a Collection Quest, you will still find items. If you are in a Boss Battle, you will still deal damage to the Boss, but the Boss will not deal damage to you. (Even monsters need a break!)",
"maintenanceInfoStatsAffectedText2": "After a lot of thought, our team concluded that this was the most fair way to handle the fact that many users will not be able to check off their Dailies normally during the maintenance. Were sorry for any inconvenience this causes!",
"maintenanceInfoSeeTasks": "What if I need to see my task list?",
"maintenanceInfoSeeTasksText": "If you know that you will need to see your task list on Saturday to remind yourself what you have to do, we recommend that before the maintenance begins, you take a screenshot of your tasks so that you can use it as a reference.",
"maintenanceInfoRarePet": "What kind of rare pet will I receive?",
"maintenanceInfoRarePetText": "To thank you for your patience during the downtime, everyone will get a rare Veteran Pet. If youve never received a Veteran Pet before, you will receive a Veteran Wolf. If you already have a Veteran Wolf, you will receive a Veteran Tiger. And if you already have a Veteran Wolf and a Veteran Tiger, you will receive a never-before-seen Veteran pet! After the migration is completed, it may take several hours for your pet to show up, but never fear, everyone will get one.",
"maintenanceInfoWho": "Who worked on this massive project?",
"maintenanceInfoWhoText": "Were glad you asked! It was spearheaded by our amazing contributor paglias, with lots of help from Blade, TheHollidayInn, SabreCat, Victor Pudeyev, TheUnknown, and Alys.",
"maintenanceInfoTesting": "The new version was also tirelessly tested by a bunch of our amazing open-source volunteers. Thank you -- we couldn't have done this without you."
}

View File

@@ -1,20 +1,3 @@
{
"merch" : "Merchandise",
"merchandiseDescription": "Looking for t-shirts, mugs, or stickers to show off your Habitica pride? Click here!",
"merch-teespring-summary" : "Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-goto" : "Get a Habitica T-shirt",
"merch-teespring-mug-summary" : "Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-mug-goto" : "Get a Habitica Mug",
"merch-teespring-eu-summary" : "EUROPEAN VERSION : Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-eu-goto" : "Get a Habitica T-shirt (EU)",
"merch-teespring-mug-eu-summary" : "EUROPEAN VERSION : Teespring is a platform that makes it easy for anyone to create and sell high-quality products people love, with no cost or risk.",
"merch-teespring-mug-eu-goto" : "Get a Habitica Mug (EU)",
"merch-stickermule-summary" : "Stick proud Melior wherever you (or someone else) need a reminder of both present and future accomplishments!",
"merch-stickermule-goto" : "Get Habitica stickers"
"merch" : "Merchandise"
}

View File

@@ -1,7 +1,6 @@
{
"messageLostItem": "Your <%= itemText %> broke.",
"messageTaskNotFound": "Task not found.",
"messageDuplicateTaskID": "A task with that ID already exists.",
"messageTagNotFound": "Tag not found.",
"messagePetNotFound": ":pet not found in user.items.pets",
"messageFoodNotFound": ":food not found in user.items.food",
@@ -12,7 +11,6 @@
"messageLikesFood": "<%= egg %> really likes <%= foodText %>!",
"messageDontEnjoyFood": "<%= egg %> eats <%= foodText %> but doesn't seem to enjoy it.",
"messageBought": "Bought <%= itemText %>",
"messageEquipped": " <%= itemText %> equipped.",
"messageUnEquipped": "<%= itemText %> unequipped.",
"messageMissingEggPotion": "You're missing either that egg or that potion",
"messageInvalidEggPotionCombo": "You can't hatch Quest Pet Eggs with Magic Hatching Potions! Try a different egg.",
@@ -24,10 +22,7 @@
"messageDropFood": "You've found <%= dropText %>!",
"messageDropEgg": "You've found a <%= dropText %> Egg!",
"messageDropPotion": "You've found a <%= dropText %> Hatching Potion!",
"messageDropQuest": "You've found a quest!",
"messageDropMysteryItem": "You open the box and find <%= dropText %>!",
"messageFoundQuest": "You've found the quest \"<%= questText %>\"!",
"messageAlreadyPurchasedGear": "You purchased this gear in the past, but do not currently own it. You can buy it again in the rewards column on the tasks page.",
"messageAlreadyOwnGear": "You already own this item. Equip it by going to the equipment page.",
"previousGearNotOwned": "You need to purchase a lower level gear before this one.",
"messageHealthAlreadyMax": "You already have maximum health.",
@@ -36,12 +31,6 @@
"armoireFood": "<%= image %> You rummage in the Armoire and find <%= dropText %>. What's that doing in here?",
"armoireExp": "You wrestle with the Armoire and gain Experience. Take that!",
"messageInsufficientGems": "Not enough gems!",
"messageAuthPasswordMustMatch": ":password and :confirmPassword don't match",
"messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required",
"messageAuthEmailTaken": "Email already taken",
"messageAuthNoUserFound": "No user found.",
"messageAuthMustBeLoggedIn": "You must be logged in.",
"messageAuthMustIncludeTokens": "You must include a token and uid (user id) in your request",
"messageGroupAlreadyInParty": "Already in a party, try refreshing.",
"messageGroupOnlyLeaderCanUpdate": "Only the group leader can update the group!",
"messageGroupRequiresInvite": "Can't join a group you're not invited to.",
@@ -55,7 +44,6 @@
"messageGroupChatSpam": "Whoops, looks like you're posting too many messages! Please wait a minute and try again. The Tavern chat only holds 200 messages at a time, so Habitica encourages posting longer, more thoughtful messages and consolidating replies. Can't wait to hear what you have to say. :)",
"messageCannotLeaveWhileQuesting": "You cannot accept this party invitation while you are in a quest. If you'd like to join this party, you must first abort your quest, which you can do from your party screen. You will be given back the quest scroll.",
"messageUserOperationProtected": "path `<%= operation %>` was not saved, as it's a protected path.",
"messageUserOperationNotFound": "<%= operation %> operation not found",
"messageNotificationNotFound": "Notification not found.",
"messageNotAbleToBuyInBulk": "This item cannot be purchased in quantities above 1.",
"notificationsRequired": "Notification ids are required.",

View File

@@ -1,6 +1,6 @@
{
"jsDisabledHeading": "На жаль, JavaScript у вашым браўзэры адключаны",
"jsDisabledHeadingFull": "Alas! Your browser doesn't have JavaScript enabled and without it, Habitica can't work properly",
"jsDisabledText": "Habitica can't properly display the site without it!",
"jsDisabledLink": "Please enable JavaScript to continue!"
}

View File

@@ -6,7 +6,6 @@
"welcomeBack": "Welcome back!",
"justin": "Justin",
"justinIntroMessage1": "Hello there! You must be new here. My name is <strong>Justin</strong>, and I'll be your guide in Habitica.",
"justinIntroMessage2": "To start, you'll need to create an avatar.",
"justinIntroMessage3": "Great! Now, what are you interested in working on throughout this journey?",
"justinIntroMessageUsername": "Before we begin, lets figure out what to call you. Below youll find a display name and username Ive generated for you. After youve picked a display name and username, well get started by creating an avatar!",
"justinIntroMessageAppearance": "So how would you like to look? Dont worry, you can change this later.",
@@ -15,7 +14,6 @@
"next": "Next",
"randomize": "Randomize",
"mattBoch": "Matt Boch",
"mattShall": "Shall I bring you your steed, <%= name %>? Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!",
"mattBochText1": "Welcome to the Stable! I'm Matt, the beast master. Starting at level 3, you will find eggs and potions to hatch pets with. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into hardy mounts.",
"welcomeToTavern": "Welcome to The Tavern!",
"sleepDescription": "Need a break? Check into Daniel's Inn to pause some of Habitica's more difficult game mechanics:",
@@ -28,20 +26,9 @@
"staffAndModerators": "Staff and Moderators",
"communityGuidelinesIntro": "Habitica tries to create a welcoming environment for users of all ages and backgrounds, especially in public spaces like the Tavern. If you have any questions, please consult our <a href='/static/community-guidelines' target='_blank'>Community Guidelines</a>.",
"acceptCommunityGuidelines": "I agree to follow the Community Guidelines",
"daniel": "Daniel",
"danielText": "Welcome to the Tavern! Stay a while and meet the locals. If you need to rest (vacation? illness?), I'll set you up at the Inn. While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off.",
"danielText2": "Be warned: If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.",
"danielTextBroken": "Welcome to the Tavern... I guess... If you need to rest, I'll set you up at the Inn... While checked-in, your Dailies won't hurt you at the day's end, but you can still check them off... if you have the energy...",
"danielText2Broken": "Oh... If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn...",
"worldBossEvent": "World Boss Event",
"worldBossDescription": "World Boss Description",
"alexander": "Alexander the Merchant",
"welcomeMarket": "Welcome to the Market! Buy hard-to-find eggs and potions! Sell your extras! Commission useful services! Come see what we have to offer.",
"welcomeMarketMobile": "Welcome to the Market! Buy hard-to-find eggs and potions! Come see what we have to offer.",
"displayItemForGold": "Do you want to sell a <strong><%= itemType %></strong>?",
"displayEggForGold": "Do you want to sell a <strong><%= itemType %> Egg</strong>?",
"displayPotionForGold": "Do you want to sell a <strong><%= itemType %> Potion</strong>?",
"sellForGold": "Sell it for <%= gold %> Gold",
"howManyToSell": "How many would you like to sell?",
"yourBalance": "Your balance",
"sell": "Sell",
@@ -72,10 +59,7 @@
"unpinnedItem": "You unpinned <%= item %>! It will no longer display in your Rewards column.",
"cannotUnpinArmoirPotion": "The Health Potion and Enchanted Armoire cannot be unpinned.",
"purchasedItem": "You bought <%= itemName %>",
"ian": "Ian",
"ianText": "Welcome to the Quest Shop! Here you can use Quest Scrolls to battle monsters with your friends. Be sure to check out our fine array of Quest Scrolls for purchase on the right!",
"ianTextMobile": "Can I interest you in some quest scrolls? Activate them to battle monsters with your Party!",
"ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...",
"featuredQuests": "Featured Quests!",
"cannotBuyItem": "You can't buy this item.",
"mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.",
@@ -97,14 +81,8 @@
"newBaileyUpdate": "New Bailey Update!",
"tellMeLater": "Tell Me Later",
"dismissAlert": "Dismiss This Alert",
"donateText1": "Adds 20 Gems to your account. Gems are used to buy special in-game items, such as shirts and hairstyles.",
"donateText2": "Help support Habitica",
"donateText3": "Habitica is an open source project that depends on our users for support. The money you spend on gems helps us keep the servers running, maintain a small staff, develop new features, and provide incentives for our volunteer programmers. Thank you for your generosity!",
"donationDesc": "20 Gems, Donation to Habitica",
"payWithCard": "Pay with Card",
"payNote": "Note: PayPal sometimes takes a long time to clear. We recommend paying with card.",
"card": "Credit Card (using Stripe)",
"amazonInstructions": "Click the button to pay using Amazon Payments",
"paymentMethods": "Purchase using",
"paymentSuccessful": "Your payment was successful!",
"paymentYouReceived": "You received:",
@@ -114,25 +92,10 @@
"success": "Success!",
"classGear": "Class Gear",
"classGearText": "Congratulations on choosing a class! I've added your new basic weapon to your inventory. Take a look below to equip it!",
"classStats": "These are your class's Stats; they affect the game-play. Each time you level up, you get one Point to allocate to a particular Stat. Hover over each Stat for more information.",
"autoAllocate": "Auto Allocate",
"autoAllocateText": "If 'Automatic Allocation' is selected, your avatar gains Stats automatically based on your tasks' Stats, which you can find in <strong>TASK > Edit > Advanced Settings > Stat Allocation</strong>. Eg, if you hit the gym often, and your 'Gym' Daily is set to 'Strength', you'll gain Strength automatically.",
"spells": "Skills",
"spellsText": "You can now unlock class-specific skills. You'll see your first at level 11. Your mana replenishes 10 points per day, plus 1 point per completed <a target='_blank' href='http://habitica.wikia.com/wiki/Todos'>To-Do</a>.",
"skillsTitle": "Skills",
"toDo": "To-Do",
"moreClass": "For more information on the class-system, see <a href='http://habitica.wikia.com/wiki/Class_System' target='_blank'>Wikia</a>.",
"tourWelcome": "Welcome to Habitica! This is your To-Do list. Check off a task to proceed!",
"tourExp": "Great job! Checking off a task gives you Experience and Gold!",
"tourDailies": "This column is for Daily tasks. To proceed, enter a task you should do every day! <strong>Sample Dailies</strong>: <strong>Make Bed</strong>, <strong>Floss</strong>, <strong>Check Work Email</strong>",
"tourCron": "Splendid! Your Dailies will reset every day.",
"tourHP": "Watch out! If you don't complete a Daily by midnight, it will hurt you!",
"tourHabits": "This column is for good and bad Habits that you do many times a day! To proceed, click the pencil to edit the names, then click the checkmark to save.",
"tourStats": "Good Habits add Experience and Gold! Bad Habits remove health.",
"tourGP": "To proceed, buy the Training Sword with the gold you just earned!",
"tourAvatar": "<strong>Customize Your Avatar</strong><ul><li>Your avatar represents you.</li><li>Customize now, or return later.</li><li>Your avatar starts plain until you've earned Equipment!</li></ul>",
"tourScrollDown": "Be sure to scroll all the way down to see all the options! Click on your avatar again to return to the tasks page.",
"tourMuchMore": "When you're done with tasks, you can form a Party with friends, chat in the shared-interest Guilds, join Challenges, and more!",
"tourStatsPage": "This is your Stats page! Earn achievements by completing the listed tasks.",
"tourTavernPage": "Welcome to the Tavern, an all-ages chat room! You can keep your Dailies from hurting you in case of illness or travel by clicking \"Pause Damage\". Come say hi!",
"tourPartyPage": "Your Party will help you stay accountable. Invite friends to unlock a Quest Scroll!",
@@ -147,16 +110,6 @@
"tourOkay": "Okay!",
"tourAwesome": "Awesome!",
"tourSplendid": "Splendid!",
"tourNifty": "Nifty!",
"tourAvatarProceed": "Show me my tasks!",
"tourToDosBrief": "<strong>To-Do List</strong><ul><li>Check off To-Dos to earn Gold & Experience!</li><li>To-Dos never make your avatar lose Health.</li></ul>",
"tourDailiesBrief": "<strong>Daily Tasks</strong><ul><li>Dailies repeat every day.</li><li>You lose Health if you skip Dailies.</li></ul>",
"tourDailiesProceed": "I'll be careful!",
"tourHabitsBrief": "<strong>Good & Bad Habits</strong><ul><li>Good Habits award Gold & Experience.</li><li>Bad Habits make you lose Health.</li></ul>",
"tourHabitsProceed": "Makes sense!",
"tourRewardsBrief": "<strong>Reward List</strong><ul><li>Spend your hard-earned Gold here!</li><li>Purchase Equipment for your avatar, or set custom Rewards.</li></ul>",
"tourRewardsArmoire": "<strong>Reward List</strong><ul><li>Spend your hard-earned Gold here!</li><li>Purchase Equipment for your avatar, get a random prize from the Enchanted Armoire, or set custom Rewards.</li></ul>",
"tourRewardsProceed": "That's all!",
"welcomeToHabit": "Welcome to Habitica!",
"welcome1": "Create a basic avatar.",
"welcome1notes": "This avatar will represent you as you progress.",
@@ -164,8 +117,6 @@
"welcome2notes": "How well you do on your real-life tasks will control how well you do in the game!",
"welcome3": "Progress in life and the game!",
"welcome3notes": "As you improve your life, your avatar will level up and unlock pets, quests, equipment, and more!",
"welcome4": "Avoid bad habits that drain Health (HP), or your avatar will die!",
"welcome5": "Now you'll customize your avatar and set up your tasks...",
"imReady": "Enter Habitica",
"limitedOffer": "Available until <%= date %>"
}

View File

@@ -1,9 +1,6 @@
{
"quests": "Quests",
"quest": "quest",
"whereAreMyQuests": "Quests are now available on their own page! Click on Inventory -> Quests to find them.",
"yourQuests": "Your Quests",
"questsForSale": "Quests for Sale",
"petQuests": "Pet and Mount Quests",
"unlockableQuests": "Unlockable Quests",
"goldQuests": "Masterclasser Quest Lines",
@@ -14,27 +11,16 @@
"completed": "Completed!",
"rewardsAllParticipants": "Rewards for all Quest Participants",
"rewardsQuestOwner": "Additional Rewards for Quest Owner",
"questOwnerReceived": "The Quest Owner Has Also Received",
"youWillReceive": "You Will Receive",
"questOwnerWillReceive": "The Quest Owner Will Also Receive",
"youReceived": "You've Received",
"dropQuestCongrats": "Congratulations on earning this quest scroll! You can invite your party to begin the quest now, or come back to it any time in your Inventory > Quests.",
"questSend": "Clicking \"Invite\" will send an invitation to your party members. When all members have accepted or denied, the quest begins. See status under Social > Party.",
"questSendBroken": "Clicking \"Invite\" will send an invitation to your party members... When all members have accepted or denied, the quest begins... See status under Social > Party...",
"inviteParty": "Invite Party to Quest",
"questInvitation": "Quest Invitation:",
"questInvitationTitle": "Quest Invitation",
"questInvitationInfo": "Invitation for the Quest <%= quest %>",
"invitedToQuest": "You were invited to the Quest <span class=\"notification-bold-blue\"><%= quest %></span>",
"askLater": "Ask Later",
"questLater": "Quest Later",
"buyQuest": "Buy Quest",
"accepted": "Accepted",
"declined": "Declined",
"rejected": "Rejected",
"pending": "Pending",
"questStart": "Once all members have either accepted or rejected, the quest begins. Only those that clicked \"accept\" will be able to participate in the quest and receive the drops. If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\". The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\".",
"questStartBroken": "Once all members have either accepted or rejected, the quest begins... Only those that clicked \"accept\" will be able to participate in the quest and receive the drops... If members are pending too long (inactive?), the quest owner can start the quest without them by clicking \"Begin\"... The quest owner can also cancel the quest and regain the quest scroll by clicking \"Cancel\"...",
"questCollection": "+ <%= val %> quest item(s) found",
"questDamage": "+ <%= val %> damage to boss",
"begin": "Begin",
@@ -43,56 +29,20 @@
"rage": "Rage",
"collect": "Collect",
"collected": "Collected",
"collectionItems": "<%= number %> <%= items %>",
"itemsToCollect": "Items to Collect",
"bossDmg1": "Each completed Daily and To-Do and each positive Habit hurts the boss. Hurt it more with redder tasks or Brutal Smash and Burst of Flames. The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies! <strong>All damage to and from a boss is tallied on cron (your day roll-over).</strong>",
"bossDmg2": "Only participants will fight the boss and share in the quest loot.",
"bossDmg1Broken": "Each completed Daily and To-Do and each positive Habit hurts the boss... Hurt it more with redder tasks or Brutal Smash and Burst of Flames... The boss will deal damage to every quest participant for every Daily you've missed (multiplied by the boss's Strength) in addition to your regular damage, so keep your party healthy by completing your Dailies... <strong>All damage to and from a boss is tallied on cron (your day roll-over)...</strong>",
"bossDmg2Broken": "Only participants will fight the boss and share in the quest loot...",
"tavernBossInfo": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss! Incomplete Dailies fill the Rage Bar. When the Rage bar is full, the World Boss will attack an NPC. A World Boss will never damage individual players or accounts in any way. Only active accounts not resting in the Inn will have their tasks tallied.",
"tavernBossInfoBroken": "Complete Dailies and To-Dos and score positive Habits to damage the World Boss... Incomplete Dailies fill the Exhaust Strike Bar... When the Exhaust Strike bar is full, the World Boss will attack an NPC... A World Boss will never damage individual players or accounts in any way... Only active accounts not resting in the Inn will have their tasks tallied...",
"bossColl1": "To collect items, do your positive tasks. Quest items drop just like normal items; you can monitor your quest item drops by hovering over the quest progress icon.",
"bossColl2": "Only participants can collect items and share in the quest loot.",
"bossColl1Broken": "To collect items, do your positive tasks... Quest items drop just like normal items; you can monitor your quest item drops by hovering over the quest progress icon...",
"bossColl2Broken": "Only participants can collect items and share in the quest loot...",
"abort": "Abort",
"leaveQuest": "Leave Quest",
"sureLeave": "Are you sure you want to leave the active quest? All your quest progress will be lost.",
"questOwner": "Quest Owner",
"questTaskDamage": "+ <%= damage %> pending damage to boss",
"questTaskCollection": "<%= items %> items collected today",
"questOwnerNotInPendingQuest": "The quest owner has left the quest and can no longer begin it. It is recommended that you cancel it now. The quest owner will retain possession of the quest scroll.",
"questOwnerNotInRunningQuest": "The quest owner has left the quest. You can abort the quest if you need to. You can also allow it to keep running and all remaining participants will receive the quest rewards when the quest finishes.",
"questOwnerNotInPendingQuestParty": "The quest owner has left the party and can no longer begin the quest. It is recommended that you cancel it now. The quest scroll will be returned to the quest owner.",
"questOwnerNotInRunningQuestParty": "The quest owner has left the party. You can abort the quest if you need to but you can also leave it running and all remaining participants will receive the quest rewards when the quest finishes.",
"questParticipants": "Participants",
"scrolls": "Quest Scrolls",
"noScrolls": "You don't have any quest scrolls.",
"scrollsText1": "Quests require parties. If you want to quest solo,",
"scrollsText2": "create an empty party",
"scrollsPre": "You haven't unlocked this quest yet!",
"alreadyEarnedQuestLevel": "You already earned this quest by attaining Level <%= level %>.",
"alreadyEarnedQuestReward": "You already earned this quest by completing <%= priorQuest %>.",
"completedQuests": "Completed the following quests",
"mustComplete": "You must first complete <%= quest %>.",
"mustLevel": "You must be level <%= level %> to begin this quest.",
"mustLvlQuest": "You must be level <%= level %> to buy this quest!",
"mustInviteFriend": "To earn this quest, invite a friend to your Party. Invite someone now?",
"unlockByQuesting": "To unlock this quest, complete <%= title %>.",
"questConfirm": "Are you sure? Only <%= questmembers %> of your <%= totalmembers %> party members have joined this quest! Quests start automatically when all players have joined or rejected the invitation.",
"sureCancel": "Are you sure you want to cancel this quest? All invitation acceptances will be lost. The quest owner will retain possession of the quest scroll.",
"sureAbort": "Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner.",
"doubleSureAbort": "Are you double sure? Make sure they won't hate you forever!",
"questWarning": "If new players join the party before the quest starts, they will also receive an invitation. However once the quest has started, no new party members can join the quest.",
"questWarningBroken": "If new players join the party before the quest starts, they will also receive an invitation... However once the quest has started, no new party members can join the quest...",
"bossRageTitle": "Rage",
"bossRageDescription": "When this bar fills, the boss will unleash a special attack!",
"startAQuest": "START A QUEST",
"startQuest": "Start Quest",
"whichQuestStart": "Which quest do you want to start?",
"getMoreQuests": "Get more quests",
"unlockedAQuest": "You unlocked a quest!",
"leveledUpReceivedQuest": "You leveled up to <strong>Level <%= level %></strong> and received a quest scroll!",
"questInvitationDoesNotExist": "No quest invitation has been sent out yet.",
"questInviteNotFound": "No quest invitation found.",
"guildQuestsNotSupported": "Guilds cannot be invited on quests.",
@@ -113,13 +63,9 @@
"onlyLeaderCancelQuest": "Only the group or quest leader can cancel the quest.",
"questNotPending": "There is no quest to start.",
"questOrGroupLeaderOnlyStartQuest": "Only the quest leader or group leader can force start the quest",
"createAccountReward": "Create Account",
"loginIncentiveQuest": "To unlock this quest, check in to Habitica on <%= count %> different days!",
"loginIncentiveQuestObtained": "You earned this quest by checking in to Habitica on <%= count %> different days!",
"loginReward": "<%= count %> Check-ins",
"createAccountQuest": "You received this quest when you joined Habitica! If a friend joins, they'll get one too.",
"questBundles": "Discounted Quest Bundles",
"buyQuestBundle": "Buy Quest Bundle",
"noQuestToStart": "Cant find a quest to start? Try checking out the Quest Shop in the Market for new releases!",
"pendingDamage": "<%= damage %> pending damage",
"pendingDamageLabel": "pending damage",

View File

@@ -1,19 +1,6 @@
{
"rebirthNew": "Rebirth: New Adventure Available!",
"rebirthUnlock": "You've unlocked Rebirth! This special Market item allows you to begin a new game at level 1 while keeping your tasks, achievements, pets, and more. Use it to breathe new life into Habitica if you feel you've achieved it all, or to experience new features with the fresh eyes of a beginning character!",
"rebirthBegin": "Rebirth: Begin a New Adventure",
"rebirthStartOver": "Rebirth starts your character over from Level 1.",
"rebirthAdvList1": "You return to full Health.",
"rebirthAdvList2": "You have no Experience or Gold.",
"rebirthAdvList3": "Your Habits, Dailies, and To-Dos reset to yellow, and streaks reset, except for challenge tasks.",
"rebirthAdvList4": "You have the starting class of Warrior until you earn a new class.",
"rebirthInherit": "Your new character inherits a few things from their predecessor:",
"rebirthInList1": "Tasks, history, equipment, and settings remain.",
"rebirthInList2": "Challenge, Guild, and Party memberships remain.",
"rebirthInList3": "Gems, backer tiers, and contributor levels remain.",
"rebirthInList4": "Items obtained from Gems or drops (such as pets and mounts) remain.",
"rebirthEarnAchievement": "You also earn an Achievement for beginning a new adventure!",
"beReborn": "Be Reborn",
"rebirthAchievement": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is <%= level %>. To stack this Achievement, begin your next new adventure when you've reached an even higher Level!",
"rebirthAchievement100": "You've begun a new adventure! This is Rebirth <%= number %> for you, and the highest Level you've attained is 100 or higher. To stack this Achievement, begin your next new adventure when you've reached at least 100!",
"rebirthBegan": "Began a New Adventure",
@@ -23,7 +10,5 @@
"rebirthOrbNoLevel": "Used an Orb of Rebirth to start over.",
"rebirthPop": "Instantly restart your character as a Level 1 Warrior while retaining achievements, collectibles, and equipment. Your tasks and their history will remain but they will be reset to yellow. Your streaks will be removed except from challenge tasks. Your Gold, Experience, Mana, and the effects of all Skills will be removed. All of this will take effect immediately. For more information, see the wiki's <a href='http://habitica.wikia.com/wiki/Orb_of_Rebirth' target='_blank'>Orb of Rebirth</a> page.",
"rebirthName": "Orb of Rebirth",
"reborn": "Reborn, max level <%= reLevel %>",
"confirmReborn": "Are you sure?",
"rebirthComplete": "You have been reborn!"
}

View File

@@ -1,7 +1,4 @@
{
"limitedEdition": "Ограничена серия",
"seasonalEdition": "Сезонно издание",
"winterColors": "Зимни цветове",
"annoyingFriends": "Досадни приятели",
"annoyingFriendsText": "Ударен(а) със снежна топка <%= count %> пъти от членовете на групата.",
"alarmingFriends": "Обезпокоителни приятели",
@@ -61,7 +58,6 @@
"nye2": "Честита Нова Година! С пожелания за много перфектни дни.",
"nye3": "Честита Нова Година! Нека списъкът ти със задачи бъде кратък и приятен.",
"nye4": "Честита Нова Година! Дано не те нападат разярени хипогрифи.",
"holidayCard": "Получихте празнична картичка!",
"mightyBunnySet": "Могъщ заек (воин)",
"magicMouseSet": "Магическа мишка (магьосник)",
"lovingPupSet": "Любящо кученце (лечител)",

View File

@@ -3,16 +3,12 @@
"earnedRewardForDevotion": "Получихте <%= reward %> за усърдието си в подобряването на живота си.",
"nextRewardUnlocksIn": "Брой отчитания до следващата награда: <%= numberOfCheckinsLeft %>",
"awesome": "Страхотно!",
"totalCount": "Общо: <%= count %>",
"countLeft": "Брой отчитания до следващата награда: <%= count %>",
"incentivesDescription": "Когато става въпрос за изграждане на навици, ключът е в постоянството. Всеки ден, в който се отчетете, Ви доближава до наградата.",
"totalCheckins": "<%= count %> отчитания",
"checkinEarned": "Броячът на отчитанията Ви се увеличи!",
"unlockedCheckInReward": "Отключихте награда за отчитане!",
"totalCheckinsTitle": "Общ брой отчитания",
"checkinProgressTitle": "Напредък до следващата награда",
"incentiveBackgroundsUnlockedWithCheckins": "Заключените едноцветни фонови изображения ще се отключат чрез ежедневните Ви отчитания.",
"checkinReceivedAllRewardsMessage": "Получили сте всички награди за отчитане! Поздравления!",
"oneOfAllPetEggs": "по един брой от всяко обикновено яйце за любимец",
"twoOfAllPetEggs": "по два броя от всяко обикновено яйце за любимец",
"threeOfAllPetEggs": "по три броя от всяко обикновено яйце за любимец",

View File

@@ -1,34 +0,0 @@
{
"habiticaBackSoon": "Не се притеснявайте, Хабитика ще се върне скоро!",
"importantMaintenance": "Провеждаме важна профилактика, която би трябвало да приключи до 7ч. източноевропейско време.",
"maintenance": "Профилактика",
"maintenanceMoreInfo": "Искате повече информация относно профилактиката? <%= linkStart %>Вижте страницата с информацията<%= linkEnd %>.",
"noDamageKeepStreaks": "НЯМА да получите щети или да нарушите сериите си!",
"thanksForPatience": "Благодарим за търпението Ви!",
"twitterMaintenanceUpdates": "За актуална информация, следете нашия <a href='https://twitter.com/habitica'>Туитър</a>, където ще публикуваме всичко важно.",
"veteranPetAward": "След края ще получите любимец ветеран!",
"maintenanceInfoTitle": "Информация относно предстоящата профилактика на Хабитика",
"maintenanceInfoWhat": "Какво се случва?",
"maintenanceInfoWhatText": "На 21 май Хабитика ще бъде недостъпна почти целия ден поради профилактика. През това време нито ще получавате щети, нито профилът Ви ще бъде наранен, дори и да не можете да влезете, за да отметнете ежедневните си задачи навреме! Ние ще се постараем времето, в което Хабитика е недостъпна, да бъде възможно най-кратко, и ще публикуваме актуална информация за напредъка си в <a href='https://twitter.com/habitica' target='_blank'>нашия профил в Туитър</a>. За да благодарим на всички за търпението, след края на профилактиката всички ще получат рядък любимец!",
"maintenanceInfoWhy": "Защо се случва това?",
"maintenanceInfoWhyText": "През последните няколко месеца ние извършвахме невидимо за потребителите преустройство на Хабитика. По-специално, пренаписахме своя ППИ. Въпреки че резултатите може да не са видими, вътрешно системата е много по-различна. Това ще ни осигури ОГРОМНА гъвкавост при разработването на нови функционалности в бъдеще, както и ще подобри производителността!",
"maintenanceInfoTechDetails": "Искате ли да научите повече относно техническите подробности? Посетете <a href='http://devs.habitica.com/' target='_blank'>„Ковачницата“, нашия блог за разработката</a>.",
"maintenanceInfoMore": "Още информация",
"maintenanceInfoAccountChanges": "Какви промени ще видя в профила си след като пренаписването приключи?",
"maintenanceInfoAccountChangesText": "Отначало няма да има много забележими промени, освен подобренията по производителността на различни функционалности, като например предизвикателствата. Ако забележите промени, които не сте очаквали, моля, пишете ни на <%= hrefTechAssistanceEmail %> и ще проучим нещата!",
"maintenanceInfoAddFeatures": "Разработката на какви функционалности в Хабитика ще улесни това?",
"maintenanceInfoAddFeaturesText": "След завършването на това пренаписване, ние ще можем да започнем работа по подобряване на чата и гилдиите, да създадем планове за организации и семейства, както и допълнителни функционалности за продуктивност, като ежемесечни задачи и възможността за запис на вчерашната дейност! Това са отделни функционалности, така че всяка от тях ще отнеме време, но преди да приключим с това пренаписване, нямаше как дори да започнем работа по тях.",
"maintenanceInfoHowLong": "Колко време ще продължи профилактиката?",
"maintenanceInfoHowLongText": "Трябва да прехвърлим данните за 1,3 милиона потребители на Хабитика, а това не е лесна задача! Смятаме, че профилактиката ще продължи от 23 ч. българско време (20 ч. КУВ) до 8 ч. българско време (5 ч. КУВ). Не се притеснявайте, ние ще се постараем да приключим колкото можем по-бързо! Можете да следите <a href='https://twitter.com/habitica' target='_blank'>актуалната информация в Туитър</a>.",
"maintenanceInfoStatsAffected": "Как ще повлияе това на моите ежедневни задачи, серии, подсилки и мисии?",
"maintenanceInfoStatsAffectedText1": "НЯМА да получите щети, нито ще нарушите сериите си по време на профилактиката, но всичко останало ще работи нормално! Ежедневните задачи, които сте отбелязали като изпълнени, ще бъдат върнати в неизпълнени състояние, подсилките ще бъдат анулирани и т.н. Ако изпълнявате събираческа мисия, пак ще намирате предмети. Ако се биете с главатар, ще му нанасяте щети, но той няма да Ви наранява. (Дори чудовищата се нуждаят от почивка!)",
"maintenanceInfoStatsAffectedText2": "След дълго обмисляне, екипът ни реши, че това е най-честният подход към факта, че много потребители няма да могат да отметнат ежедневните си задачи по време на профилактиката. Съжаляваме за неудобствата, които това може да създаде!",
"maintenanceInfoSeeTasks": "Ами ако трябва да погледна списъка си със задачи?",
"maintenanceInfoSeeTasksText": "Ако знаете, че ще трябва да погледнете списъка си със задачи в събота, за да си припомните какво трябва да направите, препоръчваме Ви преди началото на профилактиката да направите снимка на екрана си, която да ползвате вместо уеб сайта.",
"maintenanceInfoRarePet": "Какъв рядък любимец ще получа?",
"maintenanceInfoRarePetText": "Като благодарност за търпението Ви по време на профилактиката, всички ще получат рядък любимец ветеран. Ако досега не сте имали такъв, ще получите вълк ветеран. Ако вече имате вълк ветеран, ще получите тигър ветеран. А ако вече имате и двата, ще получите любимец ветеран, който никой не е виждал досега! След като приключи прехвърлянето, може да минат няколко часа, докато получите любимеца си, но не се притеснявайте, всички ще получат такъв.",
"maintenanceInfoWho": "Кой е работил по този огромен проект?",
"maintenanceInfoWhoText": "Радваме се, че попитахте! Ръководител на този проект беше нашият невероятен сътрудник paglias, с много помощ от Blade, TheHollidayInn, SabreCat, Victor Pudeyev, TheUnknown и Alys.",
"maintenanceInfoTesting": "Новата версия също така беше изпитана от много неуморни доброволци от общността ни. Благодарим Ви! Нямаше да се справим без Вас."
}

View File

@@ -1,20 +1,3 @@
{
"merch" : "Рекламни материали",
"merchandiseDescription": "Търсите тениски, чаши или лепенки, с които да показвате гордостта от постиженията си в Хабитика? Щракнете тук!",
"merch-teespring-summary" : "„Teespring“ е система, чрез която всеки може лесно да създава и продава висококачествени продукти, които хората ще обикнат, безплатно и без рискове.",
"merch-teespring-goto" : "Вземете тениска на Хабитика",
"merch-teespring-mug-summary" : "„Teespring“ е система, чрез която всеки може лесно да създава и продава висококачествени продукти, които хората ще обикнат, безплатно и без рискове.",
"merch-teespring-mug-goto" : "Вземете чаша на Хабитика",
"merch-teespring-eu-summary" : "ЕВРОПЕЙСКА ВЕРСИЯ : „Teespring“ е система, чрез която всеки може лесно да създава и продава висококачествени продукти, които хората ще обикнат, безплатно и без рискове.",
"merch-teespring-eu-goto" : "Вземете тениска на Хабитика (ЕС)",
"merch-teespring-mug-eu-summary" : "ЕВРОПЕЙСКА ВЕРСИЯ : „Teespring“ е система, чрез която всеки може лесно да създава и продава висококачествени продукти, които хората ще обикнат, безплатно и без рискове.",
"merch-teespring-mug-eu-goto" : "Вземете чаша на Хабитика (ЕС)",
"merch-stickermule-summary" : "Гордо си залепете лепенка, когато имате (или някой друг има) нужда от напомняне на сегашните и бъдещите Ви постижения!",
"merch-stickermule-goto" : "Вземете лепенки на Хабитика"
"merch" : "Рекламни материали"
}

View File

@@ -1,7 +1,6 @@
{
"messageLostItem": "Ваш предмет се счупи: <%= itemText %>.",
"messageTaskNotFound": "Задачата не е намерена.",
"messageDuplicateTaskID": "Вече съществува задача с този идентификатор.",
"messageTagNotFound": "Етикетът не е намерен.",
"messagePetNotFound": ":pet не е открит в user.items.pets",
"messageFoodNotFound": ":food не е открита в user.items.food",
@@ -12,7 +11,6 @@
"messageLikesFood": "<%= egg %> много хареса <%= foodText %>!",
"messageDontEnjoyFood": "<%= egg %> изяде <%= foodText %> , но не му/ѝ хареса.",
"messageBought": "Закупихте <%= itemText %>",
"messageEquipped": " Екипирахте <%= itemText %>.",
"messageUnEquipped": "Разекипирахте <%= itemText %>.",
"messageMissingEggPotion": "Липсва Ви яйцето или отварата",
"messageInvalidEggPotionCombo": "Не можете да излюпите яйце на любимец от мисия с магическа излюпваща отвара! Опитайте с друго яйце.",
@@ -24,10 +22,7 @@
"messageDropFood": "Намерихте <%= dropText %>!",
"messageDropEgg": "Намерихте яйце на <%= dropText %>!",
"messageDropPotion": "Намерихте излюпваща отвара с(ъс) <%= dropText %>!",
"messageDropQuest": "Намерихте мисия!",
"messageDropMysteryItem": "Отваряте кутията и намирате <%= dropText %>!",
"messageFoundQuest": "Намерихте мисията „<%= questText %>“!",
"messageAlreadyPurchasedGear": "Вие сте купували тази екипировка в миналото, но в момента не я притежавате. Можете да я купите отново от колоната с награди на страницата със задачи.",
"messageAlreadyOwnGear": "Вече притежавате този предмет. Можете да го екипирате като отидете на страницата с екипировката.",
"previousGearNotOwned": "Трябва да закупите екипировка от по-ниско ниво преди тази.",
"messageHealthAlreadyMax": "Здравето Ви вече е пълно.",
@@ -36,12 +31,6 @@
"armoireFood": "<%= image %> Тършувате из гардероба и намирате <%= dropText %>. Какво ли прави това там?",
"armoireExp": "Сборвате се с гардероба и получавате опит. Така му се пада!",
"messageInsufficientGems": "Нямате достатъчно диаманти!",
"messageAuthPasswordMustMatch": ":password и :confirmPassword не съвпадат",
"messageAuthCredentialsRequired": ":username, :email, :password и :confirmPassword са задължителни",
"messageAuthEmailTaken": "Е-пощата вече се използва",
"messageAuthNoUserFound": "Потребителят не е намерен.",
"messageAuthMustBeLoggedIn": "Трябва да сте влезли в системата.",
"messageAuthMustIncludeTokens": "Трябва да включите жетон и потребителски идентификатор в заявката си",
"messageGroupAlreadyInParty": "Вече сте в група, опитайте да опресните.",
"messageGroupOnlyLeaderCanUpdate": "Само водачът на групата може да я актуализира!",
"messageGroupRequiresInvite": "Не можете да се присъедините към група, за която не сте получили покана.",
@@ -55,7 +44,6 @@
"messageGroupChatSpam": "Опа! Изглежда публикувате твърде много съобщения. Моля, изчакайте малко и опитайте отново. Чатът в кръчмата може да показва най-много 200 съобщения, така че съветваме потребителите да публикуват по-дълги и добре обмислени съобщения, както и да обединяват отговорите си. Скоро ще можете да пишете отново! :)",
"messageCannotLeaveWhileQuesting": "Не можете да приемете тази покана за присъединяване в група, докато изпълнявате мисия. Ако искате да се присъедините към тази група, трябва първо да прекратите мисията си можете да направите това от екрана за групата. Ще си получите обратно свитъка с мисията.",
"messageUserOperationProtected": "Пътят `<%= operation %>` не беше запазен, тъй като е защитен път.",
"messageUserOperationNotFound": "Операцията „<%= operation %>“ не е намерена",
"messageNotificationNotFound": "Известието не е намерено.",
"messageNotAbleToBuyInBulk": "Не може да се закупи повече от един брой от този предмет.",
"notificationsRequired": "Идентификаторите на известията са задължителни.",

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