Compare commits

..

174 Commits

Author SHA1 Message Date
SabreCat bf222351e5 4.277.4 2023-08-01 18:38:31 -05:00
SabreCat 6867aab74b fix(faq): better mobile routing, new q 2023-08-01 18:38:21 -05:00
SabreCat 38ac4c53d1 4.277.3 2023-08-01 13:44:54 -05:00
SabreCat 9b8bb99039 fix(profile): revert accidental changes 2023-08-01 13:44:49 -05:00
SabreCat f8bcc81fe6 4.277.2 2023-08-01 13:02:00 -05:00
SabreCat cc18acd69a Merge branch 'sabrecat/chat-warning' into release 2023-08-01 13:01:15 -05:00
SabreCat c5a2e5a2e0 fix(chat): fill in the blank 2023-07-31 19:25:07 -05:00
SabreCat 8f92993045 4.277.1 2023-07-31 12:10:32 -05:00
SabreCat 712205d253 Merge branch 'develop' into sabrecat/chat-warning 2023-07-31 12:07:48 -05:00
Sabe Jones ede036e94b Universal routing for migrations (#14772)
* refactor(notifs): universal routing for migrations

* fix(lint): remove whitespace

* chore(content): update migration for new scheme

* fix(migration): account for cake

* chore(images): update sprite CSS

---------

Co-authored-by: SabreCat <sabe@habitica.com>
2023-07-31 12:07:46 -05:00
SabreCat 67c16c137b Merge branch 'release' into develop 2023-07-31 12:07:26 -05:00
CuriousMagpie 652dfa6ecc feat(content): upgrade profile page 2023-07-26 16:33:05 -04:00
SabreCat 5c4aa664b5 4.277.0 2023-07-25 14:17:04 -05:00
SabreCat 184a9df775 Merge branch 'develop' into release 2023-07-25 14:16:54 -05:00
Phillip Thelen 754d46f1f3 Optimise looking for party request (#14773)
* Reset looking for party state if a user joins a party

* filter out users that already received an invite in query

* fix(lfp): add back in-party filter
Temporary until migration to clear seeking flag from users in party

---------

Co-authored-by: SabreCat <sabe@habitica.com>
2023-07-25 14:16:03 -05:00
Sabe Jones 683649ff1a Don't collapse different spell targets in party chat (#14775)
* fix(spells): don't collapse different targets

* fix(lint): indentation

---------

Co-authored-by: SabreCat <sabe@habitica.com>
2023-07-25 14:15:12 -05:00
Natalie L 08ac059a7f feat(content): add August 2023 subscriber items (#14784)
* feat(content): add June subscriber items

* feat(content): add August subscriber items
2023-07-25 14:14:28 -05:00
Weblate 7c9b0f207c Merge branch 'origin/develop' into Weblate. 2023-07-25 21:11:35 +02:00
Weblate f193b8de2c Translated using Weblate (English (en@lolcat))
Currently translated at 5.5% (44 of 798 strings)

Translated using Weblate (English (en@lolcat))

Currently translated at 100.0% (47 of 47 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (112 of 112 strings)

Translated using Weblate (Russian)

Currently translated at 98.8% (2837 of 2871 strings)

Translated using Weblate (Ukrainian)

Currently translated at 90.5% (692 of 764 strings)

Translated using Weblate (Dutch)

Currently translated at 91.3% (729 of 798 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Japanese)

Currently translated at 99.6% (2862 of 2871 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (188 of 188 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (798 of 798 strings)

Translated using Weblate (English (en@lolcat))

Currently translated at 3.6% (29 of 798 strings)

Translated using Weblate (Indonesian)

Currently translated at 76.6% (2197 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 85.2% (651 of 764 strings)

Translated using Weblate (Japanese)

Currently translated at 99.4% (187 of 188 strings)

Translated using Weblate (Japanese)

Currently translated at 99.2% (792 of 798 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Indonesian)

Currently translated at 76.2% (2187 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 29.0% (833 of 2871 strings)

Translated using Weblate (Russian)

Currently translated at 98.5% (2830 of 2871 strings)

Translated using Weblate (Russian)

Currently translated at 98.5% (2830 of 2871 strings)

Translated using Weblate (Ukrainian)

Currently translated at 84.4% (645 of 764 strings)

Translated using Weblate (Ukrainian)

Currently translated at 84.2% (644 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 75.9% (2177 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (188 of 188 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (798 of 798 strings)

Translated using Weblate (French)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (French)

Currently translated at 100.0% (275 of 275 strings)

Translated using Weblate (Ukrainian)

Currently translated at 83.6% (639 of 764 strings)

Translated using Weblate (French)

Currently translated at 100.0% (764 of 764 strings)

Translated using Weblate (French)

Currently translated at 100.0% (791 of 791 strings)

Translated using Weblate (Indonesian)

Currently translated at 75.5% (2167 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 83.6% (639 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 75.2% (2157 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 82.9% (634 of 764 strings)

Translated using Weblate (Ukrainian)

Currently translated at 29.0% (833 of 2871 strings)

Translated using Weblate (Indonesian)

Currently translated at 74.8% (2147 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 81.4% (622 of 764 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (376 of 376 strings)

Translated using Weblate (Ukrainian)

Currently translated at 78.1% (597 of 764 strings)

Translated using Weblate (Croatian)

Currently translated at 77.0% (94 of 122 strings)

Translated using Weblate (Indonesian)

Currently translated at 74.5% (2137 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 77.7% (594 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 74.1% (2127 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 77.4% (592 of 764 strings)

Translated using Weblate (Vietnamese)

Currently translated at 97.3% (148 of 152 strings)

Translated using Weblate (Dutch)

Currently translated at 86.6% (2484 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 73.8% (2117 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 76.8% (587 of 764 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (275 of 275 strings)

Translated using Weblate (Ukrainian)

Currently translated at 29.0% (833 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 76.7% (586 of 764 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Indonesian)

Currently translated at 73.4% (2107 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 76.7% (586 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 72.7% (2087 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 72.2% (2071 of 2867 strings)

Translated using Weblate (Spanish)

Currently translated at 51.8% (55 of 106 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 46.2% (49 of 106 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 74.5% (91 of 122 strings)

Translated using Weblate (Indonesian)

Currently translated at 71.9% (2064 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 76.7% (586 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 71.6% (2054 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 97.1% (103 of 106 strings)

Translated using Weblate (Ukrainian)

Currently translated at 76.7% (586 of 764 strings)

Translated using Weblate (Ukrainian)

Currently translated at 28.6% (822 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 28.6% (822 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (222 of 222 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Ukrainian)

Currently translated at 28.5% (819 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 28.5% (819 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 28.5% (819 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 28.5% (819 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 71.2% (2043 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 81.1% (86 of 106 strings)

Translated using Weblate (Ukrainian)

Currently translated at 81.1% (86 of 106 strings)

Translated using Weblate (Ukrainian)

Currently translated at 81.1% (86 of 106 strings)

Translated using Weblate (Ukrainian)

Currently translated at 76.7% (586 of 764 strings)

Translated using Weblate (Ukrainian)

Currently translated at 76.7% (586 of 764 strings)

Translated using Weblate (Ukrainian)

Currently translated at 75.0% (573 of 764 strings)

Translated using Weblate (Dutch)

Currently translated at 86.6% (2483 of 2867 strings)

Translated using Weblate (Dutch)

Currently translated at 99.1% (121 of 122 strings)

Translated using Weblate (Indonesian)

Currently translated at 70.9% (2033 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 70.5% (2024 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 70.1% (2011 of 2867 strings)

Translated using Weblate (Russian)

Currently translated at 99.7% (789 of 791 strings)

Translated using Weblate (Indonesian)

Currently translated at 69.2% (1984 of 2867 strings)

Translated using Weblate (Korean)

Currently translated at 73.8% (584 of 791 strings)

Translated using Weblate (Croatian)

Currently translated at 75.4% (92 of 122 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (222 of 222 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 68.8% (1974 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 68.6% (1968 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 68.6% (1968 of 2867 strings)

Translated using Weblate (Latvian)

Currently translated at 23.5% (25 of 106 strings)

Translated using Weblate (Latvian)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Indonesian)

Currently translated at 68.3% (1959 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 68.3% (1959 of 2867 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Indonesian)

Currently translated at 68.3% (1959 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 68.3% (1959 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 68.0% (1950 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 67.1% (1926 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 67.1% (1924 of 2867 strings)

Translated using Weblate (Dutch)

Currently translated at 68.8% (73 of 106 strings)

Translated using Weblate (Latvian)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Japanese)

Currently translated at 97.6% (409 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.9% (1919 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Latvian)

Currently translated at 70.3% (107 of 152 strings)

Translated using Weblate (Japanese)

Currently translated at 99.7% (2860 of 2867 strings)

Translated using Weblate (Japanese)

Currently translated at 99.5% (221 of 222 strings)

Translated using Weblate (Japanese)

Currently translated at 99.7% (2860 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Turkish)

Currently translated at 62.9% (498 of 791 strings)

Translated using Weblate (Belarusian)

Currently translated at 23.0% (35 of 152 strings)

Translated using Weblate (Polish)

Currently translated at 98.6% (150 of 152 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Turkish)

Currently translated at 96.8% (91 of 94 strings)

Translated using Weblate (Ukrainian)

Currently translated at 28.4% (816 of 2867 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Belarusian)

Currently translated at 17.1% (26 of 152 strings)

Translated using Weblate (Belarusian)

Currently translated at 11.1% (17 of 152 strings)

Translated using Weblate (Dutch)

Currently translated at 86.5% (2480 of 2867 strings)

Translated using Weblate (Dutch)

Currently translated at 65.0% (69 of 106 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Korean)

Currently translated at 73.1% (579 of 791 strings)

Translated using Weblate (Croatian)

Currently translated at 91.7% (167 of 182 strings)

Translated using Weblate (Croatian)

Currently translated at 53.6% (119 of 222 strings)

Translated using Weblate (Croatian)

Currently translated at 80.7% (617 of 764 strings)

Translated using Weblate (Croatian)

Currently translated at 67.0% (63 of 94 strings)

Translated using Weblate (Croatian)

Currently translated at 88.9% (194 of 218 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (15 of 15 strings)

Translated using Weblate (Croatian)

Currently translated at 81.9% (308 of 376 strings)

Translated using Weblate (Croatian)

Currently translated at 63.1% (77 of 122 strings)

Translated using Weblate (Croatian)

Currently translated at 71.8% (158 of 220 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 79.2% (84 of 106 strings)

Translated using Weblate (Ukrainian)

Currently translated at 75.0% (573 of 764 strings)

Translated using Weblate (Ukrainian)

Currently translated at 97.7% (217 of 222 strings)

Translated using Weblate (Dutch)

Currently translated at 95.4% (212 of 222 strings)

Translated using Weblate (Turkish)

Currently translated at 75.8% (318 of 419 strings)

Translated using Weblate (Ukrainian)

Currently translated at 73.5% (78 of 106 strings)

Translated using Weblate (Dutch)

Currently translated at 51.8% (55 of 106 strings)

Translated using Weblate (Dutch)

Currently translated at 91.7% (726 of 791 strings)

Translated using Weblate (Turkish)

Currently translated at 59.2% (469 of 791 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Portuguese)

Currently translated at 61.9% (1775 of 2867 strings)

Translated using Weblate (Polish)

Currently translated at 96.0% (146 of 152 strings)

Translated using Weblate (Polish)

Currently translated at 61.1% (1754 of 2867 strings)

Translated using Weblate (Polish)

Currently translated at 75.9% (580 of 764 strings)

Translated using Weblate (Polish)

Currently translated at 96.4% (763 of 791 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (275 of 275 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Ukrainian)

Currently translated at 64.1% (68 of 106 strings)

Translated using Weblate (Ukrainian)

Currently translated at 64.1% (68 of 106 strings)

Translated using Weblate (Ukrainian)

Currently translated at 75.0% (573 of 764 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.8% (414 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Polish)

Currently translated at 96.3% (762 of 791 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Croatian)

Currently translated at 79.5% (105 of 132 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (56 of 56 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Croatian)

Currently translated at 72.0% (302 of 419 strings)

Translated using Weblate (Croatian)

Currently translated at 61.4% (75 of 122 strings)

Translated using Weblate (Polish)

Currently translated at 95.5% (756 of 791 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (764 of 764 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Croatian)

Currently translated at 27.3% (29 of 106 strings)

Translated using Weblate (Croatian)

Currently translated at 78.7% (104 of 132 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Croatian)

Currently translated at 61.4% (75 of 122 strings)

Translated using Weblate (Croatian)

Currently translated at 71.3% (157 of 220 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Japanese)

Currently translated at 98.9% (756 of 764 strings)

Translated using Weblate (Turkish)

Currently translated at 72.9% (89 of 122 strings)

Translated using Weblate (Polish)

Currently translated at 95.3% (754 of 791 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (56 of 56 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2867 of 2867 strings)

Translated using Weblate (Turkish)

Currently translated at 46.2% (49 of 106 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (15 of 15 strings)

Translated using Weblate (Turkish)

Currently translated at 73.5% (562 of 764 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (47 of 47 strings)

Translated using Weblate (Polish)

Currently translated at 95.1% (753 of 791 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (222 of 222 strings)

Translated using Weblate (Turkish)

Currently translated at 71.3% (87 of 122 strings)

Translated using Weblate (Arabic)

Currently translated at 23.5% (25 of 106 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (222 of 222 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (112 of 112 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (61 of 61 strings)

Translated using Weblate (Turkish)

Currently translated at 48.0% (132 of 275 strings)

Translated using Weblate (Turkish)

Currently translated at 75.6% (317 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (182 of 182 strings)

Translated using Weblate (Turkish)

Currently translated at 41.5% (44 of 106 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (54 of 54 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Turkish)

Currently translated at 93.6% (44 of 47 strings)

Translated using Weblate (Turkish)

Currently translated at 93.4% (142 of 152 strings)

Translated using Weblate (Korean)

Currently translated at 72.9% (577 of 791 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Translated using Weblate (Polish)

Currently translated at 94.5% (748 of 791 strings)

Translated using Weblate (Polish)

Currently translated at 94.5% (748 of 791 strings)

Translated using Weblate (Polish)

Currently translated at 94.5% (748 of 791 strings)

Translated using Weblate (Polish)

Currently translated at 94.0% (744 of 791 strings)

Translated using Weblate (Russian)

Currently translated at 97.9% (2808 of 2867 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2867 of 2867 strings)

Translated using Weblate (Russian)

Currently translated at 99.6% (761 of 764 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (376 of 376 strings)

Translated using Weblate (Russian)

Currently translated at 99.6% (788 of 791 strings)

Translated using Weblate (Polish)

Currently translated at 94.0% (744 of 791 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (222 of 222 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Russian)

Currently translated at 98.1% (218 of 222 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (275 of 275 strings)

Translated using Weblate (Russian)

Currently translated at 98.8% (414 of 419 strings)

Translated using Weblate (Russian)

Currently translated at 99.4% (760 of 764 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (376 of 376 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (222 of 222 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.5% (1909 of 2867 strings)

Co-authored-by: Adrián Chaves Fernández <adrian@chaves.io>
Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Anony Moly <supersoda1233@gmail.com>
Co-authored-by: Bengisu Diri <bengisudiri@hotmail.com>
Co-authored-by: Benoit Hetru <me+hbtc@gahanka.net>
Co-authored-by: Bogdan Derdziak <bagtirr@gmail.com>
Co-authored-by: BryanLim <youmakemysonlooklikeelonmusk@gmail.com>
Co-authored-by: Chucklestone <utkuulassimsek@gmail.com>
Co-authored-by: Deni Zubin <deni.zubin@gmail.com>
Co-authored-by: Elsyana Z <frostaxter@gmail.com>
Co-authored-by: Evan Kletniek <rutakl2010@gmail.com>
Co-authored-by: Falzart <muh_fauzi_ramadhan@yahoo.co.id>
Co-authored-by: Full Name <supersoda1233@gmail.com>
Co-authored-by: Hinano_Miyako <sinemgokcebircan@gmail.com>
Co-authored-by: John Collins <munmedia9865@gmail.com>
Co-authored-by: João Pedro <lolpeople.mega@gmail.com>
Co-authored-by: Julian H <julian.henin29@gmail.com>
Co-authored-by: Justcallme rye <Blizzardscf32@gmail.com>
Co-authored-by: Kiryla <ansgar@tut.by>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Marek Tomek <markowalzky2@gmail.com>
Co-authored-by: Maria G <magu18ab@hotmail.com>
Co-authored-by: Melina Rake <melinarake@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Nodaysoff <convoron@yandex.ru>
Co-authored-by: Oleksandr Shtonda <oleksandrshtonda@gmail.com>
Co-authored-by: Omar Bertolla <scaram@icloud.com>
Co-authored-by: Rayane Benamre <thegamercore3@gmail.com>
Co-authored-by: Simon Hagman <dragonzimpan@gmail.com>
Co-authored-by: Svetlana <shkulepo@rambler.ru>
Co-authored-by: TOMA Mitsuru <toma0001@gmail.com>
Co-authored-by: Tetiana <merekka13@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Yuliia Pastukh <yuliya.bratash666@gmail.com>
Co-authored-by: billypat <kreideraine@gmail.com>
Co-authored-by: inesa <inessami200@gmail.com>
Co-authored-by: minhtan <minhtan11221122@gmail.com>
Co-authored-by: sam de wit <samedewit@gmail.com>
Co-authored-by: Ілля <bo4onok5@gmail.com>
Co-authored-by: Катерина <kate0712ann@gmail.com>
Co-authored-by: 왕효준 <gywns0417@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/be/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/lv/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/sv/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/vi/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/en@lolcat/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/id/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ko/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/character/id/
Translate-URL: https://translate.habitica.com/projects/habitica/character/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/character/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/content/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/content/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/content/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/en@lolcat/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/death/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/death/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/es/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/lv/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/front/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/id/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/lv/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/messages/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/overview/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/spells/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/spells/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/id/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/uk/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Challenge
Translation: Habitica/Character
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
Translation: Habitica/Contrib
Translation: Habitica/Death
Translation: Habitica/Defaulttasks
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Groups
Translation: Habitica/Inventory
Translation: Habitica/Limited
Translation: Habitica/Messages
Translation: Habitica/Npc
Translation: Habitica/Overview
Translation: Habitica/Pets
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Settings
Translation: Habitica/Spells
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2023-07-25 21:11:22 +02:00
Natalie L 812e2132d9 fix(config.json.example) (#14787)
* fix(string): questVice1Notes html changed to a mobile-device friendly format

* fix(strings): updated limited.json with "dateEnd" & "monthYYYY" months & put in chronological order

* fix(string): remove extra word from headSpecialSummer2022WarriorNotes

* fix(string): corrected armorSpecialSummer2022MageNotes

* fix: remove duplicated string and adjust upgrade button style

* fix(style): set border radii to 8px on upgrading-group id

* fix(payments): remove duplicate entry from another modal

* chore(fix): restore string inadvertently removed during a refactor

* chore(fix): comma dangle

* chore(typo): who knew, that Y was actually important...

* chore(typo): fix text in questBewilderNotes

* chore(string): clarify polar pets requirements

* couple small changes to the footer as pointed out by users

* chore(fix): correct name of Fabulous Party Hat

* fix(typo): correct February backgrounds release date to 2023, not 2022

* fix(trusted_domains): removed https:// from the beginning of localhost

* fix(config): correct habitica url format too

---------

Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2023-07-25 14:10:47 -05:00
SabreCat 8558dcc3a8 4.276.2 2023-07-18 10:34:02 -05:00
SabreCat f8a8b61726 Merge branch 'phillip/chat-skill-merge' into release 2023-07-18 10:33:55 -05:00
SabreCat 067a1de49e fix(lint): newlines, console 2023-07-18 10:20:58 -05:00
SabreCat 65ef3bfeca fix(migration): casing 2023-07-18 10:04:56 -05:00
SabreCat af04657856 feat(event): Summer Splash Orcas 2023-07-18 09:12:28 -05:00
SabreCat 6089b02746 4.276.1 2023-07-13 14:45:37 -05:00
SabreCat f3f69b1871 fix(lfp): white background for seeker card 2023-07-13 14:45:31 -05:00
SabreCat 259f7ef588 fix(chat): add default to switch block 2023-07-11 18:25:59 -05:00
SabreCat 106a0c9ed8 fix(chat): collapse repetitive spells for real now 2023-07-11 17:01:17 -05:00
SabreCat 578083dde6 chore(faq): sync up 2023-07-11 14:15:27 -05:00
Phillip Thelen 74ba5c0b27 bring merging to MVP 2023-07-11 15:10:50 +02:00
SabreCat bb54a6532d fix(chat): correct bad length check 2023-07-10 15:37:46 -05:00
SabreCat 3c36c59bb3 Merge branch 'develop' into phillip/chat-skill-merge 2023-07-10 15:12:12 -05:00
SabreCat 2308961de6 fix(lint): address fatal errors 2023-07-10 15:11:22 -05:00
Phillip Thelen 2d71a902f1 Merge skill casting messages together 2023-07-10 16:27:31 +02:00
SabreCat 1deb903186 Merge branch 'release' into sabrecat/chat-warning 2023-07-06 15:23:46 -05:00
SabreCat 8c00b91cc6 feat(faq): update sunset faq 2023-07-06 15:23:42 -05:00
SabreCat 70d59be39b 4.276.0 2023-07-04 13:23:29 -05:00
Natalie L c562c93158 feat(content): add July 2023 backgrounds and Enchanted Armoire (#14733)
* feat(content): add June subscriber items

* feat(content): add July backgrounds and Enchanted Armoire Items

* Update backgrounds.json

---------

Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2023-07-04 13:23:06 -05:00
SabreCat 7a430889a8 Merge branch 'develop' into sabrecat/chat-warning 2023-06-29 14:53:15 -05:00
SabreCat 519da49886 4.275.0 2023-06-29 14:51:37 -05:00
Weblate 79d50cb3e0 Merge branch 'origin/develop' into Weblate. 2023-06-29 21:36:09 +02:00
Weblate c588c2b2ff Translated using Weblate (Korean)
Currently translated at 97.8% (46 of 47 strings)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Deleted translation using Weblate (Acehnese)

Added translation using Weblate (Acehnese)

Translated using Weblate (Scots)

Currently translated at 90.9% (111 of 122 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2863 of 2863 strings)

Translated using Weblate (Portuguese)

Currently translated at 62.0% (1777 of 2863 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (218 of 218 strings)

Added translation using Weblate (Acehnese)

Translated using Weblate (Russian)

Currently translated at 97.4% (2790 of 2863 strings)

Translated using Weblate (Russian)

Currently translated at 96.7% (2769 of 2863 strings)

Translated using Weblate (Croatian)

Currently translated at 26.4% (28 of 106 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (791 of 791 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1892 of 2863 strings)

Translated using Weblate (Swedish)

Currently translated at 98.6% (150 of 152 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 98.3% (2817 of 2863 strings)

Translated using Weblate (Swedish)

Currently translated at 98.6% (150 of 152 strings)

Translated using Weblate (Russian)

Currently translated at 96.4% (2761 of 2863 strings)

Translated using Weblate (Swedish)

Currently translated at 76.6% (321 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1892 of 2863 strings)

Translated using Weblate (Malay)

Currently translated at 48.2% (54 of 112 strings)

Translated using Weblate (Korean)

Currently translated at 72.9% (577 of 791 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1892 of 2863 strings)

Translated using Weblate (Galician)

Currently translated at 65.5% (501 of 764 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (275 of 275 strings)

Translated using Weblate (Malay)

Currently translated at 54.3% (430 of 791 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1892 of 2863 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (275 of 275 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2863 of 2863 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1892 of 2863 strings)

Translated using Weblate (Russian)

Currently translated at 99.1% (784 of 791 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (791 of 791 strings)

Translated using Weblate (Korean)

Currently translated at 72.3% (572 of 791 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Japanese)

Currently translated at 97.4% (268 of 275 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (137 of 137 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (275 of 275 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1892 of 2863 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.8% (2859 of 2863 strings)

Translated using Weblate (German)

Currently translated at 63.2% (67 of 106 strings)

Translated using Weblate (German)

Currently translated at 81.1% (99 of 122 strings)

Translated using Weblate (Galician)

Currently translated at 98.5% (135 of 137 strings)

Translated using Weblate (German)

Currently translated at 100.0% (791 of 791 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Galician)

Currently translated at 98.5% (271 of 275 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (220 of 220 strings)

Translated using Weblate (German)

Currently translated at 99.4% (787 of 791 strings)

Translated using Weblate (German)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Korean)

Currently translated at 99.7% (375 of 376 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.5% (2851 of 2863 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1892 of 2863 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1892 of 2863 strings)

Translated using Weblate (Russian)

Currently translated at 95.0% (116 of 122 strings)

Translated using Weblate (Russian)

Currently translated at 98.1% (217 of 221 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.3% (2844 of 2863 strings)

Translated using Weblate (Russian)

Currently translated at 90.9% (111 of 122 strings)

Translated using Weblate (Russian)

Currently translated at 98.8% (782 of 791 strings)

Translated using Weblate (Malay)

Currently translated at 53.2% (421 of 791 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.2% (131 of 132 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.5% (413 of 419 strings)

Translated using Weblate (Hebrew)

Currently translated at 63.7% (267 of 419 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.3% (2843 of 2863 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1891 of 2863 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (218 of 218 strings)

Translated using Weblate (Ukrainian)

Currently translated at 55.6% (59 of 106 strings)

Translated using Weblate (Dutch)

Currently translated at 49.0% (52 of 106 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (791 of 791 strings)

Translated using Weblate (Dutch)

Currently translated at 89.7% (710 of 791 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Malay)

Currently translated at 52.3% (414 of 791 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.0% (1891 of 2863 strings)

Translated using Weblate (Hebrew)

Currently translated at 56.5% (237 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.7% (1891 of 2831 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (182 of 182 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Galician)

Currently translated at 65.5% (501 of 764 strings)

Translated using Weblate (Russian)

Currently translated at 98.1% (217 of 221 strings)

Translated using Weblate (Hebrew)

Currently translated at 60.1% (133 of 221 strings)

Translated using Weblate (Hebrew)

Currently translated at 50.3% (211 of 419 strings)

Translated using Weblate (Russian)

Currently translated at 99.5% (217 of 218 strings)

Translated using Weblate (Russian)

Currently translated at 98.3% (179 of 182 strings)

Translated using Weblate (Russian)

Currently translated at 98.3% (179 of 182 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (182 of 182 strings)

Translated using Weblate (Galician)

Currently translated at 65.5% (501 of 764 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (182 of 182 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (218 of 218 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (220 of 220 strings)

Translated using Weblate (Malay)

Currently translated at 52.0% (412 of 791 strings)

Translated using Weblate (Malay)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.4% (1881 of 2831 strings)

Translated using Weblate (Hebrew)

Currently translated at 41.0% (325 of 791 strings)

Translated using Weblate (Ukrainian)

Currently translated at 98.6% (150 of 152 strings)

Translated using Weblate (Hebrew)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Malay)

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Dutch)

Currently translated at 97.3% (148 of 152 strings)

Translated using Weblate (Malay)

Currently translated at 82.0% (87 of 106 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 65.2% (1848 of 2831 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (112 of 112 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (182 of 182 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (218 of 218 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (220 of 220 strings)

Translated using Weblate (Indonesian)

Currently translated at 92.6% (388 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 64.9% (1838 of 2831 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (764 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 91.1% (382 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 64.2% (1818 of 2831 strings)

Translated using Weblate (Indonesian)

Currently translated at 98.6% (754 of 764 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (French)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Portuguese)

Currently translated at 38.6% (41 of 106 strings)

Translated using Weblate (Malay)

Currently translated at 74.5% (79 of 106 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.0% (219 of 221 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 91.1% (382 of 419 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2835 of 2835 strings)

Translated using Weblate (Indonesian)

Currently translated at 63.5% (1798 of 2831 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (218 of 218 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (764 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 97.3% (744 of 764 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (791 of 791 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Indonesian)

Currently translated at 89.4% (375 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 62.8% (1778 of 2831 strings)

Translated using Weblate (Indonesian)

Currently translated at 93.4% (714 of 764 strings)

Co-authored-by: Adrián Chaves Fernández <adrian@chaves.io>
Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Andreway <watermelontvandreway2@gmail.com>
Co-authored-by: Antje Schubert <antje.schubert96@web.de>
Co-authored-by: Arthur Ouzlaner <panther1984@gmail.com>
Co-authored-by: Benoit Hetru <me+hbtc@gahanka.net>
Co-authored-by: BryanLim <youmakemysonlooklikeelonmusk@gmail.com>
Co-authored-by: Deni Zubin <deni.zubin@gmail.com>
Co-authored-by: Falzart <muh_fauzi_ramadhan@yahoo.co.id>
Co-authored-by: Hanafi <naflizo@gmail.com>
Co-authored-by: Jan Willem Middag <jwmiddag@gmail.com>
Co-authored-by: Jinnel <1210678078@qq.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Natalie Luhrs <eilatan@gmail.com>
Co-authored-by: Phillip Thelen <phillip@habitica.com>
Co-authored-by: Rostislav <rostislav.zem@gmail.com>
Co-authored-by: Sara Olson <sara@habitica.com>
Co-authored-by: Simon Hagman <dragonzimpan@gmail.com>
Co-authored-by: Svetlana <shkulepo@rambler.ru>
Co-authored-by: TOMA Mitsuru <toma0001@gmail.com>
Co-authored-by: Thiago Braga <thibraga06@gmail.com>
Co-authored-by: Timur Niyazov <timmy568@gmail.com>
Co-authored-by: Vladyslav Yavnyk <yavnyjvladislav@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: lilia petervari <lilipetervari@gmail.com>
Co-authored-by: Ілля <bo4onok5@gmail.com>
Co-authored-by: Естай <akseleu@yahoo.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/he/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ms/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/sv/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/he/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ko/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ms/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/character/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/de/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/sco/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ko/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ko/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ms/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pt/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/id/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/es/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/he/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/id/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/sv/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/id/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/overview/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/ms/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/id/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/he/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/hr/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/id/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pt_BR/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Character
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
Translation: Habitica/Contrib
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Groups
Translation: Habitica/Limited
Translation: Habitica/Npc
Translation: Habitica/Overview
Translation: Habitica/Pets
Translation: Habitica/Questscontent
Translation: Habitica/Rebirth
Translation: Habitica/Settings
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2023-06-29 21:35:54 +02:00
Natalie L 77a490283c feat(content): add July 2023 subscriber items (#14732)
* feat(content): add June subscriber items

* feat(content): add July subscriber items
2023-06-29 14:35:05 -05:00
dependabot[bot] e49d26eacd build(deps): bump stripe from 12.8.0 to 12.9.0 (#14699)
Bumps [stripe](https://github.com/stripe/stripe-node) from 12.8.0 to 12.9.0.
- [Release notes](https://github.com/stripe/stripe-node/releases)
- [Changelog](https://github.com/stripe/stripe-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-node/compare/v12.8.0...v12.9.0)

---
updated-dependencies:
- dependency-name: stripe
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-21 13:50:08 -04:00
dependabot[bot] 7b0fd57eb9 build(deps): bump @babel/core from 7.22.1 to 7.22.5 (#14700)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.22.1 to 7.22.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.22.5/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-21 13:49:41 -04:00
dependabot[bot] 7171334e31 build(deps): bump @babel/register from 7.21.0 to 7.22.5 (#14702)
Bumps [@babel/register](https://github.com/babel/babel/tree/HEAD/packages/babel-register) from 7.21.0 to 7.22.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.22.5/packages/babel-register)

---
updated-dependencies:
- dependency-name: "@babel/register"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-21 13:49:16 -04:00
dependabot[bot] a3235214b2 build(deps): bump core-js from 3.30.2 to 3.31.0 in /website/client (#14704)
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.30.2 to 3.31.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.31.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-21 13:48:45 -04:00
dependabot[bot] fca234c45a build(deps-dev): bump sinon from 15.1.0 to 15.1.2 (#14713)
Bumps [sinon](https://github.com/sinonjs/sinon) from 15.1.0 to 15.1.2.
- [Release notes](https://github.com/sinonjs/sinon/releases)
- [Changelog](https://github.com/sinonjs/sinon/blob/main/docs/changelog.md)
- [Commits](https://github.com/sinonjs/sinon/compare/v15.1.0...v15.1.2)

---
updated-dependencies:
- dependency-name: sinon
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-21 13:47:21 -04:00
dependabot[bot] 7519023f06 build(deps): bump sass from 1.62.1 to 1.63.4 in /website/client (#14719)
Bumps [sass](https://github.com/sass/dart-sass) from 1.62.1 to 1.63.4.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.62.1...1.63.4)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-21 13:46:01 -04:00
SabreCat df84d7c7b1 Merge branch 'release' into develop 2023-06-19 16:36:39 -05:00
SabreCat e837ebec49 4.274.0 2023-06-19 16:36:13 -05:00
Natalie L c7ed693e18 feat(gala): Add 2023 Summer Splash Gala Items (#14712)
* feat(content): add June subscriber items

* feat(gala): add images

* feat(gala): add code

* feat(gala): text strings

* feat(gala): testing and final updates

* feat(gala): fixed a couple of typos

* fix(event): proofread strings and dates
Also replace empty descriptions for Rogue and Healer

* fix(event): NO EGG

---------

Co-authored-by: SabreCat <sabe@habitica.com>
2023-06-19 16:36:05 -05:00
Ash e72a25ad02 Fixes #14438: a11y: add semantic roles to habit and todo controls (#14467)
* a11y: add aria roles to habit control

* a11y: add role to todo checkboxes

* a11y: add aria-labels to score buttons
Helps with screen readers

* add i18n to aria-labels
2023-06-19 17:00:16 -04:00
SabreCat 2c12d5ee29 4.273.3 2023-06-13 14:57:37 -05:00
Weblate c3f0abadd7 Merge branch 'origin/develop' into Weblate. 2023-06-13 21:54:27 +02:00
Phillip Thelen adf0a2efca Fix perkMonthCount not being editable/saving (#14711)
Co-authored-by: SabreCat <sabe@habitica.com>
2023-06-13 14:51:58 -05:00
SabreCat e4523c09dc Merge branch 'release' into develop 2023-06-13 14:40:41 -05:00
SabreCat 91d98b86e1 fix(lint): whitespace 2023-06-13 14:40:26 -05:00
Weblate 779fb8bce5 Translated using Weblate (Indonesian)
Currently translated at 62.0% (1758 of 2831 strings)

Translated using Weblate (Malay)

Currently translated at 70.7% (75 of 106 strings)

Translated using Weblate (Japanese)

Currently translated at 98.9% (756 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 61.9% (1753 of 2831 strings)

Translated using Weblate (Indonesian)

Currently translated at 87.8% (368 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 61.8% (1752 of 2831 strings)

Translated using Weblate (Indonesian)

Currently translated at 92.1% (704 of 764 strings)

Translated using Weblate (Malay)

Currently translated at 61.3% (65 of 106 strings)

Translated using Weblate (Indonesian)

Currently translated at 85.9% (360 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 61.4% (1740 of 2831 strings)

Translated using Weblate (Indonesian)

Currently translated at 89.5% (684 of 764 strings)

Translated using Weblate (Malay)

Currently translated at 59.4% (63 of 106 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 92.6% (202 of 218 strings)

Translated using Weblate (Indonesian)

Currently translated at 84.7% (355 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 60.6% (1718 of 2831 strings)

Translated using Weblate (Indonesian)

Currently translated at 83.9% (641 of 764 strings)

Translated using Weblate (Irish)

Currently translated at 75.0% (114 of 152 strings)

Translated using Weblate (Irish)

Currently translated at 75.0% (114 of 152 strings)

Translated using Weblate (Russian)

Currently translated at 95.4% (211 of 221 strings)

Translated using Weblate (Russian)

Currently translated at 99.4% (760 of 764 strings)

Translated using Weblate (English (Pirate))

Currently translated at 82.2% (125 of 152 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (220 of 220 strings)

Translated using Weblate (Russian)

Currently translated at 96.3% (213 of 221 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Russian)

Currently translated at 95.5% (259 of 271 strings)

Translated using Weblate (Indonesian)

Currently translated at 60.6% (1718 of 2831 strings)

Translated using Weblate (Russian)

Currently translated at 89.6% (95 of 106 strings)

Translated using Weblate (Indonesian)

Currently translated at 83.3% (637 of 764 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (218 of 218 strings)

Translated using Weblate (Malay)

Currently translated at 52.8% (56 of 106 strings)

Translated using Weblate (Indonesian)

Currently translated at 83.3% (637 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (791 of 791 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (218 of 218 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Malay)

Currently translated at 98.6% (150 of 152 strings)

Translated using Weblate (Russian)

Currently translated at 98.5% (413 of 419 strings)

Translated using Weblate (Serbian)

Currently translated at 23.5% (25 of 106 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (784 of 784 strings)

Translated using Weblate (Malay)

Currently translated at 52.8% (56 of 106 strings)

Translated using Weblate (Malay)

Currently translated at 85.1% (115 of 135 strings)

Translated using Weblate (Indonesian)

Currently translated at 81.6% (342 of 419 strings)

Co-authored-by: Abiel Meza <mezaabiel@gmail.com>
Co-authored-by: Anastasia Wysocka <legitemail.uwu420@gmail.com>
Co-authored-by: Edward McGibney <edwardmcgibney95@gmail.com>
Co-authored-by: Falzart <muh_fauzi_ramadhan@yahoo.co.id>
Co-authored-by: Hanafi <naflizo@gmail.com>
Co-authored-by: Lauren C <laurenc7834@gmail.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Miroslav <entferner@yandex.com>
Co-authored-by: TOMA Mitsuru <toma0001@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: i3beograd <milica.the@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/en@pirate/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ga/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ms/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/id/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ms/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/sr/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/id/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/es/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/nb_NO/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/id/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/id/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/ms/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Faq
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Groups
Translation: Habitica/Limited
Translation: Habitica/Npc
Translation: Habitica/Questscontent
Translation: Habitica/Settings
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2023-06-13 09:29:03 +02:00
SabreCat f0fc83ed85 Merge branch 'release' into develop 2023-06-12 15:02:18 -05:00
SabreCat 30d2108c78 4.273.2 2023-06-12 15:02:06 -05:00
Natalie L ab68e8a5fe feat(content): add June pet quest bundle (#14694)
* feat(content): add June subscriber items

* feat(content): add June pet quest bundle

* fix(bundle): correct timing and visual issues

---------

Co-authored-by: SabreCat <sabe@habitica.com>
2023-06-12 15:01:34 -05:00
dependabot[bot] 31e9100ba2 build(deps): bump @babel/preset-env from 7.21.5 to 7.22.5 (#14695)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.21.5 to 7.22.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.22.5/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-08 15:45:46 -04:00
dependabot[bot] 0070f366bb build(deps): bump xml2js from 0.5.0 to 0.6.0 (#14673)
Bumps [xml2js](https://github.com/Leonidas-from-XIV/node-xml2js) from 0.5.0 to 0.6.0.
- [Commits](https://github.com/Leonidas-from-XIV/node-xml2js/compare/0.5.0...0.6.0)

---
updated-dependencies:
- dependency-name: xml2js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-08 15:38:28 -04:00
dependabot[bot] 2be6865a5c build(deps): bump winston from 3.8.2 to 3.9.0 (#14676)
Bumps [winston](https://github.com/winstonjs/winston) from 3.8.2 to 3.9.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/v3.8.2...v3.9.0)

---
updated-dependencies:
- dependency-name: winston
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-08 15:37:58 -04:00
dependabot[bot] db85768e9d build(deps): bump stripe from 12.6.0 to 12.8.0 (#14690)
Bumps [stripe](https://github.com/stripe/stripe-node) from 12.6.0 to 12.8.0.
- [Release notes](https://github.com/stripe/stripe-node/releases)
- [Changelog](https://github.com/stripe/stripe-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-node/compare/v12.6.0...v12.8.0)

---
updated-dependencies:
- dependency-name: stripe
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-08 15:34:03 -04:00
dependabot[bot] 3d40413882 build(deps): bump fast-xml-parser and is-svg (#14693)
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [is-svg](https://github.com/sindresorhus/is-svg). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 3.19.0 to 4.2.4
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/commits)

Updates `is-svg` from 4.3.1 to 4.4.0
- [Release notes](https://github.com/sindresorhus/is-svg/releases)
- [Commits](https://github.com/sindresorhus/is-svg/compare/v4.3.1...v4.4.0)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: indirect
- dependency-name: is-svg
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-08 15:32:28 -04:00
dependabot[bot] cc88e75950 build(deps): bump @babel/core from 7.21.8 to 7.22.1 (#14670)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.21.8 to 7.22.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.22.1/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-08 15:31:54 -04:00
SabreCat ff860b04fc Merge remote-tracking branch 'private/natalie/antisocial' into sabrecat/chat-warning 2023-06-07 15:02:11 -05:00
SabreCat 45dedbbdaa fix(banners): correct dismiss/show behavior 2023-06-07 15:00:51 -05:00
CuriousMagpie b6359ad032 WIP(faq): pixelate Daniel's border 2023-06-07 13:33:58 -04:00
SabreCat a5ae3e5877 4.273.1 2023-06-06 16:33:33 -05:00
SabreCat 60ed9d2944 Merge branch 'develop' into release 2023-06-06 16:33:27 -05:00
Natalie L 91fc4235aa fix(string): remove "due" string (#14683) 2023-06-06 16:33:01 -05:00
SabreCat 42e8dd1361 fix(vue): correct bad popovers breaking Chrome 2023-06-06 16:30:37 -05:00
CuriousMagpie 658a02bfc3 WIP(faq): add Daniel to sidebar 2023-06-06 15:26:31 -04:00
SabreCat 0185a1fbd6 Merge branch 'develop' into sabrecat/chat-warning 2023-06-06 09:22:23 -05:00
SabreCat 0a4bbbf173 4.273.0 2023-06-06 09:21:35 -05:00
SabreCat df22f5f7bf Merge branch 'develop' into release 2023-06-06 09:21:25 -05:00
Natalie L bb28bb5969 feat(content): add June backgrounds and Enchanted Armoire items (#14684)
* feat(content): add June subscriber items

* feat(content): add July backgrounds and Enchanted Armoire items

* feat(fix): correct sizing for aquarium background

* fix(strings): JSON formatting

* fix(sprites): add missing broad variant

---------

Co-authored-by: SabreCat <sabe@habitica.com>
2023-06-06 09:17:22 -05:00
SabreCat 3b6c39dc9b fix(banner): restore close X on pause 2023-06-06 08:57:10 -05:00
Weblate e4e8e0ff60 Translated using Weblate (Malay)
Currently translated at 51.8% (55 of 106 strings)

Translated using Weblate (Japanese)

Currently translated at 96.8% (214 of 221 strings)

Translated using Weblate (Malay)

Currently translated at 50.9% (54 of 106 strings)

Translated using Weblate (Indonesian)

Currently translated at 81.1% (340 of 419 strings)

Translated using Weblate (Portuguese)

Currently translated at 60.1% (163 of 271 strings)

Translated using Weblate (Indonesian)

Currently translated at 83.3% (637 of 764 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (56 of 56 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (182 of 182 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (271 of 271 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (218 of 218 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (61 of 61 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (220 of 220 strings)

Translated using Weblate (Belarusian)

Currently translated at 71.3% (157 of 220 strings)

Translated using Weblate (Japanese)

Currently translated at 95.9% (212 of 221 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (112 of 112 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Japanese)

Currently translated at 97.4% (264 of 271 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (271 of 271 strings)

Translated using Weblate (Japanese)

Currently translated at 96.4% (404 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 80.6% (338 of 419 strings)

Translated using Weblate (Japanese)

Currently translated at 99.8% (2828 of 2831 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (182 of 182 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Indonesian)

Currently translated at 83.3% (637 of 764 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (376 of 376 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (784 of 784 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (220 of 220 strings)

Translated using Weblate (Japanese)

Currently translated at 94.1% (208 of 221 strings)

Translated using Weblate (Indonesian)

Currently translated at 91.8% (249 of 271 strings)

Translated using Weblate (Indonesian)

Currently translated at 79.4% (333 of 419 strings)

Translated using Weblate (Indonesian)

Currently translated at 60.6% (1718 of 2831 strings)

Translated using Weblate (Japanese)

Currently translated at 78.3% (83 of 106 strings)

Translated using Weblate (Indonesian)

Currently translated at 83.3% (637 of 764 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (French)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Indonesian)

Currently translated at 83.3% (637 of 764 strings)

Translated using Weblate (Galician)

Currently translated at 60.2% (1706 of 2831 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (271 of 271 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Indonesian)

Currently translated at 78.5% (213 of 271 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 54.7% (58 of 106 strings)

Translated using Weblate (Indonesian)

Currently translated at 83.3% (637 of 764 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (152 of 152 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (419 of 419 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (218 of 218 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Galician)

Currently translated at 100.0% (220 of 220 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (221 of 221 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (112 of 112 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (132 of 132 strings)

Translated using Weblate (Indonesian)

Currently translated at 63.4% (172 of 271 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (218 of 218 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (182 of 182 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (106 of 106 strings)

Translated using Weblate (Indonesian)

Currently translated at 83.3% (637 of 764 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (376 of 376 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (784 of 784 strings)

Translated using Weblate (Indonesian)

Currently translated at 100.0% (152 of 152 strings)

Co-authored-by: Adrián Chaves Fernández <adrian@chaves.io>
Co-authored-by: Falzart <muh_fauzi_ramadhan@yahoo.co.id>
Co-authored-by: Hanafi <naflizo@gmail.com>
Co-authored-by: Hanna Aniskevich <northernwind@tut.by>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Sara Olson <sara@habitica.com>
Co-authored-by: TOMA Mitsuru <toma0001@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Yatharth <megacutiemauandtuchchu@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/id/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/id/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/character/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/character/id/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/id/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/content/id/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/id/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ms/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/front/id/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/id/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/id/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/id/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/id/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/id/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt/
Translate-URL: https://translate.habitica.com/projects/habitica/messages/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/id/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/overview/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/id/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/id/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/id/
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/id/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/be/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/spells/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/gl/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/id/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/gl/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Character
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Groups
Translation: Habitica/Inventory
Translation: Habitica/Limited
Translation: Habitica/Messages
Translation: Habitica/Npc
Translation: Habitica/Overview
Translation: Habitica/Pets
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Rebirth
Translation: Habitica/Settings
Translation: Habitica/Spells
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2023-06-06 05:00:15 +02:00
SabreCat 84e5c00be1 WIP(announcement): correct layout and close X 2023-06-05 16:16:19 -05:00
SabreCat 187029f44f Merge remote-tracking branch 'private/natalie/antisocial' into sabrecat/chat-warning 2023-06-05 15:54:41 -05:00
CuriousMagpie efbc7d1460 WIP(faq): sidebar formatting 2023-06-05 16:53:48 -04:00
SabreCat 36f84d083e Merge remote-tracking branch 'private/natalie/antisocial' into sabrecat/chat-warning 2023-06-05 15:32:46 -05:00
CuriousMagpie 2154ba5451 WIP(fix): change URL 2023-06-05 12:33:40 -04:00
SabreCat cf0e45c68c Merge branch 'natalie/antisocial' into sabrecat/chat-warning 2023-06-02 16:14:20 -05:00
CuriousMagpie 93d9038765 WIP(faq): initial formatting of main text, started on sidebar 2023-06-02 17:00:13 -04:00
SabreCat 302eabb30f WIP(faq): hack background to white 2023-06-02 14:58:16 -05:00
SabreCat 09695f637e Merge branch 'release' into natalie/antisocial 2023-06-02 14:12:52 -05:00
SabreCat e9a15fcb83 fix(strings): JSON formatting 2023-06-02 13:55:04 -05:00
CuriousMagpie 97c8138340 feat(content): minor updates 2023-06-02 11:31:43 -04:00
SabreCat a65b0d1f4d fix(banner): make dismissable 2023-06-01 16:33:11 -05:00
SabreCat c0cf647873 fix(banner): only show when relevant 2023-05-31 16:55:21 -05:00
CuriousMagpie d20e976176 feat(style): css work 2023-05-31 14:27:52 -04:00
SabreCat 739016ba01 WIP(chat): add warning banner 2023-05-30 16:25:29 -05:00
SabreCat a5602eec8d 4.272.0 2023-05-30 15:28:16 -05:00
Natalie L 867eed176e feat(content): add June subscriber items (#14669)
Co-authored-by: SabreCat <sabe@habitica.com>
2023-05-30 15:26:16 -05:00
SabreCat ba883ae104 chore(subproj): update habitica-images 2023-05-30 14:55:00 -05:00
SabreCat deba7b6220 feat(faq): update for mobile workflows 2023-05-30 14:50:13 -05:00
CuriousMagpie 55d6ee3f7e feat(content): add staff and tiers 2023-05-30 12:01:21 -04:00
SabreCat 69c538858b 4.271.2 2023-05-25 14:42:53 -05:00
SabreCat 17072dcc45 Merge branch 'due-dates-in-todos' into release 2023-05-25 14:42:46 -05:00
SabreCat 2448f401f2 Merge branch 'increment-component' into release 2023-05-25 14:42:42 -05:00
CuriousMagpie 9ef13dad68 feat(content): starting add styling, string updates 2023-05-25 12:25:08 -04:00
CuriousMagpie 14fa69719b feat(content): static page created and strings in place 2023-05-24 16:18:31 -04:00
CuriousMagpie 929b0196a4 add strings 2023-05-24 13:24:44 -04:00
CuriousMagpie 1b91f620e1 initial commit 2023-05-23 16:01:40 -04:00
CuriousMagpie 86b15cb580 fix(style): css fix, today if-statement added 2023-05-23 15:19:26 -04:00
CuriousMagpie 60b180681e Merge remote-tracking branch 'origin/due-dates-in-todos' into due-dates-in-todos 2023-05-17 13:30:45 -04:00
CuriousMagpie 7c1c18a329 fix(styling): update colors to be a11y-friendly and to show items due today in gray 2023-05-17 13:29:26 -04:00
SabreCat 0e03f079a7 Merge branch 'due-dates-in-todos' of https://github.com/CuriousMagpie/habitica into due-dates-in-todos 2023-05-16 14:27:56 -05:00
SabreCat a71e44b331 fix(test): remove test for old function 2023-05-16 14:27:15 -05:00
Sabe Jones 48917fd8be Merge branch 'develop' into due-dates-in-todos 2023-05-16 14:18:22 -05:00
SabreCat 2a054a25ee fix(test): include user pref needed for date 2023-05-16 14:15:34 -05:00
CuriousMagpie daccade2e2 disabled sell button when user tries to sell more items than they own 2023-05-15 12:03:58 -04:00
SabreCat 79a5c2ec5f Merge branch 'develop' into due-dates-in-todos 2023-05-12 16:06:18 -05:00
CuriousMagpie 0a23dd5311 attempt to fix sellModal 2023-05-11 16:25:11 -04:00
CuriousMagpie 479cfb76ef fix(to do dates): locate a string for "Due" 2023-05-04 16:40:11 -04:00
CuriousMagpie 0e0cd99ded fix(to do dates): Add the word "Due" to the HTML 2023-05-04 16:35:27 -04:00
CuriousMagpie 7e210c56b0 fix(to do dates): change formatDueDate () to show exact due dates 2023-05-04 16:29:54 -04:00
CuriousMagpie 06ac6ae80c fix(html): fix behavior of buyModal when gems are being purchased; typo correction 2023-05-02 13:23:31 -04:00
CuriousMagpie 4a32a29bea Merge branch 'develop' into increment-component 2023-05-02 11:03:46 -04:00
CuriousMagpie 0c85835dc2 update to sellModal, buyModal, and questDialogContent.vue 2023-04-07 10:41:43 -04:00
CuriousMagpie 54df8397a7 fixes to svg and other spacing 2023-04-06 17:00:37 -04:00
CuriousMagpie 0644032a4f style: more spacing updates 2023-04-05 13:50:14 -04:00
CuriousMagpie 44265ac616 style: more spacing updates 2023-04-03 14:56:43 -04:00
CuriousMagpie ac3b953633 style: vertical spacing tweaks 2023-03-30 09:07:37 -04:00
CuriousMagpie 5de2921d22 Merge branch 'develop' into increment-component 2023-03-30 08:33:24 -04:00
CuriousMagpie c1a0f8a8d1 style: buyModal, sellModal, buyQuestModal, questRewards 2023-03-28 15:07:49 -04:00
CuriousMagpie 7e9506391f more buyModal styling 2023-03-27 16:13:06 -04:00
CuriousMagpie 3c7ca56089 buyModal styling 2023-03-27 15:58:56 -04:00
CuriousMagpie 0d155535c3 Merge branch 'develop' into increment-component 2023-03-27 14:16:55 -04:00
CuriousMagpie 09a0d2b3b8 change spacing on buyModal 2023-03-23 16:01:33 -04:00
CuriousMagpie 83dcf8d56a tightening up spacing on buyModal, fixing footer 2023-03-22 13:15:11 -04:00
CuriousMagpie bfc13bc21b Merge branch 'develop' into increment-component 2023-03-22 12:14:04 -04:00
CuriousMagpie 5afb46f237 fix close icon on buy & sell and keyboard input into number increment component is now a number, not a string 2023-03-21 16:08:26 -04:00
CuriousMagpie 9cc4fc19d3 more tiny updates 2023-03-21 11:26:31 -04:00
CuriousMagpie cc81629f09 updates to buyModal styling 2023-03-18 17:18:41 -04:00
CuriousMagpie e83db7a28a Merge branch 'develop' into increment-component 2023-03-17 11:47:17 -04:00
CuriousMagpie 80e193e4ce Merge branch 'develop' into increment-component 2023-03-15 12:38:07 -04:00
CuriousMagpie 76fa6ec1b8 updates to snumberIncrement, buyModal, and sellModal 2023-03-09 15:54:26 -05:00
CuriousMagpie 1ac4466c24 trying to make more components for the buy/sell modals 2023-03-02 14:33:27 -05:00
CuriousMagpie 03f0061c85 Merge branch 'develop' into increment-component 2023-03-01 15:46:04 -05:00
CuriousMagpie c349de6908 finish up sellModal and questModal (also Time Travelers) 2023-02-15 12:54:26 -05:00
CuriousMagpie fd7f3a646e add functionality and styling to sellModal and questModal 2023-02-14 17:22:05 -05:00
CuriousMagpie 7244c1bebc Merge branch 'develop' into increment-component 2023-02-14 15:30:18 -05:00
CuriousMagpie 20df5eeb8f buy modal complete! 2023-02-08 15:16:17 -05:00
CuriousMagpie 23f7dd94b6 more stylin' of the buy modal 2023-02-07 15:24:53 -05:00
CuriousMagpie 7125da4533 Merge branch 'develop' into increment-component 2023-02-07 14:05:48 -05:00
CuriousMagpie 684cb59a7c buyModal styling/functions 2023-02-06 16:23:20 -05:00
CuriousMagpie 9274fe9a10 Merge branch 'develop' into increment-component 2023-02-06 14:30:34 -05:00
CuriousMagpie a21f083761 gem modal styling/functions 2023-01-25 16:44:14 -05:00
CuriousMagpie c7e2834fc6 Merge branch 'develop' into increment-component 2023-01-25 14:35:39 -05:00
CuriousMagpie a08c26b076 calculations working, style updates to subscriber gem modal 2022-12-22 16:50:55 -05:00
CuriousMagpie f4aa88e1ff more style updates to buy modal 2022-12-21 16:58:22 -05:00
CuriousMagpie 53eab7aa29 Working on styling 2022-12-20 16:53:51 -05:00
CuriousMagpie 8374d61f52 why does NaN ask the user to buy gems? 2022-12-19 17:26:49 -05:00
CuriousMagpie 4c943b7575 number-increment works on buy modal and there was much rejoicing... 2022-12-16 16:51:19 -05:00
CuriousMagpie 24032b57f6 why clicky click no click? 2022-12-15 16:48:59 -05:00
CuriousMagpie 8628c774e5 more css changes to buy modal 2022-12-13 10:53:38 -05:00
CuriousMagpie 523f044914 css changes to buy modal 2022-12-09 17:04:35 -05:00
CuriousMagpie 892c9ad040 trying to make clicky clicky work 2022-12-09 11:47:57 -05:00
CuriousMagpie 570f39c620 Merge branch 'develop' into increment-component 2022-12-08 10:22:08 -05:00
CuriousMagpie a73316ef9f Merge branch 'develop' into increment-component 2022-12-06 11:47:53 -05:00
CuriousMagpie 6d6195ae6a props attempt 2022-12-01 14:43:08 -05:00
CuriousMagpie 4ba66c7018 unbreaking what was broken yesterday 2022-11-30 17:16:51 -05:00
CuriousMagpie 54b9424c6e Merge branch 'develop' into increment-component 2022-11-30 12:04:09 -05:00
CuriousMagpie af574634b0 tried to make if/else logic simpler, ended up breaking everything. 2022-11-29 17:13:48 -05:00
CuriousMagpie d1e1c09b4a add conditionals, add component to buy & sell modals 2022-11-22 15:28:48 -05:00
CuriousMagpie 4f5a720c30 how to make component show up? 2022-11-18 15:27:18 -05:00
CuriousMagpie 4ddfdb84ac get most of the right parts in the same place 2022-11-17 14:57:58 -05:00
292 changed files with 9462 additions and 3762 deletions
+1 -1
View File
@@ -87,5 +87,5 @@
"REDIS_HOST": "aaabbbcccdddeeefff",
"REDIS_PORT": "1234",
"REDIS_PASSWORD": "12345678",
"TRUSTED_DOMAINS": "https://localhost,https://habitica.com"
"TRUSTED_DOMAINS": "localhost,habitica.com"
}
@@ -0,0 +1,79 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20230718_summer_splash_orcas';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
const set = { migration: MIGRATION_NAME };
const push = {};
if (user && user.items && user.items.pets && typeof user.items.pets['Orca-Base'] !== 'undefined') {
return;
} else if (user && user.items && user.items.mounts && typeof user.items.mounts['Orca-Base'] !== 'undefined') {
set['items.pets.Orca-Base'] = 5;
push.notifications = {
type: 'ITEM_RECEIVED',
data: {
icon: 'notif_orca_pet',
title: 'Orcas for Summer Splash!',
text: 'To celebrate Summer Splash, we\'ve given you an Orca Pet!',
destination: 'stable',
},
seen: false,
};
} else {
set['items.mounts.Orca-Base'] = true;
push.notifications = {
type: 'ITEM_RECEIVED',
data: {
icon: 'notif_orca_mount',
title: 'Orcas for Summer Splash!',
text: 'To celebrate Summer Splash, we\'ve given you an Orca Mount!',
destination: 'stable',
},
seen: false,
};
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await user.updateOne({ $set: set, $push: push }).exec();
}
export default async function processUsers () {
let query = {
migration: {$ne: MIGRATION_NAME},
'auth.timestamps.loggedin': {$gt: new Date('2023-06-18')},
};
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)
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1],
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};
@@ -0,0 +1,155 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20230731_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 };
push = {
notifications: {
type: 'ITEM_RECEIVED',
data: {
icon: 'notif_namingDay_cake',
title: 'Happy Naming Day!',
text: 'To celebrate the day we became Habitica, weve awarded you some cake!',
destination: '/inventory/items',
},
seen: false,
},
};
} 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': true };
push = {
notifications: {
type: 'ITEM_RECEIVED',
data: {
icon: 'notif_namingDay_back',
title: 'Happy Naming Day!',
text: 'To celebrate the day we became Habitica, weve awarded you a Royal Purple Gryphon Tail and cake!',
destination: '/inventory/equipment',
},
seen: false,
},
};
} 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': true };
push = {
notifications: {
type: 'ITEM_RECEIVED',
data: {
icon: 'notif_namingDay_body',
title: 'Happy Naming Day!',
text: 'To celebrate the day we became Habitica, weve awarded you a Royal Purple Gryphon Cloak and cake!',
destination: '/inventory/equipment',
},
seen: false,
},
};
} 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': true };
push = {
notifications: {
type: 'ITEM_RECEIVED',
data: {
icon: 'notif_namingDay_head',
title: 'Happy Naming Day!',
text: 'To celebrate the day we became Habitica, weve awarded you a Royal Purple Gryphon Helm and cake!',
destination: '/inventory/equipment',
},
seen: false,
},
};
} else if (user && user.items && user.items.mounts && typeof user.items.mounts['Gryphon-RoyalPurple'] !== 'undefined') {
set = { migration: MIGRATION_NAME, 'items.pets.Gryphon-RoyalPurple': 5 };
push = {
notifications: {
type: 'ITEM_RECEIVED',
data: {
icon: 'notif_namingDay_pet',
title: 'Happy Naming Day!',
text: 'To celebrate the day we became Habitica, weve awarded you a Royal Purple Gryphon Pet and cake!',
destination: '/inventory/stable',
},
seen: false,
},
};
} else {
set = { migration: MIGRATION_NAME, 'items.mounts.Gryphon-RoyalPurple': true };
push = {
notifications: {
type: 'ITEM_RECEIVED',
data: {
icon: 'notif_namingDay_mount',
title: 'Happy Naming Day!',
text: 'To celebrate the day we became Habitica, weve awarded you a Royal Purple Gryphon Mount and cake!',
destination: '/inventory/stable',
},
seen: false,
},
};
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
if (push) {
return await user.updateOne({ $set: set, $inc: inc, $push: push }).exec();
} else {
return await user.updateOne({ $set: set, $inc: inc }).exec();
}
}
export default async function processUsers () {
let query = {
migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2023-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)
.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
}
};
+1500 -1102
View File
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -1,12 +1,12 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.271.1",
"version": "4.277.4",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.21.8",
"@babel/preset-env": "^7.21.5",
"@babel/register": "^7.21.0",
"@babel/core": "^7.22.5",
"@babel/preset-env": "^7.22.5",
"@babel/register": "^7.22.5",
"@google-cloud/trace-agent": "^7.1.2",
"@parse/node-apn": "^5.1.3",
"@slack/webhook": "^6.1.0",
@@ -67,16 +67,16 @@
"remove-markdown": "^0.5.0",
"rimraf": "^3.0.2",
"short-uuid": "^4.2.2",
"stripe": "^12.6.0",
"stripe": "^12.9.0",
"superagent": "^8.0.9",
"universal-analytics": "^0.5.3",
"useragent": "^2.1.9",
"uuid": "^9.0.0",
"validator": "^13.9.0",
"vinyl-buffer": "^1.0.1",
"winston": "^3.8.2",
"winston": "^3.9.0",
"winston-loggly-bulk": "^3.2.1",
"xml2js": "^0.5.0"
"xml2js": "^0.6.0"
},
"private": true,
"engines": {
@@ -122,7 +122,7 @@
"monk": "^7.3.4",
"require-again": "^2.0.0",
"run-rs": "^0.7.7",
"sinon": "^15.1.0",
"sinon": "^15.1.2",
"sinon-chai": "^3.7.0",
"sinon-stub-promise": "^4.0.0"
},
+2
View File
@@ -14,6 +14,8 @@ module.exports = {
// TODO find a way to let eslint understand webpack aliases
'import/no-unresolved': 'off',
'import/extensions': 'off',
'vue/component-tags-order': 'off',
'vue/no-mutating-props': 'off',
'vue/no-v-html': 'off',
'vue/html-self-closing': ['error', {
html: {
+6 -6
View File
@@ -16901,9 +16901,9 @@
}
},
"core-js": {
"version": "3.30.2",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz",
"integrity": "sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg=="
"version": "3.31.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz",
"integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ=="
},
"core-js-compat": {
"version": "3.11.0",
@@ -27366,9 +27366,9 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sass": {
"version": "1.62.1",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz",
"integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==",
"version": "1.63.4",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.63.4.tgz",
"integrity": "sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==",
"requires": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
+2 -2
View File
@@ -32,7 +32,7 @@
"bootstrap": "^4.6.0",
"bootstrap-vue": "^2.23.1",
"chai": "^4.3.7",
"core-js": "^3.30.2",
"core-js": "^3.31.0",
"dompurify": "^3.0.3",
"eslint": "^6.8.0",
"eslint-config-habitrpg": "^6.2.0",
@@ -46,7 +46,7 @@
"lodash": "^4.17.21",
"moment": "^2.29.4",
"nconf": "^0.12.0",
"sass": "^1.62.1",
"sass": "^1.63.4",
"sass-loader": "^8.0.2",
"smartbanner.js": "^1.19.2",
"stopword": "^2.0.8",
Binary file not shown.

After

Width:  |  Height:  |  Size: 148 B

+3
View File
@@ -41,6 +41,7 @@
<router-view v-if="!isUserLoggedIn || isStaticPage" />
<template v-else>
<template v-if="isUserLoaded">
<chat-banner />
<damage-paused-banner />
<gems-promo-banner />
<gift-promo-banner />
@@ -159,6 +160,7 @@ import { loadProgressBar } from 'axios-progress-bar';
import birthdayModal from '@/components/news/birthdayModal';
import AppMenu from './components/header/menu';
import AppHeader from './components/header/index';
import ChatBanner from './components/header/banners/chatBanner';
import DamagePausedBanner from './components/header/banners/damagePaused';
import GemsPromoBanner from './components/header/banners/gemsPromo';
import GiftPromoBanner from './components/header/banners/giftPromo';
@@ -198,6 +200,7 @@ export default {
AppHeader,
AppFooter,
birthdayModal,
ChatBanner,
DamagePausedBanner,
GemsPromoBanner,
GiftPromoBanner,
File diff suppressed because it is too large Load Diff
+40 -15
View File
@@ -183,10 +183,8 @@
<div
v-for="bg in backgroundShopSets[0].items"
:key="bg.key"
:id="bg.key"
class="col-2"
:popover-title="bg.text"
:popover="bg.notes"
popover-trigger="mouseenter"
@click="unlock('background.' + bg.key)"
>
<div
@@ -195,6 +193,13 @@
>
<div class="small-rectangle"></div>
</div>
<b-popover
:target="bg.key"
triggers="hover focus"
placement="bottom"
:prevent-overflow="false"
:content="bg.notes"
/>
</div>
</div>
<div
@@ -211,16 +216,21 @@
<div
v-for="bg in backgroundShopSets[2].items"
:key="bg.key"
:id="bg.key"
class="col-4 text-center customize-option background-button"
:popover-title="bg.text"
:popover="bg.notes"
popover-trigger="mouseenter"
@click="unlock('background.' + bg.key)"
>
<div
class="background"
:class="`background_${bg.key}`"
></div>
<b-popover
:target="bg.key"
triggers="hover focus"
placement="bottom"
:prevent-overflow="false"
:content="bg.notes"
/>
</div>
</div>
</div>
@@ -236,10 +246,8 @@
<div
v-for="bg in backgroundShopSets[1].items"
:key="bg.key"
:id="bg.key"
class="col-4 text-center customize-option background-button"
:popover-title="bg.text"
:popover="bg.notes"
popover-trigger="mouseenter"
@click="!user.purchased.background[bg.key]
? backgroundSelected(bg) : unlock('background.' + bg.key)"
>
@@ -270,6 +278,13 @@
:pinned="isBackgroundPinned(bg)"
/>
</span>
<b-popover
:target="bg.key"
triggers="hover focus"
placement="bottom"
:prevent-overflow="false"
:content="bg.notes"
/>
</div>
</div>
</div>
@@ -302,10 +317,8 @@
<div
v-for="bg in set.items"
:key="bg.key"
:id="bg.key"
class="col-4 text-center customize-option background-button"
:popover-title="bg.text"
:popover="bg.notes"
popover-trigger="mouseenter"
@click="!user.purchased.background[bg.key]
? backgroundSelected(bg) : unlock('background.' + bg.key)"
>
@@ -336,6 +349,13 @@
:pinned="isBackgroundPinned(bg)"
/>
</span>
<b-popover
:target="bg.key"
triggers="hover focus"
placement="bottom"
:prevent-overflow="false"
:content="bg.notes"
/>
</div>
<div
v-if="!ownsSet('background', set.items) && set.identifier !== 'incentiveBackgrounds'"
@@ -358,16 +378,21 @@
<div
v-for="(bg) in ownedBackgrounds"
:key="bg.key"
:id="bg.key"
class="col-4 text-center customize-option background-button"
:popover-title="bg.text"
:popover="bg.notes"
popover-trigger="mouseenter"
@click="unlock('background.' + bg.key)"
>
<div
class="background"
:class="[`background_${bg.key}`, backgroundLockedStatus(bg.key)]"
></div>
<b-popover
:target="bg.key"
triggers="hover focus"
placement="bottom"
:prevent-overflow="false"
:content="bg.notes"
/>
</div>
</div>
</div>
@@ -188,6 +188,7 @@
padding: 8px;
border-radius: 4px;
box-shadow: 0 1px 3px 0 rgba(26, 24, 29, 0.12), 0 1px 2px 0 rgba(26, 24, 29, 0.24);
background-color: $white;
&:first-of-type {
margin-top: 24px;
+19 -6
View File
@@ -258,13 +258,22 @@
:key="hero._id"
>
<td>
<user-link
<div
v-if="hasPermission(hero, 'userSupport')"
:user="hero"
:popover="$t('gamemaster')"
popover-trigger="mouseenter"
popover-placement="right"
/>
class="width-content"
>
<user-link
:id="hero._id"
:user="hero"
/>
<b-popover
:target="hero._id"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('gamemaster')"
/>
</div>
<user-link
v-else
:user="hero"
@@ -302,6 +311,10 @@
h4.expand-toggle::after {
margin-left: 5px;
}
.width-content {
width: fit-content;
}
</style>
<script>
@@ -6,13 +6,10 @@
:style="{height}"
>
<slot name="content"></slot>
<div
<close-x
v-if="canClose"
class="close-icon svg-icon icon-12"
@click="close()"
v-html="icons.close"
></div>
@close="close()"
/>
</div>
</template>
@@ -30,32 +27,24 @@ body.modal-open .habitica-top-banner {
padding-left: 1.5rem;
padding-right: 1.625rem;
z-index: 1300;
}
.close-icon.svg-icon {
position: relative;
top: 0;
right: 0;
opacity: 0.48;
& ::v-deep svg path {
stroke: $white !important;
}
&:hover {
opacity: 0.75;
.modal-close {
position: unset;
}
}
</style>
<script>
import closeIcon from '@/assets/svg/close.svg';
import closeX from '@/components/ui/closeX';
import {
clearBannerSetting, hideBanner, isBannerHidden, updateBannerHeight,
} from '@/libs/banner.func';
import { EVENTS } from '@/libs/events';
export default {
components: {
closeX,
},
props: {
bannerId: {
type: String,
@@ -82,9 +71,6 @@ export default {
},
data () {
return {
icons: Object.freeze({
close: closeIcon,
}),
hidden: false,
};
},
@@ -119,8 +105,6 @@ export default {
close () {
hideBanner(this.bannerId);
this.hidden = true;
this.$root.$emit(EVENTS.BANNER_HIDDEN, this.bannerId);
},
},
};
@@ -0,0 +1,67 @@
<template>
<base-banner
banner-id="chat-warning"
banner-class="chat-banner"
class="chat-banner"
height="3rem"
v-if="showChatWarning"
:class="{faq: faqPage}"
>
<div
slot="content"
class="w-100 text-center"
v-html="$t('chatSunsetWarning')"
>
</div>
</base-banner>
</template>
<style lang="scss">
@import '~@/assets/scss/colors.scss';
.chat-banner {
width: 100%;
min-height: 48px;
padding: 8px;
color: $orange-1;
background-color: $orange-100;
line-height: 1.71;
a {
color: $orange-1;
text-decoration: underline;
&:hover {
color: $orange-1;
}
}
&.faq {
position: fixed;
top: 3.5rem;
}
}
</style>
<script>
import BaseBanner from './base';
export default {
components: {
BaseBanner,
},
computed: {
faqPage () {
return (this.$route.fullPath.indexOf('/faq')) !== -1;
},
showChatWarning () {
if (this.$route.fullPath.indexOf('/groups') !== -1) return true;
if (this.$route.fullPath.indexOf('/tavern-and-guilds') !== -1) return false;
if (this.$route.fullPath.indexOf('/tavern') !== -1) return true;
return this.faqPage;
},
},
};
</script>
@@ -830,9 +830,11 @@ export default {
async mounted () {
await this.getUserGroupPlans();
await this.getUserParty();
Array.from(document.getElementById('menu_collapse').getElementsByTagName('a')).forEach(link => {
link.addEventListener('click', this.closeMenu);
});
if (document.getElementById('menu_collapse')) {
Array.from(document.getElementById('menu_collapse').getElementsByTagName('a')).forEach(link => {
link.addEventListener('click', this.closeMenu);
});
}
Array.from(document.getElementsByClassName('topbar-item')).forEach(link => {
link.addEventListener('mouseenter', this.dropdownDesktop);
link.addEventListener('mouseleave', this.dropdownDesktop);
@@ -44,13 +44,13 @@ export default {
if (!this.notification || !this.notification.data) {
return;
}
if (this.notification.data.destination === 'backgrounds') {
if (this.notification.data.destination.indexOf('backgrounds') !== -1) {
this.$store.state.avatarEditorOptions.editingUser = true;
this.$store.state.avatarEditorOptions.startingPage = 'backgrounds';
this.$store.state.avatarEditorOptions.subpage = '2023';
this.$root.$emit('bv::show::modal', 'avatar-modal');
} else {
this.$router.push({ name: this.notification.data.destination || 'items' });
this.$router.push(this.notification.data.destination || '/inventory/items');
}
},
},
@@ -126,7 +126,7 @@
<!-- the word "total" -->
<div class="buy-gem-total">
{{ $t('sendGiftTotal') }}
{{ $t('sendTotal') }}
</div>
<!-- the actual dollar amount -->
+46 -22
View File
@@ -128,7 +128,10 @@
<hr>
</div>
<div>
<div class="checkbox">
<div
class="checkbox"
id="preferenceAdvancedCollapsed"
>
<label>
<input
v-model="user.preferences.advancedCollapsed"
@@ -136,17 +139,22 @@
class="mr-2"
@change="set('advancedCollapsed')"
>
<span
class="hint"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('startAdvCollapsedPop')"
>{{ $t('startAdvCollapsed') }}</span>
<span class="hint">
{{ $t('startAdvCollapsed') }}
</span>
<b-popover
target="preferenceAdvancedCollapsed"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('startAdvCollapsedPop')"
/>
</label>
</div>
<div
v-if="party.memberCount === 1"
class="checkbox"
id="preferenceDisplayInviteAtOneMember"
>
<label>
<input
@@ -155,12 +163,9 @@
class="mr-2"
@change="set('displayInviteToPartyWhenPartyIs1')"
>
<span
class="hint"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('displayInviteToPartyWhenPartyIs1')"
>{{ $t('displayInviteToPartyWhenPartyIs1') }}</span>
<span class="hint">
{{ $t('displayInviteToPartyWhenPartyIs1') }}
</span>
</label>
</div>
<div class="checkbox">
@@ -201,32 +206,47 @@
</div>
<hr>
<button
id="buttonShowBailey"
class="btn btn-primary mr-2 mb-2"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('showBaileyPop')"
@click="showBailey()"
>
{{ $t('showBailey') }}
<b-popover
target="buttonShowBailey"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('showBaileyPop')"
/>
</button>
<button
id="buttonFCV"
class="btn btn-primary mr-2 mb-2"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('fixValPop')"
@click="openRestoreModal()"
>
{{ $t('fixVal') }}
<b-popover
target="buttonFCV"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('fixValPop')"
/>
</button>
<button
v-if="user.preferences.disableClasses == true"
id="buttonEnableClasses"
class="btn btn-primary mb-2"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('enableClassPop')"
@click="changeClassForUser(false)"
>
{{ $t('enableClass') }}
<b-popover
target="buttonEnableClasses"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('enableClassPop')"
/>
</button>
<hr>
<day-start-adjustment />
@@ -516,6 +536,10 @@
input {
color: $gray-50;
}
.checkbox {
width: fit-content;
}
.usersettings h5 {
margin-top: 1em;
}
@@ -0,0 +1,93 @@
<template>
<div class="item-cost">
<span
class="cost"
:class="getPriceClass()"
>
<span
class="svg-icon inline icon-24"
aria-hidden="true"
v-html="icons[getPriceClass()]"
>
</span>
<span
:class="getPriceClass()"
>{{ item.value }}</span>
</span>
</div>
</template>
<style lang="scss">
@import '~@/assets/scss/colors.scss';
@import '~@/assets/scss/mixins.scss';
.item-cost {
padding-bottom: 16px;
}
.cost {
height: 40px;
font-size: 1.25rem;
font-weight: bold;
line-height: 1.4;
vertical-align: middle;
&.gems {
color: $gems-color;
border-radius: 20px;
padding: 8px 20px 8px 20px;
margin-top: 16px;
margin-bottom: 16px;
background-color: rgba(36, 204, 143, 0.15);
}
&.gold {
color: $gold-color;
border-radius: 20px;
padding: 8px 20px 8px 20px;
margin-top: 16px;
margin-bottom: 16px;
background-color: rgba(255, 190, 93, 0.15);
}
&.hourglasses {
color: $hourglass-color;
border-radius: 20px;
padding: 8px 20px 8px 20px;
margin-top: 16px;
margin-bottom: 16px;
background-color: rgba(41, 149, 205, 0.15);
}
}
</style>
<script>
import svgClose from '@/assets/svg/close.svg';
import svgGold from '@/assets/svg/gold.svg';
import svgGem from '@/assets/svg/gem.svg';
export default {
data () {
return {
icons: Object.freeze({
close: svgClose,
gold: svgGold,
gems: svgGem,
}),
selectedAmountToBuy: 1,
selectedAmount: 1,
};
},
methods: {
getPriceClass () {
if (this.priceType && this.icons[this.priceType]) {
return this.priceType;
} if (this.item.currency && this.icons[this.item.currency]) {
return this.item.currency;
}
return 'gold';
},
},
};
</script>
@@ -0,0 +1,137 @@
<template>
<div class="d-flex flex-row align-items-center justify-content-center number-increment">
<!-- buy modal -->
<div
class="gray-circle"
@click="quantity <= 0
? quantity = 0
: quantity--"
>
<div
class="icon-negative"
v-html="icons.svgNegative"
></div>
</div>
<div class="input-group">
<div class="align-items-center">
</div>
<input
v-model="quantity"
class="form-control alignment"
step="1"
type="number"
>
</div>
<div
class="gray-circle"
@click="quantity++"
>
<div
class="icon-positive"
v-html="icons.svgPositive"
></div>
</div>
</div>
</template>
<style scoped lang="scss">
@import '~@/assets/scss/colors.scss';
.number-increment {
padding-bottom: 0px;
}
.alignment {
text-align: center;
}
.input-group {
width: 94px;
height: 32px;
width: 48px;
margin: 0px 16px 0px 16px;
padding: 0;
border-radius: 2px;
border: solid 1px $gray-400;
background-color: $white;
}
.gray-circle {
border-radius: 100%;
border: solid 2px $gray-300;
width: 32px;
height: 32px;
cursor: pointer;
&:hover {
border-color: $purple-300;
}
}
.gray-circle:hover{
.icon-positive, .icon-negative {
& ::v-deep svg path {
fill: $purple-300;
}
}
}
.icon-positive, .icon-negative {
width: 10px;
height: 10px;
margin: 4px auto;
& ::v-deep svg path {
fill: $gray-300;
}
}
/* Chrome, Safari, Edge, Opera */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
/* Firefox */
input[type=number] {
-moz-appearance: textfield;
}
</style>
<script>
// icons
import svgGem from '@/assets/svg/gem.svg';
import svgGold from '@/assets/svg/gold.svg';
import svgPositive from '@/assets/svg/positive.svg';
import svgNegative from '@/assets/svg/negative.svg';
export default {
data () {
return {
icons: Object.freeze({
svgGem,
svgGold,
svgPositive,
svgNegative,
}),
item: { },
quantity: 1,
};
},
computed: {
},
watch: {
quantity () {
this.$emit('updateQuantity', this.quantity);
},
},
methods: {
setDefaults () {
this.input = 1;
},
},
};
</script>
@@ -22,10 +22,11 @@
@import '~@/assets/scss/colors.scss';
span {
font-weight: normal;
font-size: 12px;
font-size: 0.75rem;
line-height: 1.33;
color: $gray-200;
color: $gray-100;
margin-bottom: 16px;
margin-top: -4px;
display: inline-block;
}
+363 -102
View File
@@ -17,7 +17,7 @@
</span>
<div>
<span
class="svg-icon icon-12 close-icon"
class="svg-icon close-icon icon-16 color"
aria-hidden="true"
tabindex="0"
@click="hideDialog()"
@@ -45,6 +45,13 @@
:sprites-margin="'0px auto 0px -24px'"
/>
</div>
<item
v-else-if="item.key === 'gem'"
class="flat bordered-item"
:item="item"
:item-content-class="item.class"
:show-popover="false"
/>
<item
v-else-if="item.key != 'gem'"
class="flat bordered-item"
@@ -53,10 +60,20 @@
:show-popover="false"
/>
</slot>
<div
v-if="!showAvatar && user.items[item.purchaseType]"
class="owned"
:class="totalOwned"
>
<!-- eslint-disable-next-line max-len -->
<span class="owned-text">{{ $t('owned') }}: <span class="user-amount">{{ totalOwned }}</span></span>
</div>
<h4 class="title">
{{ itemText }}
</h4>
<div v-html="itemNotes"></div>
<div class="item-notes">
{{ itemNotes }}
</div>
<slot
name="additionalInfo"
:item="item"
@@ -69,60 +86,61 @@
/>
</slot>
<div
v-if="item.value > 0"
v-if="item.value > 0 && !(item.key === 'gem' && gemsLeft < 1)"
class="purchase-amount"
>
<div
v-if="showAmountToBuy(item)"
class="how-many-to-buy"
>
<strong>{{ $t('howManyToBuy') }}</strong>
</div>
<div v-if="showAmountToBuy(item)">
<div class="box">
<input
v-model.number="selectedAmountToBuy"
class="form-control"
type="number"
min="0"
step="1"
>
</div>
<span :class="{'notEnough': notEnoughCurrency}">
<!-- this is where the pretty item cost element lives -->
<div class="item-cost">
<span
class="cost"
:class="getPriceClass()"
>
<span
class="svg-icon inline icon-32"
class="svg-icon inline icon-24"
aria-hidden="true"
v-html="icons[getPriceClass()]"
></span>
>
</span>
<span
class="cost"
:class="getPriceClass()"
>{{ item.value }}</span>
</span>
</div>
<div
v-else
class="d-flex align-items-middle"
v-if="showAmountToBuy(item)"
class="how-many-to-buy"
>
<span
class="svg-icon inline icon-32 ml-auto my-auto"
aria-hidden="true"
v-html="icons[getPriceClass()]"
></span>
<span
class="cost mr-auto my-auto"
:class="getPriceClass()"
>{{ item.value }}</span>
{{ $t('howManyToBuy') }}
</div>
<div
v-if="showAmountToBuy(item)"
>
<number-increment
class="number-increment"
@updateQuantity="selectedAmountToBuy = $event"
/>
<div
:class="{'notEnough': notEnoughCurrency}"
class="total"
>
<span class="total-text">{{ $t('sendTotal') }}</span>
<span
class="svg-icon total icon-24"
aria-hidden="true"
v-html="icons[getPriceClass()]"
></span>
<span
class="total-text"
:class="getPriceClass()"
>{{ item.value * selectedAmountToBuy }}</span>
</div>
</div>
</div>
<div
v-if="item.key === 'gem'"
class="gems-left"
v-if="item.key === 'gem' && gemsLeft < 1"
class="no-more-gems"
>
<strong v-if="gemsLeft > 0">{{ gemsLeft }} {{ $t('gemsRemaining') }}</strong>
<strong v-if="gemsLeft === 0">{{ $t('maxBuyGems') }}</strong>
</div>
<div v-if="attemptingToPurchaseMoreGemsThanAreLeft">
{{ $t('notEnoughGemsToBuy') }}
</div>
<div
@@ -147,7 +165,7 @@
{{ $t('viewSubscriptions') }}
</button>
<button
v-else
v-else-if="!(item.key === 'gem' && gemsLeft < 1)"
class="btn btn-primary"
:disabled="item.key === 'gem' && gemsLeft === 0 ||
attemptingToPurchaseMoreGemsThanAreLeft || numberInvalid || item.locked ||
@@ -165,6 +183,7 @@
<countdown-banner
v-if="item.event && item.owned == null"
:end-date="endDate"
class="limitedTime available"
/>
<div
v-if="item.key === 'rebirth_orb' && item.value > 0 && user.stats.lvl >= 100"
@@ -179,12 +198,31 @@
</div>
</div>
<div
slot="modal-footer"
class="d-flex"
v-if="item.key === 'gem'"
class="d-flex justify-content-center align-items-center"
>
<span class="balance mr-auto">{{ $t('yourBalance') }}</span>
<div
v-if="gemsLeft > 0"
class="gems-left d-flex justify-content-center align-items-center"
>
<strong>{{ $t('monthlyGems') }} &nbsp;</strong>
{{ gemsLeft }} / {{ totalGems }} {{ $t('gemsRemaining') }}
</div>
<div
v-if="gemsLeft === 0"
class="out-of-gems-banner d-flex justify-content-center align-items-center"
>
<strong>{{ $t('monthlyGems') }} &nbsp;</strong>
{{ gemsLeft }} / {{ totalGems }} {{ $t('gemsRemaining') }}
</div>
</div>
<div
slot="modal-footer"
class="clearfix"
>
<span class="user-balance float-left">{{ $t('yourBalance') }}</span>
<balanceInfo
class="ml-auto"
class="currency-totals"
:currency-needed="getPriceClass()"
:amount-needed="item.value"
/>
@@ -200,11 +238,47 @@
@include centeredModal();
.modal-body {
padding-left: 0px;
padding-right: 0px;
padding-bottom: 0px;
}
.modal-footer {
height: 48px;
background-color: $gray-700;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
display: block;
margin: 24px 0 0 0;
padding: 16px 24px;
align-content: center;
.user-balance {
width: 150px;
height: 16px;
font-size: 0.75rem;
font-weight: bold;
line-height: 1.33;
color: $gray-100;
margin-bottom: 16px;
margin-top: -4px;
margin-left: -4px;
}
.currency-totals {
margin-right: -8px;
float: right;
}
}
.modal-dialog {
width: 330px;
width: 448px;
box-sizing: border-box;
}
.badge-dialog {
left: -8px;
top: -8px;
}
.avatar {
@@ -212,8 +286,71 @@
margin: 0 auto;
}
.owned {
height: 32px;
width: 141px;
margin-top: -36px;
margin-left: 153px;
padding-top: 6px;
background-color: $gray-600;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
display: block;
text-align: center;
position: relative;
z-index: 1;
.owned-text {
font-size: 0.75rem;
font-weight: bold;
line-height: 1.71;
}
.user-amount {
font-weight: normal !important;
}
}
.item {
width: 141px;
height: 147px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 0px;
border-bottom-left-radius: 0px;
cursor: default;
}
.item-content {
transform: scale(1.45, 1.45);
top: -25.67px;
left: 1px;
&.shop_gem {
transform: scale(1.45, 1.45);
top: -2px;
left: 0px;
}
}
.title {
height: 28px;
color: $gray-10;
font-size: 1.25rem;
margin-top: 25px;
}
.item-notes {
margin-top: 8px;
padding-left: 48.5px;
padding-right: 48.5px;
line-height: 1.71;
font-size: 0.875rem;
}
.content {
text-align: center;
width: 448px;
}
.item-wrapper {
@@ -221,15 +358,22 @@
}
.inner-content {
margin: 33px auto auto;
width: 282px;
margin: 32px auto auto;
}
.btn-primary {
margin-top: 16px;
}
.purchase-amount {
margin-top: 24px;
margin-top: 0px;
.how-many-to-buy {
margin-bottom: 16px;
font-weight: bold !important;
}
.number-increment {
margin-top: 16px;
}
.box {
@@ -255,31 +399,105 @@
}
}
}
.no-more-gems {
color: $yellow-5;
font-size: 0.875em;
line-height: 1.33;
margin: 16px 48px 0 48px;
}
span.svg-icon.inline.icon-32 {
height: 32px;
width: 32px;
// for cost icon of a single item
span.svg-icon.inline.icon-24 {
display: inline-block;
height: 24px;
width: 24px;
margin-right: 4px;
padding-top: 4px;
}
// for the total user cost
span.svg-icon.total.icon-24 {
display: inline-block;
height: 24px;
width: 24px;
margin-left: 6px;
margin-right: 8px;
padding-top: 6px;
}
vertical-align: middle;
span.svg-icon.icon-16 {
height: 16px;
width: 16px;
}
.close-icon {
color: $gray-200;
stroke-width: 0px;
&:hover {
color: $gray-100;
}
}
.attributes-group {
margin: 32px;
border-radius: 4px;
line-height: 1.71;
font-size: 0.875;
}
.attributesGrid {
margin-top: 28px;
border-radius: 2px;
background-color: $gray-500;
}
.item-cost {
display: inline-flex;
margin: 16px 0;
align-items: center;
height: 40px;
}
.cost {
width: 28px;
height: 32px;
font-size: 24px;
display: inline-block;
font-family: sans-serif;
font-size: 1.25rem;
font-weight: bold;
line-height: 1.33;
vertical-align: middle;
padding: 6px 20px;
line-height: 1.4;
border-radius: 20px;
&.gems {
color: $gems-color;
color: $green-10;
background-color: rgba(36, 204, 143, 0.15);
align-items: center;
}
&.gold {
color: $gold-color;
color: $yellow-5;
background-color: rgba(255, 190, 93, 0.15);
align-items: center;
}
&.hourglasses {
color: $hourglass-color;
background-color: rgba(41, 149, 205, 0.15);
align-items: center;
}
}
.total {
font-weight: bold;
font-size: 0.875rem;
padding-top: 2px;
margin-top: 4px;
&.gems {
color: $green-10;
}
&.gold {
color: $yellow-5;
}
&.hourglasses {
@@ -287,62 +505,84 @@
}
}
.total-text {
color: $gray-50;
font-weight: bold;
font-size: 0.875rem;
line-height: 1.71;
&.gems {
color: $green-10;
}
&.gold {
color: $yellow-5;
}
&.hourglasses {
color: $hourglass-color;
}
}
button.btn.btn-primary {
margin-top: 24px;
margin-bottom: 24px;
min-width: 6rem;
margin-top: 16px;
padding: 4px 16px;
height: 32px;
&:focus {
border: 2px solid black;
}
}
.balance {
width: 74px;
height: 16px;
font-size: 12px;
font-weight: bold;
line-height: 1.33;
color: $gray-200;
}
.notEnough {
pointer-events: none;
opacity: 0.55;
}
.modal-footer {
height: 48px;
background-color: $gray-700;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
display: block;
}
.free-rebirth {
background-color: $yellow-5;
color: $white;
height: 2rem;
line-height: 16px;
margin: auto -1rem -1rem;
}
.notEnough {
pointer-events: none;
opacity: 0.55;
}
// .pt-015 {
// padding-top: 0.15rem;
// }
.attributesGrid {
margin-top: 8px;
border-radius: 2px;
background-color: $gray-500;
margin: 10px 0 24px;
}
.gems-left {
margin-top: .5em;
height: 32px;
background-color: $green-100;
font-size: 0.75rem;
margin-top: 24px;
color: $green-1;
width: 100%;
margin-bottom: -24px;
}
.free-rebirth {
background-color: $yellow-5;
.out-of-gems-banner {
height: 32px;
font-size: 0.75rem;
margin-top: 24px;
background-color: $yellow-100;
color: $yellow-1;
width: 100%;
margin-bottom: -24px;
}
.limitedTime {
height: 32px;
width: 446px;
font-size: 0.75rem;
margin: 24px 0 0 0;
background-color: $purple-300;
color: $white;
height: 2rem;
line-height: 16px;
margin: auto -1rem -1rem;
}
.pt-015 {
padding-top: 0.15rem;
margin-bottom: -24px;
}
}
</style>
<style lang="scss" scoped>
@@ -370,6 +610,8 @@ import svgGem from '@/assets/svg/gem.svg';
import svgHourglasses from '@/assets/svg/hourglass.svg';
import svgClock from '@/assets/svg/clock.svg';
import svgWhiteClock from '@/assets/svg/clock-white.svg';
import svgPositive from '@/assets/svg/positive.svg';
import svgNegative from '@/assets/svg/negative.svg';
import BalanceInfo from './balanceInfo.vue';
import PinBadge from '@/components/ui/pinBadge';
@@ -377,6 +619,7 @@ import CountdownBanner from './countdownBanner';
import currencyMixin from './_currencyMixin';
import notifications from '@/mixins/notifications';
import buyMixin from '@/mixins/buy';
import numberIncrement from '@/components/shared/numberIncrement';
import { mapState } from '@/libs/store';
@@ -407,14 +650,17 @@ export default {
Avatar,
PinBadge,
CountdownBanner,
numberIncrement,
},
mixins: [buyMixin, currencyMixin, notifications, numberInvalid, spellsMixin],
props: {
// eslint-disable-next-line vue/require-default-prop
item: {
type: Object,
},
priceType: {
type: String,
default: '',
},
withPin: {
type: Boolean,
@@ -433,10 +679,14 @@ export default {
hourglasses: svgHourglasses,
clock: svgClock,
whiteClock: svgWhiteClock,
positive: svgPositive,
negative: svgNegative,
}),
selectedAmountToBuy: 1,
selectedAmount: 1,
isPinned: false,
quantity: 1,
};
},
computed: {
@@ -474,6 +724,11 @@ export default {
return planGemLimits.convCap
+ this.user.purchased.plan.consecutive.gemCapExtra - this.user.purchased.plan.gemsBought;
},
totalGems () {
if (!this.user.purchased.plan) return 0;
return planGemLimits.convCap
+ this.user.purchased.plan.consecutive.gemCapExtra;
},
attemptingToPurchaseMoreGemsThanAreLeft () {
if (this.item && this.item.key && this.item.key === 'gem' && this.selectedAmountToBuy > this.gemsLeft) return true;
return false;
@@ -490,6 +745,9 @@ export default {
endDate () {
return moment(this.item.event.end);
},
totalOwned () {
return this.user.items[this.item.purchaseType][this.item.key] || 0;
},
},
watch: {
item: function itemChanged () {
@@ -500,7 +758,9 @@ export default {
methods: {
onChange ($event) {
this.$emit('change', $event);
this.selectedAmountToBuy = 1;
},
buyItem () {
// @TODO: I think we should buying to the items.
// Turn the items into classes, and use polymorphism
@@ -597,6 +857,7 @@ export default {
}
},
hideDialog () {
this.selectedAmountToBuy = 1;
this.$root.$emit('bv::hide::modal', 'buy-modal');
},
getPriceClass () {
@@ -16,9 +16,6 @@
.limitedTime {
height: 32px;
width: calc(100% + 30px);
margin: 0 -15px; // the modal content has its own padding
font-size: 12px;
line-height: 1.33;
text-align: center;
@@ -4,9 +4,9 @@
:hide-header="true"
@change="onChange($event)"
>
<div class="close">
<div>
<span
class="svg-icon inline icon-10"
class="svg-icon close-icon icon-16 color"
aria-hidden="true"
@click="hideDialog()"
v-html="icons.close"
@@ -14,60 +14,73 @@
</div>
<div
v-if="item"
class="content"
class="content bordered-item"
>
<div class="inner-content">
<item
class="flat"
class="flat bordered-item"
:item="item"
:item-content-class="itemContextToSell.itemClass"
:show-popover="false"
>
<countBadge
slot="itemBadge"
:show="true"
:count="itemContextToSell.itemCount"
/>
</item>
/>
<span class="owned">
{{ $t('owned') }}: <span class="user-amount">{{ itemContextToSell.itemCount }}</span>
</span>
<h4 class="title">
{{ itemContextToSell.itemName }}
</h4>
<div v-if="item.key === 'Saddle'">
<div class="text">
<div class="item-notes">
{{ item.sellWarningNote() }}
</div>
<br>
</div>
<div v-else>
<div>
<div class="text">
<div class="item-notes">
{{ item.notes() }}
</div>
<div>
<b class="how-many-to-sell">{{ $t('howManyToSell') }}</b>
<div class="item-cost">
<span class="cost gold">
<span
class="svg-icon inline icon-24"
aria-hidden="true"
v-html="icons.gold"
></span>
<span>{{ item.value }}</span>
</span>
</div>
<div>
<b-input
v-model="selectedAmountToSell"
class="itemsToSell"
type="number"
:max="itemContextToSell.itemCount"
min="1"
step="1"
@keyup.native="preventNegative($event)"
/>
<span
class="svg-icon inline icon-32"
class="how-many-to-sell"
>
{{ $t('howManyToSell') }}
</span>
</div>
<div>
<number-increment
@updateQuantity="selectedAmountToSell = $event"
/>
</div>
<div class="total-row">
<span class="total-text">
{{ $t('sendTotal') }}
</span>
<span
class="svg-icon total icon-24"
aria-hidden="true"
v-html="icons.gold"
></span>
<span class="value">{{ item.value }}</span>
<span class="total-text gold">
{{ item.value * selectedAmountToSell }}
</span>
</div>
<button
class="btn btn-primary"
:disabled="selectedAmountToSell > itemContextToSell.itemCount"
@click="sellItems()"
>
{{ $t('sell') }}
{{ $t('sellItems') }}
</button>
</div>
</div>
@@ -77,8 +90,10 @@
slot="modal-footer"
class="clearfix"
>
<span class="balance float-left">{{ $t('yourBalance') }}</span>
<balanceInfo class="float-right" />
<span class="user-balance float-left">{{ $t('yourBalance') }}</span>
<balanceInfo
class="float-right currency-totals"
/>
</div>
</b-modal>
</template>
@@ -95,51 +110,13 @@
}
.modal-dialog {
width: 330px;
width: 448px;
}
.content {
text-align: center;
}
.inner-content {
margin: 33px auto auto;
width: 282px;
}
span.svg-icon.inline.icon-32 {
height: 32px;
width: 32px;
margin-left: 24px;
margin-right: 8px;
vertical-align: middle;
}
.value {
width: 28px;
height: 32px;
font-size: 24px;
font-weight: bold;
line-height: 1.33;
color: #df911e;
vertical-align: middle;
}
button.btn.btn-primary {
margin-top: 24px;
margin-bottom: 24px;
}
.balance {
width: 74px;
height: 16px;
font-size: 12px;
font-weight: bold;
line-height: 1.33;
color: $gray-200;
.modal-body {
padding-left: 0px;
padding-right: 0px;
padding-bottom: 0px;
}
.modal-footer {
@@ -148,29 +125,215 @@
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
display: block;
margin: 24px 0 0;
padding: 16px 24px;
align-content: center;
.user-balance {
width: 150px;
height: 16px;
font-size: 0.75rem;
font-weight: bold;
line-height: 1.33;
color: $gray-100;
margin-bottom: 16px;
margin-top: -4px;
margin-left: -4px;
}
.currency-totals {
margin-right: -8px;
float: right;
}
}
.how-many-to-sell {
margin-bottom: 16px;
.content {
text-align: center;
}
.inner-content {
margin: 33px auto auto;
width: 282px;
}
.owned {
font-size: 0.75rem;
font-weight: bold;
line-height: 1.33;
background-color: $gray-600;
padding: 8px 8px;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
display: block;
width: 141px;
margin-left: 71px;
margin-top: -48px;
position: relative;
z-index: 1;
.user-amount {
font-weight: normal !important;
}
}
.item-wrapper {
margin-top: -10px;
}
.item {
width: 141px;
height: 147px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 0px;
border-bottom-left-radius: 0px;
cursor: default;
margin-top: 8px;
}
.item-content {
transform: scale(1.45, 1.45);
top: -25px;
left: 1px;
}
.title {
color: $gray-10;
font-size: 1.25rem;
margin-top: 26px;
margin-bottom: 0px;
}
.item-notes {
margin-top: 12px;
line-height: 1.71;
font-size: 0.875rem;
}
// for cost icon of a single item
span.svg-icon.inline.icon-24 {
display: inline-block;
height: 24px;
width: 24px;
margin-right: 4px;
padding-top: 4px;
}
// for the total user cost
span.svg-icon.total.icon-24 {
display: inline-block;
height: 24px;
width: 24px;
margin-left: 6px;
margin-right: 8px;
padding-top: 6px;
}
span.svg-icon.icon-16 {
height: 16px;
width: 16px;
}
.close-icon {
color: $gray-200;
stroke-width: 0px;
cursor: pointer;
&:hover {
color: $gray-100;
}
}
.item-cost {
display: inline-flex;
margin: 16px 0;
align-items: center;
height: 40px;
}
.cost {
display: inline-block;
font-family: sans-serif;
font-size: 1.25rem;
font-weight: bold;
padding: 6px 20px;
line-height: 1.4;
border-radius: 20px;
&.gold {
color: $yellow-5;
background-color: rgba(255, 190, 93, 0.15);
align-items: center;
}
}
}
.how-many-to-sell {
font-weight: bold !important;
}
.number-increment {
margin-top: 16px;
}
.total-row {
font-weight: bold;
font-size: 0.875rem;
margin-top: 16px;
&.gold {
color: $yellow-5;
}
}
.total-text {
color: $gray-50;
font-weight: bold;
font-size: 0.875rem;
line-height: 1.71;
&.gold {
color: $yellow-5;
}
}
button.btn.btn-primary {
margin-top: 16px;
padding: 4px 16px;
height: 32px;
&:focus {
border: 2px solid black;
}
.balance {
width: 74px;
height: 16px;
font-size: 12px;
font-weight: bold;
line-height: 1.33;
color: $gray-200;
}
}
</style>
<script>
import svgClose from '@/assets/svg/close.svg';
import svgGold from '@/assets/svg/gold.svg';
import svgGem from '@/assets/svg/gem.svg';
import svgPositive from '@/assets/svg/positive.svg';
import svgNegative from '@/assets/svg/negative.svg';
import BalanceInfo from '../balanceInfo.vue';
import Item from '@/components/inventory/item';
import CountBadge from '@/components/ui/countBadge';
import numberIncrement from '@/components/shared/numberIncrement';
export default {
components: {
BalanceInfo,
Item,
CountBadge,
numberIncrement,
},
data () {
return {
@@ -181,6 +344,8 @@ export default {
close: svgClose,
gold: svgGold,
gem: svgGem,
svgPositive,
svgNegative,
}),
};
},
@@ -211,6 +376,10 @@ export default {
this.selectedAmountToSell = 0;
}
},
maxOwned () {
const maxOwned = this.itemContextToSell.itemCount;
return maxOwned;
},
sellItems () {
if (!Number.isInteger(Number(this.selectedAmountToSell))) {
this.selectedAmountToSell = 0;
@@ -33,6 +33,22 @@
v-if="!item.locked"
class="purchase-amount"
>
<div class="item-cost">
<span
class="cost"
:class="priceType"
>
<span
class="svg-icon inline icon-24"
aria-hidden="true"
v-html="icons[priceType]"
>
</span>
<span
:class="priceType"
>{{ item.value }}</span>
</span>
</div>
<div class="how-many-to-buy">
<strong>{{ $t('howManyToBuy') }}</strong>
</div>
@@ -42,24 +58,25 @@
>
{{ item.addlNotes }}
</div>
<div class="box">
<input
v-model.number="selectedAmountToBuy"
class="form-control"
type="number"
min="0"
step="1"
>
<div>
<number-increment
@updateQuantity="selectedAmountToBuy = $event"
/>
</div>
<div class="total-row">
<span class="total-text">
{{ $t('sendTotal') }}
</span>
<span
class="svg-icon inline icon-20"
aria-hidden="true"
v-html="currencyIcon"
></span>
<span
class="total"
:class="priceType"
>{{ item.value * selectedAmountToBuy }}</span>
</div>
<span
class="svg-icon inline icon-32"
aria-hidden="true"
v-html="currencyIcon"
></span>
<span
class="value"
:class="priceType"
>{{ item.value }}</span>
</div>
<button
v-if="priceType === 'gems'
@@ -72,7 +89,7 @@
</button>
<button
v-else
class="btn btn-primary"
class="btn btn-primary mb-4"
:class="{'notEnough': !enoughCurrency(priceType, item.value * selectedAmountToBuy)}"
:disabled="numberInvalid"
@click="buyItem()"
@@ -112,6 +129,39 @@
margin-top: 1rem;
}
.modal-body {
padding-left: 0px;
padding-right: 0px;
padding-bottom: 0px;
}
.modal-footer {
height: 48px;
background-color: $gray-700;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
display: block;
padding: 16px 24px;
align-content: center;
.user-balance {
width: 150px;
height: 16px;
font-size: 0.75rem;
font-weight: bold;
line-height: 1.33;
color: $gray-100;
margin-bottom: 16px;
margin-top: -4px;
margin-left: -4px;
}
.currency-totals {
margin-right: -8px;
float: right;
}
}
.modal-dialog {
margin-top: 8%;
width: 448px !important;
@@ -129,8 +179,13 @@
margin: 33px auto auto;
}
.modal-body {
padding-bottom: 0px;
.item-notes {
height: 48px;
margin-top: 8px;
padding-left: 48.5px;
padding-right: 48.5px;
line-height: 1.71;
font-size: 0.875rem;
}
.questInfo {
@@ -152,16 +207,14 @@
height: 100%;
}
span.svg-icon.inline.icon-32 {
height: 32px;
width: 32px;
margin-right: 8px;
vertical-align: middle;
}
button.btn.btn-primary {
margin-top: 24px;
margin-bottom: 24px;
margin-top: 14px;
padding: 4px 16px;
height: 32px;
&:focus {
border: 2px solid black;
}
}
.balance {
@@ -173,19 +226,6 @@
color: $gray-200;
}
.modal-footer {
height: 48px;
background-color: $gray-700;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
display: block;
padding: 1rem 1.5rem;
&> * {
margin: 0;
}
}
.notEnough {
pointer-events: none;
opacity: 0.55;
@@ -198,30 +238,108 @@
margin-bottom: 16px;
}
.box {
display: inline-block;
width: 74px;
height: 40px;
border-radius: 2px;
background-color: #ffffff;
box-shadow: 0 2px 2px 0 rgba(26, 24, 29, 0.16), 0 1px 4px 0 rgba(26, 24, 29, 0.12);
margin-right: 24px;
input {
width: 100%;
border: none;
.item-cost {
padding-bottom: 16px;
}
input::-webkit-contacts-auto-fill-button {
visibility: hidden;
display: none !important;
pointer-events: none;
position: absolute;
right: 0;
}
.cost {
height: 40px;
font-size: 1.25rem;
font-weight: bold;
vertical-align: middle;
padding: 8px 20px 8px 20px;
&.gems {
color: $green-10;
background-color: rgba(36, 204, 143, 0.15);
line-height: 1.4;
margin: 0 0 0 -4px;
border-radius: 20px;
}
&.gold {
color: $yellow-5;
background-color: rgba(255, 190, 93, 0.15);
line-height: 1.4;
margin: 0 0 0 -4px;
border-radius: 20px;
}
&.hourglasses {
color: $hourglass-color;
background-color: rgba(41, 149, 205, 0.15);
line-height: 1.4;
margin: 0 0 0 -4px;
border-radius: 20px;
}
}
.total-row {
font-weight: bold;
font-size: 0.875rem;
margin-top: 16px;
}
.total {
font-weight: bold;
font-size: 0.875rem;
margin-top: 16px;
&.gems {
color: $green-10;
}
&.gold {
color: $yellow-5;
}
&.hourglasses {
color: $hourglass-color;
}
}
.total-text {
color: $gray-50;
font-weight: bold;
font-size: 0.875rem;
height: 24px;
line-height: 1.71;
padding-right: 4px;
&.gems {
color: $green-10;
}
&.gold {
color: $yellow-5;
}
&.hourglasses {
color: $hourglass-color;
}
}
span.svg-icon.inline.icon-20 {
height: 20px;
width: 20px;
margin-right: 4px;
vertical-align: middle;
}
span.svg-icon.inline.icon-24 {
height: 24px;
width: 24px;
margin-right: 8px;
vertical-align: middle;
}
span.svg-icon.inline.icon-32 {
height: 32px;
width: 32px;
margin-right: 8px;
vertical-align: middle;
}
@media only screen and (max-width: 1000px) {
.modal-dialog {
max-width: 80%;
@@ -234,9 +352,10 @@
}
}
}
}
</style>
<style lang="scss" scoped>
<!-- <style lang="scss" scoped>
@import '~@/assets/scss/colors.scss';
.value {
@@ -260,7 +379,7 @@
color: $hourglass-color;
}
}
</style>
</style> -->
<script>
import moment from 'moment';
@@ -272,6 +391,8 @@ import svgExperience from '@/assets/svg/experience.svg';
import svgGem from '@/assets/svg/gem.svg';
import svgGold from '@/assets/svg/gold.svg';
import svgHourglasses from '@/assets/svg/hourglass.svg';
import svgPositive from '@/assets/svg/positive.svg';
import svgNegative from '@/assets/svg/negative.svg';
import BalanceInfo from '../balanceInfo.vue';
import currencyMixin from '../_currencyMixin';
@@ -280,6 +401,7 @@ import buyMixin from '@/mixins/buy';
import numberInvalid from '@/mixins/numberInvalid';
import PinBadge from '@/components/ui/pinBadge';
import CountdownBanner from '../countdownBanner';
import numberIncrement from '@/components/shared/numberIncrement';
import questDialogContent from './questDialogContent';
import QuestRewards from './questRewards';
@@ -293,6 +415,7 @@ export default {
PinBadge,
questDialogContent,
CountdownBanner,
numberIncrement,
},
mixins: [buyMixin, currencyMixin, notifications, numberInvalid],
props: {
@@ -301,6 +424,7 @@ export default {
},
priceType: {
type: String,
default: '',
},
withPin: {
type: Boolean,
@@ -312,9 +436,11 @@ export default {
clock: svgClock,
close: svgClose,
experience: svgExperience,
gem: svgGem,
gems: svgGem,
gold: svgGold,
hourglass: svgHourglasses,
hourglasses: svgHourglasses,
positive: svgPositive,
negative: svgNegative,
}),
isPinned: false,
@@ -339,8 +465,8 @@ export default {
},
currencyIcon () {
if (this.priceType === 'gold') return this.icons.gold;
if (this.priceType === 'hourglasses') return this.icons.hourglass;
return this.icons.gem;
if (this.priceType === 'hourglasses') return this.icons.hourglasses;
return this.icons.gems;
},
endDate () {
return moment(this.item.event.end);
@@ -33,17 +33,17 @@
h3 {
color: $gray-10;
margin-bottom: 0.25rem;
margin-bottom: 4pxrem;
}
.quest-image {
margin: 0 auto;
margin-bottom: 1em;
margin-top: 1.5em;
margin-bottom: 16px;
margin-top: 24px;
}
.text {
margin-bottom: 1rem;
margin: 16px 16px;
overflow-y: auto;
text-overflow: ellipsis;
}
@@ -54,10 +54,10 @@
line-height: 1.71;
color: $gray-50;
text-align: center;
margin-bottom: 0.5rem;
margin-bottom: 8px;
::v-deep .user-label {
font-size: 14px;
font-size: 0.875rem;
}
}
@@ -177,9 +177,6 @@ export default {
@import '~@/assets/scss/colors.scss';
.quest-rewards {
margin-left: -1rem;
margin-right: -1rem;
background-color: $gray-700;
}
@@ -106,6 +106,7 @@ export default {
preventMultipleWatchExecution: false,
eventPromoBannerHeight: null,
sleepingBannerHeight: null,
warningBannerHeight: null,
};
},
computed: {
@@ -135,6 +136,10 @@ export default {
notificationBannerHeight () {
let scrollPosToCheck = 56;
if (this.warningBannerHeight) {
scrollPosToCheck += this.warningBannerHeight;
}
if (this.sleepingBannerHeight) {
scrollPosToCheck += this.sleepingBannerHeight;
}
@@ -361,6 +366,7 @@ export default {
updateBannerHeightAndScrollY () {
this.updateEventBannerHeight();
this.warningBannerHeight = getBannerHeight('chat-warning');
this.sleepingBannerHeight = getBannerHeight('damage-paused');
this.updateScrollY();
},
@@ -0,0 +1,615 @@
<template>
<div class="top-container mx-auto">
<div class="main-text mr-4">
<!-- title goes here -->
<div class="title-details">
<h1 v-once>
{{ $t('sunsetFaqTitle') }}
</h1>
</div>
<div class="body-text">
<p v-html="$t('sunsetFaqPara1')"></p> <!-- there's html in here -->
<p>{{ $t('sunsetFaqPara2') }}</p>
<p>{{ $t('sunsetFaqPara3') }}</p>
<p>{{ $t('sunsetFaqPara4') }}</p>
<p>{{ $t('sunsetFaqPara5') }}</p>
</div>
<!-- Which services are ending -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader1') }}
</h3>
</div>
<div class="body-text">
<p v-html="$t('sunsetFaqPara6')"></p>
</div>
<!-- Why are tavern and guild ending? -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader2') }}
</h3>
</div>
<div class="body-text">
<ul>
<li>{{ $t('sunsetFaqList1') }}</li>
<li>{{ $t('sunsetFaqList2') }}</li>
<li>{{ $t('sunsetFaqList3') }}</li>
</ul>
</div>
<!-- Can I still talk to my party/group members? -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader3') }}
</h3>
</div>
<div class="body-text">
<p>{{ $t('sunsetFaqPara7') }}</p>
</div>
<!-- Pausing dailies -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader4') }}
</h3>
</div>
<div class="body-text">
<p>{{ $t('sunsetFaqPara8') }}</p>
</div>
<!-- Accessing group plans -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader5') }}
</h3>
</div>
<div class="body-text">
<p v-html="$t('sunsetFaqPara9')"></p> <!-- there's html in here -->
</div>
<!-- Can I access guild chats? Or banked Gems? -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader12') }}
</h3>
</div>
<div class="body-text">
<p v-html="$t('sunsetFaqPara21')"></p>
</div>
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader6') }}
</h3>
</div>
<div class="body-text">
<p>{{ $t('sunsetFaqPara10') }}</p>
</div>
<!-- How can players find groups? -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader7') }}
</h3>
</div>
<div class="body-text">
<p>{{ $t('sunsetFaqPara11') }}</p>
</div>
<!-- What about contributors? -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader8') }}
</h3>
</div>
<div class="body-text">
<p v-html="$t('sunsetFaqPara12')"></p> <!-- there's html in here -->
<p v-html="$t('sunsetFaqPara13')"></p> <!-- there's html in here -->
<p v-html="$t('sunsetFaqPara14')"></p> <!-- there's html in here -->
<p v-html="$t('sunsetFaqPara15')"></p> <!-- there's html in here -->
<p v-html="$t('sunsetFaqPara16')"></p> <!-- there's html in here -->
<p v-html="$t('sunsetFaqPara17')"></p> <!-- there's html in here -->
<p v-html="$t('sunsetFaqPara18')"></p> <!-- there's html in here -->
<p v-html="$t('sunsetFaqPara19')"></p> <!-- there's html in here -->
</div>
<!-- Challenges -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader9') }}
</h3>
</div>
<div class="body-text">
<ul>
<li>{{ $t('sunsetFaqList4') }}</li>
<li>{{ $t('sunsetFaqList5') }}</li>
<li>{{ $t('sunsetFaqList6') }}</li>
<li>{{ $t('sunsetFaqList7') }}</li>
</ul>
</div>
<!-- Questions about how to use Habitica -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader10') }}
</h3>
</div>
<div class="body-text">
<ul>
<li v-html="$t('sunsetFaqList8')"></li> <!-- there's html in here -->
<li v-html="$t('sunsetFaqList9')"></li> <!-- there's html in here -->
<li v-html="$t('sunsetFaqList10')"></li> <!-- there's html in here -->
</ul>
</div>
<!-- Community Guidelines and TOS -->
<div>
<h3 class="headings">
{{ $t('sunsetFaqHeader11') }}
</h3>
</div>
<div class="body-text">
<p v-html="$t('sunsetFaqPara20')"></p>
</div>
</div>
<!-- sidebar -->
<div class="sidebar py-4 d-flex flex-column">
<!-- staff -->
<div class="ml-4">
<h2>
{{ $t('staff') }}
</h2>
<div class="d-flex flex-wrap">
<div
v-for="user in staff"
:key="user.uuid"
class="staff col-6 p-0"
>
<div class="d-flex">
<router-link
class="title"
:to="{'name': 'userProfile', 'params': {'userId': user.uuid}}"
>
{{ user.name }}
</router-link>
<div
v-if="user.type === 'Staff'"
class="svg-icon staff-icon ml-1"
v-html="icons.tierStaff"
></div>
</div>
</div>
</div>
</div>
<!-- player tiers -->
<div class="ml-4">
<h2 class="mt-4 mb-1">
{{ $t('playerTiers') }}
</h2>
<ul class="tier-list">
<li
v-once
class="tier1 d-flex justify-content-center"
>
{{ $t('tier1') }}
<div
class="svg-icon ml-1"
v-html="icons.tier1"
></div>
</li>
<li
v-once
class="tier2 d-flex justify-content-center"
>
{{ $t('tier2') }}
<div
class="svg-icon ml-1"
v-html="icons.tier2"
></div>
</li>
<li
v-once
class="tier3 d-flex justify-content-center"
>
{{ $t('tier3') }}
<div
class="svg-icon ml-1"
v-html="icons.tier3"
></div>
</li>
<li
v-once
class="tier4 d-flex justify-content-center"
>
{{ $t('tier4') }}
<div
class="svg-icon ml-1"
v-html="icons.tier4"
></div>
</li>
<li
v-once
class="tier5 d-flex justify-content-center"
>
{{ $t('tier5') }}
<div
class="svg-icon ml-1"
v-html="icons.tier5"
></div>
</li>
<li
v-once
class="tier6 d-flex justify-content-center"
>
{{ $t('tier6') }}
<div
class="svg-icon ml-1"
v-html="icons.tier6"
></div>
</li>
<li
v-once
class="tier7 d-flex justify-content-center"
>
{{ $t('tier7') }}
<div
class="svg-icon ml-1"
v-html="icons.tier7"
></div>
</li>
<li
v-once
class="moderator d-flex justify-content-center"
>
{{ $t('tierModerator') }}
<div
class="svg-icon ml-1"
v-html="icons.tierMod"
></div>
</li>
<li
v-once
class="staff d-flex justify-content-center"
>
{{ $t('tierStaff') }}
<div
class="svg-icon ml-1"
v-html="icons.tierStaff"
></div>
</li>
<li
v-once
class="npc d-flex justify-content-center"
>
{{ $t('tierNPC') }}
</li>
</ul>
</div>
<!-- Daniel in sweet, sweet retirement with Jorts -->
<div>
<div class="gradient">
</div>
<div
class="grassy-meadow-backdrop"
:style="{'background-image': imageURLs.background}"
>
<div
class="daniel_front"
:style="{'background-image': imageURLs.npc}"
></div>
<div
class="pixel-border"
:style="{'background-image': imageURLs.pixel_border}"
></div>
</div>
</div>
<!-- email admin -->
<div class="d-flex flex-column justify-content-center">
<div class="question mx-auto">
{{ $t('anotherQuestion') }}
</div>
<div
class="contact mx-auto"
>
<p v-html="$t('contactAdmin')"></p> <!-- there's html in here -->
</div>
</div>
</div>
<!-- final div! -->
</div>
</template>
<style lang="scss" scoped>
@import '~@/assets/scss/colors.scss';
h1 {
margin-top: 0px;
line-height: 1.33;
}
li {
padding-bottom: 16px;
&::marker {
size: 0.5em;
}
}
p {
margin-bottom: 21px;
}
ul {
padding-left: 20px;
}
.top-container {
width: 66.67%;
margin-top: 80px;
display: flex;
@media (max-width: 1024px) {
flex-wrap: wrap;
}
}
.main-text {
.body-text {
font-size: 1em;
color: $gray-10;
line-height: 1.71;
}
.headings {
font-size: 1.15em;
font-weight: 400;
line-height: 1.75;
color: $purple-200;
}
}
.sidebar {
height: fit-content;
width: 330px;
background-color: $gray-700;
border-radius: 16px;
h2 {
color: $gray-10;
font-family: Roboto;
font-size: 14px;
font-weight: bold;
line-height: 1.71;
}
.staff {
.staff-icon {
width: 10px;
margin-top: 5px;
}
.title {
height: 24px;
color: $purple-300;
font-weight: bold;
display: inline-block;
margin-bottom: 4px;
}
}
.tier-list {
list-style-type: none;
padding: 0;
width: 282px;
font-size: 1em !important;
li {
height: 40px;
border-radius: 4px;
border: solid 1px $gray-500;
text-align: center;
padding: 8px 0;
margin-bottom: 8px;
margin-right: 4px;
font-weight: bold;
line-height: 1.71;
}
.tier1 {
color: #c42870;
.svg-icon {
width: 11px;
margin-top: 5px;
}
}
.tier2 {
color: #b01515;
.svg-icon {
width: 11px;
margin-top: 5px;
}
}
.tier3 {
color: #d70e14;
.svg-icon {
width: 13px;
margin-top: 4px;
}
}
.tier4 {
color: #c24d00;
.svg-icon {
width: 13px;
margin-top: 4px;
}
}
.tier5 {
color: #9e650f;
.svg-icon {
width: 8px;
margin-top: 7px;
}
}
.tier6 {
color: #2b8363;
.svg-icon {
width: 8px;
margin-top: 7px;
}
}
.tier7 {
color: #167e87;
.svg-icon {
width: 12px;
margin-top: 4px;
}
}
.moderator {
color: #277eab;
.svg-icon {
width: 13px;
margin-top: 3px;
}
}
.staff {
color: #6133b4;
.svg-icon {
width: 10px;
margin-top: 7px;
}
}
.npc {
color: $black;
}
}
.gradient {
position: absolute;
width: 330px;
height: 100px;
margin: -1px 0 116px;
background-image: linear-gradient(to bottom, $gray-700 0%, rgba(249, 249, 249, 0) 100%);
}
.grassy-meadow-backdrop {
background-repeat: repeat-x;
width: 330px;
height: 246px;
}
.daniel_front {
height: 246px;
width: 330px;
background-repeat: no-repeat;
margin: 0 auto;
}
.pixel-border {
width: 330px;
height: 30px;
background-repeat: no-repeat;
position: absolute;
margin-top: -30px;
}
.question {
font-size: 1em;
font-weight: bold;
line-height: 1.71;
color: $gray-10;
margin-top: 24px;
}
.contact p {
font-size: 1em;
margin-bottom: 0px;
}
}
</style>
<script>
import find from 'lodash/find';
import { mapState } from '@/libs/store';
import tier1 from '@/assets/svg/tier-1.svg';
import tier2 from '@/assets/svg/tier-2.svg';
import tier3 from '@/assets/svg/tier-3.svg';
import tier4 from '@/assets/svg/tier-4.svg';
import tier5 from '@/assets/svg/tier-5.svg';
import tier6 from '@/assets/svg/tier-6.svg';
import tier7 from '@/assets/svg/tier-7.svg';
import tierMod from '@/assets/svg/tier-mod.svg';
import tierNPC from '@/assets/svg/tier-npc.svg';
import tierStaff from '@/assets/svg/tier-staff.svg';
import staffList from '../../libs/staffList';
export default {
data () {
return {
icons: Object.freeze({
tier1,
tier2,
tier3,
tier4,
tier5,
tier6,
tier7,
tierMod,
tierNPC,
tierStaff,
}),
group: {
chat: [],
},
sections: {
worldBoss: true,
},
staff: staffList,
};
},
computed: {
...mapState({
currentEventList: 'worldState.data.currentEventList',
}),
imageURLs () {
const currentEvent = find(this.currentEventList, event => Boolean(event.season));
if (!currentEvent) {
return {
background: 'url(/static/npc/normal/tavern_background.png)',
npc: 'url(/static/npc/normal/tavern_npc.png)',
pixel_border: 'url(/static/npc/normal/pixel_border.png)',
};
}
return {
background: `url(/static/npc/${currentEvent.season}/tavern_background.png)`,
npc: `url(/static/npc/${currentEvent.season}/tavern_npc.png)`,
pixel_border: 'url(/static/npc/normal/pixel_border.png)',
};
},
},
async mounted () {
this.$store.dispatch('common:setTitle', {
subSection: this.$t('faq/taverns-and-guilds'),
});
document.body.style.background = '#ffffff';
},
};
</script>
@@ -7,13 +7,19 @@
<br>
<p class="text-center">
<button
id="buttonClearBrowserData"
class="btn btn-lg btn-danger"
popover-trigger="mouseover"
:popover="$t('localStorageClearExplanation')"
@click="clearLocalStorage()"
>
{{ $t('localStorageClear') }}
</button>
<b-popover
target="buttonClearBrowserData"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('localStorageClearExplanation')"
/>
</p>
<br>
<p v-html="$t('localStorageTryNext', localStorageTryNext) "></p>
@@ -94,6 +94,11 @@
}
}
.container-fluid {
position: relative;
top: 2rem;
}
@media only screen and (max-width: 768px) {
.container-fluid {
margin: auto;
@@ -1,11 +1,12 @@
<template>
<div>
<chat-banner />
<static-header
v-if="showContentWrap"
:class="{
'home-header': ['home', 'front'].indexOf($route.name) !== -1,
'white-header': this.$route.name === 'plans'
}"
v-if="showContentWrap"
:class="{
'home-header': ['home', 'front'].indexOf($route.name) !== -1,
'white-header': this.$route.name === 'plans'
}"
/>
<div class="static-wrapper">
<router-view />
@@ -243,11 +244,13 @@
<script>
import AppFooter from '@/components/appFooter';
import ChatBanner from '@/components/header/banners/chatBanner';
import StaticHeader from './header.vue';
export default {
components: {
AppFooter,
ChatBanner,
StaticHeader,
},
computed: {
+16 -9
View File
@@ -32,6 +32,9 @@
'task-not-scoreable': showTaskLockIcon,
}, controlClass.up.inner]"
tabindex="0"
role="button"
:aria-label="$t('scoreUp')"
:aria-disabled="showTaskLockIcon || (!task.up && !showTaskLockIcon)"
@click="score('up')"
@keypress.enter="score('up')"
>
@@ -63,6 +66,7 @@
controlClass.inner,
]"
tabindex="0"
role="checkbox"
@click="score(showCheckIcon ? 'down' : 'up' )"
@keypress.enter="score(showCheckIcon ? 'down' : 'up' )"
>
@@ -241,7 +245,7 @@
>
<div
v-b-tooltip.hover.bottom="$t('dueDate')"
class="svg-icon calendar"
class="svg-icon calendar my-auto"
v-html="icons.calendar"
></div>
<span>{{ formatDueDate() }}</span>
@@ -359,6 +363,9 @@
'task-not-scoreable': showTaskLockIcon,
}, controlClass.down.inner]"
tabindex="0"
role="button"
:aria-label="$t('scoreDown')"
:aria-disabled="showTaskLockIcon || (!task.down && !showTaskLockIcon)"
@click="score('down')"
@keypress.enter="score('down')"
>
@@ -701,7 +708,7 @@
.icons {
margin-top: 4px;
color: $gray-300;
color: $gray-100;
font-style: normal;
&-right {
@@ -760,7 +767,7 @@
}
.due-overdue {
color: $red-50;
color: $maroon-10;
}
.calendar.svg-icon {
@@ -899,7 +906,7 @@
}
</style>
<!-- eslint-enable max-len -->
<!-- eslint-disable-next-line vue/component-tags-order -->
<script>
import moment from 'moment';
import { v4 as uuid } from 'uuid';
@@ -1126,13 +1133,13 @@ export default {
return moment.duration(endOfDueDate.diff(endOfToday));
},
checkIfOverdue () {
return this.calculateTimeTillDue().asDays() <= 0;
return this.calculateTimeTillDue().asDays() < 0;
},
formatDueDate () {
const timeTillDue = this.calculateTimeTillDue();
const dueIn = timeTillDue.asDays() === 0 ? this.$t('today') : timeTillDue.humanize(true);
return this.task.date && this.$t('dueIn', { dueIn });
if (moment().isSame(this.task.date, 'day')) {
return this.$t('today');
}
return moment(this.task.date).format(this.user.preferences.dateFormat.toUpperCase());
},
edit (e, task) {
if (this.isRunningYesterdailies) return;
+132 -76
View File
@@ -146,17 +146,19 @@
:key="stat"
class="row"
>
<div class="col-4">
<span
class="hint"
:popover-title="$t(statInfo.title)"
popover-placement="right"
:popover="$t(statInfo.popover)"
popover-trigger="mouseenter"
>
<strong>{{ $t(statInfo.title) }}</strong>
</span>
<div
class="col-4"
:id="statInfo.title"
>
<strong> {{ $t(statInfo.title)}} </strong>
<strong>: {{ statsComputed[stat] }}</strong>
<b-popover
:target="statInfo.title"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t(statInfo.popover)"
/>
</div>
<div class="col-6">
<ul class="bonus-stats">
@@ -183,27 +185,38 @@
</ul>
</div>
</div>
<div v-if="user.stats.buffs.stealth">
<div
v-if="user.stats.buffs.stealth"
id="stealthBuff"
>
<strong
v-once
class="hint"
:popover-title="$t('stealth')"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('stealthNewDay')"
>{{ $t('stealth') }}</strong>
<strong>: {{ user.stats.buffs.stealth }}&nbsp;</strong>
<b-popover
target="stealthBuff"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('stealthNewDay')"
/>
</div>
<div v-if="user.stats.buffs.streaks">
<div
v-if="user.stats.buffs.streaks"
id="streaksFrozenBuff"
>
<div>
<strong
class="hint"
popover-title="$t('streaksFrozen')"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('streaksFrozenText')"
></strong>
{{ $t('streaksFrozen') }}
<strong>
{{ $t('streaksFrozen') }}
</strong>
<b-popover
target="streaksFrozenBuff"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('streaksFrozenText')"
/>
</div>
</div>
</div>
@@ -237,19 +250,27 @@
>
{{ $t('noMoreAllocate') }}
</p>
<p v-if="user.stats.points || userLevel100Plus">
<p
v-if="user.stats.points || userLevel100Plus"
id="pointAllocation"
>
<strong class="inline">{{ user.stats.points }}&nbsp;</strong>
<strong
class="hint"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('levelPopover')"
>{{ $t('unallocated') }}</strong>
<strong> {{ $t('unallocated') }} </strong>
<b-popover
target="pointAllocation"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('levelPopover')"
/>
</p>
</div>
<div>
<fieldset class="auto-allocate">
<div class="checkbox">
<div
id="preferenceAutomaticAllocation"
class="checkbox"
>
<label>
<input
v-model="user.preferences.automaticAllocation"
@@ -259,19 +280,24 @@
'preferences.allocationMode': 'taskbased'
})"
>
<span
class="hint"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('autoAllocationPop')"
>{{ $t('autoAllocation') }}</span>
<b-popover
target="preferenceAutomaticAllocation"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('autoAllocationPop')"
/>
{{ $t('autoAllocation') }}
</label>
</div>
<form
v-if="user.preferences.automaticAllocation"
style="margin-left:1em"
>
<div class="radio">
<div
id="optionFlatAllocation"
class="radio"
>
<label>
<input
v-model="user.preferences.allocationMode"
@@ -280,15 +306,22 @@
value="flat"
@change="set({'preferences.allocationMode': 'flat'})"
>
<span
class="hint"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('evenAllocationPop')"
>{{ $t('evenAllocation') }}</span>
<span class="hint">
{{ $t('evenAllocation') }}
</span>
<b-popover
target="optionFlatAllocation"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('evenAllocationPop')"
/>
</label>
</div>
<div class="radio">
<div
id="optionClassAllocation"
class="radio"
>
<label>
<input
v-model="user.preferences.allocationMode"
@@ -297,47 +330,63 @@
value="classbased"
@change="set({'preferences.allocationMode': 'classbased'})"
>
<span
class="hint"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('classAllocationPop')"
>{{ $t('classAllocation') }}</span>
<span class="hint">
{{ $t('classAllocation') }}
</span>
<b-popover
target="optionClassAllocation"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('classAllocationPop')"
/>
</label>
</div>
<div class="radio">
<div
id="optionTaskAllocation"
class="radio"
>
<label>
<input
v-model="user.preferences.allocationMode"
type="radio"
name="allocationMode"
value="taskbased"
value="classbased"
@change="set({'preferences.allocationMode': 'taskbased'})"
>
<span
class="hint"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('taskAllocationPop')"
>{{ $t('taskAllocation') }}</span>
<span class="hint">
{{ $t('taskAllocation') }}
</span>
<b-popover
target="optionTaskAllocation"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('taskAllocationPop')"
/>
</label>
</div>
</form>
<div
v-if="user.preferences.automaticAllocation
&& !(user.preferences.allocationMode === 'taskbased') && (user.stats.points > 0)"
id="buttonDistributePoints"
>
<button
class="btn btn-primary btn-xs"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t('distributePointsPop')"
@click="allocateNow({})"
>
<span class="glyphicon glyphicon-download"></span>
&nbsp;
{{ $t('distributePoints') }}
</button>
<b-popover
target="buttonDistributePoints"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t('distributePointsPop')"
/>
</div>
</fieldset>
</div>
@@ -346,28 +395,35 @@
:key="stat"
class="row"
>
<div class="col-8">
<span
class="hint"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t(statInfo.popover)"
></span>
<div
:id="`${stat}-info`"
class="col-8"
>
{{ $t(statInfo.title) + user.stats[stat] }}
<b-popover
:target="`${stat}-info`"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t(statInfo.popover)"
/>
</div>
<div
v-if="user.stats.points"
:id="`${stat}-allocate`"
class="col-4"
@click="allocate(stat)"
>
<button
class="btn btn-primary"
popover-trigger="mouseenter"
popover-placement="right"
:popover="$t(statInfo.allocatepop)"
>
<button class="btn btn-primary">
+
</button>
<b-popover
:target="`${stat}-allocate`"
triggers="hover focus"
placement="right"
:prevent-overflow="false"
:content="$t(statInfo.allocatePop)"
/>
</div>
</div>
</div>
+3 -1
View File
@@ -1,7 +1,9 @@
export default {
computed: {
numberInvalid () {
return this.selectedAmountToBuy < 1 || !Number.isInteger(this.selectedAmountToBuy);
const inputNumber = Number(this.selectedAmountToBuy);
return inputNumber < 1
|| !Number.isInteger(inputNumber);
},
},
};
+11
View File
@@ -28,6 +28,7 @@ const NewsPage = () => import(/* webpackChunkName: "static" */'@/components/stat
const OverviewPage = () => import(/* webpackChunkName: "static" */'@/components/static/overview');
const PressKitPage = () => import(/* webpackChunkName: "static" */'@/components/static/pressKit');
const PrivacyPage = () => import(/* webpackChunkName: "static" */'@/components/static/privacy');
const ChatSunsetFaq = () => import(/* webpackChunkName: "static" */'@/components/static/chatSunsetFaq');
const TermsPage = () => import(/* webpackChunkName: "static" */'@/components/static/terms');
const RegisterLoginReset = () => import(/* webpackChunkName: "auth" */'@/components/auth/registerLoginReset');
@@ -312,6 +313,9 @@ const router = new VueRouter({
{
name: 'faq', path: 'faq', component: FAQPage, meta: { requiresLogin: false },
},
{
name: 'chatSunsetFaq', path: 'tavern-and-guilds', component: ChatSunsetFaq, meta: { requiresLogin: false },
},
{
name: 'features', path: 'features', component: FeaturesPage, meta: { requiresLogin: false },
},
@@ -382,6 +386,7 @@ const router = new VueRouter({
// Only used to handle some redirects
// See router.beforeEach
{ path: '/static/faq/tavern-and-guilds', redirect: '/static/tavern-and-guilds' },
{ path: '/redirect/:redirect', name: 'redirect' },
{ path: '*', redirect: { name: 'notFound' } },
],
@@ -509,4 +514,10 @@ router.beforeEach(async (to, from, next) => {
return next();
});
router.afterEach((to, from) => {
if (from.name === 'chatSunsetFaq') {
document.body.style.background = '#f9f9f9';
}
});
export default router;
@@ -1,94 +0,0 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import moment from 'moment';
import Task from '@/components/tasks/task.vue';
import Store from '@/libs/store';
const localVue = createLocalVue();
localVue.use(Store);
describe('Task', () => {
let wrapper;
function makeWrapper (additionalTaskData = {}, additionalUserData = {}) {
return shallowMount(Task, {
propsData: {
task: {
group: {},
...additionalTaskData,
},
},
store: {
state: {
user: {
data: {
preferences: {
tasks: {
activeFilter: {
},
},
},
...additionalUserData,
},
},
},
getters: {
'tasks:getTaskClasses': () => ({}),
'tasks:canEdit': () => ({}),
'tasks:canDelete': () => ({}),
},
},
mocks: { $t: (key, params) => key + (params ? JSON.stringify(params) : '') },
directives: { 'b-tooltip': {} },
localVue,
});
}
it('returns a vue instance', () => {
wrapper = makeWrapper();
expect(wrapper.isVueInstance()).to.be.true;
});
describe('Due date calculation', () => {
let clock;
function setClockTo (time) {
const now = moment(time);
clock = sinon.useFakeTimers(now.toDate());
return now;
}
afterEach(() => {
clock.restore();
});
it('formats due date to today if due today', () => {
const now = setClockTo('2019-09-17T17:57:00+02:00');
wrapper = makeWrapper({ date: now });
expect(wrapper.vm.formatDueDate()).to.equal('dueIn{"dueIn":"today"}');
});
it('formats due date to tomorrow if due tomorrow', () => {
const now = setClockTo('2012-06-12T14:17:28Z');
wrapper = makeWrapper({ date: now.add(1, 'day') });
expect(wrapper.vm.formatDueDate()).to.equal('dueIn{"dueIn":"in a day"}');
});
it('formats due date to 5 days if due in 5 days', () => {
const now = setClockTo();
wrapper = makeWrapper({ date: now.add(5, 'days') });
expect(wrapper.vm.formatDueDate()).to.equal('dueIn{"dueIn":"in 5 days"}');
});
it('formats due date to tomorrow if today but before dayStart', () => {
const now = setClockTo('2019-06-12T04:23:37+02:00');
wrapper = makeWrapper({ date: now.add(8, 'hours') }, { preferences: { dayStart: 7 } });
expect(wrapper.vm.formatDueDate()).to.equal('dueIn{"dueIn":"in a day"}');
});
});
});
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{}
+1
View File
@@ -0,0 +1 @@
{}
+4 -1
View File
@@ -147,5 +147,8 @@
"achievementBoneToPickModalText": "لقد جمعت كل الحيوانات الأليفة الهيكلية المغامرة والكلاسيكية!",
"achievementPlantParent": "والد النبات",
"achievementPlantParentText": "فقست جميع الحيوانات الأليفة النباتية في الألوان القياسية: الصبار والتريلنج!",
"achievementPlantParentModalText": "لقد جمعت كل الحيوانات الأليفة النباتية!"
"achievementPlantParentModalText": "لقد جمعت كل الحيوانات الأليفة النباتية!",
"achievementDinosaurDynastyModalText": "لقد جمعت جميع الطيور والديناسورات الأليفة!",
"achievementDinosaurDynasty": "سلالة الديناصورات",
"achievementDinosaurDynastyText": "لقد فقست جميع الألوان القياسية للطيور والديناسورات الأليفة: الصقر، البومة، الببغاء، الطاووس، البطريق، الديك، الزاحف المجنح، التي ريكس،الترايسيراتوبس، و الفيلوسيرابتور!"
}
+3 -2
View File
@@ -6,7 +6,7 @@
"webFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn Experience and Gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as pets, skills, and quests! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).",
"faqQuestion1": "كيف أضيف مهماتي؟",
"iosFaqAnswer1": "العادات الجيدة (تلك التي تحتوي على علامة \"+\") هي المهام التي يمكنك القيام بها عدة مرات في اليوم، مثل تناول الخضروات. العادات السيئة (تلك التي تحتوي على علامة \"-\") هي المهام التي يجب عليك تجنبها، مثل عض الأظافر. والعادات التي تحتوي على علامة \"+\" و \"-\" لديها خيار جيد وخيار سيئ، مثل استخدام الدرج بدلاً من المصعد.\n\nالعادات الجيدة تمنحك خبرة وذهب. والعادات السيئة تقلل من صحتك.\n\nالمهام اليومية هي المهام التي يجب عليك القيام بها كل يوم، مثل تنظيف أسنانك أو التحقق من بريدك الإلكتروني. يمكنك تعديل تواريخ المهام اليومية بالنقر لتحريرها. إذا تخطيت مهمة يومية محددة، فسيتلقى أفاتارك ضررًا خلال الليل. كن حذرًا من عدم إضافة العديد من المهام اليومية في وقت واحد!\n\nالمهام التي يجب القيام بها هي قائمة المهام الخاصة بك. إكمال المهام يمنحك الذهب والخبرة. لن تفقد أبدًا صحتك بسبب هذه المهام. يمكنك إضافة تاريخ استحقاق للمهام التي يجب القيام بها بالنقر لتحريرها.",
"androidFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your character will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.",
"androidFaqAnswer1": "العادات الجيدة (تلك التي لديها +) هي المهام التي تقوم بها عدة مرات في اليوم، كأكل الخضروات مثلا. العادات السيئة (تلك التي لديها -) هي المهام التي يجب عليك تجنبها، كعض الأظافر مثلا. العادات التي لها + و لها خيار جيد وخيار سيء، كصعود الدرج مقابل ركوب المصعد. العادات الجيدة تجزيك بالنقات والذهب. العادات السيئة تطرح نقاط الحياة.\n\nاليوميات هي المهام التي يجب عليك القيام بها كل يوم، كتفريش أسنانك أو تفقد بريدك الإلكتروني. بإمكانك تحديد أيام أجل يومية بالنقر عليها لتحديثها. إذا تخطيت يومية أجلها اليوم، فستأخد شخصيتك الضرر الليلة. كن حذرا حتى لا تضيف الكثير من اليوميات مرة واحدة!\n\nالمهام هي قائمة المهام الخاصة بك. إكمال المهام يكسبك الذهب والنقاط. لا تفقد نقاط الحيات أبدا من المهام. يمكنك إضافة تاريخ أجل إلى المهام من خلال الضغط على \"تحديث\".",
"webFaqAnswer1": "* Good Habits (the ones with a :heavy_plus_sign:) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a :heavy_minus_sign:) are tasks that you should avoid, like biting nails. Habits with a :heavy_plus_sign: and a :heavy_minus_sign: have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n* Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n* To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.",
"faqQuestion2": "ما هي أمثلة المهمات؟",
"iosFaqAnswer2": "The wiki has four lists of sample tasks to use as inspiration:\n<br><br>\n * [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)",
@@ -54,5 +54,6 @@
"webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and Skills will damage the Boss as usual. You can also be in a normal Quest at the same time. Your tasks and Skills will count towards both the World Boss and the Boss/Collection Quest in your party. A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change. You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.",
"iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"androidFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help."
"webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help.",
"general": "عام"
}
+33 -4
View File
@@ -1,8 +1,37 @@
{
"achievement": "Дасягненьне",
"onwards": "Наперад!",
"levelup": "By accomplishing your real life goals, you leveled up and are now fully healed!",
"reachedLevel": "You Reached Level <%= level %>",
"achievementLostMasterclasser": "Quest Completionist: Masterclasser Series",
"achievementLostMasterclasserText": "Completed all sixteen quests in the Masterclasser Quest Series and solved the mystery of the Lost Masterclasser!"
"levelup": "Дасягнуўшы сваіх мэтаў у рэальным жыцьці, вы павысілі свой узровень і цяпер цалкам вылечыліся!",
"reachedLevel": "Вы Дасягнулі Ўзроўню <%= level %>",
"achievementLostMasterclasser": "Завяршальнік Квестаў: Серый Masterclasser",
"achievementLostMasterclasserText": "Выкананы ўсе шаснаццаць квестаў у Серыях Masterclasser і вырашана таямніца зьніклага Masterclasser!",
"letsGetStarted": "Давайце пачнем!",
"viewAchievements": "Паглядзець Дасягненьні",
"onboardingProgress": "<%= percentage %>% прагрэс",
"showAllAchievements": "Паказаць Усё <%= category %>",
"onboardingComplete": "Вы выканалі вашыя уводныя заданьні!",
"yourRewards": "Вашыя Ўзнагароды",
"earnedAchievement": "Вы зарабілі дасягненьне!",
"gettingStartedDesc": "Выканаўшы гэтыя ўступныя заданьні, вы заробіце <strong>5 Дасягненьняў</strong> і <strong class=\"gold-amount\">100 Золата</strong> калі скончыце!",
"yourProgress": "Ваш Прагрэс",
"onboardingCompleteDesc": "Вы зарабілі <strong>5 Дасягненьняў</strong> і <strong class=\"gold-amount\">100 Золата</strong> за выкананы сьпіс.",
"onboardingCompleteDescSmall": "Калі вы хочаце яшчэ больш, праверце Дасягненьні і пачніце зьбіраць!",
"foundNewItems": "Вы знайшлі новы прадмет!",
"achievementJustAddWater": "Проста Дабаўце Вады",
"hideAchievements": "Схаваць <%= category %>",
"achievementMindOverMatterText": "Выкананы квест для гадаванцаў Камень, Склізь і Пража.",
"foundNewItemsExplanation": "Выкананьне задачаў дае вам шанс знайсці прадметы, такія як Яйкі, Інкубацыйныя зельлі і корм для гадаванцаў.",
"achievementLostMasterclasserModalText": "Вы выканалі ўсе шаснаццаць квестаў у Серыях Masterclasser і вырашылі таямніцу зьніклага Masterclasser!",
"achievementMindOverMatter": "Розум Важней Матэрыі",
"foundNewItemsCTA": "Адкрыйце свой інвентар і паспрабуйце скамбінаваць вашыя новыя інкубацыйныя зельлі зь яйкамі!",
"achievementMindOverMatterModalText": "Вы выканалі квест для гадаванцаў Камень, Склізь і Пража!",
"achievementBackToBasicsModalText": "Вы сабралі ўсіх Базавых Гадаванцаў!",
"achievementDustDevil": "Пыльны Д'ябал",
"achievementAllYourBaseModalText": "Вы прыручылі ўсіх Базавых Маўнтаў!",
"achievementJustAddWaterText": "Выкананы квесты гадаванца Васьміног, Марскі Конік, Каракаціца, Кіт, Чарапаха, Марскі Смоўж, Марская Зьмяя і Дэльфін.",
"achievementJustAddWaterModalText": "Вы выканалі квесты гадаванца Васьміног, Марскі Конік, Каракаціца, Кіт, Чарапаха, Марскі Смоўж, Марская Зьмяя і Дэльфін!",
"achievementBackToBasics": "Вярнуцца да Асноваў",
"achievementBackToBasicsText": "Сабраны ўсе Базавыя Гадаванцы.",
"achievementAllYourBase": "Уся Вашая База",
"achievementAllYourBaseText": "Прыручаны ўсе Базавыя Маўнты."
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"settings": "Settings",
"language": "Language",
"settings": "Налады",
"language": "Мова",
"americanEnglishGovern": "In the event of a discrepancy in the translations, the American English version governs.",
"helpWithTranslation": "Would you like to help with the translation of Habitica? Great! Then visit <a href=\"/groups/guild/7732f64c-33ee-4cce-873c-fc28f147a6f7\">the Aspiring Linguists Guild</a>!",
"stickyHeader": "Sticky header",
+7 -1
View File
@@ -144,5 +144,11 @@
"achievementBoneToPickText": "Hat alle klassischen und Quest-Skeletthaustiere ausgebrütet!",
"achievementPolarProText": "Hat alle Standardfarben der Polar-Haustiere ausgebrütet: Bär, Fuchs, Pinguin, Wal und Wolf!",
"achievementPolarPro": "Polar-Profi",
"achievementPolarProModalText": "Du hast alle Polar-Haustiere gesammelt!"
"achievementPolarProModalText": "Du hast alle Polar-Haustiere gesammelt!",
"achievementPlantParent": "Pflanzenzüchter",
"achievementPlantParentModalText": "Du hast alle Pflanzen-Haustiere gesammelt!",
"achievementPlantParentText": "Hat alle Standardfarben der Pflanzen-Haustiere ausgebrütet: Kaktus und Baumchen!",
"achievementDinosaurDynastyText": "Hat alle Standardfarben der Vogel- und Dinosaurier-Haustiere ausgebrütet: Falke, Eule, Papagei, Pinguin, Hahn, Flugfinger, T-Rex, Triceratops, und Velociraptor!",
"achievementDinosaurDynastyModalText": "Du hast alle Vogel- und Dinosaurier-Haustiere gesammelt!",
"achievementDinosaurDynasty": "Dinosaurier Dynastie"
}
+40 -2
View File
@@ -570,7 +570,7 @@
"backgroundMysticalObservatoryNotes": "Deine Bestimmung steht in den Sternen; vom Mystischen Observatorium aus kannst Du sie lesen.",
"backgroundMysticalObservatoryText": "Mystisches Observatorium",
"backgrounds112020": "Set 78: Veröffentlicht im November 2020",
"backgroundHolidayHearthNotes": "Entspanne, trockne und wärme Deine Glieder an einem Feierlichen Feuer.",
"backgroundHolidayHearthNotes": "Entspanne, wärme und trockne deine Körperteile an einem Feierlichen Feuer.",
"backgroundHolidayHearthText": "Feierliches Feuer",
"backgroundInsideAnOrnamentNotes": "Lasse Deine Festtagsstimmung aus dem Inneren dieses Baumschmuckes erstrahlen.",
"backgroundInsideAnOrnamentText": "Im Baumschmuck",
@@ -756,5 +756,43 @@
"backgroundSnowyTempleText": "Verschneiter Tempel",
"backgroundSnowyTempleNotes": "Einen ruhigen verschneiten Tempel anschauen.",
"backgroundSnowyVillageText": "Verschneites Dorf",
"backgroundSnowyVillageNotes": "Ein verschneites Dorf bewundern."
"backgroundSnowyVillageNotes": "Ein verschneites Dorf bewundern.",
"backgroundOldTimeyBasketballCourtText": "Altmodischer Basketballplatz",
"backgroundOldTimeyBasketballCourtNotes": "Wirf Körbe auf einem altmodischen Basketballplatz.",
"backgroundJungleWateringHoleText": "Dschungel-Wasserstelle",
"backgroundJungleWateringHoleNotes": "Halte inne, um von der Dschungelwasserstelle zu trinken.",
"backgroundMangroveForestText": "Mangrovenwald",
"backgroundMangroveForestNotes": "Erkunde den Rand des Mangrovenwaldes.",
"backgrounds052023": "Set 108: Veröffentlicht im Mai 2023",
"backgroundInAPaintingText": "In einem Gemälde",
"backgroundInAPaintingNotes": "Genieße die kreative Aktivität in einem Gemälde.",
"backgroundFlyingOverHedgeMazeText": "Fliegen über Heckenlabyrinth",
"backgroundFlyingOverHedgeMazeNotes": "Staune beim Fliegen über ein Heckenlabyrinth.",
"backgroundCretaceousForestNotes": "Erlebe das uralte Grün eines Kreidewaldes.",
"backgroundCretaceousForestText": "Kreidewald",
"backgrounds042023": "Set 107: Veröffentlicht im April 2023",
"backgroundLeafyTreeTunnelText": "Blättriger Baumtunnel",
"backgroundSpringtimeShowerText": "Frühlingsschauer",
"backgroundSpringtimeShowerNotes": "Sieh einen blühenden Frühlingsschauer.",
"backgroundUnderWisteriaText": "Unter der Glyzinize",
"backgroundUnderWisteriaNotes": "Entspanne unter der Glyzinie.",
"backgroundInFrontOfFountainText": "Vor einem Sprinnbrunnen",
"backgroundInFrontOfFountainNotes": "Schnlendere vor einem Springbrunnen.",
"backgroundFancyBedroomText": "Schickes Schlafzimmer",
"backgroundWinterLakeWithSwansNotes": "Genieße die Natur am winterlichen See mit Schwänen.",
"backgroundWinterLakeWithSwansText": "winterlicher See mit Schwänen",
"backgrounds062023": "Set 109: Veröffentlicht im Juni 2023",
"backgroundInAnAquariumNotes": "Schwimme ein paar friedliche Runden mit den Fischen im Aquarium.",
"backgroundInsideAdventurersHideoutText": "Das Versteck eines Abenteurers",
"backgroundCraterLakeText": "Kratersee",
"backgroundCraterLakeNotes": "Bewundere einen schönen Kratersee.",
"backgroundInsideACrystalText": "In einem Kristall",
"backgroundFancyBedroomNotes": "Schwelge in einem schicken Schlafzimmer.",
"backgroundLeafyTreeTunnelNotes": "Wandere durch den bläätrigen Baumtunnel.",
"backgroundInAnAquariumText": "In einem Aquarium",
"backgroundInsideAdventurersHideoutNotes": "Plane eine Reise in ein Abenteurerversteck.",
"backgroundBirthdayBashNotes": "Habitica feiert eine Geburtstagsparty und alle sind eingeladen!",
"eventBackgrounds": "Ereignis-Hintergründe",
"backgroundBirthdayBashText": "Geburtstagsparty",
"backgroundInsideACrystalNotes": "Schaue aus einem Kristall hinaus."
}
@@ -4,12 +4,12 @@
"commGuideHeadingWelcome": "Willkommen in Habitica!",
"commGuidePara001": "Sei gegrüßt, Abenteurer! Willkommen in Habitica, dem Land der Produktivität, des gesunden Lebens und des gelegentlich randalierenden Greifs. Wir sind eine fröhliche Gemeinschaft voller hilfreicher Menschen, die sich auf ihrem Weg der persönlichen Entwicklung gegenseitig unterstützen. Alles was dazu gehört, ist eine positive Einstellung, ein respektvoller Umgang miteinander und etwas Verständnis dafür, dass jeder unterschiedliche Fähigkeiten und Grenzen hat - auch Du! Habiticaner gehen geduldig miteinander um und versuchen zu helfen, wo immer sie können.",
"commGuidePara002": "Damit sich hier jeder sicher fühlen, glücklich und produktiv sein kann, gibt es ein paar Richtlinien. Wir haben uns große Mühe gegeben, sie möglichst nett und leicht verständlich zu formulieren. Bitte nimm Dir die Zeit, sie durchzulesen, bevor Du anfängst zu chatten.",
"commGuidePara003": "Diese Regeln gelten an allen sozialen Orten, die wir verwenden, bezogen (aber nicht unbedingt eingeschränkt) auf Trello, GitHub, Weblate und dem Habitica Wiki auf Fandom. Wenn Gemeinschaften wachsen und sich verändern, passen sich manchmal ihre Regeln von Zeit zu Zeit an. Wenn es wesentliche Änderungen dieser Richtlinien gibt, wirst Du dies durch eine Bailey-Ankündigung und/oder in unseren sozialen Medien hören!",
"commGuidePara003": "Diese Regeln gelten an allen sozialen Orten, die wir verwenden, einschließlich (aber nicht nur) Trello, GitHub, Weblate und des Habitica Wiki auf Fandom. Wenn Gemeinschaften wachsen und sich verändern, können sich ihre Regeln von Zeit zu Zeit ändern. Bei wesentlichen Änderungen dieser Richtlinien wirst Du durch eine Bailey-Ankündigung und/oder in unseren sozialen Medien davon erfahren!",
"commGuideHeadingInteractions": "Interaktionen in Habitica",
"commGuidePara015": "Habitica hat zwei Arten sozialer Orte: öffentliche und private. Öffentliche Orte sind die Taverne, öffentliche Gilden, GitHub, Trello und das Wiki. Private Orte sind private Gilden, der Partychat und private Nachrichten. Alle Anzeigenamen und @Usernamen müssen den Community-Richtlinien für öffentliche Orte entsprechen. Um Deinen Anzeigenamen oder @Usernamen zu ändern, wähle in der mobilen App Menü > Einstellungen > Profil. Und wähle auf der Webseite Benutzer Icon > Profil und klicke auf den \"Bearbeiten\"-Knopf.",
"commGuidePara016": "Wenn Du Dich durch die öffentlichen Orte in Habitica bewegst, gibt es ein paar allgemeine Regeln, damit jeder sicher und glücklich ist.",
"commGuideList02A": "<strong>Respektiert einander</strong>. Sei höflich, freundlich und hilfsbereit. Vergiss nicht: Habiticaner kommen aus den verschiedensten Hintergründen und haben sehr unterschiedliche Erfahrungen gemacht. Das macht Habitica so eigenartig! Es ist wichtig, dass man beim Aufbauen einer Community seine Unterschiede und Ähnlichkeiten respektieren, aber natürlich auch feiern kann.",
"commGuideList02B": "<strong>Halte Dich an die <a href='/static/terms' target='_blank'>allgemeinen Geschäftsbedingungen</a></strong>, sowohl in öffentlichen als auch in privaten Umgebungen.",
"commGuideList02B": "<strong>Halte Dich an die <a href='/static/terms' target='_blank'>allgemeinen Geschäftsbedingungen</a></strong>, sowohl in öffentlichen als auch in privaten Bereichen.",
"commGuideList02C": "<strong>Poste keine Bilder oder Texte, die Gewalt darstellen, andere einschüchtern, oder eindeutig/indirekt sexuell sind, die Diskriminierung, Fanatismus, Rassismus, Sexismus, Hass, Belästigungen oder Hetze gegen jedwede Individuen oder Gruppen beinhalten.</strong> Auch nicht als Scherz oder Meme. Das bezieht sowohl Sprüche als auch Stellungnahmen mit ein. Nicht jeder hat den gleichen Humor, etwas, was Du als Witz wahrnimmst, kann für jemand anderen verletzend sein.",
"commGuideList02D": "<strong>Halte die Diskussionen für alle Altersgruppen angemessen</strong>. Das heißt, Erwachsenenthemen in öffentlichen Bereichen zu vermeiden. Viele junge Habiticaner und Menschen mit verschiedenen Hintergründen nutzen diese Seite. Wir wollen unsere Gemeinschaft so angenehm und inklusiv wie möglich gestalten.",
"commGuideList02E": "<strong>Vermeide vulgäre Ausdrücke. Dazu gehören auch mildere, religiöse Ausdrücke, die anderswo möglicherweise akzeptiert werden, oder verschleierte Schimpfwörter</strong>. Unter uns sind Menschen aus allen religiösen und kulturellen Hintergründen und wir wollen, dass sich alle im öffentlichen Raum wohl fühlen. <strong>Wenn Dir ein Moderator oder Mitarbeiter mitteilt, dass ein bestimmter Ausdruck in Habitica nicht erlaubt ist, selbst wenn er Dir vielleicht nicht problematisch vorkommt, ist diese Entscheidung endgültig</strong>. Zusätzlich werden verbale Angriffe jeder Art strenge Konsequenzen haben, da sie auch unsere Nutzungsbedingungen verletzen.",
File diff suppressed because one or more lines are too long
@@ -883,6 +883,22 @@
"backgroundCretaceousForestText": "Cretaceous Forest",
"backgroundCretaceousForestNotes": "Take in the ancient greenery of a Cretaceous Forest.",
"backgrounds062023": "SET 109: Released June 2023",
"backgroundInAnAquariumText": "In an Aquarium",
"backgroundInAnAquariumNotes": "Take a peaceful swim with the fish In an Aquarium.",
"backgroundInsideAdventurersHideoutText": "Inside an Adventurer's Hideout",
"backgroundInsideAdventurersHideoutNotes": "Plan a journey inside an Adventurer's Hideout.",
"backgroundCraterLakeText": "Crater Lake",
"backgroundCraterLakeNotes": "Admire a lovely Crater Lake.",
"backgrounds072023": "SET 110: Released July 2023",
"backgroundOnAPaddlewheelBoatText": "On a Paddlewheel Boat",
"backgroundOnAPaddlewheelBoatNotes": "Ride on a Paddlewheel Boat.",
"backgroundColorfulCoralText": "Colorful Coral",
"backgroundColorfulCoralNotes": "Dive among Colorful Coral.",
"backgroundBoardwalkIntoSunsetText": "Boardwalk into the Sunset",
"backgroundBoardwalkIntoSunsetNotes": "Stroll on a Boardwalk into the Sunset.",
"timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",
+2
View File
@@ -150,6 +150,8 @@
"youCastParty": "You cast <%= spell %> for the party.",
"chatCastSpellParty": "<%= username %> casts <%= spell %> for the party.",
"chatCastSpellUser": "<%= username %> casts <%= spell %> on <%= target %>.",
"chatCastSpellPartyTimes": "<%= username %> casts <%= spell %> for the party <%= times %> times.",
"chatCastSpellUserTimes": "<%= username %> casts <%= spell %> on <%= target %> <%= times %> times.",
"critBonus": "Critical Hit! Bonus: ",
"gainedGold": "You gained some Gold",
"gainedMana": "You gained some Mana",
+3 -3
View File
@@ -7,8 +7,8 @@
"tier5": "Tier 5 (Champion)",
"tier6": "Tier 6 (Champion)",
"tier7": "Tier 7 (Legendary)",
"tierModerator": "Moderator (Guardian)",
"tierStaff": "Staff (Heroic)",
"tierModerator": "Moderator",
"tierStaff": "Staff",
"tierNPC": "NPC",
"friend": "Friend",
"elite": "Elite",
@@ -16,7 +16,7 @@
"legendary": "Legendary",
"moderator": "Moderator",
"guardian": "Guardian",
"staff": "Staff",
"staff": "Habitica Staff",
"heroic": "Heroic",
"modalContribAchievement": "Contributor Achievement!",
"contribModal": "<%= name %>, you awesome person! You're now a tier <%= level %> contributor for helping Habitica.",
+101 -39
View File
@@ -28,8 +28,8 @@
"webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight and didn't check them off in the screen that popped up the next morning, those unfinished Dailies will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you. The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. Other Healers can heal you as well if you are in a Party with them. Learn more by clicking \"Party\" in the navigation bar.",
"faqQuestion5": "Can I play Habitica with others?",
"iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on Quests, battle monsters, and cast skills to support each other.\n\nIf you want to start your own Party, go to Menu > [Party](https://habitica.com/party) and tap \"Create New Party\". Then scroll down and tap \"Invite a Member\" to invite your friends by entering their @username. If you want to join someone elses Party, just give them your @username and they can invite you!\n\nYou and your friends can also join Guilds, which are public chat rooms that bring people together based on shared interests! There are a lot of helpful and fun communities, be sure to check them out.\n\nIf youre feeling more competitive, you and your friends can create or join Challenges to take on a set of tasks. There are all sorts of public Challenges available that span a wide array of interests and goals. Some public Challenges will even award Gem prizes if youre selected as the winner.",
"androidFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to the [website](https://habitica.com/) to create one if you don't already have a Party. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n\n For more detailed info, check out the wiki pages on [Parties](https://habitica.fandom.com/wiki/Party) and [Guilds](https://habitica.fandom.com/wiki/Guilds).",
"iosFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on Quests, battle monsters, and cast skills to support each other.\n\nIf you want to start your own Party, go to Menu > [Party](https://habitica.com/party) and tap \"Create New Party\". Then scroll down and tap \"Invite a Member\" to invite your friends by entering their @username. If you want to join someone elses Party, just give them your @username and they can invite you!\n\nIf youre feeling more competitive, you and your friends can create or join Challenges to take on a set of tasks. There are all sorts of public Challenges available that span a wide array of interests and goals. Some public Challenges will even award Gem prizes if youre selected as the winner.",
"androidFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to the [website](https://habitica.com/) to create one if you don't already have a Party. \n\n For more detailed info, check out the wiki pages on [Parties](https://habitica.fandom.com/wiki/Party).",
"webFaqAnswer5": "Yes, with Parties! You can start your own Party or join an existing one. Partying with other Habitica players is a great way to take on Quests, receive buffs from Party members skills, and boost your motivation with additional accountability.",
"faqQuestion6": "How do I get a Pet or Mount?",
@@ -48,9 +48,9 @@
"webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in the action bar at the bottom of the screen. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete good Habits, Dailies, and To Do's, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.",
"faqQuestion9": "How do I take on Quests?",
"iosFaqAnswer9": "First, you need to join or start a Party by selecting \"Party\" in the navigation. Although you can take on Quests alone, we recommend playing with others to make the Quest faster and boost your motivation with extra accountability.\n\nOnce youre in a Party, you can invite Party members to any Quest scrolls in your Inventory. After everyone accepts, the Quest will begin. To progress, complete your tasks as you normally would! Youll either build up damage against a monster if youre taking on a Boss Quest, or have a chance to find items if youre taking on a Collection Quest. All pending progress is applied the next day.\n\nWhen your Party members do enough damage or collect all items, the Quest ends and everyone will receive their rewards!",
"androidFaqAnswer9": "First, you need to join or start a Party by selecting \"Party\" in the navigation. Although you can take on Quests alone, we recommend playing with others to make the Quest faster and boost your motivation with extra accountability.\n\nOnce youre in a Party, you can invite Party members to any Quest scrolls in your Inventory. After everyone accepts, the Quest will begin. To progress, complete your tasks as you normally would! Youll either build up damage against a monster if youre taking on a Boss Quest, or have a chance to find items if youre taking on a Collection Quest. All pending progress is applied the next day.\n\nWhen your Party members do enough damage or collect all items, the Quest ends and everyone will receive their rewards!",
"webFaqAnswer9": "First, you need to join or start a Party by selecting \"Party\" in the navigation. Although you can take on Quests alone, we recommend playing with others to make the Quest faster and boost your motivation with extra accountability.\n\nOnce youre in a Party, you can invite Party members to any Quest scrolls in your Inventory. After everyone accepts, the Quest will begin. To progress, complete your tasks as you normally would! Youll either build up damage against a monster if youre taking on a Boss Quest, or have a chance to find items if youre taking on a Collection Quest. All pending progress is applied the next day.\n\nWhen your Party members do enough damage or collect all items, the Quest ends and everyone will receive their rewards!",
"iosFaqAnswer9": "First, you need to join or start a Party by selecting \"Party\" in the navigation menu. Although you can take on Quests alone, we recommend playing with others to make the Quest faster and boost your motivation with extra accountability.\n\nOnce youre in a Party, you can invite Party members to any Quest scrolls in your Inventory. After everyone accepts, the Quest will begin. To progress, complete your tasks as you normally would! Youll either build up damage against a monster if youre taking on a Boss Quest, or have a chance to find items if youre taking on a Collection Quest. All pending progress is applied the next day.\n\nWhen your Party members do enough damage or collect all items, the Quest ends and everyone will receive their rewards!",
"androidFaqAnswer9": "First, you need to join or start a Party by selecting \"Party\" in the navigation menu. Although you can take on Quests alone, we recommend playing with others to make the Quest faster and boost your motivation with extra accountability.\n\nOnce youre in a Party, you can invite Party members to any Quest scrolls in your Inventory. After everyone accepts, the Quest will begin. To progress, complete your tasks as you normally would! Youll either build up damage against a monster if youre taking on a Boss Quest, or have a chance to find items if youre taking on a Collection Quest. All pending progress is applied the next day.\n\nWhen your Party members do enough damage or collect all items, the Quest ends and everyone will receive their rewards!",
"webFaqAnswer9": "First, you need to join or start a Party by selecting \"Party\" in the navigation menu. Although you can take on Quests alone, we recommend playing with others to make the Quest faster and boost your motivation with extra accountability.\n\nOnce youre in a Party, you can invite Party members to any Quest scrolls in your Inventory. After everyone accepts, the Quest will begin. To progress, complete your tasks as you normally would! Youll either build up damage against a monster if youre taking on a Boss Quest, or have a chance to find items if youre taking on a Collection Quest. All pending progress is applied the next day.\n\nWhen your Party members do enough damage or collect all items, the Quest ends and everyone will receive their rewards!",
"faqQuestion10": "What are Gems, and how do I get them?",
"iosFaqAnswer10": "Gems are purchased with real money from Menu > Purchase Gems. When you buy Gems, you are helping us to keep Habitica running. Were very grateful for every bit of support!\n\n In addition to buying Gems directly, there are three other ways players can gain Gems:\n\n * Win a Challenge that has been set up by another player. Go to Menu > Challenges to join some.\n * Subscribe and unlock the ability to buy a certain number of Gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](https://habitica.fandom.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the app without them!",
@@ -68,36 +68,36 @@
"webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and Skills will damage the Boss as usual. You can also be in a normal Quest at the same time. Your tasks and Skills will count towards both the World Boss and the Boss/Collection Quest in your party. A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change. You can read more about [past World Bosses](https://habitica.fandom.com/wiki/World_Bosses) on the wiki.",
"faqQuestion13": "What is a Group Plan?",
"iosFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"androidFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"webFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"iosFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your existing Party or new Group access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"androidFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your existing Party or new Group access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"webFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your existing Party or new Group access to a shared task board thats similar to your personal task board! Its a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether its a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. Well provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards arent shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily wont damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If youd like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the group leaders day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterdays uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in color to help visualize progress. We dont want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps dont fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## Whats the difference between a Groups shared tasks and Challenges?\n\nGroup Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
"parties": "Parties",
"faqQuestion14": "How do I find a Party when I'm not in one?",
"iosFaqAnswer14": "If you want to experience Habitica with others but dont know other players, searching for a Party is your best option! If you already know other players that have a Party, you can share your @username with them to be invited. Alternatively, you can create a new Party and invite them with their @username or email address.\n\nTo create or search for a Party, select “Party” in the navigation then choose the option that works for you.",
"androidFaqAnswer14": "If you want to experience Habitica with others but dont know other players, searching for a Party is your best option! If you already know other players that have a Party, you can share your @username with them to be invited. Alternatively, you can create a new Party and invite them with their @username or email address.\n\nTo create or search for a Party, select “Party” in the navigation then choose the option that works for you.",
"webFaqAnswer14": "If you want to experience Habitica with others but dont know other players, searching for a Party is your best option! If you already know other players that have a Party, you can share your @username with them to be invited. Alternatively, you can create a new Party and invite them with their @username or email address.\n\nTo create or search for a Party, select “Party” in the navigation then choose the option that works for you.",
"iosFaqAnswer14": "If you want to experience Habitica with others but dont know other players, searching for a Party is your best option! If you already know other players that have a Party, you can share your @username with them to be invited. Alternatively, you can create a new Party and invite them with their @username or email address.\n\nTo create or search for a Party, select “Party” in the navigation menu, then choose the option that works for you.",
"androidFaqAnswer14": "If you want to experience Habitica with others but dont know other players, searching for a Party is your best option! If you already know other players that have a Party, you can share your @username with them to be invited. Alternatively, you can create a new Party and invite them with their @username or email address.\n\nTo create or search for a Party, select “Party” in the navigation menu, then choose the option that works for you.",
"webFaqAnswer14": "If you want to experience Habitica with others but dont know other players, searching for a Party is your best option! If you already know other players that have a Party, you can share your @username with them to be invited. Alternatively, you can create a new Party and invite them with their @username or email address.\n\nTo create or search for a Party, select “Party” in the navigation menu, then choose the option that works for you.",
"faqQuestion15": "How does searching for a Party work?",
"iosFaqAnswer15": "After selecting “Look for a Party” in the Party pop-up, youll be added to a list of players that want to join a Party. Party leaders can view this list and send invitations. Once you receive an invitation, you can accept it from your notifications to join the Party of your choosing!\n\nYou may get multiple invitations to different Parties. However, you can only be a member of one Party at a time.",
"androidFaqAnswer15": "After selecting “Look for a Party” in the Party pop-up, youll be added to a list of players that want to join a Party. Party leaders can view this list and send invitations. Once you receive an invitation, you can accept it from your notifications to join the Party of your choosing!\n\nYou may get multiple invitations to different Parties. However, you can only be a member of one Party at a time.",
"webFaqAnswer15": "After selecting “Look for a Party” in the Party pop-up, youll be added to a list of players that want to join a Party. Party leaders can view this list and send invitations. Once you receive an invitation, you can accept it from your notifications to join the Party of your choosing!\n\nYou may get multiple invitations to different Parties. However, you can only be a member of one Party at a time.",
"iosFaqAnswer15": "After selecting “Look for a Party”, youll be added to a list of players that want to join a Party. Party leaders can view this list and send invitations. Once you receive an invitation, you can accept it from your notifications to join the Party of your choosing!\n\nYou may get multiple invitations to different Parties. However, you can only be a member of one Party at a time.",
"androidFaqAnswer15": "After selecting “Look for a Party”, youll be added to a list of players that want to join a Party. Party leaders can view this list and send invitations. Once you receive an invitation, you can accept it from your notifications to join the Party of your choosing!\n\nYou may get multiple invitations to different Parties. However, you can only be a member of one Party at a time.",
"webFaqAnswer15": "After selecting “Look for a Party”, youll be added to a list of players that want to join a Party. Party leaders can view this list and send invitations. Once you receive an invitation, you can accept it from your notifications to join the Party of your choosing!\n\nYou may get multiple invitations to different Parties. However, you can only be a member of one Party at a time.",
"faqQuestion16": "How long can I search for a Party after joining the list?",
"iosFaqAnswer16": "You will remain in the list until you accept an invite to a Party or dont login for 7 days, whichever comes first.",
"androidFaqAnswer16": "You will remain in the list until you accept an invite to a Party or dont login for 7 days, whichever comes first.",
"webFaqAnswer16": "You will remain in the list until you accept an invite to a Party or dont login for 7 days, whichever comes first.",
"iosFaqAnswer16": "You will remain in the list until you accept an invite to a Party or dont login for 7 days, whichever comes first. If you log in after being inactive for 7 days, well automatically add you back to the list as long as you don't have a pending invite.",
"androidFaqAnswer16": "You will remain in the list until you accept an invite to a Party or dont login for 7 days, whichever comes first. If you log in after being inactive for 7 days, well automatically add you back to the list as long as you don't have a pending invite.",
"webFaqAnswer16": "You will remain in the list until you accept an invite to a Party or dont login for 7 days, whichever comes first. If you log in after being inactive for 7 days, well automatically add you back to the list as long as you don't have a pending invite.",
"faqQuestion17": "Can I stop searching for a Party?",
"iosFaqAnswer17": "You can leave the list at any time. To stop searching for Party on the website, select the “Party” link in the navigation then click “Leave” in the pop-up.",
"androidFaqAnswer17": "You can leave the list at any time. To stop searching for Party on the website, select the “Party” link in the navigation then click “Leave” in the pop-up.",
"webFaqAnswer17": "You can leave the list at any time. To stop searching for Party on the website, select the “Party” link in the navigation then click “Leave” in the pop-up.",
"iosFaqAnswer17": "If you no longer want to find a Party, you can stop searching at any time.\n\nTo stop searching for a Party on Habiticas website:\n\n1. Select the “Party” link in the navigation.\n2. Click “Leave” in the pop-up.\n\nTo stop searching for a Party on the Android app:\n1. Tap on “Party” from the menu.\n2. Tap “Leave” at the bottom of the screen.",
"androidFaqAnswer17": "If you no longer want to find a Party, you can stop searching at any time.\n\nTo stop searching for a Party on Habiticas website:\n\n1. Select the “Party” link in the navigation.\n2. Click “Leave” in the pop-up.\n\nTo stop searching for a Party on the Android app:\n1. Tap on “Party” from the menu.\n2. Tap “Leave” at the bottom of the screen.",
"webFaqAnswer17": "If you no longer want to find a Party, you can stop searching at any time.\n\nTo stop searching for a Party on Habiticas website:\n\n1. Select the “Party” link in the navigation.\n2. Click “Leave” in the pop-up.\n\nTo stop searching for a Party on the Android app:\n1. Tap on “Party” from the menu.\n2. Tap “Leave” at the bottom of the screen.",
"faqQuestion18": "I have a Party, how do I find more members?",
"iosFaqAnswer18": "If you are using Habiticas website, select “Find Members” from the Party dropdown. This will display a list of Habitica players that are actively looking for a Party and can be invited to join.\n\nYou'll see some information, such as language, class, level, and how many days they have used Habitica to help find a good fit for your Party. If youd like to chat with someone before sending an invite, you can view their Profile and send a message.",
"androidFaqAnswer18": "If you are using Habiticas website, select “Find Members” from the Party dropdown. This will display a list of Habitica players that are actively looking for a Party and can be invited to join.\n\nYou'll see some information, such as language, class, level, and how many days they have used Habitica to help find a good fit for your Party. If youd like to chat with someone before sending an invite, you can view their Profile and send a message.",
"webFaqAnswer18": "If you are using Habiticas website, select “Find Members” from the Party dropdown. This will display a list of Habitica players that are actively looking for a Party and can be invited to join.\n\nYou'll see some information, such as language, class, level, and how many days they have used Habitica to help find a good fit for your Party. If youd like to chat with someone before sending an invite, you can view their Profile and send a message.",
"iosFaqAnswer18": "If you are using Habiticas website, select “Find Members” from the Party dropdown. If youre using the Android app, tap “Find Members” above your Partys member list. This will display a list of players that are actively looking for a Party and can be invited to join.\n\nTo help find a good fit for your Party, you'll see some information, such as language, class, level, and how many days they have used Habitica. If youd like to chat with someone before sending an invite, you can view their Profile and send a message.",
"androidFaqAnswer18": "If you are using Habiticas website, select “Find Members” from the Party dropdown. If youre using the Android app, tap “Find Members” above your Partys member list. This will display a list of players that are actively looking for a Party and can be invited to join.\n\nTo help find a good fit for your Party, you'll see some information, such as language, class, level, and how many days they have used Habitica. If youd like to chat with someone before sending an invite, you can view their Profile and send a message.",
"webFaqAnswer18": "If you are using Habiticas website, select “Find Members” from the Party dropdown. If youre using the Android app, tap “Find Members” above your Partys member list. This will display a list of players that are actively looking for a Party and can be invited to join.\n\nTo help find a good fit for your Party, you'll see some information, such as language, class, level, and how many days they have used Habitica. If youd like to chat with someone before sending an invite, you can view their Profile and send a message.",
"faqQuestion19": "How many members can I invite to my Party?",
"iosFaqAnswer19": "Parties have a maximum limit of 30 members and a minimum of 1 member. Pending invites count towards the member count. For example, 29 members and 1 pending invite would count as 30 members. To clear a pending invite, the invited player must accept or decline, or the Party leader must cancel the invite.",
@@ -105,19 +105,19 @@
"webFaqAnswer19": "Parties have a maximum limit of 30 members and a minimum of 1 member. Pending invites count towards the member count. For example, 29 members and 1 pending invite would count as 30 members. To clear a pending invite, the invited player must accept or decline, or the Party leader must cancel the invite.",
"faqQuestion20": "Can I invite someone I already know?",
"iosFaqAnswer20": "Yes! If you already have a Habitica players username or email address, you can invite them to join your Party. Heres how to send an invite on the different platforms:\n\n## On Habiticas website\n\nNavigate to your Party and click “Invite to Party” on the right-hand side of the page.\n\n## On iOS and Android\n\nTap “Party” from the Menu. Scroll to the Members section and tap “Invite a Member”.",
"androidFaqAnswer20": "Yes! If you already have a Habitica players username or email address, you can invite them to join your Party. Heres how to send an invite on the different platforms:\n\n## On Habiticas website\n\nNavigate to your Party and click “Invite to Party” on the right-hand side of the page.\n\n## On iOS and Android\n\nTap “Party” from the Menu. Scroll to the Members section and tap “Invite a Member”.",
"webFaqAnswer20": "Yes! If you already have a Habitica players username or email address, you can invite them to join your Party. Heres how to send an invite on the different platforms:\n\n## On Habiticas website\n\nNavigate to your Party and click “Invite to Party” on the right-hand side of the page.\n\n## On iOS and Android\n\nTap “Party” from the Menu. Scroll to the Members section and tap “Invite a Member”.",
"iosFaqAnswer20": "Yes! If you already have a Habitica players username or email address, you can invite them to join your Party. Heres how to send an invite on the different platforms:\n\nOn Habiticas website:\n\nNavigate to your Party and click “Invite to Party” on the right-hand side of the page.\n\nOn the Android app:\n\nTap “Party” from the Menu. Scroll to the Members section and tap “Find Members” then tap the “By Invite” tab.\n\nOn the iOS app:\n\nTap “Party” from the Menu. Scroll to the Members section and tap “Invite a Member”.",
"androidFaqAnswer20": "Yes! If you already have a Habitica players username or email address, you can invite them to join your Party. Heres how to send an invite on the different platforms:\n\nOn Habiticas website:\n\nNavigate to your Party and click “Invite to Party” on the right-hand side of the page.\n\nOn the Android app:\n\nTap “Party” from the Menu. Scroll to the Members section and tap “Find Members” then tap the “By Invite” tab.\n\nOn the iOS app:\n\nTap “Party” from the Menu. Scroll to the Members section and tap “Invite a Member”.",
"webFaqAnswer20": "Yes! If you already have a Habitica players username or email address, you can invite them to join your Party. Heres how to send an invite on the different platforms:\n\nOn Habiticas website:\n\nNavigate to your Party and click “Invite to Party” on the right-hand side of the page.\n\nOn the Android app:\n\nTap “Party” from the Menu. Scroll to the Members section and tap “Find Members” then tap the “By Invite” tab.\n\nOn the iOS app:\n\nTap “Party” from the Menu. Scroll to the Members section and tap “Invite a Member”.",
"faqQuestion21": "How do I cancel a pending invitation to my Party?",
"iosFaqAnswer21": "To cancel a pending invitation on Habiticas website:\n\n1. Click on Member list when viewing your Party\n\n2. Click the “Invites” tab\n\n3. Click the three dots beside the users invite you wish to cancel\n\n4. Choose “Cancel Invite”\n\n\n\nYoull be able to cancel a pending invitation from the mobile apps soon as well!",
"androidFaqAnswer21": "To cancel a pending invitation on Habiticas website:\n\n1. Click on Member list when viewing your Party\n\n2. Click the “Invites” tab\n\n3. Click the three dots beside the users invite you wish to cancel\n\n4. Choose “Cancel Invite”\n\n\n\nYoull be able to cancel a pending invitation from the mobile apps soon as well!",
"webFaqAnswer21": "To cancel a pending invitation on Habiticas website:\n\n1. Click on Member list when viewing your Party\n\n2. Click the “Invites” tab\n\n3. Click the three dots beside the users invite you wish to cancel\n\n4. Choose “Cancel Invite”\n\n\n\nYoull be able to cancel a pending invitation from the mobile apps soon as well!",
"iosFaqAnswer21": "To cancel a pending invitation on Habiticas website:\n\n1. Click on Member list when viewing your Party.\n2. Click the “Invites” tab.\n3. Click the three dots beside the users invite you wish to cancel.\n4. Choose “Cancel Invite”\n\nTo cancel a pending invitation on the Android app:\n\n1. Scroll down to your Member list when viewing your Party.\n2. At the bottom of the list, youll see your pending invites.\n3. Tap the “Cancel invitation” button.\n\nYoull be able to cancel a pending invitation from the iOS app soon as well!",
"androidFaqAnswer21": "To cancel a pending invitation on Habiticas website:\n\n1. Click on Member list when viewing your Party.\n2. Click the “Invites” tab.\n3. Click the three dots beside the users invite you wish to cancel.\n4. Choose “Cancel Invite”\n\nTo cancel a pending invitation on the Android app:\n\n1. Scroll down to your Member list when viewing your Party.\n2. At the bottom of the list, youll see your pending invites.\n3. Tap the “Cancel invitation” button.\n\nYoull be able to cancel a pending invitation from the iOS app soon as well!",
"webFaqAnswer21": "To cancel a pending invitation on Habiticas website:\n\n1. Click on Member list when viewing your Party.\n2. Click the “Invites” tab.\n3. Click the three dots beside the users invite you wish to cancel.\n4. Choose “Cancel Invite”\n\nTo cancel a pending invitation on the Android app:\n\n1. Scroll down to your Member list when viewing your Party.\n2. At the bottom of the list, youll see your pending invites.\n3. Tap the “Cancel invitation” button.\n\nYoull be able to cancel a pending invitation from the iOS app soon as well!",
"faqQuestion22": "How do I stop unwanted invitations?",
"iosFaqAnswer22": "Once you join a Party youll stop receiving any more invitations. If you want to prevent invites and future communications from a specific player, view their profile and click the Block button.\n\nIf you encounter a situation where you believe another player has broken our Community Guidelines in their name, profile, or a message they sent, please report any messages or reach out to us at admin@habitica.com.",
"androidFaqAnswer22": "Once you join a Party youll stop receiving any more invitations. If you want to prevent invites and future communications from a specific player, view their profile and click the Block button.\n\nIf you encounter a situation where you believe another player has broken our Community Guidelines in their name, profile, or a message they sent, please report any messages or reach out to us at admin@habitica.com.",
"webFaqAnswer22": "Once you join a Party youll stop receiving any more invitations. If you want to prevent invites and future communications from a specific player, view their profile and click the Block button.\n\nIf you encounter a situation where you believe another player has broken our Community Guidelines in their name, profile, or a message they sent, please report any messages or reach out to us at admin@habitica.com.",
"iosFaqAnswer22": "Once you join a Party youll stop receiving any more invitations. If you want to prevent invites and future communications from a specific player, view their profile and click the Block button. On mobile profiles, tap the three dots in the top corner then select “Block”.\n\nIf you encounter a situation where you believe another player has broken our Community Guidelines in their name, profile, or a message they sent, please report any messages or reach out to us at admin@habitica.com.",
"androidFaqAnswer22": "Once you join a Party youll stop receiving any more invitations. If you want to prevent invites and future communications from a specific player, view their profile and click the Block button. On mobile profiles, tap the three dots in the top corner then select “Block”.\n\nIf you encounter a situation where you believe another player has broken our Community Guidelines in their name, profile, or a message they sent, please report any messages or reach out to us at admin@habitica.com.",
"webFaqAnswer22": "Once you join a Party youll stop receiving any more invitations. If you want to prevent invites and future communications from a specific player, view their profile and click the Block button. On mobile profiles, tap the three dots in the top corner then select “Block”.\n\nIf you encounter a situation where you believe another player has broken our Community Guidelines in their name, profile, or a message they sent, please report any messages or reach out to us at admin@habitica.com.",
"faqQuestion23": "How do I filter the list of members searching for a Party?",
"iosFaqAnswer23": "At the moment there is no way to filter the list of members searching for a Party. However, we have plans to introduce filters in the future, such as class, level, and language.",
@@ -125,11 +125,73 @@
"webFaqAnswer23": "At the moment there is no way to filter the list of members searching for a Party. However, we have plans to introduce filters in the future, such as class, level, and language.",
"faqQuestion24": "How do I search for a Party on Android or iOS?",
"iosFaqAnswer24": "Were working on adding the ability to search for a Party and find Party members on mobile soon! Keep an eye out for Android version 4.2 and iOS version 3.8.",
"androidFaqAnswer24": "Were working on adding the ability to search for a Party and find Party members on mobile soon! Keep an eye out for Android version 4.2 and iOS version 3.8.",
"webFaqAnswer24": "Were working on adding the ability to search for a Party and find Party members on mobile soon! Keep an eye out for Android version 4.2 and iOS version 3.8.",
"iosFaqAnswer24": "We added the ability to look for a Party and find Party members in Android version 4.2! Be sure youre updated to the latest version to check it out. Solo players can look for a Party from the Party screen when they arent in one. Party leaders can browse the list of players looking for an invite by tapping “Find Members” above their Partys member list.\n\nSupport for the feature is coming to iOS in version 3.8, so keep an eye out soon!",
"androidFaqAnswer24": "We added the ability to look for a Party and find Party members in Android version 4.2! Be sure youre updated to the latest version to check it out. Solo players can look for a Party from the Party screen when they arent in one. Party leaders can browse the list of players looking for an invite by tapping “Find Members” above their Partys member list.\n\nSupport for the feature is coming to iOS in version 3.8, so keep an eye out soon!",
"webFaqAnswer24": "We added the ability to look for a Party and find Party members in Android version 4.2! Be sure youre updated to the latest version to check it out. Solo players can look for a Party from the Party screen when they arent in one. Party leaders can browse the list of players looking for an invite by tapping “Find Members” above their Partys member list.\n\nSupport for the feature is coming to iOS in version 3.8, so keep an eye out soon!",
"iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"androidFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help."
}
"iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), use the Ask a Question form [LINK NEEDED]! We're happy to help.",
"androidFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), use the Ask a Question form [LINK NEEDED]! We're happy to help.",
"webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), use the Ask a Question form [LINK NEEDED]! We're happy to help.",
"sunsetFaqTitle": "Habitica Tavern and Guild Service Discontinuation FAQ",
"sunsetFaqPara1": "Due to a number of factors, including changes in how our player base interacts with Habitica and new content regulations, we are making the difficult decision to discontinue Tavern and Guild services on <strong>August 8, 2023</strong>.",
"sunsetFaqPara2": "Habiticas primary purpose is and has always been to provide a gamified task management experience. Tavern and Guilds helped motivate players by helping them find others with similar goals. Some truly wonderful spaces were created and we had a chance to see the community thrive with helpful discussion. As the years passed, we noticed changes in how players use and rely on Habitica. Parties flourished, while Guilds and public spaces were used by less and less of our player base. In an ever changing internet landscape, the resources necessary to maintain these spaces became too disproportionate to the number of people actually participating in them.",
"sunsetFaqPara3": "Were making this decision so we can better focus our resources on the parts of Habitica players rely on most without disrupting anyones access.",
"sunsetFaqPara4": "To celebrate the times weve had, we will be gifting everyone a Veteran Pet as we move forward into this new era. For our amazing contributors, well also be sending out a special gear set to commemorate all their hard work in Habiticas communities.",
"sunsetFaqPara5": "If youd like to know more about what's changing, you can read the details below.",
"sunsetFaqHeader1": "Which services are ending?",
"sunsetFaqPara6": "Service for Tavern as well as public and private Guilds is ending and these spaces will be removed from Habitica on <strong>August 8, 2023</strong>.",
"sunsetFaqHeader2": "Why are the Tavern and Guild services ending?",
"sunsetFaqList1": "Habiticas primary purpose is to provide motivation through a gamified task management experience. Guilds and Tavern are utilized by a disproportionately small percentage of our player base. The majority of players use outside services that are primarily intended for social interaction and are intentionally designed and maintained with those use cases in mind.",
"sunsetFaqList2": "New online safety laws require a level of active content oversight for public spaces that Habitica has historically not provided. Investing in the features that these new regulations would require would result in our limited resources being redirected towards parts of Habitica that the vast majority of players never touch.",
"sunsetFaqList3": "Its important to us to continue offering worldwide access to Habiticas ever-growing international player base. Removing these services allows us to continue that goal without having to consider restricting access in regions where more active content oversight than we can provide is required.",
"sunsetFaqHeader3": "Will I still be able to talk with my Party or Group Plan members?",
"sunsetFaqPara7": "Parties and Group Plans will remain and retain their chat spaces. Youll also still be able to send private messages.",
"sunsetFaqHeader4": "Where do I go to pause my Dailies?",
"sunsetFaqPara8": "This feature has been relocated to Settings. The functions of Pause Damage will not be affected by the end of the Tavern and Guild services.",
"sunsetFaqHeader5": "How will I access my Group Plan if its an upgraded Guild?",
"sunsetFaqPara9": "<p><strong>Browser</strong>: Click on the Group Plan navigation in the top bar.</p><p><strong>Android:</strong> Tap your name at the top of the screen when viewing a task list to switch to your shared tasks. To access your chat, tap the chat icon in the header on that screen.</p><p><strong>iOS</strong>: Tap the name of your Group Plan in the menu.</p>",
"sunsetFaqHeader6": "Will players be able to retrieve their Guild chats after the services end?",
"sunsetFaqPara10": "Players will not be able to retrieve chat data from the Tavern and Guilds after the services end.",
"sunsetFaqHeader7": "How will players find Party members?",
"sunsetFaqPara11": "Our new Looking for Party feature is now available. Most players who look for a Party receive an invite within minutes! The team is working hard to add more platform support and improvements to this feature in the near future. You can learn more about how to search for Parties and Party members from our FAQ.",
"sunsetFaqHeader8": "How does this affect Habitica contributors?",
"sunsetFaqPara12": "As an open-source project, we welcome and encourage many types of contributions. To show our appreciation we will be sending the Heroic gear set to everyone that has a contributor tier as of <strong>August 1, 2023</strong>. When Tavern and Guild services end, there will be some changes to contributions as well. You can read more about the plan for each type below.",
"sunsetFaqPara13": "<strong>Blacksmiths</strong><br />We still welcome open-source help through our GitHub and will continue awarding tiers for qualifying contributions. Blacksmith collaboration and discussion has largely taken place over GitHub and that will continue.",
"sunsetFaqPara14": "<strong>Linguists</strong><br />We continue to welcome help with translating the apps and website and will still be awarding contributor tiers for qualifying contributions. However, the method with which we accept translations will be changing. Wed like to focus our resources on supporting a set selection of languages across all platforms. To do this, we will be reducing the amount of languages available for translation. Previously unfinished languages will be archived in Github. We hope this change will make the cross platform Habitica experience more consistent. You can read our most up to date translation procedure guidelines on our <a href='https://translate.habitica.com/projects/habitica/#information'>translation website</a>.",
"sunsetFaqPara15": "<strong>Challengers</strong><br />The team encourages you to continue creating high quality Challenges. We would like to explore new ways of promoting Challenge discoverability in and outside of the app.",
"sunsetFaqPara16": "<strong>Socialites</strong><br />This type of contribution will be ending with the Tavern and Guild discontinuation. We are extremely grateful for the work that our friendly and helpful players have done answering questions in our chat spaces.",
"sunsetFaqPara17": "<strong>Comrades</strong><br />Scripts and add-ons are helpful to a shrinking section of our user base as the mobile apps increasingly become the only way that most users access Habitica. Contributors wishing to create 3rd party tools to customize their Habitica experience can continue doing so, but we will no longer be awarding Comrade tiers as we focus on contributions that enhance Habitica in a way that is accessible to our player base as a whole.",
"sunsetFaqPara18": "<strong>Artisans</strong><br />We are discontinuing artisan contributions. Most art production has already been moved in-house to keep up with our content releases. We are deeply grateful for the fantastic art made over the years by our contributor community.",
"sunsetFaqPara19": "<strong>Wiki Wizards</strong><br />The Habitica Wiki is a wonderful tool created by players for players that has helped so many. We continue to support this effort, but will no longer be tracking or offering tiers for Wiki editing as we shift our focus towards Linguist, Blacksmith, and Challenger contributions within Habitica.",
"sunsetFaqHeader9": "How will Challenges be affected?",
"sunsetFaqList4": "Public Challenges will continue as a feature in Habitica and will be accessible via the Challenges section.",
"sunsetFaqList5": "Challenges based in Parties and Group Plans will remain and be unaffected by the end of Tavern and Guild services.",
"sunsetFaqList6": "Challenges that are currently hosted in Guilds will remain accessible to current participants from their Challenges list, but will not be discoverable in the public list due to privacy concerns. It will not be possible to create new Guild-based Challenges.",
"sunsetFaqList7": "Currently many Challenges have tasks that require posts in Habiticas public chat spaces. Creators of those Challenges can adapt their tasks or move the chat requirement to posting on an outside service.",
"sunsetFaqHeader10": "Where will players go when they have questions about how to use Habitica?",
"sunsetFaqList8": "Our existing <a href='https://habitica.com/static/faq'>FAQ</a> is a great resource and can be found from the Help menu, or Support on mobile. We are in the process of creating a more comprehensive and improved FAQ to help guide players moving forward.",
"sunsetFaqList9": "This <a href='https://habitica.wordpress.com/beginning-adventurers-guide/'>blog post</a> also provides a handy guide for new players.",
"sunsetFaqList10": "Players are also encouraged to email <a href='mailto:admin@habitica.com'>admin@habitica.com</a> with any questions for which they cannot find answers in the above links.",
"sunsetFaqHeader11": "How does this affect Habiticas Community Guidelines and Terms of Service?",
"sunsetFaqPara20": "Habiticas Community Guidelines will be updated at the time Tavern and Guild service is discontinued. They will reflect that community rules for conduct are now in relation to player profiles, Challenges, and messages in private spaces. Our Terms of Service have always applied to both public and private spaces and do not require an immediate update in regard to this change.",
"sunsetFaqHeader12": "What will happen to Guild Bank Gems?",
"sunsetFaqPara21": "Gems in the Guild Bank will be refunded to the leader of the Guild on August 8th when Guild Services end.",
"anotherQuestion": "Have another question?",
"contactAdmin": "Contact <a href='mailto:admin@habitica.com'>admin@habitica.com</a>"
}
+55 -2
View File
@@ -477,6 +477,15 @@
"weaponSpecialSpring2023HealerText": "Lilium Pollen",
"weaponSpecialSpring2023HealerNotes": "With a puff and a sparkle, you deploy new growth, joy, and color. Increases Intelligence by <%= int %>. Limited Edition 2023 Spring Gear.",
"weaponSpecialSummer2023RogueText": "Guppy Fan",
"weaponSpecialSummer2023RogueNotes": "No gup, these things are tricky to learn. But impressive when you do! Increases Strength by <%= str %>. Limited Edition 2023 Summer Gear.",
"weaponSpecialSummer2023WarriorText": "Water Elemental Sword",
"weaponSpecialSummer2023WarriorNotes": "Summon powerful sprays of water to clear your path of obstacles. Increases Strength by <%= str %>. Limited Edition 2023 Summer Gear.",
"weaponSpecialSummer2023MageText": "Fish",
"weaponSpecialSummer2023MageNotes": "These friendly fish will stay by your side as the best accountability buddies in the ocean. Increases Intelligence by <%= int %>. Limited Edition 2023 Summer Gear.",
"weaponSpecialSummer2023HealerText": "Swaying Kelp",
"weaponSpecialSummer2023HealerNotes": "They may look frondly, but they get quite grumpy if you call them 'plants'. Increases Intelligence by <%= int %>. Limited Edition 2023 Summer Gear.",
"weaponMystery201411Text": "Pitchfork of Feasting",
"weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.",
"weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth",
@@ -506,7 +515,9 @@
"weaponMystery202211Text": "Electromancer Staff",
"weaponMystery202211Notes": "Harness the awesome power of a lightning storm with this staff. Confers no benefit. November 2022 Subscriber Item.",
"weaponMystery202212Text": "Glacial Wand",
"weaponMystery202212Notes": "The glowing snowflake in this wand holds the power to warm hearts on even the coldest winter night! Confers no benefit. December 2022 Subscriber Item.",
"weaponMystery202212Notes": "The glowing snowflake in this wand holds the power to warm hearts on even the coldest winter night! Confers no benefit. December 2022 Subscriber Item.",
"weaponMystery202306Text": "Rainbow Umbrella",
"weaponMystery202306Notes": "Shine proud and bring a shimmering prism of color wherever you go! Confers no benefit. June 2023 Subscriber Item.",
"weaponMystery301404Text": "Steampunk Cane",
"weaponMystery301404Notes": "Excellent for taking a turn about town. March 3015 Subscriber Item. Confers no benefit.",
@@ -1151,6 +1162,15 @@
"armorSpecialSpring2023HealerText": "Lily Leaf Gown",
"armorSpecialSpring2023HealerNotes": "A sweep of verdant glory to make you the envy of the Party. Increases Constitution by <%= con %>. Limited Edition 2023 Spring Gear.",
"armorSpecialSummer2023RogueText": "Guppy Wrap",
"armorSpecialSummer2023RogueNotes": "Gup top! Down low! Too slow... Increases Perception by <%= per %>. Limited Edition 2023 Summer Gear.",
"armorSpecialSummer2023WarriorText": "Goldfish Armor",
"armorSpecialSummer2023WarriorNotes": "Goldfish Warriors actually have excellent memories because they always keep their Dailies and To Do's organized in lists. Increases Constitution by <%= con %>. Limited Edition 2023 Summer Gear.",
"armorSpecialSummer2023MageText": "Coral Robes",
"armorSpecialSummer2023MageNotes": "Feel protected and comfortable in these flowing robes, perfectly colored for underwater adventures. Increases Intelligence by <%= int %>. Limited Edition 2023 Summer Gear.",
"armorSpecialSummer2023HealerText": "Kelp Kirtle",
"armorSpecialSummer2023HealerNotes": "Hold fast to your goals and convictions in this elegant green gown. Increases Constitution by <%= con %>. Limited Edition 2023 Summer Gear.",
"armorMystery201402Text": "Messenger Robes",
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
"armorMystery201403Text": "Forest Walker Armor",
@@ -1267,6 +1287,10 @@
"armorMystery202212Notes": "The universe can be cold, but this charming dress will keep you cozy as you fly. Confers no benefit. December 2022 Subscriber Item.",
"armorMystery202304Text": "Tiptop Teapot Armor",
"armorMystery202304Notes": "Here is your handle and here is your spout! Confers no benefit. April 2023 Subscriber Item.",
"armorMystery202306Text": "Rainbow Parka",
"armorMystery202306Notes": "No ones going to rain on your parade! And if they try, youll stay colorful and dry! Confers no benefit. June 2023 Subscriber Item.",
"armorMystery202307Text": "Kraken's Tentacles",
"armorMystery202307Notes": "Suction cups have the best traction on the sea floor and on the sides of wayward ships. Confers no benefit. July 2023 Subscriber Item.",
"armorMystery301404Text": "Steampunk Suit",
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.",
@@ -1457,6 +1481,12 @@
"armorArmoireBasketballUniformNotes": "Wondering whats printed on the back of this uniform? Its your lucky number, of course! Increases Perception by <% per %>. Enchanted Armoire: Old Timey Basketball Set (Item 1 of 2).",
"armorArmoirePaintersApronText": "Painter's Apron",
"armorArmoirePaintersApronNotes": "This apron can protect your clothes from paint and your creative projects from harsh critiques. Increases Constitution by <%= con %>. Enchanted Armoire: Painter Set (Item 1 of 4).",
"armorArmoireStripedRainbowShirtText": "Striped Rainbow Shirt",
"armorArmoireStripedRainbowShirtNotes": "The colors of the rainbow have never looked so good before. Be bold! Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Rainbow Set (Item 1 of 2).",
"armorArmoireDiagonalRainbowShirtText": "Diagonal Rainbow Shirt",
"armorArmoireDiagonalRainbowShirtNotes": "A splash of color with a dash of style. Be joyful! Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Rainbow Set (Item 2 of 2).",
"armorArmoireAdmiralsUniformText": "Admiral's Uniform",
"armorArmoireAdmiralsUniformNotes": "We salute you! This naval uniform signals that youre ready to take command of your tasks as well as a ship. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Admirals Set (Item 2 of 2).",
"headgear": "helm",
"headgearCapitalized": "Headgear",
@@ -1907,6 +1937,15 @@
"headSpecialSpring2023HealerText": "Lily Bloom",
"headSpecialSpring2023HealerNotes": "This brilliant and colorful display shares a color scheme with the Orb of Rebirth! How symbolic! Increases Intelligence by <%= int %>. Limited Edition 2023 Spring Gear.",
"headSpecialSummer2023RogueText": "Guppy Cap",
"headSpecialSummer2023RogueNotes": "Gup, two, three, four! Can't get eaten, got tasks to score! Increases Perception by <%= per %>. Limited Edition 2023 Summer Gear.",
"headSpecialSummer2023WarriorText": "Goldfish Fin",
"headSpecialSummer2023WarriorNotes": "This fabulous fin provides stability as you swim toward troublesome tasks ahead of you. Increases Strength by <%= str %>. Limited Edition 2023 Summer Gear.",
"headSpecialSummer2023MageText": "Coral Antlers",
"headSpecialSummer2023MageNotes": "The wisdom of an entire ecosystem is with you when you work your marine magic. Increases Perception by <%= per %>. Limited Edition 2023 Summer Gear.",
"headSpecialSummer2023HealerText": "Kelp Crown",
"headSpecialSummer2023HealerNotes": "They're not snakes! You can open your eyes, it's safe! Increases Intelligence by <%= int %>. Limited Edition 2023 Summer Gear.",
"headSpecialGaymerxText": "Rainbow Warrior Helm",
"headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
@@ -2056,6 +2095,8 @@
"headMystery202303Notes": "What better way to let everyone know youre the star of this tale than to have blue and improbably spiky hair? Confers no benefit. March 2023 Subscriber Item.",
"headMystery202304Text": "Tiptop Teapot Lid",
"headMystery202304Notes": "Wear this helm for your own safe-tea. Confers no benefit. April 2023 Subscriber Item.",
"headMystery202308Text": "Purple Protagonist Hair",
"headMystery202308Notes": "Does the unruly cowlick sticking up from the middle of your head represent your persistence or your penchant for mischief? Confers no benefit. August 2023 Subscriber Item.",
"headMystery301404Text": "Fancy Top Hat",
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
@@ -2237,7 +2278,9 @@
"headArmoireBeaniePropellerHatText": "Beanie Propeller Hat",
"headArmoireBeaniePropellerHatNotes": "This isnt the time to keep your feet on the ground! Spin this little propeller and rise as high as your ambitions will take you. Increases all stats by <%= attrs %>. Enchanted Armoire: Independent Item.",
"headArmoirePaintersBeretText": "Painter's Beret",
"headArmoirePaintersBeretNotes": "See the world with a more artistic eye when you wear this jaunty beret. Increases Perception by <%= per %>. Enchanted Armoire: Painter Set (Item 2 of 4).",
"headArmoirePaintersBeretNotes": "See the world with a more artistic eye when you wear this jaunty beret. Increases Perception by <%= per %>. Enchanted Armoire: Painter Set (Item 2 of 4).",
"headArmoireAdmiralsBicorneText": "Admiral's Bicorne Hat",
"headArmoireAdmiralsBicorneNotes": "Hats off to you! Wearing this two-cornered hat will make you wiser, brighter, braver...and taller. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Admirals Set (Item 1 of 2).",
"offhand": "off-hand item",
"offHandCapitalized": "Off-Hand Item",
@@ -2490,6 +2533,11 @@
"shieldSpecialSpring2023HealerText": "Lily Corsage",
"shieldSpecialSpring2023HealerNotes": "An accent for a healing visit, or part of a ritual for attending a springtime dance! Increases Constitution by <%= con %>. Limited Edition 2023 Spring Gear.",
"shieldSpecialSummer2023WarriorText": "Goldfish Spirit",
"shieldSpecialSummer2023WarriorNotes": "Summon this goldfish spirit for an extra burst of reassurance and companionship during a fight. Increases Constitution by <%= con %>. Limited Edition 2023 Summer Gear.",
"shieldSpecialSummer2023HealerText": "Sea Urchin",
"shieldSpecialSummer2023HealerNotes": "You conceal and shelter it. It dissuades nosy monsters from coming too close. Perfect symbiosis! Increases Constitution by <%= con %>. Limited Edition 2023 Summer Gear.",
"shieldMystery201601Text": "Resolution Slayer",
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
"shieldMystery201701Text": "Time-Freezer Shield",
@@ -2940,6 +2988,9 @@
"headAccessoryMystery202302Notes": "The purr-fect accessory to set off your enchanting grin. Confers no benefit. February 2023 Subscriber Item.",
"headAccessoryMystery202305Text": "Eventide Horns",
"headAccessoryMystery202305Notes": "These horns glow with reflected moonlight. Confers no benefit. May 2023 Subscriber Item.",
"headAccessoryMystery202307Text": "Kraken's Crown",
"headAccessoryMystery202307Notes": "This mighty circlet summons cyclones and stormy weather! Confers no benefit. July 2023 Subscriber Item.",
"headAccessoryMystery301405Text": "Headwear Goggles",
"headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.",
@@ -3030,6 +3081,8 @@
"eyewearMystery202208Notes": "Lull your enemies into a false sense of security with these terrifyingly cute peepers. Confers no benefit. August 2022 Subscriber Item.",
"eyewearMystery202303Text": "Dreamy Eyes",
"eyewearMystery202303Notes": "Let your nonchalant expression lure your enemies into a false sense of security. Confers no benefit. March 2023 Subscriber Item.",
"eyewearMystery202308Text": "Sleepy Eyes",
"eyewearMystery202308Notes": "Are you sleepy, or just resting your eyes in anticipation of your next amazing battle? Confers no benefit. August 2023 Subscriber Item.",
"eyewearMystery301404Text": "Eyewear Goggles",
"eyewearMystery301404Notes": "No eyewear could be fancier than a pair of goggles - except, perhaps, for a monocle. Confers no benefit. April 3015 Subscriber Item.",
"eyewearMystery301405Text": "Monocle",
+1 -1
View File
@@ -208,7 +208,7 @@
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span> sent you a message",
"letsgo": "Let's Go!",
"selected": "Selected",
"howManyToBuy": "How many would you like to buy?",
"howManyToBuy": "How many would you like to purchase?",
"contactForm": "Contact the Moderation Team",
"loadEarlierMessages": "Load Earlier Messages",
"askQuestion": "Ask a Question",
+3 -2
View File
@@ -130,7 +130,7 @@
"sendGiftHeading": "Send Gift to <%= name %>",
"sendGiftGemsBalance": "From <%= number %> Gems",
"sendGiftCost": "Total: $<%= cost %> USD",
"sendGiftTotal": "Total:",
"sendTotal": "Total:",
"sendGiftFromBalance": "From Balance",
"sendGiftPurchase": "Purchase",
"sendGiftLabel": "Would you like to send a gift message?",
@@ -417,5 +417,6 @@
"lookingForPartyTitle": "Find Members",
"findMorePartyMembers": "Find More Members",
"findPartyMembers": "Find Party Members",
"noOneLooking": "Theres no one looking for a Party right now.<br>You can check back later!"
"noOneLooking": "Theres no one looking for a Party right now.<br>You can check back later!",
"chatSunsetWarning": "⚠️ <strong>Habitica Guilds and Tavern chat will be discontinued on 8/8/2023.</strong> <a href='/static/faq/tavern-and-guilds'>Click here</a> to read more about this change."
}
+4
View File
@@ -199,6 +199,10 @@
"spring2023HummingbirdWarriorSet": "Hummingbird (Warrior)",
"spring2023MoonstoneMageSet": "Moonstone (Mage)",
"spring2023LilyHealerSet": "Lily (Healer)",
"summer2023GoldfishWarriorSet": "Goldfish (Warrior)",
"summer2023GuppyRogueSet": "Guppy (Rogue)",
"summer2023KelpHealerSet": "Kelp (Healer)",
"summer2023CoralMageSet": "Coral (Mage)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
"dateEndJanuary": "January 31",
+1
View File
@@ -31,6 +31,7 @@
"howManyToSell": "How many would you like to sell?",
"yourBalance": "Your balance:",
"sell": "Sell",
"sellItems": "Sell Items",
"buyNow": "Buy Now",
"sortByNumber": "Number",
"featuredItems": "Featured Items!",
+1 -1
View File
@@ -586,7 +586,7 @@
"questNudibranchUnlockText": "Unlocks Nudibranch Eggs for purchase in the Market",
"splashyPalsText": "Splashy Pals Quest Bundle",
"splashyPalsNotes": "Contains 'The Dilatory Derby', 'Guide the Turtle', and 'Wail of the Whale'. Available until July 31.",
"splashyPalsNotes": "Contains 'The Dilatory Derby', 'Guide the Turtle', and 'Wail of the Whale'. Available until June 30.",
"questHippoText": "What a Hippo-Crite",
"questHippoNotes": "You and @awesomekitty collapse into the shade of a palm tree, exhausted. The sun beats down over the Sloensteadi Savannah, scorching the ground below. Its been a productive day so far, conquering your Dailies, and this oasis looks like a nice place to take a break and refresh. Stooping near the water to get a drink, you stumble back in shock as a massive hippopotamus rises. “Resting so soon? Dont be so lazy, get back to work.” You try and protest that youve been working hard and need a break, but the hippo isnt having any of it.<br><br>@khdarkwolf whispers to you, “Notice how its lounging around all day but has the nerve to call you lazy? Its the Hippo-Crite!”<br><br>Your friend @jumorales nods. “Lets show it what hard work looks like!”",
+7 -3
View File
@@ -150,6 +150,9 @@
"mysterySet202303": "Mane Character Set",
"mysterySet202304": "Tiptop Teapot Set",
"mysterySet202305": "Eventide Dragon Set",
"mysterySet202306": "Razzle Dazzle Rainbow Set",
"mysterySet202307": "Perilous Kraken Set",
"mysterySet202308": "Purple Protagonist Set",
"mysterySet301404": "Steampunk Standard Set",
"mysterySet301405": "Steampunk Accessories Set",
"mysterySet301703": "Peacock Steampunk Set",
@@ -194,8 +197,8 @@
"subscriptionBenefit5": "Receive the Royal Purple Jackalope pet when you become a new subscriber.",
"subscriptionBenefit6": "Earn Mystic Hourglasses to purchase items in the Time Travelers Shop!",
"purchaseAll": "Purchase Set",
"gemsRemaining": "Gems remaining",
"notEnoughGemsToBuy": "You are unable to buy that amount of Gems",
"gemsRemaining": "remaining",
"notEnoughGemsToBuy": "No more Gems available for purchase this month. More will become available within the first 3 days of each month.",
"subscribersReceiveBenefits": "Subscribers receive these useful benefits!",
"monthlyMysteryItems": "Monthly Mystery Items",
"doubleDropCap": "Double the Drops",
@@ -217,5 +220,6 @@
"haveNonRecurringSub": "You have a non-recurring gift subscription.",
"switchToRecurring": "Switch to a recurring subscription?",
"continueGiftSubBenefits": "Want to continue your benefits? You can start a new subscription before your gifted one runs out to keep your benefits active.",
"subscriptionCreditConversion": "Starting a new subscription will convert any remaining months to credit that will be used after the recurring subscription is canceled."
"subscriptionCreditConversion": "Starting a new subscription will convert any remaining months to credit that will be used after the recurring subscription is canceled.",
"monthlyGems": "Monthly Gems:"
}
+3 -1
View File
@@ -133,5 +133,7 @@
"addTags": "Add tags...",
"enterTag": "Enter a tag",
"pressEnterToAddTag": "Press Enter to add tag: '<%= tagName %>'",
"taskSummary": "<%= type %> Summary"
"taskSummary": "<%= type %> Summary",
"scoreUp": "Score up",
"scoreDown": "Score down"
}
@@ -3,5 +3,45 @@
"background": "Bakground",
"backgrounds": "Baekgroundz",
"noBackground": "U has no choosd bakgrownd!1!",
"backgroundShopText": "Bakgrownd Shop"
"backgroundShopText": "Bakgrownd Shop",
"backgroundFairyRingText": "fairy ringz",
"backgroundVolcanoText": "Volcaayno",
"backgroundOpenWatersNotes": "Enjoy teh open waterrs.",
"backgrounds072014": "SET 2: RELEASED JULY 2014",
"backgroundAutumnForestText": "Autum Fores",
"backgroundForestNotes": "Strollin thru teh summer forest.",
"backgrounds082014": "SET 3: RELEASED AUGUST 2014",
"backgrounds062014": "SET 1: RELEASED JUNE 2014",
"backgroundVolcanoNotes": "Warm up inside teh volcaino.",
"backgroundBeachNotes": "Lounging on warm beachz r teh best.",
"backgroundCoralReefNotes": "SWIM IN DA CORAL REEF.",
"backgroundThunderstormNotes": "Conduct teh lightnin in a thunder storrm.",
"backgrounds092014": "SET 4: RELEASED SEPTEMBER 2014",
"backgroundSeafarerShipNotes": "Sail on teh Seafairer Ship.",
"backgroundCloudsNotes": "Soaring thru teh clouds.",
"backgroundBeachText": "Beech",
"backgroundDustyCanyonsText": "Dusty Caniyon",
"backgroundThunderstormText": "Thunderstorrm",
"backgroundForestText": "Forrest",
"backgroundOpenWatersText": "Open Wateerrrs",
"backgroundCoralReefText": "CORAL REEF",
"backgroundCloudsText": "Clouuds",
"backgroundSeafarerShipText": "Seafairer Ship",
"hideLockedBackgrounds": "HIDE LOCKD BACKGROUNDZ",
"backgroundFairyRingNotes": "Dancin in teh fairy ringz.",
"backgroundHauntedHouseText": "hauunted haus",
"backgroundHauntedHouseNotes": "snek thru teh haunted hous",
"backgroundPumpkinPatchNotes": "carve teh jack-lanterrns in teh pumpkin patch.",
"backgroundDustyCanyonsNotes": "Walk thru a Dursty Caneon.",
"backgrounds102014": "SET 5: RELEASED OCTOBER 2014",
"backgrounds112014": "SET 6: RELEASED NOVEMBER 2014",
"backgroundHarvestFieldsText": "HARVEST DA FIELDS",
"backgroundGraveyardNotes": "Visit a creepy graveyard, oh no.",
"backgroundHarvestFieldsNotes": "Cultivat ur harvest felds.",
"backgroundGraveyardText": "Graveyarrd",
"backgroundPumpkinPatchText": "pumpkin pach",
"backgroundHarvestFeastNotes": "Enjoy teh harvest feast.",
"backgroundHarvestFeastText": "Harvest teh Feast",
"backgroundAutumnForestNotes": "U will walk thru teh forst of autumn.",
"backgroundStarrySkiesText": "starrry skes"
}
@@ -2,21 +2,21 @@
"playerTiersDesc": "Teh colrd usrnaemz u see n chat r 4 pplz contributr teer. Teh highr teh teer, teh moar teh persun haz helpd Habitica thru art, code, teh community, an moar!",
"tier1": "Teer 1 (Fren)",
"tier2": "Teer 2 (Fren)",
"tier3": "Teer 3 (1337)",
"tier4": "Teer 4 (1337)",
"tier3": "Teer 3 (Eleete)",
"tier4": "Teer 4 (Eleete)",
"tier5": "Teer 5 (Champyon)",
"tier6": "Teer 6 (Champyon)",
"tier7": "Teer 7 (Legendareh)",
"tierModerator": "Moderatr (Gardian)",
"tierStaff": "Staf (Herowik)",
"tierNPC": "NPC",
"friend": "Frand",
"elite": "1337",
"tierNPC": "Not teh Humaniod Characterrr",
"friend": "Frien",
"elite": "Eleete",
"champion": "Champyun",
"legendary": "Legundareh",
"moderator": "Moderatur",
"guardian": "Gawrdiyun",
"staff": "Staf",
"staff": "Stafff",
"heroic": "Heroik",
"modalContribAchievement": "Contributar Acheevment!",
"contribModal": "<%= name %>, u awsum persn! Ur now teer <%= level %> contributr 4 helpin Habitica.",
@@ -53,5 +53,6 @@
"surveysSingle": "Helpd Habitica groah, eithr by filin out survai or helpin wif majur testin efort. Thx!",
"surveysMultiple": "Helpd Habitica groah on <%= count %> ocashunz, eithr by filin out survai or helpin wif majur testin efort. Thx!",
"blurbHallPatrons": "Dis is teh Hal ov Patronz, where we honr teh nobl aventururz hoo backd Habiticaz originul Kickstarter. We thank dem 4 helpin us bring Habitica 2 laif!",
"blurbHallContributors": "This is the Hall of Contributors, where open-source contributors to Habitica are honored. Whether through code, art, music, writing, or even just helpfulness, they have earned <a href='https://habitica.fandom.com/wiki/Contributor_Rewards' target='_blank'> gems, exclusive equipment</a>, and <a href='https://habitica.fandom.com/wiki/Contributor_Titles' target='_blank'>prestigious titles</a>. You can contribute to Habitica, too! <a href='https://habitica.fandom.com/wiki/Contributing_to_Habitica' target='_blank'> Find out more here. </a>"
"blurbHallContributors": "Tis is teh Haall of teh Contributors, tis wher teh open-surce contributors of Habitica r honourred. Weatherr thru coed, arrt, muusic, writingg, or evn just helpiing, zey have earned <a href='https://habitica.fandom.com/wiki/Contributor_Rewards' target='_blank'> geems, excluusive stuf</a>, and teh <a href='https://habitica.fandom.com/wiki/Contributor_Titles' target='_blank'>very rare titles</a>. U r able to contribut as well! <a href='https://habitica.fandom.com/wiki/Contributing_to_Habitica' target='_blank'> Learn moer heir.</a>",
"noPrivAccess": "You no haz teh neded priviiligees."
}
@@ -122,5 +122,6 @@
"achievementZodiacZookeeper": "12 Zodiac Zookeeper",
"achievementZodiacZookeeperModalText": "You collected all the 12 zodiac pets!",
"achievementShadyCustomer": "shadow man",
"achievementShadeOfItAll": "The Beginning of the Shade"
"achievementShadeOfItAll": "The Beginning of the Shade",
"achievementDomesticatedModalText": "Ye gathered ev'ry critter matey!"
}
+4 -1
View File
@@ -147,5 +147,8 @@
"achievementPolarProText": "¡Ha eclosionado todos los colores estándar para mascotas Polares: Osos, Zorros, Pinguinos, Ballenas y Lobos!",
"achievementPlantParent": "Progenitor de las Plantas",
"achievementPlantParentText": "¡Ha eclosionado todos los colores estándar para las mascotas Planta: Cáctus y Esqueje de árbol!",
"achievementPlantParentModalText": "¡Has coleccionado todas las Mascotas Planta!"
"achievementPlantParentModalText": "¡Has coleccionado todas las Mascotas Planta!",
"achievementDinosaurDynasty": "Dinastía de Dinosaurios",
"achievementDinosaurDynastyModalText": "¡Has recogido todas las mascotas de pájaros y dinosaurios!",
"achievementDinosaurDynastyText": "Ha incubado todos los colores estándar de mascotas, de aves y dinosaurios: halcón, búho, loro, pavo real, pingüino, gallo, pterodáctilo, tiranosaurio rex, triceratops y velociraptor!"
}
File diff suppressed because one or more lines are too long
+51 -47
View File
@@ -3,14 +3,14 @@
"stringNotFound": "No se encontró la cadena '<%= string %>'.",
"habitica": "Habitica",
"onward": "¡Adelante!",
"done": "Hecho",
"done": "Completado",
"gotIt": "¡Recibido!",
"titleTimeTravelers": "Viajeros del tiempo",
"titleSeasonalShop": "Tienda de temporada",
"saveEdits": "Guardar cambios",
"showMore": "Mostrar más",
"showLess": "Mostrar menos",
"markdownHelpLink": "Ayuda con el formato Markdown",
"markdownHelpLink": "Ayuda con el formato Reducción",
"bold": "**Negrita**",
"markdownImageEx": "![texto alt obligatorio](https://habitica.com/cake.png \"título opcional al pasar el ratón\")",
"code": "`código`",
@@ -41,16 +41,16 @@
"continue": "Continuar",
"accept": "Aceptar",
"reject": "Rechazar",
"neverMind": "No importa",
"neverMind": "Olvídalo",
"notEnoughGems": "No tienes suficientes gemas",
"alreadyHave": "Vaya, ya tienes este artículo. ¡No necesitas comprarlo otra vez!",
"alreadyHave": "Vaya! ya tienes este artículo. ¡No necesitas comprarlo otra vez!",
"delete": "Eliminar",
"gemsPopoverTitle": "Gemas",
"gems": "Gemas",
"needMoreGems": "¿Necesitas más gemas?",
"needMoreGemsInfo": "¡Compra Gemas ahora, o suscríbete para comprar Gemas con Oro, conseguir objetos misteriosos mensuales, disfrutar mayores botines y más!",
"needMoreGemsInfo": "¡Compra Gemas ahora, o suscríbete para comprar Gemas con Oro, recibe objetos misteriosos mensualmente, disfruta botines mas fréquentes y más!",
"veteran": "Veterano",
"veteranText": "Ha sobrevivido a Habit The Grey (nuestro sito web pre-Angular) y se ha ganado muchas cicatrices por sus fallos.",
"veteranText": "Ha sobrevivido a Habit The Grey (nuestro sito web pre-Angular) y ha recibido muchas cicatrices de sus fallos.",
"originalUser": "¡Usuario original!",
"originalUserText": "Uno de los <em>primerísimos</em> usuarios... ¡Este sí que es un alpha tester!",
"habitBirthday": "Fiesta de cumpleaños de Habitica",
@@ -58,11 +58,11 @@
"habitBirthdayPluralText": "¡Participó en <%= count %> Fiestas de Cumpleaños de Habitica!",
"habiticaDay": "Bautizo de Habitica",
"habiticaDaySingularText": "¡Celebró el bautizo de Habitica! Gracias por ser un usuario magnífico.",
"habiticaDayPluralText": "¡Participó en <%= count %> onomásticas de Habitica! Gracias por ser un magnífico usuario.",
"habiticaDayPluralText": "¡Participó en <%= count %> bautizos de Habitica! Gracias por ser un magnífico usuario.",
"achievementDilatory": "Salvador de Dilatoria",
"achievementDilatoryText": "¡Ayudó a derrotar al Dread Drag'on de Dilatoria durante el evento Summer Splash del 2014!",
"costumeContest": "Participante disfrazado",
"costumeContestText": "Has participado en el Concurso de Disfraces de Habitoween. ¡Mira algunas de las estupendas entradas en blog.habitrpg.com!",
"costumeContestText": "Participo en el Concurso de Disfraces de Habitoween. ¡Mira algunas de las estupendas entradas en blog.habitrpg.com!",
"costumeContestTextPlural": "Has participado en <%= count %> Concursos de Disfraces de Habitoween. ¡Echa un vistazo a las estupendas entradas en blog.habitrpg.com!",
"newPassSent": "Si tenemos constancia de tu correo electrónico, te hemos enviado un mensaje con las instrucciones a seguir para establecer una nueva contraseña.",
"error": "Error",
@@ -74,27 +74,27 @@
"audioTheme": "Tema de audio",
"audioTheme_off": "Desactivado",
"audioTheme_danielTheBard": "Daniel el Bardo",
"audioTheme_wattsTheme": "Tema Watts",
"audioTheme_gokulTheme": "Tema Gokul",
"audioTheme_luneFoxTheme": "Tema LuneFox",
"audioTheme_rosstavoTheme": "Tema Rosstavo",
"audioTheme_dewinTheme": "El tema de Dewin´s",
"audioTheme_airuTheme": "Tema Airu",
"audioTheme_beatscribeNesTheme": "Tema Beatscribe's NES",
"audioTheme_arashiTheme": "Tema Arashi",
"audioTheme_triumphTheme": "Tema del Triunfo",
"audioTheme_lunasolTheme": "Tema de Lunasol",
"audioTheme_spacePenguinTheme": "Tema del Pingüino Espacial",
"audioTheme_maflTheme": "Tema MAFL",
"audioTheme_pizildenTheme": "Tema de Pizilden",
"audioTheme_farvoidTheme": "Tema de Farvoid",
"reportBug": "Notificar un error",
"audioTheme_wattsTheme": "El tema de Watts",
"audioTheme_gokulTheme": "El tema de Gokul",
"audioTheme_luneFoxTheme": "El tema de LuneFox",
"audioTheme_rosstavoTheme": "El tema de Rosstavo",
"audioTheme_dewinTheme": "El tema de Dewin",
"audioTheme_airuTheme": "El tema de Airu",
"audioTheme_beatscribeNesTheme": "El tema de Beatscribe's NES",
"audioTheme_arashiTheme": "El tema de Arashi",
"audioTheme_triumphTheme": "El tema del Triunfo",
"audioTheme_lunasolTheme": "El tema de Lunasol",
"audioTheme_spacePenguinTheme": "El tema del Pingüino Espacial",
"audioTheme_maflTheme": "El tema de MAFL",
"audioTheme_pizildenTheme": "El tema de Pizilden",
"audioTheme_farvoidTheme": "El tema de Farvoid",
"reportBug": "Reportar un error",
"overview": "Introducción para nuevos usuarios",
"dateFormat": "Formato de fecha",
"achievementStressbeast": "Salvador de Stoïkalm",
"achievementStressbeastText": "¡Ayudó a derrotar a la Abominable Bestia del Estrés durante el evento Winter Wonderland de 2014!",
"achievementStressbeastText": "¡Ayudó a derrotar a la Bestia Abominable del Estrés durante el evento Paraíso Invernal de 2014!",
"achievementBurnout": "Salvador de los Campos Florecientes",
"achievementBurnoutText": "¡Ayudó a derrotar al Burnout y restaurar los Espíritus del Cansancio durante el evento Fall Festival de 2015!",
"achievementBurnoutText": "¡Ayudó a derrotar al Burnout y restaurar los Espíritus del Cansancio durante el evento Festival de Otoño de 2015!",
"achievementBewilder": "Salvador de Calavuelos",
"achievementBewilderText": "¡Ayudó a derrotar al Apa-bullador durante el Evento de Primavera de 2016!",
"achievementDysheartener": "Salvador de los Destrozados",
@@ -104,19 +104,19 @@
"cardReceived": "Recibiste una <span class=\"notification-bold-blue\"><%= card %></span>",
"greetingCard": "Tarjeta de saludo",
"greetingCardExplanation": "¡Ambos recibís el logro Alegres Amigotes!",
"greetingCardNotes": "Enviar una tarjeta para mandar un saludo a un miembro del equipo.",
"greetingCardNotes": "Enviar una tarjeta a un miembro del equipo.",
"greeting0": "¡Hola!",
"greeting1": "Solo quería saludar :)",
"greeting2": "(saluda con emoción)",
"greeting3": "¡Ey!",
"greetingCardAchievementTitle": "Alegre Amigote",
"greetingCardAchievementText": "¡Eh! ¡Hola! ¿Qué tal? <%= count %> tarjetas de saludo enviadas o recibidas.",
"greetingCardAchievementText": "¡Eh! ¡Hola! ¿Qué tal? <%= count %> tarjetas enviadas o recibidas.",
"thankyouCard": "Tarjeta de agradecimiento",
"thankyouCardExplanation": "¡Ambos recibís el logro Agradablemente Agradecido!",
"thankyouCardNotes": "Envía una tarjeta de agradecimiento a un miembro de tu equipo.",
"thankyou0": "¡Muchas gracias!",
"thankyou1": "¡Gracias, gracias, gracias!",
"thankyou2": "Te envío mil gracias.",
"thankyou2": "Envíando mil gracias.",
"thankyou3": "Estoy muy agradecido: ¡gracias!",
"thankyouCardAchievementTitle": "Agradablemente Agradecido",
"thankyouCardAchievementText": "¡Gracias por ser agradecido! <%= count %> tarjetas de agradecimiento enviadas o recibidas.",
@@ -126,31 +126,31 @@
"birthday0": "¡Feliz cumpleaños!",
"birthdayCardAchievementTitle": "Prosperidad Cumpleañera",
"birthdayCardAchievementText": "¡Muchas felicidades! <%= count %> tarjetas de cumpleaños enviadas o recibidas.",
"congratsCard": "Carta de Enhorabuena",
"congratsCard": "Carta de felicitaciónes",
"congratsCardExplanation": "¡Ambos habéis recibido el logro de Compañero Felicitador!",
"congratsCardNotes": "Envía una Carta de Enhorabuena a un miembro del equipo.",
"congrats0": Enhorabuena por tu éxito!",
"congratsCardNotes": "Envía una Carta de felicitaciónes a un miembro del equipo.",
"congrats0": Felicitaciónes por tu éxito!",
"congrats1": "¡Estoy orgulloso de ti!",
"congrats2": "¡Bien hecho!",
"congrats3": Un aplauso para ti!",
"congrats3": Aplauso para ti!",
"congrats4": "¡Disfruta de tu bien merecido éxito!",
"congratsCardAchievementTitle": "Compañero Congratulatorio",
"congratsCardAchievementText": "¡Es genial celebrar los logros de tus amigos! Enviaste o recibiste <%= count %> cartas de enhorabuena.",
"getwellCard": "Carta de Ponte Bueno",
"congratsCardAchievementText": "¡Es genial celebrar los logros de tus amigos! Enviaste o recibiste <%= count %> cartas de felicitaciónes.",
"getwellCard": "Carta de recupérate pronto",
"getwellCardExplanation": "¡Ambos habéis recibido el logro de Confidente Solícito!",
"getwellCardNotes": "Envía una carta de Ponte Bueno a un miembro del equipo.",
"getwellCardNotes": "Envía una carta de recupérate pronto a un miembro del equipo.",
"getwell0": "¡Espero que te recuperes pronto!",
"getwell1": "¡Cuídate! <3",
"getwell2": "¡Te tengo en mis pensamientos!",
"getwell3": "¡Siento que no te encuentres bien!",
"getwellCardAchievementTitle": "Confidente Cuidadoso",
"getwellCardAchievementText": "Siempre son de agrado los deseos de mejoría. Enviaste o recibiste <%= count %> cartas de Ponte Bueno.",
"getwellCardAchievementText": "Siempre son de agradecidos los deseos de salud. Enviaste o recibiste <%= count %> cartas de recupérate pronto.",
"goodluckCard": "Carta de Buena Suerte",
"goodluckCardExplanation": "¡Ambos recibís el logro Carta de la Suerte!",
"goodluckCardNotes": "Envía una carta de Buena Suerte a un miembro del equipo.",
"goodluck0": "¡Que la suerte te acompañe!",
"goodluck1": "¡Te deseo un montón de suerte!",
"goodluck2": "¡Espero que la suerte esté de lado hoy y siempre!",
"goodluck2": "¡Espero que la suerte esté a tu lado hoy y siempre!",
"goodluckCardAchievementTitle": "Carta de la Suerte",
"goodluckCardAchievementText": "¡Los deseos de buena suerte son un gran estímulo! Enviaste o recibiste <%= count %> cartas de Buena Suerte.",
"streakAchievement": "¡Has obtenido un logro de racha!",
@@ -163,8 +163,8 @@
"orderBy": "Ordenar por <%= item %>",
"you": "(tú)",
"loading": "Cargando...",
"userIdRequired": "Es necesaria un ID de usuario",
"resetFilters": "Limpiar todos los filtros",
"userIdRequired": "Es necesario un ID de usuario",
"resetFilters": "Borrar todos los filtros",
"applyFilters": "Aplicar filtros",
"wantToWorkOn": "Quiero trabajar en:",
"categories": "Categorías",
@@ -174,11 +174,11 @@
"health_wellness": "Salud y Bienestar",
"self_care": "Cuidado de ti mismo",
"habitica_official": "Oficial de Habitica",
"academics": "Académico",
"academics": "Académica",
"advocacy_causes": "Defensa + Causas",
"entertainment": "Entretenimiento",
"finance": "Finanzas",
"health_fitness": "Salud + Ejercicios",
"health_fitness": "Salud + Ejercicio",
"hobbies_occupations": "Aficiones + Ocupaciones",
"location_based": "Basado en la localización",
"mental_health": "Salud Mental + Cuidado de ti mismo",
@@ -186,11 +186,11 @@
"self_improvement": "Autosuperación",
"spirituality": "Espiritualidad",
"time_management": "Manejo del Tiempo + Responsabilidad",
"recovery_support_groups": "Recuperación + Grupos de Ayuda",
"recovery_support_groups": "Recuperación + Grupos de Apoyo",
"dismissAll": "Ignorar todas",
"messages": "Mensajes",
"emptyMessagesLine1": "No tienes ningún mensaje",
"emptyMessagesLine2": "Puedes enviar un nuevo mensaje a un usuario visitando su perfil y haciendo clic en el botón \"Mensaje\".",
"emptyMessagesLine2": "Puedes enviar un nuevo mensaje a un usuario visitando su perfil y presionando \"Mensaje\".",
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span> te ha enviado un mensaje",
"letsgo": "¡Vamos!",
"selected": "Seleccionado",
@@ -199,8 +199,8 @@
"options": "Opciones",
"demo": "Demo",
"loadEarlierMessages": "Cargar Mensajes Anteriores",
"finish": "Terminar",
"congratulations": Enhorabuena!",
"finish": "Finalizar",
"congratulations": Felicidades!",
"onboardingAchievs": "Logros de incorporación",
"reportEmailError": "Por favor, introduzca un correo electrónico válido",
"reportDescription": "Descripción",
@@ -212,6 +212,10 @@
"reportEmailText": "Esto solo se utilizará para contactar contigo en relación con el informe de error.",
"reportEmailPlaceholder": "Tu correo electrónico",
"reportDescriptionText": "Si lo crees conveniente, incluye capturas de pantalla o errores de la consola de Javascript.",
"reportSentDescription": "Nos pondremos en contacto contigo en cuanto nuestro equipo haya podido estudiarlo. Gracias por informarnos del problema.",
"askQuestion": "Haz una pregunta"
"reportSentDescription": "Nos pondremos en contacto contigo en cuanto nuestro equipo haya podido investigar. Gracias por informarnos del problema.",
"askQuestion": "Haz una pregunta",
"skipExternalLinkModal": "Mantenga presionada la tecla CTRL (Windows) o Comando (Mac) al hacer clic en un enlace para omitir este modal.",
"refreshList": "Actualizar lista",
"leaveHabitica": "Estás a punto de salir de Habitica.com",
"leaveHabiticaText": "Habitica no es responsable del contenido de ningún sitio web vinculado que no sea propiedad ni esté operado por HabitRPG.<br>Tenga en cuenta que las prácticas de estos sitios web pueden diferir de las pautas de la comunidad de Habitica."
}
@@ -4,7 +4,7 @@
"commGuideHeadingWelcome": "¡Bienvenido a Habitica!",
"commGuidePara001": "¡Saludos, aventurero! Bienvenido a Habitica, la tierra de la productividad, la vida sana y el ocasional grifo desbocado. Tenemos una comunidad alegre llena de personas útiles que se apoyan mutuamente en su camino hacia la superación personal. Para encajar, todo lo que se necesita es una actitud positiva, un trato respetuoso y la comprensión de que todos tienen diferentes habilidades y limitaciones, ¡incluido usted! Los habiticanos son pacientes entre sí y tratan de ayudar cuando pueden.",
"commGuidePara002": "Para ayudar a mantenerlos a todos seguros, felices y productivos en la comunidad, tenemos algunas normas. Las hemos elaborado cuidadosamente para que sean lo más agradable y facil de leer posible. Por favor tómese el tiempo para leerlas antes de comenzar a conversar.",
"commGuidePara003": "Estas reglas aplican a todos los espacios sociales que usamos, incluyendo (aunque no exclusivamente) Trello, GitHub, Weblate, y la Wiki de Habitica en Fandom. A medida de que las comunidades crecen y cambian, sus reglas pueden adaptarse de vez en cuando. ¡Cuando haya cambios sustanciales a estas Reglas, lo sabrás por medio de un anuncio de Bailey y/o nuestras redes sociales!",
"commGuidePara003": "Estas reglas aplican a todos los espacios sociales que usamos, incluyendo (aunque no exclusivamente) Trello, GitHub, Weblate, y la Wiki de Habitica en Fandom. A medida de que las comunidades crecen y cambian, sus reglas pueden adaptarse con el tiempo. ¡Cuando haya cambios sustanciales a estas Reglas, lo sabrás por medio de un anuncio de Bailey y/o nuestras redes sociales!",
"commGuideHeadingInteractions": "Interacciones en Habitica",
"commGuidePara015": "Habitica tiene dos tipos de espacios sociales: públicos y privados. Los espacios públicos incluyen la Taberna, Gremios Públicos, GitHub, Trello y la Wiki. Los espacios privados son Gremios Privados, chat de Equipo y Mensajes Privados. Todos los Nombres Públicos y @nombresdeusuario deben cumplir con las normas de espacio publico. Para cambiar tu Nombre Público o @nombredeusuario, en dispositivos móviles ve a Menú > Ajustes > Perfil; en la página web ve a Usuario > Ajustes.",
"commGuidePara016": "Al navegar los espacios públicos en Habitica, hay algunas reglas generales para mantener a todos seguros y felices.",
@@ -127,5 +127,5 @@
"commGuideList01B": "Prohibido: mensajes amenazantes, violentos, que promocionen la discriminación, etc. incluyendo memes, imágenes y bromas.",
"commGuideList02M": "No pidas gemas, suscripciones o membresía en Planes de Grupo. Esto no está permitido en la Taberna, espacios de chat públicos o privados, ni en mensajes privados. Si recibes mensajes solicitando artículos de pago, por favor márcalos para reportarlos. Pedir gemas o suscripciones repetida o intensamente, especialmente después de una advertencia, puede resultar en la suspensión de tu cuenta.",
"commGuideList01C": "Todas las discusiones deben ser aptas para todas las edades y estar libres de palabras ofensivas.",
"commGuideList01E": "No inicies o te unas a conversaciones polémicas en la Taberna."
"commGuideList01E": "<strong>No inicies o participes en conversaciones polémicas en la Taberna.<strong>"
}
+2 -1
View File
@@ -54,5 +54,6 @@
"webFaqAnswer12": "Los Jefes Mundiales son monstruos especiales que aparecen en la Taberna. Todos los usuarios activos pasan automáticamente a luchar contra el Monstruo, y sus tareas y Habilidades harán daño al Monstruo, como es habitual. Puedes estar al mismo tiempo en una Misión normal. Tus tareas y Habilidades contarán tanto para el Monstruo Mundial como para la Misión de Jefe/Recolección en tu equipo. Un Monstruo Mundial nunca te hará daño en tu cuenta. En vez de eso, tiene una Barra de Ira que se llena cuando los usuarios se saltan tareas Diarias. Si esta barra se llena, atacará a uno de los Personajes No Jugadores de la web, y su imagen cambiará. Puedes leer más sobre [anteriores Jefes de Mundo](https://habitica.fandom.com/wiki/World_Bosses) en la wiki.",
"iosFaqStillNeedHelp": "Si tienes una pregunta que no se encuentra en la lista o en las [Preguntas Frecuentes de la Wiki](https://habitica.fandom.com/wiki/FAQ), ¡pregúntanos en el chat de la Taberna en Menú > Taberna! Estaremos encantados de ayudarte.",
"androidFaqStillNeedHelp": "Si tienes alguna pregunta que no esté en la lista o en las [preguntas frecuentes de la Wiki](https://habitica.fandom.com/wiki/FAQ), ¡ven a preguntar al chat de la Taberna, bajo el Menú > Taberna! Estaremos encantados de ayudar.",
"webFaqStillNeedHelp": "Si tienes una pregunta que no está en esta lista o en [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), ¡ven y pregunta en el [gremio Habitica Help](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Estamos felices de ayudar."
"webFaqStillNeedHelp": "Si tienes una pregunta que no está en esta lista o en [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), ¡ven y pregunta en el [gremio Habitica Help](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! Estamos felices de ayudar.",
"general": "Información general"
}
+4 -1
View File
@@ -147,5 +147,8 @@
"achievementPolarProModalText": "Vous avez collecté tous les familiers polaires !",
"achievementPlantParent": "Protecteur des plantes",
"achievementPlantParentText": "A fait éclore toutes les couleurs standards de familiers plantes : Cactus et arbustes !",
"achievementPlantParentModalText": "Vous avec collecté tous les familiers plantes !"
"achievementPlantParentModalText": "Vous avec collecté tous les familiers plantes !",
"achievementDinosaurDynasty": "Dynastie des dinosaures",
"achievementDinosaurDynastyText": "A fait éclore toutes les couleurs standard d'oiseaux et de dinosaures : faucon, hibou, perroquet, paon, pingouin, coq, ptérodactyle, T-Rex, tricératops et vélociraptor !",
"achievementDinosaurDynastyModalText": "Vous avez collecté tous les animaux de compagnie d'oiseau et de dinosaure!"
}

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