Compare commits

...

898 Commits

Author SHA1 Message Date
Matteo Pagliazzi
8e6ce39d64 4.165.2 2020-10-19 01:11:20 +02:00
Matteo Pagliazzi
617832f02d fix(i18n): restore missing strings 2020-10-19 01:11:00 +02:00
Matteo Pagliazzi
43efe2d6d6 4.165.1 2020-10-18 19:16:02 +02:00
Matteo Pagliazzi
9474a44df3 fix(ab test): enroll more users 2020-10-18 19:15:50 +02:00
Matteo Pagliazzi
6a27feb3f9 4.165.0 2020-10-16 19:57:57 +02:00
Matteo Pagliazzi
e04d4e8bea Drop Cap Notification, Modal and A/B Test (#12651)
* add drop cap notification

* add drop cap notification

* add dismissible notification

* fix(notification): correct remove icon positioning

* track events

* add modal

* add back files

* fix links and add missing analytics

* fix rounded borders and hide sub info for subscribers

* a/b test

* fix comparison

* Translated using Weblate (Spanish)

Currently translated at 98.2% (55 of 56 strings)

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

Translated using Weblate (Spanish)

Currently translated at 99.4% (179 of 180 strings)

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

Merge branch 'origin/develop' into Weblate.

Translated using Weblate (Spanish)

Currently translated at 99.4% (175 of 176 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 98.6% (359 of 364 strings)

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

Translated using Weblate (Spanish)

Currently translated at 85.7% (151 of 176 strings)

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

Translated using Weblate (Spanish)

Currently translated at 95.3% (538 of 564 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 98.6% (359 of 364 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (718 of 718 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (718 of 718 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (175 of 175 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (718 of 718 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (180 of 180 strings)

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

Translated using Weblate (Basque)

Currently translated at 100.0% (2 of 2 strings)

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

Translated using Weblate (Basque)

Currently translated at 6.5% (8 of 123 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (718 of 718 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (718 of 718 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.8% (717 of 718 strings)

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

* clarify a/b test values

* add tests

* refactor user dropdown

* fix hover state

* fix user dropdown

* fix user menu hierarchy

* restore i18n files to release version

Co-authored-by: Melior <admin@habitica.com>
2020-10-16 19:50:54 +02:00
Sabe Jones
2832226539 4.164.0 2020-10-15 15:14:59 -05:00
Matteo Pagliazzi
dcbc5da2ba fix(news): use correct date for posts 2020-10-15 17:32:26 +02:00
Matteo Pagliazzi
1d44bfe0cd fix(profile): correct formatting, fixes #12677 2020-10-15 12:54:52 +02:00
Melior
6553118636 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (56 of 56 strings)

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

Merge branch 'origin/develop' into Weblate.

Translated using Weblate (Arabic)

Currently translated at 1.8% (2 of 111 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (175 of 175 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (175 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 98.6% (359 of 364 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (184 of 184 strings)

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

Translated using Weblate (Japanese)

Currently translated at 88.1% (1925 of 2183 strings)

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

Translated using Weblate (Japanese)

Currently translated at 97.7% (171 of 175 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (364 of 364 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2183 of 2183 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (180 of 180 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (176 of 176 strings)

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

Translated using Weblate (Hindi)

Currently translated at 31.5% (35 of 111 strings)

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

Translated using Weblate (Hindi)

Currently translated at 100.0% (15 of 15 strings)

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

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 100.0% (363 of 363 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (564 of 564 strings)

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

Translated using Weblate (Spanish)

Currently translated at 100.0% (15 of 15 strings)

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

Translated using Weblate (Spanish)

Currently translated at 100.0% (15 of 15 strings)

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

Translated using Weblate (Japanese)

Currently translated at 99.8% (563 of 564 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 85.6% (613 of 716 strings)

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

Translated using Weblate (Norwegian Bokmål)

Currently translated at 86.0% (74 of 86 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% (23 of 23 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% (364 of 364 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% (363 of 363 strings)

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

Translated using Weblate (Polish)

Currently translated at 79.3% (1733 of 2183 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 85.6% (613 of 716 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 98.3% (358 of 364 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 81.4% (1779 of 2183 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 95.5% (539 of 564 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2183 of 2183 strings)

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

Translated using Weblate (Portuguese)

Currently translated at 81.7% (76 of 93 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 98.0% (357 of 364 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 96.7% (352 of 364 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 94.7% (345 of 364 strings)

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

Translated using Weblate (Japanese)

Currently translated at 98.6% (359 of 364 strings)

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

Translated using Weblate (Japanese)

Currently translated at 88.0% (1923 of 2183 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2183 of 2183 strings)

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

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/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (55 of 55 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (176 of 176 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 92.5% (337 of 364 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (184 of 184 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (2183 of 2183 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (2183 of 2183 strings)

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

Translated using Weblate (Czech)

Currently translated at 87.6% (1913 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (564 of 564 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (564 of 564 strings)

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

Translated using Weblate (French)

Currently translated at 99.9% (2182 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 99.9% (2182 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 99.8% (2180 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 99.8% (2180 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 99.7% (2178 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 99.7% (2178 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 99.7% (2177 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 99.7% (2177 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 99.6% (2176 of 2183 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (564 of 564 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (564 of 564 strings)

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

Translated using Weblate (French)

Currently translated at 98.9% (558 of 564 strings)

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

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 (French)

Currently translated at 100.0% (176 of 176 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Japanese)

Currently translated at 96.7% (178 of 184 strings)

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

Translated using Weblate (Japanese)

Currently translated at 98.6% (359 of 364 strings)

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

Translated using Weblate (Slovak)

Currently translated at 29.0% (27 of 93 strings)

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

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/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (176 of 176 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (364 of 364 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2183 of 2183 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2183 of 2183 strings)

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

Translated using Weblate (German)

Currently translated at 99.5% (2174 of 2183 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (363 of 363 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (564 of 564 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (564 of 564 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.8% (2179 of 2183 strings)

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

Translated using Weblate (Russian)

Currently translated at 98.4% (555 of 564 strings)

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

Translated using Weblate (German)

Currently translated at 99.2% (560 of 564 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (176 of 176 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% (564 of 564 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (564 of 564 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/
2020-10-13 22:09:31 +02:00
Sabe Jones
a238b264e5 Merge branch 'release' into develop 2020-10-13 14:38:39 -05:00
Sabe Jones
4696237b21 4.163.0 2020-10-13 14:37:40 -05:00
Sabe Jones
b7956a82ee feat(content): Pet Quest Bundle 2020-10-13 14:36:38 -05:00
Sabe Jones
a5babc493f fix(tests): update analytics expectations 2020-10-13 11:08:35 -05:00
Sabe Jones
708bd4a292 chore(analytics): track first-time-purchase info 2020-10-13 10:35:44 -05:00
Phillip Thelen
d9e774dd77 Implement Bailey CMS API (#10739)
* Begin refactoring news API to return individual markdown posts

* Implement simple bailey CMS

* Prevented users with lvl less than 10 from seeing mana

* Added in class checks and notification tests

* Added getter use

* Fixed class check

* chore(i18n): update locales

* 4.60.2

* remove tests that are no longer needed because we won't be purging private messages (#10670)

Ref: this comment from paglias: https://github.com/HabitRPG/habitica/issues/7940#issuecomment-406489506

* remove .only

* allow challenge leader/owner to view/join/modify challenge in private group they've left - fixes #9753 (#10606)

* rename hasAccess to canJoin for challenges

This is so the function won't be used accidentally for other
purposes, since hasAccess could be misinterpretted.

* add isLeader function for challenges

* allow challenge leader to join/modify/end challenge when they're not in the private group it's in

* delete duplicate test

* clarify title of existing tests

* add tests and adjust existing tests to reduce privileges of test users

* fix lint errors

* remove pointless isLeader check (it's checked in canJoin)

* Correct Challenges tooltip in Guild view (#10667)

* Fix new party member cannot join pending quest (#10648)

* Saved sort selection into local storage for later use - fixes #10432 (#10655)

* Saved sort selection into local storage for later use

* Updated code to use userLocalManager module

* Fix initial position item info when selecting one item after another (fixes #10077) (#10661)

* Update lastMouseMoveEvent even when dragging an egg or potion.

* Update lastMouseMoveEvent even when dragging a food item.

* Refactor/market vue (#10601)

* extract inventoryDrawer from market

* show scrollbar only if needed

* extract featuredItemsHeader / pinUtils

* extract pageLayout

* extract layoutSection / filterDropdown - fix sortByNumber

* rollback sortByNumber order-fix

* move equipment lists out of the layout-section (for now)

* refactor sellModal

* extract checkbox

* extract equipment section

* extract category row

* revert scroll - remove sellModal item template

* fix(lint): commas and semis

* Created category item component (#10613)

* extract filter sidebar

* fix gemCount - fix raising the item count if the item wasn't previously owned

* fixes #10659

* remove unneeded method

* fix typo when importing component

* feat(content): Forest Friends Quest Bundle

* chore(sprites): compile

* chore(i18n): update locales

* 4.60.3

* fix(bcrypt): install fork compatible with Node 8

* chore(i18n): update locales

* 4.60.4

* add swear words - TRIGGER / CONTENT WARNING: assault, slurs, swearwords, etc

* add pinUtils-mixin   - fixes #10682 (#10683)

* chore(news): Bailey

* chore(i18n): update locales

* 4.60.5

* Improve rendering banner about sleeping in the inn

See #10695

* Display settings in one column

* Small Updates (#10701)

* small updates

* fix client unit test

* fix uuid validation

* Revert "Small Updates (#10701)" (#10702)

This reverts commit dd7fa73961.

* feat(event): Fall Festival 2018

* chore(sprites): compile

* chore(i18n): update locales

* 4.61.0

* Move inbox to its own model (#10428)

* shared model for chat and inbox

* disable inbox schema

* inbox: use separate model

* remove old code that used group.chat

* add back chat field (not used) and remove old tests

* remove inbox exclusions when loading user

* add GET /api/v3/inbox/messages

* add comment

* implement DELETE /inbox/messages/:messageid in v4

* implement GET /inbox/messages in v4 and update tests

* implement DELETE /api/v4/inbox/clear

* fix url

* fix doc

* update /export/inbox.html

* update other data exports

* add back messages in user schema

* add user.toJSONWithInbox

* add compativility until migration is done

* more compatibility

* fix tojson called twice

* add compatibility methods

* fix common tests

* fix v4 integration tests

* v3 get user -> with inbox

* start to fix tests

* fix v3 integration tests

* wip

* wip, client use new route

* update tests for members/send-private-message

* tests for get user in v4

* add tests for DELETE /inbox/messages/:messageId

* add tests for DELETE /inbox/clear in v4

* update docs

* fix tests

* initial migration

* fix migration

* fix migration

* migration fixes

* migrate api.enterCouponCode

* migrate api.castSpell

* migrate reset, reroll, rebirth

* add routes to v4 version

* fix tests

* fixes

* api.updateUser

* remove .only

* get user -> userLib

* refactor inbox.vue to work with new data model

* fix return message when messaging yourself

* wip fix bug with new conversation

* wip

* fix remaining ui issues

* move api.registerLocal, fixes

* keep only v3 version of GET /inbox/messages

* Fix API early Stat Point allocation (#10680)

* Refactor hasClass check to common so it can be used in shared & server-side code

* Check that user has selected class before allocating stat points

* chore(event): end Ember Hatching Potions

* chore(analytics): reenable navigation tracking

* update bcrypt

* Point achievement modal links to main site (#10709)

* Animal ears after death (#10691)

* Animal Ears purchasable with Gold if lost in Death

* remove ears from pinned items when set is bought

* standardise css and error handling for gems and coins

* revert accidental new line

* fix client tests

* Reduce margin-bottom of checklist-item from 10px to -3px. (#10684)

* chore(i18n): update locales

* 4.61.1

* Position inn banner when window is resized

* feat(content): Subscriber Items and Magic Potions

* chore(sprites): compile

* chore(i18n): update locales

* 4.62.0

* Update inn banner handling

* Fix banner offset on initial load

* Fix minor issues.

* Issue: 10660 - Fixed. Changed default to Please Enter A Value (#10718)

* Issue: 10660 - Fixed. Changed default to Please Enter A Value

* Issue: 10660 - Fixed/revision 2 Changed default to Enter A Value

* chore(news): Bailey announcements

* chore(i18n): update locales

* 4.62.1

* adjust wiki link for usernameInfo string

https://github.com/HabitRPG/habitica-private/issues/7#issuecomment-425405425

* raise coverage for tasks api calls (#10029)

* - updates a group task - approval is required
- updates a group task with checklist

* add expect to test the new checklist length

* - moves tasks to a specified position out of length

* remove unused line

* website getter tasks tests

* re-add sanitizeUserChallengeTask

* change config.json.example variable to be a string not a boolean

* fix tests - pick the text / up/down props too

* fix test - remove changes on text/up/down - revert sanitize condition - revert sanitization props

* chore(i18n): update locales

* 4.62.2

* chore(news): Bailey

* chore(i18n): update locales

* 4.62.3

* inbox: fix avatar display and order

* Username announcement (#10729)

* Change update username API call

The call no longer requires a password and also validates the username.

* Implement API call to verify username without setting it

* Improve coding style

* Apply username verification to registration

* Update error messages

* Validate display names.

* Fix API early Stat Point allocation (#10680)

* Refactor hasClass check to common so it can be used in shared & server-side code

* Check that user has selected class before allocating stat points

* chore(event): end Ember Hatching Potions

* chore(analytics): reenable navigation tracking

* update bcrypt

* Point achievement modal links to main site (#10709)

* Animal ears after death (#10691)

* Animal Ears purchasable with Gold if lost in Death

* remove ears from pinned items when set is bought

* standardise css and error handling for gems and coins

* revert accidental new line

* fix client tests

* Reduce margin-bottom of checklist-item from 10px to -3px. (#10684)

* chore(i18n): update locales

* 4.61.1

* feat(content): Subscriber Items and Magic Potions

* chore(sprites): compile

* chore(i18n): update locales

* 4.62.0

* Display notification for users to confirm their username

* fix typo

* WIP(usernames): Changes to address #10694

* WIP(usernames): Further changes for #10694

* fix(usernames): don't show spurious headings

* Change verify username notification to new version

* Improve feedback for invalid usernames

* Allow user to set their username again to confirm it

* Improve validation display for usernames

* Temporarily move display name validation outside of schema

* Improve rendering banner about sleeping in the inn

See #10695

* Display settings in one column

* Position inn banner when window is resized

* Update inn banner handling

* Fix banner offset on initial load

* Fix minor issues.

* Issue: 10660 - Fixed. Changed default to Please Enter A Value (#10718)

* Issue: 10660 - Fixed. Changed default to Please Enter A Value

* Issue: 10660 - Fixed/revision 2 Changed default to Enter A Value

* chore(news): Bailey announcements

* chore(i18n): update locales

* 4.62.1

* adjust wiki link for usernameInfo string

https://github.com/HabitRPG/habitica-private/issues/7#issuecomment-425405425

* raise coverage for tasks api calls (#10029)

* - updates a group task - approval is required
- updates a group task with checklist

* add expect to test the new checklist length

* - moves tasks to a specified position out of length

* remove unused line

* website getter tasks tests

* re-add sanitizeUserChallengeTask

* change config.json.example variable to be a string not a boolean

* fix tests - pick the text / up/down props too

* fix test - remove changes on text/up/down - revert sanitize condition - revert sanitization props

* Change update username API call

The call no longer requires a password and also validates the username.

* feat(content): Subscriber Items and Magic Potions

* Re-add register call

* Fix merge issue

* Fix issue with setting username

* Implement new alert style

* Display username confirmation status in settings

* Add disclaimer to change username field

* validate username in settings

* Allow specific fields to be focused when opening site settings

* Implement requested changes.

* Fix merge issue

* Fix failing tests

* verify username when users register with username and password

* Set ID for change username notification

* Disable submit button if username is invalid

* Improve username confirmation handling

* refactor(settings): address remaining code comments on auth form

* Revert "refactor(settings): address remaining code comments on auth form"

This reverts commit 9b6609ad64.

* Social user username (#10620)

* Refactored private functions to library

* Refactored social login code

* Added username to social registration

* Changed id library

* Added new local auth check

* Fixed export error. Fixed password check error

* fix(settings): password not available on client

* refactor(settings): more sensible placement of methods

* chore(migration): script to hand out procgen usernames

* fix(migration): don't give EVERYONE new names you doofus

* fix(migration): limit data retrieved, be extra careful about updates

* fix(migration): use missing field, not migration tag, for query

* fix(migration): unused var

* fix(usernames): only generate 20 characters

* fix(migration): set lowerCaseUsername

* fix(lint): comma

* fix(lint): comma spacing

* chore(i18n): update locales

* 4.63.0

* chore(news): Bailey

* chore(i18n): update locales

* 4.63.1

* fix(usernames): various
Reword invalid characters error
Correct typo in slur error
Remove extraneous Confirm button
Reset username field if empty on blur
Restore ability to add local auth to social login

* fix(auth): account for new username paradigm in add-local flow

* fix(auth): alert on successful addLocal

* chore(i18n): update locales

* 4.63.2

* fix(auth): Don't try to check existing username on new reg

* 4.63.3

* feat(content): Armoire and BGs 2018/10

* chore(sprites): compile

* fix(passport): use graph API v2.8

* chore(i18n): update locales

* 4.64.0

* Begin refactoring news API to return individual markdown posts

* Implement simple bailey CMS

* remove old news markdown

* Correctly display images in bailey modal

* Remove need for newStuff migration

* Add basic tests

* Fix authentication issue

* Fix tests

* Update news model

* add API route to get single post

* remove news admin frontend code

* fix lint error

* Fix merge mixups

* Fix lint errors

* fix api call

* fix lint error

* Fix issues caused by merging

* remove console log

* Improve news display

* Correctly update users notifications

* Fix date display for news posts

* Fix tests

* remove old cache file

* correctly create date

* correctly create promise

* Better check for existance.

* Improve docs

* Fix minor issues

* Add method to get latest post

* fix lint errors

* use correct call for 404

* add comment about old newStuff field

* paginate news

* Fix lint errors

* Remove unnecessary await

* Fix broken tests

* ...

* correct existence check

* fix database queries

* change approach to cached news posts

* fix tests

* Change how news posts are cached

* Fetch last news post at an interval

* Fix typos and other small things

* add new permission for modifying bailey posts

* add test for ensureNewsPoster

* return last news post with legacy api

* Fix test

* Hopefully fix test

* change fields to _id

* Fixes

* Fixes

* fix test

* Fixes

* make all tests pass

* fix lint

* id -> _id

* _id -> id

* remove identical tell me later route from api v4

* fix lint

* user model: fix issues with newStuff

* improve user#toJSONTransform

* fix typo

* improve newsPost.js

* fix(integration tests): do not return flags.newStuff if it was not selected

* fix news controller

* server side fixes, start refactoring client

* more client fixes

* automatically set author

* new stuff: show one post per user + drafts

* change default border radius for modals to 8px

* required fields and defaults

* slit news into its own component and fix static page

* noNewsPoster: move from i18n to apiError

* remove unused strings

* fix unit tests

* update apidocs

* add backward comparibility for flags.newStuff in api v3

* fix integration tests

* POST news: make integration test independent of number of posts

* api v3 news: render markdown

* static new-stuff: add padding and fix when user not logged in

* test flags.newStuff

* api v3: test setting flags.newStuff on PUT /user

* refactor news post cache and add tests

* remove new locales file

* more resilient tests

* more resilient tests

* refactor tests for NewsPost.updateLastNewsPost

* api v4: fix tests

* api v3: fix tests

* can set flags.newStuff in api v4

Co-authored-by: Keith Holliday <keithrholliday@gmail.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
Co-authored-by: Alys <Alys@users.noreply.github.com>
Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Co-authored-by: Carl Vuorinen <carl.vuorinen@gmail.com>
Co-authored-by: Rene Cordier <rene.cordier@gmail.com>
Co-authored-by: Forrest Hatfield <github@forresthatfield.com>
Co-authored-by: lucubro <88whacko@gmail.com>
Co-authored-by: negue <negue@users.noreply.github.com>
Co-authored-by: Alys <alice.harris@oldgods.net>
Co-authored-by: J.D. Sandifer <sandifer.jd@gmail.com>
Co-authored-by: Kirsty <kirsty-tortoise@users.noreply.github.com>
Co-authored-by: beatscribe <rattjp@gmail.com>
Co-authored-by: Phillip Thelen <phillip@habitica.com>
2020-10-13 10:15:52 -05:00
dependabot-preview[bot]
97ef3b1d4b build(deps): bump @vue/cli-plugin-babel in /website/client (#12665)
Bumps [@vue/cli-plugin-babel](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-babel) from 4.5.6 to 4.5.7.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.7/packages/@vue/cli-plugin-babel)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-12 13:31:33 +02:00
dependabot-preview[bot]
8e3ac280b0 build(deps): bump moment from 2.29.0 to 2.29.1 (#12663)
Bumps [moment](https://github.com/moment/moment) from 2.29.0 to 2.29.1.
- [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.29.0...2.29.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-10-12 13:31:14 +02:00
Matteo Pagliazzi
7fedbdde03 build(deps): bump @vue/cli-service in /website/client (#12669)
Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.5.6 to 4.5.7.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.7/packages/@vue/cli-service)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-12 13:30:50 +02:00
dependabot-preview[bot]
6ad808f717 build(deps): bump moment from 2.29.0 to 2.29.1 in /website/client (#12666)
Bumps [moment](https://github.com/moment/moment) from 2.29.0 to 2.29.1.
- [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.29.0...2.29.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-10-12 13:30:40 +02:00
dependabot-preview[bot]
c6541399bb build(deps): bump @vue/cli-plugin-router in /website/client (#12667)
Bumps [@vue/cli-plugin-router](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-router) from 4.5.6 to 4.5.7.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.7/packages/@vue/cli-plugin-router)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-12 13:30:10 +02:00
dependabot-preview[bot]
81028893b2 build(deps): bump @vue/cli-service in /website/client
Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.5.6 to 4.5.7.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.7/packages/@vue/cli-service)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-12 11:26:59 +00:00
dependabot-preview[bot]
943862c0ea build(deps-dev): bump sinon from 9.1.0 to 9.2.0 (#12661)
Bumps [sinon](https://github.com/sinonjs/sinon) from 9.1.0 to 9.2.0.
- [Release notes](https://github.com/sinonjs/sinon/releases)
- [Changelog](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sinonjs/sinon/compare/v9.1.0...v9.2.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-10-12 13:24:50 +02:00
dependabot-preview[bot]
43511aacb9 build(deps): bump @vue/cli-plugin-unit-mocha in /website/client (#12673)
Bumps [@vue/cli-plugin-unit-mocha](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-unit-mocha) from 4.5.6 to 4.5.7.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.7/packages/@vue/cli-plugin-unit-mocha)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-12 13:24:06 +02:00
dependabot-preview[bot]
ce68e2f855 build(deps): bump hellojs from 1.18.4 to 1.18.6 in /website/client (#12670)
Bumps [hellojs](https://github.com/MrSwitch/hello.js) from 1.18.4 to 1.18.6.
- [Release notes](https://github.com/MrSwitch/hello.js/releases)
- [Commits](https://github.com/MrSwitch/hello.js/compare/v1.18.4...v1.18.6)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-12 13:23:55 +02:00
dependabot-preview[bot]
ec06faef32 build(deps): bump @vue/cli-plugin-eslint in /website/client (#12671)
Bumps [@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-eslint) from 4.5.6 to 4.5.7.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.7/packages/@vue/cli-plugin-eslint)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-12 13:23:48 +02:00
dependabot-preview[bot]
cfac54d44c build(deps): bump vue-router from 3.4.5 to 3.4.6 in /website/client (#12672)
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.4.5 to 3.4.6.
- [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.5...v3.4.6)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-12 13:23:21 +02:00
dependabot-preview[bot]
f4b41bd958 build(deps): bump sass from 1.26.11 to 1.27.0 in /website/client (#12674)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.11 to 1.27.0.
- [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.11...1.27.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-10-12 13:23:04 +02:00
Alys
7d7d71e95f move comment to just above the code it refers to
Also adds "promotion" to the comment to help when we're grepping
for info about promos.
2020-10-12 12:54:34 +10:00
J Sanderson
2b21c2a28e Fix overflow in guild member text and keyboard inaccessible member/bank lists fixes #11067 (#12637)
* fix: guild member list overflow

* feat: make member/bank divs tabbable

* fix: bank button calls correct modal on keypress

* fix: review suggestions

* fix: svg size on firefox, row spacing
2020-10-10 10:34:59 +02:00
Matteo Pagliazzi
dfa8725c55 upgrade mongoose and fix tests (#12657) 2020-10-10 10:31:42 +02:00
Matteo Pagliazzi
1d8880c04d fix(run-rs): downgrade to working version 2020-10-08 12:45:42 +02:00
Melior
07fd3cef4c Merge branch 'develop' of github.com:HabitRPG/habitica into develop 2020-10-06 23:09:10 +02:00
Benoit Hetru
b58443140a Translated using Weblate (French)
Currently translated at 100.0% (716 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/
2020-10-06 22:52:10 +02:00
Sabe Jones
a0b93d57e4 Merge branch 'release' into develop 2020-10-06 15:50:05 -05:00
Sabe Jones
7cac574c31 4.162.0 2020-10-06 15:49:26 -05:00
Sabe Jones
86619a2ac9 chore(sprites): compile 2020-10-06 15:49:18 -05:00
Sabe Jones
058c1464d3 feat(content): Armoire and BGs 2020/10 2020-10-06 15:49:09 -05:00
Yowi
70e747c131 Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/es_419/
2020-10-06 16:32:13 +02:00
Yowi
8869d3ebf0 Translated using Weblate (Spanish (Latin America))
Currently translated at 100.0% (175 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es_419/
2020-10-06 15:46:44 +02:00
Yowi
d82f4f5c91 Translated using Weblate (Spanish (Latin America))
Currently translated at 98.3% (122 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/es_419/
2020-10-06 15:46:44 +02:00
Yowi
d9a6120cfe Translated using Weblate (Spanish (Latin America))
Currently translated at 91.4% (160 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es_419/
2020-10-06 13:53:12 +02:00
Yowi
5c7ad58ce4 Translated using Weblate (Spanish (Latin America))
Currently translated at 81.4% (1771 of 2175 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/
2020-10-06 13:53:10 +02:00
Yowi
284510d0a3 Translated using Weblate (Spanish (Latin America))
Currently translated at 70.2% (123 of 175 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es_419/
2020-10-06 13:15:15 +02:00
そら
0791848fa3 Translated using Weblate (Japanese)
Currently translated at 96.7% (178 of 184 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/
2020-10-06 09:55:44 +02:00
そら
466f109edb 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-10-06 09:55:43 +02:00
Geist Mann
87fe4aa28e Translated using Weblate (Latin)
Currently translated at 98.2% (55 of 56 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/la/
2020-10-05 19:17:44 +02:00
Geist Mann
baa86bab88 Translated using Weblate (Latin)
Currently translated at 100.0% (93 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/la/
2020-10-05 19:17:44 +02:00
Atticus
17cbe16773 Translated using Weblate (English (United Kingdom))
Currently translated at 97.8% (180 of 184 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/en_GB/
2020-10-05 19:17:43 +02:00
Matteo Pagliazzi
660f3635aa fix(habit): correct icon positions 2020-10-05 17:13:35 +02:00
RaitheOfDureya
10a28a9161 Removed unused I18N strings from the communityGuidelines.json files (related to issue #9957) (#12633)
* Remove `iAcceptCommunityGuidelines` from `communityGuidelines.json`

The string currently in use is `acceptCommunityGuidelines` located in 
`website/common/locales/en/npc.json`

* Removed unused `communityGuidelines.json` strings from other languages
2020-10-05 16:37:26 +02:00
RaitheOfDureya
2964eff298 Removed duplicated I18N strings from the content.json file (locales/en) (#12628) 2020-10-05 16:36:34 +02:00
RaitheOfDureya
7119763c1e Removed unused I18N strings from the defaultTasks.json files (related to issue #9957) (#12608)
* Removed unused I18N strings from `defaultTasks.json` file (locales\en)

* Removed unused I18N `defaultTasks.json` strings from all the other languages
2020-10-05 16:35:34 +02:00
Bart Enkelaar
12bd10a095 fix(task) - 11139 use start-from hours in due date calculation (#12609)
* fix(task) - 11139 use start-from hours in due date calculation

* fix(task) - 11139 - Initial setup of Task unit test

* Add more unit tests for formatDueDate
2020-10-05 16:19:47 +02:00
dependabot-preview[bot]
221c95eb14 build(deps): bump uuid from 8.3.0 to 8.3.1 in /website/client (#12647)
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.3.0 to 8.3.1.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.3.0...v8.3.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-10-05 12:35:26 +02:00
そら
7815d501fa 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-10-05 11:51:47 +02:00
そら
9dec717e10 Translated using Weblate (Japanese)
Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/
2020-10-05 11:51:46 +02:00
そら
d23368a826 Translated using Weblate (Japanese)
Currently translated at 87.5% (49 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/
2020-10-05 11:51:46 +02:00
そら
33913743e9 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-10-05 11:51:44 +02:00
dependabot-preview[bot]
d92b344e91 build(deps-dev): bump run-rs from 0.6.2 to 0.7.0 (#12618)
Bumps [run-rs](https://github.com/vkarpov15/run-rs) from 0.6.2 to 0.7.0.
- [Release notes](https://github.com/vkarpov15/run-rs/releases)
- [Changelog](https://github.com/vkarpov15/run-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vkarpov15/run-rs/compare/0.6.2...0.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-10-05 10:12:36 +02:00
dependabot-preview[bot]
def065d86a build(deps-dev): bump sinon from 9.0.3 to 9.1.0 (#12641)
Bumps [sinon](https://github.com/sinonjs/sinon) from 9.0.3 to 9.1.0.
- [Release notes](https://github.com/sinonjs/sinon/releases)
- [Changelog](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sinonjs/sinon/compare/v9.0.3...v9.1.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-10-05 09:48:15 +02:00
dependabot-preview[bot]
5b50761d9f build(deps): bump uuid from 8.3.0 to 8.3.1 (#12642)
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.3.0 to 8.3.1.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.3.0...v8.3.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-10-05 09:48:03 +02:00
blacksheep47
30a52e2bb8 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (2175 of 2175 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
2020-10-05 01:15:37 +02:00
mario yonan
b361e3fc82 Translated using Weblate (Arabic)
Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ar/
2020-10-04 17:53:05 +02:00
mario yonan
7419e8a926 Translated using Weblate (Arabic)
Currently translated at 13.9% (13 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ar/
2020-10-04 17:53:05 +02:00
そら
0d04509a97 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-10-04 17:53:04 +02:00
Anonymous
4950ceb814 Translated using Weblate (Czech)
Currently translated at 100.0% (93 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/
2020-10-04 16:28:12 +02:00
Anonymous
218d186969 Translated using Weblate (Czech)
Currently translated at 100.0% (93 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/
2020-10-04 16:25:37 +02:00
Anonymous
4f6306e748 Translated using Weblate (Czech)
Currently translated at 100.0% (93 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/
2020-10-04 16:25:23 +02:00
Anonymous
334478f3d4 Translated using Weblate (Czech)
Currently translated at 100.0% (93 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/
2020-10-04 16:24:42 +02:00
Tereza F
fd4c50083c Translated using Weblate (Czech)
Currently translated at 100.0% (93 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/
2020-10-04 16:24:38 +02:00
Martin Bartak
435471a48c Translated using Weblate (Czech)
Currently translated at 100.0% (93 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/
2020-10-04 16:23:40 +02:00
Tereza F
be96e2c3a4 Translated using Weblate (Czech)
Currently translated at 100.0% (93 of 93 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/
2020-10-04 16:23:23 +02:00
Madalena MJ
d018401f96 Translated using Weblate (Portuguese)
Currently translated at 98.7% (550 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt/
2020-10-04 09:07:21 +02:00
Madalena MJ
63bb9b8e68 Translated using Weblate (Portuguese)
Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/pt/
2020-10-04 07:57:03 +02:00
Lio Zam
682f559762 Translated using Weblate (German)
Currently translated at 99.8% (2172 of 2175 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
2020-10-03 23:43:40 +02:00
mattya 226
aa39af5ab4 Translated using Weblate (Japanese)
Currently translated at 95.2% (682 of 716 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
2020-10-03 19:34:58 +02:00
mattya 226
d9503ef35a Translated using Weblate (Japanese)
Currently translated at 98.9% (551 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
2020-10-03 19:34:54 +02:00
Matteo Pagliazzi
322a826576 Merge branch 'release' into develop 2020-10-03 16:56:19 +02:00
Matteo Pagliazzi
362dea6c5c fix(shopItem): correct syntax for popover triggers, fix #12638 2020-10-03 16:55:34 +02:00
Lio Zam
f74e908bd5 Translated using Weblate (German)
Currently translated at 99.8% (2171 of 2175 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
2020-10-03 13:48:57 +02:00
Anonymous
d4c11ff798 Translated using Weblate (German)
Currently translated at 99.8% (2171 of 2175 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
2020-10-03 13:21:13 +02:00
Lio Zam
24bc3822b6 Translated using Weblate (German)
Currently translated at 99.8% (2171 of 2175 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
2020-10-03 13:21:11 +02:00
Kitty Kat
4fc796b177 Translated using Weblate (Hindi)
Currently translated at 87.0% (316 of 363 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/hi/
2020-10-03 12:01:53 +02:00
そら
c099242cb7 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-10-03 12:01:53 +02:00
そら
f7142b6f55 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-10-03 12:01:53 +02:00
そら
c0be28072b Translated using Weblate (Japanese)
Currently translated at 85.7% (48 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/
2020-10-03 12:01:52 +02:00
Kitty Kat
a218f9ef25 Translated using Weblate (Hindi)
Currently translated at 86.7% (315 of 363 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/hi/
2020-10-03 07:54:12 +02:00
blacksheep47
65e881fa5a Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (2175 of 2175 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
2020-10-03 07:54:11 +02:00
Sabe Jones
2c34972629 4.161.4 2020-10-02 15:08:26 -05:00
Sabe Jones
9bd07034a5 fix(events): make sure we don't create "fall interim" gear 2020-10-02 15:08:13 -05:00
Melior
285507d68a Translated using Weblate (German)
Currently translated at 99.6% (2168 of 2175 strings)

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

Translated using Weblate (Spanish)

Currently translated at 86.9% (1892 of 2175 strings)

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

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/

Translated using Weblate (Japanese)

Currently translated at 98.3% (548 of 557 strings)

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

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 (Japanese)

Currently translated at 100.0% (298 of 298 strings)

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

Translated using Weblate (Japanese)

Currently translated at 83.9% (47 of 56 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (504 of 504 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (67 of 67 strings)

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

Translated using Weblate (Polish)

Currently translated at 91.0% (122 of 134 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 94.6% (477 of 504 strings)

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

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/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (15 of 15 strings)

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

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/

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 (Polish)

Currently translated at 100.0% (184 of 184 strings)

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

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 (Polish)

Currently translated at 100.0% (363 of 363 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (180 of 180 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (2175 of 2175 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (716 of 716 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (363 of 363 strings)

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

Translated using Weblate (Russian)

Currently translated at 94.5% (2056 of 2175 strings)

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

Translated using Weblate (German)

Currently translated at 99.5% (2166 of 2175 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (363 of 363 strings)

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

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 (Japanese)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (184 of 184 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/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 (Japanese)

Currently translated at 100.0% (298 of 298 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (328 of 328 strings)

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

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/

Translated using Weblate (Italian)

Currently translated at 100.0% (2175 of 2175 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2175 of 2175 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2175 of 2175 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2175 of 2175 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (363 of 363 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (363 of 363 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (363 of 363 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/de/
2020-10-02 22:07:43 +02:00
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
RaitheOfDureya
0a2e50ce76 Removed unused I18N strings from the contrib.json files (related to issue #9957) (#12589)
* Removed unused I18N strings from the `contrib.json` file (locales\en)

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

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-10-02 19:06:12 +02:00
Matteo Pagliazzi
49d8c739c0 Merge PR #12588
Squashed commit of the following:

commit 87211e0d4b591cdd80492cfe67c5af7cadfaf1c6
Merge: 2c01e6347d 254e6b47de
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Fri Oct 2 19:00:56 2020 +0200

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

commit 254e6b47de
Author: Raithe Of Dureya <raitheofdureya@gmail.com>
Date:   Wed Sep 23 00:56:19 2020 +0200

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

commit 7b4f2c3398
Author: Raithe Of Dureya <raitheofdureya@gmail.com>
Date:   Wed Sep 23 00:41:53 2020 +0200

    Removed unused I18N strings from the `groups.json` file (locales\en)
2020-10-02 19:01:27 +02:00
Matteo Pagliazzi
2c01e6347d fixed header bug (#12632)
Co-authored-by: Shamika Kumar <shamika_kumar@Shamikas-MacBook-Pro.local>
2020-10-02 18:56:01 +02:00
projectormato
d050ef4779 Add aria-label to header (#12584)
* Add aria-label to classBadge.

* Add aria-label to the logo in the top left.

* Revert "Add aria-label to the logo in the top left."

This reverts commit f1e6a35cf1.
2020-10-02 18:53:46 +02: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
Shamika Kumar
e4e980a6e3 fixed header bug 2020-09-30 12:41:13 +05:30
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
Sabe Jones
cfa4d03e45 4.159.1 2020-09-22 09:49:16 -05:00
Sabe Jones
f28c5a563a fix(news): missing Bailey paragraph 2020-09-22 09:48:58 -05:00
Matteo Pagliazzi
0455f08ec5 fix(gem icon): update gem icon 2020-09-22 16:46:27 +02:00
Matteo Pagliazzi
48193dce59 Revert "Revert "fix(gem icon in menu): add hover animation""
This reverts commit ffe8d34acb.
2020-09-22 16:39:01 +02:00
Matteo Pagliazzi
ffe8d34acb Revert "fix(gem icon in menu): add hover animation"
This reverts commit 74428d0727.
2020-09-22 16:35:47 +02: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
Sabe Jones
12c7fb7b27 4.159.0 2020-09-22 09:09:51 -05:00
Sabe Jones
2428347836 chore(news): Bailey 2020-09-22 09:09:43 -05:00
Sabe Jones
5aab13b28b Merge branch 'sabrecat/fall-2020' into release 2020-09-22 09:00:21 -05:00
Matteo Pagliazzi
caa02141b8 Merge branch 'release' into develop 2020-09-22 15:53:28 +02:00
Matteo Pagliazzi
74428d0727 fix(gem icon in menu): add hover animation 2020-09-22 15:53:05 +02:00
Sabe Jones
0a15c0f1d8 fix(event): various content corrections 2020-09-21 19:59:13 -05:00
Sabe Jones
3aa58398b7 chore(sprites): compile 2020-09-21 14:34:45 -05:00
Sabe Jones
9450f9ee1d feat(event): Fall Festival 2020 2020-09-21 14:34:38 -05: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
Matteo Pagliazzi
58a73dd62a 4.158.0 2020-09-21 16:27:24 +02:00
Matteo Pagliazzi
83aca20ce5 Fall Festival Gem Promo (#138)
* content: add gems blocks

* gemsBlocks: include ios and android identifiers

* wip: promo code

* split common constants into multiple files

* add second promo part

* geCurrentEvent, refactor promo

* fix lint

* fix exports, use world state api

* start adding world state tests

* remove console.log

* use gems block for purchases

* remove comments

* fix most unit tests

* restore comment

* fix lint

* prevent apple/google gift tests from breaking other tests when stub is not reset

* fix unit tests, clarify tests names

* iap: use gift object when gifting gems

* allow gift object with less data

* fix iap tests, remove findById stubs

* iap: require less data from the mobile apps

* apply discounts

* add missing worldState file

* fix lint

* add test event

* start removing 20 gems option for web

* start adding support for all gems packages on web

* fix unit tests for apple, stripe and google

* amazon: support all gems blocks

* paypal: support all gems blocks

* fix payments unit tests, add tests for getGemsBlock

* web: add gems plans with discounts, update stripe

* fix amazon and paypal clients, payments success modals

* amazon pay: disabled state

* update icons, start abstracting payments buttons

* begin redesign

* redesign gems modal

* fix buttons

* fix hover color for gems modal close icon

* add key to world state current event

* extend test event length

* implement gems modals designs

* early test fall2020

* fix header banner position

* add missing files

* use iso 8601 for dates, minor ui fixes

* fix time zones

* events: fix ISO8601 format

* fix css indentation

* start abstracting banners

* refactor payments buttons

* test spooky, fix group plans box

* implement gems promo banners, refactor banners, fixes

* fix lint

* fix dates

* remove unused i18n strings

* fix stripe integration test

* fix world state integration tests

* the current active event

* add missing unit tests

* add storybook story for payments buttons component

* fix typo

* fix(stripe): correct label when gifting subscriptions
2020-09-21 16:22:13 +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
Matteo Pagliazzi
82e6d544c8 fix(i18n) restore missing strings 2020-09-21 09:42:18 +02:00
Matteo Pagliazzi
70661da94d fix(settings.json): add back resetAccount string 2020-09-19 15:45:23 +02:00
Melior
069a133546 Merge branch 'origin/develop' into Weblate. 2020-09-17 22:40:48 +02:00
Sabe Jones
6e49831ab3 4.157.1 2020-09-17 15:34:26 -05:00
Sabe Jones
81cd09d0f5 chore(news): Bailey 2020-09-17 15:33:46 -05:00
Melior
1aca81d15d Translated using Weblate (Dutch)
Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (Czech)

Currently translated at 89.3% (1913 of 2141 strings)

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

Translated using Weblate (Hindi)

Currently translated at 11.5% (38 of 328 strings)

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

Translated using Weblate (Hindi)

Currently translated at 98.2% (55 of 56 strings)

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

Translated using Weblate (Hindi)

Currently translated at 85.9% (311 of 362 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/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 100.0% (63 of 63 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (63 of 63 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 96.5% (538 of 557 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 93.6% (59 of 63 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 93.6% (59 of 63 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 74.6% (47 of 63 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 74.6% (47 of 63 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (67 of 67 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (67 of 67 strings)

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

Translated using Weblate (Hindi)

Currently translated at 10.9% (36 of 328 strings)

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

Translated using Weblate (Hindi)

Currently translated at 10.3% (34 of 328 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (504 of 504 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (716 of 716 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (362 of 362 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (179 of 179 strings)

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

Translated using Weblate (French)

Currently translated at 98.8% (708 of 716 strings)

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

Translated using Weblate (French)

Currently translated at 98.8% (708 of 716 strings)

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

Translated using Weblate (French)

Currently translated at 98.4% (705 of 716 strings)

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

Translated using Weblate (French)

Currently translated at 98.4% (705 of 716 strings)

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

Translated using Weblate (French)

Currently translated at 98.3% (704 of 716 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.9% (2139 of 2141 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 98.4% (323 of 328 strings)

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

Translated using Weblate (Japanese)

Currently translated at 98.2% (547 of 557 strings)

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

Translated using Weblate (Hindi)

Currently translated at 96.7% (90 of 93 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (716 of 716 strings)

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

Translated using Weblate (Ukrainian)

Currently translated at 38.7% (36 of 93 strings)

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

Translated using Weblate (Ukrainian)

Currently translated at 38.7% (36 of 93 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (Ukrainian)

Currently translated at 29.0% (27 of 93 strings)

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

Translated using Weblate (Ukrainian)

Currently translated at 29.0% (27 of 93 strings)

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

Translated using Weblate (Ukrainian)

Currently translated at 27.9% (26 of 93 strings)

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

Translated using Weblate (Ukrainian)

Currently translated at 27.9% (26 of 93 strings)

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

Translated using Weblate (Ukrainian)

Currently translated at 24.7% (23 of 93 strings)

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

Translated using Weblate (Ukrainian)

Currently translated at 24.7% (23 of 93 strings)

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

Translated using Weblate (Hindi)

Currently translated at 75.5% (421 of 557 strings)

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

Translated using Weblate (Hindi)

Currently translated at 85.7% (120 of 140 strings)

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

Translated using Weblate (Hindi)

Currently translated at 92.4% (86 of 93 strings)

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

Translated using Weblate (Hindi)

Currently translated at 79.4% (1701 of 2141 strings)

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

Translated using Weblate (Hindi)

Currently translated at 90.3% (84 of 93 strings)

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

Translated using Weblate (Hindi)

Currently translated at 3.9% (13 of 328 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 80.9% (1734 of 2141 strings)

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

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/

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/

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/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (Russian)

Currently translated at 92.4% (160 of 173 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (Russian)

Currently translated at 97.8% (493 of 504 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (504 of 504 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.0% (709 of 716 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (716 of 716 strings)

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

Translated using Weblate (German)

Currently translated at 99.0% (709 of 716 strings)

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

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 (Russian)

Currently translated at 99.7% (361 of 362 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (179 of 179 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (179 of 179 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (179 of 179 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/
2020-09-17 20:06:09 +02:00
Melior
dc558df0b1 Translated using Weblate (French)
Currently translated at 99.4% (172 of 173 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (504 of 504 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (362 of 362 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (362 of 362 strings)

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

Merge branch 'origin/develop' into Weblate.

Translated using Weblate (Greek)

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (28 of 28 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (140 of 140 strings)

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

Translated using Weblate (Norwegian Bokmål)

Currently translated at 93.6% (469 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 91.5% (194 of 212 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (252 of 252 strings)

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

Translated using Weblate (Dutch)

Currently translated at 96.4% (135 of 140 strings)

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

Translated using Weblate (Danish)

Currently translated at 85.7% (120 of 140 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 80.4% (1723 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 97.1% (206 of 212 strings)

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

Translated using Weblate (Swedish)

Currently translated at 100.0% (27 of 27 strings)

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

Translated using Weblate (Turkish)

Currently translated at 93.6% (469 of 501 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.8% (2137 of 2141 strings)

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

Translated using Weblate (Slovak)

Currently translated at 91.0% (193 of 212 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.0% (210 of 212 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 80.3% (1720 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 80.3% (1720 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 80.2% (1719 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 80.2% (1718 of 2141 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (252 of 252 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (501 of 501 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (361 of 361 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Dutch)

Currently translated at 83.9% (47 of 56 strings)

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

Translated using Weblate (Dutch)

Currently translated at 90.3% (84 of 93 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.8% (2137 of 2141 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 78.9% (199 of 252 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 96.2% (178 of 185 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 80.1% (1717 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 (Spanish (Latin America))

Currently translated at 78.9% (199 of 252 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 96.2% (178 of 185 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 80.1% (1717 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 69.6% (39 of 56 strings)

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

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 (Chinese (Hong Kong))

Currently translated at 100.0% (134 of 134 strings)

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

Translated using Weblate (Hindi)

Currently translated at 97.3% (290 of 298 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 82.2% (1760 of 2141 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 79.7% (1708 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 (Polish)

Currently translated at 100.0% (31 of 31 strings)

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

Translated using Weblate (Russian)

Currently translated at 95.6% (2048 of 2141 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (Portuguese)

Currently translated at 81.2% (1739 of 2141 strings)

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

Translated using Weblate (Polish)

Currently translated at 80.8% (1732 of 2141 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.7% (2135 of 2141 strings)

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

Translated using Weblate (Indonesian)

Currently translated at 79.5% (1703 of 2141 strings)

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

Translated using Weblate (Spanish)

Currently translated at 88.3% (1891 of 2141 strings)

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

Translated using Weblate (Romanian)

Currently translated at 100.0% (230 of 230 strings)

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

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (230 of 230 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.7% (2135 of 2141 strings)

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

Translated using Weblate (Spanish)

Currently translated at 88.3% (1891 of 2141 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (708 of 708 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 96.2% (536 of 557 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.7% (2135 of 2141 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (501 of 501 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 95.1% (176 of 185 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (501 of 501 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (298 of 298 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (328 of 328 strings)

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

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 (Chinese (Simplified))

Currently translated at 100.0% (557 of 557 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (27 of 27 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (78 of 78 strings)

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

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 (French)

Currently translated at 100.0% (27 of 27 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 85.7% (48 of 56 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (501 of 501 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/
2020-09-15 22:13:29 +02:00
Sabe Jones
da6f275adc Merge branch 'release' into develop 2020-09-15 14:41:25 -05:00
Sabe Jones
633961e8a7 4.157.0 2020-09-15 14:40:01 -05:00
Sabe Jones
284d67b385 fix(sprites): mystery set
and Turquoise Bailey
2020-09-15 14:39:47 -05:00
Sabe Jones
78fe87055c fix(sprites): filenam fix 2/2 2020-09-14 16:14:42 -05:00
Sabe Jones
d47bd198ca fix(sprites): filename fix part 1/2 2020-09-14 16:12:43 -05:00
Sabe Jones
e82d532f58 chore(sprites): compile 2020-09-14 16:06:00 -05:00
Sabe Jones
34e87c4b3f feat(content): Turquoise Potion Quest 2020-09-14 16:05:54 -05:00
Matteo Pagliazzi
a3193c56c1 fix(i18n): temporarily restore two strings 2020-09-14 17:22:39 +02: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
Matteo Pagliazzi
bff7d9bab3 fix(market): remove dead code 2020-09-14 12:40:08 +02:00
Matteo Pagliazzi
99d6ce5bdb Removed unused I18N strings from the settings.json files (related to issue #9957) (#12552)
* Removed unused I18N strings from the `settings.json` file (locales/en)

* Remove `couponText` (duplicated) from locales/en

Note: "...coupon codes..."

* Removed `settings.json`'s unused I18N strings from all the other languages

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-14 12:21:37 +02:00
RaitheOfDureya
b0817d7f53 Removed unused I18N strings from the subscriber.json files (related to issue #9957) (#12548)
* Removed unused I18N strings from the `subscriber.json` file (locales/en)

* Remove gemsPurchaseNote and subscriptionAlreadySubscribedLeadIn from locales/en

@paglias: "They're going to be removed in an upcoming PR"

* Removed `subscriber.json`'s unused I18N strings in all other languages
2020-09-14 12:21:19 +02:00
dependabot-preview[bot]
09622df94a build(deps): bump @vue/cli-plugin-router in /website/client (#12577)
Bumps [@vue/cli-plugin-router](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-router) from 4.5.4 to 4.5.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.6/packages/@vue/cli-plugin-router)

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-14 12:12:17 +02:00
dependabot-preview[bot]
7d0c97ae09 build(deps): bump @vue/cli-plugin-babel in /website/client (#12578)
Bumps [@vue/cli-plugin-babel](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-babel) from 4.5.4 to 4.5.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.6/packages/@vue/cli-plugin-babel)

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-14 12:08:49 +02:00
dependabot-preview[bot]
ac64ad63bb build(deps): bump @vue/cli-plugin-unit-mocha in /website/client (#12576)
Bumps [@vue/cli-plugin-unit-mocha](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-unit-mocha) from 4.5.4 to 4.5.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.6/packages/@vue/cli-plugin-unit-mocha)

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-14 12:08:35 +02:00
dependabot-preview[bot]
166ed6e237 build(deps): [security] bump bl from 1.2.2 to 1.2.3 (#12568)
Bumps [bl](https://github.com/rvagg/bl) from 1.2.2 to 1.2.3. **This update includes a security fix.**
- [Release notes](https://github.com/rvagg/bl/releases)
- [Commits](https://github.com/rvagg/bl/compare/v1.2.2...v1.2.3)

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-14 12:06:23 +02:00
dependabot-preview[bot]
59d0ce1dfb build(deps): bump got from 11.6.0 to 11.6.2 (#12571)
Bumps [got](https://github.com/sindresorhus/got) from 11.6.0 to 11.6.2.
- [Release notes](https://github.com/sindresorhus/got/releases)
- [Commits](https://github.com/sindresorhus/got/compare/v11.6.0...v11.6.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-14 12:06:04 +02:00
dependabot-preview[bot]
1d44e0e6fa build(deps): bump moment from 2.27.0 to 2.28.0 (#12574)
Bumps [moment](https://github.com/moment/moment) from 2.27.0 to 2.28.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.27.0...2.28.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-14 12:05:43 +02:00
dependabot-preview[bot]
780c2857b1 build(deps): bump bootstrap-vue from 2.16.0 to 2.17.0 in /website/client (#12575)
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.16.0 to 2.17.0.
- [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.16.0...v2.17.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-14 12:05:36 +02:00
dependabot-preview[bot]
ca995648f4 build(deps): bump moment from 2.27.0 to 2.28.0 in /website/client (#12579)
Bumps [moment](https://github.com/moment/moment) from 2.27.0 to 2.28.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.27.0...2.28.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-14 12:05:09 +02:00
dependabot-preview[bot]
0c03093173 build(deps): bump @vue/cli-plugin-eslint in /website/client (#12581)
Bumps [@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-eslint) from 4.5.4 to 4.5.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.6/packages/@vue/cli-plugin-eslint)

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-14 12:04:58 +02:00
dependabot-preview[bot]
4183cfb8a0 build(deps): bump @vue/cli-service in /website/client (#12582)
Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.5.4 to 4.5.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.6/packages/@vue/cli-service)

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-14 12:04:46 +02:00
Matteo Pagliazzi
0837d17616 fix(client): use correct interpolation format for strings 2020-09-12 19:08:42 +02:00
Matteo Pagliazzi
52667661c6 fix(overview): use correct indentation 2020-09-12 17:25:16 +02:00
Sabe Jones
9adf5160fe Merge branch 'release' into develop 2020-09-11 12:56:23 -05:00
Sabe Jones
da796c305d 4.156.3 2020-09-11 12:56:06 -05:00
Matteo Pagliazzi
953c84260f fix(tasks and groupd): do not apply default due filter to challenges, fix edge case in group loading 2020-09-11 19:53:28 +02:00
Vipul Khandelwal
c133445ff6 Fixed Privacy Policy anchor tag target attribute (#12554)
* Fixed Privacy Policy and terms anchor tag target attribute from blanck to blank

* Fixed one more Privacy Policy anchor tag target attribute from blanck to blank
2020-09-11 12:32:59 +02:00
RaitheOfDureya
f311fe201b Removed unused I18N strings from the tasks.json file (related to issue #9957) (#12526)
* Remove sureDeleteCompletedTodos

* Remove lotOfToDos

* Remove deleteToDosExplanation

* Remove addsingle

* Remove newHabit and newHabitBulk

* Remove habitsDesc

* Remove checklistText

\bchecklistText\b - No Results

* Remove expandChecklist

* Remove extraNotes

* Remove direction/Actions

* Remove attributeAllocation and attributeAllocationHelp

* Remove newDaily, newDailyBulk and dailysDesc

* Remove repeatHelpTitle

* Remove dailyRepeatHelpContent and weeklyRepeatHelpContent

* Remove repeatDays and repeatDaysWeek

* Remove newTodo

\bnewTodo\b

* Remove newTodoBulk and todosDesc

* Remove dated

* Remove rewardsDesc

\brewardsDesc\b - No Results

* Remove ingamerewards

* Remove newReward and newRewardBulk

* Remove clearTags, hideTags and showTags

* Remove startDateHelpTitle and startDateHelp

* Remove streakerAchievement

* Remove fortifyText

* Remove confirmFortify

* Remove emptyTask

* Remove dailiesRestingInInn

* Remove habitHelp1, habitHelp2 and habitHelp3

* Remove newbieGuild

* Remove dailyHelp1 to dailyHelp5

* Remove toDoHelp1 to toDoHelp4

* Remove rewardHelp1 to rewardHelp4

* Remove clickForHelp

* Remove strengthExample, intelligenceExample, perceptionExample and constitutionExample

* Remove counterPeriod, counterPeriodDay, counterPeriodWeek and counterPeriodMonth

* Remove habitCounter, habitCounterUp and habitCounterDown

* Remove repeatZero, repeatType, repeatTypeHelpTitle and repeatTypeHelp

* Remove onDays

* Remove groupTasksByChallenge

* Remove taskNotes

\btaskNotes\b - No Results

* Remove monthlyRepeatHelpContent and yearlyRepeatHelpContent

* Remove summaryStart

* Remove yesterDailiesTitle, yesterDailiesOptionTitle and yesterDailiesDescription

* Remove repeatDayError and searchTasks

* Revert "Remove habitsDesc"

This reverts commit a9d8f4089c526bc7e7d0fdc90b1b911d19dff9c2.

* Revert "Remove todosDesc"

* Revert "Remove dailysDesc"

* Revert "Remove rewardsDesc"

* Revert "Remove expandChecklist"

This reverts commit 62f3bbea2dc8340018c01efdc7ffcf4c6b3d46ae.

* Remove taskAlias, taskAliasPopover, taskAliasPlaceholder and taskAliasPopoverWarning

> @paglias: "regarding the alias-related keys you can remove them"

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

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-11 12:31:47 +02:00
Scott
5716b4eb72 Frontend support and adjustments of current banned words blocking code to support new implementation (Fixes #12405) (#12496)
* Added the "Allow banned words" checkbox to create/update guild forms

Added the "Allow banned words" checkbox to guild create/update forms which are only visible to Admins

* Updated create/update group API to include bannedWordsAllowed property

Added logic to set bannedWordsAllowed depending on conditions

* Updated word banning logic to use bannedWordsAllowed guild value instead

Updated word banning logic to use bannedWordsAllowed guild value and deleted hardcoded guild file & import

* Updated banned words test

* Pull Request amends

Removed the setting of bannedWordsAllowed during group creation
Added v-once to elements
Updated existing test and added tests related to bannedWordsAllowed functionality

* Small amend

* Small amend

Removed leftover code that was left during testing
2020-09-11 10:29:30 +02:00
dependabot-preview[bot]
c89f66e4b8 build(deps): [security] bump node-fetch from 2.6.0 to 2.6.1 (#12557)
Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1. **This update includes a security fix.**
- [Release notes](https://github.com/bitinn/node-fetch/releases)
- [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.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-11 10:07:02 +02:00
Melior
503d79b320 Merge branch 'origin/develop' into Weblate. 2020-09-10 22:16:40 +02:00
Sabe Jones
be58c8193e 4.156.2 2020-09-10 15:14:14 -05:00
Sabe Jones
60ce16bf08 chore(news): bailey 2020-09-10 15:14:04 -05:00
Sabe Jones
83ec53c614 Merge branch 'develop' into release 2020-09-10 15:06:51 -05:00
Melior
d7b251c5eb Translated using Weblate (French)
Currently translated at 100.0% (230 of 230 strings)

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

Translated using Weblate (Latin)

Currently translated at 81.6% (455 of 557 strings)

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

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/

Translated using Weblate (French)

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (Czech)

Currently translated at 89.0% (1907 of 2141 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (230 of 230 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (230 of 230 strings)

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

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 (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 (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 (French)

Currently translated at 99.6% (555 of 557 strings)

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

Translated using Weblate (French)

Currently translated at 99.6% (555 of 557 strings)

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

Translated using Weblate (French)

Currently translated at 99.2% (553 of 557 strings)

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

Translated using Weblate (French)

Currently translated at 99.2% (553 of 557 strings)

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

Translated using Weblate (French)

Currently translated at 98.9% (551 of 557 strings)

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

Translated using Weblate (Latin)

Currently translated at 98.2% (226 of 230 strings)

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

Translated using Weblate (Latin)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Polish)

Currently translated at 90.7% (196 of 216 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (557 of 557 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.6% (2133 of 2141 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (557 of 557 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (2141 of 2141 strings)

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

Translated using Weblate (Russian)

Currently translated at 99.1% (552 of 557 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (557 of 557 strings)

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

Translated using Weblate (German)

Currently translated at 99.8% (556 of 557 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
2020-09-10 21:43:17 +02:00
Sabe Jones
5fa140376e fix(sprites): pixel scoot 2020-09-10 09:33:47 -05:00
Matteo Pagliazzi
79b218ecf0 Merge branch 'release' of github.com:HabitRPG/habitica into develop 2020-09-10 11:40:25 +02:00
Matteo Pagliazzi
e2442fe56d fix(test): tag.challenge is a boolean 2020-09-10 11:39:19 +02:00
Matteo Pagliazzi
d9e85b329f 4.156.1 2020-09-10 11:17:54 +02:00
Matteo Pagliazzi
05f22ababc fix(challenge tags); change type to Mixed in preparation for migration 2020-09-10 11:14:09 +02:00
Matteo Pagliazzi
405ef7a3ba Merge branch 'develop' into remove-unused-settings 2020-09-09 12:05:32 +02:00
Melior
b61162e475 Merge branch 'origin/develop' into Weblate. 2020-09-08 23:16:12 +02:00
Sabe Jones
d7cc317208 Merge branch 'release' into develop 2020-09-08 16:11:29 -05:00
Sabe Jones
9f988acb55 4.156.0 2020-09-08 16:10:36 -05:00
Sabe Jones
eec57cb9b8 chore(sprites): compile 2020-09-08 16:10:17 -05:00
Sabe Jones
f5eb868763 feat(content): Backgrounds and Armoire items 2020-09-08 16:10:01 -05:00
Raithe Of Dureya
7f67d5a8a6 Removed settings.json's unused I18N strings from all the other languages 2020-09-08 19:38:11 +02:00
Raithe Of Dureya
731b241b46 Remove couponText (duplicated) from locales/en
Note: "...coupon codes..."
2020-09-08 19:18:28 +02:00
Raithe Of Dureya
912fef88a0 Removed unused I18N strings from the settings.json file (locales/en) 2020-09-08 19:12:51 +02:00
Matteo Pagliazzi
96d22e54f8 fix(task creation): correctly clone selected tags array, fixes #12447 2020-09-08 12:52:09 +02:00
Melior
03bf7b7d59 Translated using Weblate (Dutch)
Currently translated at 99.8% (2131 of 2135 strings)

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

Translated using Weblate (Czech)

Currently translated at 89.0% (1902 of 2135 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.7% (2129 of 2135 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (708 of 708 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (361 of 361 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% (252 of 252 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.4% (704 of 708 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (English (Pirate))

Currently translated at 96.4% (483 of 501 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/en@pirate/

Translated using Weblate (Italian)

Currently translated at 100.0% (2135 of 2135 strings)

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

Translated using Weblate (English (Pirate))

Currently translated at 99.6% (297 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/en@pirate/

Translated using Weblate (Italian)

Currently translated at 100.0% (708 of 708 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (252 of 252 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (501 of 501 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (2135 of 2135 strings)

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

Translated using Weblate (German)

Currently translated at 94.6% (53 of 56 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (361 of 361 strings)

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

Translated using Weblate (Spanish)

Currently translated at 93.9% (665 of 708 strings)

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

Translated using Weblate (Spanish)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Spanish)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (Spanish)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (252 of 252 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (501 of 501 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (708 of 708 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2135 of 2135 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Italian)

Currently translated at 99.5% (705 of 708 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (361 of 361 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (93 of 93 strings)

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

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 98.6% (144 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 97.1% (206 of 212 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (252 of 252 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (252 of 252 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 93.8% (199 of 212 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (501 of 501 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (2135 of 2135 strings)

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

Translated using Weblate (German)

Currently translated at 99.8% (2131 of 2135 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Russian)

Currently translated at 98.7% (699 of 708 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (708 of 708 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (German)

Currently translated at 99.5% (705 of 708 strings)

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

Translated using Weblate (Russian)

Currently translated at 99.7% (360 of 361 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (361 of 361 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (361 of 361 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (361 of 361 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (93 of 93 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/
2020-09-08 10:44:22 +02:00
Matteo Pagliazzi
78016c0aeb fix(modals): apply base styles everywhere, fixes #12524 2020-09-07 21:24:58 +02:00
tsukimi2
b0786647ed Bugfix challenge tags to normal tags after a challenge has ended/deleted (#12341)
* Fix bug in challenge tags not converted to normal tags after challenge ended/deleted

* Added test cases to test bug fix

* Set tag.challenge from String to Boolean in tag model schema

* Update existing test with tag challenge set to boolean instead of string

* Added migration file for converting tag challenge field from string to bool

* Implement suggestions from ilnt

* Use mongoose instead of Mock in migration

* Change from update to bulkwrite

* update users individually

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-07 16:48:22 +02:00
Kirsty
1b25d30ac6 Correctly filter tasks in challenges and remove filters where unhelpful (#12522)
* Correctly filter tasks in challenges and remove filters where unhelpful

* update isDue property on the client as soon as challenges are created or edited

* change method of update for task on receiving data

* try different assign method

* fix lint

* fix issue with data reactivity

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-07 16:11:28 +02:00
Matteo Pagliazzi
362677acb8 fix(checklists): correctly hide original input in disabled state, fixes #12528 2020-09-07 15:42:04 +02:00
Kirsty
d37c156fa0 Filter challenge by owned (#12527)
* when filtering by owned challenges, challenges that a user owns but has not joined will be included

* add tests for filtering challenges by owned

* fix lint
2020-09-07 15:30:01 +02:00
dependabot-preview[bot]
e5ccb634e0 build(deps): bump @babel/core from 7.11.4 to 7.11.6 (#12536)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.4 to 7.11.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.6/packages/babel-core)

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-07 11:59:03 +02:00
dependabot-preview[bot]
cea6cbad50 build(deps): bump image-size from 0.8.3 to 0.9.1 (#12538)
Bumps [image-size](https://github.com/image-size/image-size) from 0.8.3 to 0.9.1.
- [Release notes](https://github.com/image-size/image-size/releases)
- [Commits](https://github.com/image-size/image-size/compare/v0.8.3...v0.9.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-07 11:57:00 +02:00
dependabot-preview[bot]
68584e25c1 build(deps): bump @babel/preset-env from 7.11.0 to 7.11.5 (#12534)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.11.0 to 7.11.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.5/packages/babel-preset-env)

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-07 11:55:31 +02:00
dependabot-preview[bot]
fbab46eab0 build(deps-dev): bump monk from 7.3.1 to 7.3.2 (#12533)
Bumps [monk](https://github.com/Automattic/monk) from 7.3.1 to 7.3.2.
- [Release notes](https://github.com/Automattic/monk/releases)
- [Changelog](https://github.com/Automattic/monk/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Automattic/monk/compare/v7.3.1...v7.3.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-07 11:55:25 +02:00
dependabot-preview[bot]
2740c02f35 build(deps): bump mongoose from 5.10.2 to 5.10.3 (#12532)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.10.2 to 5.10.3.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.10.2...5.10.3)

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-07 11:55:16 +02:00
dependabot-preview[bot]
ffb51fc18b build(deps): bump habitica-markdown from 2.0.2 to 3.0.0 (#12537)
Bumps [habitica-markdown](https://github.com/HabitRPG/habitica-markdown) from 2.0.2 to 3.0.0.
- [Release notes](https://github.com/HabitRPG/habitica-markdown/releases)
- [Commits](https://github.com/HabitRPG/habitica-markdown/compare/v2.0.2...v3.0.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-07 11:53:58 +02:00
dependabot-preview[bot]
d19fb4f489 build(deps): bump got from 11.5.2 to 11.6.0 (#12539)
Bumps [got](https://github.com/sindresorhus/got) from 11.5.2 to 11.6.0.
- [Release notes](https://github.com/sindresorhus/got/releases)
- [Commits](https://github.com/sindresorhus/got/compare/v11.5.2...v11.6.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-07 11:53:42 +02:00
dependabot-preview[bot]
49bfe386a6 build(deps): [security] bump serialize-javascript in /website/client (#12542)
Bumps [serialize-javascript](https://github.com/yahoo/serialize-javascript) from 3.0.0 to 3.1.0. **This update includes a security fix.**
- [Release notes](https://github.com/yahoo/serialize-javascript/releases)
- [Commits](https://github.com/yahoo/serialize-javascript/compare/v3.0.0...v3.1.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-07 11:53:32 +02:00
dependabot-preview[bot]
93ee579bbf build(deps): bump @babel/register from 7.10.5 to 7.11.5 (#12541)
Bumps [@babel/register](https://github.com/babel/babel/tree/HEAD/packages/babel-register) from 7.10.5 to 7.11.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.5/packages/babel-register)

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-07 11:52:48 +02:00
dependabot-preview[bot]
f9ed36a9f2 build(deps): bump habitica-markdown in /website/client (#12545)
Bumps [habitica-markdown](https://github.com/HabitRPG/habitica-markdown) from 2.0.2 to 3.0.0.
- [Release notes](https://github.com/HabitRPG/habitica-markdown/releases)
- [Commits](https://github.com/HabitRPG/habitica-markdown/compare/v2.0.2...v3.0.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-07 11:52:29 +02:00
Matteo Pagliazzi
e965f6a28f Merge branch 'release' into develop 2020-09-05 13:10:57 +02:00
Sabe Jones
d98932e183 4.155.2 2020-09-04 17:30:54 -05:00
Sabe Jones
a91c2f7c7c fix(settings): revert axios version due to account delete issue 2020-09-04 17:30:46 -05:00
Mike-Antonacci
5122d137b0 Change spellRogueStealthMaxedOut and spellAlreadyCast to a clearer wo… (#12497)
* Change spellRogueStealthMaxedOut and spellAlreadyCast to a clearer wording

* Restore package-lock.json and Delete string spellRogueStealthMaxedOut

* remove unused string, restore package-lock.json changes

* restore client package-lock.json

* Change spellRogueStealthMaxedOut and spellAlreadyCast to a clearer wording

* Restore package-lock.json and Delete string spellRogueStealthMaxedOut

* remove unused string, restore package-lock.json changes

* restore client package-lock.json

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-09-04 12:21:50 +02:00
Sabe Jones
70d057e66c 4.155.1 2020-09-03 17:22:54 -05:00
Sabe Jones
b680b6026b fix(teams): don't adjust source task value for rewards Fixes #12523 2020-09-03 10:00:32 -05:00
Matteo Pagliazzi
0c3b16ca74 fix(task modal): make sure task is loaded when template is shown 2020-09-03 16:33:44 +02:00
Melior
7be039a35f Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.7% (706 of 708 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (252 of 252 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% (501 of 501 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2135 of 2135 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.2% (703 of 708 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (93 of 93 strings)

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

Merge branch 'origin/develop' into Weblate.

Translated using Weblate (Italian)

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (Dutch)

Currently translated at 99.8% (2127 of 2131 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (Greek)

Currently translated at 73.2% (41 of 56 strings)

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

Translated using Weblate (Greek)

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Greek)

Currently translated at 100.0% (6 of 6 strings)

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

Translated using Weblate (Greek)

Currently translated at 79.8% (1702 of 2131 strings)

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

Translated using Weblate (Greek)

Currently translated at 100.0% (70 of 70 strings)

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

Translated using Weblate (Greek)

Currently translated at 100.0% (4 of 4 strings)

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

Translated using Weblate (Greek)

Currently translated at 100.0% (27 of 27 strings)

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

Translated using Weblate (Czech)

Currently translated at 88.9% (1895 of 2131 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (English (Pirate))

Currently translated at 87.5% (7 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/en@pirate/

Translated using Weblate (French)

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (134 of 134 strings)

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

Translated using Weblate (English (Pirate))

Currently translated at 85.8% (79 of 92 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/en@pirate/

Translated using Weblate (French)

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (134 of 134 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 82.5% (1760 of 2131 strings)

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

Translated using Weblate (Latin)

Currently translated at 39.6% (25 of 63 strings)

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

Translated using Weblate (Russian)

Currently translated at 98.2% (56 of 57 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (146 of 146 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (298 of 298 strings)

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

Translated using Weblate (Russian)

Currently translated at 99.6% (548 of 550 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (English (Pirate))

Currently translated at 88.0% (191 of 217 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/en@pirate/

Translated using Weblate (Czech)

Currently translated at 88.3% (1883 of 2131 strings)

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

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 (Japanese)

Currently translated at 91.0% (51 of 56 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (Portuguese)

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (Czech)

Currently translated at 86.7% (1849 of 2131 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (56 of 56 strings)

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

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 (Chinese (Traditional))

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (Portuguese)

Currently translated at 87.2% (480 of 550 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (185 of 185 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (Turkish)

Currently translated at 80.0% (1706 of 2131 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (92 of 92 strings)

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

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 (Chinese (Simplified))

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Russian)

Currently translated at 99.5% (216 of 217 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Russian)

Currently translated at 95.2% (239 of 251 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (146 of 146 strings)

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

Translated using Weblate (Russian)

Currently translated at 98.4% (492 of 500 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (Russian)

Currently translated at 96.1% (2048 of 2131 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2131 of 2131 strings)

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

Translated using Weblate (German)

Currently translated at 99.8% (2128 of 2131 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 92.8% (52 of 56 strings)

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

Translated using Weblate (Russian)

Currently translated at 94.6% (53 of 56 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (German)

Currently translated at 98.2% (55 of 56 strings)

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

Translated using Weblate (Turkish)

Currently translated at 99.1% (228 of 230 strings)

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

Translated using Weblate (Turkish)

Currently translated at 99.1% (228 of 230 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (Russian)

Currently translated at 98.7% (543 of 550 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (550 of 550 strings)

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

Translated using Weblate (German)

Currently translated at 99.8% (549 of 550 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (92 of 92 strings)

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

Translated using Weblate (Turkish)

Currently translated at 99.5% (229 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/tr/
2020-09-01 19:42:34 +02:00
Sabe Jones
01ae56f944 Merge branch 'release' into develop 2020-09-01 11:10:26 -05:00
Sabe Jones
7b020e133f 4.155.0 2020-09-01 11:09:37 -05:00
Sabe Jones
ca413ff41a chore(sprites): compile 2020-09-01 11:08:50 -05:00
Sabe Jones
81eef79da4 feat(content): Mystery Items and Challenges 2020-09-01 11:08:41 -05:00
negue
f1469b52f6 hotfix datepicker size 2020-08-31 23:13:31 +02:00
Matteo Pagliazzi
ef118f23c2 fix(loading): do not shift loading screen 2020-08-31 16:54:31 +02:00
dependabot-preview[bot]
964861bd6c build(deps-dev): bump axios from 0.19.2 to 0.20.0 (#12492)
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.20.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.20.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-08-31 14:10:32 +02:00
dependabot-preview[bot]
32e9dbe1ed build(deps): bump @vue/cli-plugin-unit-mocha in /website/client (#12513)
Bumps [@vue/cli-plugin-unit-mocha](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-unit-mocha) from 4.5.3 to 4.5.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.4/packages/@vue/cli-plugin-unit-mocha)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-31 13:25:28 +02:00
dependabot-preview[bot]
466fb4e42e build(deps): bump axios from 0.19.2 to 0.20.0 in /website/client (#12516)
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.20.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.20.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-08-31 13:24:47 +02:00
dependabot-preview[bot]
8f923f7753 build(deps): bump mongoose from 5.9.29 to 5.10.2 (#12503)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.29 to 5.10.2.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.29...5.10.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-08-31 13:24:01 +02:00
Matteo Pagliazzi
3bb8db45fd build(deps): bump @vue/cli-plugin-eslint in /website/client (#12510)
Bumps [@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-eslint) from 4.5.3 to 4.5.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.4/packages/@vue/cli-plugin-eslint)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-31 13:22:56 +02:00
dependabot-preview[bot]
181317dbff build(deps): bump @vue/cli-plugin-eslint in /website/client
Bumps [@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-eslint) from 4.5.3 to 4.5.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.4/packages/@vue/cli-plugin-eslint)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-31 11:22:44 +00:00
dependabot-preview[bot]
73a7ef8b2c build(deps): bump vue and vue-template-compiler in /website/client (#12511)
Bumps [vue](https://github.com/vuejs/vue) and [vue-template-compiler](https://github.com/vuejs/vue). These dependencies needed to be updated together.

Updates `vue` from 2.6.11 to 2.6.12
- [Release notes](https://github.com/vuejs/vue/releases)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.11...v2.6.12)

Updates `vue-template-compiler` from 2.6.11 to 2.6.12
- [Release notes](https://github.com/vuejs/vue/releases)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.11...v2.6.12)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-31 13:21:15 +02:00
dependabot-preview[bot]
206e3468f4 build(deps): bump vuedraggable from 2.24.0 to 2.24.1 in /website/client (#12520)
Bumps [vuedraggable](https://github.com/SortableJS/Vue.Draggable) from 2.24.0 to 2.24.1.
- [Release notes](https://github.com/SortableJS/Vue.Draggable/releases)
- [Commits](https://github.com/SortableJS/Vue.Draggable/commits)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-31 13:17:49 +02:00
dependabot-preview[bot]
77fde9d73f build(deps): bump amplitude-js from 7.1.0 to 7.1.1 in /website/client (#12517)
Bumps [amplitude-js](https://github.com/amplitude/amplitude-javascript) from 7.1.0 to 7.1.1.
- [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.0...v7.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-08-31 13:17:25 +02:00
dependabot-preview[bot]
c1d4bcbac3 build(deps): bump @vue/cli-service in /website/client (#12514)
Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.5.3 to 4.5.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.4/packages/@vue/cli-service)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-31 13:17:05 +02:00
dependabot-preview[bot]
e98d0d88d9 build(deps): bump @storybook/addon-notes in /website/client (#12512)
Bumps [@storybook/addon-notes](https://github.com/storybookjs/storybook/tree/HEAD/addons/notes) from 5.3.19 to 5.3.21.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v5.3.21/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.21/addons/notes)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-31 13:16:39 +02:00
dependabot-preview[bot]
fc3a1dd93d build(deps): bump @vue/cli-plugin-router in /website/client (#12509)
Bumps [@vue/cli-plugin-router](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-router) from 4.5.3 to 4.5.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.4/packages/@vue/cli-plugin-router)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-31 13:16:07 +02:00
dependabot-preview[bot]
897155e4c8 build(deps): bump @vue/cli-plugin-babel in /website/client (#12506)
Bumps [@vue/cli-plugin-babel](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-babel) from 4.5.3 to 4.5.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.5.4/packages/@vue/cli-plugin-babel)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-31 13:15:55 +02:00
dependabot-preview[bot]
689f5ad634 build(deps): bump superagent from 6.0.0 to 6.1.0 (#12502)
Bumps [superagent](https://github.com/visionmedia/superagent) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v6.0.0...v6.1.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-08-31 13:15:45 +02:00
negue
aa1ea74daa datepicker: add clear button (#12480)
* datepicker: add clear button

* use close icon instead of "x" as text
2020-08-29 17:22:31 +02:00
Bart Enkelaar
1b301e9c68 issue(11266) - Restyle level-up modal with sparkles (#12486)
* issue(11266) - Restyle level-up modal with sparkles

* issue(11266) - Add reward display to level up modal

At levels 15, 30, 40 and 60 the earned quests are now shown in the level-up modal.

* issue(11266) - Simplify css and don't use custom footer

* issue(11266) - Don't show pink bars and use colour variables
2020-08-29 16:33:06 +02:00
Matteo Pagliazzi
c00b2247d4 fix #12498: do not score task when using a skill 2020-08-29 16:23:32 +02:00
Alys
88de5552a0 change blocked message 2020-08-29 18:03:59 +10:00
Sabe Jones
917c68d51f 4.154.1 2020-08-27 14:44:49 -05:00
Sabe Jones
44e438303a chore(news): Last Chance 2020-08-27 14:44:43 -05:00
Sabe Jones
7eeddcb033 Merge branch 'release' into develop 2020-08-25 16:05:40 -05:00
Sabe Jones
2fb8e16e8f 4.154.0 2020-08-25 16:05:13 -05:00
Sabe Jones
80ffcddb35 chore(sprites): compile 2020-08-25 16:04:35 -05:00
Sabe Jones
f4c453675b feat(content): Wind-Up Potions quest 2020-08-25 16:04:28 -05:00
Alys
5165d491b0 fix some lint warnings (#12488)
* prevent some lint warnings by turning off some rules we don't seem to care about

require-prop-types has 167 violations

require-default-prop has 93 violations

* fix some lint warnings by adding eslint-disable-line comments

* prevent lint warnings by moving vue hooks to a different order

* apply some automatic lint fixes

* fix lint error by making line shorter

* prevent lint warnings from whitespace and @input, @click positioning

* revert 723fa38271

Reenables vue/require-prop-types and vue/require-default-prop
2020-08-25 18:06:39 +02:00
Sara Olson
6559353613 Update faq.json
some more android and ios faq changes
2020-08-25 18:01:37 +02:00
Matteo Pagliazzi
9caacc8f6c fix(links): restore styles changed in bootstrap@4.5.1 2020-08-25 16:17:12 +02:00
dependabot-preview[bot]
b21b5a4f4b build(deps): bump jwks-rsa from 1.8.1 to 1.9.0 (#12493)
Bumps [jwks-rsa](https://github.com/auth0/node-jwks-rsa) from 1.8.1 to 1.9.0.
- [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.8.1...v1.9.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-08-24 18:23:12 +02:00
dependabot-preview[bot]
21f3e704d4 build(deps): bump @babel/core from 7.11.1 to 7.11.4 (#12489)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.1 to 7.11.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.4/packages/babel-core)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-24 14:26:14 +02:00
Matteo Pagliazzi
d0bc0dbe49 Add API Call to bulk score tasks (#11389)
* Add new API call to complete multiple task scorings in one call

* Improve API response

* Improve saving process

* Improve handling for multiple tasks scored at once

* Handle challenge task errors better

* Improve check for alias

* Improve check for task scorings

* Fix merge errors

* make nodemon ignore content_cache

* Fix completing group tasks

* fix test

* fix tests (again)

* typo

* WIP(a11y): task modal updates

* fix(tasks): borders in modal

* fix(tasks): circley locks

* fix(task-modal): placeholders

* WIP(task-modal): disabled states, hide empty options, +/- restyle

* fix(task-modal): box shadows instead of borders, habit control pointer

* fix(task-modal): button states?

* fix(modal): tighten up layout, new spacing utils

* fix(tasks): more stylin

* fix(tasks): habit hovers

* fix(css): checklist labels, a11y colors

* fix(css): one more missed hover issue

* fix(css): lock Challenges, label fixes

* fix(css): scope input/textarea changes

* fix(style): task tweakies

* fix(style): more button fixage

* WIP(component): start select list story

* working example of a templated selectList

* fix(style): more button corrections

* fix(lint): EOL

* fix(buttons): factor btn-secondary to better override Bootstrap

* fix(styles): standardize more buttons

* wip: difficulty select - style fixes

* selectDifficulty works! 🎉 - fix styles

* change the dropdown-item sizes only for the selectList ones

* selectTranslatedArray

* changed many label margins

* more correct dropdown style

* fix(modals): button corrections

* input-group styling + datetime picker without today button

* Style/margins for "repeat every" - extract selectTag.vue

* working tag-selection / update - cleanup

* fix stories

* fix svg color on create modal (purple)

* fix task modal bottom padding

* correct dropdown shadow

* update dropdown-toggle caret size / color

* fixed checklist style

* sync checked state

* selectTag padding

* fix spacing between positive/negative streak inputs

* toggle-checkbox + fix some spacings

* disable repeat-on when its a groupTask

* fix new checklist-item

* fix toggle-checkbox style - fix difficulty style

* fix checklist ui

* add tags label , when there arent any tags selected

* WORKING select-tag component 🎉

* fix taglist story

* show max 5 items in tag dropdown + "X more" label

* fix datetime clear button

* replace m-b-xs to mb-1 (bootstrap) - fix input-group-text style

* fix styles of advanced settings

* fix delete task styles

* always show grippy on hover of the item

* extract modal-text-input mixin + fix the borders/dropshadow

* fix(spacing): revert most to Bootstrap

* feat(checklists): make local copy of master checklist non-editable
also aggressively update checklists because they weren't syncing??

* fix(checklists): handle add/remove options better

* feat(teams): manager notes field

* fix select/dropdown styles

* input border + icon colors

* delete task underline color

* fix checklist "delete icon" vertical position

* selectTag fixes - normal open/close toggle working again - remove icon color

* fixing icons:

Trash can - Delete
Little X - Remove
Big X - Close
Block - Block

* fix taglist margins / icon sizes

* wip margin overview (in storybook)

* fix routerlink

* remove unused method

* new selectTag style + add markdown inside tagList + scrollable tag selection

* fix selectTag / selectList active border

* fix difficulty select (svg default color)

* fix input padding-left + fix reset habit streak fullwidth / padding + "repeat every" gray text (no border)

* feat(teams): improved approval request > approve > reward flow

* fix(tests): address failures

* fix(lint): oops only

* fix(tasks): short-circuit group related logic

* fix(tasks): more short circuiting

* fix(tasks): more lines, less lint

* fix(tasks): how do i keep missing these

* feat(teams): provide assigning user summary

* fix(teams): don't attempt to record assiging user if not supplied

* fix advanced-settings styling / margin

* fix merge + hide advanced streak settings when none enabled

* fix styles

* set Roboto font for advanced settings

* Add Challenge flag to the tag list

* add tag with enter, when no other tag is found

* fix styles + tag cancel button

* refactor footer / margin

* split repeat fields into option mt-3 groups

* button all the things

* fix(tasks): style updates
* no hover state for non-editable tasks on team board
* keep assign/claim footer on task after requesting approval
* disable more fields on user copy of team task, and remove hover states 
for them

* fix(tasks): functional revisions
* "Claim Rewards" instead of "x" in task approved notif
* Remove default transition supplied by Bootstrap, apply individually to 
some elements
* Delete individual tasks and related notifications when master task 
deleted from team board
* Manager notes now save when supplied at task initial creation
* Can no longer dismiss rewards from approved task by hitting Dismiss 
All

* fix(tasks): clean tasksOrder
also adjust related test expectation

* fix(tests): adjust integration expectations

* fix(test): ratzen fratzen only

* fix lint

* fix tests

* fix(teams): checklist, notes

* handleSharedCompletion: handle error, make sure it is run after the user task has been saved

* fix typo

* correctly handle errors in handleSharedCompletion when approving a task

* fix(teams): improve disabled states

* handleSharedCompletion: do not increase completions by 1 manually to adjust for last approval not saved yet

* revert changes to config.json.example

* fix(teams): more style fixage

* add unit tests for findMultipleByIdOrAlias

* exclude api v4 route from apidocs

* BREAKING(teams): return 202 instead of 401 for approval request

* fix(teams): better taskboard sync
also re-re-fix checklist borders

* scoreTasks: validate body

* fix tests, move string to api errors

* fix(tests): update expectations for breaking change

* start updating api docs, process tasks sequentially to avoid conflicts with user._tmp

* do not crash entire bulk operation in case of errors

* save task only if modified

* fix lint

* undo changes to error handling: either all tasks scoring are successfull or none

* remove stale code

* do not return user._tmp when bulk scoring, it would be the last version only

* make sure user._tmp.leveledUp is not lost when bulk scoring

* rewards tests

* mixed tests

* fix tests, allow scoring the same task multiple times

* finish integration tests

* fix api docs for the bulk score route

* refactor(task-modal): lockable label component

* wip loading spinner

* refactor(teams): move task scoring to mixin

* fix(teams): style corrections

* fix(btn): fix padding to have height of 32px

* implement loading spinner

* remove console.log warnings

* fix(tasks): spacing and wording corrections

* fix(teams): don't bork manager notes

* fix(teams): assignment fix and more approval flow revisions

* WIP(teams): use tag dropdown control for assignment

* finish merge - never throw an error when a group task requires approval (wip - needs tests)

* fix taskModal merge

* fix merge

* fix(task modal): add newline

* fix(column.vue): add newline at end of file

* mvp yesterdaily modal

* fix tests

* fix api docs for bulk scoring group tasks

* separate task scoring and _tmp handling

* handle _tmp when bulk scoring

* rya: close modal before calling cron API, prevents issues with modals

* rya: fix conflicts with other modals

* add sounds, support for group plans, analytics

* use asyncResource for group plans

* fix lint

* streak bonus: add comment about missing in rya

* move yesterdailyModal

* fix issues with level up modals and rya

* add comments for future use, fix level up modals not showing up at levels with a quest drop

* handle errors in rya modal

* bundle quest and crit notifications

Co-authored-by: Phillip Thelen <phillip@habitica.com>
Co-authored-by: Phillip Thelen <viirus@pherth.net>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
Co-authored-by: negue <eugen.bolz@gmail.com>
2020-08-21 11:46:56 +02:00
Matteo Pagliazzi
46b5efcaf6 Allow group plans for private guilds only (#12479)
* hide upgrade button for public guilds

* prevent group plans for public guilds

* fix unit tests

* fix integration and unit tests that assumed group plans could be public guilds

* more unit tests fixes

* more resilient unit test

* more resilient unit test
2020-08-21 11:46:09 +02:00
Melior
633f3df372 Translated using Weblate (Turkish)
Currently translated at 96.3% (209 of 217 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (217 of 217 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.9% (2130 of 2131 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.2% (55 of 56 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (92 of 92 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt_BR/
2020-08-20 22:45:40 +02:00
Sabe Jones
fa79fb6608 4.153.1 2020-08-20 14:47:26 -05:00
Sabe Jones
f9d9df5ddb chore(news): blogs 2020-08-20 14:47:18 -05:00
Sabe Jones
8dbbfcd3a1 Scheduling summary line for team Dailies and To Do's (#12439)
* WIP(dailies): summary sentence draft

* fix(dailies): hide summarized fields, handle future Daily start date

* fix(dailies): don't apply summary sentence to Challenges
...for the sake of non-English users

* fix(dailies): tweak date x Challenge logic

* refactor(dailies): use native JS forEach
2020-08-20 14:12:05 -05:00
Matteo Pagliazzi
9a07ba7417 Better XSS Fix (#12483)
* Revert "fix(test): adjust expectations"

This reverts commit 205436d5b1.

* Revert "fix(escaping): global inoffensive apostrophe"

This reverts commit 2b8f94b244.

* change <%- to <%=

* fix interpolation only where necessary

* remove unused variable
2020-08-20 13:41:46 -05:00
Phillip Thelen
8248c4ca4e Update faq.json (#12484) 2020-08-19 19:59:48 +02:00
Sabe Jones
0e9ac6d4f2 Merge branch 'release' into develop 2020-08-18 15:29:03 -05:00
Sabe Jones
56df62cf49 4.153.0 2020-08-18 15:27:12 -05:00
Sabe Jones
eb16966953 fix(news): image 2020-08-18 15:26:54 -05:00
Sabe Jones
6255c5dcc7 feat(content): golden achievements 2020-08-18 15:13:06 -05:00
Matteo Pagliazzi
60ffc1fdaf fix(mongoose): revert to 5.9.29 2020-08-17 13:08:50 +02:00
Alexander Colen
0cfe0473b9 Remove Tavern from API v3 list of guilds when 'guild' or 'publicGuilds' type parameter get added. (Fixes #12407) (#12438)
* Excluding tavern from showing up in GET /groups API when 'guilds' or 'publicGuilds' type parameter is included.

* Fixed test errors.

* Resolved pull request #12438 issues.

Moved Tavern exclusion to Group model, removed Group controller back to the original and resolved test failures.
2020-08-17 12:38:07 +02:00
Matteo Pagliazzi
10f89c8d79 chore(vue deps): upgrade 2020-08-17 09:41:42 +02:00
dependabot-preview[bot]
0692eb10cc build(deps): bump lodash from 4.17.19 to 4.17.20 (#12461)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.19 to 4.17.20.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.19...4.17.20)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-17 09:30:30 +02:00
dependabot-preview[bot]
4ac160ab21 build(deps): bump lodash from 4.17.19 to 4.17.20 in /website/client (#12468)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.19 to 4.17.20.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.19...4.17.20)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-17 09:28:54 +02:00
dependabot-preview[bot]
dc5163e8a0 build(deps): bump vue-router from 3.4.2 to 3.4.3 in /website/client (#12478)
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.4.2 to 3.4.3.
- [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.2...v3.4.3)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-17 09:28:22 +02:00
dependabot-preview[bot]
d850b50009 build(deps): bump winston-loggly-bulk from 3.1.0 to 3.1.1 (#12465)
Bumps [winston-loggly-bulk](https://github.com/loggly/winston-loggly-bulk) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/loggly/winston-loggly-bulk/releases)
- [Commits](https://github.com/loggly/winston-loggly-bulk/compare/v3.1.0...v3.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-08-17 09:27:09 +02:00
dependabot-preview[bot]
65e00ef784 build(deps-dev): bump sinon from 9.0.2 to 9.0.3 (#12467)
Bumps [sinon](https://github.com/sinonjs/sinon) from 9.0.2 to 9.0.3.
- [Release notes](https://github.com/sinonjs/sinon/releases)
- [Changelog](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sinonjs/sinon/compare/v9.0.2...v9.0.3)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-17 09:26:40 +02:00
dependabot-preview[bot]
fd11adbb82 build(deps): bump apidoc from 0.24.0 to 0.25.0 (#12466)
Bumps [apidoc](https://github.com/apidoc/apidoc) from 0.24.0 to 0.25.0.
- [Release notes](https://github.com/apidoc/apidoc/releases)
- [Changelog](https://github.com/apidoc/apidoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/apidoc/apidoc/compare/0.24.0...0.25.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-08-17 09:26:31 +02:00
dependabot-preview[bot]
4d64e299ef build(deps): bump mongoose from 5.9.27 to 5.10.0 (#12463)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.27 to 5.10.0.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.27...5.10.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-08-17 09:26:02 +02:00
Sabe Jones
29c21f09e1 4.152.3 2020-08-15 12:16:52 -05:00
Sabe Jones
205436d5b1 fix(test): adjust expectations 2020-08-15 11:56:47 -05:00
Sabe Jones
2b8f94b244 fix(escaping): global inoffensive apostrophe 2020-08-15 10:27:37 -05:00
Sabe Jones
30cedad9b2 4.152.2 2020-08-14 11:18:44 -05:00
Sabe Jones
3a67a36031 fix(escaping): Armoire and boss messages 2020-08-14 11:04:21 -05:00
Sabe Jones
9d645c1c2e fix(merge): missing string 2020-08-13 17:38:05 -05:00
Sabe Jones
6ee4c9870a fix(merge): missing string 2020-08-13 17:27:51 -05:00
Sabe Jones
fbfe35b4eb 4.152.1 2020-08-13 17:12:09 -05:00
Sabe Jones
3b9509fa1a Merge remote-tracking branch 'habitica-private/xss-fix' into release 2020-08-13 17:11:48 -05:00
Sabe Jones
0f81c5cbdb Merge branch 'develop' into release 2020-08-13 16:21:21 -05:00
Sabe Jones
d3fdfe33fb chore(news): Bailey 2020-08-13 16:20:52 -05:00
Sabe Jones
d9cf7d3f79 fix(gdpr): handle blocked user; pace out requests 2020-08-13 15:35:11 +00:00
Melior
ffe144e762 Merge branch 'origin/develop' into Weblate. 2020-08-11 22:47:12 +02:00
Sabe Jones
cec3e67b16 Merge branch 'release' into develop 2020-08-11 15:44:48 -05:00
Sabe Jones
2a94ff41b1 4.152.0 2020-08-11 15:43:51 -05:00
Sabe Jones
ce32477af7 chore(sprites): compile 2020-08-11 15:43:38 -05:00
Sabe Jones
1b6b99b521 feat(content): Armoire and backgrounds 8/2020 2020-08-11 15:43:29 -05:00
Matteo Pagliazzi
b7964a411c fix(i18n): html-escape all interpolated strings where html is not necessary 2020-08-11 21:33:24 +02:00
Melior
bce138f9c2 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Japanese)

Currently translated at 90.4% (1923 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 86.7% (1843 of 2125 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Filipino)

Currently translated at 80.0% (1701 of 2125 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 86.3% (1834 of 2125 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Korean)

Currently translated at 80.9% (51 of 63 strings)

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

Translated using Weblate (Korean)

Currently translated at 95.2% (343 of 360 strings)

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

Translated using Weblate (Korean)

Currently translated at 88.8% (192 of 216 strings)

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

Translated using Weblate (Czech)

Currently translated at 85.8% (1824 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 85.7% (1823 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 98.6% (213 of 216 strings)

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

Translated using Weblate (Czech)

Currently translated at 85.4% (1816 of 2125 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (8 of 8 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (493 of 493 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Czech)

Currently translated at 91.0% (51 of 56 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (67 of 67 strings)

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

Translated using Weblate (Polish)

Currently translated at 99.4% (497 of 500 strings)

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

Translated using Weblate (Japanese)

Currently translated at 99.8% (499 of 500 strings)

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

Translated using Weblate (Polish)

Currently translated at 81.5% (1732 of 2125 strings)

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

Translated using Weblate (Japanese)

Currently translated at 90.4% (1921 of 2125 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (140 of 140 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (Czech)

Currently translated at 91.0% (51 of 56 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Japanese)

Currently translated at 90.3% (1919 of 2125 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Japanese)

Currently translated at 90.1% (1915 of 2125 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (298 of 298 strings)

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

Translated using Weblate (Czech)

Currently translated at 85.4% (1815 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 87.5% (49 of 56 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (146 of 146 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (31 of 31 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (31 of 31 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/
2020-08-11 05:10:44 +02:00
Matteo Pagliazzi
d82213bfee 4.151.5 2020-08-10 19:09:05 +02:00
Matteo Pagliazzi
535aa860f1 fix(task): make sure daysOfMonth update is only applied to dailies 2020-08-10 19:08:36 +02:00
Scott
5d169d477a Added bannedWordsAllowed attribute to Group attributes (Partial fix for #12405) (#12440)
* Added bannedWordsAllowed attribute to Group attributes

Added an optional Boolean attribute which will determine if banned words are allowed

* Added bannedWordsAllowed attribute to non-settable fields
2020-08-10 18:38:56 +02:00
Matteo Pagliazzi
d7ee1ec4f4 remove modals stack (#12423) 2020-08-10 18:38:24 +02:00
Sabe Jones
8c3a9c6dbc fix(teams): smol tweaks (#12443) 2020-08-10 11:27:19 -05:00
Matteo Pagliazzi
747c4ffbad Revert "fix(package-lock.json): rebuild"
This reverts commit e30e2f23ac.
2020-08-10 16:51:21 +02:00
Matteo Pagliazzi
e30e2f23ac fix(package-lock.json): rebuild 2020-08-10 16:25:08 +02:00
Matteo Pagliazzi
d016c1fa0a Revert "build(deps): bump mongoose from 5.9.27 to 5.9.28 (#12449)" (#12458)
This reverts commit 8796dbd8b8.
2020-08-10 16:20:29 +02:00
dependabot-preview[bot]
5b2b51e4f6 build(deps): bump superagent from 5.3.1 to 6.0.0 (#12450)
Bumps [superagent](https://github.com/visionmedia/superagent) from 5.3.1 to 6.0.0.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v5.3.1...v6.0.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-08-10 15:31:26 +02:00
dependabot-preview[bot]
7393ef5162 build(deps): bump vue-router from 3.3.4 to 3.4.2 in /website/client (#12457)
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.3.4 to 3.4.2.
- [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.3.4...v3.4.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-08-10 15:29:58 +02:00
dependabot-preview[bot]
8a548a6a4d build(deps): bump bootstrap from 4.5.0 to 4.5.2 in /website/client (#12456)
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 4.5.0 to 4.5.2.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v4.5.0...v4.5.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-08-10 15:29:36 +02:00
dependabot-preview[bot]
5ed007190a build(deps): bump got from 11.5.1 to 11.5.2 (#12454)
Bumps [got](https://github.com/sindresorhus/got) from 11.5.1 to 11.5.2.
- [Release notes](https://github.com/sindresorhus/got/releases)
- [Commits](https://github.com/sindresorhus/got/compare/v11.5.1...v11.5.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-08-10 15:28:41 +02:00
dependabot-preview[bot]
24afffc2ae build(deps): bump @babel/core from 7.11.0 to 7.11.1 (#12452)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.0 to 7.11.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.1/packages/babel-core)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-10 15:28:31 +02:00
dependabot-preview[bot]
2ff3c7326c build(deps): bump csv-stringify from 5.5.0 to 5.5.1 (#12451)
Bumps [csv-stringify](https://github.com/adaltas/node-csv-stringify) from 5.5.0 to 5.5.1.
- [Release notes](https://github.com/adaltas/node-csv-stringify/releases)
- [Changelog](https://github.com/adaltas/node-csv-stringify/blob/master/CHANGELOG.md)
- [Commits](https://github.com/adaltas/node-csv-stringify/compare/v5.5.0...v5.5.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-08-10 15:28:07 +02:00
dependabot-preview[bot]
8796dbd8b8 build(deps): bump mongoose from 5.9.27 to 5.9.28 (#12449)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.27 to 5.9.28.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.27...5.9.28)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-10 15:25:31 +02:00
negue
d2fc7c0c3d UI: redesign DatePicker (#12418)
* extract datepicker & settings as component + redesign

* fix updating values + fix button styling + popover position

* remove eslint-config-standard / html
2020-08-09 22:25:56 +02:00
Carlton McFarlane
13a5b276e9 fix(quest shop): add an index to v-for loop (#12446) 2020-08-09 19:58:40 +02:00
Rogesson
0a47af4ac3 update group members after accepting the quest (without page reload) (#12358)
* update group members after accepting the quest (without page reload)

* show quest information after starting

* removing quest.progress.up assignment

Co-authored-by: rogesson <rogesson.barboza@locaweb.com.br>
2020-08-09 19:44:46 +02:00
Jalansh
c0bf2cffea Casting Chilling Frost and Stealth skill again will not be processed and return an error instead. Fixes #12361. (#12404)
* Added logic for a repeating Chilling Frost skill. Added test case for redundant chilling frost skill cast. Added comments for the logic of repeating Stealth skill because of an error.

* Added logic for a repeating Stealth skill. Avoiding MP reduction still pending because of console error. Test cases pending.

* Completed the logic for a repeated Stealth skill. Added repeated frost skill cast check in common. Removed exclusive test. Test cases are pending.

* Added test case for Stealth skill recast. Fixed lint errors. Fixed a flaw in if statement which led to test case failure.

* Fixed lint errors in test case.

* Added a common JSON entry for skil recasts in three files. Other files remaining. Added Chilling Frost recast check in common code. Modified test cases.

* Added spellDisabled condition in client code.

* Reverted JSON messages for three languages. Added spellAlreadyCast attribute to JSON file in locales/en. Made changes for showing appropriate message in client code.

* Added an import for throwing BadRequest in common code. Modified test case accordingly.

* Update website/common/script/content/spells.js

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>

* Added target and req attributes in cast() method arguments.

* Changed common code test case because of increased function parameters. Moved chilling frost test casse to common tests instead of server tests.

* Changed the test case format in common tests.

* Added a missing done statement.

* Fixed a minor error which led to failing test case. Removed the exclusive test which led to lint error.

* Fixed lint errors.

* Added a class named 'disabled' for the frontend change.

* fix(skills): style cleanup

* fix(skills): unfix

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2020-08-09 18:25:59 +02:00
Sabe Jones
954040dff8 4.151.4 2020-08-07 15:22:50 -05:00
Sabe Jones
e7af07cebb Merge branch 'develop' into release 2020-08-07 15:22:43 -05:00
Sabe Jones
d7d7f82723 fix(lint): allow console logging during Gulp tasks 2020-08-04 11:44:20 -05:00
Sabe Jones
7daaf04d0d fix(event): client Gala reversions 2020-08-03 13:50:30 -05:00
Melior
dc8c40c613 Translated using Weblate (Dutch)
Currently translated at 99.9% (2124 of 2125 strings)

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

Merge branch 'origin/develop' into Weblate.

Translated using Weblate (Dutch)

Currently translated at 99.9% (2123 of 2125 strings)

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

Translated using Weblate (Dutch)

Currently translated at 98.0% (2084 of 2125 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Dutch)

Currently translated at 97.7% (2077 of 2125 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Dutch)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Dutch)

Currently translated at 93.0% (201 of 216 strings)

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

Translated using Weblate (Spanish)

Currently translated at 88.9% (1891 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 85.4% (1815 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 83.6% (210 of 251 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (146 of 146 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (Japanese)

Currently translated at 89.9% (1911 of 2125 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (360 of 360 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 84.8% (1803 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Japanese)

Currently translated at 89.5% (1903 of 2125 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Japanese)

Currently translated at 97.1% (682 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
2020-08-03 20:41:36 +02:00
Sabe Jones
9a0e029491 Merge branch 'release' into develop 2020-08-03 13:27:57 -05:00
Sabe Jones
d6cfbd5529 4.151.3 2020-08-03 13:27:13 -05:00
Sabe Jones
74244fd3ba chore(event): Splash cleanup and Bailey 2020-08-03 13:26:53 -05:00
Matteo Pagliazzi
65e15e0c1d Fix multiple purchases with Amazon Pay (#12422)
* fix(amazon): logout when modal is closed, prevents issue with multiple order reference ids

* amazon logout when the button is loaded the first time
2020-08-03 15:34:18 +02:00
dependabot-preview[bot]
d21b9a5af4 build(deps): bump @babel/preset-env from 7.10.4 to 7.11.0 (#12433)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.10.4 to 7.11.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.0/packages/babel-preset-env)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-08-03 12:42:42 +02:00
dependabot-preview[bot]
7cedecf27e build(deps): bump uuid from 8.2.0 to 8.3.0 in /website/client (#12434)
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.2.0 to 8.3.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.2.0...v8.3.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-08-03 12:41:05 +02:00
dependabot-preview[bot]
9aaeb2c4ac build(deps): bump @babel/core from 7.10.5 to 7.11.0 (#12428)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.10.5 to 7.11.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.0/packages/babel-core)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-03 12:40:13 +02:00
dependabot-preview[bot]
df461f7642 build(deps): bump webpack from 4.44.0 to 4.44.1 in /website/client (#12435)
Bumps [webpack](https://github.com/webpack/webpack) from 4.44.0 to 4.44.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.44.0...v4.44.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-08-03 12:40:02 +02:00
dependabot-preview[bot]
0f72064923 build(deps-dev): bump monk from 7.3.0 to 7.3.1 (#12425)
Bumps [monk](https://github.com/Automattic/monk) from 7.3.0 to 7.3.1.
- [Release notes](https://github.com/Automattic/monk/releases)
- [Changelog](https://github.com/Automattic/monk/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Automattic/monk/compare/v7.3.0...v7.3.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-08-03 12:39:39 +02:00
dependabot-preview[bot]
139645ff76 build(deps): bump mongoose from 5.9.25 to 5.9.27 (#12426)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.25 to 5.9.27.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.25...5.9.27)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-03 12:39:30 +02:00
dependabot-preview[bot]
aedcb483a0 build(deps): bump rate-limiter-flexible from 2.1.9 to 2.1.10 (#12429)
Bumps [rate-limiter-flexible](https://github.com/animir/node-rate-limiter-flexible) from 2.1.9 to 2.1.10.
- [Release notes](https://github.com/animir/node-rate-limiter-flexible/releases)
- [Commits](https://github.com/animir/node-rate-limiter-flexible/commits/v2.1.10)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-03 12:38:41 +02:00
dependabot-preview[bot]
cfb335ab78 build(deps): bump uuid from 8.2.0 to 8.3.0 (#12430)
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.2.0 to 8.3.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.2.0...v8.3.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-08-03 12:38:20 +02:00
dependabot-preview[bot]
70aea8c14a build(deps): bump bootstrap-vue from 2.15.0 to 2.16.0 in /website/client (#12436)
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.15.0 to 2.16.0.
- [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.15.0...v2.16.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-08-03 12:37:25 +02:00
Matteo Pagliazzi
f53022c00e fix(monthly tests): update test to use future date 2020-08-02 16:29:26 +02:00
Melior
b82a79361b Merge branch 'origin/develop' into Weblate. 2020-07-31 21:53:24 +02:00
Sabe Jones
ebb3a12e92 fix(migrations): better dummy require 2020-07-31 14:52:23 -05:00
Sabe Jones
272a6ec19d fix(migrations): better dummy require 2020-07-31 14:52:08 -05:00
Melior
dbf2ee6d6d Merge branch 'origin/develop' into Weblate. 2020-07-31 21:50:50 +02:00
Melior
af0b2ab16e Translated using Weblate (Hindi)
Currently translated at 0.6% (2 of 328 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Czech)

Currently translated at 83.8% (1781 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Polish)

Currently translated at 81.3% (1728 of 2125 strings)

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

Translated using Weblate (Polish)

Currently translated at 83.4% (586 of 702 strings)

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

Translated using Weblate (Japanese)

Currently translated at 99.8% (499 of 500 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/
2020-07-31 21:50:41 +02:00
Sabe Jones
43fb747c8f Merge branch 'release' into develop 2020-07-31 14:45:36 -05:00
Sabe Jones
9291414f7b 4.151.2 2020-07-31 14:45:01 -05:00
Sabe Jones
e4c95275ac chore(event): Naming Day news and migration 2020-07-31 14:38:41 -05:00
Matteo Pagliazzi
bd3e783274 Paypal IPN Upgrade (#12415)
* upgrade paypal ipn verification module

* paypal ipn: allow sandbox when testing

* improved error handling
2020-07-31 12:32:24 +02:00
Matteo Pagliazzi
9089b64af3 Merge pull request #12420 from HabitRPG/bigsee-12271
fix(task list): update todo due date on every save
2020-07-31 11:48:10 +02:00
Carlton
59f4e7f598 fix (task list) replace deprecated cache-busting of computed properties with methods 2020-07-31 11:41:00 +02:00
Laurel Thomson
1f8e2d5677 Updating daysOfMonths array when the startDate of a monthly is updated in the API - Fixes #12041 (#12399)
* Updating daily daysOfMonth array when startDate is updated and adding integration tests to test this functionality

* Adding more test cases and adding semicolons to the end of lines

* Only updating the monthly repetition if the daily was already set to repeat on a day of the month

* fix(lint): whitespace

Co-authored-by: Laurel Thomson <laurel.beth.thomson@gmai.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2020-07-31 11:16:55 +02:00
Ieahleen
c4049608a8 removing wrong info on updating challenge leader from apidoc (#12413)
* removing wrong info on updating challenge leader

as discussed in the Aspiring Comrades, doing the change because the route `/api/v3/challenges/:challengeId` can't be used to change challenge leader, so I am deleting it from the docs

* adding summary to section title

as requested by @paglias

* missing comma

* fix(lint): line length

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2020-07-31 11:10:47 +02:00
Sabe Jones
8003632041 fix(modals): remove unnecessary scrollbar (#12416)
Fixes #9863
2020-07-30 15:01:18 -05:00
Sabe Jones
f4c840faec chore(ABtest): end drop experiment in favor of boosting 2020-07-30 14:53:50 -05:00
Melior
e9bb171e04 Merge branch 'origin/develop' into Weblate. 2020-07-30 21:49:39 +02:00
Sabe Jones
13de119bbb 4.151.1 2020-07-30 14:41:34 -05:00
Sabe Jones
f27ece49d1 chore(news): Last Chance Bailey 2020-07-30 14:38:19 -05:00
Sabe Jones
fa98b724a9 Merge branch 'develop' into release 2020-07-30 14:23:04 -05:00
Melior
093ef68f5c Translated using Weblate (Japanese)
Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (298 of 298 strings)

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

Translated using Weblate (Spanish)

Currently translated at 97.7% (531 of 543 strings)

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

Translated using Weblate (Spanish)

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Russian)

Currently translated at 99.5% (215 of 216 strings)

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

Translated using Weblate (Russian)

Currently translated at 98.6% (213 of 216 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 92.1% (129 of 140 strings)

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

Translated using Weblate (Czech)

Currently translated at 89.2% (125 of 140 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 83.8% (1781 of 2125 strings)

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

Translated using Weblate (Czech)

Currently translated at 97.5% (121 of 124 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (8 of 8 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (500 of 500 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (251 of 251 strings)

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

Translated using Weblate (German)

Currently translated at 98.6% (493 of 500 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
2020-07-30 18:12:59 +02:00
Melior
a501b2a5a6 Merge branch 'origin/develop' into Weblate. 2020-07-28 17:58:30 +02:00
Melior
011d22330f Translated using Weblate (Hindi)
Currently translated at 96.5% (83 of 86 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (216 of 216 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (2125 of 2125 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (86 of 86 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (86 of 86 strings)

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

Merge branch 'origin/develop' into Weblate.

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 90.7% (127 of 140 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (31 of 31 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (185 of 185 strings)

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

Translated using Weblate (Japanese)

Currently translated at 89.8% (1903 of 2119 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (230 of 230 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (543 of 543 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (493 of 493 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (493 of 493 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (83 of 83 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (146 of 146 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2119 of 2119 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Japanese)

Currently translated at 89.7% (1901 of 2119 strings)

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

Translated using Weblate (Czech)

Currently translated at 84.0% (1780 of 2119 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (83 of 83 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Portuguese)

Currently translated at 82.0% (1739 of 2119 strings)

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

Translated using Weblate (Portuguese)

Currently translated at 81.8% (1734 of 2119 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Czech)

Currently translated at 96.7% (120 of 124 strings)

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

Translated using Weblate (Czech)

Currently translated at 96.7% (120 of 124 strings)

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

Translated using Weblate (Russian)

Currently translated at 99.2% (539 of 543 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (360 of 360 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% (230 of 230 strings)

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

Translated using Weblate (Japanese)

Currently translated at 89.5% (1897 of 2119 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Japanese)

Currently translated at 89.2% (1891 of 2119 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (493 of 493 strings)

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

Translated using Weblate (Spanish)

Currently translated at 97.4% (529 of 543 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (493 of 493 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Russian)

Currently translated at 99.0% (538 of 543 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (493 of 493 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (212 of 212 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/
2020-07-28 17:58:25 +02:00
Sabe Jones
cfb4acad1a fix(strings): missing set label 2020-07-28 10:07:10 -05:00
Sabe Jones
a7bbdf1cd3 fix(strings): missing set label 2020-07-28 10:06:47 -05:00
Sabe Jones
7546733ae9 Merge branch 'release' into develop 2020-07-28 10:01:31 -05:00
Sabe Jones
9490159f64 4.151.0 2020-07-28 10:00:20 -05:00
Sabe Jones
da5bb795ca chore(sprites): compile 2020-07-28 10:00:01 -05:00
Sabe Jones
26869e9006 feat(content): August 2020 subscriber set 2020-07-28 09:59:50 -05:00
Sabe Jones
11018156c5 fix(news): spritename 2020-07-27 14:28:12 -05:00
Sabe Jones
7280c50963 feat(content): Freshwater Friends cheevo 2020-07-27 14:17:43 -05:00
Matteo Pagliazzi
35a6f4cb19 docs(members): update members api docs to include info about includeAllPublicFields query parameter 2020-07-27 11:01:29 +02:00
dependabot-preview[bot]
4b5500b13d build(deps): bump webpack from 4.43.0 to 4.44.0 in /website/client (#12409)
Bumps [webpack](https://github.com/webpack/webpack) from 4.43.0 to 4.44.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.43.0...v4.44.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-07-27 10:09:16 +02:00
dependabot-preview[bot]
8b3a5ce6fe build(deps): bump regenerator-runtime from 0.13.5 to 0.13.7 (#12411)
Bumps [regenerator-runtime](https://github.com/facebook/regenerator) from 0.13.5 to 0.13.7.
- [Release notes](https://github.com/facebook/regenerator/releases)
- [Commits](https://github.com/facebook/regenerator/compare/regenerator-runtime@0.13.5...regenerator-runtime@0.13.7)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-27 10:08:38 +02:00
dependabot-preview[bot]
6a53cd29bf build(deps): bump apidoc from 0.23.0 to 0.24.0 (#12412)
Bumps [apidoc](https://github.com/apidoc/apidoc) from 0.23.0 to 0.24.0.
- [Release notes](https://github.com/apidoc/apidoc/releases)
- [Changelog](https://github.com/apidoc/apidoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/apidoc/apidoc/compare/0.23.0...0.24.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-07-27 10:08:26 +02:00
Matteo Pagliazzi
79c64763ac fix(lint): automatically fix lint warnings 2020-07-25 18:56:19 +02:00
negue
aaf32cc09b Teams UI Redesign and A11y Updates (#12142)
* WIP(a11y): task modal updates

* fix(tasks): borders in modal

* fix(tasks): circley locks

* fix(task-modal): placeholders

* WIP(task-modal): disabled states, hide empty options, +/- restyle

* fix(task-modal): box shadows instead of borders, habit control pointer

* fix(task-modal): button states?

* fix(modal): tighten up layout, new spacing utils

* fix(tasks): more stylin

* fix(tasks): habit hovers

* fix(css): checklist labels, a11y colors

* fix(css): one more missed hover issue

* fix(css): lock Challenges, label fixes

* fix(css): scope input/textarea changes

* fix(style): task tweakies

* fix(style): more button fixage

* WIP(component): start select list story

* working example of a templated selectList

* fix(style): more button corrections

* fix(lint): EOL

* fix(buttons): factor btn-secondary to better override Bootstrap

* fix(styles): standardize more buttons

* wip: difficulty select - style fixes

* selectDifficulty works! 🎉 - fix styles

* change the dropdown-item sizes only for the selectList ones

* selectTranslatedArray

* changed many label margins

* more correct dropdown style

* fix(modals): button corrections

* input-group styling + datetime picker without today button

* Style/margins for "repeat every" - extract selectTag.vue

* working tag-selection / update - cleanup

* fix stories

* fix svg color on create modal (purple)

* fix task modal bottom padding

* correct dropdown shadow

* update dropdown-toggle caret size / color

* fixed checklist style

* sync checked state

* selectTag padding

* fix spacing between positive/negative streak inputs

* toggle-checkbox + fix some spacings

* disable repeat-on when its a groupTask

* fix new checklist-item

* fix toggle-checkbox style - fix difficulty style

* fix checklist ui

* add tags label , when there arent any tags selected

* WORKING select-tag component 🎉

* fix taglist story

* show max 5 items in tag dropdown + "X more" label

* fix datetime clear button

* replace m-b-xs to mb-1 (bootstrap) - fix input-group-text style

* fix styles of advanced settings

* fix delete task styles

* always show grippy on hover of the item

* extract modal-text-input mixin + fix the borders/dropshadow

* fix(spacing): revert most to Bootstrap

* feat(checklists): make local copy of master checklist non-editable
also aggressively update checklists because they weren't syncing??

* fix(checklists): handle add/remove options better

* feat(teams): manager notes field

* fix select/dropdown styles

* input border + icon colors

* delete task underline color

* fix checklist "delete icon" vertical position

* selectTag fixes - normal open/close toggle working again - remove icon color

* fixing icons:

Trash can - Delete
Little X - Remove
Big X - Close
Block - Block

* fix taglist margins / icon sizes

* wip margin overview (in storybook)

* fix routerlink

* remove unused method

* new selectTag style + add markdown inside tagList + scrollable tag selection

* fix selectTag / selectList active border

* fix difficulty select (svg default color)

* fix input padding-left + fix reset habit streak fullwidth / padding + "repeat every" gray text (no border)

* feat(teams): improved approval request > approve > reward flow

* fix(tests): address failures

* fix(lint): oops only

* fix(tasks): short-circuit group related logic

* fix(tasks): more short circuiting

* fix(tasks): more lines, less lint

* fix(tasks): how do i keep missing these

* feat(teams): provide assigning user summary

* fix(teams): don't attempt to record assiging user if not supplied

* fix advanced-settings styling / margin

* fix merge + hide advanced streak settings when none enabled

* fix styles

* set Roboto font for advanced settings

* Add Challenge flag to the tag list

* add tag with enter, when no other tag is found

* fix styles + tag cancel button

* refactor footer / margin

* split repeat fields into option mt-3 groups

* button all the things

* fix(tasks): style updates
* no hover state for non-editable tasks on team board
* keep assign/claim footer on task after requesting approval
* disable more fields on user copy of team task, and remove hover states 
for them

* fix(tasks): functional revisions
* "Claim Rewards" instead of "x" in task approved notif
* Remove default transition supplied by Bootstrap, apply individually to 
some elements
* Delete individual tasks and related notifications when master task 
deleted from team board
* Manager notes now save when supplied at task initial creation
* Can no longer dismiss rewards from approved task by hitting Dismiss 
All

* fix(tasks): clean tasksOrder
also adjust related test expectation

* fix(tests): adjust integration expectations

* fix(test): ratzen fratzen only

* fix(teams): checklist, notes

* fix(teams): improve disabled states

* fix(teams): more style fixage

* BREAKING(teams): return 202 instead of 401 for approval request

* fix(teams): better taskboard sync
also re-re-fix checklist borders

* fix(tests): update expectations for breaking change

* refactor(task-modal): lockable label component

* refactor(teams): move task scoring to mixin

* fix(teams): style corrections

* fix(tasks): spacing and wording corrections

* fix(teams): don't bork manager notes

* fix(teams): assignment fix and more approval flow revisions

* WIP(teams): use tag dropdown control for assignment

* refactor(tasks): better spacing, generic multi select

* fix(tasks): various visual and behavior updates

* fix(tasks): incidental style tweaks

* fix(teams): standardize approval request response

* refactor(teams): correct test, use res.respond message param

* fix(storybook): renamed component

* fix(teams): age approval-required To Do's
Fixes #8730

* fix(teams): sync personal data as well as team on mixin sync

* fix(teams): hide unclaim button, not whole footer; fix switch focus

* fix(achievements): unrevert width fix

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2020-07-25 07:37:10 -05:00
Jake North
7ee6ff18ce Fix height of badges in multiline achievements (#12406)
This fixes the UI bug I reported where achievement names taking up multiple lines cause badges to stretch to fill their container.

Screenshot of bug: https://i.snipboard.io/07GBi4.jpg
Screenshot of fix: https://i.snipboard.io/PKvi8e.jpg
2020-07-25 13:46:06 +02:00
Bart Enkelaar
234258b41e Move from deprecated moment#zone to moment#utcOffset (#12207)
* Issue 10209 - Remove read usages of zone

* Issue 10209 - Add coverage on daysSince and startOfDay cron utility functions

* Issue 10209 - Add unit test for daysUserHasMissed method

* Issue 10209 - Remove usages of deprecated `moment.js#zone` method.

* Issue 10209 - Add helper function to centralise logic

Also simplify timezoneOffsetToUtc function in site.vue

* Issue 10209 - Also add getUtcOffset as method on user

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-07-25 13:22:41 +02:00
dependabot-preview[bot]
c10b9b7993 build(deps): bump mongoose from 5.9.24 to 5.9.25 (#12402)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.24 to 5.9.25.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.24...5.9.25)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-25 12:27:02 +02:00
Melior
0f945ee369 Merge branch 'origin/develop' into Weblate. 2020-07-23 17:53:19 +02:00
Melior
0c5bede1ed Translated using Weblate (Hindi)
Currently translated at 76.6% (416 of 543 strings)

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

Translated using Weblate (Hindi)

Currently translated at 98.7% (82 of 83 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (31 of 31 strings)

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

Translated using Weblate (Polish)

Currently translated at 81.5% (1727 of 2119 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Hindi)

Currently translated at 76.6% (416 of 543 strings)

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

Translated using Weblate (Hindi)

Currently translated at 76.6% (416 of 543 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (250 of 250 strings)

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

Translated using Weblate (Polish)

Currently translated at 81.4% (1726 of 2119 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (543 of 543 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 90.7% (127 of 140 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (Czech)

Currently translated at 94.2% (163 of 173 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (360 of 360 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (213 of 213 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2119 of 2119 strings)

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

Translated using Weblate (Japanese)

Currently translated at 89.0% (1887 of 2119 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

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/

Translated using Weblate (Italian)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (83 of 83 strings)

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

Translated using Weblate (Japanese)

Currently translated at 100.0% (212 of 212 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (212 of 212 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/de/
2020-07-23 17:53:04 +02:00
Sabe Jones
d8ab69b3c7 4.150.0 2020-07-23 10:44:49 -05:00
Sabe Jones
bea77e9520 Merge branch 'develop' into release 2020-07-23 10:44:40 -05:00
Sabe Jones
108201a465 chore(sprites): compile 2020-07-23 10:44:12 -05:00
Sabe Jones
32e51bd551 feat(content): add new Naming Day item
also Bailey
2020-07-23 10:44:00 -05:00
Melior
6e03e41271 Merge branch 'origin/develop' into Weblate. 2020-07-21 22:01:58 +02:00
Sabe Jones
8d9851a489 Merge branch 'release' into develop 2020-07-21 14:58:42 -05:00
Sabe Jones
ad60946eeb 4.149.3 2020-07-21 14:58:16 -05:00
Sabe Jones
c5e02292c4 feat(content): award yearly Orcas 2020-07-21 14:57:52 -05:00
Melior
e2d0ddfb39 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (213 of 213 strings)

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

Translated using Weblate (Czech)

Currently translated at 89.2% (125 of 140 strings)

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

Translated using Weblate (Czech)

Currently translated at 98.9% (183 of 185 strings)

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

Translated using Weblate (Czech)

Currently translated at 98.9% (183 of 185 strings)

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

Translated using Weblate (Czech)

Currently translated at 98.9% (183 of 185 strings)

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

Translated using Weblate (Czech)

Currently translated at 83.8% (1777 of 2119 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (230 of 230 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (185 of 185 strings)

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

Translated using Weblate (Czech)

Currently translated at 92.4% (171 of 185 strings)

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

Translated using Weblate (Polish)

Currently translated at 81.4% (1725 of 2119 strings)

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

Translated using Weblate (Japanese)

Currently translated at 88.8% (1883 of 2119 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (230 of 230 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (185 of 185 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (173 of 173 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (83 of 83 strings)

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

Translated using Weblate (Latin)

Currently translated at 100.0% (83 of 83 strings)

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

Translated using Weblate (Czech)

Currently translated at 83.8% (1776 of 2119 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (543 of 543 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (543 of 543 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2119 of 2119 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (250 of 250 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (57 of 57 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (28 of 28 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (146 of 146 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (8 of 8 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (493 of 493 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (63 of 63 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (360 of 360 strings)

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

Translated using Weblate (Polish)

Currently translated at 100.0% (211 of 211 strings)

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

Translated using Weblate (Czech)

Currently translated at 95.9% (521 of 543 strings)

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

Translated using Weblate (Czech)

Currently translated at 94.1% (511 of 543 strings)

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

Translated using Weblate (Czech)

Currently translated at 78.3% (145 of 185 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Czech)

Currently translated at 93.7% (509 of 543 strings)

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

Translated using Weblate (Japanese)

Currently translated at 88.6% (1879 of 2119 strings)

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

Translated using Weblate (Hindi)

Currently translated at 76.0% (413 of 543 strings)

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

Translated using Weblate (Hindi)

Currently translated at 100.0% (83 of 83 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (140 of 140 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (493 of 493 strings)

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

Translated using Weblate (Russian)

Currently translated at 100.0% (493 of 493 strings)

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

Translated using Weblate (Japanese)

Currently translated at 88.3% (1873 of 2119 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (2119 of 2119 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Russian)

Currently translated at 99.2% (697 of 702 strings)

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

Translated using Weblate (German)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Hindi)

Currently translated at 100.0% (83 of 83 strings)

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

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Czech)

Currently translated at 92.2% (501 of 543 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (83 of 83 strings)

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

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/

Translated using Weblate (Italian)

Currently translated at 100.0% (67 of 67 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (12 of 12 strings)

Translation: Habitica/Merch
Translate-URL: https://translate.habitica.com/projects/habitica/merch/cs/

Translated using Weblate (Italian)

Currently translated at 100.0% (31 of 31 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (185 of 185 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (2119 of 2119 strings)

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

Translated using Weblate (German)

Currently translated at 99.2% (2104 of 2119 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (328 of 328 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (56 of 56 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (63 of 63 strings)

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

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (702 of 702 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (124 of 124 strings)

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

Translated using Weblate (Czech)

Currently translated at 95.9% (119 of 124 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (360 of 360 strings)

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

Translated using Weblate (Italian)

Currently translated at 100.0% (134 of 134 strings)

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

Translated using Weblate (Czech)

Currently translated at 90.2% (490 of 543 strings)

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

Translated using Weblate (Czech)

Currently translated at 100.0% (211 of 211 strings)

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

Translated using Weblate (Spanish (Latin America))

Currently translated at 79.6% (199 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 97.9% (532 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hans/
2020-07-21 19:35:39 +02:00
Matteo Pagliazzi
3db2cd49a4 fix(rate limit); more informative error message 2020-07-20 23:52:51 +02:00
Matteo Pagliazzi
02cac78896 fix(rate limit); more informative error message 2020-07-20 23:52:33 +02:00
Matteo Pagliazzi
fef9c74f9b Merge branch 'release' into develop 2020-07-19 18:26:48 +02:00
Matteo Pagliazzi
858a8749a4 4.149.2 2020-07-19 18:26:24 +02:00
Matteo Pagliazzi
fd7c5b3847 feat(members): allow to fetch up to 60 members at all (#12400) 2020-07-19 18:25:46 +02:00
Alys
73aa32ca31 change Community Guidelines to remove special instructions for reporting PMs
Private messages in your inbox can now be reported in the same way
as guild posts.
2020-07-19 20:47:15 +10:00
Amber
ead0b6c56f PR to fix: Disallow line breaks in display names (#12380)
* Update settings.json

* Update index.js

* Update validation.js

* Update validation.js

* Update validation.js

Removes the second check

* Update tests and validation

Added tests, and updated validation
2020-07-18 22:41:19 +02:00
Matteo Pagliazzi
e550ca1531 Merge branch 'release' into develop 2020-07-18 15:37:18 +02:00
Matteo Pagliazzi
88059f568c 4.149.1 2020-07-18 15:36:56 +02:00
Matteo Pagliazzi
9f85d3927f fix(content): include app version in response 2020-07-18 15:36:44 +02:00
Matteo Pagliazzi
d8badb6d12 4.149.0 2020-07-18 15:00:39 +02:00
Matteo Pagliazzi
f5e4e2150a fix(tests): remove exclusive unit test 2020-07-18 15:00:31 +02:00
Matteo Pagliazzi
6743dcb08a fix(cors): expose rate limit headers to clients 2020-07-18 15:00:23 +02:00
Matteo Pagliazzi
e7c8833c9a API v3 Rate Limiter (#12117)
* simplify ip address management by using the trust proxy express option

* add setupExpress file

* fix redirects middleware tests

* fix lint

* short circuit the ip blocking middleware

* basic implementation with ip based limiting

* improve logging

* upgrade apidoc

* apidoc: add introduction section

* fix lint

* fix tests

* fix lint

* add unit tests for rate limiter

* do not send retry-after header when points are available

* automatically fix lint

* fix more lint issues

* use userId as key for rate limit when available
2020-07-18 15:00:09 +02:00
Matteo Pagliazzi
4de5140cf7 fix(tests): remove exclusive unit test 2020-07-17 19:14:02 +02:00
Matteo Pagliazzi
7de5a51247 fix(cors): expose rate limit headers to clients 2020-07-17 19:00:16 +02:00
Matteo Pagliazzi
f1173cee6a API v3 Rate Limiter (#12117)
* simplify ip address management by using the trust proxy express option

* add setupExpress file

* fix redirects middleware tests

* fix lint

* short circuit the ip blocking middleware

* basic implementation with ip based limiting

* improve logging

* upgrade apidoc

* apidoc: add introduction section

* fix lint

* fix tests

* fix lint

* add unit tests for rate limiter

* do not send retry-after header when points are available

* automatically fix lint

* fix more lint issues

* use userId as key for rate limit when available
2020-07-17 16:13:51 +02:00
negue
0261d12bd9 Profile Page: redesign gear label (#12395)
* redesign gear label + lintOnSave not in development environment

* fix lint / build

* fix(lint): remove extra parens

* fix break-word + remove lintOnSave

* remove unneeded styles

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2020-07-17 12:43:27 +02:00
Sabe Jones
e3bcc48481 chore(npm): update package lock 2020-07-16 20:37:40 +00:00
Melior
8bbb0ddaee Merge branch 'origin/develop' into Weblate. 2020-07-16 22:16:18 +02:00
Melior
7a0733f5ac Translated using Weblate (German)
Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/de/

Translated using Weblate (German)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Italian)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/it/

Translated using Weblate (Czech)

Currently translated at 95.3% (203 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/cs/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/zh_Hans/

Translated using Weblate (Italian)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/it/

Translated using Weblate (Czech)

Currently translated at 83.6% (1773 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/cs/

Translated using Weblate (Italian)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Czech)

Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/cs/

Translated using Weblate (Czech)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/cs/

Translated using Weblate (Czech)

Currently translated at 88.2% (479 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/cs/

Translated using Weblate (Czech)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/cs/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Czech)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/

Translated using Weblate (Czech)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/

Translated using Weblate (Czech)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/

Translated using Weblate (Czech)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/zh_Hans/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/vi/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/pt_BR/

Translated using Weblate (French)

Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/fr/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/zh_Hans/

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/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/en_GB/

Translated using Weblate (Italian)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/

Translated using Weblate (Japanese)

Currently translated at 100.0% (146 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/ja/

Translated using Weblate (German)

Currently translated at 99.3% (145 of 146 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/de/

Translated using Weblate (German)

Currently translated at 99.2% (2103 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/
2020-07-16 22:16:08 +02:00
Sabe Jones
474bc6a2b6 4.148.3 2020-07-16 15:12:06 -05:00
Sabe Jones
0af5593611 chore(sprites): compile 2020-07-16 15:11:49 -05:00
Sabe Jones
1b190a594a chore(news): Bailey 2020-07-16 15:11:40 -05:00
Sabe Jones
e54bd8f242 Merge branch 'develop' into release 2020-07-16 14:58:25 -05:00
Melior
0cc7c4a078 Merge branch 'origin/develop' into Weblate. 2020-07-14 23:22:58 +02:00
Melior
254a5cf423 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/vi/

Translated using Weblate (English (Pirate))

Currently translated at 97.9% (483 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/en@pirate/

Translated using Weblate (Vietnamese)

Currently translated at 99.2% (133 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/vi/

Translated using Weblate (Thai)

Currently translated at 98.5% (132 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/th/

Translated using Weblate (Slovenian)

Currently translated at 99.2% (133 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/sl/

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/lt/

Translated using Weblate (Bosnian)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/bs/

Translated using Weblate (Arabic)

Currently translated at 99.2% (133 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ar/

Translated using Weblate (Czech)

Currently translated at 87.8% (123 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/cs/

Translated using Weblate (Japanese)

Currently translated at 88.2% (1871 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Czech)

Currently translated at 99.3% (296 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/cs/

Translated using Weblate (Czech)

Currently translated at 99.2% (133 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/cs/

Translated using Weblate (Japanese)

Currently translated at 97.1% (682 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Italian)

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Japanese)

Currently translated at 88.2% (1869 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Italian)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/it/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/

Translated using Weblate (Japanese)

Currently translated at 87.9% (1863 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Japanese)

Currently translated at 87.8% (1861 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Italian)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Bengali)

Currently translated at 2.7% (4 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/bn/

Translated using Weblate (Bengali)

Currently translated at 11.2% (37 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/bn/

Translated using Weblate (Bengali)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/bn/

Translated using Weblate (Bengali)

Currently translated at 90.1% (192 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/bn/

Translated using Weblate (Bengali)

Currently translated at 8.4% (7 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/bn/

Translated using Weblate (Russian)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

Translated using Weblate (Russian)

Currently translated at 96.5% (167 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Czech)

Currently translated at 98.5% (66 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/cs/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Japanese)

Currently translated at 87.7% (1859 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.7% (2093 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Czech)

Currently translated at 98.5% (66 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/cs/

Translated using Weblate (Czech)

Currently translated at 98.5% (66 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/cs/

Translated using Weblate (Czech)

Currently translated at 100.0% (27 of 27 strings)

Translation: Habitica/Loginincentives
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/cs/

Translated using Weblate (Italian)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/

Translated using Weblate (Czech)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/cs/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.6% (2090 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Czech)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/cs/

Translated using Weblate (Czech)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/cs/

Translated using Weblate (Czech)

Currently translated at 95.7% (202 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/cs/

Translated using Weblate (Czech)

Currently translated at 95.7% (202 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/cs/

Translated using Weblate (Czech)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/cs/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hans/

Translated using Weblate (Greek)

Currently translated at 75.5% (410 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/el/

Translated using Weblate (Arabic)

Currently translated at 75.5% (410 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ar/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/zh_Hant/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/

Translated using Weblate (Italian)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (Italian)

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (French)

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/

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 (Chinese (Traditional))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hant/

Translated using Weblate (Czech)

Currently translated at 99.4% (358 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/cs/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hant/

Translated using Weblate (Italian)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/

Translated using Weblate (French)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/en_GB/

Translated using Weblate (Italian)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/

Translated using Weblate (Italian)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Japanese)

Currently translated at 87.5% (1856 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Japanese)

Currently translated at 87.4% (1853 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/vi/

Translated using Weblate (French)

Currently translated at 99.7% (2114 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 99.0% (538 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/

Translated using Weblate (Japanese)

Currently translated at 87.3% (1852 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Italian)

Currently translated at 93.2% (1977 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Hindi)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/hi/

Translated using Weblate (German)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/de/

Translated using Weblate (German)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/

Translated using Weblate (Italian)

Currently translated at 93.0% (1972 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (German)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/de/

Translated using Weblate (German)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/de/

Translated using Weblate (Japanese)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Italian)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/

Translated using Weblate (German)

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/

Translated using Weblate (Hindi)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hi/

Translated using Weblate (Hindi)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hi/

Translated using Weblate (German)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

Translated using Weblate (German)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

Translated using Weblate (German)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/de/

Translated using Weblate (Korean)

Currently translated at 51.0% (73 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/ko/

Translated using Weblate (Korean)

Currently translated at 70.2% (130 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ko/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2119 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (German)

Currently translated at 99.0% (2099 of 2119 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (543 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

Translated using Weblate (Russian)

Currently translated at 98.7% (536 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

Translated using Weblate (German)

Currently translated at 99.4% (540 of 543 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
2020-07-14 23:22:49 +02:00
Sabe Jones
18bc8c3d63 4.148.2 2020-07-14 16:11:42 -05:00
Sabe Jones
15753de3a1 feat(content): Seafoam and Amigos 2020-07-14 16:11:34 -05:00
Matteo Pagliazzi
c93bf3e498 MongoDB Transactions (#12335)
* add run-rs to dependencies

* wip: add replica set to api unit github action

* wip: add replica set to api unit github action

* wip: fix gh actions mongodb replica set setting

* usa replica set for integration tests

* add correct mongodb version matrix for integration tests

* use different db connection on gh actions

* Revert "use different db connection on gh actions"

This reverts commit aa8db759d3.

* add example transaction

* add mongo script to package.json

* abstract mongodb utils, connect using hostname on windows

* npm scripts: mongo -> mongo:dev

* add setup script for run-rs on windows

* gh actions: run in test environment

* remove test files

* better error handling, use cross-spawn to avoid issues on windows

* fix lint
2020-07-14 18:55:47 +02:00
PitiTheGrey
e89ff95a21 Add Bulk Feed via query parameter (#12384)
* Update feed.js

New Tests for bulk feeding

* Update POST-user_feed_pet_food.test.js

Added test for bulk-feeding

* Update user.js

Added 'query paramter' for bulk feeding

* Update pets.json

Added "tooMuchFood" for bulk feeding pets

* Update feed.js

Added query parameter option for bulk feeding pets.

* Update feed.js

fixing lint
(bulk feeding)

* Update POST-user_feed_pet_food.test.js

adjustments for testing bulk feeding

* Update feed.js

Bulk feeding 
amount as integer

* Update pets.json

added invalidAmount for bulk feeding

* Update feed.js

Bulk feeding  
Error handling

* Update feed.js

Bulk - feed  
no hardcoded values

* Update pets.json

Get rid of my german accent.
2020-07-13 16:04:03 +02:00
Jalansh
a02c4c1cfd WIP. Accepting a redundant party invite will not remove the user from the party and let the user still be a part of it. Fixes #12291. (#12356)
* Getting the latest code

* Temporary fix for Redundant Party Invite. Needs changes.

* Added logic to check if the user is an existing member of the party that the user is invited to.

* Added a test case for redundant party invite check.

* Changed the test case for redundant party invite to see if it runs successfully.

* Made changes to the test cases.

* Fixed lint errors.

* Removed the exclusive mocha test.

* Referred the issue in the name of the new test case.

* Modified test case to check its veracity.

* Checking if the update statement is working or not.
2020-07-13 16:00:34 +02:00
Matteo Pagliazzi
616a0b7509 fix(tests): add informative message if mongo is not running 2020-07-13 16:00:04 +02:00
Matteo Pagliazzi
2a0bc030d8 Merge pull request #12385 from HabitRPG/fix/time-travelers-pinning
fix filter reset on pinning items
2020-07-13 11:53:03 +02:00
Matteo Pagliazzi
42b00ed381 build(deps): bump mongoose from 5.9.21 to 5.9.23 (#12391)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.21 to 5.9.23.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.21...5.9.23)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-13 11:45:07 +02:00
dependabot-preview[bot]
928c88f2da build(deps): bump lodash from 4.17.15 to 4.17.19 (#12387)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-13 11:44:56 +02:00
dependabot-preview[bot]
768e71228c build(deps): bump mongoose from 5.9.21 to 5.9.23
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.21 to 5.9.23.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.21...5.9.23)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-13 08:45:51 +00:00
dependabot-preview[bot]
6082f77977 build(deps): bump lodash from 4.17.15 to 4.17.19 in /website/client (#12386)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-13 10:43:58 +02:00
dependabot-preview[bot]
f6717a0bc1 build(deps): bump vuedraggable from 2.23.2 to 2.24.0 in /website/client (#12388)
Bumps [vuedraggable](https://github.com/SortableJS/Vue.Draggable) from 2.23.2 to 2.24.0.
- [Release notes](https://github.com/SortableJS/Vue.Draggable/releases)
- [Commits](https://github.com/SortableJS/Vue.Draggable/compare/v2.23.2...v2.24.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-07-13 10:43:42 +02:00
dependabot-preview[bot]
9b3f8981e5 build(deps): bump node-gcm from 1.0.2 to 1.0.3 (#12389)
Bumps [node-gcm](https://github.com/ToothlessGear/node-gcm) from 1.0.2 to 1.0.3.
- [Release notes](https://github.com/ToothlessGear/node-gcm/releases)
- [Changelog](https://github.com/ToothlessGear/node-gcm/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ToothlessGear/node-gcm/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-13 10:43:27 +02:00
dependabot-preview[bot]
2758414b54 build(deps): bump sass from 1.26.9 to 1.26.10 in /website/client (#12392)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.9 to 1.26.10.
- [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.9...1.26.10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-13 10:43:13 +02:00
dependabot-preview[bot]
e49aabdddf build(deps): bump got from 11.4.0 to 11.5.0 (#12393)
Bumps [got](https://github.com/sindresorhus/got) from 11.4.0 to 11.5.0.
- [Release notes](https://github.com/sindresorhus/got/releases)
- [Commits](https://github.com/sindresorhus/got/compare/v11.4.0...v11.5.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-07-13 10:42:58 +02:00
dependabot-preview[bot]
aa371de8ae build(deps): bump universal-analytics from 0.4.22 to 0.4.23 (#12394)
Bumps [universal-analytics](https://github.com/peaksandpies/universal-analytics) from 0.4.22 to 0.4.23.
- [Release notes](https://github.com/peaksandpies/universal-analytics/releases)
- [Changelog](https://github.com/peaksandpies/universal-analytics/blob/master/HISTORY.md)
- [Commits](https://github.com/peaksandpies/universal-analytics/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-13 10:42:15 +02:00
negue
0acc7d19c5 fix filter reset on pinning items - fixes #9500 2020-07-12 20:43:51 +02:00
Matteo Pagliazzi
d861236f44 fix(cors): allow authorization header 2020-07-12 18:22:52 +02:00
Sabe Jones
195928e471 Merge branch 'release' into develop 2020-07-10 11:05:31 -05:00
Sabe Jones
c27d52098b 4.148.1 2020-07-10 11:04:56 -05:00
Sabe Jones
9e82ba261b fix(columns): avoid a Vue error on initial load 2020-07-10 10:50:27 -05:00
negue
566dd2b6b1 fix new pm canReceive (#12369) 2020-07-08 11:30:27 +02:00
Melior
1a769d4a45 Merge branch 'origin/develop' into Weblate. 2020-07-07 21:58:20 +02:00
Melior
f3fe1d76ad Translated using Weblate (Slovak)
Currently translated at 94.7% (54 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/sk/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.8% (2089 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.8% (2088 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.8% (2088 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/en_GB/

Translated using Weblate (Slovak)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/sk/

Translated using Weblate (Portuguese)

Currently translated at 81.8% (1730 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2113 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

Translated using Weblate (Slovak)

Currently translated at 100.0% (15 of 15 strings)

Translation: Habitica/Death
Translate-URL: https://translate.habitica.com/projects/habitica/death/sk/

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (Slovak)

Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/sk/

Translated using Weblate (Czech)

Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/cs/

Translated using Weblate (Slovak)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/sk/

Translated using Weblate (Slovak)

Currently translated at 27.7% (23 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/sk/

Translated using Weblate (Korean)

Currently translated at 16.1% (53 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ko/

Translated using Weblate (Korean)

Currently translated at 93.8% (503 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ko/

Translated using Weblate (Spanish)

Currently translated at 89.2% (223 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es/

Translated using Weblate (Japanese)

Currently translated at 87.6% (1851 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Italian)

Currently translated at 91.4% (1932 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/it/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 98.8% (2089 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Vietnamese)

Currently translated at 85.6% (214 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/vi/

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/vi/

Translated using Weblate (Vietnamese)

Currently translated at 83.6% (209 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/vi/

Translated using Weblate (Hindi)

Currently translated at 12.0% (10 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hi/

Translated using Weblate (Hindi)

Currently translated at 12.0% (10 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/vi/

Translated using Weblate (Japanese)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Italian)

Currently translated at 90.6% (1915 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Tagalog)

Currently translated at 89.2% (190 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/tl/

Translated using Weblate (Javanese)

Currently translated at 89.2% (190 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/jv/

Translated using Weblate (Arabic)

Currently translated at 89.2% (190 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ar/

Translated using Weblate (Croatian)

Currently translated at 88.7% (623 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/hr/

Translated using Weblate (Persian)

Currently translated at 100.0% (27 of 27 strings)

Translation: Habitica/Loginincentives
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/fa/

Translated using Weblate (Tagalog)

Currently translated at 80.5% (1701 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/tl/

Translated using Weblate (Korean)

Currently translated at 80.5% (1701 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ko/

Translated using Weblate (Galician)

Currently translated at 80.5% (1701 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/gl/

Translated using Weblate (Croatian)

Currently translated at 98.3% (122 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/hr/

Translated using Weblate (Finnish)

Currently translated at 98.3% (122 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/fi/

Translated using Weblate (Greek)

Currently translated at 98.3% (122 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/el/

Translated using Weblate (Vietnamese)

Currently translated at 98.5% (208 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/vi/

Translated using Weblate (Dutch)

Currently translated at 97.8% (2067 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 87.4% (1847 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Spanish)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/es/

Translated using Weblate (Italian)

Currently translated at 89.3% (1889 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Italian)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/it/

Translated using Weblate (Italian)

Currently translated at 88.4% (1868 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Japanese)

Currently translated at 87.1% (1841 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (French)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/fr/

Translated using Weblate (Italian)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/

Translated using Weblate (Italian)

Currently translated at 88.3% (1867 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Italian)

Currently translated at 88.3% (1867 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/it/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Italian)

Currently translated at 86.8% (1835 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Korean)

Currently translated at 89.2% (25 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/ko/

Translated using Weblate (Italian)

Currently translated at 86.0% (1819 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Japanese)

Currently translated at 87.1% (1841 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/vi/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.7% (2086 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Italian)

Currently translated at 85.4% (1805 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Vietnamese)

Currently translated at 98.5% (486 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/vi/

Translated using Weblate (Italian)

Currently translated at 82.6% (1747 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (Japanese)

Currently translated at 86.9% (1837 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2113 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (Italian)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/it/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/

Translated using Weblate (Italian)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/it/

Translated using Weblate (Italian)

Currently translated at 82.6% (1747 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Italian)

Currently translated at 82.6% (1747 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Russian)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 99.4% (698 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 99.2% (697 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/
2020-07-07 21:58:10 +02:00
Sabe Jones
955c41f744 Merge branch 'release' into develop 2020-07-07 14:53:52 -05:00
Sabe Jones
c46b4e55c3 4.148.0 2020-07-07 14:49:31 -05:00
Sabe Jones
dc7b016950 chore(news): Bailey 2020-07-07 14:49:20 -05:00
Sabe Jones
264d6b466a chore(sprites): compile 2020-07-07 14:39:27 -05:00
Sabe Jones
c876d970eb fix(content): missing strings 2020-07-07 13:50:39 -05:00
dependabot-preview[bot]
00c9fabf8b build(deps): bump amplitude-js from 6.2.0 to 7.1.0 in /website/client (#12375)
Bumps [amplitude-js](https://github.com/amplitude/amplitude-javascript) from 6.2.0 to 7.1.0.
- [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/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-07 20:04:07 +02:00
dependabot-preview[bot]
82d1df67c9 build(deps): bump universal-analytics from 0.4.20 to 0.4.22 (#12373)
Bumps [universal-analytics](https://github.com/peaksandpies/universal-analytics) from 0.4.20 to 0.4.22.
- [Release notes](https://github.com/peaksandpies/universal-analytics/releases)
- [Changelog](https://github.com/peaksandpies/universal-analytics/blob/master/HISTORY.md)
- [Commits](https://github.com/peaksandpies/universal-analytics/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-07 20:02:16 +02:00
dependabot-preview[bot]
9449e6a883 build(deps): bump got from 11.3.0 to 11.4.0 (#12372)
Bumps [got](https://github.com/sindresorhus/got) from 11.3.0 to 11.4.0.
- [Release notes](https://github.com/sindresorhus/got/releases)
- [Commits](https://github.com/sindresorhus/got/compare/v11.3.0...v11.4.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-07-07 20:01:17 +02:00
dependabot-preview[bot]
fa72684c53 build(deps): bump mongoose from 5.9.20 to 5.9.21 (#12371)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.20 to 5.9.21.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.20...5.9.21)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-07 20:00:59 +02:00
Matteo Pagliazzi
45a22470fa fix 9351: sync player that casts spells immediately (#12367) 2020-07-05 00:01:02 +02:00
tsukimi2
a388abc124 Added code to update user tag list along with the existing code that already involves updating the user documents of challenge members (#12312)
* Piggybacking the updating of user tag list.

When a new task is being added to a challenge, added code to update user tag list along with the existing code that already involves syncing / updating the user documents of challenge members.

* Update comment on number of simulatenaeous users to be updated concurrently in TaskQueue.

* Added comment to explain previous commit caaca469f8 (Update comment on number of simulateneous users to be updated concurrently in TaskQueue)

* Added unit tests for testing commit caaca469f8 (Update comment on number of simulateneous users to be updated concurrently in TaskQueue)

* Removed unused lines from newly added test cases

* Implemented lint suggestions

* Update code with changes requested in PR
2020-07-03 21:55:59 +02:00
Sabe Jones
94dd64677f feat(content): armoire/bgs 2020-07-03 11:17:50 -05:00
JalanshMunshi
453d60b5bf WIP. Changed the way how memberCount is incremented or decremented. Fixes #12275 (#12308)
* Changed the way how memberCount is incremented or decremented.

* Updated the logic for incrementing/decrementing memberCount for parties and guilds.

* Fixed lint errors

* Added relevant comment. Changed the way how memberCount is updated to replace the usage of custom query.

* Fixed lint errors.

* Reverted changes owing to failing tests.

* Added relevant comments. Removed duplicate and unwanted code. Added await for async function call.

* Minor change due to lint error.

* Reverted changes for removing the party member when the menber leaves.
2020-07-03 16:51:45 +02:00
Robert Whitaker
af1d13d3a2 Fix bug where updated webhook options failed to save (fixes #12336) (#12342)
* Fix bug where updated webhook options failed to save

This bug was caused by Mongoose not creating getters/setters for array
elements (https://mongoosejs.com/docs/faq.html#array-changes-not-saved).
So, although the webhook was being updated properly, Mongoose was not
actually committing it to the database. Telling Mongoose that the array
of webhooks has changed via `markModified` fixes the issue.

Additionally, the relevant API test case was only checking whether or
not the webhook returned from the PUT endpoint matched the expected
update. Since the endpoint was returning the updated webhook without
querying the database again, this test case would pass. It has been
updated to check both the returned webhook as well as the version of the
webhook that is saved to the database against the expected. In other
words:

`assert returned === saved === expected`

Fixes #12336

* Call markModified on webhook.options instead of user.webhooks

This tells Mongoose that only the modified webhook's options changed
instead of telling it that the entire user.webhooks array changed,
saving a costly DB update.
2020-07-03 16:48:45 +02:00
Matteo Pagliazzi
680e86d2c9 Merge branch 'release' into develop 2020-07-03 15:07:29 +02:00
Matteo Pagliazzi
46c92d6171 4.147.3 2020-07-03 14:36:01 +02:00
Matteo Pagliazzi
1efcaa4a1d fix #12364, profile of logged in user did not show up correctly 2020-07-03 14:35:29 +02:00
Matteo Pagliazzi
cc5e3ed123 fix #12364, profile of logged in user did not show up correctly 2020-07-03 14:17:39 +02:00
Sabe Jones
c4d131744b fix(lint): let Curly breathe 2020-07-02 16:50:41 -05:00
Sabe Jones
a378106851 fix(script): better dupe matching 2020-07-02 20:56:19 +00:00
Melior
4a6c0168a9 Merge branch 'origin/develop' into Weblate. 2020-07-02 21:05:55 +02:00
Melior
9d29f065e9 Translated using Weblate (Portuguese (Brazil))
Currently translated at 98.7% (2086 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Italian)

Currently translated at 96.5% (678 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Korean)

Currently translated at 15.8% (52 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ko/

Translated using Weblate (Latin)

Currently translated at 98.2% (56 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/la/

Translated using Weblate (Korean)

Currently translated at 76.7% (43 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ko/

Translated using Weblate (Arabic)

Currently translated at 100.0% (12 of 12 strings)

Translation: Habitica/Merch
Translate-URL: https://translate.habitica.com/projects/habitica/merch/ar/

Translated using Weblate (Thai)

Currently translated at 97.3% (224 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/th/

Translated using Weblate (Lithuanian)

Currently translated at 97.3% (224 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/lt/

Translated using Weblate (Arabic)

Currently translated at 97.3% (224 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ar/

Translated using Weblate (Tamil)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ta/

Translated using Weblate (Tamil)

Currently translated at 76.4% (410 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ta/

Translated using Weblate (Malay)

Currently translated at 76.8% (412 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ms/

Translated using Weblate (Hindi)

Currently translated at 76.4% (410 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/hi/

Translated using Weblate (Irish)

Currently translated at 76.4% (410 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ga/

Translated using Weblate (Arabic)

Currently translated at 76.4% (410 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ar/

Translated using Weblate (Arabic)

Currently translated at 89.2% (190 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ar/

Translated using Weblate (Persian)

Currently translated at 78.8% (197 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fa/

Translated using Weblate (Arabic)

Currently translated at 88.7% (623 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ar/

Translated using Weblate (Chinese (Hong Kong))

Currently translated at 8.4% (7 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hant_HK/

Translated using Weblate (Chinese (Hong Kong))

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/zh_Hant_HK/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/vi/

Translated using Weblate (Urdu (Pakistan))

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ur_PK/

Translated using Weblate (Klingon)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/tlh/

Translated using Weblate (Tagalog)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/tl/

Translated using Weblate (Thai)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/th/

Translated using Weblate (Tamil)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ta/

Translated using Weblate (Swahili)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/sw/

Translated using Weblate (Sundanese)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/su/

Translated using Weblate (Slovenian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/sl/

Translated using Weblate (Sinhala)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/si/

Translated using Weblate (Scots)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/sco/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/nb_NO/

Translated using Weblate (Norwegian Nynorsk)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/nn/

Translated using Weblate (Malay)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ms/

Translated using Weblate (Marathi)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/mr/

Translated using Weblate (Mongolian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/mn/

Translated using Weblate (Malayalam)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ml/

Translated using Weblate (Macedonian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/mk/

Translated using Weblate (Latvian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/lv/

Translated using Weblate (Lithuanian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/lt/

Translated using Weblate (Lingala)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ln/

Translated using Weblate (Kurdish)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ku_IQ/

Translated using Weblate (Javanese)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/jv/

Translated using Weblate (Lojban)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/jbo/

Translated using Weblate (Icelandic)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/is/

Translated using Weblate (Croatian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/hr/

Translated using Weblate (Hindi)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/hi/

Translated using Weblate (Hawaiian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/haw/

Translated using Weblate (Galician)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/gl/

Translated using Weblate (Irish)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ga/

Translated using Weblate (Frisian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/fy/

Translated using Weblate (Filipino)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/fil/

Translated using Weblate (Finnish)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/fi/

Translated using Weblate (Persian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/fa/

Translated using Weblate (Estonian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/et/

Translated using Weblate (Esperanto)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/eo/

Translated using Weblate (Greek)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/el/

Translated using Weblate (Catalan)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ca/

Translated using Weblate (Bosnian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/bs/

Translated using Weblate (Bengali)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/bn/

Translated using Weblate (Belarusian)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/be/

Translated using Weblate (Arabic)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ar/

Translated using Weblate (Afrikaans)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/af/

Translated using Weblate (Acholi)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ach/

Translated using Weblate (Arabic)

Currently translated at 100.0% (31 of 31 strings)

Translation: Habitica/Maintenance
Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/ar/

Translated using Weblate (Chinese (Hong Kong))

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hant_HK/

Translated using Weblate (Vietnamese)

Currently translated at 97.3% (480 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/vi/

Translated using Weblate (Urdu (Pakistan))

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ur_PK/

Translated using Weblate (Klingon)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/tlh/

Translated using Weblate (Tagalog)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/tl/

Translated using Weblate (Thai)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/th/

Translated using Weblate (Tamil)

Currently translated at 95.9% (473 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ta/

Translated using Weblate (Swahili)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/sw/

Translated using Weblate (Sundanese)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/su/

Translated using Weblate (Slovenian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/sl/

Translated using Weblate (Sinhala)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/si/

Translated using Weblate (Scots)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/sco/

Translated using Weblate (Norwegian Bokmål)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/nb_NO/

Translated using Weblate (Norwegian Nynorsk)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/nn/

Translated using Weblate (Malay)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ms/

Translated using Weblate (Marathi)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/mr/

Translated using Weblate (Mongolian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/mn/

Translated using Weblate (Malayalam)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ml/

Translated using Weblate (Macedonian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/mk/

Translated using Weblate (Latvian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/lv/

Translated using Weblate (Lithuanian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/lt/

Translated using Weblate (Lingala)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ln/

Translated using Weblate (Kurdish)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ku_IQ/

Translated using Weblate (Korean)

Currently translated at 96.1% (474 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ko/

Translated using Weblate (Javanese)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/jv/

Translated using Weblate (Lojban)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/jbo/

Translated using Weblate (Icelandic)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/is/

Translated using Weblate (Croatian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/hr/

Translated using Weblate (Hindi)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/hi/

Translated using Weblate (Hawaiian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/haw/

Translated using Weblate (Galician)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/gl/

Translated using Weblate (Irish)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ga/

Translated using Weblate (Frisian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fy/

Translated using Weblate (Filipino)

Currently translated at 98.5% (486 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fil/

Translated using Weblate (Finnish)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fi/

Translated using Weblate (Persian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fa/

Translated using Weblate (Estonian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/et/

Translated using Weblate (Esperanto)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/eo/

Translated using Weblate (Greek)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/el/

Translated using Weblate (Catalan)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ca/

Translated using Weblate (Bosnian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/bs/

Translated using Weblate (Bengali)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/bn/

Translated using Weblate (Belarusian)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/be/

Translated using Weblate (Arabic)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ar/

Translated using Weblate (Afrikaans)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/af/

Translated using Weblate (Acholi)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ach/

Translated using Weblate (Malay)

Currently translated at 97.3% (290 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ms/

Translated using Weblate (Arabic)

Currently translated at 80.5% (1702 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ar/

Translated using Weblate (Persian)

Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/fa/

Translated using Weblate (Arabic)

Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ar/

Translated using Weblate (Korean)

Currently translated at 86.1% (310 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ko/

Translated using Weblate (Arabic)

Currently translated at 85.2% (307 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ar/

Translated using Weblate (Galician)

Currently translated at 91.9% (194 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/gl/

Translated using Weblate (Swedish)

Currently translated at 98.2% (56 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/sv/

Translated using Weblate (Hungarian)

Currently translated at 96.4% (55 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/hu/

Translated using Weblate (English (Pirate))

Currently translated at 98.2% (56 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/en@pirate/

Translated using Weblate (Danish)

Currently translated at 98.2% (56 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/da/

Translated using Weblate (Slovak)

Currently translated at 95.1% (136 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/sk/

Translated using Weblate (Hebrew)

Currently translated at 93.7% (134 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/he/

Translated using Weblate (Ukrainian)

Currently translated at 95.5% (64 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/uk/

Translated using Weblate (Hebrew)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/he/

Translated using Weblate (Spanish)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/es/

Translated using Weblate (Turkish)

Currently translated at 95.5% (471 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/tr/

Translated using Weblate (Hebrew)

Currently translated at 92.9% (458 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/he/

Translated using Weblate (Spanish)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/es/

Translated using Weblate (Japanese)

Currently translated at 86.7% (1833 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Italian)

Currently translated at 82.6% (1746 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Hebrew)

Currently translated at 96.9% (318 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/he/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Italian)

Currently translated at 94.1% (661 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Russian)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/

Translated using Weblate (Hungarian)

Currently translated at 34.9% (29 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hu/

Translated using Weblate (Czech)

Currently translated at 68.6% (57 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/

Translated using Weblate (Czech)

Currently translated at 68.6% (57 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/

Translated using Weblate (Italian)

Currently translated at 81.8% (1730 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Italian)

Currently translated at 81.8% (1730 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Italian)

Currently translated at 81.7% (1728 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Latin)

Currently translated at 31.4% (45 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/la/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/vi/

Translated using Weblate (Vietnamese)

Currently translated at 82.2% (1737 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/vi/

Translated using Weblate (Vietnamese)

Currently translated at 96.2% (203 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/vi/

Translated using Weblate (Japanese)

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Italian)

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/

Translated using Weblate (Japanese)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/ja/

Translated using Weblate (Japanese)

Currently translated at 86.6% (1830 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Spanish)

Currently translated at 89.5% (1892 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

Translated using Weblate (Italian)

Currently translated at 92.0% (646 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Japanese)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Italian)

Currently translated at 94.4% (236 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/

Translated using Weblate (Vietnamese)

Currently translated at 81.1% (1715 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/vi/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.5% (2082 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (French)

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/

Translated using Weblate (French)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2113 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2113 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/vi/

Translated using Weblate (Vietnamese)

Currently translated at 80.8% (1708 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/vi/

Translated using Weblate (Japanese)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/

Translated using Weblate (Italian)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/it/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/

Translated using Weblate (Italian)

Currently translated at 90.0% (225 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/

Translated using Weblate (Italian)

Currently translated at 90.0% (225 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/pt_BR/

Translated using Weblate (Italian)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (31 of 31 strings)

Translation: Habitica/Maintenance
Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (27 of 27 strings)

Translation: Habitica/Loginincentives
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/

Translated using Weblate (Italian)

Currently translated at 81.6% (1725 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (15 of 15 strings)

Translation: Habitica/Death
Translate-URL: https://translate.habitica.com/projects/habitica/death/it/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

Translated using Weblate (Italian)

Currently translated at 90.3% (634 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (78 of 78 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/it/

Translated using Weblate (Italian)

Currently translated at 98.4% (323 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/it/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Spanish)

Currently translated at 97.3% (522 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/

Translated using Weblate (German)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/de/

Translated using Weblate (Russian)

Currently translated at 95.2% (238 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

Translated using Weblate (German)

Currently translated at 100.0% (250 of 250 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/

Translated using Weblate (German)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/de/

Translated using Weblate (German)

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/de/

Translated using Weblate (Russian)

Currently translated at 96.8% (2047 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (German)

Currently translated at 99.1% (2095 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
2020-07-02 21:05:43 +02:00
Sabe Jones
e36a91a5c7 4.147.2 2020-07-02 13:58:50 -05:00
Matteo Pagliazzi
ea623936bf apidoc: upgrade and add links to wiki 2020-07-02 18:19:15 +02:00
Sabe Jones
5a7e1cbc5a Merge branch 'release' into develop 2020-07-01 16:37:22 -05:00
Sabe Jones
0303f0b610 4.147.1 2020-07-01 16:36:57 -05:00
Sabe Jones
fb6eacf8f9 chore(news): Bailey 2020-07-01 16:36:51 -05:00
Matteo Pagliazzi
3d5630d5a2 chore: update sub-deps and fix lint 2020-07-01 18:20:18 +02:00
Sabe Jones
cbce80e926 fix(sorting): remove leading article from umbrella 2020-06-30 11:55:01 -05:00
Melior
b9d42bf0bc Translated using Weblate (Russian)
Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.6% (2080 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Japanese)

Currently translated at 86.5% (1825 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.4% (2077 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

Translated using Weblate (English)

Currently translated at 80.3% (45 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/en@lolcat/

Translated using Weblate (English)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/en@lolcat/

Translated using Weblate (English)

Currently translated at 94.0% (63 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/en@lolcat/

Translated using Weblate (English)

Currently translated at 95.3% (470 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/en@lolcat/

Translated using Weblate (English)

Currently translated at 97.3% (290 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/en@lolcat/

Translated using Weblate (English)

Currently translated at 80.7% (1703 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en@lolcat/

Translated using Weblate (Italian)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/it/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.4% (2076 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Italian)

Currently translated at 98.9% (295 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/it/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Italian)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/it/

Translated using Weblate (Portuguese)

Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/pt/

Translated using Weblate (Italian)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/it/

Translated using Weblate (Portuguese)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/pt/

Translated using Weblate (Italian)

Currently translated at 89.3% (479 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/

Translated using Weblate (Italian)

Currently translated at 65.0% (54 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Italian)

Currently translated at 65.0% (54 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Italian)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/it/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (249 of 249 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% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/pt_BR/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 92.9% (198 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.8% (694 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.7% (324 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pt_BR/

Translated using Weblate (English)

Currently translated at 1.2% (4 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/en@lolcat/

Translated using Weblate (English)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/en@lolcat/

Translated using Weblate (English)

Currently translated at 91.9% (159 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/en@lolcat/

Translated using Weblate (English)

Currently translated at 80.3% (45 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/en@lolcat/

Translated using Weblate (English)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/en@lolcat/

Translated using Weblate (English)

Currently translated at 89.6% (191 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/en@lolcat/

Translated using Weblate (English)

Currently translated at 79.5% (198 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/en@lolcat/

Translated using Weblate (English)

Currently translated at 96.4% (27 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/en@lolcat/

Translated using Weblate (English)

Currently translated at 85.7% (120 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/en@lolcat/

Translated using Weblate (English)

Currently translated at 100.0% (31 of 31 strings)

Translation: Habitica/Maintenance
Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/en@lolcat/

Translated using Weblate (English)

Currently translated at 95.3% (470 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/en@lolcat/

Translated using Weblate (English)

Currently translated at 97.3% (290 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/en@lolcat/

Translated using Weblate (English)

Currently translated at 80.7% (1703 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en@lolcat/

Translated using Weblate (English)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/en@lolcat/

Translated using Weblate (English)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en@lolcat/

Translated using Weblate (Russian)

Currently translated at 98.7% (82 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/

Translated using Weblate (Japanese)

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/

Translated using Weblate (Japanese)

Currently translated at 86.3% (1821 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/zh_Hant/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hant/

Translated using Weblate (Chinese (Traditional))

Currently translated at 98.9% (2087 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

Translated using Weblate (Chinese (Traditional))

Currently translated at 98.7% (693 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hant/

Translated using Weblate (Chinese (Traditional))

Currently translated at 98.2% (56 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/zh_Hant/

Translated using Weblate (Chinese (Traditional))

Currently translated at 96.4% (55 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/zh_Hant/

Translated using Weblate (English)

Currently translated at 78.5% (44 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/en@lolcat/

Translated using Weblate (English)

Currently translated at 99.1% (123 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en@lolcat/

Translated using Weblate (English)

Currently translated at 92.4% (195 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/en@lolcat/

Translated using Weblate (Belarusian)

Currently translated at 91.9% (194 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/be/

Translated using Weblate (English (Pirate))

Currently translated at 78.5% (44 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/en@pirate/

Translated using Weblate (English (Pirate))

Currently translated at 99.1% (123 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en@pirate/

Translated using Weblate (Ukrainian)

Currently translated at 91.9% (194 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/uk/

Translated using Weblate (English (Pirate))

Currently translated at 99.0% (209 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/en@pirate/

Translated using Weblate (Bulgarian)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/bg/

Translated using Weblate (Portuguese)

Currently translated at 81.9% (1728 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

Translated using Weblate (Dutch)

Currently translated at 97.5% (2058 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 86.2% (1819 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Russian)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ru/

Translated using Weblate (Russian)

Currently translated at 97.5% (81 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/
2020-06-29 22:54:56 +02:00
Sabe Jones
40cadba7bf Merge branch 'release' into develop 2020-06-29 15:15:54 -05:00
Sabe Jones
57446c3041 4.147.0 2020-06-29 15:15:28 -05:00
Sabe Jones
ee2a5fe6b3 chore(sprites): compile 2020-06-29 15:15:19 -05:00
Sabe Jones
2b166af82a feat(content): July 2020 subscriber set
Also refactor repetitive subscriber item code
2020-06-29 15:15:11 -05:00
wwyl1234
2c096d5feb Changed flex box direction to column. Changed other css properties such that tag names do not collapse when view width is changed on the browser. (#12332)
Co-authored-by: Winnie Lam <winnielam@Winnies-MacBook-Air.local>
2020-06-29 18:21:57 +02:00
Matteo Pagliazzi
b2833ac4a2 fix(challenge): sync user when joining a challenge - make sure new tag is synced immediately 2020-06-29 17:05:37 +02:00
Alexandrea Beh
4f2656f8f6 Issue 12220 stealth tooltip show protected dailies (#12255)
* Issue 12220 - Show dailies protected by Stealth

A feature on the old site showed the number of
dailies protected by casting Stealth. This is
now showing again in the Stealth tooltip. The
skillNotes section was not being called. It
adds additional skill-specific info: the dailies
avoided by stealth, whether stealth no longer
needs to be cast (dailies already avoided) and
whether frost is no longer useful to cast.

Speculation: the spellDisabled method had some
commented out code regarding Stealth, which
may have broken due to a change in how dailies
are referenced. I have fixed this line, so it
seemed alright to keep the entirety of the
skillNotes function as it had been. However,
this includes more than just showing dailies
in the tooltip.

Behavior changes:
- tooltip shows dailies avoided for Stealth
- tooltip shows maxed out message for
Stealth when all dailies are covered
- tooltip shows frost already cast message
when frost has already been cast

* clean up conditions in skillNotes

* use future tense for rogue stealth dailies tooltip

* use getter for accurate task length

* consider stealth disabled based on incomplete dailies due, not all dailies

* Issue 12220 - Show dailies protected by Stealth

A feature on the old site showed the number of
dailies protected by casting Stealth. This is
now showing again in the Stealth tooltip. The
skillNotes section was not being called. It
adds additional skill-specific info: the dailies
avoided by stealth, whether stealth no longer
needs to be cast (dailies already avoided) and
whether frost is no longer useful to cast.

Speculation: the spellDisabled method had some
commented out code regarding Stealth, which
may have broken due to a change in how dailies
are referenced. I have fixed this line, so it
seemed alright to keep the entirety of the
skillNotes function as it had been. However,
this includes more than just showing dailies
in the tooltip.

Behavior changes:
- tooltip shows dailies avoided for Stealth
- tooltip shows maxed out message for
Stealth when all dailies are covered
- tooltip shows frost already cast message
when frost has already been cast

* factor out stealthBuffsToAdd for casting stealth + tooltip previewing dailies avoided

* fix merge conflict
2020-06-29 16:45:00 +02:00
Alexandrea Beh
da60f44356 Issue 12220 stealth tooltip show protected dailies (#12255)
* Issue 12220 - Show dailies protected by Stealth

A feature on the old site showed the number of
dailies protected by casting Stealth. This is
now showing again in the Stealth tooltip. The
skillNotes section was not being called. It
adds additional skill-specific info: the dailies
avoided by stealth, whether stealth no longer
needs to be cast (dailies already avoided) and
whether frost is no longer useful to cast.

Speculation: the spellDisabled method had some
commented out code regarding Stealth, which
may have broken due to a change in how dailies
are referenced. I have fixed this line, so it
seemed alright to keep the entirety of the
skillNotes function as it had been. However,
this includes more than just showing dailies
in the tooltip.

Behavior changes:
- tooltip shows dailies avoided for Stealth
- tooltip shows maxed out message for
Stealth when all dailies are covered
- tooltip shows frost already cast message
when frost has already been cast

* clean up conditions in skillNotes

* use future tense for rogue stealth dailies tooltip

* use getter for accurate task length

* consider stealth disabled based on incomplete dailies due, not all dailies

* Issue 12220 - Show dailies protected by Stealth

A feature on the old site showed the number of
dailies protected by casting Stealth. This is
now showing again in the Stealth tooltip. The
skillNotes section was not being called. It
adds additional skill-specific info: the dailies
avoided by stealth, whether stealth no longer
needs to be cast (dailies already avoided) and
whether frost is no longer useful to cast.

Speculation: the spellDisabled method had some
commented out code regarding Stealth, which
may have broken due to a change in how dailies
are referenced. I have fixed this line, so it
seemed alright to keep the entirety of the
skillNotes function as it had been. However,
this includes more than just showing dailies
in the tooltip.

Behavior changes:
- tooltip shows dailies avoided for Stealth
- tooltip shows maxed out message for
Stealth when all dailies are covered
- tooltip shows frost already cast message
when frost has already been cast

* factor out stealthBuffsToAdd for casting stealth + tooltip previewing dailies avoided

* fix merge conflict
2020-06-29 11:12:19 +02:00
dependabot-preview[bot]
911a44adec build(deps): bump @vue/cli-plugin-unit-mocha in /website/client (#12351)
Bumps [@vue/cli-plugin-unit-mocha](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-unit-mocha) from 4.4.4 to 4.4.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.6/packages/@vue/cli-plugin-unit-mocha)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-06-29 10:53:08 +02:00
dependabot-preview[bot]
e38a455922 build(deps): bump @vue/cli-plugin-eslint in /website/client (#12353)
Bumps [@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-eslint) from 4.4.4 to 4.4.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.6/packages/@vue/cli-plugin-eslint)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-06-29 10:52:23 +02:00
dependabot-preview[bot]
c6f825ac31 build(deps): bump @vue/cli-plugin-router in /website/client (#12349)
Bumps [@vue/cli-plugin-router](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-router) from 4.4.4 to 4.4.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.6/packages/@vue/cli-plugin-router)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-29 10:46:53 +02:00
dependabot-preview[bot]
72acdf5884 build(deps): bump @vue/cli-service in /website/client (#12354)
Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.4.4 to 4.4.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.6/packages/@vue/cli-service)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-29 10:46:32 +02:00
dependabot-preview[bot]
8a527ec10a build(deps): bump sass from 1.26.8 to 1.26.9 in /website/client (#12355)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.8 to 1.26.9.
- [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.8...1.26.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-29 10:46:16 +02:00
dependabot-preview[bot]
d7d433175d build(deps): bump @vue/cli-plugin-babel in /website/client (#12344)
Bumps [@vue/cli-plugin-babel](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-babel) from 4.4.4 to 4.4.6.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.6/packages/@vue/cli-plugin-babel)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-29 10:46:03 +02:00
dependabot-preview[bot]
0f75dd4dbe build(deps): bump superagent from 5.2.2 to 5.3.1 (#12352)
Bumps [superagent](https://github.com/visionmedia/superagent) from 5.2.2 to 5.3.1.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v5.2.2...v5.3.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-06-29 10:45:38 +02:00
dependabot-preview[bot]
9098bde7ac build(deps): bump mongoose from 5.9.19 to 5.9.20 (#12343)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.19 to 5.9.20.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.19...5.9.20)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-29 10:45:12 +02:00
dependabot-preview[bot]
a7a9747bf1 build(deps): bump winston from 3.3.0 to 3.3.3 (#12348)
Bumps [winston](https://github.com/winstonjs/winston) from 3.3.0 to 3.3.3.
- [Release notes](https://github.com/winstonjs/winston/releases)
- [Changelog](https://github.com/winstonjs/winston/blob/master/CHANGELOG.md)
- [Commits](https://github.com/winstonjs/winston/compare/v3.3.0...v3.3.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-29 10:44:50 +02:00
dependabot-preview[bot]
69e340ac59 build(deps): bump helmet from 3.23.1 to 3.23.3 (#12345)
Bumps [helmet](https://github.com/helmetjs/helmet) from 3.23.1 to 3.23.3.
- [Release notes](https://github.com/helmetjs/helmet/releases)
- [Changelog](https://github.com/helmetjs/helmet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/helmetjs/helmet/compare/v3.23.1...v3.23.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-29 10:44:38 +02:00
dependabot-preview[bot]
c923bd8efb build(deps): bump uuid from 8.1.0 to 8.2.0 in /website/client (#12346)
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.1.0 to 8.2.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.1.0...v8.2.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-06-29 10:44:21 +02:00
dependabot-preview[bot]
4396713488 build(deps): bump uuid from 8.1.0 to 8.2.0 (#12350)
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.1.0 to 8.2.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.1.0...v8.2.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-06-29 10:43:54 +02:00
Matteo Pagliazzi
a352a351bf Merge https://github.com/HabitRPG/habitica/pull/12338 "Added the task type to the Delete alert window"
by @Shuyinsama
Squashed commit of the following:

commit 0c05ff510e4bd0d7161c49245dd11e6abe882d96
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Sat Jun 27 19:41:58 2020 +0200

    fix lint

commit 2e1e1e4071d57fa2853a4a8f481c94bd5836037f
Merge: cbc9af4ef5 fc46d73b1d
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Sat Jun 27 19:39:58 2020 +0200

    Merge branch 'feature/Deleting-a-reward-asks-you-if-you-want-to-delete-the-task' of https://github.com/Shuyinsama/habitica into Shuyinsama-feature/Deleting-a-reward-asks-you-if-you-want-to-delete-the-task

commit fc46d73b1d
Author: Patrick van Zadel <Shuyinsama@users.noreply.github.com>
Date:   Sat Jun 27 18:54:08 2020 +0200

    Renamed keys and fixed a check in the modal

commit ec5b765f5c
Author: Patrick van Zadel <Shuyinsama@users.noreply.github.com>
Date:   Sat Jun 27 18:45:25 2020 +0200

    Renamed translation keys

commit f0837dc571
Author: Patrick van Zadel <patrickvanzadel@eleven.nl>
Date:   Tue Jun 23 23:06:59 2020 +0200

    Added the task type to the "Delete" alert window so it now asks if you want to delete the task of type
    Edited the "Delete this ..." button in the edit task modal to represent the task type
2020-06-27 19:42:24 +02:00
Matteo Pagliazzi
cbc9af4ef5 fix(top menu): remove outline when sync button is pressed 2020-06-27 17:04:43 +02:00
jacobguinther
e42518f427 Make message links to deleted profiles display 404: (fixes 11020) (#12229)
* Make links to deleted profiles display 404

* Implement some requested changes

- remove comments
- remove 'await'
- rename error -> 404error
- remove catch block -> just check for 404

* Fix bug: Logged in user profile showing 404

- Initiallty logged in user will display fine
- This bug only appeared after you view a deleted users modal

* Remove 'user.active' attribute

- add change to data():
- user: undefined -> user: {}

* Shorten showMemberModal()

- Remove unused fetch profile data
- Remove unnecessary conditional

* Change user initial value to null

- Add userLoaded to data
2020-06-27 16:53:55 +02:00
Ieahleen
083417fe48 added trasnformation items to api cast spell description (#12340) 2020-06-27 16:17:48 +02:00
Sabe Jones
ea255579cb Merge branch 'release' into develop 2020-06-26 15:18:58 -05:00
Sabe Jones
6b3ba83d4f 4.146.7 2020-06-26 15:18:38 -05:00
Sabe Jones
b641414a56 fix(ABtest): record test group at registration 2020-06-26 15:16:22 -05:00
negue
5e2bfc2c2f added tests: if collapseChecklist is allowed and all others are still blocked (#12337)
* tests: test if collapseChecklist is allowed and all others are still blocked

* fix lint
2020-06-26 19:05:41 +02:00
Matteo Pagliazzi
359ef47ce7 fix(get tasks): improve tests and add ability to fetch group tasks (#12339) 2020-06-26 16:50:49 +02:00
Matteo Pagliazzi
c7eae6f26b fix(push notifications): always strip markdown from push notification text 2020-06-26 15:27:02 +02:00
Sabe Jones
398b3c1f0d fix(ABtest): important parens 2020-06-25 15:06:58 -05:00
Sabe Jones
f1f120498c fix(ABtest): important parens 2020-06-25 15:06:06 -05:00
Melior
73844335de Merge branch 'origin/develop' into Weblate. 2020-06-25 21:33:42 +02:00
Melior
563744954e Translated using Weblate (Japanese)
Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/ja/

Translated using Weblate (Japanese)

Currently translated at 86.0% (1815 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Japanese)

Currently translated at 97.1% (682 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (Spanish)

Currently translated at 96.4% (517 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/

Translated using Weblate (Japanese)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/

Translated using Weblate (Russian)

Currently translated at 96.9% (2045 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (Dutch)

Currently translated at 97.1% (2048 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 97.1% (682 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Spanish)

Currently translated at 95.8% (514 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/es/

Translated using Weblate (Spanish)

Currently translated at 88.7% (221 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/es/

Translated using Weblate (Spanish)

Currently translated at 89.6% (1890 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

Translated using Weblate (Spanish)

Currently translated at 94.5% (507 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/

Translated using Weblate (Latin)

Currently translated at 83.9% (450 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/la/

Translated using Weblate (Latin)

Currently translated at 86.7% (72 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/la/

Translated using Weblate (Russian)

Currently translated at 97.5% (81 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/

Translated using Weblate (Japanese)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/

Translated using Weblate (Japanese)

Currently translated at 99.5% (248 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (German)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/de/

Translated using Weblate (Japanese)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

Translated using Weblate (Russian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ru/

Translated using Weblate (Japanese)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ja/

Translated using Weblate (Russian)

Currently translated at 98.3% (182 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

Translated using Weblate (Russian)

Currently translated at 96.9% (2045 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (Russian)

Currently translated at 98.2% (55 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/

Translated using Weblate (Japanese)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Russian)

Currently translated at 99.2% (697 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

Translated using Weblate (German)

Currently translated at 99.7% (700 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

Translated using Weblate (German)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/de/

Translated using Weblate (Russian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ru/

Translated using Weblate (German)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/de/

Translated using Weblate (Russian)

Currently translated at 97.2% (180 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

Translated using Weblate (German)

Currently translated at 99.4% (184 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/de/

Translated using Weblate (Russian)

Currently translated at 96.3% (2031 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (German)

Currently translated at 99.2% (2093 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Russian)

Currently translated at 85.7% (48 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/

Translated using Weblate (Dutch)

Currently translated at 83.9% (47 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/

Translated using Weblate (German)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

Translated using Weblate (French)

Currently translated at 100.0% (2109 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (German)

Currently translated at 98.7% (2082 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (German)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/de/
2020-06-25 21:33:25 +02:00
Sabe Jones
a3e5266075 4.146.6 2020-06-25 14:30:16 -05:00
Sabe Jones
2a85f2d27f chore(news): Bailey
and set up A/B test for drop curve
2020-06-25 14:29:53 -05:00
Sabe Jones
fc2fb8acc5 Merge branch 'sabrecat/more-onboarding' into release 2020-06-25 13:47:52 -05:00
Matteo Pagliazzi
a44aef3d9f MongoDB 4.2 (#12331)
* use mongodb 4.2 in github actions

* use .countDocuments in place of .count
2020-06-25 16:50:57 +02:00
Matteo Pagliazzi
6058b3d4b4 Merge branch 'develop' of github.com:HabitRPG/habitica into develop 2020-06-25 16:07:25 +02:00
Matteo Pagliazzi
97857dbe9c fix(apidoc): make sure v4 routes do not show up in docs 2020-06-25 16:07:03 +02:00
Tressley Cahill
b74d3343d1 Merge pull request #12314 from HabitRPG/hotfix/groups-checklist-toggle
Groups: always show checklist-toggle
2020-06-25 10:01:15 -04:00
negue
54a2ec1be8 enable collapseChecklist to be changed by everyone 2020-06-24 21:29:40 +02:00
Melior
7a2f05d136 Merge branch 'origin/develop' into Weblate. 2020-06-23 21:41:48 +02:00
Melior
12c644fbef Translated using Weblate (Japanese)
Currently translated at 99.5% (212 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/

Translated using Weblate (Spanish)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/es/

Translated using Weblate (Portuguese)

Currently translated at 81.6% (1721 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

Translated using Weblate (Dutch)

Currently translated at 96.3% (2031 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Spanish)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/es/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Russian)

Currently translated at 98.8% (694 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

Translated using Weblate (Spanish)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es/

Translated using Weblate (French)

Currently translated at 98.8% (2085 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (Spanish)

Currently translated at 89.6% (1890 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/es/

Translated using Weblate (Japanese)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Japanese)

Currently translated at 85.9% (1812 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/

Translated using Weblate (Dutch)

Currently translated at 96.0% (2025 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Dutch)

Currently translated at 95.5% (2015 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Spanish)

Currently translated at 96.3% (80 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es/

Translated using Weblate (Spanish)

Currently translated at 92.7% (77 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es/

Translated using Weblate (Japanese)

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/

Translated using Weblate (Japanese)

Currently translated at 85.8% (1811 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/vi/

Translated using Weblate (French)

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/

Translated using Weblate (French)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/fr/

Translated using Weblate (French)

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/

Translated using Weblate (French)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fr/

Translated using Weblate (Japanese)

Currently translated at 85.8% (1810 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (French)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/fr/

Translated using Weblate (French)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/fr/

Translated using Weblate (French)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/fr/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (701 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (Spanish)

Currently translated at 91.5% (76 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es/

Translated using Weblate (Japanese)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (Japanese)

Currently translated at 99.4% (172 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.5% (699 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/en_GB/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.2% (697 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/en_GB/

Translated using Weblate (Spanish)

Currently translated at 94.5% (507 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/

Translated using Weblate (Spanish)

Currently translated at 83.1% (69 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/en_GB/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/vi/

Translated using Weblate (Russian)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

Translated using Weblate (Russian)

Currently translated at 99.2% (139 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ru/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/

Translated using Weblate (Russian)

Currently translated at 97.2% (180 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2109 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/en_GB/

Translated using Weblate (Russian)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ru/

Translated using Weblate (Spanish)

Currently translated at 94.4% (506 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/

Translated using Weblate (Spanish)

Currently translated at 94.4% (506 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/

Translated using Weblate (Russian)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

Translated using Weblate (Japanese)

Currently translated at 100.0% (185 of 185 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Dutch)

Currently translated at 94.7% (1998 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 85.7% (1809 of 2109 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/

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 (Japanese)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/en_GB/

Translated using Weblate (Japanese)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ja/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/en_GB/

Translated using Weblate (French)

Currently translated at 100.0% (360 of 360 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/fr/
2020-06-23 21:41:36 +02:00
Sabe Jones
52914ed17e Merge branch 'release' into develop 2020-06-23 14:36:41 -05:00
Sabe Jones
1f20c91bd6 4.146.5 2020-06-23 14:30:57 -05:00
Sabe Jones
e52fec08a0 feat(event): Splashy Skins 2020-06-23 14:30:39 -05:00
Patrick van Zadel
b2bb251522 Bugfix/show the correct negative icon in challenge habit (#12313)
* Habits in the challenge view have incorrect and misaligned negative icon
Change the check for the negative icon to something more suitable so the lock icon is shown when needed

* Habits in the challenge view have incorrect and misaligned negative icon
Removed the check for task.group.id

Co-authored-by: Patrick van Zadel <patrickvanzadel@eleven.nl>
2020-06-23 11:36:49 +02:00
Sabe Jones
3b7af150cd Merge branch 'release' into develop 2020-06-22 14:20:43 -05:00
Sabe Jones
118fcfca2b 4.146.4 2020-06-22 14:19:34 -05:00
Sabe Jones
bde33fae37 fix(content): correct Summer Mage weapon price 2020-06-22 14:19:26 -05:00
Sabe Jones
996ee57c85 chore(i18n): update locale files 2020-06-22 14:18:28 -05:00
Sabe Jones
6f8f8f723c feat(onboarding): give food on 3rd task 2020-06-22 14:18:16 -05:00
Matteo Pagliazzi
b96a940d82 Upgrade client dependencies (#12329)
* upgrade amplitude-js to v6

* upgrade svg-url-loader

* upgrade uuid

* upgrade validator
2020-06-22 12:04:58 +02:00
Matteo Pagliazzi
ba16fa6854 Upgrade Server Deps (#12328)
* upgrade uuid

* upgrade gulp-imagemin

* upgrade bcrypt

* upgrade validator.js

* fix uuid import

* upgrade got

* upgrade sinon

* upgrade passport-google-oauth2

* fix unit test
2020-06-22 11:51:52 +02:00
dependabot-preview[bot]
fa7448c41d build(deps): bump @google-cloud/trace-agent from 5.0.0 to 5.1.0 (#12325)
Bumps [@google-cloud/trace-agent](https://github.com/googleapis/cloud-trace-nodejs) from 5.0.0 to 5.1.0.
- [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.0.0...v5.1.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-06-22 10:31:28 +02:00
dependabot-preview[bot]
48edf2d3ca build(deps): bump @babel/preset-env from 7.10.2 to 7.10.3 (#12324)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.10.2 to 7.10.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.3/packages/babel-preset-env)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-22 10:31:21 +02:00
dependabot-preview[bot]
65502bae07 build(deps): bump moment from 2.26.0 to 2.27.0 (#12322)
Bumps [moment](https://github.com/moment/moment) from 2.26.0 to 2.27.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.26.0...2.27.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-06-22 10:28:02 +02:00
dependabot-preview[bot]
1ecfdbadc9 build(deps): bump smartbanner.js in /website/client (#12316)
Bumps [smartbanner.js](https://github.com/ain/smartbanner.js) from 1.15.0 to 1.16.0.
- [Release notes](https://github.com/ain/smartbanner.js/releases)
- [Commits](https://github.com/ain/smartbanner.js/compare/v1.15.0...v1.16.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-06-22 10:27:38 +02:00
dependabot-preview[bot]
26911a7d8f build(deps): bump @babel/core from 7.10.2 to 7.10.3 (#12323)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.10.2 to 7.10.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.3/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-22 10:26:58 +02:00
dependabot-preview[bot]
ba96a3e947 build(deps): bump @babel/register from 7.10.1 to 7.10.3 (#12319)
Bumps [@babel/register](https://github.com/babel/babel/tree/HEAD/packages/babel-register) from 7.10.1 to 7.10.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.3/packages/babel-register)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-22 10:26:50 +02:00
dependabot-preview[bot]
96b3be0467 build(deps): bump winston from 3.2.1 to 3.3.0 (#12318)
Bumps [winston](https://github.com/winstonjs/winston) from 3.2.1 to 3.3.0.
- [Release notes](https://github.com/winstonjs/winston/releases)
- [Changelog](https://github.com/winstonjs/winston/blob/master/CHANGELOG.md)
- [Commits](https://github.com/winstonjs/winston/compare/3.2.1...v3.3.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-06-22 10:26:35 +02:00
Matteo Pagliazzi
8715ef5d7c build(deps): bump jwks-rsa from 1.8.0 to 1.8.1 (#12317)
Bumps [jwks-rsa](https://github.com/auth0/node-jwks-rsa) from 1.8.0 to 1.8.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.8.0...1.8.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-06-22 10:26:04 +02:00
dependabot-preview[bot]
2ecca3b388 build(deps): bump moment from 2.26.0 to 2.27.0 in /website/client (#12315)
Bumps [moment](https://github.com/moment/moment) from 2.26.0 to 2.27.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.26.0...2.27.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-06-22 10:25:57 +02:00
dependabot-preview[bot]
f4b13755a9 build(deps): bump mongoose from 5.9.18 to 5.9.19 (#12326)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.18 to 5.9.19.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.18...5.9.19)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-22 10:25:18 +02:00
dependabot-preview[bot]
a618df4c6a build(deps): bump helmet from 3.23.0 to 3.23.1 (#12327)
Bumps [helmet](https://github.com/helmetjs/helmet) from 3.23.0 to 3.23.1.
- [Release notes](https://github.com/helmetjs/helmet/releases)
- [Changelog](https://github.com/helmetjs/helmet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/helmetjs/helmet/compare/v3.23.0...v3.23.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-06-22 10:24:58 +02:00
dependabot-preview[bot]
2169e9285d build(deps): bump jwks-rsa from 1.8.0 to 1.8.1
Bumps [jwks-rsa](https://github.com/auth0/node-jwks-rsa) from 1.8.0 to 1.8.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.8.0...1.8.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-22 05:46:24 +00:00
negue
03dd469a45 always show checklist-toggle 2020-06-20 21:08:44 +02:00
negue
29f1817a7c TaskModal: Checklist component extracted (#12287)
* wip: checklist component extracted

* fixing icons:
Trash can - Delete
Little X - Remove
Big X - Close
Block - Block

* remove checklist code from taskModal and replace with the component + fix styles

* save checklist item on blur

* remove console.info

* fix pr comments + empty checklist item + icon
2020-06-20 20:09:28 +02:00
David C
f2a8ba4878 Removing max-height on app-header (#11906)
Fixes #11822 by allowing sprites and bg to take up as much space as they 
need.
2020-06-20 18:40:46 +02:00
Sabe Jones
fd8f21455c Merge branch 'release' into develop 2020-06-19 15:22:44 -05:00
Sabe Jones
7b35c6fb8b 4.146.3 2020-06-19 15:22:14 -05:00
Sabe Jones
cdd9d23e90 fix(potion): add event data to Sand Sculpture 2020-06-19 15:22:04 -05:00
Sabe Jones
6f877c156a Merge branch 'release' into develop 2020-06-19 14:57:35 -05:00
Sabe Jones
5005bb8714 4.146.2 2020-06-19 14:56:52 -05:00
Sabe Jones
ec6738afa8 fix(event): missing potions 2020-06-19 14:55:49 -05:00
Sabe Jones
2c53d1db35 4.146.1 2020-06-18 19:38:17 -05:00
Sabe Jones
97a6dc521b fix(event): allow 2019 gear to be bought 2020-06-18 19:38:08 -05:00
Sabe Jones
a305c70c7a fix(test): evade predictable food 2020-06-18 15:57:32 -05:00
Sabe Jones
c210bed033 feat(onboarding): more early incentives 2020-06-18 15:49:48 -05:00
Melior
7fd84c7d8a Merge branch 'origin/develop' into Weblate. 2020-06-18 20:36:50 +02:00
Sabe Jones
6a87ecac07 Merge branch 'release' into develop 2020-06-18 13:30:25 -05:00
Sabe Jones
e0bab99c95 4.146.0 2020-06-18 13:29:39 -05:00
Sabe Jones
1405cf3ca5 Squashed commit of the following:
commit 39427a75db
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Wed Jun 17 17:33:30 2020 +0200

    To-Dos -> To Do's (#12290)

    * To-Dos -> To Do's

    * To-Do -> To Do

commit d7854f3809
Author: jacobguinther <jacobgguinther@gmail.com>
Date:   Tue Jun 16 13:31:32 2020 -0600

    Remove party banner when below tablet size  (fixes 10827) (#12289)

    * Remove party banner when below tablet size
    - Use Bootstrap breakpoints to remove party banner @ 768px
    - Remove old media query that removed party button on small screens

    * Make progress bars smaller @ 992px
    - Makes room for party piece

commit 0d8df9f1a2
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Jun 16 13:42:28 2020 -0500

    More Armoire content refactoring (#12288)

    * refactor(armoire): still more defaultification

    * fix(refactor): look at array for index, not object

    * refactor(armoire): skip stat processing if item already has notes

commit 679c8f725b
Merge: 274a5f310e ed0cffce76
Author: Melior <admin@habitica.com>
Date:   Tue Jun 16 20:39:36 2020 +0200

    Merge branch 'origin/develop' into Weblate.

commit ed0cffce76
Author: Melior <admin@habitica.com>
Date:   Tue Jun 16 20:39:25 2020 +0200

    Translated using Weblate (Dutch)

    Currently translated at 94.6% (2000 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 96.4% (677 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.6% (2000 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 97.5% (81 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (213 of 213 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (2113 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (702 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (359 of 359 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/

    Translated using Weblate (Vietnamese)

    Currently translated at 97.0% (520 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Vietnamese)

    Currently translated at 94.0% (504 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/

    Translated using Weblate (Russian)

    Currently translated at 98.2% (690 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

    Translated using Weblate (Japanese)

    Currently translated at 95.4% (670 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (359 of 359 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (213 of 213 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Japanese)

    Currently translated at 95.1% (79 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

    Translated using Weblate (Vietnamese)

    Currently translated at 92.3% (495 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (213 of 213 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ro/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (57 of 57 strings)

    Translation: Habitica/Spells
    Translate-URL: https://translate.habitica.com/projects/habitica/spells/ro/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/ro/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (63 of 63 strings)

    Translation: Habitica/Defaulttasks
    Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ro/

    Translated using Weblate (Romanian)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/ro/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (143 of 143 strings)

    Translation: Habitica/Pets
    Translate-URL: https://translate.habitica.com/projects/habitica/pets/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (359 of 359 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/ru/

    Translated using Weblate (Japanese)

    Currently translated at 99.6% (534 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Russian)

    Currently translated at 99.5% (210 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

    Translated using Weblate (Vietnamese)

    Currently translated at 90.8% (487 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Japanese)

    Currently translated at 98.8% (530 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

    Translated using Weblate (Vietnamese)

    Currently translated at 83.2% (446 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (213 of 213 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/vi/

    Translated using Weblate (Dutch)

    Currently translated at 94.4% (1996 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 95.4% (670 of 702 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (359 of 359 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/

    Translated using Weblate (Japanese)

    Currently translated at 98.3% (527 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

commit 274a5f310e
Merge: d961b8aaaf bceccd55bf
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Jun 16 13:36:42 2020 -0500

    Merge branch 'release' into develop

commit d961b8aaaf
Author: Frank Maximus <frank@healingjourneyman.com>
Date:   Tue Jun 16 19:06:14 2020 +0200

    #9498: Hide Wolf-Veteran and LionCub-Ethereal (#12292)

commit 430ff64875
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 15:12:39 2020 +0200

    build(deps): bump @vue/cli-plugin-eslint in /website/client (#12301)

    Bumps [@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-eslint) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-eslint)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit ac99c6c3c5
Merge: 1be03d741a a43f410031
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Tue Jun 16 15:04:30 2020 +0200

    build(deps): bump @vue/cli-service in /website/client (#12305)

    Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-service)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit 1be03d741a
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 15:04:13 2020 +0200

    build(deps): bump @vue/cli-plugin-router in /website/client (#12304)

    Bumps [@vue/cli-plugin-router](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-router) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-router)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit a43f410031
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 13:00:43 2020 +0000

    build(deps): bump @vue/cli-service in /website/client

    Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-service)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

commit b84395b17d
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:58:02 2020 +0200

    build(deps): bump vue-router from 3.3.2 to 3.3.4 in /website/client (#12306)

    Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.3.2 to 3.3.4.
    - [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.3.2...v3.3.4)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit d5d4afe613
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:57:43 2020 +0200

    build(deps): bump @vue/cli-plugin-unit-mocha in /website/client (#12303)

    Bumps [@vue/cli-plugin-unit-mocha](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-unit-mocha) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-unit-mocha)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit def62d5716
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:57:37 2020 +0200

    build(deps): bump habitica-markdown in /website/client (#12302)

    Bumps [habitica-markdown](https://github.com/HabitRPG/habitica-markdown) from 2.0.0 to 2.0.2.
    - [Release notes](https://github.com/HabitRPG/habitica-markdown/releases)
    - [Commits](https://github.com/HabitRPG/habitica-markdown/commits/v2.0.2)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit 5846898592
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:57:25 2020 +0200

    build(deps): bump @vue/cli-plugin-babel in /website/client (#12299)

    Bumps [@vue/cli-plugin-babel](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-babel) from 4.4.1 to 4.4.4.
    - [Release notes](https://github.com/vuejs/vue-cli/releases)
    - [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
    - [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-babel)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit 524aac4d95
Author: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Date:   Tue Jun 16 14:57:11 2020 +0200

    build(deps): bump helmet from 3.22.0 to 3.23.0 (#12297)

    Bumps [helmet](https://github.com/helmetjs/helmet) from 3.22.0 to 3.23.0.
    - [Release notes](https://github.com/helmetjs/helmet/releases)
    - [Changelog](https://github.com/helmetjs/helmet/blob/master/CHANGELOG.md)
    - [Commits](https://github.com/helmetjs/helmet/compare/v3.22.0...v3.23.0)

    Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

    Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

commit 92dc332ab9
Merge: 7902db2edc bcd3e2851c
Author: Melior <admin@habitica.com>
Date:   Fri Jun 12 00:02:52 2020 +0200

    Merge branch 'origin/develop' into Weblate.

commit 7902db2edc
Merge: f3ea5f0b62 e6b65871e7
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Jun 11 16:38:48 2020 -0500

    Merge branch 'release' into develop

commit f3ea5f0b62
Author: negue <negue@users.noreply.github.com>
Date:   Thu Jun 11 21:14:33 2020 +0200

    Tasks Redesign: Colors, Title, Notes, Habit Controls, Button Style  (#12274)

    * extract color changes + habit-controls out of #12142

    * extract title / notes changes from #12142

    * extracted delete btn + style fixes of #12142

    * fix taskModal footer + advancedSettings

    * extracted the button style changes from #12142

    * remove un-used method

commit bcd3e2851c
Author: Melior <admin@habitica.com>
Date:   Thu Jun 11 20:46:57 2020 +0200

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (83 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

    Translated using Weblate (Latin)

    Currently translated at 85.5% (71 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/la/

    Translated using Weblate (Russian)

    Currently translated at 97.3% (2056 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

    Translated using Weblate (German)

    Currently translated at 99.8% (2110 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

    Translated using Weblate (Russian)

    Currently translated at 99.4% (533 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

    Translated using Weblate (Japanese)

    Currently translated at 97.9% (525 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (German)

    Currently translated at 99.6% (534 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (4 of 4 strings)

    Translation: Habitica/Noscript
    Translate-URL: https://translate.habitica.com/projects/habitica/noscript/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (12 of 12 strings)

    Translation: Habitica/Merch
    Translate-URL: https://translate.habitica.com/projects/habitica/merch/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (230 of 230 strings)

    Translation: Habitica/Character
    Translate-URL: https://translate.habitica.com/projects/habitica/character/ca/

    Translated using Weblate (Vietnamese)

    Currently translated at 80.9% (434 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (28 of 28 strings)

    Translation: Habitica/Rebirth
    Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (31 of 31 strings)

    Translation: Habitica/Maintenance
    Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (27 of 27 strings)

    Translation: Habitica/Loginincentives
    Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (6 of 6 strings)

    Translation: Habitica/Inventory
    Translate-URL: https://translate.habitica.com/projects/habitica/inventory/ca/

    Translated using Weblate (Catalan)

    Currently translated at 82.3% (1740 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (63 of 63 strings)

    Translation: Habitica/Defaulttasks
    Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ca/

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (15 of 15 strings)

    Translation: Habitica/Death
    Translate-URL: https://translate.habitica.com/projects/habitica/death/ca/

    Translated using Weblate (Catalan)

    Currently translated at 99.1% (123 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ca/

    Translated using Weblate (Portuguese)

    Currently translated at 83.0% (1754 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

    Translated using Weblate (Portuguese)

    Currently translated at 83.0% (1754 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

    Translated using Weblate (French)

    Currently translated at 100.0% (2113 of 2113 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

    Translated using Weblate (Russian)

    Currently translated at 98.8% (530 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

    Translated using Weblate (Japanese)

    Currently translated at 97.5% (523 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (French)

    Currently translated at 100.0% (536 of 536 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/

    Translated using Weblate (Spanish)

    Currently translated at 94.6% (53 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/es/

    Translated using Weblate (Spanish)

    Currently translated at 99.1% (123 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/es/

    Translated using Weblate (Spanish)

    Currently translated at 97.1% (205 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/es/

commit 5957930709
Author: Frank Maximus <frank@healingjourneyman.com>
Date:   Wed Jun 10 15:01:07 2020 +0200

    Display descriptive error when mongod isn't running (#12196)

    Add test:prepare:mongo task to check is mongod is running.

    Fixes: #12101

commit 1df4e687f1
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Wed Jun 10 14:57:57 2020 +0200

    fix(mentions): do not fill empty mentions with following username, fixes #12272

commit 3063a38d60
Merge: 4b489fe4ca 51d20ef7e8
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Jun 9 15:28:16 2020 -0500

    Merge branch 'release' into develop

commit 4b489fe4ca
Merge: afd50ddc2d 074004ec75
Author: Melior <admin@habitica.com>
Date:   Tue Jun 9 21:21:14 2020 +0200

    Merge branch 'origin/develop' into Weblate.

commit 074004ec75
Author: Melior <admin@habitica.com>
Date:   Tue Jun 9 21:21:04 2020 +0200

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (249 of 249 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% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (493 of 493 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/pt_BR/

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (493 of 493 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.6% (1994 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 98.2% (520 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Catalan)

    Currently translated at 92.0% (487 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ca/

    Translated using Weblate (Russian)

    Currently translated at 93.9% (234 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

    Translated using Weblate (Russian)

    Currently translated at 97.4% (2053 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (522 of 522 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

    Translated using Weblate (French)

    Currently translated at 100.0% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (493 of 493 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/fr/

    Translated using Weblate (Russian)

    Currently translated at 99.2% (518 of 522 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

    Translated using Weblate (Vietnamese)

    Currently translated at 80.7% (427 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

    Translated using Weblate (German)

    Currently translated at 100.0% (140 of 140 strings)

    Translation: Habitica/Quests
    Translate-URL: https://translate.habitica.com/projects/habitica/quests/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (173 of 173 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (493 of 493 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/

commit afd50ddc2d
Merge: 61ca500013 e31ce11052
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Jun 9 14:17:53 2020 -0500

    Merge branch 'release' into develop

commit 61ca500013
Merge: 9ab79ef225 630c848ff5
Author: Melior <admin@habitica.com>
Date:   Mon Jun 8 21:50:11 2020 +0200

    Merge branch 'origin/develop' into Weblate.

commit 630c848ff5
Author: Melior <admin@habitica.com>
Date:   Mon Jun 8 16:37:50 2020 +0200

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/vi/

    Translated using Weblate (Vietnamese)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/vi/

    Translated using Weblate (Russian)

    Currently translated at 93.5% (233 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

    Translated using Weblate (Russian)

    Currently translated at 97.2% (2049 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

    Translated using Weblate (Dutch)

    Currently translated at 94.6% (1994 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 97.9% (518 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (696 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

    Translated using Weblate (Japanese)

    Currently translated at 97.5% (516 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (German)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

    Translated using Weblate (Japanese)

    Currently translated at 97.1% (514 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.5% (1992 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (German)

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

    Translated using Weblate (Japanese)

    Currently translated at 96.7% (512 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (German)

    Currently translated at 99.9% (2105 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

    Translated using Weblate (Japanese)

    Currently translated at 96.4% (510 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.4% (1990 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Dutch)

    Currently translated at 94.4% (1990 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (492 of 492 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (57 of 57 strings)

    Translation: Habitica/Spells
    Translate-URL: https://translate.habitica.com/projects/habitica/spells/ru/

    Translated using Weblate (Russian)

    Currently translated at 97.6% (168 of 172 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/

    Translated using Weblate (Russian)

    Currently translated at 98.3% (178 of 181 strings)

    Translation: Habitica/Limited
    Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (492 of 492 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

    Translated using Weblate (Russian)

    Currently translated at 96.6% (2037 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

    Translated using Weblate (Russian)

    Currently translated at 99.6% (297 of 298 strings)

    Translation: Habitica/Generic
    Translate-URL: https://translate.habitica.com/projects/habitica/generic/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (328 of 328 strings)

    Translation: Habitica/Front
    Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/

    Translated using Weblate (Russian)

    Currently translated at 98.2% (55 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (15 of 15 strings)

    Translation: Habitica/Death
    Translate-URL: https://translate.habitica.com/projects/habitica/death/ru/

    Translated using Weblate (Russian)

    Currently translated at 99.1% (690 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

    Translated using Weblate (German)

    Currently translated at 100.0% (696 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (126 of 126 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (70 of 70 strings)

    Translation: Habitica/Contrib
    Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (230 of 230 strings)

    Translation: Habitica/Character
    Translate-URL: https://translate.habitica.com/projects/habitica/character/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (134 of 134 strings)

    Translation: Habitica/Challenge
    Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ru/

    Translated using Weblate (Russian)

    Currently translated at 99.0% (209 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

    Translated using Weblate (Polish)

    Currently translated at 83.6% (1763 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/pl/

    Translated using Weblate (Dutch)

    Currently translated at 94.3% (1989 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (696 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

    Translated using Weblate (Vietnamese)

    Currently translated at 96.4% (54 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/vi/

    Translated using Weblate (Vietnamese)

    Currently translated at 90.3% (75 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Tasks
    Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

    Translated using Weblate (Russian)

    Currently translated at 99.2% (691 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

    Translated using Weblate (Russian)

    Currently translated at 100.0% (134 of 134 strings)

    Translation: Habitica/Challenge
    Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ru/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (492 of 492 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.3% (1987 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/nl/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/en_GB/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (181 of 181 strings)

    Translation: Habitica/Limited
    Translate-URL: https://translate.habitica.com/projects/habitica/limited/nl/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

    Translated using Weblate (Dutch)

    Currently translated at 94.2% (1985 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Spanish)

    Currently translated at 91.4% (1927 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/en_GB/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (696 of 696 strings)

    Translation: Habitica/Questscontent
    Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hant/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en_GB/

    Translated using Weblate (Chinese (Traditional))

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hant/

    Translated using Weblate (English (United Kingdom))

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/en_GB/

    Translated using Weblate (Vietnamese)

    Currently translated at 85.5% (71 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (83 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (172 of 172 strings)

    Translation: Habitica/Npc
    Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (328 of 328 strings)

    Translation: Habitica/Front
    Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hans/

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 99.3% (2094 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

    Translated using Weblate (French)

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (2107 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/fr/

    Translated using Weblate (French)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/fr/

    Translated using Weblate (Spanish)

    Currently translated at 99.7% (357 of 358 strings)

    Translation: Habitica/Content
    Translate-URL: https://translate.habitica.com/projects/habitica/content/es/

    Translated using Weblate (French)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (249 of 249 strings)

    Translation: Habitica/Subscriber
    Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (28 of 28 strings)

    Translation: Habitica/Rebirth
    Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/ja/

    Translated using Weblate (Dutch)

    Currently translated at 94.1% (1983 of 2107 strings)

    Translation: Habitica/Gear
    Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nl/

    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/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (78 of 78 strings)

    Translation: Habitica/Contrib
    Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ja/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (83 of 83 strings)

    Translation: Habitica/Achievements
    Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/

    Translated using Weblate (Dutch)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/nl/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (492 of 492 strings)

    Translation: Habitica/Groups
    Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

    Translated using Weblate (Japanese)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/

    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/

    Translated using Weblate (Japanese)

    Currently translated at 96.0% (508 of 529 strings)

    Translation: Habitica/Backgrounds
    Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

    Translated using Weblate (German)

    Currently translated at 100.0% (56 of 56 strings)

    Translation: Habitica/Faq
    Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (124 of 124 strings)

    Translation: Habitica/Communityguidelines
    Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/de/

    Translated using Weblate (German)

    Currently translated at 100.0% (211 of 211 strings)

    Translation: Habitica/Settings
    Translate-URL: https://translate.habitica.com/projects/habitica/settings/de/
2020-06-18 13:29:30 -05:00
Sabe Jones
048b60f79d chore(news): Bailey
and some seasonal string tweaks
2020-06-18 13:25:56 -05:00
Sabe Jones
5cd9528b77 Squashed commit of the following:
commit 24e299b4663d77daf70c5cca584d27db2df94fe6
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Jun 18 12:29:07 2020 -0500

    fix(gear): Mage Oar is twohanded and grants PER

commit 4f92312b7f409419c37f9f97bc162153ad3103b5
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Jun 18 12:27:27 2020 -0500

    fix(sprites): corrected Mage set

commit 49d86ca8879b66e3531be81d35e6e98916185486
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Wed Jun 17 16:16:56 2020 -0500

    refactor(strings): finish cleaning up redundant seasonal Rogue strings

commit ee513cc1449c52ad72850745ea18a353be5490d2
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Wed Jun 17 16:09:12 2020 -0500

    chore(sprites): compile

commit 0b15f834a000a033925571ff5a15871b0965bc00
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Wed Jun 17 16:08:59 2020 -0500

    feat(content): Splash 2020
2020-06-18 13:16:07 -05:00
Melior
4580e92f5b Translated using Weblate (Vietnamese)
Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/vi/

Translated using Weblate (Vietnamese)

Currently translated at 91.6% (329 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/vi/

Translated using Weblate (Dutch)

Currently translated at 95.7% (2024 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 96.7% (679 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Russian)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

Translated using Weblate (French)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/fr/

Translated using Weblate (French)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/fr/

Translated using Weblate (German)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/de/

Translated using Weblate (Russian)

Currently translated at 95.1% (237 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

Translated using Weblate (Russian)

Currently translated at 99.7% (492 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

Translated using Weblate (Russian)

Currently translated at 98.8% (694 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

Translated using Weblate (French)

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (French)

Currently translated at 100.0% (359 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/fr/

Translated using Weblate (Russian)

Currently translated at 97.5% (81 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/

Translated using Weblate (Russian)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

Translated using Weblate (French)

Currently translated at 99.4% (698 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (French)

Currently translated at 99.4% (698 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (Vietnamese)

Currently translated at 98.6% (227 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/vi/

Translated using Weblate (Japanese)

Currently translated at 87.2% (1844 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Japanese)

Currently translated at 96.5% (678 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Dutch)

Currently translated at 95.3% (2014 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (2113 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2113 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2113 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (359 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (359 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (359 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/en_GB/

Translated using Weblate (Russian)

Currently translated at 97.5% (2061 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (Russian)

Currently translated at 98.4% (691 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

Translated using Weblate (German)

Currently translated at 100.0% (359 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/de/
2020-06-18 18:07:59 +02:00
Matteo Pagliazzi
39427a75db To-Dos -> To Do's (#12290)
* To-Dos -> To Do's

* To-Do -> To Do
2020-06-17 17:33:30 +02:00
jacobguinther
d7854f3809 Remove party banner when below tablet size (fixes 10827) (#12289)
* Remove party banner when below tablet size
- Use Bootstrap breakpoints to remove party banner @ 768px
- Remove old media query that removed party button on small screens

* Make progress bars smaller @ 992px
- Makes room for party piece
2020-06-16 21:31:32 +02:00
Sabe Jones
0d8df9f1a2 More Armoire content refactoring (#12288)
* refactor(armoire): still more defaultification

* fix(refactor): look at array for index, not object

* refactor(armoire): skip stat processing if item already has notes
2020-06-16 13:42:28 -05:00
Melior
679c8f725b Merge branch 'origin/develop' into Weblate. 2020-06-16 20:39:36 +02:00
Melior
ed0cffce76 Translated using Weblate (Dutch)
Currently translated at 94.6% (2000 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 96.4% (677 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Dutch)

Currently translated at 94.6% (2000 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 97.5% (81 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2113 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (702 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (359 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/

Translated using Weblate (Vietnamese)

Currently translated at 97.0% (520 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Vietnamese)

Currently translated at 94.0% (504 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Japanese)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/

Translated using Weblate (Russian)

Currently translated at 98.2% (690 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

Translated using Weblate (Japanese)

Currently translated at 95.4% (670 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (359 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Japanese)

Currently translated at 95.1% (79 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Vietnamese)

Currently translated at 92.3% (495 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Romanian)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ro/

Translated using Weblate (Romanian)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/ro/

Translated using Weblate (Romanian)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ro/

Translated using Weblate (Romanian)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ro/

Translated using Weblate (Romanian)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ro/

Translated using Weblate (Russian)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (359 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ru/

Translated using Weblate (Japanese)

Currently translated at 99.6% (534 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Russian)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

Translated using Weblate (Vietnamese)

Currently translated at 90.8% (487 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Japanese)

Currently translated at 98.8% (530 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

Translated using Weblate (Vietnamese)

Currently translated at 83.2% (446 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (213 of 213 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/vi/

Translated using Weblate (Dutch)

Currently translated at 94.4% (1996 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 95.4% (670 of 702 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (359 of 359 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/

Translated using Weblate (Japanese)

Currently translated at 98.3% (527 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
2020-06-16 20:39:25 +02:00
Sabe Jones
274a5f310e Merge branch 'release' into develop 2020-06-16 13:36:42 -05:00
Sabe Jones
bceccd55bf 4.145.1 2020-06-16 13:35:51 -05:00
Sabe Jones
0116c56abb chore(news): Bailey 2020-06-16 13:35:32 -05:00
Frank Maximus
d961b8aaaf #9498: Hide Wolf-Veteran and LionCub-Ethereal (#12292) 2020-06-16 19:06:14 +02:00
dependabot-preview[bot]
430ff64875 build(deps): bump @vue/cli-plugin-eslint in /website/client (#12301)
Bumps [@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-eslint) from 4.4.1 to 4.4.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-eslint)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-16 15:12:39 +02:00
Matteo Pagliazzi
ac99c6c3c5 build(deps): bump @vue/cli-service in /website/client (#12305)
Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.4.1 to 4.4.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-service)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-16 15:04:30 +02:00
dependabot-preview[bot]
1be03d741a build(deps): bump @vue/cli-plugin-router in /website/client (#12304)
Bumps [@vue/cli-plugin-router](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-router) from 4.4.1 to 4.4.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-router)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-16 15:04:13 +02:00
dependabot-preview[bot]
a43f410031 build(deps): bump @vue/cli-service in /website/client
Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 4.4.1 to 4.4.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-service)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-16 13:00:43 +00:00
dependabot-preview[bot]
b84395b17d build(deps): bump vue-router from 3.3.2 to 3.3.4 in /website/client (#12306)
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.3.2 to 3.3.4.
- [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.3.2...v3.3.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-16 14:58:02 +02:00
dependabot-preview[bot]
d5d4afe613 build(deps): bump @vue/cli-plugin-unit-mocha in /website/client (#12303)
Bumps [@vue/cli-plugin-unit-mocha](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-unit-mocha) from 4.4.1 to 4.4.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-unit-mocha)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-16 14:57:43 +02:00
dependabot-preview[bot]
def62d5716 build(deps): bump habitica-markdown in /website/client (#12302)
Bumps [habitica-markdown](https://github.com/HabitRPG/habitica-markdown) from 2.0.0 to 2.0.2.
- [Release notes](https://github.com/HabitRPG/habitica-markdown/releases)
- [Commits](https://github.com/HabitRPG/habitica-markdown/commits/v2.0.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-06-16 14:57:37 +02:00
dependabot-preview[bot]
5846898592 build(deps): bump @vue/cli-plugin-babel in /website/client (#12299)
Bumps [@vue/cli-plugin-babel](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-babel) from 4.4.1 to 4.4.4.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v4.4.4/packages/@vue/cli-plugin-babel)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-16 14:57:25 +02:00
dependabot-preview[bot]
524aac4d95 build(deps): bump helmet from 3.22.0 to 3.23.0 (#12297)
Bumps [helmet](https://github.com/helmetjs/helmet) from 3.22.0 to 3.23.0.
- [Release notes](https://github.com/helmetjs/helmet/releases)
- [Changelog](https://github.com/helmetjs/helmet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/helmetjs/helmet/compare/v3.22.0...v3.23.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-06-16 14:57:11 +02:00
Melior
92dc332ab9 Merge branch 'origin/develop' into Weblate. 2020-06-12 00:02:52 +02:00
Sabe Jones
7902db2edc Merge branch 'release' into develop 2020-06-11 16:38:48 -05:00
Sabe Jones
e6b65871e7 4.145.0 2020-06-11 16:38:15 -05:00
Sabe Jones
873ac53e27 Squashed commit of the following:
commit f461c07ca7997362512a366eebc7d3a8fba854ee
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Jun 11 16:37:14 2020 -0500

    fix(sprites): wolf alignment

commit 6ceb4ba6d1ea62892e9b335307043d78971328d0
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Jun 11 14:53:07 2020 -0500

    chore(sprites): compile

commit 8b517309f531c7f151c5c18a5ca9847ab7aa5dbb
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Jun 11 14:52:49 2020 -0500

    feat(content): Fluorite Magic Hatching Potion and quest
2020-06-11 16:38:05 -05:00
negue
f3ea5f0b62 Tasks Redesign: Colors, Title, Notes, Habit Controls, Button Style (#12274)
* extract color changes + habit-controls out of #12142

* extract title / notes changes from #12142

* extracted delete btn + style fixes of #12142

* fix taskModal footer + advancedSettings

* extracted the button style changes from #12142

* remove un-used method
2020-06-11 21:14:33 +02:00
Melior
bcd3e2851c Translated using Weblate (Vietnamese)
Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

Translated using Weblate (Latin)

Currently translated at 85.5% (71 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/la/

Translated using Weblate (Russian)

Currently translated at 97.3% (2056 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (German)

Currently translated at 99.8% (2110 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Russian)

Currently translated at 99.4% (533 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

Translated using Weblate (Japanese)

Currently translated at 97.9% (525 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (German)

Currently translated at 99.6% (534 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/

Translated using Weblate (Catalan)

Currently translated at 100.0% (4 of 4 strings)

Translation: Habitica/Noscript
Translate-URL: https://translate.habitica.com/projects/habitica/noscript/ca/

Translated using Weblate (Catalan)

Currently translated at 100.0% (12 of 12 strings)

Translation: Habitica/Merch
Translate-URL: https://translate.habitica.com/projects/habitica/merch/ca/

Translated using Weblate (Catalan)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ca/

Translated using Weblate (Vietnamese)

Currently translated at 80.9% (434 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Catalan)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/ca/

Translated using Weblate (Catalan)

Currently translated at 100.0% (31 of 31 strings)

Translation: Habitica/Maintenance
Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/ca/

Translated using Weblate (Catalan)

Currently translated at 100.0% (27 of 27 strings)

Translation: Habitica/Loginincentives
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/ca/

Translated using Weblate (Catalan)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/ca/

Translated using Weblate (Catalan)

Currently translated at 82.3% (1740 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ca/

Translated using Weblate (Catalan)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ca/

Translated using Weblate (Catalan)

Currently translated at 100.0% (15 of 15 strings)

Translation: Habitica/Death
Translate-URL: https://translate.habitica.com/projects/habitica/death/ca/

Translated using Weblate (Catalan)

Currently translated at 99.1% (123 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ca/

Translated using Weblate (Portuguese)

Currently translated at 83.0% (1754 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

Translated using Weblate (Portuguese)

Currently translated at 83.0% (1754 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

Translated using Weblate (French)

Currently translated at 100.0% (2113 of 2113 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (Russian)

Currently translated at 98.8% (530 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

Translated using Weblate (Japanese)

Currently translated at 97.5% (523 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (French)

Currently translated at 100.0% (536 of 536 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/

Translated using Weblate (Spanish)

Currently translated at 94.6% (53 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/es/

Translated using Weblate (Spanish)

Currently translated at 99.1% (123 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/es/

Translated using Weblate (Spanish)

Currently translated at 97.1% (205 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/es/
2020-06-11 20:46:57 +02:00
Frank Maximus
5957930709 Display descriptive error when mongod isn't running (#12196)
Add test:prepare:mongo task to check is mongod is running.

Fixes: #12101
2020-06-10 15:01:07 +02:00
Matteo Pagliazzi
1df4e687f1 fix(mentions): do not fill empty mentions with following username, fixes #12272 2020-06-10 14:57:57 +02:00
Sabe Jones
3063a38d60 Merge branch 'release' into develop 2020-06-09 15:28:16 -05:00
Sabe Jones
51d20ef7e8 4.144.1 2020-06-09 15:27:43 -05:00
Matteo Pagliazzi
692d02984b unlock: fix unlocking hair items 2020-06-09 22:13:22 +02:00
Melior
4b489fe4ca Merge branch 'origin/develop' into Weblate. 2020-06-09 21:21:14 +02:00
Melior
074004ec75 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (249 of 249 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% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2107 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/

Translated using Weblate (Japanese)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Dutch)

Currently translated at 94.6% (1994 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 98.2% (520 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Catalan)

Currently translated at 92.0% (487 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ca/

Translated using Weblate (Russian)

Currently translated at 93.9% (234 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

Translated using Weblate (Russian)

Currently translated at 97.4% (2053 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (522 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

Translated using Weblate (French)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/fr/

Translated using Weblate (French)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/

Translated using Weblate (French)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fr/

Translated using Weblate (Russian)

Currently translated at 99.2% (518 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

Translated using Weblate (Vietnamese)

Currently translated at 80.7% (427 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (German)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/de/

Translated using Weblate (German)

Currently translated at 100.0% (173 of 173 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/

Translated using Weblate (German)

Currently translated at 100.0% (493 of 493 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
2020-06-09 21:21:04 +02:00
Sabe Jones
afd50ddc2d Merge branch 'release' into develop 2020-06-09 14:17:53 -05:00
Sabe Jones
e31ce11052 4.144.0 2020-06-09 14:17:30 -05:00
Sabe Jones
c4688b77fd Merge branch 'sabrecat/armoire-bgs-202006' into release 2020-06-09 14:17:15 -05:00
Melior
61ca500013 Merge branch 'origin/develop' into Weblate. 2020-06-08 21:50:11 +02:00
Sabe Jones
9ab79ef225 4.143.3 2020-06-08 14:47:16 -05:00
Sabe Jones
7e4c8938e5 Merge branch 'unlock-fixes' into release 2020-06-08 14:45:34 -05:00
Sabe Jones
604b866113 Merge branch 'develop' into release 2020-06-08 14:44:28 -05:00
Melior
630c848ff5 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/vi/

Translated using Weblate (Russian)

Currently translated at 93.5% (233 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

Translated using Weblate (Russian)

Currently translated at 97.2% (2049 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (Dutch)

Currently translated at 94.6% (1994 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 97.9% (518 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Japanese)

Currently translated at 97.5% (516 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (German)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

Translated using Weblate (Japanese)

Currently translated at 97.1% (514 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Dutch)

Currently translated at 94.5% (1992 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (German)

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/

Translated using Weblate (German)

Currently translated at 100.0% (2107 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Japanese)

Currently translated at 96.7% (512 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (German)

Currently translated at 99.9% (2105 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Japanese)

Currently translated at 96.4% (510 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Dutch)

Currently translated at 94.4% (1990 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Dutch)

Currently translated at 94.4% (1990 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Russian)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/ru/

Translated using Weblate (Russian)

Currently translated at 97.6% (168 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/

Translated using Weblate (Russian)

Currently translated at 98.3% (178 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

Translated using Weblate (Russian)

Currently translated at 96.6% (2037 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (Russian)

Currently translated at 99.6% (297 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/

Translated using Weblate (Russian)

Currently translated at 98.2% (55 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (15 of 15 strings)

Translation: Habitica/Death
Translate-URL: https://translate.habitica.com/projects/habitica/death/ru/

Translated using Weblate (Russian)

Currently translated at 99.1% (690 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

Translated using Weblate (German)

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

Translated using Weblate (Russian)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (70 of 70 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ru/

Translated using Weblate (Russian)

Currently translated at 99.0% (209 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (2107 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

Translated using Weblate (Polish)

Currently translated at 83.6% (1763 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pl/

Translated using Weblate (Dutch)

Currently translated at 94.3% (1989 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Vietnamese)

Currently translated at 96.4% (54 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/vi/

Translated using Weblate (Vietnamese)

Currently translated at 90.3% (75 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

Translated using Weblate (Russian)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

Translated using Weblate (Russian)

Currently translated at 99.2% (691 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ru/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Dutch)

Currently translated at 94.3% (1987 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/

Translated using Weblate (Dutch)

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/nl/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/en_GB/

Translated using Weblate (Dutch)

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/nl/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (2107 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

Translated using Weblate (Dutch)

Currently translated at 94.2% (1985 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Spanish)

Currently translated at 91.4% (1927 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2107 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/

Translated using Weblate (Dutch)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/en_GB/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hant/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hant/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/en_GB/

Translated using Weblate (Vietnamese)

Currently translated at 85.5% (71 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

Translated using Weblate (Japanese)

Currently translated at 100.0% (172 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2107 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.3% (2094 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (French)

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2107 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/fr/

Translated using Weblate (French)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/fr/

Translated using Weblate (Spanish)

Currently translated at 99.7% (357 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/es/

Translated using Weblate (French)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/

Translated using Weblate (Japanese)

Currently translated at 100.0% (249 of 249 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/ja/

Translated using Weblate (Dutch)

Currently translated at 94.1% (1983 of 2107 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nl/

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/

Translated using Weblate (Japanese)

Currently translated at 100.0% (78 of 78 strings)

Translation: Habitica/Contrib
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ja/

Translated using Weblate (Dutch)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/

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/

Translated using Weblate (Japanese)

Currently translated at 96.0% (508 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (German)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

Translated using Weblate (German)

Currently translated at 100.0% (124 of 124 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/de/

Translated using Weblate (German)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/de/
2020-06-08 16:37:50 +02:00
dependabot-preview[bot]
c0afae1e84 build(deps): bump mongoose from 5.9.16 to 5.9.18 (#12284)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.16 to 5.9.18.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.16...5.9.18)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-08 11:42:29 +02:00
dependabot-preview[bot]
61dc94ada0 build(deps): bump @google-cloud/trace-agent from 4.2.5 to 5.0.0 (#12281)
Bumps [@google-cloud/trace-agent](https://github.com/googleapis/cloud-trace-nodejs) from 4.2.5 to 5.0.0.
- [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/v4.2.5...v5.0.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-06-08 11:41:48 +02:00
dependabot-preview[bot]
f71ee7be18 build(deps): bump sass from 1.26.7 to 1.26.8 in /website/client (#12279)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.7 to 1.26.8.
- [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.7...1.26.8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-08 11:41:23 +02:00
PitiTheGrey
8935885637 Renaming a party shows you the placeholder text for renaming a guild #12273 (#12278)
* NewPartyPlaceholder "Enter your party's name"

* Added new placeholder and if statement to display either "party's name" or "guild's name" (issue 12273)
2020-06-07 12:59:12 +02:00
Alex Jeffrey
1ebda8281b Enable resizing of message box (#11950) (#12251)
* Enable resizing of message box (#11950)

* Added maximum height to textarea (#11950)

Co-authored-by: Alex Jeffrey <alex@alexjeffrey.mee>
2020-06-07 12:53:36 +02:00
citrusella
eae8ed946f Blockquote styling (fixes #9476) (#12227)
* Added blockquote styling based on Zeplin example

* Commit new changes to style blockquotes

* Fix bottom of post margins after markdown class addition
2020-06-07 12:52:01 +02:00
dependabot-preview[bot]
d7fe140012 build(deps): [security] bump websocket-extensions in /website/client (#12277)
Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4. **This update includes a security fix.**
- [Release notes](https://github.com/faye/websocket-extensions-node/releases)
- [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-07 12:51:49 +02:00
Alys
c317d1d040 moved two words from slurs to banned - TRIGGER / CONTENT WARNING: slurs, swearwords, assault, etc
Refer to the new comment in bannedWords.js for the reason.
2020-06-06 16:26:58 +10:00
Matteo Pagliazzi
d63aafc7f1 fix lint 2020-06-03 18:03:25 +02:00
Matteo Pagliazzi
08b2be684b improve error message 2020-06-03 18:00:58 +02:00
Matteo Pagliazzi
4c653aa511 unlock: minor fixes and increase tests coverage 2020-06-03 17:56:06 +02:00
Matteo Pagliazzi
0896837528 working code and original tests pass 2020-06-02 23:58:48 +02:00
Sabe Jones
8a1c1af461 Merge branch 'release' into develop 2020-06-01 16:41:00 -05:00
Sabe Jones
db7d1d0e14 4.143.2 2020-06-01 16:40:41 -05:00
Sabe Jones
6253359d31 chore(news): Bailey 2020-06-01 16:40:33 -05:00
Matteo Pagliazzi
ce4bbe5552 fix(ui): make sure three columns of rewards are displayed + fix rewards top margin when no custom reward exists (#12257) 2020-06-01 17:35:52 +02:00
Frank Maximus
3a4abac8b0 Store original quantities, to avoid reordering in Inventory Items screen (#12205)
* Store original quantities, to avoid reordering

Create a quantity snapshot when loading the screen.
Sort based on the snapshot after updates.

Fixes: 12040

* Avoid initial branching

Co-authored-by: Bart Enkelaar <benkelaar@gmail.com>

* Add comment

Co-authored-by: Bart Enkelaar <benkelaar@gmail.com>
2020-06-01 17:25:55 +02:00
Carl Vuorinen
44eb245184 New notification type for boss damage (#12249)
* Add new notification type for boss damage with sword icon

* Use vars for color
2020-06-01 15:42:54 +02:00
dependabot-preview[bot]
050fd15c97 build(deps): bump vue-router from 3.2.0 to 3.3.2 in /website/client (#12268)
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.2.0 to 3.3.2.
- [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.2.0...v3.3.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-06-01 10:37:40 +02:00
dependabot-preview[bot]
e1f1a264b4 build(deps): bump @babel/preset-env from 7.9.6 to 7.10.2 (#12260)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.9.6 to 7.10.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.2/packages/babel-preset-env)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-01 10:35:22 +02:00
Matteo Pagliazzi
3bfcc4a605 chore(deps): upgrade vue cli plugins 2020-06-01 10:34:36 +02:00
dependabot-preview[bot]
4beac98383 build(deps): bump @babel/register from 7.9.0 to 7.10.1 (#12263)
Bumps [@babel/register](https://github.com/babel/babel/tree/HEAD/packages/babel-register) from 7.9.0 to 7.10.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.1/packages/babel-register)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-01 10:29:50 +02:00
dependabot-preview[bot]
4da794271d build(deps): bump @babel/core from 7.9.6 to 7.10.2 (#12265)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.9.6 to 7.10.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.2/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-01 10:29:42 +02:00
dependabot-preview[bot]
b18eb0d3f8 build(deps): bump mongoose from 5.9.15 to 5.9.16 (#12269)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.15 to 5.9.16.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.15...5.9.16)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-01 10:27:32 +02:00
dependabot-preview[bot]
79f6f47b16 build(deps): bump sass from 1.26.5 to 1.26.7 in /website/client (#12258)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.5 to 1.26.7.
- [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.5...1.26.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-01 10:26:15 +02:00
Frank Maximus
6ff8254137 Only show attainable and owned special pets/mounts (#12206)
* Only show attainable and owned special pets/mounts

Fixes #9498

* #9498: Handle comments

Don't change API,
put canFind in petInfo and mountInfo

* #9498: Move canFind to itemInfo, to allow sync

* #9498: Create a show method, to allow update without reload.
2020-05-31 22:08:18 +02:00
Bart Enkelaar
1c00d7de5b Fix empty link bug and proper error logging in highlightMentions.js (#12228)
* fix(chat) - Don't insert user link in url-less link and properly log source-mapping failures

* fix(chat) - Add link to markdown spec and list of known issues

* fix(chat) - Log regular expression as String
2020-05-31 18:09:43 +02:00
Alys
61d970db86 remove codetriage.com information (#12250)
It's a nice service but currently we can't control which issues
appear there, so it's advertising ones that are on hold, in
progress, etc.
2020-05-31 17:49:31 +02:00
Matteo Pagliazzi
b911ecdcf0 Merge branch 'develop' into unlock-fixes 2020-05-31 17:47:37 +02:00
Sabe Jones
74d0b25c54 refactor(backgrounds): programmatic text and notes tokens 2020-05-29 17:15:32 -05:00
Sabe Jones
830c4fb926 chore(sprites): compile 2020-05-29 14:26:16 -05:00
Sabe Jones
8aad136622 feat(content): Armoire and Background items for Jun 2020
also big refactor of Armoire content
2020-05-29 14:26:02 -05:00
Sabe Jones
8d80792093 Merge branch 'release' into develop 2020-05-29 10:34:54 -05:00
Sabe Jones
79f83d87d0 4.143.1 2020-05-29 10:33:55 -05:00
Sabe Jones
c9bf157c23 fix(achievements): show-all layout 2020-05-29 10:33:30 -05:00
Melior
3be42e9545 Merge branch 'origin/develop' into Weblate. 2020-05-28 23:54:45 +02:00
Melior
8a7b8f92d4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/pt_BR/

Translated using Weblate (Spanish (Latin America))

Currently translated at 92.7% (77 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/

Translated using Weblate (Dutch)

Currently translated at 94.2% (1975 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nl/

Translated using Weblate (Dutch)

Currently translated at 97.5% (81 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/

Translated using Weblate (Japanese)

Currently translated at 95.4% (664 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Dutch)

Currently translated at 94.1% (1973 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Dutch)

Currently translated at 94.0% (1971 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 95.4% (664 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Italian)

Currently translated at 98.6% (227 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/it/

Translated using Weblate (Italian)

Currently translated at 89.9% (476 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/

Translated using Weblate (Russian)

Currently translated at 99.2% (691 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

Translated using Weblate (Malay)

Currently translated at 6.0% (20 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ms/

Translated using Weblate (Italian)

Currently translated at 82.6% (205 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/

Translated using Weblate (Italian)

Currently translated at 89.3% (320 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/it/

Translated using Weblate (Italian)

Currently translated at 22.8% (19 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/

Translated using Weblate (Dutch)

Currently translated at 93.9% (1969 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/

Translated using Weblate (Russian)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

Translated using Weblate (Russian)

Currently translated at 99.7% (491 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

Translated using Weblate (Portuguese)

Currently translated at 100.0% (4 of 4 strings)

Translation: Habitica/Noscript
Translate-URL: https://translate.habitica.com/projects/habitica/noscript/pt/

Translated using Weblate (Portuguese)

Currently translated at 82.3% (149 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt/

Translated using Weblate (Portuguese)

Currently translated at 100.0% (27 of 27 strings)

Translation: Habitica/Loginincentives
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/pt/

Translated using Weblate (Portuguese)

Currently translated at 100.0% (15 of 15 strings)

Translation: Habitica/Death
Translate-URL: https://translate.habitica.com/projects/habitica/death/pt/

Translated using Weblate (Russian)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

Translated using Weblate (Dutch)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/nl/

Translated using Weblate (Russian)

Currently translated at 92.7% (230 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/ru/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Russian)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ru/

Translated using Weblate (Polish)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/pl/

Translated using Weblate (Polish)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/pl/

Translated using Weblate (Spanish (Latin America))

Currently translated at 97.9% (140 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/es_419/

Translated using Weblate (Russian)

Currently translated at 97.6% (168 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/

Translated using Weblate (Japanese)

Currently translated at 100.0% (172 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

Translated using Weblate (Russian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ru/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/es_419/

Translated using Weblate (Japanese)

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/

Translated using Weblate (Russian)

Currently translated at 97.3% (2040 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (Dutch)

Currently translated at 93.8% (1967 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Russian)

Currently translated at 99.6% (297 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ru/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/

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 (Russian)

Currently translated at 98.2% (55 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Russian)

Currently translated at 99.2% (691 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hans/

Translated using Weblate (Russian)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ru/

Translated using Weblate (Japanese)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ja/

Translated using Weblate (Portuguese)

Currently translated at 87.9% (73 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt/

Translated using Weblate (Portuguese)

Currently translated at 87.9% (73 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt/

Translated using Weblate (Russian)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/

Translated using Weblate (Russian)

Currently translated at 99.1% (488 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

Translated using Weblate (Japanese)

Currently translated at 95.4% (664 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Russian)

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ru/

Translated using Weblate (Japanese)

Currently translated at 96.0% (508 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Portuguese)

Currently translated at 60.2% (50 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt/

Translated using Weblate (Japanese)

Currently translated at 92.7% (77 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Hungarian)

Currently translated at 34.9% (29 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hu/

Translated using Weblate (Portuguese)

Currently translated at 59.0% (49 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt/

Translated using Weblate (Portuguese)

Currently translated at 59.0% (49 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt/

Translated using Weblate (Japanese)

Currently translated at 95.4% (664 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Japanese)

Currently translated at 95.4% (664 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.8% (695 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.8% (695 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/

Translated using Weblate (Hungarian)

Currently translated at 33.7% (28 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hu/

Translated using Weblate (Russian)

Currently translated at 98.3% (178 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/vi/

Translated using Weblate (Vietnamese)

Currently translated at 74.6% (62 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

Translated using Weblate (Czech)

Currently translated at 67.4% (56 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/cs/

Translated using Weblate (Japanese)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/

Translated using Weblate (Russian)

Currently translated at 97.5% (81 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/
2020-05-28 23:54:35 +02:00
Sabe Jones
e54425f947 4.143.0 2020-05-28 16:51:43 -05:00
Sabe Jones
d953ea14da Merge branch 'develop' into release 2020-05-28 16:51:37 -05:00
Sabe Jones
0c179fee2f chore(sprites): compile 2020-05-28 16:51:20 -05:00
Sabe Jones
05e229ccb0 feat(content): subscriber items June 2020 2020-05-28 16:51:12 -05:00
Alys
b29d937806 replace Trello link with Google form link in GitHub CONTRIBUTING page 2020-05-28 15:42:32 +10:00
Matteo Pagliazzi
670b6a1563 fix(ui): adjust loading gryphon sizes and search members dropdown 2020-05-26 18:02:48 +02:00
Matteo Pagliazzi
44ded945dd Merge branch 'develop' into unlock-fixes 2020-05-25 19:00:56 +02:00
Matteo Pagliazzi
08f1e2b273 Client: remove unnecessary API calls + members fixes (#12179)
* wip

* refactor world state

* allow resource to be reloaded when the server is updated

* fix #9242

* fix event listeners

* remove un-needed code

* add tests for  asyncResourceFactory reloadOnAppVersionChange

* fix double cron notifications and party members showing up in the header after a party invitation is accepted

* remove console.log

* do not send vm info to loggly due to circular dependency + fix typo

* fix #12181

* do not load invites multiple times in members modal

* add hover to challenge member count

* groups: load members only on demand

* minor ui fixes

* choose class: fix vue duplicate key warning

* minor ui fixes

* challanges: load members on demand

* add loading spinner

* change loading mechanism

* fix loading gryphon issues

* reduce code duplication
2020-05-25 17:02:29 +02:00
dependabot-preview[bot]
ca80f4ee33 build(deps): bump @storybook/addon-knobs in /website/client (#12243)
Bumps [@storybook/addon-knobs](https://github.com/storybookjs/storybook/tree/HEAD/addons/knobs) from 5.3.18 to 5.3.19.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.19/addons/knobs)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-25 13:11:34 +02:00
dependabot-preview[bot]
65cbee9e75 build(deps): bump @storybook/addon-notes in /website/client (#12245)
Bumps [@storybook/addon-notes](https://github.com/storybookjs/storybook/tree/HEAD/addons/notes) from 5.3.18 to 5.3.19.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v5.3.19/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.19/addons/notes)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-05-25 13:05:02 +02:00
dependabot-preview[bot]
0f8563c14e build(deps): bump inspectpack from 4.4.0 to 4.5.2 in /website/client (#12246)
Bumps [inspectpack](https://github.com/FormidableLabs/inspectpack) from 4.4.0 to 4.5.2.
- [Release notes](https://github.com/FormidableLabs/inspectpack/releases)
- [Changelog](https://github.com/FormidableLabs/inspectpack/blob/master/HISTORY.md)
- [Commits](https://github.com/FormidableLabs/inspectpack/compare/v4.4.0...v4.5.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-05-25 12:55:35 +02:00
dependabot-preview[bot]
c4117f99ed build(deps): bump @storybook/addon-actions in /website/client (#12242)
Bumps [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/addons/actions) from 5.3.18 to 5.3.19.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.19/addons/actions)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-25 12:55:19 +02:00
dependabot-preview[bot]
27aca19c8c build(deps): bump @storybook/vue in /website/client (#12238)
Bumps [@storybook/vue](https://github.com/storybookjs/storybook/tree/HEAD/app/vue) from 5.3.18 to 5.3.19.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.19/app/vue)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-25 12:55:07 +02:00
dependabot-preview[bot]
80c18ffadd build(deps): bump bootstrap-vue from 2.14.0 to 2.15.0 in /website/client (#12239)
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.14.0 to 2.15.0.
- [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.14.0...v2.15.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-05-25 12:54:56 +02:00
dependabot-preview[bot]
bf2c4eb501 build(deps): bump moment from 2.25.3 to 2.26.0 in /website/client (#12244)
Bumps [moment](https://github.com/moment/moment) from 2.25.3 to 2.26.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.25.3...2.26.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-05-25 12:54:20 +02:00
dependabot-preview[bot]
ab1828c914 build(deps): bump vue-router from 3.1.6 to 3.2.0 in /website/client (#12237)
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.1.6 to 3.2.0.
- [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.1.6...v3.2.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-05-25 12:54:03 +02:00
dependabot-preview[bot]
b32f79f682 build(deps): bump @storybook/addon-links in /website/client (#12236)
Bumps [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/addons/links) from 5.3.18 to 5.3.19.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.19/addons/links)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-25 12:53:39 +02:00
dependabot-preview[bot]
7b69289069 build(deps): bump moment from 2.25.3 to 2.26.0 (#12231)
Bumps [moment](https://github.com/moment/moment) from 2.25.3 to 2.26.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.25.3...2.26.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-05-25 12:53:25 +02:00
dependabot-preview[bot]
a1fb80868f build(deps): bump mongoose from 5.9.14 to 5.9.15 (#12230)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.14 to 5.9.15.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.14...5.9.15)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-25 12:04:49 +02:00
Carl Vuorinen
9d4fb80d15 Add close button to profile modal (#12203) 2020-05-22 17:48:15 +02:00
Matteo Pagliazzi
43392f4952 Merge branch 'release' into develop 2020-05-22 17:46:14 +02:00
dependabot-preview[bot]
6e46794822 build(deps): bump bootstrap from 4.4.1 to 4.5.0 in /website/client (#12211)
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 4.4.1 to 4.5.0.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v4.4.1...v4.5.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-05-22 17:45:25 +02:00
Matteo Pagliazzi
43cad86201 4.142.3 2020-05-22 16:35:13 +02:00
Matteo Pagliazzi
734eae64a5 fix(avatar transormation): move questProgress method to spells mixin so that it is always available 2020-05-22 16:35:00 +02:00
Matteo Pagliazzi
032c95d5c8 fix(avatar transormation): move questProgress method to spells mixin so that it is always available 2020-05-22 13:28:44 +02:00
Melior
b40411e219 Merge branch 'origin/develop' into Weblate. 2020-05-21 22:02:19 +02:00
Melior
86410f6bb7 Translated using Weblate (Russian)
Currently translated at 90.3% (75 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/

Translated using Weblate (Russian)

Currently translated at 87.9% (73 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/

Translated using Weblate (French)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/fr/

Translated using Weblate (German)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/

Translated using Weblate (Polish)

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pl/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/bg/

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/pl/

Translated using Weblate (Polish)

Currently translated at 100.0% (172 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pl/

Translated using Weblate (Polish)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/pl/

Translated using Weblate (Portuguese)

Currently translated at 82.9% (1745 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/

Translated using Weblate (Dutch)

Currently translated at 93.7% (1965 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Polish)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/pl/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/bg/

Translated using Weblate (French)

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/

Translated using Weblate (Polish)

Currently translated at 100.0% (358 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/pl/

Translated using Weblate (Polish)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/pl/

Translated using Weblate (Polish)

Currently translated at 91.5% (76 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pl/

Translated using Weblate (Polish)

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pl/

Translated using Weblate (Polish)

Currently translated at 80.7% (67 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 80.7% (67 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Japanese)

Currently translated at 87.8% (159 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (358 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

Translated using Weblate (English)

Currently translated at 0.9% (3 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/en@lolcat/

Translated using Weblate (Bulgarian)

Currently translated at 91.3% (483 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/bg/

Translated using Weblate (English (Pirate))

Currently translated at 87.9% (73 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/en@pirate/

Translated using Weblate (English (Pirate))

Currently translated at 87.9% (73 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/en@pirate/

Translated using Weblate (Polish)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pl/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/bg/

Translated using Weblate (Bulgarian)

Currently translated at 99.5% (247 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/bg/

Translated using Weblate (Bulgarian)

Currently translated at 99.5% (247 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/bg/

Translated using Weblate (Polish)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/pl/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/pt_BR/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (172 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/bg/

Translated using Weblate (Bulgarian)

Currently translated at 99.6% (297 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/bg/

Translated using Weblate (Bulgarian)

Currently translated at 83.8% (1756 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/bg/

Translated using Weblate (Polish)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/pl/

Translated using Weblate (Polish)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pl/

Translated using Weblate (Polish)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/pl/

Translated using Weblate (Polish)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/pl/

Translated using Weblate (Bulgarian)

Currently translated at 85.2% (593 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/bg/

Translated using Weblate (Polish)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/pl/

Translated using Weblate (Bulgarian)

Currently translated at 90.9% (481 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/bg/

Translated using Weblate (Polish)

Currently translated at 78.3% (65 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/bg/

Translated using Weblate (Polish)

Currently translated at 53.0% (44 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 53.0% (44 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 50.6% (42 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 50.6% (42 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 48.1% (40 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 48.1% (40 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 44.5% (37 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 44.5% (37 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 43.3% (36 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 43.3% (36 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 42.1% (35 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 42.1% (35 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/bg/

Translated using Weblate (Polish)

Currently translated at 36.1% (30 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 36.1% (30 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 34.9% (29 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Polish)

Currently translated at 34.9% (29 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/bg/

Translated using Weblate (Bulgarian)

Currently translated at 99.3% (326 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/bg/

Translated using Weblate (Bulgarian)

Currently translated at 94.5% (465 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/bg/

Translated using Weblate (Bulgarian)

Currently translated at 83.7% (1755 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/bg/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/bg/

Translated using Weblate (Bulgarian)

Currently translated at 98.7% (82 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/bg/

Translated using Weblate (Russian)

Currently translated at 99.1% (488 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

Translated using Weblate (Dutch)

Currently translated at 93.6% (1963 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Japanese)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/ja/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hant/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/en_GB/

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/es_419/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 99.7% (694 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (358 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 98.7% (82 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

Translated using Weblate (German)

Currently translated at 100.0% (696 of 696 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (83 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt_BR/

Translated using Weblate (German)

Currently translated at 98.7% (82 of 83 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/
2020-05-21 22:02:08 +02:00
Sabe Jones
8d2ada1463 4.142.2 2020-05-21 15:00:06 -05:00
Sabe Jones
95a3c932c5 Merge branch 'develop' into release 2020-05-21 14:59:58 -05:00
Sabe Jones
51d1f6b86a Merge branch 'sabrecat/feedback-links' into release 2020-05-21 14:59:43 -05:00
Sabe Jones
809bacd10b chore(sprites): compile 2020-05-21 14:59:35 -05:00
Sabe Jones
b0f29211a8 chore(news): bailey 2020-05-21 14:59:28 -05:00
Bart Enkelaar
26f5bf554e fix(chat) - graceful for failure and fix link regex (#12225)
* fix(chat) - graceful for failure and fix link regex

* fix(chat) - Adjust unit test to test for the actual functional failure
2020-05-21 18:00:58 +02:00
Frank Maximus
a1ec42c0b2 Fix Issue #12103: Wacky potions purchase warning (#12172)
* Fix Issue #12103: Wacky potions purchase warning

For wacky potions lower petsRemaining by 9,
to exclude the mounts that don't exist.

* Fix Issue #12103: Wacky potions purchase warning

Handle comments

* Use includes instead of indexOf() !== -1

* use droppEggs and dropHatchingPotions instead of fixed amounts
2020-05-20 13:27:31 +02:00
Frank Maximus
8674ea55f9 #11828: Show a boss damage notification for skills (#12173)
* #11828: Show a boss damage notification for skills

Brutal Smash and Burst of Flames skills should show a
boss damage notification

Fixes #11828

* Calculate quest progress regardless of spell target.
2020-05-20 12:32:44 +02:00
Sabe Jones
c421da34cc chore(feedback): replace Trello links 2020-05-19 15:15:21 -05:00
Sabe Jones
fb79b9e128 4.142.1 2020-05-19 14:25:04 -05:00
Sabe Jones
375b6719e9 chore(analytics): slow down dropped item tracking 2020-05-19 14:24:52 -05:00
Melior
c9bed96077 Merge branch 'origin/develop' into Weblate. 2020-05-19 21:03:46 +02:00
Melior
1ccff7f1dd Translated using Weblate (Korean)
Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ko/

Translated using Weblate (Korean)

Currently translated at 70.0% (56 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ko/

Translated using Weblate (Korean)

Currently translated at 93.5% (29 of 31 strings)

Translation: Habitica/Maintenance
Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/ko/

Translated using Weblate (Japanese)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Dutch)

Currently translated at 93.6% (1961 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 87.6% (1843 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/

Translated using Weblate (German)

Currently translated at 100.0% (2103 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

Translated using Weblate (Dutch)

Currently translated at 93.5% (1960 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 96.0% (508 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Japanese)

Currently translated at 96.2% (77 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Vietnamese)

Currently translated at 52.5% (42 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

Translated using Weblate (Vietnamese)

Currently translated at 98.1% (483 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/vi/

Translated using Weblate (Japanese)

Currently translated at 96.0% (508 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ja/

Translated using Weblate (Serbian)

Currently translated at 21.2% (17 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/sr/

Translated using Weblate (Filipino)

Currently translated at 9.7% (14 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/fil/

Translated using Weblate (Filipino)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/fil/

Translated using Weblate (Japanese)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Filipino)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/fil/

Translated using Weblate (Filipino)

Currently translated at 1.3% (2 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/fil/

Translated using Weblate (Filipino)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/fil/

Translated using Weblate (Spanish (Latin America))

Currently translated at 97.7% (481 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/es_419/

Translated using Weblate (Japanese)

Currently translated at 87.2% (158 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/

Translated using Weblate (Japanese)

Currently translated at 95.2% (504 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Dutch)

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/nl/

Translated using Weblate (French)

Currently translated at 100.0% (2103 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (French)

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/

Translated using Weblate (Japanese)

Currently translated at 96.2% (77 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Japanese)

Currently translated at 87.4% (1839 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (358 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/

Translated using Weblate (Japanese)

Currently translated at 93.3% (494 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (French)

Currently translated at 98.8% (523 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/

Translated using Weblate (Japanese)

Currently translated at 96.2% (77 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/

Translated using Weblate (Dutch)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (Dutch)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (31 of 31 strings)

Translation: Habitica/Maintenance
Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/nl/

Translated using Weblate (Japanese)

Currently translated at 72.3% (131 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/

Translated using Weblate (Dutch)

Currently translated at 93.5% (1959 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 87.2% (1835 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Dutch)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ja/

Translated using Weblate (Dutch)

Currently translated at 100.0% (694 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nl/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (Japanese)

Currently translated at 87.2% (1834 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/

Translated using Weblate (Japanese)

Currently translated at 92.6% (490 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/

Translated using Weblate (Japanese)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/ja/

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/

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 (Portuguese (Brazil))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pt_BR/

Translated using Weblate (Dutch)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/nl/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/pt_BR/

Translated using Weblate (Dutch)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/nl/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/

Translated using Weblate (Dutch)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/nl/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (2103 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2103 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/pt_BR/

Translated using Weblate (Dutch)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nl/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/pt_BR/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/zh_Hant/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 99.8% (2100 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2103 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/zh_Hant/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hant/

Translated using Weblate (French)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/fr/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/en_GB/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/en_GB/

Translated using Weblate (French)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/fr/

Translated using Weblate (French)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/fr/

Translated using Weblate (French)

Currently translated at 98.4% (124 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/fr/

Translated using Weblate (French)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/fr/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/zh_Hans/

Translated using Weblate (French)

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/

Translated using Weblate (French)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fr/

Translated using Weblate (Chinese (Traditional))

Currently translated at 99.5% (2093 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

Translated using Weblate (English (United Kingdom))

Currently translated at 99.5% (2093 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hans/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hans/

Translated using Weblate (Dutch)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/nl/

Translated using Weblate (French)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/fr/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/en_GB/

Translated using Weblate (Chinese (Simplified))

Currently translated at 98.8% (523 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

Translated using Weblate (Spanish (Latin America))

Currently translated at 92.5% (74 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/

Translated using Weblate (Russian)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ru/

Translated using Weblate (Russian)

Currently translated at 99.1% (488 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/

Translated using Weblate (English (Pirate))

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/en@pirate/

Translated using Weblate (English (Pirate))

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/en@pirate/

Translated using Weblate (Russian)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ru/

Translated using Weblate (German)

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/

Translated using Weblate (German)

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/

Translated using Weblate (German)

Currently translated at 100.0% (529 of 529 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
2020-05-19 21:03:35 +02:00
Sabe Jones
36461cbbdf Merge branch 'release' into develop 2020-05-19 14:01:49 -05:00
Sabe Jones
427f73f664 4.142.0 2020-05-19 14:01:19 -05:00
Sabe Jones
d796848887 chore(sprites): compile 2020-05-19 14:00:33 -05:00
Sabe Jones
80a2e31c8e feat(content): new achievement and bundle 2020-05-19 14:00:25 -05:00
Bart Enkelaar
85d290a1fa fix(chat) - Issue 12217 - Allow url-escapable characters in links. (#12218) 2020-05-19 17:28:55 +02:00
Frank Maximus
1bc756ee93 Bolding text inside a link in task title/notes. (#12178) (#12195)
* Bolding text inside a link in task title/notes. (#12178)

Before:
* link target opened in new tab
* task edit popup opened

Now:
* link target opened in new tab

Fixes #12178

* Handle PR comments

* Added explanation
* Switched to classList to improve readability
2020-05-19 16:55:43 +02:00
Frank Maximus
ea44af0929 buyMysterySet records every item in Amplitude. (#12197)
* buyMysterySet records every item in Amplitude.

Record only the mysterySet

Fixes: #11705

* buyMysterySet records every item in Amplitude.

Extend unit test

Fixes: #11705
2020-05-19 16:39:48 +02:00
dependabot-preview[bot]
739963762e build(deps-dev): bump monk from 7.2.0 to 7.3.0 (#12214)
Bumps [monk](https://github.com/Automattic/monk) from 7.2.0 to 7.3.0.
- [Release notes](https://github.com/Automattic/monk/releases)
- [Changelog](https://github.com/Automattic/monk/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Automattic/monk/compare/v7.2.0...v7.3.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-05-18 10:33:24 +02:00
dependabot-preview[bot]
b02ae35b28 build(deps): bump bootstrap-vue from 2.13.1 to 2.14.0 in /website/client (#12210)
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.13.1 to 2.14.0.
- [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.13.1...v2.14.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-05-18 10:33:13 +02:00
dependabot-preview[bot]
ace8e2f0bd build(deps): bump mongoose from 5.9.13 to 5.9.14 (#12216)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.13 to 5.9.14.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.13...5.9.14)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-18 10:31:53 +02:00
Matteo Pagliazzi
e90175b5d6 chore(deps): update sortablejs version used by vue.draggable 2020-05-15 11:35:28 +02:00
Melior
403fa18511 Translated using Weblate (Russian)
Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/

Translated using Weblate (German)

Currently translated at 100.0% (57 of 57 strings)

Translation: Habitica/Spells
Translate-URL: https://translate.habitica.com/projects/habitica/spells/de/

Translated using Weblate (Russian)

Currently translated at 99.2% (139 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ru/

Translated using Weblate (German)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/de/

Translated using Weblate (German)

Currently translated at 100.0% (181 of 181 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/de/

Translated using Weblate (German)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/

Translated using Weblate (German)

Currently translated at 100.0% (2103 of 2103 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (German)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/de/

Translated using Weblate (German)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/de/

Translated using Weblate (German)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Tasks
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/de/

Merge branch 'origin/develop' into Weblate.

Translated using Weblate (Japanese)

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Spanish (Latin America))

Currently translated at 73.7% (59 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Dutch)

Currently translated at 93.2% (1953 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (English (Pirate))

Currently translated at 99.6% (327 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/en@pirate/

Translated using Weblate (Japanese)

Currently translated at 95.6% (664 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/

Translated using Weblate (English (Pirate))

Currently translated at 100.0% (358 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/en@pirate/

Translated using Weblate (English (Pirate))

Currently translated at 99.1% (228 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/en@pirate/

Translated using Weblate (Swedish)

Currently translated at 82.5% (66 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/sv/

Translated using Weblate (Spanish (Latin America))

Currently translated at 73.7% (59 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/

Translated using Weblate (Spanish (Latin America))

Currently translated at 73.7% (59 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/

Translated using Weblate (Tamil)

Currently translated at 2.0% (3 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/ta/

Translated using Weblate (Dutch)

Currently translated at 93.1% (1952 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ja/
2020-05-14 22:10:21 +02:00
Sabe Jones
7dd6227845 4.141.4 2020-05-14 14:03:16 -05:00
Sabe Jones
4c7306491b Merge branch 'develop' into release 2020-05-14 14:03:09 -05:00
Sabe Jones
1164f5e5f5 chore(news): Bailey at Rest 2020-05-14 14:03:05 -05:00
Matteo Pagliazzi
c6937a0409 4.141.3 2020-05-14 13:06:55 +02:00
Matteo Pagliazzi
092d6726b8 fix(subscriptions): use correct termination date field and add extra check when it is missing 2020-05-14 12:56:12 +02:00
Melior
2a67de698b Merge branch 'origin/develop' into Weblate. 2020-05-12 23:00:23 +02:00
Melior
cfc8620865 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (172 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/

Translated using Weblate (Bulgarian)

Currently translated at 83.6% (1753 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/bg/

Translated using Weblate (Dutch)

Currently translated at 93.1% (1951 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 98.3% (244 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (180 of 180 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/bg/

Translated using Weblate (Spanish)

Currently translated at 91.4% (1915 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/bg/

Translated using Weblate (Bulgarian)

Currently translated at 85.4% (593 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/bg/

Translated using Weblate (Spanish)

Currently translated at 83.7% (67 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es/

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/bg/

Translated using Weblate (Dutch)

Currently translated at 93.0% (1950 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Korean)

Currently translated at 16.1% (53 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/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 (Filipino)

Currently translated at 100.0% (63 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/fil/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (Filipino)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/fil/

Translated using Weblate (Filipino)

Currently translated at 55.5% (35 of 63 strings)

Translation: Habitica/Defaulttasks
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/fil/

Translated using Weblate (Filipino)

Currently translated at 99.1% (228 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/fil/

Translated using Weblate (Filipino)

Currently translated at 95.7% (134 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/fil/

Translated using Weblate (Filipino)

Currently translated at 99.7% (491 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fil/

Translated using Weblate (Filipino)

Currently translated at 99.5% (210 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/fil/

Translated using Weblate (Russian)

Currently translated at 97.3% (2040 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/

Translated using Weblate (Japanese)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/

Translated using Weblate (Russian)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ru/

Translated using Weblate (Latin)

Currently translated at 83.4% (1749 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/la/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/
2020-05-12 23:00:13 +02:00
Sabe Jones
714a18ce5c Merge branch 'release' into develop 2020-05-12 15:58:13 -05:00
Sabe Jones
41e22640f5 4.141.2 2020-05-12 15:57:47 -05:00
Sabe Jones
8747a2d1b6 feat(content): reenable some May potions 2020-05-12 15:57:40 -05:00
Sabe Jones
721ae0872f Merge branch 'release' into develop 2020-05-11 14:02:38 -05:00
Sabe Jones
6658abbcd9 fix(events): Spring Fling lingering 2020-05-11 14:02:10 -05:00
Matteo Pagliazzi
68099626eb build(deps): bump moment from 2.24.0 to 2.25.3 in /website/client (#12184)
Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.25.3.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-11 16:37:48 +02:00
dependabot-preview[bot]
ff9780c5e5 build(deps): bump moment from 2.25.1 to 2.25.3 (#12191)
Bumps [moment](https://github.com/moment/moment) from 2.25.1 to 2.25.3.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-11 16:37:42 +02:00
dependabot-preview[bot]
56aaca5c0c build(deps): bump moment from 2.24.0 to 2.25.3 in /website/client
Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.25.3.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-11 08:55:21 +00:00
dependabot-preview[bot]
c22a2ef9a8 build(deps): bump bootstrap-vue from 2.13.0 to 2.13.1 in /website/client (#12185)
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.13.0 to 2.13.1.
- [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.13.0...v2.13.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-05-11 10:52:14 +02:00
dependabot-preview[bot]
a3ba1d19ee build(deps): bump jquery from 3.5.0 to 3.5.1 in /website/client (#12186)
Bumps [jquery](https://github.com/jquery/jquery) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/jquery/jquery/releases)
- [Commits](https://github.com/jquery/jquery/compare/3.5.0...3.5.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-05-11 10:52:03 +02:00
dependabot-preview[bot]
3c5a7b65c5 build(deps): bump mongoose from 5.9.10 to 5.9.13 (#12189)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.10 to 5.9.13.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.10...5.9.13)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-11 10:51:48 +02:00
Carl Vuorinen
1ebe57b114 Make contributor achievement notification "sticky" (#12183)
Add ability to define any notification to be "sticky", so that it will not timeout and stays on screen until clicked.
2020-05-09 22:02:20 +02:00
Bart Enkelaar
c218b8d56c Issue 12033 - Use version of habitica-markdown that includes mentions (#12089)
* Issue 12033 - Use version of habitica-markdown that includes mention plugin

Also fixes frontend parts of 11504 and 10924

* Issue 12033 - Reduce duplication in chatCard & messageCard

* Issue 12033 - Use habitica-markdown version 2.0.0

* Issue 12033 - Use new entry point and fix tests

* Issue 12033 - Rename renderMarkdown to renderWithMentions
2020-05-09 20:04:14 +02:00
Bart Enkelaar
ef99943646 Don't break up links with user profile link injections (#12100)
* Issue 10924 - Don't break up links with mention links

* Issue 10924 - Recognise links between brackets.

* Issue 10924 - Rely on markdown parser for link determination

* Issue 10924 - Only increment index once in findTextBlocks
2020-05-09 19:37:08 +02:00
Bart Enkelaar
29f6bf7dc6 fix(chat) - Mention dot doesn't show if mention is preceded by weird … (#12177)
* fix(chat) - Mention dot doesn't show if mention is preceded by weird mention

* fix(chat) - add unit test for chatCard

* fix(chat) - Improve unit test to only mount the wrapper once
2020-05-09 19:27:20 +02:00
Carl Vuorinen
f7af8ec910 Set 30 days TTL for smartbanner (#12174)
So that it will not get shown every time (it uses session cookie by default).
30 days in milliseconds = 2592000000
2020-05-09 18:00:12 +02:00
ThePlasmak
f4ba6b2186 Fixed grammar, formatting and other errors in translatable strings (#12171)
* Added a full stop to shieldArmoireHorseshoeNotes.

* Added a full stop to shieldMystery201902Notes.

* Added a full stop to shieldMystery201902Notes.

* Added a full stop to shieldArmoireHorseshoeNotes.

* Fixed full stop and formating errors in gear.json.

* Fixed full stop and formating errors in gear.json.

* Change Transifex to Weblate in Community Guidelines

* Remove closing bracket from

* Revert "Remove closing bracket from"

This reverts commit 962698528f.

* Remove closing bracket from schoolTodoNotes

* Fix privateMessageGiftSubscriptionMessage trailing space

* Fix userAlreadyInAParty trailing space and double space

* Removed trailing space from alreadyEarnedQuestRewardEnglish and alreadyEarnedQuestLevel

* Removed starting space from spellWizardFrostAlreadyCast and spellRogueStealthMaxedOut

* Removed trailing space from

* Changed http to https
2020-05-09 17:56:28 +02:00
Sabe Jones
a3b59d9254 4.141.1 2020-05-08 13:52:04 -05:00
Melior
e813428472 Translated using Weblate (Spanish)
Currently translated at 91.3% (1913 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

Translated using Weblate (Spanish)

Currently translated at 91.3% (1913 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

Translated using Weblate (Malay)

Currently translated at 1.2% (4 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/ms/

Translated using Weblate (Dutch)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (31 of 31 strings)

Translation: Habitica/Maintenance
Translate-URL: https://translate.habitica.com/projects/habitica/maintenance/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (328 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nl/

Translated using Weblate (Dutch)

Currently translated at 93.0% (1949 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Russian)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ru/

Translated using Weblate (Filipino)

Currently translated at 100.0% (28 of 28 strings)

Translation: Habitica/Rebirth
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/fil/

Translated using Weblate (Filipino)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/fil/

Translated using Weblate (Filipino)

Currently translated at 98.8% (170 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fil/

Translated using Weblate (Filipino)

Currently translated at 99.1% (228 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/fil/

Translated using Weblate (Filipino)

Currently translated at 100.0% (67 of 67 strings)

Translation: Habitica/Messages
Translate-URL: https://translate.habitica.com/projects/habitica/messages/fil/

Translated using Weblate (Filipino)

Currently translated at 100.0% (6 of 6 strings)

Translation: Habitica/Inventory
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/fil/

Translated using Weblate (Sinhala)

Currently translated at 8.7% (7 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/si/

Translated using Weblate (Dutch)

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/nl/

Translated using Weblate (Dutch)

Currently translated at 92.9% (1947 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Spanish (Latin America))

Currently translated at 83.4% (1748 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/

Translated using Weblate (English (Pirate))

Currently translated at 76.6% (138 of 180 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/en@pirate/

Translated using Weblate (English (Pirate))

Currently translated at 99.1% (488 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/en@pirate/

Translated using Weblate (Dutch)

Currently translated at 91.3% (1914 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/nl/

Translated using Weblate (English (Pirate))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/en@pirate/

Translated using Weblate (Spanish)

Currently translated at 96.5% (504 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/

Translated using Weblate (English (Pirate))

Currently translated at 100.0% (522 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/en@pirate/

Translated using Weblate (Dutch)

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/

Translated using Weblate (Filipino)

Currently translated at 82.8% (111 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/fil/

Translated using Weblate (Filipino)

Currently translated at 99.3% (296 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/fil/

Translated using Weblate (Filipino)

Currently translated at 91.7% (123 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/fil/

Translated using Weblate (Dutch)

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/nl/

Translated using Weblate (Dutch)

Currently translated at 90.8% (1904 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/

Translated using Weblate (Dutch)

Currently translated at 90.7% (1901 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Dutch)

Currently translated at 90.7% (1901 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Russian)

Currently translated at 98.3% (177 of 180 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

Translated using Weblate (French)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fr/

Translated using Weblate (Spanish)

Currently translated at 91.2% (1911 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/

Translated using Weblate (Russian)

Currently translated at 90.0% (72 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/

Translated using Weblate (French)

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/fr/

Translated using Weblate (French)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/

Translated using Weblate (French)

Currently translated at 100.0% (211 of 211 strings)

Translation: Habitica/Settings
Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/

Translated using Weblate (Russian)

Currently translated at 98.2% (55 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/

Translated using Weblate (Russian)

Currently translated at 100.0% (358 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ru/

Translated using Weblate (Russian)

Currently translated at 97.8% (511 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

Translated using Weblate (Russian)

Currently translated at 97.5% (509 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/

Translated using Weblate (Dutch)

Currently translated at 90.6% (1899 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hans/

Translated using Weblate (French)

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/fr/

Translated using Weblate (French)

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/fr/

Translated using Weblate (French)

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/

Translated using Weblate (French)

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/en_GB/

Translated using Weblate (German)

Currently translated at 100.0% (248 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (Dutch)

Currently translated at 90.5% (1898 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

Translated using Weblate (German)

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Japanese)

Currently translated at 88.7% (71 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/
2020-05-08 20:50:43 +02:00
Matteo Pagliazzi
ebd22296df wip 2020-05-07 16:15:11 +02:00
negue
db0009ebad FIX: scroll/loading guilds (#12176)
* debounce scroll/loading guilds

* Update discovery.vue

remove threshold
2020-05-06 18:37:29 +02:00
Matteo Pagliazzi
613895e294 Merge branch 'develop' into unlock-fixes 2020-05-06 11:49:28 +02:00
Sabe Jones
be622e8b10 Merge branch 'release' into develop 2020-05-05 15:03:39 -05:00
Sabe Jones
a7c3c10ff4 4.141.0 2020-05-05 15:03:04 -05:00
Sabe Jones
1831c0dd79 chore(sprites): compile 2020-05-05 15:02:42 -05:00
Sabe Jones
8fe563aa37 feat(content): armoire, backgrounds 2020-05-05 15:02:36 -05:00
Matteo Pagliazzi
e5f1f3b279 Improve i18n caching (#12030)
* fix indentation

* wip: cache i18n responses

* cache i18n browser script to disk

* typos

* misc fixes
2020-05-05 20:31:33 +02:00
Sabe Jones
446122d7b8 To-Do cron task decay fixes (#12072)
* fix(tasks): improve some cron behaviors
Fixes #6488
Fixes #8590

* add test

Co-authored-by: Matteo Pagliazzi <matteopagliazzi@gmail.com>
2020-05-05 18:52:44 +02:00
Bart Enkelaar
93335352ec Dont throw away extra paypal months (#12149)
* Issue 10605 - Don't pointlessly format dates

* fix(10605): Be defensive about setting plan termination dates
2020-05-05 17:16:35 +02:00
Bart Enkelaar
6e24cf0fe1 Vue component unit test isolation (#12154)
* 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

* Use localVue for groupsUtilities test and revert partial zone fix
2020-05-05 16:20:08 +02:00
tsukimi2
378325a8a2 Changed private message" button to use <a href> to open Private Messa… (#12010)
* Changed private message" button to use <a href> to open Private Message page in same tab.

Changed private message" button to use <a href> to open Private Message page in same tab with normal mouse click, and open in a new tab with right mouse click mouse context menu.

* Use router-link and navigation guard as requested.

Change from <a href to router-link in profile.vue and use navigation guard to obtain selected user data from server instead of doing so in mount method as requested.

* Added habitica::dismiss-modal to hide members modal

* Suggestion from lint

* Use replace in router-link to as per suggestion

* Suggestion by lint

* Remove sendMessage function in profile.vue as suggested in PR review
2020-05-05 16:14:31 +02:00
Melior
f60b50d6fa Merge branch 'origin/develop' into Weblate. 2020-05-04 21:53:10 +02:00
Melior
785da1391f Translated using Weblate (English)
Currently translated at 95.3% (164 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/en@lolcat/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (485 of 485 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/en_GB/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hans/

Translated using Weblate (Spanish)

Currently translated at 81.2% (65 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es/

Translated using Weblate (Dutch)

Currently translated at 90.5% (1897 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Vietnamese)

Currently translated at 78.9% (412 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/vi/

Translated using Weblate (Vietnamese)

Currently translated at 83.8% (208 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/vi/

Translated using Weblate (Vietnamese)

Currently translated at 87.1% (312 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/vi/

Translated using Weblate (Japanese)

Currently translated at 87.5% (70 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2095 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (134 of 134 strings)

Translation: Habitica/Challenge
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/zh_Hans/

Translated using Weblate (Japanese)

Currently translated at 85.0% (68 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Japanese)

Currently translated at 81.2% (65 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Japanese)

Currently translated at 78.7% (63 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.8% (2091 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/

Translated using Weblate (Japanese)

Currently translated at 77.5% (62 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/

Translated using Weblate (Vietnamese)

Currently translated at 51.2% (41 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Dutch)

Currently translated at 90.4% (1895 of 2095 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (Japanese)

Currently translated at 99.2% (139 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/
2020-05-04 21:52:54 +02:00
Sabe Jones
adff828c91 Merge branch 'release' into develop 2020-05-04 14:52:06 -05:00
Sabe Jones
5cdcbc5310 4.140.14 2020-05-04 14:51:14 -05:00
Sabe Jones
84a52002c8 chore(sprites): compile 2020-05-04 14:50:44 -05:00
Sabe Jones
671c90a593 chore(news): Bailey 2020-05-04 14:50:36 -05:00
dependabot-preview[bot]
261da70274 build(deps): bump @babel/preset-env from 7.9.5 to 7.9.6 (#12165)
Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.9.5 to 7.9.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.9.5...v7.9.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-04 09:58:07 +02:00
dependabot-preview[bot]
c87803caca build(deps): bump bootstrap-vue from 2.12.0 to 2.13.0 in /website/client (#12158)
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.12.0 to 2.13.0.
- [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.12.0...v2.13.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-05-04 09:57:03 +02:00
dependabot-preview[bot]
c1705550c7 build(deps): bump moment from 2.24.0 to 2.25.1 (#12163)
Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.25.1.
- [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.24.0...2.25.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-05-04 09:56:36 +02:00
dependabot-preview[bot]
119102ff61 build(deps): bump apple-auth from 1.0.5 to 1.0.6 (#12161)
Bumps [apple-auth](https://github.com/ananay/apple-auth) from 1.0.5 to 1.0.6.
- [Release notes](https://github.com/ananay/apple-auth/releases)
- [Commits](https://github.com/ananay/apple-auth/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-04 09:53:30 +02:00
dependabot-preview[bot]
933fc4d882 build(deps): bump csv-stringify from 5.4.3 to 5.5.0 (#12164)
Bumps [csv-stringify](https://github.com/adaltas/node-csv-stringify) from 5.4.3 to 5.5.0.
- [Release notes](https://github.com/adaltas/node-csv-stringify/releases)
- [Changelog](https://github.com/adaltas/node-csv-stringify/blob/master/CHANGELOG.md)
- [Commits](https://github.com/adaltas/node-csv-stringify/compare/v5.4.3...v5.5.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-05-04 09:52:44 +02:00
dependabot-preview[bot]
31a83097be build(deps): bump @babel/core from 7.9.0 to 7.9.6 (#12168)
Bumps [@babel/core](https://github.com/babel/babel) from 7.9.0 to 7.9.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.9.0...v7.9.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-04 09:50:16 +02:00
ThePlasmak
6cdc59d913 Added a full stop to shieldMystery201902Notes and shieldArmoireHorseshoeNotes. (#12153)
* Added a full stop to shieldArmoireHorseshoeNotes.

* Added a full stop to shieldMystery201902Notes.
2020-05-03 23:49:14 +02:00
Matteo Pagliazzi
ca4efa21cf Reset should unassign Stat Points
Squashed commit of the following:

commit c3c2c364118a90f893ea7fca0a943ea64299234a
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Sun May 3 22:36:57 2020 +0200

    increase timeout to 100ms to allow a correct route change before reload

commit 5fd85345ce4a1d3684ca991db7f666803c899e63
Merge: a73b5c942b 33331554d3
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Sun May 3 22:35:33 2020 +0200

    Merge branch 'develop' of https://github.com/PitiTheGrey/habitica into PitiTheGrey-develop

commit 33331554d3
Author: PitiTheGrey <35431804+PitiTheGrey@users.noreply.github.com>
Date:   Sun May 3 22:14:33 2020 +0200

    Order fixed.

    Rekord after reset

commit 3374ed29db
Author: PitiTheGrey <35431804+PitiTheGrey@users.noreply.github.com>
Date:   Sun May 3 22:01:07 2020 +0200

    Return to page  then reset

commit a73b5c942b577dd357ce76380a0102c6823f66c1
Merge: 888f2c8217 0887141ec4
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Sun May 3 21:44:16 2020 +0200

    Merge branch 'develop' of https://github.com/PitiTheGrey/habitica into PitiTheGrey-develop

commit 0887141ec4
Author: PitiTheGrey <35431804+PitiTheGrey@users.noreply.github.com>
Date:   Sun May 3 20:42:50 2020 +0200

    Remove 2nd try (sorry)

commit e5534a7cba
Author: PitiTheGrey <35431804+PitiTheGrey@users.noreply.github.com>
Date:   Sun May 3 20:14:49 2020 +0200

    removed unnecessary lines of code

commit 888f2c8217611d367bee912b63d4cc3f4def59bb
Merge: aeba14f2e9 e5c5f7f1d0
Author: Matteo Pagliazzi <matteopagliazzi@gmail.com>
Date:   Sun May 3 19:43:02 2020 +0200

    Merge branch 'develop' of https://github.com/PitiTheGrey/habitica into PitiTheGrey-develop

commit e5c5f7f1d0
Author: PitiTheGrey <35431804+PitiTheGrey@users.noreply.github.com>
Date:   Sat May 2 14:54:14 2020 +0200

    Page reload after reset button pressed

commit 1c7385f774
Author: PitiTheGrey <35431804+PitiTheGrey@users.noreply.github.com>
Date:   Tue Apr 28 22:23:59 2020 +0200

    Update reset.js

commit 6a8ad34aa6
Author: PitiTheGrey <35431804+PitiTheGrey@users.noreply.github.com>
Date:   Tue Apr 28 22:15:08 2020 +0200

    Update reset.js

    Resets int, con, per, str to 0
    and Points to 1

commit ba6de48ee3
Author: PitiTheGrey <35431804+PitiTheGrey@users.noreply.github.com>
Date:   Tue Apr 28 22:10:16 2020 +0200

    Update reset.js

    Test if habitica/Website/common/script/ops/reset.js resets
    int, con, per, str to 0
    and Points to 1.
2020-05-03 22:37:34 +02:00
Alys
aeba14f2e9 update API's monthly Gem cap messages to use the friendly website version (#12150)
* allow subscribers to buy their final monthly gem

* replace old montly Gem cap messages with friendlier new ones
2020-05-02 21:49:38 +02:00
negue
1c94c1a968 fix: return full inbox on user-v3-api (#12146)
* fix inbox on user-v3-api + test

* add @benkelaar suggestions
2020-05-02 21:48:16 +02:00
negue
26767f598b API: Adding secret.text to the user-schema (#12121) 2020-05-02 19:59:05 +02:00
Sabe Jones
5d202c7617 fix(script): run main and large only once each 2020-04-30 13:35:42 -05:00
Melior
643d3802cc Merge branch 'origin/develop' into Weblate. 2020-04-30 20:22:05 +02:00
Sabe Jones
5ee33f219a 4.140.13 2020-04-30 13:13:30 -05:00
Sabe Jones
4e93874483 chore(news): Last Chance Bailey 2020-04-30 13:13:18 -05:00
Sabe Jones
8bf44ce47a Merge branch 'develop' into release 2020-04-30 12:40:02 -05:00
Sabe Jones
458bde1d13 Squashed commit of the following:
commit 35fae86bf8498a21419a32f7cdfca7f521b85494
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Apr 30 11:36:24 2020 -0500

    fix(items): bouncy numbers

commit 3d32d8962060fc2561687bca5a4037c47e12ca04
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Apr 30 09:36:52 2020 -0500

    fix(badges): standardize box-shadow

commit 5f89f1a8db00ab7d1ea29b99c90c47c358ee9268
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Wed Apr 29 15:51:56 2020 -0500

    fix(badges): standardize hover, box-shadow; fix equipment pills

commit 4eda06072a82f7a41de2fde6c9e1023e0e519b3c
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Apr 28 13:24:04 2020 -0500

    fix(badges): pill vs round

commit 7181af5cb8d552e82eb4f12bf98a31723669f16b
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Mon Apr 27 15:54:30 2020 -0500

    fix(items): SVG nonsense

commit 95cfe28db0ec0a452ae6437b3a89c07b055a4092
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Fri Apr 24 12:35:00 2020 -0500

    fix(items): don't apply "empty" to equipment

commit 5932b9e9fafc2afa914a36a91fcf4d03132f18a4
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Fri Apr 24 11:50:46 2020 -0500

    refactor(pins): move pin badge to component and implement across site

commit 0533f6f79a8c51b506c2c1870bad529fccff9ae7
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Fri Apr 24 11:50:23 2020 -0500

    fix(mounts): misaligned tigers

commit a74e64afa3e0ff7a032da3406f7787b4782cc7bf
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Fri Apr 24 06:17:53 2020 -0500

    fix(svg): remove mask attributes

commit ae0f874fb6b708b4420d8b3ac18aa3b92dc2554c
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Apr 23 18:11:13 2020 -0500

    refactor(icons): standard freeze structure

commit 03c836313f91f761a1ae46d89b39625bd562d239
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Apr 23 16:31:33 2020 -0500

    WIP(styles): pin badge story

commit 661cf2a885a77fbc9edd8e84802354c282e86476
Merge: 34ec0b6c6a c4343379a1
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Apr 23 14:48:22 2020 -0500

    Merge branch 'develop' into sabrecat/quests-touchup

commit 34ec0b6c6ae3991665699aafc80d49d550a1661b
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Mon Apr 20 16:12:11 2020 -0500

    fix(items): style bodges

commit 3bbe1e98e14e94d4e3de8bdcc192478fe5d7cd0d
Merge: 095674ac0f 13123c0bae
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Mon Apr 20 15:51:31 2020 -0500

    Merge branch 'develop' into sabrecat/quests-touchup

commit 095674ac0fd462a8558d9de5469b7216be579411
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Apr 7 12:27:03 2020 -0500

    fix(markets): styling

commit 8ffb8080a7b07ab0e5e19215bc8a3ce0b77cd54e
Merge: 5d4b20cd4f 9ac7840940
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Tue Apr 7 09:49:16 2020 -0500

    Merge branch 'develop' into sabrecat/quests-touchup

commit 5d4b20cd4f58c514ff788d5f64eb6398792c9583
Author: Sabe Jones <sabrecat@gmail.com>
Date:   Thu Mar 26 15:01:05 2020 -0500

    WIP(shops): item updates start
2020-04-30 12:38:59 -05:00
Melior
6899731937 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hans/

Translated using Weblate (Dutch)

Currently translated at 90.5% (1893 of 2091 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/

Translated using Weblate (Japanese)

Currently translated at 98.5% (138 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (Dutch)

Currently translated at 90.4% (1891 of 2091 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (German)

Currently translated at 100.0% (694 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

Translated using Weblate (Vietnamese)

Currently translated at 39.0% (128 of 328 strings)

Translation: Habitica/Front
Translate-URL: https://translate.habitica.com/projects/habitica/front/vi/

Translated using Weblate (Vietnamese)

Currently translated at 40.0% (32 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/

Translated using Weblate (Japanese)

Currently translated at 96.4% (135 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (Japanese)

Currently translated at 94.2% (132 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (German)

Currently translated at 100.0% (694 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

Translated using Weblate (Dutch)

Currently translated at 90.3% (1890 of 2091 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Romanian)

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ro/

Translated using Weblate (Japanese)

Currently translated at 98.7% (245 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Japanese)

Currently translated at 91.4% (128 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (172 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/

Translated using Weblate (Dutch)

Currently translated at 90.3% (1889 of 2091 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (126 of 126 strings)

Translation: Habitica/Communityguidelines
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/

Translated using Weblate (Estonian)

Currently translated at 83.3% (1743 of 2091 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/et/

Translated using Weblate (Japanese)

Currently translated at 97.9% (243 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Dutch)

Currently translated at 90.0% (1882 of 2091 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (230 of 230 strings)

Translation: Habitica/Character
Translate-URL: https://translate.habitica.com/projects/habitica/character/ja/

Translated using Weblate (Japanese)

Currently translated at 96.3% (239 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Dutch)

Currently translated at 96.5% (670 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nl/
2020-04-30 16:56:12 +02:00
Matteo Pagliazzi
3101abbb08 remove profiling code 2020-04-30 14:05:46 +02:00
Matteo Pagliazzi
537313a21e 4.140.12 2020-04-29 12:44:56 +02:00
Matteo Pagliazzi
453383af9f feat(debug): improve stack traces 2020-04-29 12:44:50 +02:00
Matteo Pagliazzi
a19db5798d 4.140.11 2020-04-29 12:32:04 +02:00
Matteo Pagliazzi
ea1569e23e feat(server); allow debugging 2020-04-29 12:30:48 +02:00
Sabe Jones
58aa1ac2f3 chore(sprites): compile 2020-04-28 14:26:56 -05:00
Sabe Jones
a979fc3843 feat(content): mystery items 2020-05 2020-04-28 14:26:47 -05:00
Matteo Pagliazzi
9f91775e78 fix(unit tests): re add code removed by mistake in stringUtils tests 2020-04-28 17:00:57 +02:00
Matteo Pagliazzi
61ca931e66 fix(string utils): do not escape possible regular expressions 2020-04-28 16:47:52 +02:00
Matteo Pagliazzi
2888f843e3 fix(push notifications): remove tokens after a MismatchSenderId error 2020-04-28 16:16:10 +02:00
Matteo Pagliazzi
b947c714f0 fix(regexp): escape inputs 2020-04-28 16:00:17 +02:00
Matteo Pagliazzi
783b8995b8 Merge pull request #12115 from cvuorinen/12114-group-send-invites-button
Fix group Send Invites button
2020-04-28 15:44:37 +02:00
Carl Vuorinen
8db2fb8015 Nicer input event handler 2020-04-28 16:07:59 +03:00
Carl Vuorinen
1bcf2dfe80 Use native filter & forEach functions instead of lodash 2020-04-28 15:59:31 +03:00
Matteo Pagliazzi
805641b6cf Merge pull request #12145 from sandip2224/patch-2
Update LICENSE
2020-04-28 13:35:08 +02:00
Matteo Pagliazzi
5b0584fc5e Merge pull request #12125 from cvuorinen/11181-fix-tasks-draggable-on-mobile
Fix tasks draggable on mobile
2020-04-28 13:02:49 +02:00
Sandipan
99429d9d48 Update LICENSE
Fixed grammatical error
2020-04-28 09:17:46 +05:30
Bart Enkelaar
ec5de91123 Issue 12138 - Fix chat support for regex chars in code blocks 2020-04-27 20:24:59 +02:00
Matteo Pagliazzi
6ffc28f04e Merge pull request #12140 from benkelaar/regex-escape
Issue 12138 - Fix chat support for regex chars in code blocks
2020-04-27 20:24:27 +02:00
negue
b1a348aee3 fix reload conversations on header-refresh 2020-04-27 17:18:39 +02:00
Bart Enkelaar
66ed0a350b Issue 12138 - Fix chat support for regex chars in code blocks 2020-04-27 13:56:27 +02:00
Matteo Pagliazzi
6b2e9f16e2 build(deps): bump habitica-markdown in /website/client (#12130)
Bumps [habitica-markdown](https://github.com/HabitRPG/habitica-markdown) from 1.3.2 to 1.4.0.
- [Release notes](https://github.com/HabitRPG/habitica-markdown/releases)
- [Commits](https://github.com/HabitRPG/habitica-markdown/compare/v1.3.2...v1.4.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-04-27 11:25:02 +02:00
dependabot-preview[bot]
7f6a2a0700 build(deps): bump habitica-markdown from 1.3.2 to 1.4.0 (#12131)
Bumps [habitica-markdown](https://github.com/HabitRPG/habitica-markdown) from 1.3.2 to 1.4.0.
- [Release notes](https://github.com/HabitRPG/habitica-markdown/releases)
- [Commits](https://github.com/HabitRPG/habitica-markdown/compare/v1.3.2...v1.4.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-04-27 11:24:54 +02:00
dependabot-preview[bot]
05008b20d3 build(deps): bump mongoose from 5.9.9 to 5.9.10 (#12137)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.9.9 to 5.9.10.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/History.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.9.9...5.9.10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-04-27 11:24:46 +02:00
dependabot-preview[bot]
6cae168adb build(deps): bump bootstrap-vue from 2.11.0 to 2.12.0 in /website/client (#12128)
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.11.0 to 2.12.0.
- [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.11.0...v2.12.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-04-27 11:23:00 +02:00
dependabot-preview[bot]
72a9506b9f build(deps): bump sass from 1.26.3 to 1.26.5 in /website/client (#12129)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.3 to 1.26.5.
- [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.3...1.26.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-04-27 11:22:47 +02:00
dependabot-preview[bot]
af96cd0488 build(deps): bump webpack from 4.42.1 to 4.43.0 in /website/client (#12132)
Bumps [webpack](https://github.com/webpack/webpack) from 4.42.1 to 4.43.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.42.1...v4.43.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-04-27 11:22:12 +02:00
dependabot-preview[bot]
60204bef06 build(deps): bump csv-stringify from 5.3.6 to 5.4.3 (#12135)
Bumps [csv-stringify](https://github.com/adaltas/node-csv-stringify) from 5.3.6 to 5.4.3.
- [Release notes](https://github.com/adaltas/node-csv-stringify/releases)
- [Changelog](https://github.com/adaltas/node-csv-stringify/blob/master/CHANGELOG.md)
- [Commits](https://github.com/adaltas/node-csv-stringify/compare/v5.3.6...v5.4.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-04-27 11:21:58 +02:00
dependabot-preview[bot]
4c21d9e560 build(deps): bump habitica-markdown in /website/client
Bumps [habitica-markdown](https://github.com/HabitRPG/habitica-markdown) from 1.3.2 to 1.4.0.
- [Release notes](https://github.com/HabitRPG/habitica-markdown/releases)
- [Commits](https://github.com/HabitRPG/habitica-markdown/compare/v1.3.2...v1.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-27 05:37:14 +00:00
Carl Vuorinen
fa38b22003 Add 100ms delay to draggable on touch devices
Makes tapping the +/- and checkbox possible and also fixes scrolling on mobile.
2020-04-26 18:03:23 +03:00
Matteo Pagliazzi
be86812900 4.140.10 2020-04-24 21:00:08 +02:00
Matteo Pagliazzi
d03e5e93b0 Merge branch 'release' into develop 2020-04-24 19:02:55 +02:00
Matteo Pagliazzi
c879560445 add ability to log amplitude events (#12120) 2020-04-24 19:02:27 +02:00
Matteo Pagliazzi
26437e7e2e wip: valid unlocked sets 2020-04-24 19:01:03 +02:00
Bart Enkelaar
dc9800d88a Don't bill (subtract gems) multiple times for multiple unlock item set calls (#12116)
* Issue 11050 - Small tuneups to unlock.js

- Use includes i.o. indexOf
- Extract small function for object setting duplication
- Use every instead of custom counter

* Issue 11050 - Properly store purchased items when purchasing them

* Issue 11050 - Couple more tuneups in unlock.js and implemented partial failure scenario

* Issue 11050 - Fix last lint issue

* Issue 11050 - Check path for gear i.o. failing to write it to purchased

* Issue 11050 - Guarantee variation coverage in tests

* Issue 11050 - Use startsWith instead of includes for background check

* Issue 11050 - Don't unlock lost items
2020-04-24 16:16:34 +02:00
Matteo Pagliazzi
39fcb3e876 Merge branch 'release' into develop 2020-04-24 12:06:31 +02:00
Matteo Pagliazzi
188023b197 fix #12118: pass mandatory second parameter to markdown-it parse method 2020-04-24 12:06:05 +02:00
Matteo Pagliazzi
e47b0982c8 fix(i18n): remove loadingscreentips.json from non english folders 2020-04-23 23:25:25 +02:00
Melior
92f217775b Merge branch 'origin/develop' into Weblate. 2020-04-23 21:02:15 +02:00
Melior
daf2c354d6 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/zh_Hans/

Translated using Weblate (Dutch)

Currently translated at 89.9% (1881 of 2091 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (694 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (Japanese)

Currently translated at 95.1% (236 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (694 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (German)

Currently translated at 100.0% (694 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

Translated using Weblate (Japanese)

Currently translated at 92.7% (230 of 248 strings)

Translation: Habitica/Subscriber
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (694 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/

Translated using Weblate (German)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/de/

Translated using Weblate (German)

Currently translated at 100.0% (172 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/

Translated using Weblate (German)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/

Translated using Weblate (German)

Currently translated at 100.0% (2091 of 2091 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (German)

Currently translated at 100.0% (298 of 298 strings)

Translation: Habitica/Generic
Translate-URL: https://translate.habitica.com/projects/habitica/generic/de/

Translated using Weblate (German)

Currently translated at 100.0% (56 of 56 strings)

Translation: Habitica/Faq
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/

Translated using Weblate (German)

Currently translated at 100.0% (522 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/

Translated using Weblate (Japanese)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/ja/

Translated using Weblate (German)

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/de/

Translated using Weblate (Japanese)

Currently translated at 100.0% (8 of 8 strings)

Translation: Habitica/Overview
Translate-URL: https://translate.habitica.com/projects/habitica/overview/ja/

Translated using Weblate (Japanese)

Currently translated at 100.0% (492 of 492 strings)

Translation: Habitica/Groups
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/

Translated using Weblate (German)

Currently translated at 100.0% (2091 of 2091 strings)

Translation: Habitica/Gear
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/

Translated using Weblate (Dutch)

Currently translated at 96.3% (669 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nl/

Translated using Weblate (German)

Currently translated at 100.0% (694 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (522 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (522 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (522 of 522 strings)

Translation: Habitica/Backgrounds
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/

Translated using Weblate (English (Pirate))

Currently translated at 100.0% (143 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/en@pirate/

Translated using Weblate (English (Pirate))

Currently translated at 100.0% (358 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/en@pirate/

Translated using Weblate (English (Pirate))

Currently translated at 86.2% (69 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/en@pirate/

Translated using Weblate (Dutch)

Currently translated at 96.2% (668 of 694 strings)

Translation: Habitica/Questscontent
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/nl/

Translated using Weblate (Dutch)

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/

Translated using Weblate (Japanese)

Currently translated at 90.7% (127 of 140 strings)

Translation: Habitica/Quests
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/

Translated using Weblate (Swedish)

Currently translated at 93.0% (133 of 143 strings)

Translation: Habitica/Pets
Translate-URL: https://translate.habitica.com/projects/habitica/pets/sv/

Translated using Weblate (Swedish)

Currently translated at 75.0% (60 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/sv/

Translated using Weblate (Russian)

Currently translated at 88.7% (71 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/

Translated using Weblate (Dutch)

Currently translated at 98.7% (79 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/

Translated using Weblate (Japanese)

Currently translated at 100.0% (172 of 172 strings)

Translation: Habitica/Npc
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/

Translated using Weblate (Russian)

Currently translated at 97.2% (175 of 180 strings)

Translation: Habitica/Limited
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/

Translated using Weblate (Russian)

Currently translated at 99.7% (357 of 358 strings)

Translation: Habitica/Content
Translate-URL: https://translate.habitica.com/projects/habitica/content/ru/

Translated using Weblate (Russian)

Currently translated at 88.7% (71 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/

Translated using Weblate (German)

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/

Translated using Weblate (Dutch)

Currently translated at 96.2% (77 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hant/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/

Translated using Weblate (English (United Kingdom))

Currently translated at 100.0% (80 of 80 strings)

Translation: Habitica/Achievements
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/en_GB/
2020-04-23 21:02:04 +02:00
Carl Vuorinen
2ba6e972c3 Clear invite errors once user starts typing
Since the error condition is not valid anymore and needs to be chacked again when they stop typing.
2020-04-22 08:55:26 +03:00
Carl Vuorinen
6bacb89271 Better handling of group Send Invites button
Run validation check from @input event rather than @change so that it is executed after user stops typing instead of on blur.
Fix cannotSubmit (bound to button :disabled) so that it correctly checks that at least one invite is filled and all filled invites are valid.
2020-04-22 08:53:55 +03:00
2821 changed files with 78737 additions and 109588 deletions

View File

@@ -10,6 +10,7 @@ dist/
dist-client/
apidoc_build/
content_cache/
i18n_cache/
node_modules/
# Old migrations, disabled

View File

@@ -8,13 +8,8 @@
# Requesting a feature
Habitica uses [Trello](https://trello.com/b/EpoYEYod/habitica) to track feature requests. [Read more](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents).
Habitica uses [this Google form](https://docs.google.com/forms/d/e/1FAIpQLScPhrwq_7P1C6PTrI3lbvTsvqGyTNnGzp1ugi1Ml0PFee_p5g/viewform?usp=sf_link) to track feature requests. Please post there rather than creating an issue.
# Contributing Code
See [Contributing to Habitica](http://habitica.fandom.com/wiki/Contributing_to_Habitica#Coders_.28Web_.26_Mobile.29)
## Issue Triage [![Open Source Helpers](https://www.codetriage.com/habitrpg/habitica/badges/users.svg)](https://www.codetriage.com/habitrpg/habitica)
You can triage issues which may include reproducing bug reports or asking for vital information, such as version numbers or reproduction instructions. If you would like to start triaging issues, one easy way to get started is to [subscribe to habitrpg on CodeTriage](https://www.codetriage.com/habitrpg/habitica).

View File

@@ -22,6 +22,7 @@ jobs:
npm ci
env:
CI: true
NODE_ENV: test
- run: npm run lint-no-fix
apidoc:
runs-on: ubuntu-latest
@@ -42,6 +43,7 @@ jobs:
npm ci
env:
CI: true
NODE_ENV: test
- run: npm run apidoc
sanity:
runs-on: ubuntu-latest
@@ -62,6 +64,7 @@ jobs:
npm ci
env:
CI: true
NODE_ENV: test
- run: npm run test:sanity
common:
@@ -83,6 +86,7 @@ jobs:
npm ci
env:
CI: true
NODE_ENV: test
- run: npm run test:common
content:
runs-on: ubuntu-latest
@@ -103,6 +107,7 @@ jobs:
npm ci
env:
CI: true
NODE_ENV: test
- run: npm run test:content
api-unit:
@@ -110,6 +115,7 @@ jobs:
strategy:
matrix:
node-version: [12.x]
mongodb-version: [4.2]
steps:
- uses: actions/checkout@v1
with:
@@ -118,13 +124,18 @@ jobs:
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: sudo docker run --name mongo -d -p 27017:27017 mongo
- name: Start MongoDB ${{ matrix.mongodb-version }} Replica Set
uses: supercharge/mongodb-github-action@1.3.0
with:
mongodb-version: ${{ matrix.mongodb-version }}
mongodb-replica-set: rs
- run: cp config.json.example config.json
- name: npm install
run: |
npm ci
env:
CI: true
NODE_ENV: test
- run: npm run test:api:unit
env:
REQUIRES_SERVER=true: true
@@ -133,6 +144,7 @@ jobs:
strategy:
matrix:
node-version: [12.x]
mongodb-version: [4.2]
steps:
- uses: actions/checkout@v1
with:
@@ -141,13 +153,18 @@ jobs:
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: sudo docker run --name mongo -d -p 27017:27017 mongo
- name: Start MongoDB ${{ matrix.mongodb-version }} Replica Set
uses: supercharge/mongodb-github-action@1.3.0
with:
mongodb-version: ${{ matrix.mongodb-version }}
mongodb-replica-set: rs
- run: cp config.json.example config.json
- name: npm install
run: |
npm ci
env:
CI: true
NODE_ENV: test
- run: npm run test:api-v3:integration
env:
REQUIRES_SERVER=true: true
@@ -156,6 +173,7 @@ jobs:
strategy:
matrix:
node-version: [12.x]
mongodb-version: [4.2]
steps:
- uses: actions/checkout@v1
with:
@@ -164,13 +182,18 @@ jobs:
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: sudo docker run --name mongo -d -p 27017:27017 mongo
- name: Start MongoDB ${{ matrix.mongodb-version }} Replica Set
uses: supercharge/mongodb-github-action@1.3.0
with:
mongodb-version: ${{ matrix.mongodb-version }}
mongodb-replica-set: rs
- run: cp config.json.example config.json
- name: npm install
run: |
npm ci
env:
CI: true
NODE_ENV: test
- run: npm run test:api-v4:integration
env:
REQUIRES_SERVER=true: true
@@ -194,5 +217,6 @@ jobs:
npm ci
env:
CI: true
NODE_ENV: test
- run: npm run test:unit
working-directory: ./website/client

6
.gitignore vendored
View File

@@ -4,6 +4,7 @@ website/transpiled-babel/
website/common/transpiled-babel/
node_modules
content_cache
i18n_cache
apidoc_build
*.swp
.idea*
@@ -37,7 +38,12 @@ yarn.lock
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml
/.vscode
# webstorm fake webpack for path intellisense
webpack.webstorm.config
# mongodb replica set for local dev
mongodb-*.tgz
/mongodb-data

View File

@@ -1,6 +1,6 @@
* Code is GPL v3 licensed:
This Source Code is subject to the terms of the GNU General Public License, v. 3.0.
If a copy of the GPL was not distributed with this file, You can obtain one at http://www.gnu.org/licenses/gpl-3.0.txt
If a copy of the GPL was not distributed with this file, you can obtain one at http://www.gnu.org/licenses/gpl-3.0.txt
* Assets and content designed for Mozilla BrowserQuest are licensed under CC-BY-SA 3.0:
http://creativecommons.org/licenses/by-sa/3.0/

View File

@@ -1,4 +1,4 @@
Habitica ![Build Status](https://github.com/HabitRPG/habitica/workflows/Test/badge.svg) [![Code Climate](https://codeclimate.com/github/HabitRPG/habitrpg.svg)](https://codeclimate.com/github/HabitRPG/habitrpg) [![Bountysource](https://api.bountysource.com/badge/tracker?tracker_id=68393)](https://www.bountysource.com/trackers/68393-habitrpg?utm_source=68393&utm_medium=shield&utm_campaign=TRACKER_BADGE) [![Open Source Helpers](https://www.codetriage.com/habitrpg/habitica/badges/users.svg)](https://www.codetriage.com/habitrpg/habitica)
Habitica ![Build Status](https://github.com/HabitRPG/habitica/workflows/Test/badge.svg) [![Code Climate](https://codeclimate.com/github/HabitRPG/habitrpg.svg)](https://codeclimate.com/github/HabitRPG/habitrpg) [![Bountysource](https://api.bountysource.com/badge/tracker?tracker_id=68393)](https://www.bountysource.com/trackers/68393-habitrpg?utm_source=68393&utm_medium=shield&utm_campaign=TRACKER_BADGE)
===============
[Habitica](https://habitica.com) is an open source habit building program which treats your life like a Role Playing Game. Level up as you succeed, lose HP as you fail, earn money to buy weapons and armor.

View File

@@ -2,6 +2,10 @@
"name": "Habitica V3 API Documentation",
"title": "Habitica",
"url": "https://habitica.com",
"header": {
"title": "Introduction",
"filename": "apidoc/header.md"
},
"template": {
"withCompare": false
}

5
apidoc/header.md Normal file
View File

@@ -0,0 +1,5 @@
# Introduction
This webpage includes the documentation for version 3 of the [Habitica](https://habitica.com) API.
If you're developing a 3rd party tool that uses the Habitica API you should read the [Guidance for Comrades](https://habitica.fandom.com/wiki/Guidance_for_Comrades) and in particular the section called [Rules for Third-Party Tools](https://habitica.fandom.com/wiki/Guidance_for_Comrades#Rules_for_Third-Party_Tools) which includes suggestions on how to best use the API and the rules to follow when interacting with it.

View File

@@ -32,7 +32,8 @@
"LOGGLY_SUBDOMAIN": "example-subdomain",
"LOGGLY_TOKEN": "example-token",
"MAINTENANCE_MODE": "false",
"NODE_DB_URI": "mongodb://localhost:27017/habitrpg",
"NODE_DB_URI": "mongodb://localhost:27017/habitica-dev?replicaSet=rs",
"TEST_DB_URI": "mongodb://localhost:27017/habitica-test?replicaSet=rs",
"MONGODB_POOL_SIZE": "10",
"NODE_ENV": "development",
"PATH": "bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin",
@@ -70,7 +71,6 @@
"SLACK_URL": "https://hooks.slack.com/services/some-url",
"STRIPE_API_KEY": "aaaabbbbccccddddeeeeffff00001111",
"STRIPE_PUB_KEY": "22223333444455556666777788889999",
"TEST_DB_URI": "mongodb://localhost:27017/habitrpg_test",
"TRANSIFEX_SLACK_CHANNEL": "transifex",
"WEB_CONCURRENCY": 1,
"SKIP_SSL_CHECK_KEY": "key",
@@ -79,5 +79,10 @@
"APPLE_TEAM_ID": "",
"APPLE_AUTH_CLIENT_ID": "",
"APPLE_AUTH_KEY_ID": "",
"BLOCKED_IPS": ""
"BLOCKED_IPS": "",
"LOG_AMPLITUDE_EVENTS": "false",
"RATE_LIMITER_ENABLED": "false",
"REDIS_HOST": "aaabbbcccdddeeefff",
"REDIS_PORT": "1234",
"REDIS_PASSWORD": "12345678"
}

View File

@@ -1,5 +1,12 @@
/* eslint-disable no-console */
import gulp from 'gulp';
import path from 'path';
import babel from 'gulp-babel';
import os from 'os';
import fs from 'fs';
import spawn from 'cross-spawn'; // eslint-disable-line import/no-extraneous-dependencies
import clean from 'rimraf';
gulp.task('build:babel:server', () => gulp.src('website/server/**/*.js')
.pipe(babel())
@@ -11,10 +18,71 @@ gulp.task('build:babel:common', () => gulp.src('website/common/script/**/*.js')
gulp.task('build:babel', gulp.parallel('build:babel:server', 'build:babel:common', done => done()));
gulp.task('build:cache', gulp.parallel(
'cache:content',
'cache:i18n',
done => done(),
));
gulp.task('build:prod', gulp.series(
'build:babel',
'apidoc',
'content:cache',
'build:cache',
done => done(),
));
// Due to this issue https://github.com/vkarpov15/run-rs/issues/45
// When used on windows `run-rs` must first be run without the `--keep` option
// in order to be setup correctly, afterwards it can be used.
const MONGO_PATH = path.join(__dirname, '/../mongodb-data/');
gulp.task('build:prepare-mongo', async () => {
if (fs.existsSync(MONGO_PATH)) {
// console.log('MongoDB data folder exists, skipping setup.');
return;
}
if (os.platform() !== 'win32') {
// console.log('Not on Windows, skipping MongoDB setup.');
return;
}
console.log('MongoDB data folder is missing, setting up.'); // eslint-disable-line no-console
// use run-rs without --keep, kill it as soon as the replica set starts
const runRsProcess = spawn('run-rs', ['-v', '4.2.8', '-l', 'ubuntu1804', '--dbpath', 'mongodb-data', '--number', '1', '--quiet']);
for await (const chunk of runRsProcess.stdout) {
const stringChunk = chunk.toString();
console.log(stringChunk); // eslint-disable-line no-console
// kills the process after the replica set is setup
if (stringChunk.includes('Started replica set')) {
console.log('MongoDB setup correctly.'); // eslint-disable-line no-console
runRsProcess.kill();
}
}
let error = '';
for await (const chunk of runRsProcess.stderr) {
const stringChunk = chunk.toString();
error += stringChunk;
}
const exitCode = await new Promise(resolve => {
runRsProcess.on('close', resolve);
});
if (exitCode || error.length > 0) {
// remove any leftover files
clean.sync(MONGO_PATH);
throw new Error(`Error running run-rs: ${error}`);
}
});
gulp.task('build:dev', gulp.series(
'build:prepare-mongo',
done => done(),
));
@@ -22,6 +90,8 @@ const buildArgs = [];
if (process.env.NODE_ENV === 'production') { // eslint-disable-line no-process-env
buildArgs.push('build:prod');
} else if (process.env.NODE_ENV !== 'test') { // eslint-disable-line no-process-env
buildArgs.push('build:dev');
}
gulp.task('build', gulp.series(buildArgs, done => {

View File

@@ -2,7 +2,7 @@ import gulp from 'gulp';
import fs from 'fs';
// TODO parallelize, use gulp file helpers
gulp.task('content:cache', done => {
gulp.task('cache:content', done => {
// Requiring at runtime because these files access `common`
// code which in production works only if transpiled so after
// gulp build:babel:common has run
@@ -32,3 +32,32 @@ gulp.task('content:cache', done => {
done(err);
}
});
gulp.task('cache:i18n', done => {
// Requiring at runtime because these files access `common`
// code which in production works only if transpiled so after
// gulp build:babel:common has run
const { BROWSER_SCRIPT_CACHE_PATH, geti18nBrowserScript } = require('../website/server/libs/i18n'); // eslint-disable-line global-require
const { langCodes } = require('../website/server/libs/i18n'); // eslint-disable-line global-require
try {
// create the cache folder (if it doesn't exist)
try {
fs.mkdirSync(BROWSER_SCRIPT_CACHE_PATH);
} catch (err) {
if (err.code !== 'EEXIST') throw err;
}
// create and save the i18n browser script for each language
langCodes.forEach(languageCode => {
fs.writeFileSync(
`${BROWSER_SCRIPT_CACHE_PATH}${languageCode}.js`,
geti18nBrowserScript(languageCode),
'utf8',
);
});
done();
} catch (err) {
done(err);
}
});

View File

@@ -3,6 +3,10 @@ import nconf from 'nconf';
import repl from 'repl';
import gulp from 'gulp';
import logger from '../website/server/libs/logger';
import {
getDevelopmentConnectionUrl,
getDefaultConnectionOptions,
} from '../website/server/libs/mongodb';
// Add additional properties to the repl's context
const improveRepl = context => {
@@ -26,13 +30,14 @@ const improveRepl = context => {
context.Group = require('../website/server/models/group').model; // eslint-disable-line global-require
context.User = require('../website/server/models/user').model; // eslint-disable-line global-require
const isProd = nconf.get('NODE_ENV') === 'production';
const mongooseOptions = !isProd ? {} : {
keepAlive: 1,
connectTimeoutMS: 30000,
};
const IS_PROD = nconf.get('NODE_ENV') === 'production';
const NODE_DB_URI = nconf.get('NODE_DB_URI');
const mongooseOptions = getDefaultConnectionOptions();
const connectionUrl = IS_PROD ? NODE_DB_URI : getDevelopmentConnectionUrl(NODE_DB_URI);
mongoose.connect(
nconf.get('NODE_DB_URI'),
connectionUrl,
mongooseOptions,
err => {
if (err) throw err;

View File

@@ -161,4 +161,4 @@ gulp.task('sprites:checkCompiledDimensions', gulp.series('sprites:main', 'sprite
done();
}));
gulp.task('sprites:compile', gulp.series('sprites:clean', 'sprites:main', 'sprites:largeSprites', 'sprites:checkCompiledDimensions', done => done()));
gulp.task('sprites:compile', gulp.series('sprites:clean', 'sprites:checkCompiledDimensions', done => done()));

View File

@@ -3,9 +3,11 @@ 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';
getDevelopmentConnectionUrl,
getDefaultConnectionOptions,
} from '../website/server/libs/mongodb';
// TODO rewrite
@@ -17,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 !== '') {
@@ -37,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
@@ -44,7 +56,10 @@ gulp.task('test:nodemon', gulp.series(done => {
}, 'nodemon'));
gulp.task('test:prepare:mongo', cb => {
mongoose.connect(TEST_DB_URI, err => {
const mongooseOptions = getDefaultConnectionOptions();
const connectionUrl = getDevelopmentConnectionUrl(TEST_DB_URI);
mongoose.connect(connectionUrl, mongooseOptions, err => {
if (err) return cb(`Unable to connect to mongo database. Are you sure it's running? \n\n${err}`);
return mongoose.connection.dropDatabase(err2 => {
if (err2) return cb(err2);
@@ -75,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()));
@@ -123,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()))));
@@ -146,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',
@@ -160,82 +142,51 @@ gulp.task('test:content:safe', gulp.series('test:prepare:build', cb => {
pipe(runner);
}));
gulp.task('test:api:unit', 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();
},
);
gulp.task('test:api:unit:run',
runInChildProcess(integrationTestCommand('test/api/unit', 'coverage/api-unit')));
pipe(runner);
});
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:unit:watch', () => gulp.watch(['website/server/libs/*', 'test/api/unit/**/*', 'website/server/controllers/**/*'], gulp.series('test:api:unit', done => done())));
gulp.task('test:api-v3:integration', 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', 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();
},
);
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',
));
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:unit', gulp.series(
'test:prepare:mongo',
'test:api:unit:run',
done => done(),
));
gulp.task('test', gulp.series(
'test:sanity',
'test:content',
'test:common',
'test:api:unit',
'test:api:unit:run',
'test:api-v3:integration',
'test:api-v4:integration',
done => done(),

View File

@@ -12,7 +12,6 @@ const SLACK_CONFIG = {
const LOCALES = './website/common/locales/';
const ENGLISH_LOCALE = `${LOCALES}en/`;
function getArrayOfLanguages () {
const languages = fs.readdirSync(LOCALES);
languages.shift(); // Remove README.md from array of languages

View File

@@ -13,11 +13,11 @@ const gulp = require('gulp');
if (process.env.NODE_ENV === 'production') { // eslint-disable-line no-process-env
require('./gulp/gulp-apidoc'); // eslint-disable-line global-require
require('./gulp/gulp-content'); // eslint-disable-line global-require
require('./gulp/gulp-cache'); // eslint-disable-line global-require
require('./gulp/gulp-build'); // eslint-disable-line global-require
} else {
require('./gulp/gulp-apidoc'); // eslint-disable-line global-require
require('./gulp/gulp-content'); // eslint-disable-line global-require
require('./gulp/gulp-cache'); // eslint-disable-line global-require
require('./gulp/gulp-build'); // eslint-disable-line global-require
require('./gulp/gulp-console'); // eslint-disable-line global-require
require('./gulp/gulp-sprites'); // eslint-disable-line global-require

View File

@@ -0,0 +1,59 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20200721_summer_splash_orcas';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
let set;
if (user && user.items && user.items.pets && typeof user.items.pets['Orca-Base'] !== 'undefined') {
set = { migration: MIGRATION_NAME };
} else if (user && user.items && user.items.mounts && typeof user.items.mounts['Orca-Base'] !== 'undefined') {
set = { migration: MIGRATION_NAME, 'items.pets.Orca-Base': 5 };
} else {
set = { migration: MIGRATION_NAME, 'items.mounts.Orca-Base': true };
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({ _id: user._id }, { $set: set }).exec();
}
export default async function processUsers () {
let query = {
migration: {$ne: MIGRATION_NAME},
'auth.timestamps.loggedin': {$gt: new Date('2020-06-21')},
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1],
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};

View File

@@ -0,0 +1,87 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20200731_naming_day';
import { v4 as uuid } from 'uuid';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
let set;
let push;
const inc = {
'items.food.Cake_Base': 1,
'items.food.Cake_CottonCandyBlue': 1,
'items.food.Cake_CottonCandyPink': 1,
'items.food.Cake_Desert': 1,
'items.food.Cake_Golden': 1,
'items.food.Cake_Red': 1,
'items.food.Cake_Shade': 1,
'items.food.Cake_Skeleton': 1,
'items.food.Cake_White': 1,
'items.food.Cake_Zombie': 1,
'achievements.habiticaDays': 1,
};
if (user && user.items && user.items.gear && user.items.gear.owned && typeof user.items.gear.owned.back_special_namingDay2020 !== 'undefined') {
set = { migration: MIGRATION_NAME };
} else if (user && user.items && user.items.gear && user.items.gear.owned && typeof user.items.gear.owned.body_special_namingDay2018 !== 'undefined') {
set = { migration: MIGRATION_NAME, 'items.gear.owned.back_special_namingDay2020': false };
push = { pinnedItems: { type: 'marketGear', path: 'gear.flat.back_special_namingDay2020', _id: uuid() }};
} else if (user && user.items && user.items.gear && user.items.gear.owned && typeof user.items.gear.owned.head_special_namingDay2017 !== 'undefined') {
set = { migration: MIGRATION_NAME, 'items.gear.owned.body_special_namingDay2018': false };
push = { pinnedItems: { type: 'marketGear', path: 'gear.flat.body_special_namingDay2018', _id: uuid() }};
} else if (user && user.items && user.items.pets && typeof user.items.pets['Gryphon-RoyalPurple'] !== 'undefined') {
set = { migration: MIGRATION_NAME, 'items.gear.owned.head_special_namingDay2017': false };
push = { pinnedItems: { type: 'marketGear', path: 'gear.flat.head_special_namingDay2017', _id: uuid() }};
} else if (user && user.items && user.items.mounts && typeof user.items.mounts['Gryphon-RoyalPurple'] !== 'undefined') {
set = { migration: MIGRATION_NAME, 'items.pets.Gryphon-RoyalPurple': 5 };
} else {
set = { migration: MIGRATION_NAME, 'items.mounts.Gryphon-RoyalPurple': true };
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
if (push) {
return await User.update({ _id: user._id }, { $set: set, $inc: inc, $push: push }).exec();
} else {
return await User.update({ _id: user._id }, { $set: set, $inc: inc }).exec();
}
}
export default async function processUsers () {
let query = {
migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2020-07-01') },
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1]._id,
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};

View File

@@ -1,5 +1,5 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20200218_pet_color_achievements';
const MIGRATION_NAME = '20200818_pet_color_achievements';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
@@ -14,31 +14,31 @@ async function updateUser (user) {
if (user && user.items && user.items.pets) {
const pets = user.items.pets;
if (pets['Wolf-CottonCandyPink'] > 0
&& pets['TigerCub-CottonCandyPink'] > 0
&& pets['PandaCub-CottonCandyPink'] > 0
&& pets['LionCub-CottonCandyPink'] > 0
&& pets['Fox-CottonCandyPink'] > 0
&& pets['FlyingPig-CottonCandyPink'] > 0
&& pets['Dragon-CottonCandyPink'] > 0
&& pets['Cactus-CottonCandyPink'] > 0
&& pets['BearCub-CottonCandyPink'] > 0) {
set['achievements.tickledPink'] = true;
if (pets['Wolf-Golden'] > 0
&& pets['TigerCub-Golden'] > 0
&& pets['PandaCub-Golden'] > 0
&& pets['LionCub-Golden'] > 0
&& pets['Fox-Golden'] > 0
&& pets['FlyingPig-Golden'] > 0
&& pets['Dragon-Golden'] > 0
&& pets['Cactus-Golden'] > 0
&& pets['BearCub-Golden'] > 0) {
set['achievements.goodAsGold'] = true;
}
}
if (user && user.items && user.items.mounts) {
const mounts = user.items.mounts;
if (mounts['Wolf-CottonCandyPink']
&& mounts['TigerCub-CottonCandyPink']
&& mounts['PandaCub-CottonCandyPink']
&& mounts['LionCub-CottonCandyPink']
&& mounts['Fox-CottonCandyPink']
&& mounts['FlyingPig-CottonCandyPink']
&& mounts['Dragon-CottonCandyPink']
&& mounts['Cactus-CottonCandyPink']
&& mounts['BearCub-CottonCandyPink'] ) {
set['achievements.rosyOutlook'] = true;
if (mounts['Wolf-Golden']
&& mounts['TigerCub-Golden']
&& mounts['PandaCub-Golden']
&& mounts['LionCub-Golden']
&& mounts['Fox-Golden']
&& mounts['FlyingPig-Golden']
&& mounts['Dragon-Golden']
&& mounts['Cactus-Golden']
&& mounts['BearCub-Golden'] ) {
set['achievements.allThatGlitters'] = true;
}
}
@@ -50,7 +50,7 @@ async function updateUser (user) {
module.exports = async function processUsers () {
let query = {
migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2020-02-01') },
'auth.timestamps.loggedin': { $gt: new Date('2020-08-01') },
};
const fields = {

View File

@@ -32,13 +32,11 @@
*
*/
// CONFIGURATION:
// - Change the uuid below to be the user's uuid.
// - Change ALL instances of "todos" to "habits"/"dailys"/"rewards" as
// needed. Do not miss any of them!
const uuid = '30fb2640-7121-4968-ace5-f385e60ea6c5';
db.users.aggregate([

View File

@@ -2,7 +2,6 @@
// @authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
// @authorUuid = ''; // ... own data is done
/*
* This migration moves chat off of groups and into their own model
*/
@@ -38,7 +37,6 @@ async function moveGroupChatToModel (skip = 0) {
return chatpromises;
});
const reducedPromises = promises.reduce((acc, curr) => {
acc = acc.concat(curr); // eslint-disable-line no-param-reassign
return acc;

View File

@@ -45,7 +45,7 @@ async function fixGroupPlanMembers () {
pause();
groupPlanCount += 1;
const canonicalMemberCount = await dbUsers.count(
const canonicalMemberCount = await dbUsers.countDocuments(
{
$or:
[

View File

@@ -25,7 +25,6 @@ const monk = require('monk'); // eslint-disable-line import/no-extraneous-depend
const dbUsers = monk(connectionString).get('users', { castIds: false });
function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
const query = {
@@ -86,7 +85,6 @@ function updateUser (user) {
const set = { migration: migrationName, 'flags.armoireEmpty': false };
if (user.flags.armoireEmpty) {
// this user believes their armoire has no more items in it
if (

View File

@@ -121,5 +121,4 @@ function exiting (code, msg) {
process.exit(code);
}
processUsers();

View File

@@ -9,7 +9,6 @@ const authorUuid = 'ed4c688c-6652-4a92-9d03-a5a79844174a'; // ... own data is do
*/
const connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
const dbUsers = monk(connectionString).get('users', { castIds: false });
function processUsers (lastId) {

View File

@@ -0,0 +1,73 @@
import { model as User } from '../../website/server/models/user';
const MIGRATION_NAME = 'tag-challenge-field-string2bool';
const progressCount = 1000;
let count = 0;
export default async function processUsers () {
const query = {
migration: { $ne: MIGRATION_NAME },
tags: {
$elemMatch: {
challenge: {
$exists: true,
$type: 'string',
},
},
},
};
while (true) { // eslint-disable-line no-constant-condition
// eslint-disable-next-line no-await-in-loop
const users = await User.find(query)
.sort({ _id: 1 })
.limit(250)
.select({ _id: 1, tags: 1 })
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1],
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
}
async function updateUser (user) {
count += 1;
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
let requiresUpdate = false;
if (user && user.tags) {
user.tags.forEach(tag => {
if (tag && typeof tag.challenge === 'string') {
requiresUpdate = true;
if (tag.challenge === 'true') {
tag.challenge = true;
} else if (tag.challenge === 'false') {
tag.challenge = false;
} else {
tag.challenge = null;
}
}
});
}
if (requiresUpdate) {
const set = {
migration: MIGRATION_NAME,
tags: user.tags,
};
return User.update({ _id: user._id }, { $set: set }).exec();
}
return null;
}

8269
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,26 +1,26 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.140.9",
"version": "4.165.2",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.9.0",
"@babel/preset-env": "^7.9.5",
"@babel/register": "^7.9.0",
"@google-cloud/trace-agent": "^4.2.5",
"@babel/core": "^7.11.6",
"@babel/preset-env": "^7.11.5",
"@babel/register": "^7.11.5",
"@google-cloud/trace-agent": "^5.1.1",
"@slack/client": "^4.12.0",
"accepts": "^1.3.5",
"amazon-payments": "^0.2.8",
"amplitude": "^3.5.0",
"apidoc": "^0.17.5",
"apidoc": "^0.25.0",
"apn": "^2.2.0",
"apple-auth": "^1.0.5",
"bcrypt": "^3.0.8",
"apple-auth": "^1.0.6",
"bcrypt": "^5.0.0",
"body-parser": "^1.18.3",
"compression": "^1.7.4",
"cookie-session": "^1.4.0",
"coupon-code": "^0.4.5",
"csv-stringify": "^5.3.6",
"csv-stringify": "^5.5.1",
"cwait": "^1.1.1",
"domain-middleware": "~0.1.0",
"eslint": "^6.8.0",
@@ -30,48 +30,51 @@
"express-basic-auth": "^1.1.5",
"express-validator": "^5.2.0",
"glob": "^7.1.6",
"got": "^10.7.0",
"got": "^11.7.0",
"gulp": "^4.0.0",
"gulp-babel": "^8.0.0",
"gulp-imagemin": "^6.2.0",
"gulp-imagemin": "^7.1.0",
"gulp-nodemon": "^2.5.0",
"gulp.spritesmith": "^6.9.0",
"habitica-markdown": "^1.3.2",
"helmet": "^3.22.0",
"image-size": "^0.8.3",
"habitica-markdown": "^3.0.0",
"helmet": "^3.23.3",
"image-size": "^0.9.1",
"in-app-purchase": "^1.11.3",
"js2xmlparser": "^4.0.1",
"jsonwebtoken": "^8.5.1",
"jwks-rsa": "^1.8.0",
"lodash": "^4.17.15",
"jwks-rsa": "^1.10.1",
"lodash": "^4.17.20",
"merge-stream": "^2.0.0",
"method-override": "^3.0.0",
"moment": "^2.24.0",
"moment": "^2.29.1",
"moment-recur": "^1.0.7",
"mongoose": "^5.9.9",
"mongoose": "^5.10.9",
"morgan": "^1.10.0",
"nconf": "^0.10.0",
"node-gcm": "^1.0.2",
"node-gcm": "^1.0.3",
"on-headers": "^1.0.2",
"passport": "^0.4.1",
"passport-facebook": "^3.0.0",
"passport-google-oauth2": "^0.2.0",
"passport-google-oauth20": "1.0.0",
"paypal-ipn": "3.0.0",
"paypal-rest-sdk": "^1.8.1",
"pp-ipn": "^1.1.0",
"ps-tree": "^1.0.0",
"regenerator-runtime": "^0.13.5",
"rate-limiter-flexible": "^2.1.10",
"redis": "^3.0.2",
"regenerator-runtime": "^0.13.7",
"remove-markdown": "^0.3.0",
"rimraf": "^3.0.2",
"short-uuid": "^3.0.0",
"stripe": "^7.15.0",
"superagent": "^5.2.2",
"universal-analytics": "^0.4.17",
"superagent": "^6.1.0",
"universal-analytics": "^0.4.23",
"useragent": "^2.1.9",
"uuid": "^3.4.0",
"validator": "^11.0.0",
"uuid": "^8.3.1",
"validator": "^13.1.17",
"vinyl-buffer": "^1.0.1",
"winston": "^3.2.1",
"winston-loggly-bulk": "^3.1.0",
"winston": "^3.3.3",
"winston-loggly-bulk": "^3.1.1",
"xml2js": "^0.4.23"
},
"private": true,
@@ -100,6 +103,8 @@
"client:build": "cd website/client && npm run build",
"client:unit": "cd website/client && npm run test:unit",
"start": "gulp nodemon",
"debug": "gulp nodemon --inspect",
"mongo:dev": "run-rs -v 4.2.8 -l ubuntu1804 --keep --dbpath mongodb-data --number 1 --quiet",
"postinstall": "gulp build && cd website/client && npm install",
"apidoc": "gulp apidoc"
},
@@ -107,13 +112,16 @@
"axios": "^0.19.2",
"chai": "^4.1.2",
"chai-as-promised": "^7.1.1",
"chalk": "^3.0.0",
"chai-moment": "^0.1.0",
"chalk": "^4.1.0",
"cross-spawn": "^7.0.3",
"expect.js": "^0.3.1",
"istanbul": "^1.1.0-alpha.1",
"mocha": "^5.1.1",
"monk": "^7.2.0",
"monk": "^7.3.2",
"require-again": "^2.0.0",
"sinon": "^7.2.4",
"run-rs": "^0.6.2",
"sinon": "^9.2.0",
"sinon-chai": "^3.5.0",
"sinon-stub-promise": "^4.0.0"
},

View File

@@ -31,20 +31,22 @@ async function deleteAmplitudeData (userId, email) {
console.log(`${userId} (${email}) Amplitude response: ${response.status} ${response.statusText}`);
}
}
await new Promise(resolve => setTimeout(resolve, 1000));
}
async function deleteHabiticaData (user, email) {
const truncatedEmail = email.slice(0, email.indexOf('@'));
const set = {
'auth.blocked': false,
'auth.local.hashed_password': '$2a$10$QDnNh1j1yMPnTXDEOV38xOePEWFd4X8DSYwAM8XTmqmacG5X0DKjW',
'auth.local.passwordHashMethod': 'bcrypt',
};
if (!user.auth.local.email) set['auth.local.email'] = `${truncatedEmail}-gdpr@example.com`;
await User.update(
{ _id: user._id },
{
$set: {
'auth.local.email': user.auth.local.email ? email : `${truncatedEmail}@example.com`,
'auth.local.hashed_password': '$2a$10$QDnNh1j1yMPnTXDEOV38xOePEWFd4X8DSYwAM8XTmqmacG5X0DKjW',
'auth.local.passwordHashMethod': 'bcrypt',
},
},
{ $set: set },
);
await new Promise(resolve => setTimeout(resolve, 1000));
const response = await axios.delete(
`${BASE_URL}/api/v3/user`,
{
@@ -78,6 +80,7 @@ async function processEmailAddress (email) {
const socialUsers = await User.find(
{
'auth.local.email': { $not: emailRegex },
$or: [
{ 'auth.facebook.emails.value': email },
{ 'auth.google.emails.value': email },

View File

@@ -56,7 +56,6 @@ describe('Base model plugin', () => {
expect(sanitized).not.to.have.property('usuallySettable');
});
it('can make fields private', () => {
schema.plugin(baseModel, {
private: ['amPrivate'],

View File

@@ -42,13 +42,13 @@ describe('cron', () => {
});
it('updates user.preferences.timezoneOffsetAtLastCron', () => {
const timezoneOffsetFromUserPrefs = 1;
const timezoneUtcOffsetFromUserPrefs = -1;
cron({
user, tasksByType, daysMissed, analytics, timezoneOffsetFromUserPrefs,
user, tasksByType, daysMissed, analytics, timezoneUtcOffsetFromUserPrefs,
});
expect(user.preferences.timezoneOffsetAtLastCron).to.equal(timezoneOffsetFromUserPrefs);
expect(user.preferences.timezoneOffsetAtLastCron).to.equal(1);
});
it('resets user.items.lastDrop.count', () => {
@@ -240,7 +240,7 @@ describe('cron', () => {
user1.purchased.plan.consecutive.gemCapExtra = 0;
it('does not increment consecutive benefits after the first month', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(1, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months')
.add(2, 'days')
.toDate());
// Add 1 month to simulate what happens a month after the subscription was created.
@@ -256,7 +256,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits after the second month', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(2, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months')
.add(2, 'days')
.toDate());
// Add 1 month to simulate what happens a month after the subscription was created.
@@ -272,7 +272,7 @@ describe('cron', () => {
});
it('increments consecutive benefits after the third month', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(3, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(3, 'months')
.add(2, 'days')
.toDate());
// Add 1 month to simulate what happens a month after the subscription was created.
@@ -288,7 +288,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits after the fourth month', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(4, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(4, 'months')
.add(2, 'days')
.toDate());
// Add 1 month to simulate what happens a month after the subscription was created.
@@ -304,7 +304,7 @@ describe('cron', () => {
});
it('increments consecutive benefits correctly if user has been absent with continuous subscription', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(10, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(10, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -339,7 +339,7 @@ describe('cron', () => {
user3.purchased.plan.consecutive.gemCapExtra = 5;
it('does not increment consecutive benefits in the first month of the first paid period that they already have benefits for', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(1, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -352,7 +352,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the middle of the period that they already have benefits for', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(2, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -365,7 +365,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the final month of the period that they already have benefits for', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(3, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(3, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -378,7 +378,7 @@ describe('cron', () => {
});
it('increments consecutive benefits the month after the second paid period has started', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(4, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(4, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -391,7 +391,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the second month of the second period that they already have benefits for', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(5, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(5, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -404,7 +404,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the final month of the second period that they already have benefits for', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(6, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(6, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -417,7 +417,7 @@ describe('cron', () => {
});
it('increments consecutive benefits the month after the third paid period has started', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(7, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(7, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -430,7 +430,7 @@ describe('cron', () => {
});
it('increments consecutive benefits correctly if user has been absent with continuous subscription', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(10, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(10, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -465,7 +465,7 @@ describe('cron', () => {
user6.purchased.plan.consecutive.gemCapExtra = 10;
it('does not increment consecutive benefits in the first month of the first paid period that they already have benefits for', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(1, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -478,7 +478,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the final month of the period that they already have benefits for', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(6, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(6, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -491,7 +491,7 @@ describe('cron', () => {
});
it('increments consecutive benefits the month after the second paid period has started', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(7, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(7, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -504,7 +504,7 @@ describe('cron', () => {
});
it('increments consecutive benefits the month after the third paid period has started', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(13, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(13, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -517,7 +517,7 @@ describe('cron', () => {
});
it('increments consecutive benefits correctly if user has been absent with continuous subscription', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(19, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(19, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -552,7 +552,7 @@ describe('cron', () => {
user12.purchased.plan.consecutive.gemCapExtra = 20;
it('does not increment consecutive benefits in the first month of the first paid period that they already have benefits for', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(1, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -565,7 +565,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the final month of the period that they already have benefits for', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(12, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(12, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -578,7 +578,7 @@ describe('cron', () => {
});
it('increments consecutive benefits the month after the second paid period has started', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(13, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(13, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -591,7 +591,7 @@ describe('cron', () => {
});
it('increments consecutive benefits the month after the third paid period has started', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(25, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(25, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -604,7 +604,7 @@ describe('cron', () => {
});
it('increments consecutive benefits correctly if user has been absent with continuous subscription', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(37, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(37, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -641,7 +641,7 @@ describe('cron', () => {
user3g.purchased.plan.consecutive.gemCapExtra = 5;
it('does not increment consecutive benefits in the first month of the gift subscription', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(1, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -654,7 +654,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the second month of the gift subscription', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(2, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -667,7 +667,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the third month of the gift subscription', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(3, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(3, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -680,7 +680,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the month after the gift subscription has ended', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(4, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(4, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -717,7 +717,7 @@ describe('cron', () => {
user6x.purchased.plan.consecutive.gemCapExtra = 15;
it('increments consecutive benefits in the first month since the fix for #4819 goes live', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(1, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -730,7 +730,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the second month after the fix goes live', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(2, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -743,7 +743,7 @@ describe('cron', () => {
});
it('does not increment consecutive benefits in the third month after the fix goes live', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(3, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(3, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -756,7 +756,7 @@ describe('cron', () => {
});
it('increments consecutive benefits in the seventh month after the fix goes live', () => {
clock = sinon.useFakeTimers(moment().zone(0).startOf('month').add(7, 'months')
clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(7, 'months')
.add(2, 'days')
.toDate());
cron({
@@ -879,6 +879,11 @@ describe('cron', () => {
tasksByType.todos.push(task);
});
afterEach(() => {
tasksByType.todos = [];
user.tasksOrder.todos = [];
});
it('should make uncompleted todos redder', () => {
const valueBefore = tasksByType.todos[0].value;
cron({
@@ -887,6 +892,15 @@ describe('cron', () => {
expect(tasksByType.todos[0].value).to.be.lessThan(valueBefore);
});
it('should not make completed todos redder', () => {
tasksByType.todos[0].completed = true;
const valueBefore = tasksByType.todos[0].value;
cron({
user, tasksByType, daysMissed, analytics,
});
expect(tasksByType.todos[0].value).to.equal(valueBefore);
});
it('should add history of completed todos to user history', () => {
tasksByType.todos[0].completed = true;
@@ -898,17 +912,13 @@ describe('cron', () => {
});
it('should remove completed todos from users taskOrder list', () => {
tasksByType.todos = [];
user.tasksOrder.todos = [];
const todo = {
text: 'test todo',
type: 'todo',
value: 0,
};
let task = new Tasks.todo(Tasks.Task.sanitize(todo)); // eslint-disable-line new-cap
tasksByType.todos.push(task);
task = new Tasks.todo(Tasks.Task.sanitize(todo)); // eslint-disable-line new-cap
const task = new Tasks.todo(Tasks.Task.sanitize(todo)); // eslint-disable-line new-cap
tasksByType.todos.push(task);
tasksByType.todos[0].completed = true;
@@ -930,8 +940,6 @@ describe('cron', () => {
});
it('should preserve todos order in task list', () => {
tasksByType.todos = [];
user.tasksOrder.todos = [];
const todo = {
text: 'test todo',
type: 'todo',

View File

@@ -1,4 +1,5 @@
import mongoose from 'mongoose';
import highlightMentions from '../../../../website/server/libs/highlightMentions';
describe('highlightMentions', () => {
@@ -64,6 +65,67 @@ describe('highlightMentions', () => {
expect(result[0]).to.equal(text);
});
describe('link interactions', async () => {
it('doesn\'t highlight users in link', async () => {
const text = 'http://www.medium.com/@user/blog';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
it('doesn\'t highlight user in link between brackets', async () => {
const text = '(http://www.medium.com/@user/blog)';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
it('doesn\'t highlight user in an autolink', async () => {
const text = '<http://www.medium.com/@user/blog>';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
it('doesn\'t highlight users in link text', async () => {
const text = '[Check awesome blog written by @user](http://www.medium.com/@user/blog)';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
it('doesn\'t highlight users in link with newlines and markup', async () => {
const text = '[Check `awesome` \nblog **written** by @user](http://www.medium.com/@user/blog)';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
it('doesn\'t highlight users in link when followed by same @user mention', async () => {
const text = 'http://www.medium.com/@user/blog @user';
const result = await highlightMentions(text);
expect(result[0]).to.equal('http://www.medium.com/@user/blog [@user](/profile/111)');
});
// https://spec.commonmark.org/0.29/#example-483
it('doesn\'t highlight user in a link without url', async () => {
const text = '[@user2]()';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
// https://github.com/HabitRPG/habitica/issues/12217
it('doesn\'t highlight user in link with url-escapable characters', async () => {
const text = '[test](https://habitica.fandom.com/ru/@wiki/Снаряжение)';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
// https://github.com/HabitRPG/habitica/issues/12223
it('matches a link in between two the same links', async () => {
const text = '[here](http://habitica.wikia.com/wiki/The_Keep:Pirate_Cove/FAQ)\n@user\n[hier](http://habitica.wikia.com/wiki/The_Keep:Pirate_Cove/FAQ)';
const result = await highlightMentions(text);
expect(result[0]).to.equal('[here](http://habitica.wikia.com/wiki/The_Keep:Pirate_Cove/FAQ)\n[@user](/profile/111)\n[hier](http://habitica.wikia.com/wiki/The_Keep:Pirate_Cove/FAQ)');
});
});
describe('exceptions in code blocks', () => {
it('doesn\'t highlight user in inline code block', async () => {
const text = '`@user`';
@@ -105,4 +167,36 @@ describe('highlightMentions', () => {
expect(result[0]).to.equal('[@user](/profile/111) `@user`');
});
});
it('github issue 12118, method crashes when square brackets are used', async () => {
const text = '[test]';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
it('github issue 12138, method crashes when regex chars are used in code block', async () => {
const text = '`[test]`';
const result = await highlightMentions(text);
expect(result[0]).to.equal(text);
});
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,50 @@
import os from 'os';
import nconf from 'nconf';
import requireAgain from 'require-again';
const pathToMongoLib = '../../../../website/server/libs/mongodb';
describe('mongodb', () => {
afterEach(() => {
sandbox.restore();
});
describe('getDevelopmentConnectionUrl', () => {
it('returns the original connection url if not on windows', () => {
sandbox.stub(os, 'platform').returns('linux');
const mongoLibOverride = requireAgain(pathToMongoLib);
const originalString = 'mongodb://localhost:3030';
const string = mongoLibOverride.getDevelopmentConnectionUrl(originalString);
expect(string).to.equal(originalString);
});
it('replaces localhost with hostname on windows', () => {
sandbox.stub(os, 'platform').returns('win32');
sandbox.stub(os, 'hostname').returns('hostname');
const mongoLibOverride = requireAgain(pathToMongoLib);
const originalString = 'mongodb://localhost:3030';
const string = mongoLibOverride.getDevelopmentConnectionUrl(originalString);
expect(string).to.equal('mongodb://hostname:3030');
});
});
describe('getDefaultConnectionOptions', () => {
it('returns development config when IS_PROD is false', () => {
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(false);
const mongoLibOverride = requireAgain(pathToMongoLib);
const options = mongoLibOverride.getDefaultConnectionOptions();
expect(options).to.have.all.keys(['useNewUrlParser', 'useUnifiedTopology']);
});
it('returns production config when IS_PROD is true', () => {
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
const mongoLibOverride = requireAgain(pathToMongoLib);
const options = mongoLibOverride.getDefaultConnectionOptions();
expect(options).to.have.all.keys(['useNewUrlParser', 'useUnifiedTopology', 'keepAlive', 'keepAliveInitialDelay']);
});
});
});

View File

@@ -2,13 +2,14 @@ import { model as User } from '../../../../../../website/server/models/user';
import amzLib from '../../../../../../website/server/libs/payments/amazon';
import payments from '../../../../../../website/server/libs/payments/payments';
import common from '../../../../../../website/common';
import apiError from '../../../../../../website/server/libs/apiError';
const { i18n } = common;
describe('Amazon Payments - Checkout', () => {
const subKey = 'basic_3mo';
let user; let orderReferenceId; let
headers;
headers; const gemsBlockKey = '21gems'; const gemsBlock = common.content.gems[gemsBlockKey];
let setOrderReferenceDetailsSpy;
let confirmOrderReferenceSpy;
let authorizeSpy;
@@ -16,7 +17,7 @@ describe('Amazon Payments - Checkout', () => {
let paymentBuyGemsStub;
let paymentCreateSubscritionStub;
let amount = 5;
let amount = gemsBlock.price / 100;
function expectOrderReferenceSpy () {
expect(setOrderReferenceDetailsSpy).to.be.calledOnce;
@@ -107,13 +108,20 @@ describe('Amazon Payments - Checkout', () => {
paymentMethod,
headers,
};
if (gift) expectedArgs.gift = gift;
if (gift) {
expectedArgs.gift = gift;
expectedArgs.gemsBlock = undefined;
} else {
expectedArgs.gemsBlock = gemsBlock;
}
expect(paymentBuyGemsStub).to.be.calledWith(expectedArgs);
}
it('should purchase gems', async () => {
sinon.stub(user, 'canGetGems').resolves(true);
await amzLib.checkout({ user, orderReferenceId, headers });
await amzLib.checkout({
user, orderReferenceId, headers, gemsBlock: gemsBlockKey,
});
expectBuyGemsStub(amzLib.constants.PAYMENT_METHOD);
expectAmazonStubs();
@@ -144,7 +152,9 @@ describe('Amazon Payments - Checkout', () => {
it('should error if user cannot get gems gems', async () => {
sinon.stub(user, 'canGetGems').resolves(false);
await expect(amzLib.checkout({ user, orderReferenceId, headers }))
await expect(amzLib.checkout({
user, orderReferenceId, headers, gemsBlock: gemsBlockKey,
}))
.to.eventually.be.rejected.and.to.eql({
httpCode: 401,
message: i18n.t('groupPolicyCannotGetGems'),
@@ -153,6 +163,17 @@ describe('Amazon Payments - Checkout', () => {
user.canGetGems.restore();
});
it('should error if gems block is not valid', async () => {
await expect(amzLib.checkout({
user, orderReferenceId, headers, gemsBlock: 'invalid',
}))
.to.eventually.be.rejected.and.to.eql({
httpCode: 400,
message: apiError('invalidGemsBlock'),
name: 'BadRequest',
});
});
it('should gift gems', async () => {
const receivingUser = new User();
await receivingUser.save();
@@ -195,6 +216,7 @@ describe('Amazon Payments - Checkout', () => {
paymentMethod: amzLib.constants.PAYMENT_METHOD_GIFT,
headers,
gift,
gemsBlock: undefined,
});
expectAmazonStubs();
});

View File

@@ -1,5 +1,3 @@
import uuid from 'uuid';
import {
generateGroup,
} from '../../../../../helpers/api-unit.helper';
@@ -7,6 +5,7 @@ import { model as User } from '../../../../../../website/server/models/user';
import { model as Group } from '../../../../../../website/server/models/group';
import amzLib from '../../../../../../website/server/libs/payments/amazon';
import payments from '../../../../../../website/server/libs/payments/payments';
import common from '../../../../../../website/common';
describe('#upgradeGroupPlan', () => {
let spy; let data; let user; let group; let
@@ -32,16 +31,19 @@ describe('#upgradeGroupPlan', () => {
group = generateGroup({
name: 'test group',
type: 'guild',
privacy: 'public',
privacy: 'private',
leader: user._id,
});
await group.save();
user.guilds.push(group._id);
await user.save();
spy = sinon.stub(amzLib, 'authorizeOnBillingAgreement');
spy.resolves([]);
uuidString = 'uuid-v4';
sinon.stub(uuid, 'v4').returns(uuidString);
sinon.stub(common, 'uuid').returns(uuidString);
data.groupId = group._id;
data.sub.quantity = 3;
@@ -49,7 +51,7 @@ describe('#upgradeGroupPlan', () => {
afterEach(() => {
amzLib.authorizeOnBillingAgreement.restore();
uuid.v4.restore();
common.uuid.restore();
});
it('charges for a new member', async () => {

View File

@@ -5,7 +5,6 @@ import applePayments from '../../../../../website/server/libs/payments/apple';
import iap from '../../../../../website/server/libs/inAppPurchases';
import { model as User } from '../../../../../website/server/models/user';
import common from '../../../../../website/common';
import { mockFindById, restoreFindById } from '../../../../helpers/mongoose.helper';
const { i18n } = common;
@@ -84,7 +83,7 @@ describe('Apple Payments', () => {
user.canGetGems.restore();
});
it('errors if amount does not exist', async () => {
it('errors if gemsBlock does not exist', async () => {
sinon.stub(user, 'canGetGems').resolves(true);
iapGetPurchaseDataStub.restore();
iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData')
@@ -106,23 +105,23 @@ describe('Apple Payments', () => {
const gemsCanPurchase = [
{
productId: 'com.habitrpg.ios.Habitica.4gems',
amount: 1,
gemsBlock: '4gems',
},
{
productId: 'com.habitrpg.ios.Habitica.20gems',
amount: 5.25,
gemsBlock: '21gems',
},
{
productId: 'com.habitrpg.ios.Habitica.21gems',
amount: 5.25,
gemsBlock: '21gems',
},
{
productId: 'com.habitrpg.ios.Habitica.42gems',
amount: 10.5,
gemsBlock: '42gems',
},
{
productId: 'com.habitrpg.ios.Habitica.84gems',
amount: 21,
gemsBlock: '84gems',
},
];
@@ -149,8 +148,9 @@ describe('Apple Payments', () => {
expect(paymentBuyGemsStub).to.be.calledWith({
user,
paymentMethod: applePayments.constants.PAYMENT_METHOD_APPLE,
amount: gemTest.amount,
gemsBlock: common.content.gems[gemTest.gemsBlock],
headers,
gift: undefined,
});
expect(user.canGetGems).to.be.calledOnce;
user.canGetGems.restore();
@@ -161,8 +161,6 @@ describe('Apple Payments', () => {
const receivingUser = new User();
await receivingUser.save();
mockFindById(receivingUser);
iapGetPurchaseDataStub.restore();
iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData')
.returns([{
@@ -184,12 +182,17 @@ describe('Apple Payments', () => {
expect(paymentBuyGemsStub).to.be.calledOnce;
expect(paymentBuyGemsStub).to.be.calledWith({
user: receivingUser,
user,
paymentMethod: applePayments.constants.PAYMENT_METHOD_APPLE,
amount: gemsCanPurchase[0].amount,
headers,
gift: {
type: 'gems',
gems: { amount: 4 },
member: sinon.match({ _id: receivingUser._id }),
uuid: receivingUser._id,
},
gemsBlock: common.content.gems['4gems'],
});
restoreFindById();
});
});

View File

@@ -0,0 +1,14 @@
import common from '../../../../../website/common';
import { getGemsBlock } from '../../../../../website/server/libs/payments/gems';
describe('payments/gems', () => {
describe('#getGemsBlock', () => {
it('throws an error if the gem block key is invalid', () => {
expect(() => getGemsBlock('invalid')).to.throw;
});
it('returns the gem block for the given key', () => {
expect(getGemsBlock('21gems')).to.equal(common.content.gems['21gems']);
});
});
});

View File

@@ -5,7 +5,6 @@ import googlePayments from '../../../../../website/server/libs/payments/google';
import iap from '../../../../../website/server/libs/inAppPurchases';
import { model as User } from '../../../../../website/server/models/user';
import common from '../../../../../website/common';
import { mockFindById, restoreFindById } from '../../../../helpers/mongoose.helper';
const { i18n } = common;
@@ -14,7 +13,7 @@ describe('Google Payments', () => {
describe('verifyGemPurchase', () => {
let sku; let user; let token; let receipt; let signature; let
headers;
headers; const gemsBlock = common.content.gems['21gems'];
let iapSetupStub; let iapValidateStub; let iapIsValidatedStub; let
paymentBuyGemsStub;
@@ -103,8 +102,9 @@ describe('Google Payments', () => {
expect(paymentBuyGemsStub).to.be.calledWith({
user,
paymentMethod: googlePayments.constants.PAYMENT_METHOD_GOOGLE,
amount: 5.25,
gemsBlock,
headers,
gift: undefined,
});
expect(user.canGetGems).to.be.calledOnce;
user.canGetGems.restore();
@@ -114,8 +114,6 @@ describe('Google Payments', () => {
const receivingUser = new User();
await receivingUser.save();
mockFindById(receivingUser);
const gift = { uuid: receivingUser._id };
await googlePayments.verifyGemPurchase({
user, gift, receipt, signature, headers,
@@ -132,12 +130,17 @@ describe('Google Payments', () => {
expect(paymentBuyGemsStub).to.be.calledOnce;
expect(paymentBuyGemsStub).to.be.calledWith({
user: receivingUser,
user,
paymentMethod: googlePayments.constants.PAYMENT_METHOD_GOOGLE,
amount: 5.25,
gemsBlock,
headers,
gift: {
type: 'gems',
gems: { amount: 21 },
member: sinon.match({ _id: receivingUser._id }),
uuid: receivingUser._id,
},
});
restoreFindById();
});
});

View File

@@ -21,11 +21,14 @@ describe('Canceling a subscription for group', () => {
group = generateGroup({
name: 'test group',
type: 'guild',
privacy: 'public',
privacy: 'private',
leader: user._id,
});
await group.save();
user.guilds.push(group._id);
await user.save();
data = {
user,
sub: {
@@ -141,6 +144,8 @@ describe('Canceling a subscription for group', () => {
it('prevents non group leader from managing subscription', async () => {
const groupMember = new User();
groupMember.guilds.push(group._id);
await groupMember.save();
data.user = groupMember;
data.groupId = group._id;
@@ -162,7 +167,9 @@ describe('Canceling a subscription for group', () => {
let updatedGroup = await Group.findById(group._id).exec();
const newLeader = new User();
newLeader.profile.name = 'newLeader';
updatedGroup.leader = newLeader._id;
await newLeader.save();
await updatedGroup.save();
await api.cancelSubscription(data);
@@ -185,8 +192,6 @@ describe('Canceling a subscription for group', () => {
'user-agent': '',
},
};
user.guilds.push(group._id);
await user.save();
expect(group.purchased.plan.planId).to.not.exist;
data.groupId = group._id;
await api.createSubscription(data);
@@ -211,10 +216,15 @@ describe('Canceling a subscription for group', () => {
await api.createSubscription(data);
await api.cancelSubscription(data);
expect(sender.sendTxn).to.be.have.callCount(4);
expect(sender.sendTxn.thirdCall.args[0]._id).to.equal(recipient._id);
expect(sender.sendTxn.thirdCall.args[1]).to.equal('group-member-cancel');
expect(sender.sendTxn.thirdCall.args[2]).to.eql([
expect(sender.sendTxn).to.be.have.callCount(6);
const recipientCall = sender.sendTxn.getCalls().find(call => {
const isRecipient = call.args[0]._id === recipient._id;
const isGroupMemberCancel = call.args[1] === 'group-member-cancel';
return isRecipient && isGroupMemberCancel;
});
expect(recipientCall.args[0]._id).to.equal(recipient._id);
expect(recipientCall.args[1]).to.equal('group-member-cancel');
expect(recipientCall.args[2]).to.eql([
{ name: 'LEADER', content: user.profile.name },
{ name: 'GROUP_NAME', content: group.name },
]);
@@ -246,8 +256,6 @@ describe('Canceling a subscription for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -259,11 +267,13 @@ describe('Canceling a subscription for group', () => {
const group2 = generateGroup({
name: 'test group2',
type: 'guild',
privacy: 'public',
privacy: 'private',
leader: user._id,
});
data.groupId = group2._id;
await group2.save();
user.guilds.push(group2._id);
await user.save();
recipient.guilds.push(group2._id);
await recipient.save();
@@ -285,8 +295,6 @@ describe('Canceling a subscription for group', () => {
});
it('does cancel a leader subscription with two cancelled group plans', async () => {
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -298,7 +306,7 @@ describe('Canceling a subscription for group', () => {
const group2 = generateGroup({
name: 'test group2',
type: 'guild',
privacy: 'public',
privacy: 'private',
leader: user._id,
});
user.guilds.push(group2._id);

View File

@@ -12,6 +12,7 @@ import { model as Group } from '../../../../../../website/server/models/group';
import {
generateGroup,
} from '../../../../../helpers/api-unit.helper';
import i18n from '../../../../../../website/common/script/i18n';
describe('Purchasing a group plan for group', () => {
const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GOOGLE = 'Google_subscription';
@@ -33,11 +34,14 @@ describe('Purchasing a group plan for group', () => {
group = generateGroup({
name: groupName,
type: 'guild',
privacy: 'public',
privacy: 'private',
leader: user._id,
});
await group.save();
user.guilds.push(group._id);
await user.save();
data = {
user,
sub: {
@@ -112,6 +116,30 @@ describe('Purchasing a group plan for group', () => {
expect(updatedGroup.purchased.plan.dateCreated).to.exist;
});
it('does not create a group plan for a public guild', async () => {
const publicGroup = generateGroup({
name: groupName,
type: 'guild',
privacy: 'public',
leader: user._id,
});
await publicGroup.save();
expect(publicGroup.purchased.plan.planId).to.not.exist;
data.groupId = publicGroup._id;
await expect(api.createSubscription(data))
.to.eventually.be.rejected.and.to.eql({
httpCode: 401,
name: 'NotAuthorized',
message: i18n.t('onlyPrivateGuildsCanUpgrade'),
});
const updatedGroup = await Group.findById(publicGroup._id).exec();
expect(updatedGroup.purchased.plan.planId).to.not.exist;
});
it('sends an email', async () => {
expect(group.purchased.plan.planId).to.not.exist;
data.groupId = group._id;
@@ -148,8 +176,6 @@ describe('Purchasing a group plan for group', () => {
});
it('grants all members of a group a subscription', async () => {
user.guilds.push(group._id);
await user.save();
expect(group.purchased.plan.planId).to.not.exist;
data.groupId = group._id;
@@ -179,17 +205,28 @@ describe('Purchasing a group plan for group', () => {
await api.createSubscription(data);
expect(sender.sendTxn).to.be.calledTwice;
expect(sender.sendTxn.firstCall.args[0]._id).to.equal(recipient._id);
expect(sender.sendTxn.firstCall.args[1]).to.equal('group-member-join');
expect(sender.sendTxn.firstCall.args[2]).to.eql([
expect(sender.sendTxn).to.be.calledThrice;
const recipientCall = sender.sendTxn.getCalls().find(call => {
const isRecipient = call.args[0]._id === recipient._id;
const isJoin = call.args[1] === 'group-member-join';
return isRecipient && isJoin;
});
expect(recipientCall.args[0]._id).to.equal(recipient._id);
expect(recipientCall.args[1]).to.equal('group-member-join');
expect(recipientCall.args[2]).to.eql([
{ name: 'LEADER', content: user.profile.name },
{ name: 'GROUP_NAME', content: group.name },
{ name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NONE },
]);
// confirm that the other email sent is appropriate:
expect(sender.sendTxn.secondCall.args[0]._id).to.equal(group.leader);
expect(sender.sendTxn.secondCall.args[1]).to.equal('group-subscription-begins');
const leaderCall = sender.sendTxn.getCalls().find(call => {
const isLeader = call.args[0]._id === group.leader;
const isSubscriptionBegin = call.args[1] === 'group-subscription-begins';
return isLeader && isSubscriptionBegin;
});
expect(leaderCall.args[0]._id).to.equal(group.leader);
expect(leaderCall.args[1]).to.equal('group-subscription-begins');
});
it('sends one email to subscribed member of group, stating subscription is cancelled (Stripe)', async () => {
@@ -205,17 +242,28 @@ describe('Purchasing a group plan for group', () => {
await api.createSubscription(data);
expect(sender.sendTxn).to.be.calledTwice;
expect(sender.sendTxn.firstCall.args[0]._id).to.equal(recipient._id);
expect(sender.sendTxn.firstCall.args[1]).to.equal('group-member-join');
expect(sender.sendTxn.firstCall.args[2]).to.eql([
expect(sender.sendTxn).to.be.calledThrice;
const recipientCall = sender.sendTxn.getCalls().find(call => {
const isRecipient = call.args[0]._id === recipient._id;
const isJoin = call.args[1] === 'group-member-join';
return isRecipient && isJoin;
});
expect(recipientCall.args[0]._id).to.equal(recipient._id);
expect(recipientCall.args[1]).to.equal('group-member-join');
expect(recipientCall.args[2]).to.eql([
{ name: 'LEADER', content: user.profile.name },
{ name: 'GROUP_NAME', content: group.name },
{ name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL },
]);
// confirm that the other email sent is not a cancel-subscription email:
expect(sender.sendTxn.secondCall.args[0]._id).to.equal(group.leader);
expect(sender.sendTxn.secondCall.args[1]).to.equal('group-subscription-begins');
const leaderCall = sender.sendTxn.getCalls().find(call => {
const isLeader = call.args[0]._id === group.leader;
const isSubscriptionBegin = call.args[1] === 'group-subscription-begins';
return isLeader && isSubscriptionBegin;
});
expect(leaderCall.args[0]._id).to.equal(group.leader);
expect(leaderCall.args[1]).to.equal('group-subscription-begins');
});
it('sends one email to subscribed member of group, stating subscription is cancelled (Amazon)', async () => {
@@ -238,17 +286,28 @@ describe('Purchasing a group plan for group', () => {
await api.createSubscription(data);
expect(sender.sendTxn).to.be.calledTwice;
expect(sender.sendTxn.firstCall.args[0]._id).to.equal(recipient._id);
expect(sender.sendTxn.firstCall.args[1]).to.equal('group-member-join');
expect(sender.sendTxn.firstCall.args[2]).to.eql([
expect(sender.sendTxn).to.be.calledThrice;
const recipientCall = sender.sendTxn.getCalls().find(call => {
const isRecipient = call.args[0]._id === recipient._id;
const isJoin = call.args[1] === 'group-member-join';
return isRecipient && isJoin;
});
expect(recipientCall.args[0]._id).to.equal(recipient._id);
expect(recipientCall.args[1]).to.equal('group-member-join');
expect(recipientCall.args[2]).to.eql([
{ name: 'LEADER', content: user.profile.name },
{ name: 'GROUP_NAME', content: group.name },
{ name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL },
]);
// confirm that the other email sent is not a cancel-subscription email:
expect(sender.sendTxn.secondCall.args[0]._id).to.equal(group.leader);
expect(sender.sendTxn.secondCall.args[1]).to.equal('group-subscription-begins');
const leaderCall = sender.sendTxn.getCalls().find(call => {
const isLeader = call.args[0]._id === group.leader;
const isSubscriptionBegin = call.args[1] === 'group-subscription-begins';
return isLeader && isSubscriptionBegin;
});
expect(leaderCall.args[0]._id).to.equal(group.leader);
expect(leaderCall.args[1]).to.equal('group-subscription-begins');
amzLib.getBillingAgreementDetails.restore();
});
@@ -275,17 +334,28 @@ describe('Purchasing a group plan for group', () => {
await api.createSubscription(data);
expect(sender.sendTxn).to.be.calledTwice;
expect(sender.sendTxn.firstCall.args[0]._id).to.equal(recipient._id);
expect(sender.sendTxn.firstCall.args[1]).to.equal('group-member-join');
expect(sender.sendTxn.firstCall.args[2]).to.eql([
expect(sender.sendTxn).to.be.calledThrice;
const recipientCall = sender.sendTxn.getCalls().find(call => {
const isRecipient = call.args[0]._id === recipient._id;
const isJoin = call.args[1] === 'group-member-join';
return isRecipient && isJoin;
});
expect(recipientCall.args[0]._id).to.equal(recipient._id);
expect(recipientCall.args[1]).to.equal('group-member-join');
expect(recipientCall.args[2]).to.eql([
{ name: 'LEADER', content: user.profile.name },
{ name: 'GROUP_NAME', content: group.name },
{ name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL },
]);
// confirm that the other email sent is not a cancel-subscription email:
expect(sender.sendTxn.secondCall.args[0]._id).to.equal(group.leader);
expect(sender.sendTxn.secondCall.args[1]).to.equal('group-subscription-begins');
const leaderCall = sender.sendTxn.getCalls().find(call => {
const isLeader = call.args[0]._id === group.leader;
const isSubscriptionBegin = call.args[1] === 'group-subscription-begins';
return isLeader && isSubscriptionBegin;
});
expect(leaderCall.args[0]._id).to.equal(group.leader);
expect(leaderCall.args[1]).to.equal('group-subscription-begins');
paypalPayments.paypalBillingAgreementGet.restore();
paypalPayments.paypalBillingAgreementCancel.restore();
@@ -302,8 +372,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -356,8 +424,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -419,8 +485,6 @@ describe('Purchasing a group plan for group', () => {
data.gift = undefined;
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -455,8 +519,6 @@ describe('Purchasing a group plan for group', () => {
data.gift = undefined;
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -483,8 +545,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -511,8 +571,6 @@ describe('Purchasing a group plan for group', () => {
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -541,8 +599,6 @@ describe('Purchasing a group plan for group', () => {
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -566,8 +622,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await recipient.cancelSubscription();
@@ -589,8 +643,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await recipient.cancelSubscription();
@@ -611,8 +663,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -632,8 +682,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -653,8 +701,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -688,8 +734,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -713,8 +757,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -726,13 +768,15 @@ describe('Purchasing a group plan for group', () => {
const group2 = generateGroup({
name: 'test group2',
type: 'guild',
privacy: 'public',
privacy: 'private',
leader: user._id,
});
data.groupId = group2._id;
await group2.save();
recipient.guilds.push(group2._id);
await recipient.save();
user.guilds.push(group2._id);
await user.save();
await api.createSubscription(data);
@@ -757,8 +801,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -770,17 +812,22 @@ describe('Purchasing a group plan for group', () => {
const group2 = generateGroup({
name: 'test group2',
type: 'guild',
privacy: 'public',
privacy: 'private',
leader: user._id,
});
data.groupId = group2._id;
await group2.save();
recipient.guilds.push(group2._id);
await recipient.save();
user.guilds.push(group2._id);
await user.save();
await api.createSubscription(data);
const updatedGroup = await Group.findById(group._id).exec();
updatedGroup.memberCount = 2;
await updatedGroup.save();
await updatedGroup.leave(recipient);
updatedUser = await User.findById(recipient._id).exec();
@@ -806,8 +853,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -835,8 +880,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -864,8 +907,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);
@@ -894,8 +935,6 @@ describe('Purchasing a group plan for group', () => {
recipient.guilds.push(group._id);
await recipient.save();
user.guilds.push(group._id);
await user.save();
data.groupId = group._id;
await api.createSubscription(data);

View File

@@ -1,6 +1,7 @@
import moment from 'moment';
import * as sender from '../../../../../website/server/libs/email';
import common from '../../../../../website/common';
import api from '../../../../../website/server/libs/payments/payments';
import * as analytics from '../../../../../website/server/libs/analyticsService';
import * as notifications from '../../../../../website/server/libs/pushNotifications';
@@ -9,6 +10,7 @@ import { translate as t } from '../../../../helpers/api-integration/v3';
import {
generateGroup,
} from '../../../../helpers/api-unit.helper';
import * as worldState from '../../../../../website/server/libs/worldState';
describe('payments/index', () => {
let user; let group; let data; let
@@ -246,6 +248,7 @@ describe('payments/index', () => {
quantity: 1,
gift: true,
purchaseValue: 15,
firstPurchase: true,
headers: {
'x-client': 'habitica-web',
'user-agent': '',
@@ -343,6 +346,7 @@ describe('payments/index', () => {
quantity: 1,
gift: false,
purchaseValue: 15,
firstPurchase: true,
headers: {
'x-client': 'habitica-web',
'user-agent': '',
@@ -419,10 +423,22 @@ describe('payments/index', () => {
});
context('Mystery Items', () => {
it('awards mystery items when within the timeframe for a mystery item', async () => {
const mayMysteryItemTimeframe = 1464725113000; // May 31st 2016
const fakeClock = sinon.useFakeTimers(mayMysteryItemTimeframe);
let clock;
const mayMysteryItem = 'armor_mystery_201605';
beforeEach(() => {
const mayMysteryItemTimeframe = new Date(2016, 4, 31); // May 31st 2016
clock = sinon.useFakeTimers({
now: mayMysteryItemTimeframe,
toFake: ['Date'],
});
});
afterEach(() => {
if (clock) clock.restore();
});
it('awards mystery items when within the timeframe for a mystery item', async () => {
data = { paymentMethod: 'PaymentMethod', user, sub: { key: 'basic_3mo' } };
const oldNotificationsCount = user.notifications.length;
@@ -435,14 +451,9 @@ describe('payments/index', () => {
expect(user.purchased.plan.mysteryItems).to.include('head_mystery_201605');
expect(user.notifications.length).to.equal(oldNotificationsCount + 1);
expect(user.notifications[0].type).to.equal('NEW_MYSTERY_ITEMS');
fakeClock.restore();
});
it('does not award mystery item when user already owns the item', async () => {
const mayMysteryItemTimeframe = 1464725113000; // May 31st 2016
const fakeClock = sinon.useFakeTimers(mayMysteryItemTimeframe);
const mayMysteryItem = 'armor_mystery_201605';
user.items.gear.owned[mayMysteryItem] = true;
data = { paymentMethod: 'PaymentMethod', user, sub: { key: 'basic_3mo' } };
@@ -451,14 +462,9 @@ describe('payments/index', () => {
expect(user.purchased.plan.mysteryItems).to.have.a.lengthOf(1);
expect(user.purchased.plan.mysteryItems).to.include('head_mystery_201605');
fakeClock.restore();
});
it('does not award mystery item when user already has the item in the mystery box', async () => {
const mayMysteryItemTimeframe = 1464725113000; // May 31st 2016
const fakeClock = sinon.useFakeTimers(mayMysteryItemTimeframe);
const mayMysteryItem = 'armor_mystery_201605';
user.purchased.plan.mysteryItems = [mayMysteryItem];
sandbox.spy(user.purchased.plan.mysteryItems, 'push');
@@ -468,8 +474,6 @@ describe('payments/index', () => {
expect(user.purchased.plan.mysteryItems.push).to.be.calledOnce;
expect(user.purchased.plan.mysteryItems.push).to.be.calledWith('head_mystery_201605');
fakeClock.restore();
});
});
});
@@ -555,6 +559,7 @@ describe('payments/index', () => {
beforeEach(() => {
data = {
user,
gemsBlock: common.content.gems['21gems'],
paymentMethod: 'payment',
headers: {
'x-client': 'habitica-web',
@@ -564,22 +569,6 @@ describe('payments/index', () => {
});
context('Self Purchase', () => {
it('amount property defaults to 5', async () => {
expect(user.balance).to.eql(0);
await api.buyGems(data);
expect(user.balance).to.eql(5);
});
it('can set amount that is purchased', async () => {
data.amount = 13;
await api.buyGems(data);
expect(user.balance).to.eql(13);
});
it('sends a donation email', async () => {
await api.buyGems(data);
@@ -588,6 +577,51 @@ describe('payments/index', () => {
});
});
context('No Active Promotion', () => {
beforeEach(() => {
sinon.stub(worldState, 'getCurrentEvent').returns(null);
});
afterEach(() => {
worldState.getCurrentEvent.restore();
});
it('does not apply a discount', async () => {
const balanceBefore = user.balance;
await api.buyGems(data);
const balanceAfter = user.balance;
const balanceDiff = balanceAfter - balanceBefore;
expect(balanceDiff * 4).to.eql(21);
});
});
context('Active Promotion', () => {
beforeEach(() => {
sinon.stub(worldState, 'getCurrentEvent').returns({
...common.content.events.fall2020,
event: 'fall2020',
});
});
afterEach(() => {
worldState.getCurrentEvent.restore();
});
it('applies a discount', async () => {
const balanceBefore = user.balance;
await api.buyGems(data);
const balanceAfter = user.balance;
const balanceDiff = balanceAfter - balanceBefore;
expect(balanceDiff * 4).to.eql(30);
});
});
context('Gift', () => {
let recipient;

View File

@@ -2,11 +2,13 @@
import paypalPayments from '../../../../../../website/server/libs/payments/paypal';
import payments from '../../../../../../website/server/libs/payments/payments';
import { model as User } from '../../../../../../website/server/models/user';
import common from '../../../../../../website/common';
describe('checkout success', () => {
describe('paypal - checkout success', () => {
const subKey = 'basic_3mo';
let user; let gift; let customerId; let
paymentId;
const gemsBlockKey = '21gems'; const gemsBlock = common.content.gems[gemsBlockKey];
let paypalPaymentExecuteStub; let paymentBuyGemsStub; let
paymentsCreateSubscritionStub;
@@ -28,7 +30,7 @@ describe('checkout success', () => {
it('purchases gems', async () => {
await paypalPayments.checkoutSuccess({
user, gift, paymentId, customerId,
user, gift, paymentId, customerId, gemsBlock: gemsBlockKey,
});
expect(paypalPaymentExecuteStub).to.be.calledOnce;
@@ -38,6 +40,7 @@ describe('checkout success', () => {
user,
customerId,
paymentMethod: 'Paypal',
gemsBlock,
});
});

View File

@@ -4,12 +4,14 @@ import nconf from 'nconf';
import paypalPayments from '../../../../../../website/server/libs/payments/paypal';
import { model as User } from '../../../../../../website/server/models/user';
import common from '../../../../../../website/common';
import apiError from '../../../../../../website/server/libs/apiError';
const BASE_URL = nconf.get('BASE_URL');
const { i18n } = common;
describe('checkout', () => {
describe('paypal - checkout', () => {
const subKey = 'basic_3mo';
const gemsBlockKey = '21gems';
let paypalPaymentCreateStub;
let approvalHerf;
@@ -53,10 +55,10 @@ describe('checkout', () => {
});
it('creates a link for gem purchases', async () => {
const link = await paypalPayments.checkout({ user: new User() });
const link = await paypalPayments.checkout({ user: new User(), gemsBlock: gemsBlockKey });
expect(paypalPaymentCreateStub).to.be.calledOnce;
expect(paypalPaymentCreateStub).to.be.calledWith(getPaypalCreateOptions('Habitica Gems', 5.00));
expect(paypalPaymentCreateStub).to.be.calledWith(getPaypalCreateOptions('Habitica Gems', 4.99));
expect(link).to.eql(approvalHerf);
});
@@ -83,11 +85,23 @@ describe('checkout', () => {
const user = new User();
sinon.stub(user, 'canGetGems').resolves(false);
await expect(paypalPayments.checkout({ user })).to.eventually.be.rejected.and.to.eql({
httpCode: 401,
message: i18n.t('groupPolicyCannotGetGems'),
name: 'NotAuthorized',
});
await expect(paypalPayments.checkout({ user, gemsBlock: gemsBlockKey }))
.to.eventually.be.rejected.and.to.eql({
httpCode: 401,
message: i18n.t('groupPolicyCannotGetGems'),
name: 'NotAuthorized',
});
});
it('should error if the gems block is not valid', async () => {
const user = new User();
await expect(paypalPayments.checkout({ user, gemsBlock: 'invalid' }))
.to.eventually.be.rejected.and.to.eql({
httpCode: 400,
message: apiError('invalidGemsBlock'),
name: 'BadRequest',
});
});
it('creates a link for gifting gems', async () => {

View File

@@ -6,7 +6,7 @@ import {
} from '../../../../../helpers/api-unit.helper';
import { model as User } from '../../../../../../website/server/models/user';
describe('ipn', () => {
describe('paypal - ipn', () => {
const subKey = 'basic_3mo';
let user; let group; let txn_type; let userPaymentId; let
groupPaymentId;

View File

@@ -10,7 +10,7 @@ import { createNonLeaderGroupMember } from '../paymentHelpers';
const { i18n } = common;
describe('subscribeCancel', () => {
describe('paypal - subscribeCancel', () => {
const subKey = 'basic_3mo';
let user; let group; let groupId; let customerId; let groupCustomerId; let
nextBillingDate;

View File

@@ -7,7 +7,7 @@ import {
import { model as User } from '../../../../../../website/server/models/user';
import common from '../../../../../../website/common';
describe('subscribeSuccess', () => {
describe('paypal - subscribeSuccess', () => {
const subKey = 'basic_3mo';
let user; let group; let block; let groupId; let token; let headers; let
customerId;

View File

@@ -8,7 +8,7 @@ import common from '../../../../../../website/common';
const { i18n } = common;
describe('subscribe', () => {
describe('paypal - subscribe', () => {
const subKey = 'basic_3mo';
let coupon; let sub; let
approvalHerf;

View File

@@ -1,8 +1,10 @@
import moment from 'moment';
import { calculateSubscriptionTerminationDate } from '../../../../../../website/server/libs/payments/util';
import calculateSubscriptionTerminationDate from '../../../../../../website/server/libs/payments/calculateSubscriptionTerminationDate';
import api from '../../../../../../website/server/libs/payments/payments';
describe('#calculateSubscriptionTerminationDate', () => {
const groupPlanId = api.constants.GROUP_PLAN_CUSTOMER_ID;
describe('stripe - #calculateSubscriptionTerminationDate', () => {
let plan;
let nextBill;
@@ -13,52 +15,75 @@ describe('#calculateSubscriptionTerminationDate', () => {
};
nextBill = moment();
});
it('should extend date to the exact amount of days left before the next bill will occur', () => {
nextBill = moment()
.add(5, 'days');
const expectedTerminationDate = moment()
.add(5, 'days');
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, groupPlanId);
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
});
it('if nextBill is null, add 30 days to termination date', () => {
nextBill = null;
const expectedTerminationDate = moment()
.add(30, 'days');
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, groupPlanId);
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
});
it('if nextBill is null and it\'s a group plan, add 2 days instead of 30', () => {
nextBill = null;
plan.customerId = api.constants.GROUP_PLAN_CUSTOMER_ID;
const expectedTerminationDate = moment()
.add(2, 'days');
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, groupPlanId);
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
});
it('should add 30.5 days for each extraMonth', () => {
plan.extraMonths = 4;
const expectedTerminationDate = moment()
.add(30.5 * 4, 'days');
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, groupPlanId);
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
});
it('should round up if total days gained by extraMonth is a decimal number', () => {
plan.extraMonths = 5;
const expectedTerminationDate = moment()
.add(Math.ceil(30.5 * 5), 'days');
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, groupPlanId);
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
});
it('behaves like extraMonths is 0 if it\'s set to a negative number', () => {
plan.extraMonths = -5;
const expectedTerminationDate = moment();
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, groupPlanId);
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
});
it('returns current terminated date if it exists and is later than newly calculated date', () => {
const expectedTerminationDate = moment().add({ months: 5 }).toDate();
plan.dateTerminated = expectedTerminationDate;
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, groupPlanId);
expect(terminationDate).to.equal(expectedTerminationDate);
});
it('returns the calculated termination date if the plan does not have one', () => {
nextBill = moment().add(5, 'days');
const expectedTerminationDate = moment().add(5, 'days');
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, groupPlanId);
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
});
});

View File

@@ -10,7 +10,7 @@ import common from '../../../../../../website/common';
const { i18n } = common;
describe('cancel subscription', () => {
describe('stripe - cancel subscription', () => {
const subKey = 'basic_3mo';
const stripe = stripeModule('test');
let user; let groupId; let

View File

@@ -12,7 +12,7 @@ import common from '../../../../../../website/common';
const { i18n } = common;
describe('checkout with subscription', () => {
describe('stripe - checkout with subscription', () => {
const subKey = 'basic_3mo';
const stripe = stripeModule('test');
let user; let group; let data; let gift; let sub;

View File

@@ -4,16 +4,17 @@ import { model as User } from '../../../../../../website/server/models/user';
import stripePayments from '../../../../../../website/server/libs/payments/stripe';
import payments from '../../../../../../website/server/libs/payments/payments';
import common from '../../../../../../website/common';
import apiError from '../../../../../../website/server/libs/apiError';
const { i18n } = common;
describe('checkout', () => {
describe('stripe - checkout', () => {
const subKey = 'basic_3mo';
const stripe = stripeModule('test');
let stripeChargeStub; let paymentBuyGemsStub; let
paymentCreateSubscritionStub;
let user; let gift; let groupId; let email; let headers; let coupon; let customerIdResponse; let
token;
token; const gemsBlockKey = '21gems'; const gemsBlock = common.content.gems[gemsBlockKey];
beforeEach(() => {
user = new User();
@@ -89,6 +90,7 @@ describe('checkout', () => {
await expect(stripePayments.checkout({
token,
user,
gemsBlock: gemsBlockKey,
gift,
groupId,
email,
@@ -101,6 +103,25 @@ describe('checkout', () => {
});
});
it('should error if the gems block is invalid', async () => {
gift = undefined;
await expect(stripePayments.checkout({
token,
user,
gemsBlock: 'invalid',
gift,
groupId,
email,
headers,
coupon,
}, stripe)).to.eventually.be.rejected.and.to.eql({
httpCode: 400,
message: apiError('invalidGemsBlock'),
name: 'BadRequest',
});
});
it('should purchase gems', async () => {
gift = undefined;
sinon.stub(user, 'canGetGems').resolves(true);
@@ -108,6 +129,7 @@ describe('checkout', () => {
await stripePayments.checkout({
token,
user,
gemsBlock: gemsBlockKey,
gift,
groupId,
email,
@@ -117,7 +139,7 @@ describe('checkout', () => {
expect(stripeChargeStub).to.be.calledOnce;
expect(stripeChargeStub).to.be.calledWith({
amount: 500,
amount: 499,
currency: 'usd',
card: token,
});
@@ -128,6 +150,7 @@ describe('checkout', () => {
customerId: customerIdResponse,
paymentMethod: 'Stripe',
gift,
gemsBlock,
});
expect(user.canGetGems).to.be.calledOnce;
user.canGetGems.restore();
@@ -167,6 +190,7 @@ describe('checkout', () => {
customerId: customerIdResponse,
paymentMethod: 'Gift',
gift,
gemsBlock: undefined,
});
});
@@ -205,6 +229,7 @@ describe('checkout', () => {
customerId: customerIdResponse,
paymentMethod: 'Gift',
gift,
gemsBlock: undefined,
});
});
});

View File

@@ -9,7 +9,7 @@ import common from '../../../../../../website/common';
const { i18n } = common;
describe('edit subscription', () => {
describe('stripe - edit subscription', () => {
const subKey = 'basic_3mo';
const stripe = stripeModule('test');
let user; let groupId; let group; let

View File

@@ -33,11 +33,14 @@ describe('Stripe - Upgrade Group Plan', () => {
group = generateGroup({
name: 'test group',
type: 'guild',
privacy: 'public',
privacy: 'private',
leader: user._id,
});
await group.save();
user.guilds.push(group._id);
await user.save();
spy = sinon.stub(stripe.subscriptions, 'update');
spy.resolves([]);
data.groupId = group._id;

View File

@@ -9,7 +9,7 @@ describe('preenHistory', () => {
beforeEach(() => {
// Replace system clocks so we can get predictable results
clock = sinon.useFakeTimers({
now: Number(moment('2013-10-20').zone(0).startOf('day').toDate()),
now: Number(moment('2013-10-20').utcOffset(0).startOf('day').toDate()),
toFake: ['Date'],
});
});

View File

@@ -1,4 +1,3 @@
import path from 'path';
import nconf from 'nconf';
import setupNconf from '../../../../website/server/libs/setupNconf';

View File

@@ -0,0 +1,12 @@
import { getMatchesByWordArray } from '../../../../website/server/libs/stringUtils';
import bannedWords from '../../../../website/server/libs/bannedWords';
describe('stringUtils', () => {
describe('getMatchesByWordArray', () => {
it('check all banned words are matched', async () => {
const message = bannedWords.join(',').replace(/\\/g, '');
const matches = getMatchesByWordArray(message, bannedWords);
expect(matches.length).to.equal(bannedWords.length);
});
});
});

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

@@ -21,7 +21,8 @@ describe('cors middleware', () => {
expect(res.set).to.have.been.calledWith({
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS,GET,POST,PUT,HEAD,DELETE',
'Access-Control-Allow-Headers': 'Content-Type,Accept,Content-Encoding,X-Requested-With,x-api-user,x-api-key,x-client',
'Access-Control-Allow-Headers': 'Authorization,Content-Type,Accept,Content-Encoding,X-Requested-With,x-api-user,x-api-key,x-client',
'Access-Control-Expose-Headers': 'X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset,Retry-After',
});
expect(res.sendStatus).to.not.have.been.called;
expect(next).to.have.been.calledOnce;
@@ -33,7 +34,8 @@ describe('cors middleware', () => {
expect(res.set).to.have.been.calledWith({
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS,GET,POST,PUT,HEAD,DELETE',
'Access-Control-Allow-Headers': 'Content-Type,Accept,Content-Encoding,X-Requested-With,x-api-user,x-api-key,x-client',
'Access-Control-Allow-Headers': 'Authorization,Content-Type,Accept,Content-Encoding,X-Requested-With,x-api-user,x-api-key,x-client',
'Access-Control-Expose-Headers': 'X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset,Retry-After',
});
expect(res.sendStatus).to.have.been.calledWith(200);
expect(next).to.not.have.been.called;

View File

@@ -293,4 +293,107 @@ describe('cron middleware', () => {
});
});
});
context('Drop Cap A/B Test', async () => {
it('enrolls web users', async () => {
user.lastCron = moment(new Date()).subtract({ days: 2 });
await user.save();
req.headers['x-client'] = 'habitica-web';
await new Promise((resolve, reject) => {
cronMiddleware(req, res, async err => {
if (err) return reject(err);
user = await User.findById(user._id).exec();
expect(user._ABtests.dropCapNotif).to.be.a.string;
return resolve();
});
});
});
it('does not enroll 50% of users', async () => {
sandbox.stub(Math, 'random').returns(0.6);
user.lastCron = moment(new Date()).subtract({ days: 2 });
await user.save();
req.headers['x-client'] = 'habitica-web';
await new Promise((resolve, reject) => {
cronMiddleware(req, res, async err => {
if (err) return reject(err);
user = await User.findById(user._id).exec();
expect(user._ABtests.dropCapNotif).to.be.equal('drop-cap-notif-not-enrolled');
return resolve();
});
});
});
it('enables the new notification for 25% of users', async () => {
sandbox.stub(Math, 'random').returns(0.25);
user.lastCron = moment(new Date()).subtract({ days: 2 });
await user.save();
req.headers['x-client'] = 'habitica-web';
await new Promise((resolve, reject) => {
cronMiddleware(req, res, async err => {
if (err) return reject(err);
user = await User.findById(user._id).exec();
expect(user._ABtests.dropCapNotif).to.be.equal('drop-cap-notif-enabled');
return resolve();
});
});
});
it('disables the new notification for 25% of users', async () => {
sandbox.stub(Math, 'random').returns(0.5);
user.lastCron = moment(new Date()).subtract({ days: 2 });
await user.save();
req.headers['x-client'] = 'habitica-web';
await new Promise((resolve, reject) => {
cronMiddleware(req, res, async err => {
if (err) return reject(err);
user = await User.findById(user._id).exec();
expect(user._ABtests.dropCapNotif).to.be.equal('drop-cap-notif-disabled');
return resolve();
});
});
});
it('does not affect subscribers', async () => {
sandbox.stub(Math, 'random').returns(0.2);
user.lastCron = moment(new Date()).subtract({ days: 2 });
await user.save();
req.headers['x-client'] = 'habitica-web';
sandbox.stub(User.prototype, 'isSubscribed').returns(true);
await new Promise((resolve, reject) => {
cronMiddleware(req, res, async err => {
if (err) return reject(err);
user = await User.findById(user._id).exec();
expect(user._ABtests.dropCapNotif).to.not.exist;
return resolve();
});
});
});
it('does not affect mobile users', async () => {
user.lastCron = moment(new Date()).subtract({ days: 2 });
await user.save();
req.headers['x-client'] = 'habitica-ios';
await new Promise((resolve, reject) => {
cronMiddleware(req, res, async err => {
if (err) return reject(err);
user = await User.findById(user._id).exec();
expect(user._ABtests.dropCapNotif).to.not.exist;
return resolve();
});
});
});
});
});

View File

@@ -5,7 +5,7 @@ import {
generateNext,
} from '../../../helpers/api-unit.helper';
import i18n from '../../../../website/common/script/i18n';
import { ensureAdmin, ensureSudo } from '../../../../website/server/middlewares/ensureAccessRight';
import { ensureAdmin, ensureSudo, ensureNewsPoster } from '../../../../website/server/middlewares/ensureAccessRight';
import { NotAuthorized } from '../../../../website/server/libs/errors';
import apiError from '../../../../website/server/libs/apiError';
@@ -40,6 +40,27 @@ describe('ensure access middlewares', () => {
});
});
context('ensure newsPoster', () => {
it('returns not authorized when user is not a newsPoster', () => {
res.locals = { user: { contributor: { newsPoster: false } } };
ensureNewsPoster(req, res, next);
const calledWith = next.getCall(0).args;
expect(calledWith[0].message).to.equal(apiError('noNewsPosterAccess'));
expect(calledWith[0] instanceof NotAuthorized).to.equal(true);
});
it('passes when user is a newsPoster', () => {
res.locals = { user: { contributor: { newsPoster: true } } };
ensureNewsPoster(req, res, next);
expect(next).to.be.calledOnce;
expect(next.args[0]).to.be.empty;
});
});
context('ensure sudo', () => {
it('returns not authorized when user is not a sudo user', () => {
res.locals = { user: { contributor: { sudo: false } } };

View File

@@ -57,7 +57,7 @@ describe('ipBlocker middleware', () => {
});
it('does not throw when the ip does not match', () => {
req.headers['x-forwarded-for'] = '192.168.1.1';
req.ip = '192.168.1.1';
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('192.168.1.2');
const attachIpBlocker = requireAgain(pathToIpBlocker).default;
attachIpBlocker(req, res, next);
@@ -65,30 +65,12 @@ describe('ipBlocker middleware', () => {
checkErrorNotThrown(next);
});
it('throws when a matching ip exist in x-forwarded-for', () => {
req.headers['x-forwarded-for'] = '192.168.1.1';
it('throws when the ip is blocked', () => {
req.ip = '192.168.1.1';
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('192.168.1.1');
const attachIpBlocker = requireAgain(pathToIpBlocker).default;
attachIpBlocker(req, res, next);
checkErrorThrown(next);
});
it('trims ips in x-forwarded-for', () => {
req.headers['x-forwarded-for'] = '192.168.1.1';
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns(', 192.168.1.1 , 192.168.1.4, ');
const attachIpBlocker = requireAgain(pathToIpBlocker).default;
attachIpBlocker(req, res, next);
checkErrorThrown(next);
});
it('works when multiple ips are passed in x-forwarded-for', () => {
req.headers['x-forwarded-for'] = '192.168.1.4';
sandbox.stub(nconf, 'get').withArgs('BLOCKED_IPS').returns('192.168.1.1, 192.168.1.4, 192.168.1.3');
const attachIpBlocker = requireAgain(pathToIpBlocker).default;
attachIpBlocker(req, res, next);
checkErrorThrown(next);
});
});

View File

@@ -0,0 +1,141 @@
import nconf from 'nconf';
import { RateLimiterMemory } from 'rate-limiter-flexible';
import requireAgain from 'require-again';
import {
generateRes,
generateReq,
generateNext,
} from '../../../helpers/api-unit.helper';
import { TooManyRequests } from '../../../../website/server/libs/errors';
import apiError from '../../../../website/server/libs/apiError';
import logger from '../../../../website/server/libs/logger';
describe('rateLimiter middleware', () => {
const pathToRateLimiter = '../../../../website/server/middlewares/rateLimiter';
let res; let req; let next; let nconfGetStub;
beforeEach(() => {
nconfGetStub = sandbox.stub(nconf, 'get');
nconfGetStub.withArgs('NODE_ENV').returns('test');
nconfGetStub.withArgs('IS_TEST').returns(true);
res = generateRes();
req = generateReq();
next = generateNext();
});
afterEach(() => {
sandbox.restore();
});
it('is disabled when the env var is not defined', () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns(undefined);
const attachRateLimiter = requireAgain(pathToRateLimiter).default;
attachRateLimiter(req, res, next);
expect(next).to.have.been.calledOnce;
const calledWith = next.getCall(0).args;
expect(typeof calledWith[0] === 'undefined').to.equal(true);
expect(res.set).to.not.have.been.called;
});
it('is disabled when the env var is an not "true"', () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('false');
const attachRateLimiter = requireAgain(pathToRateLimiter).default;
attachRateLimiter(req, res, next);
expect(next).to.have.been.calledOnce;
const calledWith = next.getCall(0).args;
expect(typeof calledWith[0] === 'undefined').to.equal(true);
expect(res.set).to.not.have.been.called;
});
it('does not throw when there are available points', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
const attachRateLimiter = requireAgain(pathToRateLimiter).default;
await attachRateLimiter(req, res, next);
expect(next).to.have.been.calledOnce;
const calledWith = next.getCall(0).args;
expect(typeof calledWith[0] === 'undefined').to.equal(true);
expect(res.set).to.have.been.calledOnce;
expect(res.set).to.have.been.calledWithMatch({
'X-RateLimit-Limit': 30,
'X-RateLimit-Remaining': 29,
'X-RateLimit-Reset': sinon.match(Date),
});
});
it('does not throw when an unknown error is thrown by the rate limiter', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
sandbox.stub(logger, 'error');
sandbox.stub(RateLimiterMemory.prototype, 'consume')
.returns(Promise.reject(new Error('Unknown error.')));
const attachRateLimiter = requireAgain(pathToRateLimiter).default;
await attachRateLimiter(req, res, next);
expect(next).to.have.been.calledOnce;
const calledWith = next.getCall(0).args;
expect(typeof calledWith[0] === 'undefined').to.equal(true);
expect(res.set).to.not.have.been.called;
expect(logger.error).to.be.calledOnce;
expect(logger.error).to.have.been.calledWithMatch(Error, 'Rate Limiter Error');
});
it('throws when there are no available points remaining', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
const attachRateLimiter = requireAgain(pathToRateLimiter).default;
// call for 31 times
for (let i = 0; i < 31; i += 1) {
await attachRateLimiter(req, res, next); // eslint-disable-line no-await-in-loop
}
expect(next).to.have.been.callCount(31);
const calledWith = next.getCall(30).args;
expect(calledWith[0].message).to.equal(apiError('clientRateLimited'));
expect(calledWith[0] instanceof TooManyRequests).to.equal(true);
expect(res.set).to.have.been.callCount(31);
expect(res.set).to.have.been.calledWithMatch({
'Retry-After': sinon.match(Number),
'X-RateLimit-Limit': 30,
'X-RateLimit-Remaining': 0,
'X-RateLimit-Reset': sinon.match(Date),
});
});
it('uses the user id if supplied or the ip address', async () => {
nconfGetStub.withArgs('RATE_LIMITER_ENABLED').returns('true');
const attachRateLimiter = requireAgain(pathToRateLimiter).default;
req.ip = 1;
await attachRateLimiter(req, res, next);
req.headers['x-api-user'] = 'user-1';
await attachRateLimiter(req, res, next);
await attachRateLimiter(req, res, next);
// user id an ip are counted as separate sources
expect(res.set).to.have.been.calledWithMatch({
'X-RateLimit-Limit': 30,
'X-RateLimit-Remaining': 28, // 2 calls with user id
'X-RateLimit-Reset': sinon.match(Date),
});
req.headers['x-api-user'] = undefined;
await attachRateLimiter(req, res, next);
await attachRateLimiter(req, res, next);
expect(res.set).to.have.been.calledWithMatch({
'X-RateLimit-Limit': 30,
'X-RateLimit-Remaining': 27, // 3 calls with only ip
'X-RateLimit-Reset': sinon.match(Date),
});
});
});

View File

@@ -22,7 +22,7 @@ describe('redirects middleware', () => {
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IS_PROD').returns(true);
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('http');
req.protocol = 'http';
req.originalUrl = '/static/front';
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
@@ -37,7 +37,7 @@ describe('redirects middleware', () => {
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IS_PROD').returns(true);
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('https');
req.protocol = 'https';
req.originalUrl = '/static/front';
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
@@ -51,7 +51,7 @@ describe('redirects middleware', () => {
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IS_PROD').returns(false);
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('http');
req.protocol = 'http';
req.originalUrl = '/static/front';
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
@@ -65,7 +65,7 @@ describe('redirects middleware', () => {
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('http://habitica.com');
nconfStub.withArgs('IS_PROD').returns(true);
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('http');
req.protocol = 'http';
req.originalUrl = '/static/front';
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
@@ -81,7 +81,7 @@ describe('redirects middleware', () => {
nconfStub.withArgs('IS_PROD').returns(true);
nconfStub.withArgs('SKIP_SSL_CHECK_KEY').returns('test-key');
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('http');
req.protocol = 'http';
req.originalUrl = '/static/front';
req.query.skipSSLCheck = 'test-key';
@@ -97,7 +97,7 @@ describe('redirects middleware', () => {
nconfStub.withArgs('IS_PROD').returns(true);
nconfStub.withArgs('SKIP_SSL_CHECK_KEY').returns('test-key');
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('http');
req.protocol = 'http';
req.originalUrl = '/static/front?skipSSLCheck=INVALID';
req.query.skipSSLCheck = 'INVALID';
@@ -114,7 +114,7 @@ describe('redirects middleware', () => {
nconfStub.withArgs('IS_PROD').returns(true);
nconfStub.withArgs('SKIP_SSL_CHECK_KEY').returns(null);
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('http');
req.protocol = 'http';
req.originalUrl = '/static/front';
req.query.skipSSLCheck = 'INVALID';

View File

@@ -16,7 +16,6 @@ describe('response middleware', () => {
next = generateNext();
});
it('attaches respond method to res', () => {
responseMiddleware(req, res, next);

View File

@@ -35,6 +35,33 @@ describe('Challenge Model', () => {
notes: 'test notes',
},
};
const tasks2ToTest = {
habit: {
text: 'test habit 2',
type: 'habit',
up: false,
down: true,
notes: 'test notes',
},
todo: {
text: 'test todo 2',
type: 'todo',
notes: 'test notes',
},
daily: {
text: 'test daily 2',
type: 'daily',
frequency: 'daily',
everyX: 5,
startDate: new Date(),
notes: 'test notes',
},
reward: {
text: 'test reward 2',
type: 'reward',
notes: 'test notes',
},
};
beforeEach(async () => {
guild = new Group({
@@ -146,6 +173,60 @@ describe('Challenge Model', () => {
expect(syncedTask.attribute).to.eql('str');
});
it('should add challenge tag back to user upon syncing challenge tasks to a user with challenge tag removed', async () => {
await challenge.addTasks([task]);
const newMember = new User({
guilds: [guild._id],
});
await newMember.save();
await challenge.syncTasksToUser(newMember);
let updatedNewMember = await User.findById(newMember._id).exec();
const updatedNewMemberId = updatedNewMember._id;
updatedNewMember.tags = [];
await updatedNewMember.save();
const taskValue2 = tasks2ToTest[taskType];
const task2 = new Tasks[`${taskType}`](Tasks.Task.sanitize(taskValue2));
task2.challenge.id = challenge._id;
await challenge.addTasks([task2]);
await challenge.syncTasksToUser(updatedNewMember);
updatedNewMember = await User.findById(updatedNewMemberId).exec();
expect(updatedNewMember.tags.length).to.equal(1);
expect(updatedNewMember.tags[0].id).to.equal(challenge._id);
expect(updatedNewMember.tags[0].name).to.equal(challenge.shortName);
});
it('should not add a duplicate challenge tag to user upon syncing challenge tasks to a user with existing challenge tag', async () => {
await challenge.addTasks([task]);
const newMember = new User({
guilds: [guild._id],
});
await newMember.save();
await challenge.syncTasksToUser(newMember);
let updatedNewMember = await User.findById(newMember._id).exec();
const updatedNewMemberId = updatedNewMember._id;
const taskValue2 = tasks2ToTest[taskType];
const task2 = new Tasks[`${taskType}`](Tasks.Task.sanitize(taskValue2));
task2.challenge.id = challenge._id;
await challenge.addTasks([task2]);
await challenge.syncTasksToUser(updatedNewMember);
updatedNewMember = await User.findById(updatedNewMemberId);
expect(updatedNewMember.tags.length).to.equal(8);
expect(updatedNewMember.tags[7].id).to.equal(challenge._id);
expect(updatedNewMember.tags[7].name).to.equal(challenge.shortName);
expect(updatedNewMember.tags.filter(tag => tag.id === challenge._id).length).to.equal(1);
});
it('syncs challenge tasks to a user with the existing task', async () => {
await challenge.addTasks([task]);

View File

@@ -769,7 +769,6 @@ describe('Group Model', () => {
expect(res.t).to.not.be.called;
});
it('does not throw an error if only user ids are passed in', async () => {
await Group.validateInvitations({ uuids: ['user-id', 'user-id2'] }, res);
expect(res.t).to.not.be.called;

View File

@@ -235,15 +235,16 @@ describe('Group Task Methods', () => {
});
});
it('removes an assigned task and unlinks assignees', async () => {
it('removes assigned tasks when master task is deleted', async () => {
await guild.syncTask(task, leader);
await guild.removeTask(task);
const updatedLeader = await User.findOne({ _id: leader._id });
const updatedLeadersTasks = await Tasks.Task.find({ _id: { $in: updatedLeader.tasksOrder[`${taskType}s`] } });
const updatedLeadersTasks = await Tasks.Task.find({ userId: leader._id, type: taskType });
const syncedTask = find(updatedLeadersTasks, findLinkedTask);
expect(syncedTask.group.broken).to.equal('TASK_DELETED');
expect(updatedLeader.tasksOrder[`${taskType}s`]).to.not.include(task._id);
expect(syncedTask).to.not.exist;
});
it('unlinks and deletes group tasks for a user when remove-all is specified', async () => {

View File

@@ -0,0 +1,138 @@
import { v4 } from 'uuid';
import { model as NewsPost, refreshNewsPost } from '../../../../website/server/models/newsPost';
import { sleep } from '../../../helpers/api-unit.helper';
describe('NewsPost Model', () => {
const publishDate = Number(new Date());
// NOTE publishDate is manually increased by +500 for each test
// to make sure it's always in the future from the previous one
// bevause NewsPost.lastNewsPost() is not reset between tests.
// And without a more recent publishDate it wouldn't update
it('#lastNewsPost', () => {
const lastPost = { _id: v4(), publishDate, published: true };
NewsPost.updateLastNewsPost(lastPost);
expect(NewsPost.lastNewsPost()).to.equal(lastPost);
});
it('#getLastPostFromDatabase', async () => {
const expectedId = v4();
await NewsPost.create([
// more recent but not published
{
_id: v4(),
publishDate: new Date(publishDate + 50),
author: v4(),
published: false,
title: 'Title',
credits: 'credits',
text: 'text',
},
// expected
{
_id: expectedId,
publishDate,
author: v4(),
published: true,
title: 'Title',
credits: 'credits',
text: 'text',
},
// published but less recent
{
_id: v4(),
publishDate: new Date(Number(publishDate) - 50),
author: v4(),
published: true,
title: 'Title',
credits: 'credits',
text: 'text',
},
]);
const fetched = await NewsPost.getLastPostFromDatabase();
expect(fetched._id).to.equal(expectedId);
});
context('#updateLastNewsPost', () => {
it('updates the post if new one is more recent and published', () => {
const previousPost = {
_id: v4(),
publishDate: new Date(publishDate + 100),
published: true,
};
NewsPost.updateLastNewsPost(previousPost);
const newPost = {
_id: v4(),
publishDate: new Date(publishDate + 150),
published: true,
};
NewsPost.updateLastNewsPost(newPost);
expect(NewsPost.lastNewsPost()._id).to.equal(newPost._id);
});
it('does not update the post if new one is from the past', () => {
const previousPost = new NewsPost({
_id: v4(), publishDate: new Date(publishDate + 200), published: true,
});
NewsPost.updateLastNewsPost(previousPost);
const newPost = new NewsPost({
_id: v4(), publishDate: new Date(publishDate + 175), published: true,
});
NewsPost.updateLastNewsPost(newPost);
expect(NewsPost.lastNewsPost()._id).to.equal(previousPost._id);
});
it('does not update the post if new one is not published', () => {
const previousPost = new NewsPost({
_id: v4(), publishDate: new Date(publishDate + 250), published: true,
});
NewsPost.updateLastNewsPost(previousPost);
const newPost = new NewsPost({
_id: v4(), publishDate: new Date(publishDate + 300), published: false,
});
NewsPost.updateLastNewsPost(newPost);
expect(NewsPost.lastNewsPost()._id).to.equal(previousPost._id);
});
});
context('refreshes NewsPost', () => {
let intervalId;
beforeEach(async () => {
// Delete all existing posts from the database
await NewsPost.remove();
});
afterEach(() => {
if (intervalId) clearInterval(intervalId);
});
it('refreshes the last post at a specific interval', async () => {
await sleep(0.1); // wait 100ms to make sure all previous posts are in the past
const previousPost = {
_id: v4(), publishDate: new Date(), published: true,
};
NewsPost.updateLastNewsPost(previousPost);
intervalId = refreshNewsPost(50); // refreshes every 50ms
await sleep(0.1); // wait 100ms to make sure the new post has a more recent publishDate
const newPost = await NewsPost.create({
_id: v4(),
publishDate: new Date(),
author: v4(),
published: true,
title: 'Title',
credits: 'credits',
text: 'text',
});
expect(NewsPost.lastNewsPost()._id).to.equal(previousPost._id);
await sleep(0.15); // wait 150ms
expect(NewsPost.lastNewsPost()._id).to.equal(newPost._id);
});
});
});

View File

@@ -3,7 +3,6 @@ import { model as Challenge } from '../../../../website/server/models/challenge'
import { model as Group } from '../../../../website/server/models/group';
import { model as User } from '../../../../website/server/models/user';
import * as Tasks from '../../../../website/server/models/task';
import { InternalServerError } from '../../../../website/server/libs/errors';
import { generateHistory } from '../../../helpers/api-unit.helper';
describe('Task Model', () => {
@@ -99,7 +98,8 @@ describe('Task Model', () => {
throw new Error('No exception when Id is None');
} catch (err) {
expect(err).to.exist;
expect(err).to.eql(new InternalServerError('Task identifier is a required argument'));
expect(err).to.be.an.instanceOf(Error);
expect(err.message).to.eql('Task identifier is a required argument');
}
});
@@ -109,7 +109,8 @@ describe('Task Model', () => {
throw new Error('No exception when user_id is undefined');
} catch (err) {
expect(err).to.exist;
expect(err).to.eql(new InternalServerError('User identifier is a required argument'));
expect(err).to.be.an.instanceOf(Error);
expect(err.message).to.eql('User identifier is a required argument');
}
});
@@ -153,6 +154,132 @@ describe('Task Model', () => {
});
});
describe('findMultipleByIdOrAlias', () => {
let taskWithAlias;
let secondTask;
let user;
beforeEach(async () => {
user = new User();
await user.save();
taskWithAlias = new Tasks.todo({ // eslint-disable-line new-cap
text: 'some text',
alias: 'short-name',
userId: user.id,
});
await taskWithAlias.save();
secondTask = new Tasks.habit({ // eslint-disable-line new-cap
text: 'second task',
alias: 'second-short-name',
userId: user.id,
});
await secondTask.save();
sandbox.spy(Tasks.Task, 'find');
});
it('throws an error if task identifiers is not passed in', async () => {
try {
await Tasks.Task.findMultipleByIdOrAlias(null, user._id);
throw new Error('No exception when Id is None');
} catch (err) {
expect(err).to.exist;
expect(err).to.be.an.instanceOf(Error);
expect(err.message).to.eql('Task identifiers is a required array argument');
}
});
it('throws an error if task identifiers is not an array', async () => {
try {
await Tasks.Task.findMultipleByIdOrAlias('string', user._id);
throw new Error('No exception when Id is None');
} catch (err) {
expect(err).to.exist;
expect(err).to.be.an.instanceOf(Error);
expect(err.message).to.eql('Task identifiers is a required array argument');
}
});
it('throws an error if user identifier is not passed in', async () => {
try {
await Tasks.Task.findMultipleByIdOrAlias([taskWithAlias._id]);
throw new Error('No exception when user_id is undefined');
} catch (err) {
expect(err).to.exist;
expect(err).to.be.an.instanceOf(Error);
expect(err.message).to.eql('User identifier is a required argument');
}
});
it('returns task by id', async () => {
const foundTasks = await Tasks.Task.findMultipleByIdOrAlias([taskWithAlias._id], user._id);
expect(foundTasks[0].text).to.eql(taskWithAlias.text);
});
it('returns task by alias', async () => {
const foundTasks = await Tasks.Task.findMultipleByIdOrAlias(
[taskWithAlias.alias], user._id,
);
expect(foundTasks[0].text).to.eql(taskWithAlias.text);
});
it('returns multiple tasks', async () => {
const foundTasks = await Tasks.Task.findMultipleByIdOrAlias(
[taskWithAlias.alias, secondTask._id], user._id,
);
expect(foundTasks.length).to.eql(2);
expect(foundTasks[0]._id).to.eql(taskWithAlias._id);
expect(foundTasks[1]._id).to.eql(secondTask._id);
});
it('returns a task only once if searched by both id and alias', async () => {
const foundTasks = await Tasks.Task.findMultipleByIdOrAlias(
[taskWithAlias.alias, taskWithAlias._id], user._id,
);
expect(foundTasks.length).to.eql(1);
expect(foundTasks[0].text).to.eql(taskWithAlias.text);
});
it('scopes alias lookup to user', async () => {
await Tasks.Task.findMultipleByIdOrAlias([taskWithAlias.alias], user._id);
expect(Tasks.Task.find).to.be.calledOnce;
expect(Tasks.Task.find).to.be.calledWithMatch({
$or: [
{ _id: { $in: [] } },
{ alias: { $in: [taskWithAlias.alias] } },
],
userId: user._id,
});
});
it('returns empty array if tasks cannot be found', async () => {
const foundTasks = await Tasks.Task.findMultipleByIdOrAlias(['not-found'], user._id);
expect(foundTasks).to.eql([]);
});
it('accepts additional query parameters', async () => {
await Tasks.Task.findMultipleByIdOrAlias([taskWithAlias.alias], user._id, { foo: 'bar' });
expect(Tasks.Task.find).to.be.calledOnce;
expect(Tasks.Task.find).to.be.calledWithMatch({
$or: [
{ _id: { $in: [] } },
{ alias: { $in: [taskWithAlias.alias] } },
],
userId: user._id,
foo: 'bar',
});
});
});
describe('sanitizeUserChallengeTask ', () => {
});

View File

@@ -1,87 +1,90 @@
import moment from 'moment';
import { model as User } from '../../../../website/server/models/user';
import { model as NewsPost } from '../../../../website/server/models/newsPost';
import { model as Group } from '../../../../website/server/models/group';
import common from '../../../../website/common';
describe('User Model', () => {
it('keeps user._tmp when calling .toJSON', () => {
const user = new User({
auth: {
local: {
username: 'username',
lowerCaseUsername: 'username',
email: 'email@email.email',
salt: 'salt',
hashed_password: 'hashed_password', // eslint-disable-line camelcase
describe('.toJSON()', () => {
it('keeps user._tmp when calling .toJSON', () => {
const user = new User({
auth: {
local: {
username: 'username',
lowerCaseUsername: 'username',
email: 'email@email.email',
salt: 'salt',
hashed_password: 'hashed_password', // eslint-disable-line camelcase
},
},
},
});
user._tmp = { ok: true };
user._nonTmp = { ok: true };
expect(user._tmp).to.eql({ ok: true });
expect(user._nonTmp).to.eql({ ok: true });
const toObject = user.toObject();
const toJSON = user.toJSON();
expect(toObject).to.not.have.keys('_tmp');
expect(toObject).to.not.have.keys('_nonTmp');
expect(toJSON).to.have.any.key('_tmp');
expect(toJSON._tmp).to.eql({ ok: true });
expect(toJSON).to.not.have.keys('_nonTmp');
});
user._tmp = { ok: true };
user._nonTmp = { ok: true };
it('can add computed stats to a JSONified user object', () => {
const user = new User();
const userToJSON = user.toJSON();
expect(user._tmp).to.eql({ ok: true });
expect(user._nonTmp).to.eql({ ok: true });
expect(userToJSON.stats.maxMP).to.not.exist;
expect(userToJSON.stats.maxHealth).to.not.exist;
expect(userToJSON.stats.toNextLevel).to.not.exist;
const toObject = user.toObject();
const toJSON = user.toJSON();
User.addComputedStatsToJSONObj(userToJSON.stats, userToJSON);
expect(toObject).to.not.have.keys('_tmp');
expect(toObject).to.not.have.keys('_nonTmp');
expect(userToJSON.stats.maxMP).to.exist;
expect(userToJSON.stats.maxHealth).to.equal(common.maxHealth);
expect(userToJSON.stats.toNextLevel).to.equal(common.tnl(user.stats.lvl));
});
expect(toJSON).to.have.any.key('_tmp');
expect(toJSON._tmp).to.eql({ ok: true });
expect(toJSON).to.not.have.keys('_nonTmp');
});
it('can transform user object without mongoose helpers', async () => {
const user = new User();
await user.save();
const userToJSON = await User.findById(user._id).lean().exec();
it('can add computed stats to a JSONified user object', () => {
const user = new User();
const userToJSON = user.toJSON();
expect(userToJSON.stats.maxMP).to.not.exist;
expect(userToJSON.stats.maxHealth).to.not.exist;
expect(userToJSON.stats.toNextLevel).to.not.exist;
expect(userToJSON.id).to.not.exist;
expect(userToJSON.stats.maxMP).to.not.exist;
expect(userToJSON.stats.maxHealth).to.not.exist;
expect(userToJSON.stats.toNextLevel).to.not.exist;
User.transformJSONUser(userToJSON);
User.addComputedStatsToJSONObj(userToJSON.stats, userToJSON);
expect(userToJSON.id).to.equal(userToJSON._id);
expect(userToJSON.stats.maxMP).to.not.exist;
expect(userToJSON.stats.maxHealth).to.not.exist;
expect(userToJSON.stats.toNextLevel).to.not.exist;
});
expect(userToJSON.stats.maxMP).to.exist;
expect(userToJSON.stats.maxHealth).to.equal(common.maxHealth);
expect(userToJSON.stats.toNextLevel).to.equal(common.tnl(user.stats.lvl));
});
it('can transform user object without mongoose helpers (including computed stats)', async () => {
const user = new User();
await user.save();
const userToJSON = await User.findById(user._id).lean().exec();
it('can transform user object without mongoose helpers', async () => {
const user = new User();
await user.save();
const userToJSON = await User.findById(user._id).lean().exec();
expect(userToJSON.stats.maxMP).to.not.exist;
expect(userToJSON.stats.maxHealth).to.not.exist;
expect(userToJSON.stats.toNextLevel).to.not.exist;
expect(userToJSON.stats.maxMP).to.not.exist;
expect(userToJSON.stats.maxHealth).to.not.exist;
expect(userToJSON.stats.toNextLevel).to.not.exist;
expect(userToJSON.id).to.not.exist;
User.transformJSONUser(userToJSON, true);
User.transformJSONUser(userToJSON);
expect(userToJSON.id).to.equal(userToJSON._id);
expect(userToJSON.stats.maxMP).to.not.exist;
expect(userToJSON.stats.maxHealth).to.not.exist;
expect(userToJSON.stats.toNextLevel).to.not.exist;
});
it('can transform user object without mongoose helpers (including computed stats)', async () => {
const user = new User();
await user.save();
const userToJSON = await User.findById(user._id).lean().exec();
expect(userToJSON.stats.maxMP).to.not.exist;
expect(userToJSON.stats.maxHealth).to.not.exist;
expect(userToJSON.stats.toNextLevel).to.not.exist;
User.transformJSONUser(userToJSON, true);
expect(userToJSON.id).to.equal(userToJSON._id);
expect(userToJSON.stats.maxMP).to.exist;
expect(userToJSON.stats.maxHealth).to.equal(common.maxHealth);
expect(userToJSON.stats.toNextLevel).to.equal(common.tnl(user.stats.lvl));
expect(userToJSON.id).to.equal(userToJSON._id);
expect(userToJSON.stats.maxMP).to.exist;
expect(userToJSON.stats.maxHealth).to.equal(common.maxHealth);
expect(userToJSON.stats.toNextLevel).to.equal(common.tnl(user.stats.lvl));
});
});
context('achievements', () => {
@@ -432,7 +435,6 @@ describe('User Model', () => {
user = new User();
});
it('returns false if user does not have customer id', () => {
expect(user.isSubscribed()).to.be.undefined;
});
@@ -558,7 +560,6 @@ describe('User Model', () => {
});
});
context('hasCancelled', () => {
let user;
beforeEach(() => {
@@ -763,7 +764,7 @@ describe('User Model', () => {
});
});
context('days missed', () => {
describe('daysUserHasMissed', () => {
// http://forbrains.co.uk/international_tools/earth_timezones
let user;
@@ -771,24 +772,51 @@ describe('User Model', () => {
user = new User();
});
it('should not cron early when going back a timezone', () => {
const yesterday = moment('2017-12-05T00:00:00.000-06:00'); // 11 pm on 4 Texas
const timezoneOffset = moment().zone('-06:00').zone();
user.lastCron = yesterday;
user.preferences.timezoneOffset = timezoneOffset;
it('correctly calculates days missed since lastCron', () => {
const now = moment();
user.lastCron = moment(now).subtract(5, 'days');
const today = moment('2017-12-06T00:00:00.000-06:00'); // 11 pm on 4 Texas
const req = {};
req.header = () => timezoneOffset + 60;
const { daysMissed } = user.daysUserHasMissed(now);
const { daysMissed } = user.daysUserHasMissed(today, req);
expect(daysMissed).to.eql(5);
});
it('uses timezone from preferences to calculate days missed', () => {
const now = moment('2017-07-08 01:00:00Z');
user.lastCron = moment('2017-07-04 13:00:00Z');
user.preferences.timezoneOffset = 120;
const { daysMissed } = user.daysUserHasMissed(now);
expect(daysMissed).to.eql(3);
});
it('uses timezone at last cron to calculate days missed', () => {
const now = moment('2017-09-08 13:00:00Z');
user.lastCron = moment('2017-09-06 01:00:00+02:00');
user.preferences.timezoneOffset = 0;
user.preferences.timezoneOffsetAtLastCron = -120;
const { daysMissed } = user.daysUserHasMissed(now);
expect(daysMissed).to.eql(2);
});
it('respects new timezone that drags time into same day', () => {
user.lastCron = moment('2017-12-05T00:00:00.000-06:00');
user.preferences.timezoneOffset = 360;
const today = moment('2017-12-06T00:00:00.000-06:00');
const requestWithMinus7Timezone = { header: () => 420 };
const { daysMissed } = user.daysUserHasMissed(today, requestWithMinus7Timezone);
expect(user.preferences.timezoneOffset).to.eql(420);
expect(daysMissed).to.eql(0);
});
it('should not cron early when going back a timezone with a custom day start', () => {
const yesterday = moment('2017-12-05T02:00:00.000-08:00');
const timezoneOffset = moment().zone('-08:00').zone();
const timezoneOffset = 480;
user.lastCron = yesterday;
user.preferences.timezoneOffset = timezoneOffset;
user.preferences.dayStart = 2;
@@ -802,4 +830,46 @@ describe('User Model', () => {
expect(daysMissed).to.eql(0);
});
});
it('isNewsPoster', async () => {
const user = new User();
await user.save();
expect(user.isNewsPoster()).to.equal(false);
user.contributor.newsPoster = true;
expect(user.isNewsPoster()).to.equal(true);
});
describe('checkNewStuff', () => {
let user;
beforeEach(() => {
user = new User();
});
afterEach(() => {
sandbox.restore();
});
it('no last news post', () => {
sandbox.stub(NewsPost, 'lastNewsPost').returns(null);
expect(user.checkNewStuff()).to.equal(false);
expect(user.toJSON().flags.newStuff).to.equal(false);
});
it('last news post read', () => {
sandbox.stub(NewsPost, 'lastNewsPost').returns({ _id: '123' });
user.flags.lastNewStuffRead = '123';
expect(user.checkNewStuff()).to.equal(false);
expect(user.toJSON().flags.newStuff).to.equal(false);
});
it('last news post not read', () => {
sandbox.stub(NewsPost, 'lastNewsPost').returns({ _id: '123' });
user.flags.lastNewStuffRead = '124';
expect(user.checkNewStuff()).to.equal(true);
expect(user.toJSON().flags.newStuff).to.equal(true);
});
});
});

View File

@@ -299,7 +299,6 @@ describe('Webhook Model', () => {
});
});
context('type is globalActivity', () => {
let config;

View File

@@ -117,7 +117,7 @@ describe('GET /challenges/:challengeId/members', () => {
expect(res[0].profile).to.have.all.keys(['name']);
});
it('returns only first 30 members if req.query.includeAllMembers is not true', async () => {
it('returns only first 30 members if req.query.includeAllMembers is not true and req.query.limit is undefined', async () => {
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
const challenge = await generateChallenge(user, group);
await user.post(`/challenges/${challenge._id}/join`);
@@ -136,7 +136,7 @@ describe('GET /challenges/:challengeId/members', () => {
});
});
it('returns only first 30 members if req.query.includeAllMembers is not defined', async () => {
it('returns only first 30 members if req.query.includeAllMembers is not defined and req.query.limit is undefined', async () => {
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
const challenge = await generateChallenge(user, group);
await user.post(`/challenges/${challenge._id}/join`);
@@ -155,6 +155,68 @@ describe('GET /challenges/:challengeId/members', () => {
});
});
it('returns an error if req.query.limit is over 60', async () => {
const group = await generateGroup(user, { type: 'party', privacy: 'private' });
const challenge = await generateChallenge(user, group);
const anotherUser = await generateUser();
await expect(anotherUser.get(`/challenges/${challenge._id}/members?limit=61`)).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns an error if req.query.limit is under 1', async () => {
const group = await generateGroup(user, { type: 'party', privacy: 'private' });
const challenge = await generateChallenge(user, group);
const anotherUser = await generateUser();
await expect(anotherUser.get(`/challenges/${challenge._id}/members?limit=-13`)).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns an error if req.query.limit is not an integer', async () => {
const group = await generateGroup(user, { type: 'party', privacy: 'private' });
const challenge = await generateChallenge(user, group);
const anotherUser = await generateUser();
await expect(anotherUser.get(`/challenges/${challenge._id}/members?limit=true`)).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns up to 60 members when req.query.limit is specified', async () => {
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
const challenge = await generateChallenge(user, group);
await user.post(`/challenges/${challenge._id}/join`);
const usersToGenerate = [];
for (let i = 0; i < 62; i += 1) {
usersToGenerate.push(generateUser({ challenges: [challenge._id] }));
}
await Promise.all(usersToGenerate);
let res = await user.get(`/challenges/${challenge._id}/members?limit=57`);
expect(res.length).to.equal(57);
res.forEach(member => {
expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']);
expect(member.profile).to.have.all.keys(['name']);
});
res = await user.get(`/challenges/${challenge._id}/members?limit=60&lastId=${res[res.length - 1]._id}`);
expect(res.length).to.equal(6);
res.forEach(member => {
expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']);
expect(member.profile).to.have.all.keys(['name']);
});
}).timeout(30000);
it('returns all members if req.query.includeAllMembers is true', async () => {
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
const challenge = await generateChallenge(user, group);

View File

@@ -6,8 +6,8 @@ import {
describe('GET challenges/user', () => {
context('no official challenges', () => {
let user; let member; let nonMember; let challenge; let challenge2; let
publicGuild;
let user; let member; let nonMember; let challenge; let challenge2;
let publicGuild; let userData; let groupData;
before(async () => {
const { group, groupLeader, members } = await createAndPopulateGroup({
@@ -19,225 +19,197 @@ describe('GET challenges/user', () => {
members: 1,
});
user = groupLeader;
publicGuild = group;
groupData = {
_id: publicGuild._id,
categories: [],
id: publicGuild._id,
type: publicGuild.type,
privacy: publicGuild.privacy,
name: publicGuild.name,
summary: publicGuild.name,
leader: publicGuild.leader._id,
};
user = groupLeader;
userData = {
_id: publicGuild.leader._id,
id: publicGuild.leader._id,
profile: { name: user.profile.name },
auth: {
local: {
username: user.auth.local.username,
},
},
flags: {
verifiedUsername: true,
},
};
member = members[0]; // eslint-disable-line prefer-destructuring
nonMember = await generateUser();
challenge = await generateChallenge(user, group);
await user.post(`/challenges/${challenge._id}/join`);
challenge2 = await generateChallenge(user, group);
await user.post(`/challenges/${challenge2._id}/join`);
});
it('should return challenges user has joined', async () => {
await nonMember.post(`/challenges/${challenge._id}/join`);
});
context('all challenges', () => {
it('should return challenges user has joined', async () => {
const challenges = await nonMember.get('/challenges/user');
const challenges = await nonMember.get('/challenges/user');
const foundChallenge = _.find(challenges, { _id: challenge._id });
expect(foundChallenge).to.exist;
expect(foundChallenge.leader).to.eql(userData);
expect(foundChallenge.group).to.eql(groupData);
});
const foundChallenge = _.find(challenges, { _id: challenge._id });
expect(foundChallenge).to.exist;
expect(foundChallenge.leader).to.eql({
_id: publicGuild.leader._id,
id: publicGuild.leader._id,
profile: { name: user.profile.name },
auth: {
local: {
username: user.auth.local.username,
it('should not return challenges a non-member has not joined', async () => {
const challenges = await nonMember.get('/challenges/user');
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.not.exist;
});
it('should return challenges user has created', async () => {
const challenges = await user.get('/challenges/user');
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
expect(foundChallenge1).to.exist;
expect(foundChallenge1.leader).to.eql(userData);
expect(foundChallenge1.group).to.eql(groupData);
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.exist;
expect(foundChallenge2.leader).to.eql(userData);
expect(foundChallenge2.group).to.eql(groupData);
});
it('should return challenges in user\'s group', async () => {
const challenges = await member.get('/challenges/user');
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
expect(foundChallenge1).to.exist;
expect(foundChallenge1.leader).to.eql(userData);
expect(foundChallenge1.group).to.eql(groupData);
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.exist;
expect(foundChallenge2.leader).to.eql(userData);
expect(foundChallenge2.group).to.eql(groupData);
});
it('should return newest challenges first', async () => {
let challenges = await user.get('/challenges/user');
let foundChallengeIndex = _.findIndex(challenges, { _id: challenge2._id });
expect(foundChallengeIndex).to.eql(0);
const newChallenge = await generateChallenge(user, publicGuild);
await user.post(`/challenges/${newChallenge._id}/join`);
challenges = await user.get('/challenges/user');
foundChallengeIndex = _.findIndex(challenges, { _id: newChallenge._id });
expect(foundChallengeIndex).to.eql(0);
});
it('should not return challenges user doesn\'t have access to', async () => {
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: {
name: 'TestPrivateGuild',
summary: 'summary for TestPrivateGuild',
type: 'guild',
privacy: 'private',
},
},
flags: {
verifiedUsername: true,
},
});
expect(foundChallenge.group).to.eql({
_id: publicGuild._id,
categories: [],
id: publicGuild._id,
type: publicGuild.type,
privacy: publicGuild.privacy,
name: publicGuild.name,
summary: publicGuild.name,
leader: publicGuild.leader._id,
});
});
});
it('should return challenges user has created', async () => {
const challenges = await user.get('/challenges/user');
const privateChallenge = await generateChallenge(groupLeader, group);
await groupLeader.post(`/challenges/${privateChallenge._id}/join`);
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
expect(foundChallenge1).to.exist;
expect(foundChallenge1.leader).to.eql({
_id: publicGuild.leader._id,
id: publicGuild.leader._id,
profile: { name: user.profile.name },
auth: {
local: {
username: user.auth.local.username,
const challenges = await nonMember.get('/challenges/user');
const foundChallenge = _.find(challenges, { _id: privateChallenge._id });
expect(foundChallenge).to.not.exist;
});
it('should not return challenges user doesn\'t have access to, even with query parameters', async () => {
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: {
name: 'TestPrivateGuild',
summary: 'summary for TestPrivateGuild',
type: 'guild',
privacy: 'private',
},
},
flags: {
verifiedUsername: true,
},
});
expect(foundChallenge1.group).to.eql({
_id: publicGuild._id,
categories: [],
id: publicGuild._id,
type: publicGuild.type,
privacy: publicGuild.privacy,
name: publicGuild.name,
summary: publicGuild.name,
leader: publicGuild.leader._id,
});
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.exist;
expect(foundChallenge2.leader).to.eql({
_id: publicGuild.leader._id,
id: publicGuild.leader._id,
profile: { name: user.profile.name },
auth: {
local: {
username: user.auth.local.username,
},
},
flags: {
verifiedUsername: true,
},
});
expect(foundChallenge2.group).to.eql({
_id: publicGuild._id,
categories: [],
id: publicGuild._id,
type: publicGuild.type,
privacy: publicGuild.privacy,
name: publicGuild.name,
summary: publicGuild.name,
leader: publicGuild.leader._id,
});
const privateChallenge = await generateChallenge(groupLeader, group, {
categories: [{
name: 'academics',
slug: 'academics',
}],
});
await groupLeader.post(`/challenges/${privateChallenge._id}/join`);
const challenges = await nonMember.get('/challenges/user?categories=academics&owned=not_owned');
const foundChallenge = _.find(challenges, { _id: privateChallenge._id });
expect(foundChallenge).to.not.exist;
});
});
it('should return challenges in user\'s group', async () => {
const challenges = await member.get('/challenges/user');
context('my challenges', () => {
it('should return challenges user has joined', async () => {
const challenges = await nonMember.get(`/challenges/user?member=${true}`);
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
expect(foundChallenge1).to.exist;
expect(foundChallenge1.leader).to.eql({
_id: publicGuild.leader._id,
id: publicGuild.leader._id,
profile: { name: user.profile.name },
auth: {
local: {
username: user.auth.local.username,
},
},
flags: {
verifiedUsername: true,
},
});
expect(foundChallenge1.group).to.eql({
_id: publicGuild._id,
categories: [],
id: publicGuild._id,
type: publicGuild.type,
privacy: publicGuild.privacy,
name: publicGuild.name,
summary: publicGuild.name,
leader: publicGuild.leader._id,
});
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.exist;
expect(foundChallenge2.leader).to.eql({
_id: publicGuild.leader._id,
id: publicGuild.leader._id,
profile: { name: user.profile.name },
auth: {
local: {
username: user.auth.local.username,
},
},
flags: {
verifiedUsername: true,
},
});
expect(foundChallenge2.group).to.eql({
_id: publicGuild._id,
categories: [],
id: publicGuild._id,
type: publicGuild.type,
privacy: publicGuild.privacy,
name: publicGuild.name,
summary: publicGuild.name,
leader: publicGuild.leader._id,
});
});
it('should not return challenges in user groups if we send member true param', async () => {
const challenges = await member.get(`/challenges/user?member=${true}`);
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
expect(foundChallenge1).to.not.exist;
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.not.exist;
});
it('should return newest challenges first', async () => {
let challenges = await user.get('/challenges/user');
let foundChallengeIndex = _.findIndex(challenges, { _id: challenge2._id });
expect(foundChallengeIndex).to.eql(0);
const newChallenge = await generateChallenge(user, publicGuild);
await user.post(`/challenges/${newChallenge._id}/join`);
challenges = await user.get('/challenges/user');
foundChallengeIndex = _.findIndex(challenges, { _id: newChallenge._id });
expect(foundChallengeIndex).to.eql(0);
});
it('should not return challenges user doesn\'t have access to', async () => {
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: {
name: 'TestPrivateGuild',
summary: 'summary for TestPrivateGuild',
type: 'guild',
privacy: 'private',
},
const foundChallenge = _.find(challenges, { _id: challenge._id });
expect(foundChallenge).to.exist;
expect(foundChallenge.leader).to.eql(userData);
expect(foundChallenge.group).to.eql(groupData);
});
const privateChallenge = await generateChallenge(groupLeader, group);
await groupLeader.post(`/challenges/${privateChallenge._id}/join`);
it('should return challenges user has created', async () => {
const challenges = await user.get(`/challenges/user?member=${true}`);
const challenges = await nonMember.get('/challenges/user');
const foundChallenge = _.find(challenges, { _id: privateChallenge._id });
expect(foundChallenge).to.not.exist;
});
it('should not return challenges user doesn\'t have access to, even with query parameters', async () => {
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: {
name: 'TestPrivateGuild',
summary: 'summary for TestPrivateGuild',
type: 'guild',
privacy: 'private',
},
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
expect(foundChallenge1).to.exist;
expect(foundChallenge1.leader).to.eql(userData);
expect(foundChallenge1.group).to.eql(groupData);
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.exist;
expect(foundChallenge2.leader).to.eql(userData);
expect(foundChallenge2.group).to.eql(groupData);
});
const privateChallenge = await generateChallenge(groupLeader, group, {
categories: [{
name: 'academics',
slug: 'academics',
}],
it('should return challenges user has created if filter by owned', async () => {
const challenges = await user.get(`/challenges/user?member=${true}&owned=owned`);
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
expect(foundChallenge1).to.exist;
expect(foundChallenge1.leader).to.eql(userData);
expect(foundChallenge1.group).to.eql(groupData);
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.exist;
expect(foundChallenge2.leader).to.eql(userData);
expect(foundChallenge2.group).to.eql(groupData);
});
await groupLeader.post(`/challenges/${privateChallenge._id}/join`);
const challenges = await nonMember.get('/challenges/user?categories=academics&owned=not_owned');
it('should not return challenges user has created if filter by not owned', async () => {
const challenges = await user.get(`/challenges/user?owned=not_owned&member=${true}`);
const foundChallenge = _.find(challenges, { _id: privateChallenge._id });
expect(foundChallenge).to.not.exist;
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
expect(foundChallenge1).to.not.exist;
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.not.exist;
});
it('should not return challenges in user groups', async () => {
const challenges = await member.get(`/challenges/user?member=${true}`);
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
expect(foundChallenge1).to.not.exist;
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
expect(foundChallenge2).to.not.exist;
});
});
});

View File

@@ -159,7 +159,7 @@ describe('POST /challenges/:challengeId/winner/:winnerId', () => {
expect(testTask.challenge.broken).to.eql('CHALLENGE_CLOSED');
expect(testTask.challenge.winner).to.eql(winningUser.profile.name);
expect(challengeTag.challenge).to.eql('false');
expect(challengeTag.challenge).to.eql(false);
});
});
});

View File

@@ -14,9 +14,6 @@ import {
TAVERN_ID,
} from '../../../../../website/server/models/group';
import { CHAT_FLAG_FROM_SHADOW_MUTE, MAX_MESSAGE_LENGTH } from '../../../../../website/common/script/constants';
import { getMatchesByWordArray } from '../../../../../website/server/libs/stringUtils';
import bannedWords from '../../../../../website/server/libs/bannedWords';
import guildsAllowingBannedWords from '../../../../../website/server/libs/guildsAllowingBannedWords';
import * as email from '../../../../../website/server/libs/email';
const BASE_URL = nconf.get('BASE_URL');
@@ -292,12 +289,6 @@ describe('POST /chat', () => {
.that.includes(testBannedWords.join(', '));
});
it('check all banned words are matched', async () => {
const message = bannedWords.join(',').replace(/\\/g, '');
const matches = getMatchesByWordArray(message, bannedWords);
expect(matches.length).to.equal(bannedWords.length);
});
it('does not error when bad word is suffix of a word', async () => {
const wordAsSuffix = `prefix${testBannedWordMessage}`;
const message = await user.post('/groups/habitrpg/chat', { message: wordAsSuffix });
@@ -337,7 +328,8 @@ describe('POST /chat', () => {
members: 1,
});
guildsAllowingBannedWords[group._id] = true;
// Update the bannedWordsAllowed property for the group
group.update({ bannedWordsAllowed: true });
const message = await members[0].post(`/groups/${group._id}/chat`, { message: testBannedWordMessage });
@@ -511,8 +503,8 @@ describe('POST /chat', () => {
const memberUsername = 'memberUsername';
await member.update({ 'auth.local.username': memberUsername });
const messageWithMentions = `hi @${memberUsername} 123456789
123456789 123456789 123456789 123456789 123456789 123456789 89 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345678 END.`;
const messageWithMentions = `hi @${memberUsername} 123456789
123456789 123456789 123456789 123456789 123456789 123456789 89 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345678 END.`;
expect(messageWithMentions.length).to.equal(MAX_MESSAGE_LENGTH);
const newMessage = await user.post(`/groups/${groupWithChat._id}/chat`, { message: messageWithMentions });
const groupMessages = await user.get(`/groups/${groupWithChat._id}/chat`);

View File

@@ -12,7 +12,7 @@ import apiError from '../../../../../website/server/libs/apiError';
describe('GET /groups', () => {
let user;
let userInGuild;
const NUMBER_OF_PUBLIC_GUILDS = 3; // 2 + the tavern
const NUMBER_OF_PUBLIC_GUILDS = 2;
const NUMBER_OF_PUBLIC_GUILDS_USER_IS_LEADER = 2;
const NUMBER_OF_PUBLIC_GUILDS_USER_IS_MEMBER = 1;
const NUMBER_OF_USERS_PRIVATE_GUILDS = 1;
@@ -236,11 +236,22 @@ describe('GET /groups', () => {
await expect(user.get('/groups?type=publicGuilds&paginate=true&page=1'))
.to.eventually.have.a.lengthOf(GUILD_PER_PAGE);
const page2 = await expect(user.get('/groups?type=publicGuilds&paginate=true&page=2'))
.to.eventually.have.a.lengthOf(1 + 4); // 1 created now, 4 by other tests
expect(page2[4].name).to.equal('guild with less members');
// 1 created now, 4 by other tests, -1 for no more tavern.
.to.eventually.have.a.lengthOf(1 + 4 - 1);
expect(page2[3].name).to.equal('guild with less members');
}).timeout(10000);
});
it('makes sure that the tavern doesn\'t show up when guilds is passed as a query', async () => {
const guilds = await user.get('/groups?type=guilds');
expect(guilds.find(g => g.id === TAVERN_ID)).to.be.undefined;
});
it('makes sure that the tavern doesn\'t show up when publicGuilds is passed as a query', async () => {
const guilds = await user.get('/groups?type=publicGuilds');
expect(guilds.find(g => g.id === TAVERN_ID)).to.be.undefined;
});
it('returns all the user\'s guilds when guilds passed in as query', async () => {
await expect(user.get('/groups?type=guilds'))
.to.eventually.have.a
@@ -254,7 +265,7 @@ describe('GET /groups', () => {
it('returns a list of groups user has access to', async () => {
await expect(user.get('/groups?type=privateGuilds,publicGuilds,party,tavern'))
.to.eventually.have.lengthOf(NUMBER_OF_GROUPS_USER_CAN_VIEW);
.to.eventually.have.lengthOf(NUMBER_OF_GROUPS_USER_CAN_VIEW - 1); // -1 for no Tavern.
});
it('returns a list of groups user has access to', async () => {

View File

@@ -70,7 +70,7 @@ describe('GET /groups/:groupId/invites', () => {
expect(res[0].profile).to.have.all.keys(['name']);
});
it('returns only first 30 invites', async () => {
it('returns only first 30 invites by default (req.query.limit not specified)', async () => {
const leader = await generateUser({ balance: 4 });
const group = await generateGroup(leader, { type: 'guild', privacy: 'public', name: generateUUID() });
@@ -89,6 +89,65 @@ describe('GET /groups/:groupId/invites', () => {
});
}).timeout(10000);
it('returns an error if req.query.limit is over 60', async () => {
const leader = await generateUser({ balance: 4 });
const group = await generateGroup(leader, { type: 'guild', privacy: 'public', name: generateUUID() });
await expect(leader.get(`/groups/${group._id}/invites?limit=61`)).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns an error if req.query.limit is under 1', async () => {
const leader = await generateUser({ balance: 4 });
const group = await generateGroup(leader, { type: 'guild', privacy: 'public', name: generateUUID() });
await expect(leader.get(`/groups/${group._id}/invites?limit=-1`)).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns an error if req.query.limit is not an integer', async () => {
const leader = await generateUser({ balance: 4 });
const group = await generateGroup(leader, { type: 'guild', privacy: 'public', name: generateUUID() });
await expect(leader.get(`/groups/${group._id}/invites?limit=1.3`)).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns up to 60 invites when req.query.limit is specified', async () => {
const leader = await generateUser({ balance: 4 });
const group = await generateGroup(leader, { type: 'guild', privacy: 'public', name: generateUUID() });
const invitesToGenerate = [];
for (let i = 0; i < 31; i += 1) {
invitesToGenerate.push(generateUser());
}
const generatedInvites = await Promise.all(invitesToGenerate);
await leader.post(`/groups/${group._id}/invite`, { uuids: generatedInvites.map(invite => invite._id) });
let res = await leader.get(`/groups/${group._id}/invites?limit=14`);
expect(res.length).to.equal(14);
res.forEach(member => {
expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']);
expect(member.profile).to.have.all.keys(['name']);
});
res = await leader.get(`/groups/${group._id}/invites?limit=31`);
expect(res.length).to.equal(31);
res.forEach(member => {
expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']);
expect(member.profile).to.have.all.keys(['name']);
});
}).timeout(30000);
it('supports using req.query.lastId to get more invites', async function test () {
this.timeout(30000); // @TODO: times out after 8 seconds
const leader = await generateUser({ balance: 4 });

View File

@@ -116,7 +116,7 @@ describe('GET /groups/:groupId/members', () => {
expect(memberRes.inbox.messages).to.not.exist;
});
it('returns only first 30 members', async () => {
it('returns only first 30 members by default (req.query.limit not specified)', async () => {
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
const usersToGenerate = [];
@@ -133,6 +133,60 @@ describe('GET /groups/:groupId/members', () => {
});
});
it('returns an error if req.query.limit is over 60', async () => {
await generateGroup(user, { type: 'party', name: generateUUID() });
await expect(user.get('/groups/party/members?limit=61')).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns an error if req.query.limit is under 1', async () => {
await generateGroup(user, { type: 'party', name: generateUUID() });
await expect(user.get('/groups/party/members?limit=0')).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns an error if req.query.limit is not an integer', async () => {
await generateGroup(user, { type: 'party', name: generateUUID() });
await expect(user.get('/groups/party/members?limit=1.1')).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('returns up to 60 members when req.query.limit is specified', async () => {
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
const usersToGenerate = [];
for (let i = 0; i < 62; i += 1) {
usersToGenerate.push(generateUser({ party: { _id: group._id } }));
}
await Promise.all(usersToGenerate);
let res = await user.get('/groups/party/members?limit=60');
expect(res.length).to.equal(60);
res.forEach(member => {
expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']);
expect(member.profile).to.have.all.keys(['name']);
});
res = await user.get(`/groups/party/members?limit=60&lastId=${res[res.length - 1]._id}`);
expect(res.length).to.equal(3);
res.forEach(member => {
expect(member).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']);
expect(member.profile).to.have.all.keys(['name']);
});
}).timeout(30000);
it('returns only first 30 members even when ?includeAllMembers=true', async () => {
const group = await generateGroup(user, { type: 'party', name: generateUUID() });

View File

@@ -75,12 +75,7 @@ describe('POST /group/:groupId/remove-manager', () => {
await nonLeader.post(`/tasks/${task._id}/assign/${nonManager._id}`);
const memberTasks = await nonManager.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(nonManager.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await nonManager.post(`/tasks/${syncedTask._id}/score/up`);
const updatedGroup = await leader.post(`/groups/${groupToUpdate._id}/remove-manager`, {
managerId: nonLeader._id,

View File

@@ -203,6 +203,16 @@ describe('POST /group/:groupId/join', () => {
await expect(invitedUser.get('/user')).to.eventually.have.nested.property('party._id', party._id);
});
it('Issue #12291: accepting a redundant party invite will let the user stay in the party', async () => {
await invitedUser.update({
'party._id': party._id,
});
await expect(invitedUser.get('/user')).to.eventually.have.nested.property('party._id', party._id);
await invitedUser.post(`/groups/${party._id}/join`);
await expect(invitedUser.get('/user')).to.eventually.have.nested.property('party._id', party._id);
});
it('notifies inviting user that their invitation was accepted', async () => {
await invitedUser.post(`/groups/${party._id}/join`);

View File

@@ -1,7 +1,5 @@
import { v4 as generateUUID } from 'uuid';
import {
each,
} from 'lodash';
import each from 'lodash/each';
import moment from 'moment';
import {
generateChallenge,
@@ -13,7 +11,7 @@ import {
} from '../../../../helpers/api-integration/v3';
import { model as User } from '../../../../../website/server/models/user';
import payments from '../../../../../website/server/libs/payments/payments';
import { calculateSubscriptionTerminationDate } from '../../../../../website/server/libs/payments/util';
import calculateSubscriptionTerminationDate from '../../../../../website/server/libs/payments/calculateSubscriptionTerminationDate';
describe('POST /groups/:groupId/leave', () => {
const typesOfGroups = {
@@ -276,6 +274,7 @@ describe('POST /groups/:groupId/leave', () => {
each(typesOfGroups, (groupDetails, groupType) => {
context(`Leaving a group plan when the group is a ${groupType}`, () => {
if (groupDetails.privacy === 'public') return; // public guilds cannot be group plans
let groupWithPlan;
let leader;
let member;
@@ -343,6 +342,7 @@ describe('POST /groups/:groupId/leave', () => {
each(typesOfGroups, (groupDetails, groupType) => {
context(`Leaving a group with extraMonths left plan when the group is a ${groupType}`, () => {
if (groupDetails.privacy === 'public') return; // public guilds cannot be group plans
const extraMonths = 12;
let groupWithPlan;
let member;
@@ -359,6 +359,7 @@ describe('POST /groups/:groupId/leave', () => {
'purchased.plan.extraMonths': extraMonths,
});
});
it('calculates dateTerminated and sets extraMonths to zero after user leaves the group', async () => {
const userBeforeLeave = await User.findById(member._id).exec();
@@ -373,7 +374,7 @@ describe('POST /groups/:groupId/leave', () => {
const expectedTerminationDate = calculateSubscriptionTerminationDate(null, {
customerId: payments.constants.GROUP_PLAN_CUSTOMER_ID,
extraMonths,
}, payments.constants);
}, payments.constants.GROUP_PLAN_CUSTOMER_ID);
expect(extraMonthsBefore).to.gte(12);
expect(extraMonthsAfter).to.equal(0);

View File

@@ -79,4 +79,56 @@ describe('PUT /group', () => {
expect(updatedGroup.leader.profile.name).to.eql(nonLeader.profile.name);
expect(updatedGroup.name).to.equal(groupUpdatedName);
});
it('allows for an admin to update the bannedWordsAllow property for an existing guild', async () => {
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: {
name: 'public guild',
type: 'guild',
privacy: 'public',
},
});
const updateGroupDetails = {
id: group._id,
name: 'public guild',
type: 'guild',
privacy: 'public',
bannedWordsAllowed: true,
};
// Make guild leader into admin
await groupLeader.post('/debug/make-admin');
await groupLeader.sync();
// Update the bannedWordsAllowed property for the group
const response = await groupLeader.put(`/groups/${group._id}`, updateGroupDetails);
expect(groupLeader.contributor.admin).to.eql(true);
expect(response.bannedWordsAllowed).to.eql(true);
});
it('does not allow for a non-admin to update the bannedWordsAllow property for an existing guild', async () => {
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: {
name: 'public guild',
type: 'guild',
privacy: 'public',
},
});
const updateGroupDetails = {
id: group._id,
name: 'public guild',
type: 'guild',
privacy: 'public',
bannedWordsAllowed: true,
};
// Update the bannedWordsAllowed property for the group
const response = await groupLeader.put(`/groups/${group._id}`, updateGroupDetails);
expect(groupLeader.contributor.admin).to.eql(undefined);
expect(response.bannedWordsAllowed).to.eql(undefined);
});
});

View File

@@ -10,6 +10,9 @@ describe('GET /hall/heroes', () => {
const nonHero = await generateUser();
const hero1 = await generateUser({
contributor: { level: 1 },
secret: {
text: 'Super-Hero',
},
});
const hero2 = await generateUser({
contributor: { level: 3 },
@@ -21,6 +24,8 @@ describe('GET /hall/heroes', () => {
expect(heroes[1]._id).to.equal(hero1._id);
expect(heroes[0]).to.have.all.keys(['_id', 'contributor', 'backer', 'profile']);
// should not contain the secret
expect(heroes[1]).to.have.all.keys(['_id', 'contributor', 'backer', 'profile']);
expect(heroes[0].profile).to.have.all.keys(['name']);
@@ -28,5 +33,6 @@ describe('GET /hall/heroes', () => {
expect(heroes[0].profile.name).to.equal(hero2.profile.name);
expect(heroes[1].profile.name).to.equal(hero1.profile.name);
expect(heroes[1].secret).to.equal(undefined);
});
});

View File

@@ -43,15 +43,19 @@ describe('GET /heroes/:heroId', () => {
it('returns only necessary hero data given user id', async () => {
const hero = await generateUser({
contributor: { tier: 23 },
secret: {
text: 'Super Hero',
},
});
const heroRes = await user.get(`/hall/heroes/${hero._id}`);
expect(heroRes).to.have.all.keys([ // works as: object has all and only these keys
'_id', 'id', 'balance', 'profile', 'purchased',
'contributor', 'auth', 'items',
'contributor', 'auth', 'items', 'secret',
]);
expect(heroRes.auth.local).not.to.have.keys(['salt', 'hashed_password']);
expect(heroRes.profile).to.have.all.keys(['name']);
expect(heroRes.secret.text).to.be.eq('Super Hero');
});
it('returns only necessary hero data given username', async () => {
@@ -62,7 +66,7 @@ describe('GET /heroes/:heroId', () => {
expect(heroRes).to.have.all.keys([ // works as: object has all and only these keys
'_id', 'id', 'balance', 'profile', 'purchased',
'contributor', 'auth', 'items',
'contributor', 'auth', 'items', 'secret',
]);
expect(heroRes.auth.local).not.to.have.keys(['salt', 'hashed_password']);
expect(heroRes.profile).to.have.all.keys(['name']);

View File

@@ -7,6 +7,12 @@ import {
describe('PUT /heroes/:heroId', () => {
let user;
const heroFields = [
'_id', 'balance', 'profile', 'purchased',
'contributor', 'auth', 'items', 'flags',
'secret',
];
before(async () => {
user = await generateUser({
contributor: { admin: true },
@@ -51,10 +57,8 @@ describe('PUT /heroes/:heroId', () => {
});
// test response
expect(heroRes).to.have.all.keys([ // works as: object has all and only these keys
'_id', 'balance', 'profile', 'purchased',
'contributor', 'auth', 'items', 'flags',
]);
// works as: object has all and only these keys
expect(heroRes).to.have.all.keys(heroFields);
expect(heroRes.auth.local).not.to.have.keys(['salt', 'hashed_password']);
expect(heroRes.profile).to.have.all.keys(['name']);
@@ -130,10 +134,8 @@ describe('PUT /heroes/:heroId', () => {
});
// test response
expect(heroRes).to.have.all.keys([ // works as: object has all and only these keys
'_id', 'balance', 'profile', 'purchased',
'contributor', 'auth', 'items', 'flags',
]);
// works as: object has all and only these keys
expect(heroRes).to.have.all.keys(heroFields);
expect(heroRes.auth.local).not.to.have.keys(['salt', 'hashed_password']);
expect(heroRes.profile).to.have.all.keys(['name']);
@@ -157,10 +159,8 @@ describe('PUT /heroes/:heroId', () => {
});
// test response
expect(heroRes).to.have.all.keys([ // works as: object has all and only these keys
'_id', 'balance', 'profile', 'purchased',
'contributor', 'auth', 'items', 'flags',
]);
// works as: object has all and only these keys
expect(heroRes).to.have.all.keys(heroFields);
expect(heroRes.auth.local).not.to.have.keys(['salt', 'hashed_password']);
expect(heroRes.profile).to.have.all.keys(['name']);
@@ -173,6 +173,40 @@ describe('PUT /heroes/:heroId', () => {
expect(hero.contributor.text).to.equal('Astronaut');
});
it('updates contributor secret', async () => {
const secretText = 'my super hero';
const hero = await generateUser({
contributor: { level: 5 },
secret: {
text: 'supr hro typo',
},
});
const heroRes = await user.put(`/hall/heroes/${hero._id}`, {
contributor: { text: 'Astronaut' },
secret: {
text: secretText,
},
});
// test response
// works as: object has all and only these keys
expect(heroRes).to.have.all.keys(heroFields);
expect(heroRes.auth.local).not.to.have.keys(['salt', 'hashed_password']);
expect(heroRes.profile).to.have.all.keys(['name']);
// test response values
expect(heroRes.contributor.level).to.equal(5); // doesn't modify previous values
expect(heroRes.contributor.text).to.equal('Astronaut');
expect(heroRes.secret.text).to.equal(secretText);
// test hero values
await hero.sync();
expect(hero.contributor.level).to.equal(5); // doesn't modify previous values
expect(hero.contributor.text).to.equal('Astronaut');
expect(hero.secret.text).to.equal(secretText);
});
it('updates items', async () => {
const hero = await generateUser();
const heroRes = await user.put(`/hall/heroes/${hero._id}`, {
@@ -181,10 +215,8 @@ describe('PUT /heroes/:heroId', () => {
});
// test response
expect(heroRes).to.have.all.keys([ // works as: object has all and only these keys
'_id', 'balance', 'profile', 'purchased',
'contributor', 'auth', 'items', 'flags',
]);
// works as: object has all and only these keys
expect(heroRes).to.have.all.keys(heroFields);
expect(heroRes.auth.local).not.to.have.keys(['salt', 'hashed_password']);
expect(heroRes.profile).to.have.all.keys(['name']);

View File

@@ -29,6 +29,9 @@ describe('GET /members/:memberId', () => {
costume: false,
background: 'volcano',
},
secret: {
text: 'Clark Kent',
},
});
const memberRes = await user.get(`/members/${member._id}`);
expect(memberRes).to.have.all.keys([ // works as: object has all and only these keys
@@ -46,6 +49,29 @@ describe('GET /members/:memberId', () => {
expect(memberRes.stats.toNextLevel).to.equal(common.tnl(memberRes.stats.lvl));
expect(memberRes.inbox.optOut).to.exist;
expect(memberRes.inbox.messages).to.not.exist;
expect(memberRes.secret).to.not.exist;
});
it('does not return secret for the own account', async () => {
// make sure user has all the fields that can be returned by the getMember call
const member = await generateUser({
contributor: { level: 1 },
backer: { tier: 3 },
preferences: {
costume: false,
background: 'volcano',
},
secret: {
text: 'Clark Kent',
},
});
const memberRes = await member.get(`/members/${member._id}`);
expect(memberRes).to.have.keys([ // works as: object has all and only these keys
'_id', 'id', 'preferences', 'profile', 'stats', 'achievements', 'party',
'backer', 'contributor', 'auth', 'items', 'inbox', 'loginIncentives', 'flags',
]);
expect(memberRes.secret).to.not.exist;
});
it('handles non-existing members', async () => {

View File

@@ -4,7 +4,6 @@ import {
describe('GET /news', () => {
let api;
beforeEach(async () => {
api = requester();
});

View File

@@ -1,24 +1,27 @@
import {
generateUser,
} from '../../../../helpers/api-integration/v3';
import { model as NewsPost } from '../../../../../website/server/models/newsPost';
describe('POST /news/tell-me-later', () => {
let user;
beforeEach(async () => {
user = await generateUser({
'flags.newStuff': true,
NewsPost.updateLastNewsPost({
_id: '1234', publishDate: new Date(), title: 'Title', published: true,
});
user = await generateUser();
});
it('marks new stuff as read and adds notification', async () => {
expect(user.flags.newStuff).to.equal(true);
const initialNotifications = user.notifications.length;
await user.post('/news/tell-me-later');
await user.sync();
expect(user.flags.newStuff).to.equal(false);
expect(user.flags.lastNewStuffRead).to.equal('1234');
// fetching the user because newStuff is a computed property
expect((await user.get('/user')).flags.newStuff).to.equal(false);
expect(user.notifications.length).to.equal(initialNotifications + 1);
const notification = user.notifications[user.notifications.length - 1];

View File

@@ -14,7 +14,10 @@ describe('payments - stripe - #checkout', () => {
});
it('verifies credentials', async () => {
await expect(user.post(endpoint, { id: 123 })).to.eventually.be.rejected.and.include({
await expect(user.post(
`${endpoint}?gemsBlock=4gems`,
{ id: 123 },
)).to.eventually.be.rejected.and.include({
code: 401,
error: 'Error',
// message: 'Invalid API Key provided: aaaabbbb********************1111',
@@ -32,7 +35,7 @@ describe('payments - stripe - #checkout', () => {
stripePayments.checkout.restore();
});
it('cancels a user subscription', async () => {
it('creates a user subscription', async () => {
user = await generateUser({
'profile.name': 'sender',
'purchased.plan.customerId': 'customer-id',
@@ -48,7 +51,7 @@ describe('payments - stripe - #checkout', () => {
expect(stripeCheckoutSubscriptionStub.args[0][0].groupId).to.eql(undefined);
});
it('cancels a group subscription', async () => {
it('creates a group subscription', async () => {
user = await generateUser({
'profile.name': 'sender',
'purchased.plan.customerId': 'customer-id',

View File

@@ -2,6 +2,8 @@ import { v4 as generateUUID } from 'uuid';
import {
generateUser,
translate as t,
createAndPopulateGroup,
generateChallenge,
} from '../../../../helpers/api-integration/v3';
describe('GET /tasks/:id', () => {
@@ -11,55 +13,158 @@ describe('GET /tasks/:id', () => {
user = await generateUser();
});
context('task can be accessed', async () => {
let task;
context('general', () => {
context('task cannot be accessed', () => {
it('cannot get a non-existent task', async () => {
const dummyId = generateUUID();
beforeEach(async () => {
task = await user.post('/tasks/user', {
text: 'test habit',
type: 'habit',
alias: 'alias',
await expect(user.get(`/tasks/${dummyId}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
});
});
});
it('gets specified task', async () => {
const getTask = await user.get(`/tasks/${task._id}`);
expect(getTask).to.eql(task);
});
it('can use alias to retrieve task', async () => {
const getTask = await user.get(`/tasks/${task.alias}`);
expect(getTask).to.eql(task);
});
// TODO after challenges are implemented
it('can get active challenge task that user does not own'); // Yes?
});
context('task cannot be accessed', () => {
it('cannot get a non-existent task', async () => {
const dummyId = generateUUID();
context('user', () => {
context('task can be accessed', async () => {
let task;
await expect(user.get(`/tasks/${dummyId}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
beforeEach(async () => {
task = await user.post('/tasks/user', {
text: 'test habit',
type: 'habit',
alias: 'alias',
});
});
it('gets specified task', async () => {
const getTask = await user.get(`/tasks/${task._id}`);
expect(getTask).to.eql(task);
});
it('can use alias to retrieve task', async () => {
const getTask = await user.get(`/tasks/${task.alias}`);
expect(getTask).to.eql(task);
});
});
it('cannot get a task owned by someone else', async () => {
const anotherUser = await generateUser();
const task = await user.post('/tasks/user', {
context('task cannot be accessed', () => {
it('cannot get a task owned by someone else', async () => {
const anotherUser = await generateUser();
const task = await user.post('/tasks/user', {
text: 'test habit',
type: 'habit',
});
await expect(anotherUser.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
});
});
});
});
context('challenge', () => {
let challenge; let task; let leader; let member;
before(async () => {
const populatedGroup = await createAndPopulateGroup({
members: 1,
});
const guild = populatedGroup.group;
leader = populatedGroup.groupLeader;
member = populatedGroup.members[0]; // eslint-disable-line prefer-destructuring
challenge = await generateChallenge(leader, guild);
await leader.post(`/challenges/${challenge._id}/join`);
task = await leader.post(`/tasks/challenge/${challenge._id}`, {
text: 'test habit',
type: 'habit',
});
});
await expect(anotherUser.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
context('task can be accessed', async () => {
it('can get challenge task if member of that challenge', async () => {
await member.post(`/challenges/${challenge._id}/join`);
const getTask = await member.get(`/tasks/${task._id}`);
expect(getTask).to.eql(task);
});
it('can get challenge task if leader of that challenge', async () => {
const getTask = await leader.get(`/tasks/${task._id}`);
expect(getTask).to.eql(task);
});
it('can get challenge task if admin', async () => {
const admin = await generateUser({
'contributor.admin': true,
});
const getTask = await admin.get(`/tasks/${task._id}`);
expect(getTask).to.eql(task);
});
});
context('task cannot be accessed', () => {
it('cannot get a task in a challenge i am not part of', async () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
});
});
});
});
context('group', () => {
let group; let task; let members; let leader;
before(async () => {
const groupData = await createAndPopulateGroup({
groupDetails: {
name: 'Test Guild',
type: 'guild',
},
members: 1,
});
group = groupData.group;
members = groupData.members;
leader = groupData.groupLeader;
task = await leader.post(`/tasks/group/${group._id}`, {
text: 'test habit',
type: 'habit',
});
});
context('task can be accessed', async () => {
it('can get group task if leader of that group', async () => {
const getTask = await leader.get(`/tasks/${task._id}`);
expect(getTask).to.eql(task);
});
it('can get group task if member of that group', async () => {
const getTask = await members[0].get(`/tasks/${task._id}`);
expect(getTask).to.eql(task);
});
});
context('task cannot be accessed', () => {
it('cannot get a task in a group i am not part of', async () => {
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('taskNotFound'),
});
});
});
});

View File

@@ -153,40 +153,12 @@ describe('GET /tasks/user', () => {
});
xit('returns dailies with isDue for the date specified and will add CDS offset if time is not supplied and assumes timezones', async () => {
const timezone = 420;
const timezoneOffset = 420;
await user.update({
'preferences.dayStart': 0,
'preferences.timezoneOffset': timezone,
'preferences.timezoneOffset': timezoneOffset,
});
const startDate = moment().zone(timezone).subtract('4', 'days').startOf('day')
.toISOString();
await user.post('/tasks/user', [
{
text: 'test daily',
type: 'daily',
startDate,
frequency: 'daily',
everyX: 2,
},
]);
const today = moment().format('YYYY-MM-DD');
const dailys = await user.get(`/tasks/user?type=dailys&dueDate=${today}`);
expect(dailys[0].isDue).to.be.true;
const yesterday = moment().subtract('1', 'days').format('YYYY-MM-DD');
const dailys2 = await user.get(`/tasks/user?type=dailys&dueDate=${yesterday}`);
expect(dailys2[0].isDue).to.be.false;
});
xit('returns dailies with isDue for the date specified and will add CDS offset if time is not supplied and assumes timezones', async () => {
const timezone = 240;
await user.update({
'preferences.dayStart': 0,
'preferences.timezoneOffset': timezone,
});
const startDate = moment().zone(timezone).subtract('4', 'days').startOf('day')
const startDate = moment().utcOffset(-timezoneOffset).subtract('4', 'days').startOf('day')
.toISOString();
await user.post('/tasks/user', [
{
@@ -208,12 +180,39 @@ describe('GET /tasks/user', () => {
});
xit('returns dailies with isDue for the date specified and will add CDS offset if time is not supplied and assumes timezones', async () => {
const timezone = 540;
const timezoneOffset = 240;
await user.update({
'preferences.dayStart': 0,
'preferences.timezoneOffset': timezone,
'preferences.timezoneOffset': timezoneOffset,
});
const startDate = moment().zone(timezone).subtract('4', 'days').startOf('day')
const startDate = moment().utcOffset(-timezoneOffset).subtract('4', 'days').startOf('day')
.toISOString();
await user.post('/tasks/user', [
{
text: 'test daily',
type: 'daily',
startDate,
frequency: 'daily',
everyX: 2,
},
]);
const today = moment().format('YYYY-MM-DD');
const dailys = await user.get(`/tasks/user?type=dailys&dueDate=${today}`);
expect(dailys[0].isDue).to.be.true;
const yesterday = moment().subtract('1', 'days').format('YYYY-MM-DD');
const dailys2 = await user.get(`/tasks/user?type=dailys&dueDate=${yesterday}`);
expect(dailys2[0].isDue).to.be.false;
});
xit('returns dailies with isDue for the date specified and will add CDS offset if time is not supplied and assumes timezones', async () => {
const timezoneOffset = 540;
await user.update({
'preferences.dayStart': 0,
'preferences.timezoneOffset': timezoneOffset,
});
const startDate = moment().utcOffset(-timezoneOffset).subtract('4', 'days').startOf('day')
.toISOString();
await user.post('/tasks/user', [
{

View File

@@ -1,4 +1,5 @@
import { v4 as generateUUID } from 'uuid';
import apiError from '../../../../../website/server/libs/apiError';
import {
generateUser,
sleep,
@@ -44,7 +45,7 @@ describe('POST /tasks/:id/score/:direction', () => {
await expect(user.post(`/tasks/${generateUUID()}/score/tt`)).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
message: apiError('directionUpDown'),
});
});
@@ -261,6 +262,7 @@ describe('POST /tasks/:id/score/:direction', () => {
const task = await user.get(`/tasks/${daily._id}`);
expect(task.completed).to.equal(true);
expect(task.value).to.be.greaterThan(daily.value);
});
it('uncompletes daily when direction is down', async () => {

View File

@@ -687,7 +687,6 @@ describe('POST /tasks/user', () => {
});
});
it('can create checklists', async () => {
const task = await user.post('/tasks/user', {
text: 'test daily',

View File

@@ -499,6 +499,45 @@ describe('PUT /tasks/:id', () => {
});
});
context('monthly dailys', () => {
let monthly;
beforeEach(async () => {
const date1 = moment.utc('2020-07-01').toDate();
monthly = await user.post('/tasks/user', {
text: 'test monthly',
type: 'daily',
frequency: 'monthly',
startDate: date1,
daysOfMonth: [date1.getDate()],
});
});
it('updates days of month when start date updated', async () => {
const date2 = moment.utc('2020-07-01').toDate();
const savedMonthly = await user.put(`/tasks/${monthly._id}`, {
startDate: date2,
});
expect(savedMonthly.daysOfMonth).to.deep.equal([moment(date2).date()]);
});
it('updates next due when start date updated', async () => {
const date2 = moment.utc('2022-07-01').toDate();
const savedMonthly = await user.put(`/tasks/${monthly._id}`, {
startDate: date2,
});
expect(savedMonthly.nextDue.length).to.eql(6);
expect(moment(savedMonthly.nextDue[0]).toDate()).to.eql(moment.utc('2022-08-01').toDate());
expect(moment(savedMonthly.nextDue[1]).toDate()).to.eql(moment.utc('2022-09-01').toDate());
expect(moment(savedMonthly.nextDue[2]).toDate()).to.eql(moment.utc('2022-10-01').toDate());
expect(moment(savedMonthly.nextDue[3]).toDate()).to.eql(moment.utc('2022-11-01').toDate());
expect(moment(savedMonthly.nextDue[4]).toDate()).to.eql(moment.utc('2022-12-01').toDate());
expect(moment(savedMonthly.nextDue[5]).toDate()).to.eql(moment.utc('2023-01-01').toDate());
});
});
context('rewards', () => {
let reward;

View File

@@ -73,12 +73,7 @@ describe('Groups DELETE /tasks/:id', () => {
});
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await user.sync();
await member2.sync();
@@ -96,16 +91,16 @@ describe('Groups DELETE /tasks/:id', () => {
expect(member2.notifications.length).to.equal(1);
});
it('unlinks assigned user', async () => {
it('deletes task from assigned user', async () => {
await user.del(`/tasks/${task._id}`);
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
expect(syncedTask.group.broken).to.equal('TASK_DELETED');
expect(syncedTask).to.not.exist;
});
it('unlinks all assigned users', async () => {
it('deletes task from all assigned users', async () => {
await user.del(`/tasks/${task._id}`);
const memberTasks = await member.get('/tasks/user');
@@ -114,8 +109,8 @@ describe('Groups DELETE /tasks/:id', () => {
const member2Tasks = await member2.get('/tasks/user');
const member2SyncedTask = find(member2Tasks, findAssignedTask);
expect(syncedTask.group.broken).to.equal('TASK_DELETED');
expect(member2SyncedTask.group.broken).to.equal('TASK_DELETED');
expect(syncedTask).to.not.exist;
expect(member2SyncedTask).to.not.exist;
});
it('prevents a user from deleting a task they are assigned to', async () => {
@@ -130,22 +125,6 @@ describe('Groups DELETE /tasks/:id', () => {
});
});
it('allows a user to delete a broken task', async () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await user.del(`/tasks/${task._id}`);
await member.del(`/tasks/${syncedTask._id}`);
await expect(member.get(`/tasks/${syncedTask._id}`))
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: 'Task not found.',
});
});
it('allows a user to delete a task after leaving a group', async () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);

View File

@@ -58,22 +58,14 @@ describe('POST /tasks/:id/approve/:userId', () => {
let memberTasks = await member.get('/tasks/user');
let syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await user.post(`/tasks/${task._id}/approve/${member._id}`);
await member.sync();
expect(member.notifications.length).to.equal(3);
expect(member.notifications.length).to.equal(2);
expect(member.notifications[1].type).to.equal('GROUP_TASK_APPROVED');
expect(member.notifications[1].data.message).to.equal(t('yourTaskHasBeenApproved', { taskText: task.text }));
expect(member.notifications[2].type).to.equal('SCORED_TASK');
expect(member.notifications[2].data.message).to.equal(t('yourTaskHasBeenApproved', { taskText: task.text }));
memberTasks = await member.get('/tasks/user');
syncedTask = find(memberTasks, findAssignedTask);
@@ -93,21 +85,13 @@ describe('POST /tasks/:id/approve/:userId', () => {
let memberTasks = await member.get('/tasks/user');
let syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await member2.post(`/tasks/${task._id}/approve/${member._id}`);
await member.sync();
expect(member.notifications.length).to.equal(3);
expect(member.notifications.length).to.equal(2);
expect(member.notifications[1].type).to.equal('GROUP_TASK_APPROVED');
expect(member.notifications[1].data.message).to.equal(t('yourTaskHasBeenApproved', { taskText: task.text }));
expect(member.notifications[2].type).to.equal('SCORED_TASK');
expect(member.notifications[2].data.message).to.equal(t('yourTaskHasBeenApproved', { taskText: task.text }));
memberTasks = await member.get('/tasks/user');
syncedTask = find(memberTasks, findAssignedTask);
@@ -125,12 +109,7 @@ describe('POST /tasks/:id/approve/:userId', () => {
await member2.post(`/tasks/${task._id}/assign/${member._id}`);
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await user.sync();
await member2.sync();
@@ -157,14 +136,9 @@ describe('POST /tasks/:id/approve/:userId', () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await member2.post(`/tasks/${task._id}/approve/${member._id}`);
await expect(user.post(`/tasks/${task._id}/approve/${member._id}`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
@@ -197,13 +171,7 @@ describe('POST /tasks/:id/approve/:userId', () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await user.post(`/tasks/${sharedCompletionTask._id}/approve/${member._id}`);
const groupTasks = await user.get(`/tasks/group/${guild._id}?type=completedTodos`);
@@ -226,13 +194,7 @@ describe('POST /tasks/:id/approve/:userId', () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await user.post(`/tasks/${sharedCompletionTask._id}/approve/${member._id}`);
const member2Tasks = await member2.get('/tasks/user');
@@ -258,13 +220,7 @@ describe('POST /tasks/:id/approve/:userId', () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await user.post(`/tasks/${sharedCompletionTask._id}/approve/${member._id}`);
const groupTasks = await user.get(`/tasks/group/${guild._id}`);
@@ -287,21 +243,10 @@ describe('POST /tasks/:id/approve/:userId', () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
const member2Tasks = await member2.get('/tasks/user');
const member2SyncedTask = find(member2Tasks, findAssignedTask);
await expect(member2.post(`/tasks/${member2SyncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member2.post(`/tasks/${member2SyncedTask._id}/score/up`);
await user.post(`/tasks/${sharedCompletionTask._id}/approve/${member._id}`);
await user.post(`/tasks/${sharedCompletionTask._id}/approve/${member2._id}`);

View File

@@ -61,13 +61,7 @@ describe('POST /tasks/:id/needs-work/:userId', () => {
let syncedTask = find(memberTasks, findAssignedTask);
// score task to require approval
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await user.post(`/tasks/${task._id}/needs-work/${member._id}`);
[memberTasks] = await Promise.all([member.get('/tasks/user'), member.sync()]);
@@ -114,12 +108,7 @@ describe('POST /tasks/:id/needs-work/:userId', () => {
let syncedTask = find(memberTasks, findAssignedTask);
// score task to require approval
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
const initialNotifications = member.notifications.length;
@@ -172,13 +161,7 @@ describe('POST /tasks/:id/needs-work/:userId', () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await member2.post(`/tasks/${task._id}/approve/${member._id}`);
await expect(user.post(`/tasks/${task._id}/needs-work/${member._id}`))
.to.eventually.be.rejected.and.to.eql({

View File

@@ -44,12 +44,11 @@ describe('POST /tasks/:id/score/:direction', () => {
const syncedTask = find(memberTasks, findAssignedTask);
const direction = 'up';
await expect(member.post(`/tasks/${syncedTask._id}/score/${direction}`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
const response = await member.post(`/tasks/${syncedTask._id}/score/${direction}`);
expect(response.data.requiresApproval).to.equal(true);
expect(response.message).to.equal(t('taskApprovalHasBeenRequested'));
const updatedTask = await member.get(`/tasks/${syncedTask._id}`);
await user.sync();
@@ -76,12 +75,7 @@ describe('POST /tasks/:id/score/:direction', () => {
const syncedTask = find(memberTasks, findAssignedTask);
const direction = 'up';
await expect(member.post(`/tasks/${syncedTask._id}/score/${direction}`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/${direction}`);
const updatedTask = await member.get(`/tasks/${syncedTask._id}`);
await user.sync();
await member2.sync();
@@ -111,31 +105,18 @@ describe('POST /tasks/:id/score/:direction', () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskRequiresApproval'),
});
const response = await member.post(`/tasks/${syncedTask._id}/score/up`);
expect(response.data.requiresApproval).to.equal(true);
expect(response.message).to.equal(t('taskRequiresApproval'));
});
it('allows a user to score an approved task', async () => {
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
await member.post(`/tasks/${syncedTask._id}/score/up`);
await user.post(`/tasks/${task._id}/approve/${member._id}`);

View File

@@ -4,8 +4,12 @@ import {
} from '../../../../../helpers/api-integration/v3';
describe('PUT /tasks/:id', () => {
let user; let guild; let member; let member2; let
task;
let user;
let guild;
let member;
let member2;
let habit;
let todo;
function findAssignedTask (memberTask) {
return memberTask.group.id === guild._id;
@@ -25,7 +29,7 @@ describe('PUT /tasks/:id', () => {
member = members[0]; // eslint-disable-line prefer-destructuring
member2 = members[1]; // eslint-disable-line prefer-destructuring
task = await user.post(`/tasks/group/${guild._id}`, {
habit = await user.post(`/tasks/group/${guild._id}`, {
text: 'test habit',
type: 'habit',
up: false,
@@ -33,12 +37,18 @@ describe('PUT /tasks/:id', () => {
notes: 1976,
});
await user.post(`/tasks/${task._id}/assign/${member._id}`);
await user.post(`/tasks/${task._id}/assign/${member2._id}`);
todo = await user.post(`/tasks/group/${guild._id}`, {
text: 'test todo',
type: 'todo',
notes: 1976,
});
await user.post(`/tasks/${habit._id}/assign/${member._id}`);
await user.post(`/tasks/${habit._id}/assign/${member2._id}`);
});
it('updates a group task', async () => {
const savedHabit = await user.put(`/tasks/${task._id}`, {
const savedHabit = await user.put(`/tasks/${habit._id}`, {
notes: 'some new notes',
});
@@ -51,27 +61,55 @@ describe('PUT /tasks/:id', () => {
managerId: member._id,
});
// change the todo
task = await member.put(`/tasks/${task._id}`, {
// change the habit
habit = await member.put(`/tasks/${habit._id}`, {
text: 'new text!',
requiresApproval: true,
});
const memberTasks = await member2.get('/tasks/user');
const syncedTask = find(memberTasks, memberTask => memberTask.group.taskId === task._id);
const syncedTask = find(memberTasks, memberTask => memberTask.group.taskId === habit._id);
// score up to trigger approval
await expect(member2.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('taskApprovalHasBeenRequested'),
});
const response = await member2.post(`/tasks/${syncedTask._id}/score/up`);
expect(response.data.requiresApproval).to.equal(true);
expect(response.message).to.equal(t('taskApprovalHasBeenRequested'));
});
it('member updates a group task value - not allowed', async () => {
// change the todo
await expect(member.put(`/tasks/${habit._id}`, {
text: 'new text!',
})).to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('onlyGroupLeaderCanEditTasks'),
});
});
it('member updates the collapseChecklist property - change is allowed', async () => {
// change the todo
await member.put(`/tasks/${todo._id}`, {
collapseChecklist: true,
});
});
it('member updates the collapseChecklist and another property - change not allowed', async () => {
// change the todo
await expect(member.put(`/tasks/${todo._id}`, {
collapseChecklist: true,
title: 'test',
})).to.eventually.be.rejected.and.to.eql({
code: 401,
error: 'NotAuthorized',
message: t('onlyGroupLeaderCanEditTasks'),
});
});
it('updates a group task with checklist', async () => {
// add a new todo
task = await user.post(`/tasks/group/${guild._id}`, {
habit = await user.post(`/tasks/group/${guild._id}`, {
text: 'todo',
type: 'todo',
checklist: [
@@ -81,13 +119,13 @@ describe('PUT /tasks/:id', () => {
],
});
await user.post(`/tasks/${task._id}/assign/${member._id}`);
await user.post(`/tasks/${habit._id}/assign/${member._id}`);
// change the checklist text
task = await user.put(`/tasks/${task._id}`, {
habit = await user.put(`/tasks/${habit._id}`, {
checklist: [
{
id: task.checklist[0].id,
id: habit.checklist[0].id,
text: 'checklist 1 - edit',
},
{
@@ -96,18 +134,17 @@ describe('PUT /tasks/:id', () => {
],
});
expect(task.checklist.length).to.eql(2);
expect(habit.checklist.length).to.eql(2);
});
it('updates the linked tasks', async () => {
await user.put(`/tasks/${task._id}`, {
await user.put(`/tasks/${habit._id}`, {
text: 'some new text',
up: false,
down: false,
notes: 'some new notes',
});
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);
@@ -117,7 +154,7 @@ describe('PUT /tasks/:id', () => {
});
it('updates the linked tasks for all assigned users', async () => {
await user.put(`/tasks/${task._id}`, {
await user.put(`/tasks/${habit._id}`, {
text: 'some new text',
up: false,
down: false,
@@ -144,14 +181,13 @@ describe('PUT /tasks/:id', () => {
managerId: member2._id,
});
await member2.put(`/tasks/${task._id}`, {
await member2.put(`/tasks/${habit._id}`, {
text: 'some new text',
up: false,
down: false,
notes: 'some new notes',
});
const memberTasks = await member.get('/tasks/user');
const syncedTask = find(memberTasks, findAssignedTask);

View File

@@ -1,3 +1,4 @@
import range from 'lodash/range';
import {
generateUser,
} from '../../../../helpers/api-integration/v3';
@@ -26,6 +27,7 @@ describe('GET /user', () => {
expect(returnedUser.auth.local.passwordHashMethod).to.not.exist;
expect(returnedUser.auth.local.salt).to.not.exist;
expect(returnedUser.apiToken).to.not.exist;
expect(returnedUser.secret).to.not.exist;
});
it('returns only user properties requested', async () => {
@@ -38,4 +40,30 @@ describe('GET /user', () => {
expect(returnedUser.notifications).to.exist;
expect(returnedUser.stats).to.not.exist;
});
it('does not return requested private properties', async () => {
const returnedUser = await user.get('/user?userFields=apiToken,secret.text');
expect(returnedUser.apiToken).to.not.exist;
expect(returnedUser.secret).to.not.exist;
});
it('returns the full inbox', async () => {
const otherUser = await generateUser();
const amountOfMessages = 12;
const allMessagesPromise = range(amountOfMessages)
.map(i => otherUser.post('/members/send-private-message', {
toUserId: user.id,
message: `Message Num: ${i}`,
}));
await Promise.all(allMessagesPromise);
const returnedUser = await user.get('/user');
expect(returnedUser._id).to.equal(user._id);
expect(returnedUser.inbox).to.exist;
expect(Object.keys(returnedUser.inbox.messages)).to.have.a.lengthOf(amountOfMessages);
});
});

Some files were not shown because too many files have changed in this diff Show More