Compare commits

..

242 Commits

Author SHA1 Message Date
SabreCat 51b3b0c4c7 4.251.0 2022-12-06 13:34:53 -06:00
SabreCat 174a4e69f9 fix(backgrounds): we're in December now 2022-12-06 13:34:25 -06:00
Natalie L 1ce060eac6 chore(content): add December 2022 Backgrounds and Enchanted Armoire Items (#14382)
* chore(content): css and images

* chore(content): add December 2022 Backgrounds and Enchanted Armoire Items

* fix(typos): dots no dip

* fix(typo): capitalize game terms

* fix(typos): GitHub regex find, why

* fix(typo): last one maybe?

Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-12-06 13:21:24 -06:00
SabreCat 4fe8b63748 4.250.1 2022-12-05 14:47:18 -06:00
Natalie L b5c64185f0 chore(tavern): update to remove moderators from tavern (#14393)
* chore(tavern): update to remove moderators from tavern

* fix(tavern): additional cleanup, change string in Vue instead of Weblate

* fix(git): correct target branch

Co-authored-by: SabreCat <sabe@habitica.com>
2022-12-05 14:46:25 -06:00
SabreCat 894558f2df chore(images): update submodule 2022-12-02 13:21:32 -06:00
SabreCat f1381878e7 4.250.0 2022-11-28 15:34:44 -06:00
Natalie L 9bd039b17b chore(content): add December 2022 Mystery Items (#14379)
* chore(submodule): images

* chore(content): December Mystery Items

* chore(content): sprites

* fix(typo): whitespace

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-11-28 15:34:18 -06:00
SabreCat 90b34c4dac fix(shops): correct imports 2022-11-23 13:23:43 -06:00
SabreCat 96a919ed4b fix(shops): quest countdowns too 2022-11-23 13:13:06 -06:00
SabreCat e56b672226 4.249.7 2022-11-23 13:08:35 -06:00
SabreCat 91cbf7a2a9 fix(shops): show correct countdown outside of Gala 2022-11-23 13:08:23 -06:00
SabreCat 04e2a39a9f fix(test): rearrange for legacy event logic 2022-11-21 20:08:15 -06:00
SabreCat bdd926e110 4.249.6 2022-11-21 18:55:03 -06:00
SabreCat a8e9c9bc70 chore(event): set up Harvest Feast 2022 2022-11-21 18:54:57 -06:00
SabreCat 497073a714 4.249.5 2022-11-21 16:42:36 -06:00
SabreCat f1fa6a8456 Revert "Allow sub upgrades/downgrades on iOS (#14303)"
This reverts commit 9e98e56e9b.
2022-11-21 16:40:56 -06:00
prexio 3f690c24da Change Wikia to Fandom (#14291) 2022-11-18 16:54:12 -06:00
Natalie L f24d81d895 fix(content): quality of life change for staff and moderators (#14245)
* fix(content): quality of life change for staff and moderators

* fix(content): quality of life change for staff and moderators, I really mean it this time

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-11-18 16:52:09 -06:00
Sabe Jones 82c5e40b92 Enforce maximum password length (#14290)
* fix(auth): enforce maximum password length

* fix(auth): line length and better error message

* fix(auth): correctly import/export constant

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-18 16:49:10 -06:00
Adam Fitzgibbon 6b27e18699 add prop to task-wrapper so that the cursor remains consistant (#14302) 2022-11-18 16:48:34 -06:00
Adam Fitzgibbon 4f70a6fbf4 now grouping the stable A-Z sortBy option by first letter so that Show More functionality works like the other sort types (#14304) 2022-11-18 16:44:58 -06:00
Adam Fitzgibbon 300c2bb0a8 change currency to gold if the gear is owned (#14326)
* change currency to gold if the gear is owned

* fix linting error
2022-11-18 16:43:14 -06:00
Sky Chrastina 4b4f073089 Fix az sort (#14347)
* add stopword package

* sort pet and potion quests by stopword-ized text

* chore(package): revert package lock
Will update after merge

* fix(package): Friday brain

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-18 16:38:28 -06:00
Sky Chrastina 1d8e3d45a1 new check asset + css in shop, task, and buy gems (#14340) 2022-11-18 16:29:43 -06:00
Natalie L 116068effa fix(apiDescription): remove incorrect information (#14367) 2022-11-18 16:21:03 -06:00
SabreCat f2aaee15f3 Merge branch 'release' into develop 2022-11-18 15:29:06 -06:00
SabreCat 06a8d2bbd7 4.249.4 2022-11-18 15:12:32 -06:00
SabreCat 15353eba8a fix(subs): roll all the way back, didn't work :( 2022-11-18 15:12:14 -06:00
SabreCat febffb3f07 Revert "Fix double subscriptions, second attempt (#14345)"
This reverts commit 1a5cba57b7.
2022-11-18 14:26:49 -06:00
dependabot[bot] 25c7d52d6a build(deps-dev): bump chai from 4.3.6 to 4.3.7 (#14354)
Bumps [chai](https://github.com/chaijs/chai) from 4.3.6 to 4.3.7.
- [Release notes](https://github.com/chaijs/chai/releases)
- [Changelog](https://github.com/chaijs/chai/blob/4.x.x/History.md)
- [Commits](https://github.com/chaijs/chai/compare/v4.3.6...v4.3.7)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 12:01:23 -05:00
dependabot[bot] 837c1c20a3 build(deps-dev): bump sinon from 14.0.1 to 14.0.2 (#14353)
Bumps [sinon](https://github.com/sinonjs/sinon) from 14.0.1 to 14.0.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/v14.0.1...v14.0.2)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 12:01:06 -05:00
dependabot[bot] 02b11a61bc build(deps): bump dompurify from 2.4.0 to 2.4.1 in /website/client (#14352)
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.4.0 to 2.4.1.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.4.0...2.4.1)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 12:00:51 -05:00
dependabot[bot] a0e28f7db4 build(deps): bump superagent from 8.0.2 to 8.0.3 (#14351)
Bumps [superagent](https://github.com/visionmedia/superagent) from 8.0.2 to 8.0.3.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v8.0.2...v8.0.3)

---
updated-dependencies:
- dependency-name: superagent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 12:00:34 -05:00
SabreCat fdfa2d6df4 Merge branch 'release' into develop 2022-11-15 19:29:37 -06:00
SabreCat 4fd2011be5 4.249.3 2022-11-15 19:29:18 -06:00
SabreCat 259131ee3f feat(transactions): UI updates
by @negue
2022-11-15 19:28:36 -06:00
Sabe Jones 1a5cba57b7 Fix double subscriptions, second attempt (#14345)
* fix(subscriptions): reject subs that come in too fast

* fix(lint): remove unused import

* fix(groups): individual subs may come rapidly

* fix(subscriptions): bad paren, handle rapid testing

* fix(test): reset dateUpdated between subs

* fix(test): one more block for dateUpdated

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-15 19:19:37 -06:00
SabreCat 5e05190f22 fix(event): start at 8AM not 8PM 2022-11-15 16:05:06 -06:00
SabreCat 81540ef399 fix(events): EST now not EDT 2022-11-14 14:38:58 -06:00
SabreCat 2bbff36cc8 4.249.2 2022-11-14 14:13:13 -06:00
SabreCat 9f52e47011 feat(content): November Quests and Hatching Potions
by @CuriousMagpie
2022-11-14 14:13:08 -06:00
Alys 4dca69f14b change the bannedWordUsed text as discussed with beffymaroo 2022-11-12 18:43:28 +10:00
dependabot[bot] 1378b1e1ad build(deps): bump @babel/preset-env from 7.19.1 to 7.20.2 (#14330)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.19.1 to 7.20.2.
- [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.20.2/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>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-10 10:25:23 -05:00
dependabot[bot] 734a611a5c build(deps-dev): bump chalk from 5.1.0 to 5.1.2 (#14292)
Bumps [chalk](https://github.com/chalk/chalk) from 5.1.0 to 5.1.2.
- [Release notes](https://github.com/chalk/chalk/releases)
- [Commits](https://github.com/chalk/chalk/compare/v5.1.0...v5.1.2)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-10 10:24:27 -05:00
SabreCat dbd485cb96 4.249.1 2022-11-09 16:11:49 -06:00
CuriousMagpie 4c62a48f5d chore(typo): who knew, that Y was actually important... 2022-11-09 16:11:45 -06:00
SabreCat 11496f3e0c Merge branch 'release' into develop 2022-11-09 15:33:32 -06:00
dependabot[bot] 9a3e3aaf42 build(deps): bump superagent from 8.0.2 to 8.0.3 (#14320)
Bumps [superagent](https://github.com/visionmedia/superagent) from 8.0.2 to 8.0.3.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v8.0.2...v8.0.3)

---
updated-dependencies:
- dependency-name: superagent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-09 14:16:10 -05:00
dependabot[bot] d9250fd780 build(deps): bump stripe from 10.13.0 to 10.16.0 (#14332)
Bumps [stripe](https://github.com/stripe/stripe-node) from 10.13.0 to 10.16.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/v10.13.0...v10.16.0)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:27:13 -05:00
dependabot[bot] 70a5124815 build(deps): bump passport from 0.5.0 to 0.6.0 (#14341)
Bumps [passport](https://github.com/jaredhanson/passport) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/jaredhanson/passport/releases)
- [Changelog](https://github.com/jaredhanson/passport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jaredhanson/passport/compare/v0.5.0...v0.6.0)

---
updated-dependencies:
- dependency-name: passport
  dependency-type: direct:production
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:26:14 -05:00
dependabot[bot] 532fa2816b build(deps): bump @babel/core from 7.19.6 to 7.20.2 (#14335)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.19.6 to 7.20.2.
- [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.20.2/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>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:25:53 -05:00
dependabot[bot] d22f191f83 build(deps-dev): bump chai from 4.3.6 to 4.3.7 (#14342)
Bumps [chai](https://github.com/chaijs/chai) from 4.3.6 to 4.3.7.
- [Release notes](https://github.com/chaijs/chai/releases)
- [Changelog](https://github.com/chaijs/chai/blob/4.x.x/History.md)
- [Commits](https://github.com/chaijs/chai/compare/v4.3.6...v4.3.7)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:25:20 -05:00
dependabot[bot] 2b49a800a5 build(deps-dev): bump sinon from 14.0.1 to 14.0.2 (#14343)
Bumps [sinon](https://github.com/sinonjs/sinon) from 14.0.1 to 14.0.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/v14.0.1...v14.0.2)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-08 16:24:53 -05:00
SabreCat 0db927c726 4.249.0 2022-11-08 10:18:10 -06:00
SabreCat 6ee06f76e4 chore(i18n): update locale files
Also includes two fixes: empty Hourglass transaction logging and missing Recovery + Support guild category
2022-11-08 10:17:40 -06:00
SabreCat 978e8c4320 Merge branch 'release' into develop 2022-11-08 10:08:02 -06:00
Sabe Jones 5c7d537c61 Armoire and Backgrounds 2022/11 (#14329)
* chore(content): Add November Backgrounds and Enchanted Armoire Items

* fix(strings): typos and fullstops

* fix(style): de-whitespace

Co-authored-by: CuriousMagpie <eilatan@gmail.com>
2022-11-08 10:03:25 -06:00
Natalie L 0e6ece95a4 chore(fix): restore missing string (#14338)
* 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

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-08 09:59:40 -06:00
Weblate b08ed8b0fb Translated using Weblate (Spanish)
Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (German)

Currently translated at 97.0% (392 of 404 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.4% (2363 of 2701 strings)

Translated using Weblate (German)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (German)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 97.3% (735 of 755 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 90.9% (190 of 209 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 96.1% (126 of 131 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 88.1% (356 of 404 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 91.9% (2483 of 2701 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 95.0% (172 of 181 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (404 of 404 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 96.5% (390 of 404 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (143 of 143 strings)

Translated using Weblate (German)

Currently translated at 98.6% (141 of 143 strings)

Translated using Weblate (German)

Currently translated at 97.0% (391 of 403 strings)

Translated using Weblate (German)

Currently translated at 97.0% (391 of 403 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Dutch)

Currently translated at 88.1% (2381 of 2701 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Dutch)

Currently translated at 96.9% (710 of 732 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Spanish)

Currently translated at 95.5% (2581 of 2701 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.4% (728 of 732 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (German)

Currently translated at 99.1% (726 of 732 strings)

Translated using Weblate (German)

Currently translated at 100.0% (131 of 131 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Dante S <dantepicachu11@gmail.com>
Co-authored-by: Hexe des Windes (she/her) <krausanna1@gmail.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Jonathan Garcia <jonathangarcia0@duck.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Natalie Luhrs <eilatan@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Rhoslyn Ross <sofrdlf@vivaldi.net>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: UNI <nibi727171@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Wolf Forst <wiesenkatz@proton.me>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ja/
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/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/de/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/it/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/
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/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
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/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Groups
Translation: Habitica/Npc
Translation: Habitica/Questscontent
Translation: Habitica/Subscriber
2022-11-08 16:57:17 +01:00
SabreCat fafaa29d72 4.248.4 2022-11-04 16:10:31 -05:00
SabreCat 3a088de7e8 fix(package): roll back to Passport 0.5 2022-11-04 16:10:22 -05:00
SabreCat 835da85119 4.248.3 2022-11-02 15:18:19 -05:00
SabreCat f6e5360bdd Merge branch 'release' into develop 2022-11-02 14:54:09 -05:00
SabreCat eee8ad2029 fix(css): correct broken task creation dropdown on groups 2022-11-02 14:19:43 -05:00
SabreCat c7e73f9b85 4.248.2 2022-11-02 09:04:03 -05:00
SabreCat 9b1a726875 Revert "feat(subs): allow upgrade/downgrade on iOS"
This reverts commit 27440772f0.
2022-11-02 09:00:29 -05:00
SabreCat accf7e2897 4.248.1 2022-11-01 21:10:41 -05:00
Phillip Thelen 9e98e56e9b Allow sub upgrades/downgrades on iOS (#14303)
* Allow sub upgrades/downgrades on iOS

* fix check

* fix(lint): line length

* fix(typo): customER

* fix tests

* Implement correct handling for when subs are up/downgraded

* fix lint errors

* fix test

Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-11-01 21:07:23 -05:00
SabreCat 6c85b1e047 chore(faq): update note on mobile Group Plans 2022-11-01 20:59:32 -05:00
SabreCat 7c553e535c feat(gifting): restore ability to send gift messages
by @CuriousMagpie
2022-11-01 20:56:21 -05:00
Natalie L c16207c9ba Add Gift Messaging to Success Modal (#14270)
* initial commit: based on group-tracking-modal branch

* chore: merge group-tracking-modal

* update: create functions for each success condition

* chore: merge develop

* chore: work on successModal.vue & remove redundant code on groupPlan.vue

* update: remove `giftSubscriptionText4` from footer

* fix: correct groupPlan.vue file

* update: add messaging placeholder, clean up logic in a few places, update/add strings

* update: rearrange modal in order of display & test existence of 'gift-subscription' paymentType

* update: added props for receiverName so 'gift-subscription' works

* update: add close.svg & function
style: refactor CSS

* update: work on gift messaging

* update: work on gift messaging

* update: work on gift messaging

* update: let's make messages GO

* update: messages are a GO, we have LIFT OFF!

* fix: remove console log (oops)

Co-authored-by: SabreCat <sabe@habitica.com>
2022-11-01 20:55:40 -05:00
SabreCat 27440772f0 feat(subs): allow upgrade/downgrade on iOS
by @phillipthelen
2022-11-01 20:53:04 -05:00
SabreCat aea0be3245 fix(subs): establish lock to prevent race condition 2022-11-01 20:47:21 -05:00
SabreCat a2d5211b00 4.248.0 2022-10-31 14:28:24 -05:00
Weblate 53fb28cc48 Merge branch 'origin/develop' into Weblate. 2022-10-31 20:27:10 +01:00
SabreCat 1c0710b45b Merge branch 'release' into develop 2022-10-31 14:25:19 -05:00
Natalie L 3bc82a6692 chore(content): add Bone to Pick achievement (#14318)
* chore(content): add Bone to Pick achievement

* chore(content): update spritesmith-main.css

* chore(content): add more bone picking

* chore(content): more bone picking

* chore(content): bone picking

* chore(content): i gotta bone to pick here

* chore(content): final bone picking

* chore: add migration script

* chore: update habitica-images

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-31 14:19:56 -05:00
Weblate 2add227b97 Translated using Weblate (Russian)
Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2698 of 2701 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (732 of 732 strings)

Translated using Weblate (German)

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (209 of 209 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2701 of 2701 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2696 of 2701 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (732 of 732 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
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/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
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/subscriber/de/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
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/zh_Hans/
Translation: Habitica/Backgrounds
Translation: Habitica/Gear
Translation: Habitica/Subscriber
2022-10-31 17:53:38 +01:00
CuriousMagpie 4cc1f902c8 Merge remote-tracking branch 'upstream/develop' into develop 2022-10-31 10:47:24 -04:00
CuriousMagpie 1b52529822 chore(ladder update): 2022 Habitoween Ladder 2022-10-31 10:46:51 -04:00
SabreCat e39a5a0628 fix(strings): set token typo 2022-10-30 20:15:37 -05:00
SabreCat 575aea2605 4.247.0 2022-10-30 19:56:10 -05:00
Weblate 222ba544d7 Merge branch 'origin/develop' into Weblate. 2022-10-31 01:55:41 +01:00
SabreCat 2372efa22e Merge branch 'release' into develop 2022-10-30 19:54:18 -05:00
Natalie L b5c950ac96 chore(content): add November 2022 Mystery Items (#14317)
* chore(content): add November Mystery Items

* chore: merge release into 2022-11-mystery-items

* Revert "chore: merge release into 2022-11-mystery-items"

This reverts commit e12b61d73f.

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-30 19:52:55 -05:00
Weblate 18ec3eb355 Translated using Weblate (Spanish)
Currently translated at 95.7% (2581 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.1% (2350 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2581 of 2695 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.0% (2347 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2580 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2580 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 87.0% (2345 of 2695 strings)

Translated using Weblate (Ukrainian)

Currently translated at 24.0% (647 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Ukrainian)

Currently translated at 23.4% (632 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.9% (2343 of 2695 strings)

Translated using Weblate (German)

Currently translated at 95.5% (385 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.8% (2341 of 2695 strings)

Translated using Weblate (German)

Currently translated at 94.7% (382 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.7% (2339 of 2695 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Polish)

Currently translated at 74.1% (43 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (47 of 47 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.7% (2337 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.5% (401 of 403 strings)

Translated using Weblate (Ukrainian)

Currently translated at 22.9% (619 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2692 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.6% (2335 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.6% (2334 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2580 of 2695 strings)

Translated using Weblate (German)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Spanish)

Currently translated at 99.5% (233 of 234 strings)

Translated using Weblate (Spanish)

Currently translated at 95.7% (2580 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.5% (2332 of 2695 strings)

Translated using Weblate (German)

Currently translated at 91.5% (369 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.1% (2322 of 2695 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (German)

Currently translated at 99.1% (232 of 234 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: IvorTheBoneless <bohdanfiloenko657@gmail.com>
Co-authored-by: Lena Kubisa <lenorek.05.poczta@gmail.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sara López <sarayupy@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: UNI <nibi727171@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
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/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/de/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/es/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/es/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/es/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
Translation: Habitica/Contrib
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
2022-10-28 18:35:58 +02:00
dependabot[bot] 62b4315b3d build(deps): bump apidoc from 0.53.0 to 0.53.1 (#14307)
Bumps [apidoc](https://github.com/apidoc/apidoc) from 0.53.0 to 0.53.1.
- [Release notes](https://github.com/apidoc/apidoc/releases)
- [Changelog](https://github.com/apidoc/apidoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/apidoc/apidoc/compare/0.53.0...0.53.1)

---
updated-dependencies:
- dependency-name: apidoc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:24:26 -04:00
dependabot[bot] 56805e6c90 build(deps): bump rate-limiter-flexible from 2.3.11 to 2.4.0 (#14309)
Bumps [rate-limiter-flexible](https://github.com/animir/node-rate-limiter-flexible) from 2.3.11 to 2.4.0.
- [Release notes](https://github.com/animir/node-rate-limiter-flexible/releases)
- [Commits](https://github.com/animir/node-rate-limiter-flexible/compare/v2.3.11...v2.4.0)

---
updated-dependencies:
- dependency-name: rate-limiter-flexible
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:23:56 -04:00
dependabot[bot] 0c6070dd9a build(deps): bump short-uuid from 4.2.0 to 4.2.2 (#14311)
Bumps [short-uuid](https://github.com/oculus42/short-uuid) from 4.2.0 to 4.2.2.
- [Release notes](https://github.com/oculus42/short-uuid/releases)
- [Changelog](https://github.com/oculus42/short-uuid/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/oculus42/short-uuid/commits)

---
updated-dependencies:
- dependency-name: short-uuid
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:23:30 -04:00
dependabot[bot] 19c26c01e3 build(deps): bump @babel/core from 7.19.3 to 7.19.6 (#14312)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.19.3 to 7.19.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.19.6/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>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:23:09 -04:00
dependabot[bot] 0f3bc980d9 build(deps): bump smartbanner.js in /website/client (#14313)
Bumps [smartbanner.js](https://github.com/ain/smartbanner.js) from 1.19.0 to 1.19.1.
- [Release notes](https://github.com/ain/smartbanner.js/releases)
- [Commits](https://github.com/ain/smartbanner.js/compare/v1.19.0...v1.19.1)

---
updated-dependencies:
- dependency-name: smartbanner.js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:22:40 -04:00
dependabot[bot] 7f87120d34 build(deps): bump core-js from 3.25.5 to 3.26.0 in /website/client (#14314)
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.25.5 to 3.26.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.26.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>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 11:22:19 -04:00
negue f7a03d2eb5 improve transactions logs + split createSubscription (#14289)
* improve transactions logs + split createSubscription
2022-10-27 08:39:06 +02:00
Sabe Jones 90250d1a25 Establish lock to avoid race scenario in subscriptions (#14267)
* fix(subscription): establish lock to avoid race scenario

* fix(lint): import syntax

* fix(lint): whitespace, dependency cycle

* fix(subs): skip locking on gifts and groups

* fix(subs): correctly reset _subSignature

* fix(sub): use findOneAndUpdate for unlock

* fix(test): save newly created user for some reason

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-25 16:44:33 -05:00
Gabriel Araujo 22a0c72f6e Update docker-compose.dev.yml to prevent error message on first build (#14178)
* Remove deprecated version element from top-level

* Remove unncessary image for client and server services

Co-authored-by: Gabriel Araujo <gabriel.goncalves@solarisbank.de>
2022-10-12 15:53:05 -05:00
Anton de Regt a4326498d1 Group category update issue (#14186)
* Overwrite arrays instead of merging

* Test removing a category

* Fix previous duplicated categories on group edit
2022-10-12 15:51:56 -05:00
Alex 8f26a22bd4 Update test.yml (#14187) 2022-10-12 15:47:46 -05:00
Antonio Sansotta 0b2cf5bceb Fixes issue #14175 - Consolidate Challenge category options list to common file (#14201)
* Issue #14175 - Created a categoryOptions.js file in website/common/script/content to store list of category Options. Imported and added the list to website/client/src/components : challenges/challengeModal, challenges/sidebar, groups/groupFormModal, and groups/groupSidebar. This replaced the statically typed lists that previously existed. Tested the challengeModal and sidebar but unable to test the groups files due to credit card requirements. -@Tundrian

* Issue #14175 - Created a categoryOptions.js file in website/common/script/content to store list of category Options. Imported and added the list to website/client/src/components : challenges/challengeModal, challenges/sidebar, groups/groupFormModal, and groups/groupSidebar. This replaced the statically typed lists that previously existed. Tested the challengeModal and sidebar but unable to test the groups files due to credit card requirements. -@Tundrian

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-12 15:46:36 -05:00
Sky Chrastina f43a0d8289 Add checkmark to completed quests in shop (#14269)
* add 'completed' property to quest items

* show checkmark on completed quests in the shop

* add 'completed' property to quest items

* show checkmark on completed quests in the shop
2022-10-12 15:44:22 -05:00
dependabot[bot] 39be8db4f9 build(deps): bump axios from 0.25.0 to 0.27.2 in /website/client (#14007)
Bumps [axios](https://github.com/axios/axios) from 0.25.0 to 0.27.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.25.0...v0.27.2)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 17:34:16 -05:00
SabreCat f0a1f11a16 Merge branch 'release' into develop 2022-10-11 17:32:25 -05:00
dependabot[bot] 84c4b3536c build(deps): bump minimist, minimist and mkdirp in /website/client (#14286)
Bumps [minimist](https://github.com/minimistjs/minimist), [minimist](https://github.com/minimistjs/minimist) and [mkdirp](https://github.com/isaacs/node-mkdirp). These dependencies needed to be updated together.

Updates `minimist` from 1.2.5 to 1.2.7
- [Release notes](https://github.com/minimistjs/minimist/releases)
- [Changelog](https://github.com/minimistjs/minimist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.7)

Updates `minimist` from 1.2.0 to 1.2.7
- [Release notes](https://github.com/minimistjs/minimist/releases)
- [Changelog](https://github.com/minimistjs/minimist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.7)

Updates `mkdirp` from 0.5.1 to 0.5.6
- [Release notes](https://github.com/isaacs/node-mkdirp/releases)
- [Changelog](https://github.com/isaacs/node-mkdirp/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-mkdirp/compare/0.5.1...v0.5.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
- dependency-name: minimist
  dependency-type: indirect
- dependency-name: mkdirp
  dependency-type: indirect
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:53:10 -05:00
dependabot[bot] cf834f57d7 build(deps): bump ansi-html and webpack-dev-server in /website/client (#14285)
Removes [ansi-html](https://github.com/Tjatse/ansi-html). It's no longer used after updating ancestor dependency [webpack-dev-server](https://github.com/webpack/webpack-dev-server). These dependencies need to be updated together.


Removes `ansi-html`

Updates `webpack-dev-server` from 3.11.2 to 3.11.3
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/v3.11.3/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.11.2...v3.11.3)

---
updated-dependencies:
- dependency-name: ansi-html
  dependency-type: indirect
- dependency-name: webpack-dev-server
  dependency-type: indirect
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:40:45 -05:00
dependabot[bot] 97be341ff6 build(deps): bump jwks-rsa from 2.1.4 to 2.1.5 (#14284)
Bumps [jwks-rsa](https://github.com/auth0/node-jwks-rsa) from 2.1.4 to 2.1.5.
- [Release notes](https://github.com/auth0/node-jwks-rsa/releases)
- [Changelog](https://github.com/auth0/node-jwks-rsa/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/node-jwks-rsa/compare/v2.1.4...v2.1.5)

---
updated-dependencies:
- dependency-name: jwks-rsa
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:40:30 -05:00
dependabot[bot] 15c68abafa build(deps): bump stripe from 8.222.0 to 10.13.0 (#14273)
Bumps [stripe](https://github.com/stripe/stripe-node) from 8.222.0 to 10.13.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/v8.222.0...v10.13.0)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:24:55 -05:00
dependabot[bot] 21a1b9449b build(deps): bump body-parser from 1.20.0 to 1.20.1 (#14271)
Bumps [body-parser](https://github.com/expressjs/body-parser) from 1.20.0 to 1.20.1.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.0...1.20.1)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 15:22:57 -05:00
dependabot[bot] 0ec7784fb1 build(deps): bump @vue/cli-plugin-router in /website/client (#14121)
Bumps [@vue/cli-plugin-router](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-router) from 4.5.15 to 5.0.8.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v5.0.8/packages/@vue/cli-plugin-router)

---
updated-dependencies:
- dependency-name: "@vue/cli-plugin-router"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:59:32 -05:00
dependabot[bot] 9ddd0f29d0 build(deps): bump passport from 0.5.0 to 0.6.0 (#14043)
Bumps [passport](https://github.com/jaredhanson/passport) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/jaredhanson/passport/releases)
- [Changelog](https://github.com/jaredhanson/passport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jaredhanson/passport/compare/v0.5.0...v0.6.0)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:57:26 -05:00
dependabot[bot] 37791dfe8d build(deps): bump intro.js from 5.1.0 to 6.0.0 in /website/client (#14122)
Bumps [intro.js](https://github.com/usablica/intro.js) from 5.1.0 to 6.0.0.
- [Release notes](https://github.com/usablica/intro.js/releases)
- [Commits](https://github.com/usablica/intro.js/compare/v5.1.0...v6.0.0)

---
updated-dependencies:
- dependency-name: intro.js
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:56:22 -05:00
dependabot[bot] 0322b657b8 build(deps): bump winston from 3.8.1 to 3.8.2 (#14221)
Bumps [winston](https://github.com/winstonjs/winston) from 3.8.1 to 3.8.2.
- [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.1...v3.8.2)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:55:34 -05:00
dependabot[bot] cc39f6e4e9 build(deps): bump vue-router from 3.5.4 to 3.6.5 in /website/client (#14228)
Bumps [vue-router](https://github.com/vuejs/router) from 3.5.4 to 3.6.5.
- [Release notes](https://github.com/vuejs/router/releases)
- [Commits](https://github.com/vuejs/router/commits)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:55:11 -05:00
dependabot[bot] 452b516c67 build(deps): bump amplitude-js from 8.21.0 to 8.21.1 in /website/client (#14248)
Bumps [amplitude-js](https://github.com/amplitude/amplitude-javascript) from 8.21.0 to 8.21.1.
- [Release notes](https://github.com/amplitude/amplitude-javascript/releases)
- [Changelog](https://github.com/amplitude/Amplitude-JavaScript/blob/main/CHANGELOG.md)
- [Commits](https://github.com/amplitude/amplitude-javascript/compare/v8.21.0...v8.21.1)

---
updated-dependencies:
- dependency-name: amplitude-js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:53:17 -05:00
dependabot[bot] 235eae32b0 build(deps): bump rate-limiter-flexible from 2.3.10 to 2.3.11 (#14249)
Bumps [rate-limiter-flexible](https://github.com/animir/node-rate-limiter-flexible) from 2.3.10 to 2.3.11.
- [Release notes](https://github.com/animir/node-rate-limiter-flexible/releases)
- [Commits](https://github.com/animir/node-rate-limiter-flexible/commits)

---
updated-dependencies:
- dependency-name: rate-limiter-flexible
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:52:59 -05:00
dependabot[bot] de9f1be7b9 build(deps): bump js2xmlparser from 4.0.2 to 5.0.0 (#14251)
Bumps [js2xmlparser](https://github.com/michaelkourlas/node-js2xmlparser) from 4.0.2 to 5.0.0.
- [Release notes](https://github.com/michaelkourlas/node-js2xmlparser/releases)
- [Changelog](https://github.com/michaelkourlas/node-js2xmlparser/blob/master/CHANGES.md)
- [Commits](https://github.com/michaelkourlas/node-js2xmlparser/compare/v4.0.2...v5.0.0)

---
updated-dependencies:
- dependency-name: js2xmlparser
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:51:58 -05:00
dependabot[bot] e75610447f build(deps): bump @hapi/hoek from 8.3.1 to 8.5.1 in /website/client (#14255)
Bumps [@hapi/hoek](https://github.com/hapijs/hoek) from 8.3.1 to 8.5.1.
- [Release notes](https://github.com/hapijs/hoek/releases)
- [Commits](https://github.com/hapijs/hoek/compare/v8.3.1...v8.5.1)

---
updated-dependencies:
- dependency-name: "@hapi/hoek"
  dependency-type: indirect
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:51:37 -05:00
dependabot[bot] bd4c65cd3e build(deps): bump @babel/core from 7.18.13 to 7.19.3 (#14256)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.13 to 7.19.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.19.3/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>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:50:39 -05:00
dependabot[bot] baf60dc951 build(deps): bump @google-cloud/trace-agent from 5.1.6 to 7.1.2 (#14259)
Bumps [@google-cloud/trace-agent](https://github.com/googleapis/cloud-trace-nodejs) from 5.1.6 to 7.1.2.
- [Release notes](https://github.com/googleapis/cloud-trace-nodejs/releases)
- [Changelog](https://github.com/googleapis/cloud-trace-nodejs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/googleapis/cloud-trace-nodejs/compare/v5.1.6...v7.1.2)

---
updated-dependencies:
- dependency-name: "@google-cloud/trace-agent"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:50:14 -05:00
dependabot[bot] 70e88d601c build(deps): bump superagent from 7.1.6 to 8.0.2 (#14272)
Bumps [superagent](https://github.com/visionmedia/superagent) from 7.1.6 to 8.0.2.
- [Release notes](https://github.com/visionmedia/superagent/releases)
- [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md)
- [Commits](https://github.com/visionmedia/superagent/compare/v7.1.6...v8.0.2)

---
updated-dependencies:
- dependency-name: superagent
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:46:33 -05:00
dependabot[bot] 104ec60adb build(deps): bump bcrypt from 5.0.1 to 5.1.0 (#14274)
Bumps [bcrypt](https://github.com/kelektiv/node.bcrypt.js) from 5.0.1 to 5.1.0.
- [Release notes](https://github.com/kelektiv/node.bcrypt.js/releases)
- [Changelog](https://github.com/kelektiv/node.bcrypt.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kelektiv/node.bcrypt.js/compare/v5.0.1...v5.1.0)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:46:15 -05:00
dependabot[bot] e97454e0e7 build(deps): bump async from 2.6.3 to 3.2.3 (#14275)
Bumps [async](https://github.com/caolan/async) from 2.6.3 to 3.2.3.
- [Release notes](https://github.com/caolan/async/releases)
- [Changelog](https://github.com/caolan/async/blob/master/CHANGELOG.md)
- [Commits](https://github.com/caolan/async/compare/v2.6.3...v3.2.3)

---
updated-dependencies:
- dependency-name: async
  dependency-type: indirect
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:45:14 -05:00
dependabot[bot] 144baa98b1 build(deps-dev): bump sinon from 13.0.2 to 14.0.1 (#14276)
Bumps [sinon](https://github.com/sinonjs/sinon) from 13.0.2 to 14.0.1.
- [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/v13.0.2...v14.0.1)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:44:22 -05:00
dependabot[bot] 02e33853b1 build(deps-dev): bump chalk from 4.1.2 to 5.1.0 (#14277)
Bumps [chalk](https://github.com/chalk/chalk) from 4.1.2 to 5.1.0.
- [Release notes](https://github.com/chalk/chalk/releases)
- [Commits](https://github.com/chalk/chalk/compare/v4.1.2...v5.1.0)

---
updated-dependencies:
- dependency-name: chalk
  dependency-type: direct:development
  update-type: version-update:semver-major
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:43:40 -05:00
dependabot[bot] 8c0d41d084 build(deps): bump express from 4.18.1 to 4.18.2 (#14280)
Bumps [express](https://github.com/expressjs/express) from 4.18.1 to 4.18.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.1...4.18.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:42:41 -05:00
dependabot[bot] 9d4f70371d build(deps): bump core-js from 3.24.1 to 3.25.5 in /website/client (#14282)
Bumps [core-js](https://github.com/zloirock/core-js) from 3.24.1 to 3.25.5.
- [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/compare/v3.24.1...v3.25.5)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 14:42:22 -05:00
SabreCat 57a090eea1 4.246.0 2022-10-11 11:59:08 -05:00
SabreCat 18534a21ff Merge branch 'develop' into release 2022-10-11 11:59:02 -05:00
Weblate ed0a36a287 Merge branch 'origin/develop' into Weblate. 2022-10-11 18:58:07 +02:00
Weblate e50f240366 Translated using Weblate (Polish)
Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 86.0% (2319 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.5% (215 of 216 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Spanish)

Currently translated at 95.0% (2562 of 2695 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Polish)

Currently translated at 94.6% (686 of 725 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (German)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (47 of 47 strings)

Translated using Weblate (Spanish)

Currently translated at 95.0% (2562 of 2695 strings)

Translated using Weblate (French)

Currently translated at 97.2% (392 of 403 strings)

Translated using Weblate (German)

Currently translated at 91.3% (368 of 403 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (German)

Currently translated at 98.2% (57 of 58 strings)

Translated using Weblate (German)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Arabic)

Currently translated at 90.3% (338 of 374 strings)

Translated using Weblate (Japanese)

Currently translated at 99.2% (130 of 131 strings)

Translated using Weblate (Japanese)

Currently translated at 99.5% (233 of 234 strings)

Translated using Weblate (Japanese)

Currently translated at 96.5% (389 of 403 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (French)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (German)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Ukrainian)

Currently translated at 99.2% (130 of 131 strings)

Translated using Weblate (French)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (German)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (French)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Polish)

Currently translated at 83.5% (606 of 725 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (French)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Russian)

Currently translated at 99.5% (215 of 216 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 92.3% (192 of 208 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 96.9% (127 of 131 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 89.7% (210 of 234 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 94.0% (379 of 403 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 95.0% (172 of 181 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Japanese)

Currently translated at 99.1% (232 of 234 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Polish)

Currently translated at 80.4% (583 of 725 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (56 of 56 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Japanese)

Currently translated at 99.1% (232 of 234 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (234 of 234 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (403 of 403 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2692 of 2695 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (German)

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Polish)

Currently translated at 78.8% (572 of 725 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (German)

Currently translated at 99.9% (2694 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.9% (2694 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2692 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2692 of 2695 strings)

Translated using Weblate (German)

Currently translated at 99.8% (2691 of 2695 strings)

Translated using Weblate (Arabic)

Currently translated at 89.8% (336 of 374 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2695 of 2695 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Benoit Hetru <me+hbtc@gahanka.net>
Co-authored-by: Céu <marcel.ufscar@gmail.com>
Co-authored-by: Faris Allahham <farislahham@gmail.com>
Co-authored-by: Hexe des Windes (she/her) <krausanna1@gmail.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Lena Kubisa <lenorek.05.poczta@gmail.com>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: RedBug312 <redbug312@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: UNI <nibi727171@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: mattya 226 <worldworld1114@gmail.com>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/character/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/de/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
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/gear/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/it/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/it/
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/limited/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/de/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/it/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/spells/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/
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/subscriber/zh_Hant/
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/Groups
Translation: Habitica/Limited
Translation: Habitica/Npc
Translation: Habitica/Questscontent
Translation: Habitica/Settings
Translation: Habitica/Spells
Translation: Habitica/Subscriber
2022-10-11 18:57:30 +02:00
Natalie L 4d1bbdd8d0 chore(content): add October Backgrounds and Enchanted Armoire Items (#14266)
* chore(content): add October Backgrounds and Enchanted Armoire Items

* fix(typo): fix a couple of descriptions

* chore(subproject): update images

* fix(typo): keepin our caps consistent

* fix(typo): whitespace, caps

Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
2022-10-11 11:54:24 -05:00
Natalie L d1928c9181 chore(content): add October Pet Quest Bundle (#14268)
* chore(content): add October Pet Quest Bundle

* update: change event start date to the correct one
2022-10-11 11:53:46 -05:00
Adam Tommasi 137f7d53dc add qty param for gem/gem-purchasable item apidoc (#14219)
* add qty param for gem/gem-purchasable item

* fix(lint): remove extra whitespace

Co-authored-by: SabreCat <sabe@habitica.com>
2022-10-07 16:33:38 -05:00
Natalie L 3f9d55254e fix(style): update to scoped colors & set footer background image to pointer-events:none (#14265)
* first pass

* second pass

* third pass

* fourth pass, not a lot of progress

* fifth pass, slowly gettin there

* breakpoint nonsense

* flexbox and breakpoint nonsense

* svg updates, css updates

* whitespace

* chore: merge upstream/develop

* style(breakpoints): added responsive breakpoints, social column alignment tweaks

* style(breakpoints): add xs-specific selectors and classes

* style: mobile footer

* style: mobile footer

* style: static landing page footer

* style: small tweaks to social layout

* fix(translations): update website/common/locales/de/gear.json to develop

* update(style): small updates

* update(style): cleaning up code

* update(style): cleaning up code

* update(style): mobile footer updates

* update(style): complete mobile footer & clean up code

* update(style): add tablet breakpoint and remove rogue terms link

* fix(style): update to scoped colors & set footer background image to pointer-events:none

* fix(style): removed redundant logo class definition
2022-10-07 16:10:29 -05:00
SabreCat b60a76d7dd chore(subproject): update images 2022-10-07 15:48:38 -05:00
SabreCat a5575b3593 4.245.2 2022-10-06 15:53:25 -05:00
SabreCat ace964f2b3 fix(subs): escape group demographics without group 2022-10-06 15:53:19 -05:00
SabreCat 12b045093a 4.245.1 2022-09-30 15:25:31 -05:00
SabreCat 8cd9536bdc Merge branch 'develop' into release 2022-09-30 15:25:27 -05:00
Weblate 08f0374b46 Translated using Weblate (Arabic)
Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (54 of 54 strings)

Translated using Weblate (Arabic)

Currently translated at 89.3% (334 of 374 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (208 of 208 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2695 of 2695 strings)

Translated using Weblate (Spanish)

Currently translated at 95.0% (2562 of 2695 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (389 of 389 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Spanish)

Currently translated at 99.0% (205 of 207 strings)

Translated using Weblate (Spanish)

Currently translated at 96.8% (125 of 129 strings)

Translated using Weblate (Spanish)

Currently translated at 99.1% (230 of 232 strings)

Translated using Weblate (Spanish)

Currently translated at 95.1% (370 of 389 strings)

Translated using Weblate (German)

Currently translated at 93.5% (364 of 389 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Spanish)

Currently translated at 99.6% (752 of 755 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Spanish)

Currently translated at 99.0% (213 of 215 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Polish)

Currently translated at 71.3% (517 of 725 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 70.4% (511 of 725 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 70.3% (510 of 725 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 69.7% (506 of 725 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 99.2% (139 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Arabic)

Currently translated at 31.4% (57 of 181 strings)

Translated using Weblate (Arabic)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Arabic)

Currently translated at 37.0% (20 of 54 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (389 of 389 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (French)

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (French)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (French)

Currently translated at 99.1% (2669 of 2691 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 94.4% (171 of 181 strings)

Translated using Weblate (Turkish)

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (Swedish)

Currently translated at 91.7% (166 of 181 strings)

Translated using Weblate (Serbian)

Currently translated at 90.6% (164 of 181 strings)

Translated using Weblate (Slovak)

Currently translated at 88.9% (161 of 181 strings)

Translated using Weblate (Romanian)

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (Portuguese)

Currently translated at 91.7% (166 of 181 strings)

Translated using Weblate (Polish)

Currently translated at 94.4% (171 of 181 strings)

Translated using Weblate (Dutch)

Currently translated at 97.2% (176 of 181 strings)

Translated using Weblate (Indonesian)

Currently translated at 88.9% (161 of 181 strings)

Translated using Weblate (Hungarian)

Currently translated at 89.5% (162 of 181 strings)

Translated using Weblate (Hebrew)

Currently translated at 73.4% (133 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Spanish)

Currently translated at 97.2% (176 of 181 strings)

Translated using Weblate (English (United Kingdom))

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (English (Pirate) (en@pirate))

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (Danish)

Currently translated at 94.4% (171 of 181 strings)

Translated using Weblate (Czech)

Currently translated at 92.8% (168 of 181 strings)

Translated using Weblate (Bulgarian)

Currently translated at 91.7% (166 of 181 strings)

Translated using Weblate (French)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (French)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (German)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 92.2% (2482 of 2691 strings)

Translated using Weblate (Spanish (Latin America))

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Ukrainian)

Currently translated at 22.7% (613 of 2691 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 99.2% (2672 of 2691 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (German)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (German)

Currently translated at 93.3% (363 of 389 strings)

Translated using Weblate (Japanese)

Currently translated at 99.0% (2665 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (German)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (German)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (German)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (German)

Currently translated at 93.3% (363 of 389 strings)

Translated using Weblate (German)

Currently translated at 100.0% (140 of 140 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.9% (2689 of 2691 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Benoit Hetru <me+hbtc@gahanka.net>
Co-authored-by: Céu <marcel.ufscar@gmail.com>
Co-authored-by: Faris Allahham <farislahham@gmail.com>
Co-authored-by: Felix Wittwer <spam@felixwittwer.de>
Co-authored-by: Hexe des Windes (she/her) <krausanna1@gmail.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Juan Esteban Marín <juanmarin690@gmail.com>
Co-authored-by: Khsmty <me@taigasaito.org>
Co-authored-by: Lena Kubisa <lenorek.05.poczta@gmail.com>
Co-authored-by: Lio Zam <zerofux@web.de>
Co-authored-by: LiziKnight <liziknight0316@outlook.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Nakonana <nanaki1989@web.de>
Co-authored-by: Natalie Luhrs <eilatan@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Nina Łapaj <ninapaj@gmail.com>
Co-authored-by: Raithe <RaitheOfDureya@gmail.com>
Co-authored-by: Remigiusz Haziak <haziakremigiusz@gmail.com>
Co-authored-by: Salman Mujeeb <kingleopard22@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sara López <sarayupy@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Simon Fischer <simon.pascal.fischer@gmail.com>
Co-authored-by: UNI <nibi727171@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: mattya 226 <worldworld1114@gmail.com>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/de/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pl/
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/es/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/de/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/content/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/front/bg/
Translate-URL: https://translate.habitica.com/projects/habitica/front/cs/
Translate-URL: https://translate.habitica.com/projects/habitica/front/da/
Translate-URL: https://translate.habitica.com/projects/habitica/front/en@pirate/
Translate-URL: https://translate.habitica.com/projects/habitica/front/en_GB/
Translate-URL: https://translate.habitica.com/projects/habitica/front/es/
Translate-URL: https://translate.habitica.com/projects/habitica/front/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/front/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/front/he/
Translate-URL: https://translate.habitica.com/projects/habitica/front/hu/
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/front/nl/
Translate-URL: https://translate.habitica.com/projects/habitica/front/pl/
Translate-URL: https://translate.habitica.com/projects/habitica/front/pt/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ro/
Translate-URL: https://translate.habitica.com/projects/habitica/front/sk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/sr/
Translate-URL: https://translate.habitica.com/projects/habitica/front/sv/
Translate-URL: https://translate.habitica.com/projects/habitica/front/tr/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hant/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es_419/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/es/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/es/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/fr/
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/loginincentives/ar/
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/es/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/de/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/es/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/de/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/es/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/es/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/pl/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Challenge
Translation: Habitica/Communityguidelines
Translation: Habitica/Content
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/Loginincentives
Translation: Habitica/Npc
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Rebirth
Translation: Habitica/Settings
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2022-09-30 22:22:14 +02:00
SabreCat 3582e233be fix(strings): remove duplicate "next" key 2022-09-30 15:09:53 -05:00
SabreCat 3974adcb65 chore(event): set Gem sale dates 2022-09-30 14:57:15 -05:00
SabreCat 57d3fea523 Merge branch 'group-tracking-modal' into release 2022-09-30 14:47:08 -05:00
SabreCat 173d7a178c Merge branch 'sabrecat/next-hourglass' into release 2022-09-30 14:46:27 -05:00
SabreCat 7db093d2bb Merge branch 'sabrecat/panel-subscription' into release 2022-09-30 14:46:10 -05:00
SabreCat 06d2ffb37d Merge branch 'sabrecat/gems-multi-event' into release 2022-09-30 14:45:36 -05:00
SabreCat 40997854dd fix(test): restore event list function 2022-09-30 14:32:21 -05:00
SabreCat 4c4d0be31f fix(analytics): include client tracking parameter 2022-09-29 15:07:21 -05:00
SabreCat b8cf1b895f 4.245.0 2022-09-28 15:34:17 -05:00
Natalie L a08ecbe044 chore(content): add October 2022 Mystery Items (#14254) 2022-09-28 15:04:47 -05:00
Natalie L f3771f4869 chore(content): add October 2022 Mystery Items (#14254) 2022-09-28 15:03:56 -05:00
SabreCat e0eed8238e fix(test): stub full event list 2022-09-23 16:42:15 -05:00
SabreCat 6baf08d461 fix(test): update expectations for new logic 2022-09-23 16:10:11 -05:00
SabreCat 535fddf92d feat(sale): add fine print 2022-09-21 16:28:15 -05:00
SabreCat ef97f301d9 Merge branch 'release' into sabrecat/gems-multi-event 2022-09-21 16:04:10 -05:00
SabreCat eea79ce1b6 Merge branch 'develop' into sabrecat/gems-multi-event 2022-09-21 16:03:57 -05:00
Weblate 191fee524c Merge branch 'origin/develop' into Weblate. 2022-09-21 22:23:36 +02:00
SabreCat 098f53bfa9 4.244.1 2022-09-21 15:02:39 -05:00
negue e9ee2d3fdd Transaction username mongodb mutation (#14231)
* migrate newest usernames in transactions

* fix lint

* change the parameters
2022-09-21 14:42:39 -05:00
SabreCat 4c988691cf fix(groups): show group task summary modal for site admins
also change "Watcher" to "Peeker" in fall healer gear
2022-09-21 14:39:46 -05:00
Weblate 3c8be16135 Translated using Weblate (Russian)
Currently translated at 99.8% (2686 of 2691 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 96.6% (175 of 181 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 99.5% (2680 of 2691 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (186 of 186 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Russian)

Currently translated at 99.7% (2685 of 2691 strings)

Translated using Weblate (Spanish)

Currently translated at 95.2% (2562 of 2691 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (232 of 232 strings)

Translated using Weblate (Russian)

Currently translated at 99.1% (2667 of 2691 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2691 of 2691 strings)

Translated using Weblate (Filipino)

Currently translated at 92.2% (167 of 181 strings)

Translated using Weblate (Filipino)

Currently translated at 94.5% (122 of 129 strings)

Translated using Weblate (Filipino)

Currently translated at 97.9% (96 of 98 strings)

Translated using Weblate (Filipino)

Currently translated at 40.9% (9 of 22 strings)

Translated using Weblate (Italian)

Currently translated at 98.9% (2664 of 2691 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Vince <vincemorel.vilan.889@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: weizhen lv <lvwzhen@gmail.com>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/fil/
Translate-URL: https://translate.habitica.com/projects/habitica/character/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/fil/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/front/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
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/generic/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/it/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/fil/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/fil/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/uk/
Translation: Habitica/Challenge
Translation: Habitica/Character
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Limited
Translation: Habitica/Loginincentives
Translation: Habitica/Npc
Translation: Habitica/Subscriber
2022-09-21 19:12:26 +02:00
CuriousMagpie 9890e0079a fix: correct groupPlan.vue file 2022-09-21 12:02:35 -04:00
SabreCat 1530ab44e9 fix(gala): hide avatar customizations before start date 2022-09-20 16:57:39 -05:00
CuriousMagpie 586897fbfc Revert "update: remove another duplicate key from groups.json"
This reverts commit 014a4b653a.
2022-09-20 17:11:09 -04:00
SabreCat f75a6eb11d fix(hourglass): handle missing planId 2022-09-20 15:25:37 -05:00
SabreCat 155d6d5af6 Merge branch 'develop' into sabrecat/next-hourglass 2022-09-20 15:18:44 -05:00
SabreCat 004f1ee2dc Merge branch 'develop' into sabrecat/panel-subscription 2022-09-20 15:11:29 -05:00
CuriousMagpie c61bdaf563 Merge remote-tracking branch 'origin/group-tracking-modal' into group-tracking-modal 2022-09-20 15:36:58 -04:00
SabreCat 85e14bb100 Merge branch 'develop' into group-tracking-modal 2022-09-20 14:13:59 -05:00
CuriousMagpie 8e9b469d8d chore: merge develop 2022-09-20 13:11:43 -04:00
Weblate 6e5cac88fc Merge branch 'origin/develop' into Weblate. 2022-09-19 23:58:58 +02:00
Weblate 80acb70718 Translated using Weblate (German)
Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (German)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (German)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Belarusian)

Currently translated at 81.4% (615 of 755 strings)

Translated using Weblate (Japanese)

Currently translated at 97.2% (176 of 181 strings)

Translated using Weblate (Spanish)

Currently translated at 96.2% (2562 of 2663 strings)

Translated using Weblate (Russian)

Currently translated at 99.2% (128 of 129 strings)

Translated using Weblate (Russian)

Currently translated at 99.9% (2662 of 2663 strings)

Translated using Weblate (Russian)

Currently translated at 99.4% (180 of 181 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Czech)

Currently translated at 74.3% (1981 of 2663 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (129 of 129 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (181 of 181 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (754 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (228 of 228 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (German)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (German)

Currently translated at 93.3% (363 of 389 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (389 of 389 strings)

Translated using Weblate (Ukrainian)

Currently translated at 22.9% (612 of 2663 strings)

Translated using Weblate (Ukrainian)

Currently translated at 46.6% (352 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (47 of 47 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Spanish)

Currently translated at 96.2% (2562 of 2663 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 45.8% (346 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (German)

Currently translated at 100.0% (755 of 755 strings)

Translated using Weblate (Russian)

Currently translated at 99.7% (388 of 389 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2660 of 2663 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (Russian)

Currently translated at 99.7% (388 of 389 strings)

Translated using Weblate (Russian)

Currently translated at 99.8% (2660 of 2663 strings)

Translated using Weblate (Russian)

Currently translated at 98.2% (57 of 58 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Céu <marcel.ufscar@gmail.com>
Co-authored-by: David Kővári <davson.kovari@gmail.com>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Natalie Luhrs <eilatan@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: mattya 226 <worldworld1114@gmail.com>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/front/de/
Translate-URL: https://translate.habitica.com/projects/habitica/front/it/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/front/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/cs/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
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/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/de/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/be/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/de/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/it/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/it/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translation: Habitica/Backgrounds
Translation: Habitica/Communityguidelines
Translation: Habitica/Contrib
Translation: Habitica/Faq
Translation: Habitica/Front
Translation: Habitica/Gear
Translation: Habitica/Groups
Translation: Habitica/Limited
Translation: Habitica/Npc
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Subscriber
2022-09-19 23:58:41 +02:00
SabreCat 24430861ce 4.244.0 2022-09-19 16:56:39 -05:00
SabreCat e60285e7d9 Merge branch 'develop' into release 2022-09-19 16:56:35 -05:00
Natalie L f030135c82 chore(content): add 2022 Fall Festival (#14244)
* chore(submodule): add August 2022 Mystery Items

* update(content): add 2022 Fall Festival content

* update(content): add 2022 Fall Festival content

* update(content): update event dates for release

* fix(lint): remove extra spaces
also correct typo in gear string keys

* feat(content): remaining descriptions

* fix(event): correct spell availability

* fix(test): work around first-match logic

Co-authored-by: Sabe Jones <sabrecat@gmail.com>
Co-authored-by: SabreCat <sabe@habitica.com>
2022-09-19 16:55:53 -05:00
SabreCat 2c29310466 chore(privacy): official update note 2022-09-19 16:19:20 -05:00
CuriousMagpie 13eef6e4cf chore: merge develop 2022-09-19 15:10:11 -04:00
dependabot[bot] 13c0d12045 build(deps): bump rate-limiter-flexible from 2.3.7 to 2.3.10 (#14236)
Bumps [rate-limiter-flexible](https://github.com/animir/node-rate-limiter-flexible) from 2.3.7 to 2.3.10.
- [Release notes](https://github.com/animir/node-rate-limiter-flexible/releases)
- [Commits](https://github.com/animir/node-rate-limiter-flexible/commits)

---
updated-dependencies:
- dependency-name: rate-limiter-flexible
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-19 14:33:30 -04:00
dependabot[bot] 6456984f57 build(deps): bump @babel/preset-env from 7.18.10 to 7.19.1 (#14232)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.10 to 7.19.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.19.1/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>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-19 14:32:25 -04:00
dependabot[bot] cfc1a12930 build(deps): bump jose from 2.0.5 to 2.0.6 (#14230)
Bumps [jose](https://github.com/panva/jose) from 2.0.5 to 2.0.6.
- [Release notes](https://github.com/panva/jose/releases)
- [Changelog](https://github.com/panva/jose/blob/v2.0.6/CHANGELOG.md)
- [Commits](https://github.com/panva/jose/compare/v2.0.5...v2.0.6)

---
updated-dependencies:
- dependency-name: jose
  dependency-type: indirect
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-19 14:31:53 -04:00
dependabot[bot] 9ba4687478 build(deps): bump amplitude-js from 8.18.5 to 8.21.0 in /website/client (#14223)
Bumps [amplitude-js](https://github.com/amplitude/amplitude-javascript) from 8.18.5 to 8.21.0.
- [Release notes](https://github.com/amplitude/amplitude-javascript/releases)
- [Changelog](https://github.com/amplitude/Amplitude-JavaScript/blob/main/CHANGELOG.md)
- [Commits](https://github.com/amplitude/amplitude-javascript/compare/v8.18.5...v8.21.0)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-19 14:30:19 -04:00
dependabot[bot] 6d987a9579 build(deps): bump apidoc from 0.52.0 to 0.53.0 (#14214)
Bumps [apidoc](https://github.com/apidoc/apidoc) from 0.52.0 to 0.53.0.
- [Release notes](https://github.com/apidoc/apidoc/releases)
- [Changelog](https://github.com/apidoc/apidoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/apidoc/apidoc/compare/0.52.0...0.53.0)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-19 14:27:35 -04:00
dependabot[bot] 4702479156 build(deps): bump vue and vue-template-compiler in /website/client (#14196)
Bumps [vue](https://github.com/vuejs/core) and [vue-template-compiler](https://github.com/vuejs/vue). These dependencies needed to be updated together.

Updates `vue` from 2.7.8 to 2.7.10
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/commits)

Updates `vue-template-compiler` from 2.7.8 to 2.7.10
- [Release notes](https://github.com/vuejs/vue/releases)
- [Changelog](https://github.com/vuejs/vue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue/compare/v2.7.8...v2.7.10)

---
updated-dependencies:
- dependency-name: vue
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: vue-template-compiler
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-19 14:26:17 -04:00
dependabot[bot] b384cd4eb8 build(deps): bump dompurify from 2.3.10 to 2.4.0 in /website/client (#14191)
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.3.10 to 2.4.0.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.3.10...2.4.0)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-19 14:25:24 -04:00
dependabot[bot] d2bd7dc325 build(deps): bump jquery from 3.6.0 to 3.6.1 in /website/client (#14190)
Bumps [jquery](https://github.com/jquery/jquery) from 3.6.0 to 3.6.1.
- [Release notes](https://github.com/jquery/jquery/releases)
- [Commits](https://github.com/jquery/jquery/compare/3.6.0...3.6.1)

---
updated-dependencies:
- dependency-name: jquery
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-19 14:24:01 -04:00
CuriousMagpie 719fab8d4b chore: merge develop in 2022-09-16 16:12:34 -04:00
Phillip Thelen 24841346dc Purge Facebook (#13696)
* Don't sign in user when trying to connect a social account that was already created

* Log social users into matching local auth accounts

If the social account has an email that already exists as a local user, instead of creating a new account log them into their account and add the social auth to the account

* If possible set local authentication email for social users

* Allow password reset emails to be sent to social login users

* lint fixes

* Fix issues and tests

* fix tests

* Fix lint error.

* purge Facebook.

Only keep it in some select places to allow for some compatablilty.

* Fix error

* fix error

* Let settings handle it when you don't have a password set but an email

* fix error

* Fix boolean logic

* fix json conversion

* .

* fix password reset for old social accounts

* Don't sign in user when trying to connect a social account that was already created

* Log social users into matching local auth accounts

If the social account has an email that already exists as a local user, instead of creating a new account log them into their account and add the social auth to the account

* If possible set local authentication email for social users

* Allow password reset emails to be sent to social login users

* lint fixes

* Fix issues and tests

* fix tests

* Fix lint error.

* purge Facebook.

Only keep it in some select places to allow for some compatablilty.

* Fix error

* fix error

* Let settings handle it when you don't have a password set but an email

* fix error

* Fix boolean logic

* fix json conversion

* fix password reset for old social accounts

* Revert "lint fixes"

This reverts commit c244b1651c.

# Conflicts:
#	website/client/src/components/auth/registerLoginReset.vue
#	website/client/src/components/static/contact.vue

* Revert "fix password reset for old social accounts"

This reverts commit 7e0069a80f.

* fix duplicate code

* chore(misc): remove irrelevant changes

* chore(privacy): update policy page with note about FB

Co-authored-by: SabreCat <sabe@habitica.com>
2022-09-15 18:22:52 -05:00
SabreCat 4c34c68d78 fix(test): stub newly relevant function 2022-09-15 12:20:11 -05:00
SabreCat 9a8d1854b9 fix(promo): handle Gems sale defined outside of single top event 2022-09-15 11:40:48 -05:00
SabreCat 10f5011781 chore(subproject): update habitica-images SHA 2022-09-15 11:35:27 -05:00
Natalie L 9a896470d5 Site Footer Update (#14134)
* first pass

* second pass

* third pass

* fourth pass, not a lot of progress

* fifth pass, slowly gettin there

* breakpoint nonsense

* flexbox and breakpoint nonsense

* svg updates, css updates

* whitespace

* chore: merge upstream/develop

* style(breakpoints): added responsive breakpoints, social column alignment tweaks

* style(breakpoints): add xs-specific selectors and classes

* style: mobile footer

* style: mobile footer

* style: static landing page footer

* style: small tweaks to social layout

* fix(translations): update website/common/locales/de/gear.json to develop

* update(style): small updates

* update(style): cleaning up code

* update(style): cleaning up code

* update(style): mobile footer updates

* update(style): complete mobile footer & clean up code

* update(style): add tablet breakpoint and remove rogue terms link
2022-09-14 16:35:24 -05:00
Natalie L 6b0b393e32 fix: Group Plans string duplication & style adjustment (#14148)
* 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

Co-authored-by: SabreCat <sabe@habitica.com>
2022-09-14 16:33:31 -05:00
CuriousMagpie 014a4b653a update: remove another duplicate key from groups.json 2022-09-14 17:24:29 -04:00
CuriousMagpie 37e5d6b40a update: remove duplicate key from groups.json 2022-09-14 17:06:33 -04:00
SabreCat fb780c9a2d fix(admin): reactivity with subscriptions 2022-09-13 15:52:03 -05:00
Weblate 5f440f1bfa Merge branch 'origin/develop' into Weblate. 2022-09-13 17:11:21 +02:00
Weblate 203d97423a Translated using Weblate (Russian)
Currently translated at 97.9% (381 of 389 strings)

Translated using Weblate (Spanish)

Currently translated at 96.2% (2562 of 2663 strings)

Translated using Weblate (Danish)

Currently translated at 94.0% (127 of 135 strings)

Translated using Weblate (Danish)

Currently translated at 89.3% (84 of 94 strings)

Translated using Weblate (Danish)

Currently translated at 97.2% (175 of 180 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Danish)

Currently translated at 86.0% (185 of 215 strings)

Translated using Weblate (Danish)

Currently translated at 93.3% (126 of 135 strings)

Translated using Weblate (Danish)

Currently translated at 71.0% (147 of 207 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Danish)

Currently translated at 88.2% (83 of 94 strings)

Translated using Weblate (Danish)

Currently translated at 99.0% (110 of 111 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (8 of 8 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (128 of 128 strings)

Translated using Weblate (Danish)

Currently translated at 99.1% (226 of 228 strings)

Translated using Weblate (Danish)

Currently translated at 78.9% (307 of 389 strings)

Translated using Weblate (Danish)

Currently translated at 68.6% (1829 of 2663 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Danish)

Currently translated at 96.6% (174 of 180 strings)

Translated using Weblate (Danish)

Currently translated at 98.2% (57 of 58 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (54 of 54 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (15 of 15 strings)

Translated using Weblate (Danish)

Currently translated at 81.1% (613 of 755 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (127 of 127 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (47 of 47 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (374 of 374 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Danish)

Currently translated at 67.8% (492 of 725 strings)

Translated using Weblate (Danish)

Currently translated at 85.5% (184 of 215 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Ukrainian)

Currently translated at 22.9% (611 of 2663 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (207 of 207 strings)

Translated using Weblate (Russian)

Currently translated at 97.4% (379 of 389 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Ukrainian)

Currently translated at 43.7% (330 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 42.7% (323 of 755 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (128 of 128 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 98.2% (57 of 58 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Ukrainian)

Currently translated at 41.8% (316 of 755 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (94 of 94 strings)

Translated using Weblate (Ukrainian)

Currently translated at 41.7% (315 of 755 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (725 of 725 strings)

Translated using Weblate (Russian)

Currently translated at 99.5% (206 of 207 strings)

Translated using Weblate (Russian)

Currently translated at 95.6% (372 of 389 strings)

Translated using Weblate (Russian)

Currently translated at 99.0% (213 of 215 strings)

Translated using Weblate (Danish)

Currently translated at 98.6% (225 of 228 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (German)

Currently translated at 92.5% (360 of 389 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (2663 of 2663 strings)

Translated using Weblate (Spanish)

Currently translated at 96.2% (2562 of 2663 strings)

Translated using Weblate (Spanish)

Currently translated at 96.3% (2562 of 2659 strings)

Co-authored-by: Ana Beatriz <anabeatriz.augusto06@yahoo.com>
Co-authored-by: Asta Jensen <asta.raae@live.dk>
Co-authored-by: Ike Osenberg <ike.osenberg@gmail.com>
Co-authored-by: KanI <twinklingnerd@gmail.com>
Co-authored-by: Mara S. (Dolichotis) <marascherzer@gmail.com>
Co-authored-by: Nazar Paruna <nazarparuna@gmail.com>
Co-authored-by: Sandra Marcial <sandramarcial80@gmail.com>
Co-authored-by: Sergey Shevelev <vlkgamer45@gmail.com>
Co-authored-by: UNI <nibi727171@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: そら <comi4work@gmail.com>
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/da/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
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/backgrounds/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/challenge/da/
Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/da/
Translate-URL: https://translate.habitica.com/projects/habitica/content/da/
Translate-URL: https://translate.habitica.com/projects/habitica/contrib/da/
Translate-URL: https://translate.habitica.com/projects/habitica/death/da/
Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/da/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/da/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/front/da/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/da/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt_BR/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/da/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/de/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/da/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/da/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/overview/da/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/da/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/da/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/da/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/da/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/da/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/da/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ru/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/da/
Translation: Habitica/Backgrounds
Translation: Habitica/Challenge
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/Limited
Translation: Habitica/Npc
Translation: Habitica/Overview
Translation: Habitica/Pets
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Rebirth
Translation: Habitica/Settings
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
2022-09-13 17:11:08 +02:00
SabreCat 1a86943711 fix(subscriptions): better next-hourglass logic 2022-09-12 15:17:39 -05:00
CuriousMagpie 21185b689c update: add 'type' to amazonModal.vue, removed extraneous analytics.js code 2022-09-12 11:42:39 -04:00
CuriousMagpie 5a85e0730c update: analytics debugging 2022-09-09 16:56:19 -04:00
CuriousMagpie 771558e1fd update: analytics debugging 2022-09-09 16:27:25 -04:00
CuriousMagpie e6f903fd2e update: more analytics work 2022-09-09 15:37:08 -04:00
CuriousMagpie 5c13bf1980 update: add analytics to create and success modals 2022-09-08 17:34:36 -04:00
CuriousMagpie 36a4ec69d5 update: success modal (testing something) 2022-09-08 15:53:26 -04:00
CuriousMagpie c6ba1d8402 update: success modal 2022-09-08 12:55:53 -04:00
SabreCat 0081bad831 feat(admin): track hourglasses as transactions 2022-09-06 16:15:04 -05:00
CuriousMagpie abdb6244d3 updates: add comments to success modal to flag issues 2022-09-06 17:06:19 -04:00
SabreCat 90f1977a49 fix(admin): sometimes 0 is correct 2022-09-06 15:09:40 -05:00
SabreCat bc33e4349d Merge branch 'develop' into sabrecat/panel-subscription 2022-09-06 14:19:46 -05:00
CuriousMagpie 61f3d8d61c Merge branch 'develop' into group-tracking-modal 2022-09-06 15:11:03 -04:00
CuriousMagpie 796d752974 update: success modal 2022-09-02 16:55:28 -04:00
SabreCat 008314676d fix(admin): reactivity on next hourglass 2022-09-01 17:16:51 -05:00
SabreCat f364b3c06f feat(admin): consecutive months editable field and automatic calcs 2022-08-31 16:09:20 -05:00
SabreCat ae23ac12ff feat(admin): interactive subscription section fields 2022-08-30 16:56:43 -05:00
CuriousMagpie e2bb7fda60 update: success modal 2022-08-30 17:43:36 -04:00
SabreCat 09d6dae75c feat(admin): provide reset cron button 2022-08-30 15:35:50 -05:00
SabreCat bc5813fd10 Merge branch 'develop' into sabrecat/panel-subscription 2022-08-30 14:54:40 -05:00
CuriousMagpie 4464464c51 Merge branch 'develop' into group-tracking-modal 2022-08-30 15:44:09 -04:00
CuriousMagpie a3e6aff330 update: more work on success modal 2022-08-29 16:12:53 -04:00
CuriousMagpie a523d0b894 Merge branch 'develop' into group-tracking-modal 2022-08-29 13:33:15 -04:00
CuriousMagpie 8a809c3828 update: work on success modal, update to payment mixin to calculate monthly billing date 2022-08-26 17:58:51 -04:00
CuriousMagpie 40f433b099 update: work on success modal 2022-08-25 15:47:24 -04:00
CuriousMagpie 9a1266677a Merge remote-tracking branch 'upstream/develop' into group-tracking-modal 2022-08-25 13:20:54 -04:00
CuriousMagpie d70dd2e6dd update: add analytics event upon group creation/upgrade (temp code & console.logs commented out) 2022-08-15 17:13:51 -04:00
CuriousMagpie f078d19e4b Merge branch 'develop' into group-tracking-modal 2022-08-15 13:49:35 -04:00
CuriousMagpie e08d0f4016 update: style changes, add upgraded group demographics to success modal, add description counter 2022-08-12 16:44:58 -04:00
CuriousMagpie 0435e3537a update: add temp button & function for triggering success modal; add comments 2022-08-11 16:39:49 -04:00
SabreCat 0aadee550e fix(admin): add data value for expand state 2022-08-11 14:16:27 -05:00
CuriousMagpie f487837b4b Merge branch 'develop' into group-tracking-modal 2022-08-11 15:02:40 -04:00
SabreCat b593db2150 feat(admin): show subscription data 2022-08-10 16:20:32 -05:00
CuriousMagpie a07c2e6268 update: dropdown and delete duplicated file 2022-08-10 16:48:09 -04:00
SabreCat e3c552dd54 WIP(dropdown): add placeholder text 2022-08-10 16:02:56 -04:00
CuriousMagpie 8d1f7e77ed update: styling and dropdown 2022-08-10 14:00:46 -04:00
CuriousMagpie cfd601e7bf update: styling and some function work 2022-08-08 17:16:41 -04:00
CuriousMagpie 5d81c63897 update: upgrade groups sign up page (slightly) 2022-08-08 16:36:14 -04:00
CuriousMagpie cff6c5674f update: add styling 2022-08-04 17:26:04 -04:00
CuriousMagpie edcb3f4289 update: making dropdown go with PROPS 2022-08-03 12:07:30 -04:00
CuriousMagpie bd28a282df updates: add demographic strings & drop-down and translated array code 2022-08-02 18:34:09 -04:00
CuriousMagpie 999071a15c still trying to get modal to work 2022-08-02 16:05:41 -04:00
CuriousMagpie 9bee9d0a06 working on editing code so the modal emits from group-plans instead of from within the file 2022-08-01 17:11:15 -04:00
CuriousMagpie f5b632e3e5 Merge remote-tracking branch 'upstream/develop' into group-tracking-modal 2022-08-01 15:55:00 -04:00
CuriousMagpie 8ecd152b41 moved modal file from /groups into /group-plans 2022-07-27 18:25:56 -04:00
CuriousMagpie ba22c18cd9 separating group plan creation modal out from groupPlan.vue 2022-07-26 16:59:53 -04:00
319 changed files with 8157 additions and 3891 deletions
+3
View File
@@ -2,6 +2,9 @@ name: Test
on: [push, pull_request]
permissions:
contents: read
jobs:
lint:
runs-on: ubuntu-latest
-3
View File
@@ -1,4 +1,3 @@
version: "3"
services:
client:
build:
@@ -9,7 +8,6 @@ services:
- server
environment:
- BASE_URL=http://server:3000
image: habitica
networks:
- habitica
ports:
@@ -27,7 +25,6 @@ services:
- mongo
environment:
- NODE_DB_URI=mongodb://mongo/habitrpg
image: habitica
networks:
- habitica
ports:
@@ -0,0 +1,97 @@
/* eslint-disable no-console */
import { model as UserModel } from '../../../website/server/models/user';
import { TransactionModel } from '../../../website/server/models/transaction';
const MIGRATION_NAME = '20220915_transactions_user_name';
/* transaction config */
const transactionPerRun = 500;
const progressCount = 1000;
const transactionQuery = {
migration: { $ne: MIGRATION_NAME }, // skip already migrated entries
'transactionType': { $in: ['gift_send', 'gift_receive'] },
};
let count = 0;
async function updateTransaction (transaction, userNameMap) {
count++;
const set = {
migration: MIGRATION_NAME,
};
if (userNameMap.has(transaction.reference)) {
set['referenceText'] = userNameMap.get(transaction.reference);
} else {
set['referenceText'] = 'Account not found';
}
if (count % progressCount === 0) {
console.warn(`${count} ${transaction._id}`);
}
return TransactionModel.updateOne({
_id: transaction._id
}, { $set: set }).exec();
}
export default async function processTransactions () {
const fields = {
_id: 1,
reference: 1,
referenceText: 1,
};
const userNameMap = new Map();
while (true) { // eslint-disable-line no-constant-condition
const foundTransactions = await TransactionModel // eslint-disable-line no-await-in-loop
.find(transactionQuery)
.limit(transactionPerRun)
.sort({reference: 1})
.select(fields)
.lean()
.exec();
if (foundTransactions.length === 0) {
console.warn('All appropriate transactions found and modified.');
console.warn(`\n${count} transactions processed\n`);
break;
}
// check for unknown users and load the names
const userIdsToLoad = [];
for (const foundTransaction of foundTransactions) {
const userId = foundTransaction.reference;
if (userNameMap.has(userId)) {
continue;
}
userIdsToLoad.push(userId);
}
const users = await UserModel // eslint-disable-line no-await-in-loop
.find({
_id: { $in: userIdsToLoad }
})
.select({
_id: 1,
'auth.local.username': 1,
})
.lean()
.exec();
for (const user of users) {
const localUserName = user.auth?.local?.username;
if (!localUserName) {
console.warn(`\nNo Username found for ID: ${user._id}\n`);
continue;
}
userNameMap.set(user._id, localUserName)
}
await Promise.all(foundTransactions.map(t => updateTransaction(t, userNameMap))); // eslint-disable-line no-await-in-loop
}
};
@@ -0,0 +1,86 @@
/*
* Award Habitoween ladder items to participants in this month's Habitoween festivities
*/
/* eslint-disable no-console */
const MIGRATION_NAME = '20221031_habitoween_ladder'; // Update when running in future years
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
const set = {};
const inc = {
'items.food.Candy_Skeleton': 1,
'items.food.Candy_Base': 1,
'items.food.Candy_CottonCandyBlue': 1,
'items.food.Candy_CottonCandyPink': 1,
'items.food.Candy_Shade': 1,
'items.food.Candy_White': 1,
'items.food.Candy_Golden': 1,
'items.food.Candy_Zombie': 1,
'items.food.Candy_Desert': 1,
'items.food.Candy_Red': 1,
};
set.migration = MIGRATION_NAME;
if (user && user.items && user.items.pets && user.items.pets['JackOLantern-RoyalPurple']) {
set['items.mounts.JackOLantern-RoyalPurple'] = true;
} else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Glow']) {
set['items.pets.JackOLantern-RoyalPurple'] = 5;
} else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Glow']) {
set['items.mounts.JackOLantern-Glow'] = true;
} else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Ghost']) {
set['items.pets.JackOLantern-Glow'] = 5;
} else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Ghost']) {
set['items.mounts.JackOLantern-Ghost'] = true;
} else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Base']) {
set['items.pets.JackOLantern-Ghost'] = 5;
} else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Base']) {
set['items.mounts.JackOLantern-Base'] = true;
} else {
set['items.pets.JackOLantern-Base'] = 5;
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({_id: user._id}, {$inc: inc, $set: set}).exec();
}
export default async function processUsers () {
let query = {
migration: {$ne: MIGRATION_NAME},
'auth.timestamps.loggedin': {$gt: new Date('2022-10-01')},
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1],
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};
@@ -0,0 +1,119 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20221031_pet_set_group_achievements';
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,
};
if (user && user.items && user.items.pets) {
const pets = user.items.pets;
if (pets['Wolf-Skeleton']
&& pets['TigerCub-Skeleton']
&& pets['PandaCub-Skeleton']
&& pets['LionCub-Skeleton']
&& pets['Fox-Skeleton']
&& pets['FlyingPig-Skeleton']
&& pets['Dragon-Skeleton']
&& pets['Cactus-Skeleton']
&& pets['BearCub-Skeleton']
&& pets['Gryphon-Skeleton']
&& pets['Hedgehog-Skeleton']
&& pets['Deer-Skeleton']
&& pets['Egg-Skeleton']
&& pets['Rat-Skeleton']
&& pets['Octopus-Skeleton']
&& pets['Seahorse-Skeleton']
&& pets['Parrot-Skeleton']
&& pets['Rooster-Skeleton']
&& pets['Spider-Skeleton']
&& pets['Owl-Skeleton']
&& pets['Penguin-Skeleton']
&& pets['TRex-Skeleton']
&& pets['Rock-Skeleton']
&& pets['Bunny-Skeleton']
&& pets['Slime-Skeleton']
&& pets['Sheep-Skeleton']
&& pets['Cuttlefish-Skeleton']
&& pets['Whale-Skeleton']
&& pets['Cheetah-Skeleton']
&& pets['Horse-Skeleton']
&& pets['Frog-Skeleton']
&& pets['Snake-Skeleton']
&& pets['Unicorn-Skeleton']
&& pets['Sabretooth-Skeleton']
&& pets['Monkey-Skeleton']
&& pets['Snail-Skeleton']
&& pets['Falcon-Skeleton']
&& pets['Treeling-Skeleton']
&& pets['Axolotl-Skeleton']
&& pets['Turtle-Skeleton']
&& pets['Armadillo-Skeleton']
&& pets['Cow-Skeleton']
&& pets['Beetle-Skeleton']
&& pets['Ferret-Skeleton']
&& pets['Sloth-Skeleton']
&& pets['Triceratops-Skeleton']
&& pets['GuineaPig-Skeleton']
&& pets['Peacock-Skeleton']
&& pets['Butterfly-Skeleton']
&& pets['Nudibranch-Skeleton']
&& pets['Hippo-Skeleton']
&& pets['Yarn-Skeleton']
&& pets['Pterodactyl-Skeleton']
&& pets['Badger-Skeleton']
&& pets['Squirrel-Skeleton']
&& pets['SeaSerpent-Skeleton']
&& pets['Kangaroo-Skeleton']
&& pets['Alligator-Skeleton']
&& pets['Velociraptor-Skeleton']
&& pets['Dolphin-Skeleton']
&& pets['Robot-Skeleton']) {
set['achievements.boneToPick'] = true;
}
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({ _id: user._id }, { $set: set }).exec();
}
export default async function processUsers () {
let query = {
// migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2022-01-01') },
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1]._id,
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};
+1200 -856
View File
File diff suppressed because it is too large Load Diff
+18 -18
View File
@@ -1,22 +1,22 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.243.1",
"version": "4.251.0",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.18.13",
"@babel/preset-env": "^7.18.10",
"@babel/core": "^7.19.6",
"@babel/preset-env": "^7.20.2",
"@babel/register": "^7.18.9",
"@google-cloud/trace-agent": "^5.1.6",
"@google-cloud/trace-agent": "^7.1.2",
"@parse/node-apn": "^5.1.3",
"@slack/webhook": "^6.1.0",
"accepts": "^1.3.8",
"amazon-payments": "^0.2.9",
"amplitude": "^6.0.0",
"apidoc": "^0.52.0",
"apidoc": "^0.53.1",
"apple-auth": "^1.0.7",
"bcrypt": "^5.0.1",
"body-parser": "^1.20.0",
"bcrypt": "^5.1.0",
"body-parser": "^1.20.1",
"bootstrap": "^4.6.0",
"compression": "^1.7.4",
"cookie-session": "^2.0.0",
@@ -27,7 +27,7 @@
"eslint": "^6.8.0",
"eslint-config-habitrpg": "^6.2.0",
"eslint-plugin-mocha": "^5.0.0",
"express": "^4.18.1",
"express": "^4.18.2",
"express-basic-auth": "^1.2.1",
"express-validator": "^5.2.0",
"glob": "^8.0.3",
@@ -41,9 +41,9 @@
"helmet": "^4.6.0",
"image-size": "^1.0.2",
"in-app-purchase": "^1.11.3",
"js2xmlparser": "^4.0.2",
"js2xmlparser": "^5.0.0",
"jsonwebtoken": "^8.5.1",
"jwks-rsa": "^2.1.4",
"jwks-rsa": "^2.1.5",
"lodash": "^4.17.21",
"merge-stream": "^2.0.0",
"method-override": "^3.0.0",
@@ -61,20 +61,20 @@
"paypal-rest-sdk": "^1.8.1",
"pp-ipn": "^1.1.0",
"ps-tree": "^1.0.0",
"rate-limiter-flexible": "^2.3.7",
"rate-limiter-flexible": "^2.4.0",
"redis": "^3.1.2",
"regenerator-runtime": "^0.13.9",
"remove-markdown": "^0.5.0",
"rimraf": "^3.0.2",
"short-uuid": "^4.2.0",
"stripe": "^8.222.0",
"superagent": "^7.1.6",
"short-uuid": "^4.2.2",
"stripe": "^10.13.0",
"superagent": "^8.0.3",
"universal-analytics": "^0.5.3",
"useragent": "^2.1.9",
"uuid": "^8.3.2",
"validator": "^13.7.0",
"vinyl-buffer": "^1.0.1",
"winston": "^3.8.1",
"winston": "^3.8.2",
"winston-loggly-bulk": "^3.2.1",
"xml2js": "^0.4.23"
},
@@ -111,10 +111,10 @@
},
"devDependencies": {
"axios": "^0.27.2",
"chai": "^4.3.6",
"chai": "^4.3.7",
"chai-as-promised": "^7.1.1",
"chai-moment": "^0.1.0",
"chalk": "^4.1.2",
"chalk": "^5.1.2",
"cross-spawn": "^7.0.3",
"expect.js": "^0.3.1",
"istanbul": "^1.1.0-alpha.1",
@@ -122,7 +122,7 @@
"monk": "^7.3.4",
"require-again": "^2.0.0",
"run-rs": "^0.7.7",
"sinon": "^13.0.2",
"sinon": "^14.0.2",
"sinon-chai": "^3.7.0",
"sinon-stub-promise": "^4.0.0"
},
-25
View File
@@ -13,11 +13,6 @@ function getUser () {
username: 'username',
email: 'email@email',
},
facebook: {
emails: [{
value: 'email@facebook',
}],
},
google: {
emails: [{
value: 'email@google',
@@ -62,30 +57,12 @@ describe('emails', () => {
expect(data).to.have.property('canSend', true);
});
it('returns correct user data [facebook users]', () => {
const attachEmail = requireAgain(pathToEmailLib);
const { getUserInfo } = attachEmail;
const user = getUser();
delete user.profile.name;
delete user.auth.local.email;
delete user.auth.google.emails;
delete user.auth.apple.emails;
const data = getUserInfo(user, ['name', 'email', '_id', 'canSend']);
expect(data).to.have.property('name', user.auth.local.username);
expect(data).to.have.property('email', user.auth.facebook.emails[0].value);
expect(data).to.have.property('_id', user._id);
expect(data).to.have.property('canSend', true);
});
it('returns correct user data [google users]', () => {
const attachEmail = requireAgain(pathToEmailLib);
const { getUserInfo } = attachEmail;
const user = getUser();
delete user.profile.name;
delete user.auth.local.email;
delete user.auth.facebook.emails;
delete user.auth.apple.emails;
const data = getUserInfo(user, ['name', 'email', '_id', 'canSend']);
@@ -103,7 +80,6 @@ describe('emails', () => {
delete user.profile.name;
delete user.auth.local.email;
delete user.auth.google.emails;
delete user.auth.facebook.emails;
const data = getUserInfo(user, ['name', 'email', '_id', 'canSend']);
@@ -118,7 +94,6 @@ describe('emails', () => {
const { getUserInfo } = attachEmail;
const user = getUser();
delete user.auth.local.email;
delete user.auth.facebook;
delete user.auth.google;
delete user.auth.apple;
+1 -1
View File
@@ -246,7 +246,7 @@ describe('Password Utilities', () => {
it('returns false if the user has no local auth', async () => {
const user = await generateUser({
auth: {
facebook: {},
google: {},
},
});
const res = await validatePasswordResetCodeAndFindUser(encrypt(JSON.stringify({
@@ -326,6 +326,7 @@ describe('Apple Payments', () => {
it('errors when a user is already subscribed', async () => {
payments.createSubscription.restore();
user = new User();
await user.save();
await applePayments.subscribe(sku, user, receipt, headers, nextPaymentProcessing);
+27 -5
View File
@@ -11,10 +11,13 @@ import {
generateGroup,
} from '../../../../helpers/api-unit.helper';
import * as worldState from '../../../../../website/server/libs/worldState';
import { TransactionModel } from '../../../../../website/server/models/transaction';
describe('payments/index', () => {
let user; let group; let data; let
plan;
let user;
let group;
let data;
let plan;
beforeEach(async () => {
user = new User();
@@ -104,6 +107,23 @@ describe('payments/index', () => {
expect(recipient.purchased.plan.extraMonths).to.eql(3);
});
it('add a transaction entry to the recipient', async () => {
recipient.purchased.plan = plan;
expect(recipient.purchased.plan.extraMonths).to.eql(0);
await api.createSubscription(data);
expect(recipient.purchased.plan.extraMonths).to.eql(3);
const transactions = await TransactionModel
.find({ userId: recipient._id })
.sort({ createdAt: -1 })
.exec();
expect(transactions).to.have.lengthOf(1);
});
it('does not set negative extraMonths if plan has past dateTerminated date', async () => {
const dateTerminated = moment().subtract(2, 'months').toDate();
recipient.purchased.plan.dateTerminated = dateTerminated;
@@ -672,10 +692,12 @@ describe('payments/index', () => {
context('No Active Promotion', () => {
beforeEach(() => {
sinon.stub(worldState, 'getCurrentEvent').returns(null);
sinon.stub(worldState, 'getCurrentEventList').returns([]);
});
afterEach(() => {
worldState.getCurrentEvent.restore();
worldState.getCurrentEventList.restore();
});
it('does not apply a discount', async () => {
@@ -692,14 +714,14 @@ describe('payments/index', () => {
context('Active Promotion', () => {
beforeEach(() => {
sinon.stub(worldState, 'getCurrentEvent').returns({
sinon.stub(worldState, 'getCurrentEventList').returns([{
...common.content.events.fall2020,
event: 'fall2020',
});
}]);
});
afterEach(() => {
worldState.getCurrentEvent.restore();
worldState.getCurrentEventList.restore();
});
it('applies a discount', async () => {
@@ -11,6 +11,12 @@ describe('PUT /group', () => {
const groupName = 'Test Public Guild';
const groupType = 'guild';
const groupUpdatedName = 'Test Public Guild Updated';
const groupCategories = [
{
slug: 'initialCat',
name: 'Initial Category',
},
];
beforeEach(async () => {
const { group, groupLeader, members } = await createAndPopulateGroup({
@@ -18,6 +24,7 @@ describe('PUT /group', () => {
name: groupName,
type: groupType,
privacy: 'public',
categories: groupCategories,
},
members: 1,
});
@@ -61,6 +68,35 @@ describe('PUT /group', () => {
expect(updatedGroup.categories[0].name).to.eql(categories[0].name);
});
it('removes the initial group category', async () => {
const categories = [];
const updatedGroup = await leader.put(`/groups/${groupToUpdate._id}`, {
categories,
});
expect(updatedGroup.categories.length).to.equal(0);
});
it('removes duplicate group categories', async () => {
const categories = [
{
slug: 'newCat',
name: 'New Category',
},
{
slug: 'newCat',
name: 'New Category',
},
];
const updatedGroup = await leader.put(`/groups/${groupToUpdate._id}`, {
categories,
});
expect(updatedGroup.categories.length).to.equal(1);
});
it('allows an admin to update a guild', async () => {
const updatedGroup = await adminUser.put(`/groups/${groupToUpdate._id}`, {
name: groupUpdatedName,
@@ -289,45 +289,6 @@ describe('DELETE /user', () => {
});
});
context('user with Facebook auth', async () => {
beforeEach(async () => {
user = await generateUser({
auth: {
facebook: {
id: 'facebook-id',
},
},
});
});
it('returns an error if confirmation phrase is wrong', async () => {
await expect(user.del('/user', {
password: 'just-do-it',
})).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('incorrectDeletePhrase', { magicWord: 'DELETE' }),
});
});
it('returns an error if confirmation phrase is not supplied', async () => {
await expect(user.del('/user', {
password: '',
})).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('missingPassword'),
});
});
it('deletes a Facebook user', async () => {
await user.del('/user', {
password: DELETE_CONFIRMATION,
});
await expect(checkExistence('users', user._id)).to.eventually.eql(false);
});
});
context('user with Google auth', async () => {
beforeEach(async () => {
user = await generateUser({
@@ -20,44 +20,6 @@ describe('DELETE social registration', () => {
});
});
context('Facebook', () => {
it('fails if user does not have an alternative registration method', async () => {
await user.update({
'auth.facebook.id': 'some-fb-id',
'auth.local': { ok: true },
});
await expect(user.del('/user/auth/social/facebook')).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('cantDetachSocial'),
});
});
it('succeeds if user has a local registration', async () => {
await user.update({
'auth.facebook.id': 'some-fb-id',
});
const response = await user.del('/user/auth/social/facebook');
expect(response).to.eql({});
await user.sync();
expect(user.auth.facebook).to.be.undefined;
});
it('succeeds if user has a google registration', async () => {
await user.update({
'auth.facebook.id': 'some-fb-id',
'auth.google.id': 'some-google-id',
'auth.local': { ok: true },
});
const response = await user.del('/user/auth/social/facebook');
expect(response).to.eql({});
await user.sync();
expect(user.auth.facebook).to.be.undefined;
});
});
context('Google', () => {
it('fails if user does not have an alternative registration method', async () => {
await user.update({
@@ -81,19 +43,6 @@ describe('DELETE social registration', () => {
await user.sync();
expect(user.auth.google).to.be.undefined;
});
it('succeeds if user has a facebook registration', async () => {
await user.update({
'auth.google.id': 'some-google-id',
'auth.facebook.id': 'some-facebook-id',
'auth.local': { ok: true },
});
const response = await user.del('/user/auth/social/google');
expect(response).to.eql({});
await user.sync();
expect(user.auth.goodl).to.be.undefined;
});
});
context('Apple', () => {
@@ -119,18 +68,5 @@ describe('DELETE social registration', () => {
await user.sync();
expect(user.auth.apple).to.be.undefined;
});
it('succeeds if user has a facebook registration', async () => {
await user.update({
'auth.apple.id': 'some-apple-id',
'auth.facebook.id': 'some-facebook-id',
'auth.local': { ok: true },
});
const response = await user.del('/user/auth/social/apple');
expect(response).to.eql({});
await user.sync();
expect(user.auth.goodl).to.be.undefined;
});
});
});
@@ -344,6 +344,24 @@ describe('POST /user/auth/local/register', () => {
});
});
it('enforces maximum length for the password', async () => {
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = '12345678910111213141516171819202122232425262728293031323334353637383940';
const confirmPassword = '12345678910111213141516171819202122232425262728293031323334353637383940';
await expect(api.post('/user/auth/local/register', {
username,
email,
password,
confirmPassword,
})).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: t('invalidReqParams'),
});
});
it('requires a username', async () => {
const email = `${generateRandomUserName()}@example.com`;
const password = 'password';
@@ -12,7 +12,6 @@ describe('POST /user/auth/social', () => {
let user;
const endpoint = '/user/auth/social';
let randomAccessToken = '123456';
let randomFacebookId = 'facebookId';
let randomGoogleId = 'googleId';
let network = 'NoNetwork';
@@ -33,146 +32,6 @@ describe('POST /user/auth/social', () => {
});
});
describe('facebook', () => {
beforeEach(async () => {
randomFacebookId = generateUUID();
const expectedResult = {
id: randomFacebookId,
displayName: 'a facebook user',
emails: [
{ value: `${user.auth.local.username}+facebook@example.com` },
],
};
sandbox.stub(passport._strategies.facebook, 'userProfile').yields(null, expectedResult);
network = 'facebook';
});
afterEach(async () => {
passport._strategies.facebook.userProfile.restore();
});
it('registers a new user', async () => {
const response = await api.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
});
expect(response.apiToken).to.exist;
expect(response.id).to.exist;
expect(response.newUser).to.be.true;
expect(response.username).to.exist;
await expect(getProperty('users', response.id, 'profile.name')).to.eventually.equal('a facebook user');
await expect(getProperty('users', response.id, 'auth.local.lowerCaseUsername')).to.exist;
await expect(getProperty('users', response.id, 'auth.local.email')).to.eventually.equal(`${user.auth.local.username}+facebook@example.com`);
await expect(getProperty('users', response.id, 'auth.facebook.id')).to.eventually.equal(randomFacebookId);
});
it('logs an existing user in', async () => {
const registerResponse = await api.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
});
const response = await api.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
});
expect(response.apiToken).to.eql(registerResponse.apiToken);
expect(response.id).to.eql(registerResponse.id);
expect(response.newUser).to.be.false;
expect(registerResponse.newUser).to.be.true;
});
it('logs an existing user in if they have local auth with matching email', async () => {
passport._strategies.facebook.userProfile.restore();
const expectedResult = {
id: randomFacebookId,
displayName: 'a facebook user',
emails: [
{ value: user.auth.local.email },
],
};
sandbox.stub(passport._strategies.facebook, 'userProfile').yields(null, expectedResult);
const response = await api.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
});
expect(response.apiToken).to.eql(user.apiToken);
expect(response.id).to.eql(user._id);
expect(response.newUser).to.be.false;
});
it('logs an existing user into their social account if they have local auth with matching email', async () => {
const registerResponse = await api.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
});
expect(registerResponse.newUser).to.be.true;
// This is important for existing accounts before the new social handling
passport._strategies.facebook.userProfile.restore();
const expectedResult = {
id: randomFacebookId,
displayName: 'a facebook user',
emails: [
{ value: user.auth.local.email },
],
};
sandbox.stub(passport._strategies.facebook, 'userProfile').yields(null, expectedResult);
const response = await api.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
});
expect(response.apiToken).to.eql(registerResponse.apiToken);
expect(response.id).to.eql(registerResponse.id);
expect(response.apiToken).not.to.eql(user.apiToken);
expect(response.id).not.to.eql(user._id);
expect(response.newUser).to.be.false;
});
it('add social auth to an existing user', async () => {
const response = await user.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
});
expect(response.apiToken).to.eql(user.apiToken);
expect(response.id).to.eql(user._id);
expect(response.newUser).to.be.false;
});
it('does not log into other account if social auth already exists', async () => {
const registerResponse = await api.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
});
expect(registerResponse.newUser).to.be.true;
await expect(user.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
})).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('socialAlreadyExists'),
});
});
xit('enrolls a new user in an A/B test', async () => {
await api.post(endpoint, {
authResponse: { access_token: randomAccessToken }, // eslint-disable-line camelcase
network,
});
await expect(getProperty('users', user._id, '_ABtests')).to.eventually.be.a('object');
});
});
describe('google', () => {
beforeEach(async () => {
randomGoogleId = generateUUID();
@@ -25,6 +25,19 @@ describe('POST /user/reset-password', async () => {
expect(user.auth.local.hashed_password).to.not.eql(previousPassword);
});
it('resets password for social users', async () => {
const email = `${user.auth.local.username}+google@example.com`;
await user.update({ 'auth.google.emails': [{ value: email }] });
await user.sync();
const previousPassword = user.auth.local.passwordResetCode;
const response = await user.post(endpoint, {
email,
});
expect(response).to.eql({ data: {}, message: t('passwordReset') });
await user.sync();
expect(user.auth.local.passwordResetCode).to.not.eql(previousPassword);
});
it('same message on error as on success', async () => {
const response = await user.post(endpoint, {
email: 'nonExistent@email.com',
+14 -5
View File
@@ -213,7 +213,7 @@ describe('cron utility functions', () => {
};
}
it('offset 0, next date in 3 months', () => {
it('monthly plan, next date in 3 months', () => {
const user = baseUserData(60, 0, 'group_plan_auto');
const planContext = getPlanContext(user, now);
@@ -222,8 +222,8 @@ describe('cron utility functions', () => {
.to.be.sameMoment('2022-08-10T02:00:00.144Z');
});
it('offset 1, next date in 1 months', () => {
const user = baseUserData(60, 1, 'group_plan_auto');
it('monthly plan, next date in 1 month', () => {
const user = baseUserData(62, 0, 'group_plan_auto');
const planContext = getPlanContext(user, now);
@@ -231,8 +231,17 @@ describe('cron utility functions', () => {
.to.be.sameMoment('2022-06-10T02:00:00.144Z');
});
it('offset 2, next date in 2 months - with any plan', () => {
const user = baseUserData(60, 2, 'basic_3mo');
it('multi-month plan, no offset', () => {
const user = baseUserData(60, 0, 'basic_3mo');
const planContext = getPlanContext(user, now);
expect(planContext.nextHourglassDate)
.to.be.sameMoment('2022-06-10T02:00:00.144Z');
});
it('multi-month plan with offset', () => {
const user = baseUserData(60, 1, 'basic_3mo');
const planContext = getPlanContext(user, now);
+402 -170
View File
@@ -22,17 +22,17 @@
}
},
"@amplitude/analytics-connector": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/@amplitude/analytics-connector/-/analytics-connector-1.4.4.tgz",
"integrity": "sha512-6JcE1nxrprJt6pHqqDQb7FXRqJmFHG7KJPe0jNZaAvfll4mWKVqZu8W9IV3XiN1P+xgHIV1NN+i3PLOAZWEhXg==",
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/@amplitude/analytics-connector/-/analytics-connector-1.4.5.tgz",
"integrity": "sha512-ELAP6ivg+13uSk+TOirGZE/92M+tTbeiQ/i7eXgDO4Hiy00Abf/UxO/rp9WovtxCyeFYTILrujEYxPv5cRQmFw==",
"requires": {
"@amplitude/ua-parser-js": "0.7.31"
}
},
"@amplitude/types": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@amplitude/types/-/types-1.10.0.tgz",
"integrity": "sha512-xN0gnhutztv6kqHaZ2bre18anQV5GDmMXOeipTvI670g2VjNbPfOzMwu1LN4p1NadYq+GqYI223UcZrXR+R4Pw=="
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/@amplitude/types/-/types-1.10.2.tgz",
"integrity": "sha512-I8qenRI7uU6wKNb9LiZrAosSHVoNHziXouKY81CrqxH9xhVTEIJFXeuCV0hbtBr0Al/8ejnGjQRx+S2SvU/pPg=="
},
"@amplitude/ua-parser-js": {
"version": "0.7.31",
@@ -40,12 +40,19 @@
"integrity": "sha512-+z8UGRaj13Pt5NDzOnkTBy49HE2CX64jeL0ArB86HAtilpnfkPB7oqkigN7Lf2LxscMg4QhFD7mmCfedh3rqTg=="
},
"@amplitude/utils": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@amplitude/utils/-/utils-1.10.0.tgz",
"integrity": "sha512-/R8j8IzFH0GYfA6ehQDm5IEzt71gIeMdiYYFIzZp6grERQlgJcwNJMAiza0o2JwwTDIruzqdB3c/vLVjuakp+w==",
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/@amplitude/utils/-/utils-1.10.2.tgz",
"integrity": "sha512-tVsHXu61jITEtRjB7NugQ5cVDd4QDzne8T3ifmZye7TiJeUfVRvqe44gDtf55A+7VqhDhyEIIXTA1iVcDGqlEw==",
"requires": {
"@amplitude/types": "^1.10.0",
"tslib": "^1.9.3"
"@amplitude/types": "^1.10.2",
"tslib": "^2.0.0"
},
"dependencies": {
"tslib": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
}
}
},
"@babel/code-frame": {
@@ -4349,9 +4356,9 @@
"integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA=="
},
"@hapi/hoek": {
"version": "8.3.1",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.3.1.tgz",
"integrity": "sha512-75ocgnI7HG/I01iGA3/rs0y6PXydUA/kxhFZM0HoT8NLSTnt/J8Gq03iKl4a4B/2A3iMG0ctXtxr5Hg9SGr1gw=="
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz",
"integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow=="
},
"@hapi/joi": {
"version": "15.1.1",
@@ -4811,6 +4818,31 @@
"warning": "^3.0.0"
}
},
"@sideway/address": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
"integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
"requires": {
"@hapi/hoek": "^9.0.0"
},
"dependencies": {
"@hapi/hoek": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
"integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="
}
}
},
"@sideway/formula": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz",
"integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg=="
},
"@sideway/pinpoint": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
"integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
},
"@soda/friendly-errors-webpack-plugin": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.0.tgz",
@@ -12357,29 +12389,39 @@
}
},
"@vue/cli-plugin-router": {
"version": "4.5.15",
"resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.15.tgz",
"integrity": "sha512-q7Y6kP9b3k55Ca2j59xJ7XPA6x+iSRB+N4ac0ZbcL1TbInVQ4j5wCzyE+uqid40hLy4fUdlpl4X9fHJEwuVxPA==",
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz",
"integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==",
"requires": {
"@vue/cli-shared-utils": "^4.5.15"
"@vue/cli-shared-utils": "^5.0.8"
},
"dependencies": {
"@vue/cli-shared-utils": {
"version": "4.5.15",
"resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.15.tgz",
"integrity": "sha512-SKaej9hHzzjKSOw1NlFmc6BSE0vcqUQMQiv1cxQ2DhVyy4QxZXBmzmiLBUBe+hYZZs1neXW7n//udeN9bCAY+Q==",
"@achrinza/node-ipc": {
"version": "9.2.5",
"resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.5.tgz",
"integrity": "sha512-kBX7Ay911iXZ3VZ1pYltj3Rfu7Ow9H7sK4H4RSfWIfWR2JKNB40K808wppoRIEzE2j2hXLU+r6TJgCAliCGhyQ==",
"requires": {
"@hapi/joi": "^15.0.1",
"chalk": "^2.4.2",
"@node-ipc/js-queue": "2.0.3",
"event-pubsub": "4.3.0",
"js-message": "1.0.7"
}
},
"@vue/cli-shared-utils": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz",
"integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==",
"requires": {
"@achrinza/node-ipc": "^9.2.5",
"chalk": "^4.1.2",
"execa": "^1.0.0",
"joi": "^17.4.0",
"launch-editor": "^2.2.1",
"lru-cache": "^5.1.1",
"node-ipc": "^9.1.1",
"open": "^6.3.0",
"ora": "^3.4.0",
"lru-cache": "^6.0.0",
"node-fetch": "^2.6.7",
"open": "^8.0.2",
"ora": "^5.3.0",
"read-pkg": "^5.1.1",
"request": "^2.88.2",
"semver": "^6.1.0",
"semver": "^7.3.4",
"strip-ansi": "^6.0.0"
}
},
@@ -12388,10 +12430,152 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"requires": {
"restore-cursor": "^3.1.0"
}
},
"cli-spinners": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
"integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g=="
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
},
"is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"requires": {
"is-docker": "^2.0.0"
}
},
"js-message": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz",
"integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA=="
},
"log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"requires": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
}
},
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"requires": {
"yallist": "^4.0.0"
}
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
},
"node-fetch": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
"onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"requires": {
"mimic-fn": "^2.1.0"
}
},
"open": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
"integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
"requires": {
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
}
},
"ora": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
"integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
"requires": {
"bl": "^4.1.0",
"chalk": "^4.1.0",
"cli-cursor": "^3.1.0",
"cli-spinners": "^2.5.0",
"is-interactive": "^1.0.0",
"is-unicode-supported": "^0.1.0",
"log-symbols": "^4.1.0",
"strip-ansi": "^6.0.0",
"wcwidth": "^1.0.1"
}
},
"restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"requires": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
}
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
"version": "7.3.7",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
"integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"requires": {
"lru-cache": "^6.0.0"
}
},
"strip-ansi": {
"version": "6.0.1",
@@ -12400,6 +12584,38 @@
"requires": {
"ansi-regex": "^5.0.1"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"requires": {
"has-flag": "^4.0.0"
}
},
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
@@ -12605,11 +12821,6 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -13127,13 +13338,13 @@
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
},
"amplitude-js": {
"version": "8.18.5",
"resolved": "https://registry.npmjs.org/amplitude-js/-/amplitude-js-8.18.5.tgz",
"integrity": "sha512-s43q4qKd7kvhYESQhYvyKDKUM1PpyAyoOFFlyMuFfQHRxyeDmZRhcfzrKnOhbrLhFxSWtPc0VEeh9tajJRNe5Q==",
"version": "8.21.1",
"resolved": "https://registry.npmjs.org/amplitude-js/-/amplitude-js-8.21.1.tgz",
"integrity": "sha512-02S0EWLTkCYurpKx6o6K7+BbtVHzhCTHDM+jgvCAV5VbbsXdhLqVY7Q6NtAF+Wb8phb9K0GSW1SuDKPy4TY9OA==",
"requires": {
"@amplitude/analytics-connector": "1.4.4",
"@amplitude/analytics-connector": "^1.4.5",
"@amplitude/ua-parser-js": "0.7.31",
"@amplitude/utils": "^1.0.5",
"@amplitude/utils": "^1.10.1",
"@babel/runtime": "^7.3.4",
"blueimp-md5": "^2.10.0",
"query-string": "5"
@@ -13214,11 +13425,6 @@
}
}
},
"ansi-html": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
"integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
},
"ansi-html-community": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
@@ -13831,11 +14037,29 @@
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
"axios": {
"version": "0.25.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz",
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
"integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
"requires": {
"follow-redirects": "^1.14.7"
"follow-redirects": "^1.14.9",
"form-data": "^4.0.0"
},
"dependencies": {
"follow-redirects": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
}
}
},
"axios-progress-bar": {
@@ -14477,6 +14701,37 @@
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
},
"bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"requires": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
},
"dependencies": {
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"bluebird": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz",
@@ -15880,9 +16135,9 @@
}
},
"core-js": {
"version": "3.24.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.24.1.tgz",
"integrity": "sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg=="
"version": "3.26.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.0.tgz",
"integrity": "sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw=="
},
"core-js-compat": {
"version": "3.11.0",
@@ -16334,7 +16589,7 @@
"de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
"integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
},
"debug": {
"version": "4.1.1",
@@ -16500,6 +16755,11 @@
"clone": "^1.0.2"
}
},
"define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
"integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="
},
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -16812,9 +17072,9 @@
}
},
"dompurify": {
"version": "2.3.10",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.10.tgz",
"integrity": "sha512-o7Fg/AgC7p/XpKjf/+RC3Ok6k4St5F7Q6q6+Nnm3p2zGWioAY6dh0CbbuwOhH2UcSzKsdniE/YnE2/92JcsA+g=="
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.1.tgz",
"integrity": "sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA=="
},
"domutils": {
"version": "1.7.0",
@@ -18455,11 +18715,6 @@
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"optional": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
@@ -18477,14 +18732,6 @@
"minipass": "^2.2.1"
}
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.1.1",
"bundled": true,
@@ -18607,13 +18854,6 @@
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"bundled": true,
"optional": true
}
}
},
"readable-stream": {
@@ -20147,9 +20387,9 @@
"integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
},
"intro.js": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/intro.js/-/intro.js-5.1.0.tgz",
"integrity": "sha512-zwWl/duTh00eeNcZRU4o4/xxloNYPFKs4n4lMRDNx59jZr+qRI0jSOnzqYMOuVftD4beGrmxBHz4k8qp9/dCMA=="
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/intro.js/-/intro.js-6.0.0.tgz",
"integrity": "sha512-ZUiR6BoLSvPSlLG0boewnWVgji1fE1gBvP/pyw5pgCKXEDQz1mMeUxarggClPNs71UTq364LwSk9zxz17A9gaQ=="
},
"invariant": {
"version": "2.2.4",
@@ -20411,6 +20651,11 @@
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz",
"integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA=="
},
"is-interactive": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
},
"is-map": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
@@ -20550,6 +20795,11 @@
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
},
"is-weakref": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
@@ -20566,7 +20816,7 @@
"is-window": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz",
"integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg=="
"integrity": "sha1-LIlspT25feRdPDMTOmXYyfVjSA0="
},
"is-windows": {
"version": "1.0.2",
@@ -20667,10 +20917,37 @@
}
}
},
"joi": {
"version": "17.6.0",
"resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz",
"integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==",
"requires": {
"@hapi/hoek": "^9.0.0",
"@hapi/topo": "^5.0.0",
"@sideway/address": "^4.1.3",
"@sideway/formula": "^3.0.0",
"@sideway/pinpoint": "^2.0.0"
},
"dependencies": {
"@hapi/hoek": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
"integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="
},
"@hapi/topo": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
"integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
"requires": {
"@hapi/hoek": "^9.0.0"
}
}
}
},
"jquery": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
"integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz",
"integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw=="
},
"js-message": {
"version": "1.0.5",
@@ -20860,13 +21137,6 @@
"integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
"requires": {
"minimist": "^1.2.5"
},
"dependencies": {
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
}
}
},
"jsonfile": {
@@ -21529,9 +21799,9 @@
}
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g=="
},
"minipass": {
"version": "3.1.1",
@@ -21625,18 +21895,11 @@
}
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"requires": {
"minimist": "0.0.8"
},
"dependencies": {
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
}
"minimist": "^1.2.6"
}
},
"mocha": {
@@ -21707,11 +21970,6 @@
"path-exists": "^3.0.0"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"mkdirp": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
@@ -23175,19 +23433,6 @@
"requires": {
"ms": "^2.1.1"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"mkdirp": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"requires": {
"minimist": "^1.2.5"
}
}
}
},
@@ -26120,9 +26365,9 @@
}
},
"smartbanner.js": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/smartbanner.js/-/smartbanner.js-1.19.0.tgz",
"integrity": "sha512-F9vR7AIbyg2myhP9DrNYsKlKNqLuen+FFAu5R7SAF9IyCxNQkjpGUmiHbEaEVFTLw8J9hPmVC2lyGEJlOXTXKQ=="
"version": "1.19.1",
"resolved": "https://registry.npmjs.org/smartbanner.js/-/smartbanner.js-1.19.1.tgz",
"integrity": "sha512-x3alFTlk6pLuqrm9PrYQv1E+86CrEIgPf/KJ+nP5342BmOWstbdR8OwD3TPmM56zHQm4MEr/eoqbEcfTKdvdKw=="
},
"snapdragon": {
"version": "0.8.2",
@@ -28222,7 +28467,7 @@
"uuid-browser": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz",
"integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg=="
"integrity": "sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA="
},
"v8-compile-cache": {
"version": "2.1.0",
@@ -28306,23 +28551,23 @@
"integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk="
},
"vue": {
"version": "2.7.8",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.8.tgz",
"integrity": "sha512-ncwlZx5qOcn754bCu5/tS/IWPhXHopfit79cx+uIlLMyt3vCMGcXai5yCG5y+I6cDmEj4ukRYyZail9FTQh7lQ==",
"version": "2.7.10",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.10.tgz",
"integrity": "sha512-HmFC70qarSHPXcKtW8U8fgIkF6JGvjEmDiVInTkKZP0gIlEPhlVlcJJLkdGIDiNkIeA2zJPQTWJUI4iWe+AVfg==",
"requires": {
"@vue/compiler-sfc": "2.7.8",
"@vue/compiler-sfc": "2.7.10",
"csstype": "^3.1.0"
},
"dependencies": {
"@babel/parser": {
"version": "7.18.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
"integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
"version": "7.18.13",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
"integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg=="
},
"@vue/compiler-sfc": {
"version": "2.7.8",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.8.tgz",
"integrity": "sha512-2DK4YWKfgLnW9VDR9gnju1gcYRk3flKj8UNsms7fsRmFcg35slVTZEkqwBtX+wJBXaamFfn6NxSsZh3h12Ix/Q==",
"version": "2.7.10",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.10.tgz",
"integrity": "sha512-55Shns6WPxlYsz4WX7q9ZJBL77sKE1ZAYNYStLs6GbhIOMrNtjMvzcob6gu3cGlfpCR4bT7NXgyJ3tly2+Hx8Q==",
"requires": {
"@babel/parser": "^7.18.4",
"postcss": "^8.4.14",
@@ -28340,9 +28585,9 @@
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
},
"postcss": {
"version": "8.4.14",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
"integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
"version": "8.4.16",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
"integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
"requires": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
@@ -28626,9 +28871,9 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"loader-utils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
"integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
@@ -28655,9 +28900,9 @@
}
},
"vue-router": {
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.4.tgz",
"integrity": "sha512-x+/DLAJZv2mcQ7glH2oV9ze8uPwcI+H+GgTgTmb5I55bCgY3+vXWIsqbYUzbBSZnwFHEJku4eoaH/x98veyymQ=="
"version": "3.6.5",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz",
"integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ=="
},
"vue-style-loader": {
"version": "4.1.3",
@@ -28676,9 +28921,9 @@
}
},
"vue-template-compiler": {
"version": "2.7.8",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.8.tgz",
"integrity": "sha512-eQqdcUpJKJpBRPDdxCNsqUoT0edNvdt1jFjtVnVS/LPPmr0BU2jWzXlrf6BVMeODtdLewB3j8j3WjNiB+V+giw==",
"version": "2.7.10",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.10.tgz",
"integrity": "sha512-QO+8R9YRq1Gudm8ZMdo/lImZLJVUIAM8c07Vp84ojdDAf8HmPJc7XB556PcXV218k2AkKznsRz6xB5uOjAC4EQ==",
"requires": {
"de-indent": "^1.0.2",
"he": "^1.2.0"
@@ -28903,19 +29148,6 @@
"webpack-sources": "^1.4.1"
},
"dependencies": {
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"mkdirp": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"requires": {
"minimist": "^1.2.5"
}
},
"serialize-javascript": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
@@ -29009,11 +29241,11 @@
}
},
"webpack-dev-server": {
"version": "3.11.2",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz",
"integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==",
"version": "3.11.3",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz",
"integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==",
"requires": {
"ansi-html": "0.0.7",
"ansi-html-community": "0.0.8",
"bonjour": "^3.5.0",
"chokidar": "^2.1.8",
"compression": "^1.7.4",
@@ -29051,7 +29283,7 @@
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="
},
"http-proxy-middleware": {
"version": "0.19.1",
@@ -29077,7 +29309,7 @@
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"requires": {
"ansi-regex": "^2.0.0"
}
+12 -11
View File
@@ -21,19 +21,19 @@
"@storybook/vue": "6.3.13",
"@vue/cli-plugin-babel": "^4.5.15",
"@vue/cli-plugin-eslint": "^4.5.19",
"@vue/cli-plugin-router": "^4.5.15",
"@vue/cli-plugin-router": "^5.0.8",
"@vue/cli-plugin-unit-mocha": "^4.5.15",
"@vue/cli-service": "^4.5.15",
"@vue/test-utils": "1.0.0-beta.29",
"amplitude-js": "^8.18.5",
"axios": "^0.25.0",
"amplitude-js": "^8.21.1",
"axios": "^0.27.2",
"axios-progress-bar": "^1.2.0",
"babel-eslint": "^10.1.0",
"bootstrap": "^4.6.0",
"bootstrap-vue": "^2.22.0",
"chai": "^4.3.6",
"core-js": "^3.24.1",
"dompurify": "^2.3.10",
"core-js": "^3.26.0",
"dompurify": "^2.4.1",
"eslint": "^6.8.0",
"eslint-config-habitrpg": "^6.2.0",
"eslint-plugin-mocha": "^5.3.0",
@@ -41,25 +41,26 @@
"habitica-markdown": "^3.0.0",
"hellojs": "^1.19.5",
"inspectpack": "^4.7.1",
"intro.js": "^5.1.0",
"jquery": "^3.6.0",
"intro.js": "^6.0.0",
"jquery": "^3.6.1",
"lodash": "^4.17.21",
"moment": "^2.29.4",
"nconf": "^0.12.0",
"sass": "^1.34.0",
"sass-loader": "^8.0.2",
"smartbanner.js": "^1.19.0",
"smartbanner.js": "^1.19.1",
"stopword": "^2.0.5",
"svg-inline-loader": "^0.8.2",
"svg-url-loader": "^7.1.1",
"svgo": "^1.3.2",
"svgo-loader": "^2.2.1",
"uuid": "^8.3.2",
"validator": "^13.7.0",
"vue": "^2.7.8",
"vue": "^2.7.10",
"vue-cli-plugin-storybook": "2.1.0",
"vue-mugen-scroll": "^0.2.6",
"vue-router": "^3.5.4",
"vue-template-compiler": "^2.7.8",
"vue-router": "^3.6.5",
"vue-template-compiler": "^2.7.10",
"vuedraggable": "^2.24.3",
"vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0",
"webpack": "^4.46.0"
@@ -63,6 +63,11 @@
width: 48px;
height: 56px;
}
.achievement-boneToPick2x {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-boneToPick2x.png');
width: 68px;
height: 68px;
}
.achievement-boot2x {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/achievement-boot2x.png');
width: 48px;
@@ -509,6 +514,11 @@
width: 60px;
height: 60px;
}
.background_among_giant_mushrooms {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_among_giant_mushrooms.png');
width: 141px;
height: 147px;
}
.background_animal_clouds {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_animal_clouds.png');
width: 141px;
@@ -549,6 +559,11 @@
width: 141px;
height: 147px;
}
.background_autumn_bridge {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_autumn_bridge.png');
width: 141px;
height: 147px;
}
.background_autumn_flower_garden {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_autumn_flower_garden.png');
width: 141px;
@@ -675,6 +690,11 @@
width: 141px;
height: 147px;
}
.background_branches_of_a_holiday_tree {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_branches_of_a_holiday_tree.png');
width: 141px;
height: 147px;
}
.background_brick_wall_with_ivy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_brick_wall_with_ivy.png');
width: 141px;
@@ -715,6 +735,11 @@
width: 141px;
height: 147px;
}
.background_cemetery_gate {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_cemetery_gate.png');
width: 141px;
height: 147px;
}
.background_champions_colosseum {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_champions_colosseum.png');
width: 141px;
@@ -1289,6 +1314,11 @@
width: 141px;
height: 147px;
}
.background_inside_a_crystal {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_inside_a_crystal.png');
width: 141px;
height: 147px;
}
.background_inside_a_potion_bottle {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_inside_a_potion_bottle.png');
width: 141px;
@@ -1359,6 +1389,11 @@
width: 141px;
height: 147px;
}
.background_mask_makers_workshop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_mask_makers_workshop.png');
width: 141px;
height: 147px;
}
.background_meandering_cave {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_meandering_cave.png');
width: 141px;
@@ -1404,6 +1439,11 @@
width: 141px;
height: 147px;
}
.background_misty_autumn_forest {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_misty_autumn_forest.png');
width: 141px;
height: 147px;
}
.background_monster_makers_workshop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_monster_makers_workshop.png');
width: 141px;
@@ -1684,6 +1724,11 @@
width: 141px;
height: 147px;
}
.background_snowy_village {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_snowy_village.png');
width: 141px;
height: 147px;
}
.background_south_pole {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_south_pole.png');
width: 141px;
@@ -1714,6 +1759,11 @@
width: 141px;
height: 147px;
}
.background_spooky_ruins {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_spooky_ruins.png');
width: 141px;
height: 147px;
}
.background_spooky_scarecrow_field {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_spooky_scarecrow_field.png');
width: 141px;
@@ -2080,6 +2130,11 @@
width: 60px;
height: 60px;
}
.icon_background_among_giant_mushrooms {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_among_giant_mushrooms.png');
width: 68px;
height: 68px;
}
.icon_background_animal_clouds {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_animal_clouds.png');
width: 68px;
@@ -2120,6 +2175,11 @@
width: 68px;
height: 68px;
}
.icon_background_autumn_bridge {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_autumn_bridge.png');
width: 68px;
height: 68px;
}
.icon_background_autumn_flower_garden {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_autumn_flower_garden.png');
width: 68px;
@@ -2246,6 +2306,11 @@
width: 68px;
height: 68px;
}
.icon_background_branches_of_a_holiday_tree {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_branches_of_a_holiday_tree.png');
width: 68px;
height: 68px;
}
.icon_background_brick_wall_with_ivy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_brick_wall_with_ivy.png');
width: 68px;
@@ -2286,6 +2351,11 @@
width: 68px;
height: 68px;
}
.icon_background_cemetery_gate {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_cemetery_gate.png');
width: 60px;
height: 60px;
}
.icon_background_champions_colosseum {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_champions_colosseum.png');
width: 68px;
@@ -2865,6 +2935,11 @@
width: 68px;
height: 68px;
}
.icon_background_inside_a_crystal {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_inside_a_crystal.png');
width: 68px;
height: 68px;
}
.icon_background_inside_a_potion_bottle {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_inside_a_potion_bottle.png');
width: 68px;
@@ -2935,6 +3010,11 @@
width: 68px;
height: 68px;
}
.icon_background_mask_makers_workshop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_mask_makers_workshop.png');
width: 68px;
height: 68px;
}
.icon_background_meandering_cave {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_meandering_cave.png');
width: 68px;
@@ -2980,6 +3060,11 @@
width: 68px;
height: 68px;
}
.icon_background_misty_autumn_forest {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_misty_autumn_forest.png');
width: 68px;
height: 68px;
}
.icon_background_monster_makers_workshop {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_monster_makers_workshop.png');
width: 68px;
@@ -3260,6 +3345,11 @@
width: 68px;
height: 68px;
}
.icon_background_snowy_village {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_snowy_village.png');
width: 68px;
height: 68px;
}
.icon_background_south_pole {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_south_pole.png');
width: 68px;
@@ -3290,6 +3380,11 @@
width: 68px;
height: 68px;
}
.icon_background_spooky_ruins {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_spooky_ruins.png');
width: 68px;
height: 68px;
}
.icon_background_spooky_scarecrow_field {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_spooky_scarecrow_field.png');
width: 68px;
@@ -18340,6 +18435,11 @@
width: 90px;
height: 90px;
}
.broad_armor_armoire_jewelersApron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_jewelersApron.png');
width: 114px;
height: 90px;
}
.broad_armor_armoire_lamplightersGreatcoat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_lamplightersGreatcoat.png');
width: 114px;
@@ -18450,6 +18550,11 @@
width: 114px;
height: 90px;
}
.broad_armor_armoire_sheetGhostCostume {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_sheetGhostCostume.png');
width: 114px;
height: 90px;
}
.broad_armor_armoire_shepherdRobes {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_shepherdRobes.png');
width: 90px;
@@ -18550,6 +18655,11 @@
width: 90px;
height: 90px;
}
.eyewear_armoire_jewelersEyeLoupe {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/eyewear_armoire_jewelersEyeLoupe.png');
width: 114px;
height: 90px;
}
.eyewear_armoire_plagueDoctorMask {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/eyewear_armoire_plagueDoctorMask.png');
width: 90px;
@@ -19025,6 +19135,11 @@
width: 114px;
height: 90px;
}
.shield_armoire_bubblingCauldron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_bubblingCauldron.png');
width: 114px;
height: 90px;
}
.shield_armoire_chocolateFood {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_chocolateFood.png');
width: 90px;
@@ -19125,6 +19240,11 @@
width: 90px;
height: 90px;
}
.shield_armoire_jewelersPliers {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_jewelersPliers.png');
width: 114px;
height: 90px;
}
.shield_armoire_lifeBuoy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_lifeBuoy.png');
width: 114px;
@@ -19550,6 +19670,11 @@
width: 68px;
height: 68px;
}
.shop_armor_armoire_jewelersApron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_jewelersApron.png');
width: 68px;
height: 68px;
}
.shop_armor_armoire_lamplightersGreatcoat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_lamplightersGreatcoat.png');
width: 68px;
@@ -19660,6 +19785,11 @@
width: 68px;
height: 68px;
}
.shop_armor_armoire_sheetGhostCostume {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_sheetGhostCostume.png');
width: 68px;
height: 68px;
}
.shop_armor_armoire_shepherdRobes {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_shepherdRobes.png');
width: 68px;
@@ -19775,6 +19905,11 @@
width: 68px;
height: 68px;
}
.shop_eyewear_armoire_jewelersEyeLoupe {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_eyewear_armoire_jewelersEyeLoupe.png');
width: 68px;
height: 68px;
}
.shop_eyewear_armoire_plagueDoctorMask {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_eyewear_armoire_plagueDoctorMask.png');
width: 68px;
@@ -20250,6 +20385,11 @@
width: 68px;
height: 68px;
}
.shop_shield_armoire_bubblingCauldron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_bubblingCauldron.png');
width: 68px;
height: 68px;
}
.shop_shield_armoire_chocolateFood {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_chocolateFood.png');
width: 68px;
@@ -20350,6 +20490,11 @@
width: 68px;
height: 68px;
}
.shop_shield_armoire_jewelersPliers {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_jewelersPliers.png');
width: 68px;
height: 68px;
}
.shop_shield_armoire_lifeBuoy {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_lifeBuoy.png');
width: 68px;
@@ -20675,6 +20820,11 @@
width: 68px;
height: 68px;
}
.shop_weapon_armoire_finelyCutGem {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_finelyCutGem.png');
width: 68px;
height: 68px;
}
.shop_weapon_armoire_floridFan {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_floridFan.png');
width: 68px;
@@ -20790,6 +20940,11 @@
width: 68px;
height: 68px;
}
.shop_weapon_armoire_magicSpatula {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_magicSpatula.png');
width: 68px;
height: 68px;
}
.shop_weapon_armoire_magnifyingGlass {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_magnifyingGlass.png');
width: 68px;
@@ -21225,6 +21380,11 @@
width: 90px;
height: 90px;
}
.slim_armor_armoire_jewelersApron {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_jewelersApron.png');
width: 114px;
height: 90px;
}
.slim_armor_armoire_lamplightersGreatcoat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_lamplightersGreatcoat.png');
width: 114px;
@@ -21335,6 +21495,11 @@
width: 114px;
height: 90px;
}
.slim_armor_armoire_sheetGhostCostume {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_sheetGhostCostume.png');
width: 114px;
height: 90px;
}
.slim_armor_armoire_shepherdRobes {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_shepherdRobes.png');
width: 90px;
@@ -21550,6 +21715,11 @@
width: 114px;
height: 90px;
}
.weapon_armoire_finelyCutGem {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_finelyCutGem.png');
width: 114px;
height: 90px;
}
.weapon_armoire_floridFan {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_floridFan.png');
width: 114px;
@@ -21665,6 +21835,11 @@
width: 90px;
height: 90px;
}
.weapon_armoire_magicSpatula {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_magicSpatula.png');
width: 114px;
height: 90px;
}
.weapon_armoire_magnifyingGlass {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_magnifyingGlass.png');
width: 114px;
@@ -22875,6 +23050,26 @@
width: 114px;
height: 90px;
}
.broad_armor_special_fall2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2022Healer.png');
width: 114px;
height: 90px;
}
.broad_armor_special_fall2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2022Mage.png');
width: 114px;
height: 90px;
}
.broad_armor_special_fall2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2022Rogue.png');
width: 114px;
height: 90px;
}
.broad_armor_special_fall2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2022Warrior.png');
width: 114px;
height: 90px;
}
.broad_armor_special_fallHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fallHealer.png');
width: 90px;
@@ -23045,6 +23240,26 @@
width: 114px;
height: 90px;
}
.head_special_fall2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fall2022Healer.png');
width: 114px;
height: 90px;
}
.head_special_fall2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fall2022Mage.png');
width: 114px;
height: 90px;
}
.head_special_fall2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fall2022Rogue.png');
width: 114px;
height: 90px;
}
.head_special_fall2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fall2022Warrior.png');
width: 114px;
height: 90px;
}
.head_special_fallHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fallHealer.png');
width: 90px;
@@ -23170,6 +23385,21 @@
width: 114px;
height: 90px;
}
.shield_special_fall2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_fall2022Healer.png');
width: 114px;
height: 90px;
}
.shield_special_fall2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_fall2022Rogue.png');
width: 114px;
height: 90px;
}
.shield_special_fall2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_fall2022Warrior.png');
width: 114px;
height: 90px;
}
.shield_special_fallHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_fallHealer.png');
width: 90px;
@@ -23325,6 +23555,26 @@
width: 68px;
height: 68px;
}
.shop_armor_special_fall2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fall2022Healer.png');
width: 68px;
height: 68px;
}
.shop_armor_special_fall2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fall2022Mage.png');
width: 68px;
height: 68px;
}
.shop_armor_special_fall2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fall2022Rogue.png');
width: 68px;
height: 68px;
}
.shop_armor_special_fall2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fall2022Warrior.png');
width: 68px;
height: 68px;
}
.shop_armor_special_fallHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fallHealer.png');
width: 68px;
@@ -23495,6 +23745,26 @@
width: 68px;
height: 68px;
}
.shop_head_special_fall2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fall2022Healer.png');
width: 68px;
height: 68px;
}
.shop_head_special_fall2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fall2022Mage.png');
width: 68px;
height: 68px;
}
.shop_head_special_fall2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fall2022Rogue.png');
width: 68px;
height: 68px;
}
.shop_head_special_fall2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fall2022Warrior.png');
width: 68px;
height: 68px;
}
.shop_head_special_fallHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fallHealer.png');
width: 68px;
@@ -23620,6 +23890,21 @@
width: 68px;
height: 68px;
}
.shop_shield_special_fall2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_fall2022Healer.png');
width: 68px;
height: 68px;
}
.shop_shield_special_fall2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_fall2022Rogue.png');
width: 68px;
height: 68px;
}
.shop_shield_special_fall2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_fall2022Warrior.png');
width: 68px;
height: 68px;
}
.shop_shield_special_fallHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_fallHealer.png');
width: 68px;
@@ -23775,6 +24060,26 @@
width: 68px;
height: 68px;
}
.shop_weapon_special_fall2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fall2022Healer.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_fall2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fall2022Mage.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_fall2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fall2022Rogue.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_fall2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fall2022Warrior.png');
width: 68px;
height: 68px;
}
.shop_weapon_special_fallHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fallHealer.png');
width: 68px;
@@ -23935,6 +24240,26 @@
width: 114px;
height: 90px;
}
.slim_armor_special_fall2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fall2022Healer.png');
width: 114px;
height: 90px;
}
.slim_armor_special_fall2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fall2022Mage.png');
width: 114px;
height: 90px;
}
.slim_armor_special_fall2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fall2022Rogue.png');
width: 114px;
height: 90px;
}
.slim_armor_special_fall2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fall2022Warrior.png');
width: 114px;
height: 90px;
}
.slim_armor_special_fallHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fallHealer.png');
width: 90px;
@@ -24095,6 +24420,26 @@
width: 114px;
height: 90px;
}
.weapon_special_fall2022Healer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fall2022Healer.png');
width: 114px;
height: 90px;
}
.weapon_special_fall2022Mage {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fall2022Mage.png');
width: 114px;
height: 90px;
}
.weapon_special_fall2022Rogue {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fall2022Rogue.png');
width: 114px;
height: 90px;
}
.weapon_special_fall2022Warrior {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fall2022Warrior.png');
width: 114px;
height: 90px;
}
.weapon_special_fallHealer {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fallHealer.png');
width: 90px;
@@ -27090,6 +27435,101 @@
width: 114px;
height: 90px;
}
.broad_armor_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_202210.png');
width: 117px;
height: 120px;
}
.head_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_mystery_202210.png');
width: 117px;
height: 120px;
}
.shop_armor_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_mystery_202210.png');
width: 68px;
height: 68px;
}
.shop_head_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_mystery_202210.png');
width: 68px;
height: 68px;
}
.shop_set_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202210.png');
width: 68px;
height: 68px;
}
.slim_armor_mystery_202210 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_mystery_202210.png');
width: 117px;
height: 120px;
}
.head_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_mystery_202211.png');
width: 114px;
height: 90px;
}
.shop_head_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_mystery_202211.png');
width: 68px;
height: 68px;
}
.shop_set_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202211.png');
width: 68px;
height: 68px;
}
.shop_weapon_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_mystery_202211.png');
width: 68px;
height: 68px;
}
.weapon_mystery_202211 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_mystery_202211.png');
width: 114px;
height: 90px;
}
.broad_armor_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_202212.png');
width: 114px;
height: 90px;
}
.headAccessory_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_mystery_202212.png');
width: 114px;
height: 90px;
}
.shop_armor_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_mystery_202212.png');
width: 68px;
height: 68px;
}
.shop_headAccessory_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_mystery_202212.png');
width: 68px;
height: 68px;
}
.shop_set_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202212.png');
width: 68px;
height: 68px;
}
.shop_weapon_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_mystery_202212.png');
width: 68px;
height: 68px;
}
.slim_armor_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_mystery_202212.png');
width: 114px;
height: 90px;
}
.weapon_mystery_202212 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_mystery_202212.png');
width: 114px;
height: 90px;
}
.broad_armor_mystery_301404 {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png');
width: 90px;
+12 -8
View File
@@ -180,8 +180,8 @@ input, textarea, input.form-control, textarea.form-control {
}
// used in checkboxes and radios
$bg-focused-active-control: #4f2993;
$bg-disabled-control: #34303a;
$bg-focused-active-control: $purple-200;
$bg-disabled-control: $gray-10;
// custom control
.custom-control {
@@ -231,17 +231,21 @@ $bg-disabled-control: #34303a;
background-color: inherit;
}
&:focus:not(:checked):not(:disabled)~.custom-control-label::before, &:active:not(:checked):not(:disabled)~.custom-control-label::before {
box-shadow: 0 0 0 6px rgba($bg-focused-active-control, 0.1);
&:focus:not(:checked):not(:disabled)~.custom-control-label::before,
&:active:not(:checked):not(:disabled)~.custom-control-label::before {
border: 2px solid $gray-300;
box-shadow: 0 0 0 2px rgba(146, 92, 243, 0.5);
}
&:focus:checked:not(:disabled)~.custom-control-label::before, &:active:checked:not(:disabled)~.custom-control-label::before {
box-shadow: 0 0 0 6px rgba($bg-focused-active-control, 0.1);
border-color: $purple-400;
&:focus:checked:not(:disabled)~.custom-control-label::before,
&:active:checked:not(:disabled)~.custom-control-label::before {
box-shadow: 0 0 0 2px rgba(146, 92, 243, 0.5);
border-color: 2 px solid $purple-400;
background-color: $purple-400;
}
&:focus:disabled~.custom-control-label::before, &:active:disabled~.custom-control-label::before {
&:focus:disabled~.custom-control-label::before,
&:active:disabled~.custom-control-label::before {
box-shadow: 0 0 0 6px rgba($bg-disabled-control, 0.1);
}
+2 -2
View File
@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="10" viewBox="0 0 13 10">
<path fill-rule="evenodd" d="M4.662 9.832c-.312 0-.61-.123-.831-.344L0 5.657l1.662-1.662 2.934 2.934L10.534 0l1.785 1.529-6.764 7.893a1.182 1.182 0 0 1-.848.409l-.045.001"/>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M6.54,13c-.3,0-.59-.13-.81-.35l-3.73-3.9,1.62-1.69,2.86,2.98L12.26,3l1.74,1.56L7.41,12.58c-.21,.25-.51,.4-.83,.42-.01,0-.03,0-.04,0Z" fill-rule="evenodd"/>
</svg>

Before

Width:  |  Height:  |  Size: 268 B

After

Width:  |  Height:  |  Size: 236 B

+2 -2
View File
@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="16" viewBox="0 0 8 16">
<path fill-rule="evenodd" d="M7.145 8.006H4.903V16H1.58V8.006H0V5.182h1.58V3.354C1.58 2.045 2.202 0 4.933 0l2.461.01v2.742H5.608c-.291 0-.705.145-.705.77v1.66h2.533l-.291 2.824z"/>
<svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M20,0H4C1.79,0,0,1.79,0,4V20c0,2.21,1.79,4,4,4H20c2.21,0,4-1.79,4-4V4c0-2.21-1.79-4-4-4Zm-3.72,6.66h-1.26c-1.24,0-1.63,.77-1.63,1.56v1.88h2.78l-.44,2.9h-2.33v7h-3.13v-7h-2.54v-2.9h2.54v-2.21c0-2.51,1.5-3.9,3.78-3.9,1.1,0,2.24,.2,2.24,.2v2.47Z" fill-rule="evenodd"/>
</svg>

Before

Width:  |  Height:  |  Size: 274 B

After

Width:  |  Height:  |  Size: 354 B

+10
View File
@@ -0,0 +1,10 @@
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<path fill="#DE3F3F" d="M0 5.667 3.333 1h9.334L16 5.667l-8 8.666z"/>
<path fill="#FFF" opacity=".25" d="M4.667 5.533 4 2.333h4zM11.333 5.533l.667-3.2H8z"/>
<path fill="#FFF" opacity=".5" d="M4.667 5.533 8 2.333l3.333 3.2zM1.733 5.533 4 2.333l.667 3.2z"/>
<path fill="#34313A" opacity=".11" d="M14.267 5.533 12 2.333l-.667 3.2zM1.733 5.533h2.934L8 12.4z"/>
<path fill="#FFF" opacity=".5" d="M14.267 5.533h-2.934L8 12.4z"/>
<path fill="#FFF" opacity=".25" d="M4.667 5.533h6.666L8 12.4z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 675 B

@@ -0,0 +1,10 @@
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<path d="M3 12.606v1.778c0 .208.093.408.262.53 1.842 1.347 6.923 1.347 8.766 0a.655.655 0 0 0 .26-.53v-1.778c0-1.621-.831-3.177-2.091-4.104a.666.666 0 0 1 0-1.08c1.26-.927 2.092-2.483 2.092-4.105V1.54a.652.652 0 0 0-.261-.53c-1.843-1.346-6.924-1.346-8.766 0A.65.65 0 0 0 3 1.54v1.777c0 1.622.832 3.178 2.092 4.105.368.27.368.81 0 1.08C3.832 9.429 3 10.985 3 12.606" fill="#F19595"/>
<path d="M7.644 1.327c1.51 0 2.684.274 3.318.587v1.403c0 1.169-.594 2.332-1.551 3.036a2.006 2.006 0 0 0-.818 1.609c0 .63.305 1.232.817 1.608.958.705 1.552 1.868 1.552 3.036v1.404c-.634.313-1.809.587-3.318.587-1.508 0-2.683-.274-3.317-.587v-1.404c0-1.168.594-2.331 1.551-3.035.513-.377.817-.978.817-1.609 0-.63-.304-1.232-.816-1.609-.958-.704-1.552-1.867-1.552-3.036V1.914c.634-.313 1.809-.587 3.317-.587" fill-opacity=".9" fill="#FFF"/>
<path d="M7.797 2.324c-1.132 0-2.331.105-2.343.385-.01.226-.005.664.914 1.13.893.453 1.06 1.282 1.546 1.282.564 0 .596-.477 1.284-.95.71-.488.823-1.148.815-1.408-.011-.363-1.084-.439-2.216-.439" fill="#DE3F3F"/>
<path d="M9.198 4.17c.71-.487.823-1.146.815-1.407-.009-.288-.684-.395-1.526-.427.236.12.543.377.467.88-.078.525-.904 1.105-.77 1.568.025.09.069.162.124.221.247-.17.408-.502.89-.835" fill="#B01515"/>
<path d="M7.644 9.17c-.344 0-.433.628-.933 1.018-.613.478-1.196 1.067-1.356 1.914-.131.698-.012.785.148.834.16.049 1.386.257 2.588 0 1.203-.258 1.87-.737 1.755-1.227-.111-.466-.448-.865-1.068-1.325-.593-.44-.79-1.214-1.134-1.214" fill="#DE3F3F"/>
<path d="M5.503 12.936c.16.05 1.386.257 2.588 0 .956-.205 1.574-.55 1.729-.929a.096.096 0 0 0-.005-.023c-.067-.256-1.073-.41-2.325-.207-1.192.192-2.158.586-2.153 1.03.037.08.097.108.166.129" fill="#B01515"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

+2 -2
View File
@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M8 0c2.173 0 2.445.01 3.298.048.852.04 1.433.174 1.942.372.526.205.973.478 1.418.922.444.445.717.892.922 1.418.198.509.333 1.09.372 1.942C15.99 5.555 16 5.827 16 8s-.01 2.445-.048 3.298c-.04.852-.174 1.433-.372 1.942a3.924 3.924 0 0 1-.922 1.418 3.924 3.924 0 0 1-1.418.922c-.509.198-1.09.333-1.942.372-.853.04-1.125.048-3.298.048s-2.445-.009-3.298-.048c-.852-.04-1.433-.174-1.942-.372a3.924 3.924 0 0 1-1.418-.922A3.924 3.924 0 0 1 .42 13.24c-.198-.509-.333-1.09-.372-1.942C.01 10.445 0 10.173 0 8s.01-2.445.048-3.298C.088 3.85.222 3.269.42 2.76c.205-.526.478-.973.922-1.418A3.924 3.924 0 0 1 2.76.42C3.269.222 3.85.087 4.702.048 5.555.01 5.827 0 8 0zm0 3.892a4.108 4.108 0 1 0 0 8.216 4.108 4.108 0 0 0 0-8.216zm5.23-.162a.96.96 0 1 0-1.92 0 .96.96 0 0 0 1.92 0zM8 10.667a2.666 2.666 0 1 1 0-5.333 2.666 2.666 0 0 1 0 5.333z"/>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M14.67,12A2.67,2.67,0,1,1,12,9.33,2.67,2.67,0,0,1,14.67,12Zm3.89,0c0,1.16.1,3.66-.32,4.71a2.7,2.7,0,0,1-1.52,1.52c-1.06.42-3.55.33-4.72.33s-3.66.09-4.71-.33a2.65,2.65,0,0,1-1.52-1.52c-.42-1.05-.33-3.55-.33-4.71s-.09-3.67.33-4.72A2.65,2.65,0,0,1,7.29,5.76c1-.42,3.55-.32,4.71-.32a18,18,0,0,1,4.72.32,2.7,2.7,0,0,1,1.52,1.52C18.66,8.34,18.56,10.83,18.56,12ZM16.1,12A4.1,4.1,0,1,0,12,16.1,4.09,4.09,0,0,0,16.1,12Zm1.13-4.27a1,1,0,1,0-1,1A1,1,0,0,0,17.23,7.73ZM24,4V20a4,4,0,0,1-4,4H4a4,4,0,0,1-4-4V4A4,4,0,0,1,4,0H20A4,4,0,0,1,24,4ZM19.94,8.7a4.71,4.71,0,0,0-1.29-3.35A4.71,4.71,0,0,0,15.3,4.06C14,4,10,4,8.7,4.06A4.76,4.76,0,0,0,5.35,5.34,4.75,4.75,0,0,0,4.06,8.7C4,10,4,14,4.06,15.3a4.73,4.73,0,0,0,1.29,3.35A4.77,4.77,0,0,0,8.7,19.94c1.32.08,5.28.08,6.6,0a4.71,4.71,0,0,0,3.35-1.29,4.73,4.73,0,0,0,1.29-3.35C20,14,20,10,19.94,8.7Z" />
</svg>

Before

Width:  |  Height:  |  Size: 954 B

After

Width:  |  Height:  |  Size: 914 B

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M20,0H4A4,4,0,0,0,0,4V20a4,4,0,0,0,4,4H20a4,4,0,0,0,4-4V4A4,4,0,0,0,20,0ZM16.68,19a4.47,4.47,0,0,1-3,1C9.86,20,9,17.22,9,15.61v-4.5H7.56a.31.31,0,0,1-.31-.32V8.67a.52.52,0,0,1,.35-.5,4,4,0,0,0,2.63-3.66c0-.34.21-.51.51-.51H13a.31.31,0,0,1,.32.31v3.6h2.59a.31.31,0,0,1,.31.31v2.55a.31.31,0,0,1-.31.32H13.25v4.16c0,1.07.74,1.67,2.13,1.12a.67.67,0,0,1,.4-.07.36.36,0,0,1,.23.25l.68,2C16.75,18.71,16.8,18.89,16.68,19Z" fill-rule="evenodd"/>
</svg>

After

Width:  |  Height:  |  Size: 516 B

+2 -2
View File
@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="13" viewBox="0 0 16 13">
<path fill-rule="evenodd" d="M14.362 3.238c.007.141.01.281.01.424 0 4.338-3.302 9.34-9.34 9.34A9.284 9.284 0 0 1 0 11.527c.257.029.518.045.783.045a6.576 6.576 0 0 0 4.076-1.404 3.288 3.288 0 0 1-3.065-2.28 3.312 3.312 0 0 0 1.481-.056A3.288 3.288 0 0 1 .642 4.613v-.041c.444.246.949.393 1.488.41A3.28 3.28 0 0 1 .67 2.25c0-.602.162-1.166.444-1.651a9.315 9.315 0 0 0 6.766 3.43A3.28 3.28 0 0 1 11.078 0c.943 0 1.797.398 2.395 1.035a6.565 6.565 0 0 0 2.085-.797 3.289 3.289 0 0 1-1.443 1.816A6.543 6.543 0 0 0 16 1.539a6.665 6.665 0 0 1-1.638 1.699"/>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M20,0H4A4,4,0,0,0,0,4V20a4,4,0,0,0,4,4H20a4,4,0,0,0,4-4V4A4,4,0,0,0,20,0ZM18.36,8.74c0,.14,0,.29,0,.43A9.34,9.34,0,0,1,4,17a6.85,6.85,0,0,0,.79,0,6.57,6.57,0,0,0,4.07-1.4A3.29,3.29,0,0,1,5.8,13.39a4.1,4.1,0,0,0,.62,0,3.49,3.49,0,0,0,.86-.11,3.28,3.28,0,0,1-2.63-3.22v0a3.35,3.35,0,0,0,1.48.42A3.29,3.29,0,0,1,4.67,7.76,3.22,3.22,0,0,1,5.12,6.1a9.3,9.3,0,0,0,6.76,3.43,3.67,3.67,0,0,1-.08-.75,3.28,3.28,0,0,1,5.67-2.24,6.54,6.54,0,0,0,2.08-.79,3.22,3.22,0,0,1-1.44,1.8A6.67,6.67,0,0,0,20,7.05,7.31,7.31,0,0,1,18.36,8.74Z" fill-rule="evenodd"/>
</svg>

Before

Width:  |  Height:  |  Size: 645 B

After

Width:  |  Height:  |  Size: 622 B

@@ -22,11 +22,6 @@
Account created:
<strong>{{ hero.auth.timestamps.created | formatDate }}</strong>
</div>
<div>
Most recent cron:
<strong>{{ hero.auth.timestamps.loggedin | formatDate }}</strong>
("auth.timestamps.loggedin")
</div>
<div v-if="cronError">
"lastCron" value:
<strong>{{ hero.lastCron | formatDate }}</strong>
@@ -36,6 +31,19 @@
("auth.timestamps.loggedin" and "lastCron" dates are different).
</span>
</div>
<div class="form-inline">
<div>
Most recent cron:
<strong>{{ hero.auth.timestamps.loggedin | formatDate }}</strong>
("auth.timestamps.loggedin")
</div>
<button
class="btn btn-primary ml-2"
@click="resetCron()"
>
Reset Cron to Yesterday
</button>
</div>
<div class="subsection-start">
Time zone:
<strong>{{ hero.preferences.timezoneOffset | formatTimeZone }}</strong>
@@ -218,6 +226,10 @@ export default {
await this.saveHero({ hero: this.hero, msg: 'API Token' });
this.tokenModified = true;
},
resetCron () {
this.hero.resetCron = true;
this.saveHero({ hero: this.hero, msg: 'Last Cron', clearData: true });
},
},
};
</script>
@@ -17,6 +17,10 @@
:reset-counter="resetCounter"
/>
<subscription-and-perks
:hero="hero"
/>
<cron-and-auth
:hero="hero"
:reset-counter="resetCounter"
@@ -45,6 +49,7 @@
<transactions
:hero="hero"
:reset-counter="resetCounter"
/>
<contributor-details
@@ -97,6 +102,7 @@ import AvatarAndDrops from './avatarAndDrops';
import PrivilegesAndGems from './privilegesAndGems';
import ContributorDetails from './contributorDetails';
import Transactions from './transactions';
import SubscriptionAndPerks from './subscriptionAndPerks';
import { userStateMixin } from '../../../mixins/userState';
@@ -110,6 +116,7 @@ export default {
PrivilegesAndGems,
ContributorDetails,
Transactions,
SubscriptionAndPerks,
},
mixins: [userStateMixin],
data () {
@@ -0,0 +1,155 @@
<template>
<div class="accordion-group">
<h3
class="expand-toggle"
:class="{'open': expand}"
@click="expand = !expand"
>
Subscription, Monthly Perks
</h3>
<div v-if="expand">
<form @submit.prevent="saveHero({ hero, msg: 'Subscription Perks' })">
<div v-if="hero.purchased.plan.paymentMethod">
Payment method:
<strong>{{ hero.purchased.plan.paymentMethod }}</strong>
</div>
<div v-if="hero.purchased.plan.planId">
Payment schedule ("basic-earned" is monthly):
<strong>{{ hero.purchased.plan.planId }}</strong>
</div>
<div v-if="hero.purchased.plan.dateCreated">
Creation date:
<strong>{{ dateFormat(hero.purchased.plan.dateCreated) }}</strong>
</div>
<div>
Termination date:
<strong
v-if="hero.purchased.plan.dateTerminated"
>
{{ dateFormat(hero.purchased.plan.dateTerminated) }}
</strong>
<strong v-else> None </strong>
</div>
<div class="form-inline">
<label>
Consecutive months:
<input
v-model="hero.purchased.plan.consecutive.count"
class="form-control"
type="number"
min="0"
step="1"
>
</label>
</div>
<div>
Months until renewal:
<strong>{{ hero.purchased.plan.consecutive.offset }}</strong>
</div>
<div>
Next Mystic Hourglass:
<strong>{{ nextHourglassDate }}</strong>
</div>
<div class="form-inline">
<label>
Mystic Hourglasses:
<input
v-model="hero.purchased.plan.consecutive.trinkets"
class="form-control"
type="number"
min="0"
step="1"
>
</label>
</div>
<div>
Gem cap:
<strong>{{ hero.purchased.plan.consecutive.gemCapExtra + 25 }}</strong>
</div>
<div class="form-inline">
<label>
Gems bought this month:
<input
v-model="hero.purchased.plan.gemsBought"
class="form-control"
type="number"
min="0"
:max="hero.purchased.plan.consecutive.gemCapExtra + 25"
step="1"
>
</label>
</div>
<div
v-if="hero.purchased.plan.extraMonths > 0"
>
Additional credit (applied upon cancellation):
<strong>{{ hero.purchased.plan.extraMonths }}</strong>
</div>
<div>
Mystery Items:
<span
v-if="hero.purchased.plan.mysteryItems.length > 0"
>
<span
v-for="(item, index) in hero.purchased.plan.mysteryItems"
:key="index"
>
<strong v-if="index < hero.purchased.plan.mysteryItems.length - 1">
{{ item }},
</strong>
<strong v-else> {{ item }} </strong>
</span>
</span>
<span v-else>
<strong>None</strong>
</span>
</div>
<input
type="submit"
value="Save"
class="btn btn-primary mt-1"
>
</form>
</div>
</div>
</template>
<script>
import moment from 'moment';
import saveHero from '../mixins/saveHero';
import { getPlanContext } from '@/../../common/script/cron';
export default {
mixins: [saveHero],
props: {
hero: {
type: Object,
required: true,
},
},
data () {
return {
expand: false,
};
},
computed: {
nextHourglassDate () {
const currentPlanContext = getPlanContext(this.hero, new Date());
return currentPlanContext.nextHourglassDate.format('MMMM');
},
},
watch: {
'hero.purchased.plan.consecutive.count' () { // eslint-disable-line object-shorthand
this.hero.purchased.plan.consecutive.gemCapExtra = Math.min(
Math.floor(this.hero.purchased.plan.consecutive.count / 3) * 5, 25,
);
},
},
methods: {
dateFormat (date) {
return moment(date).format('YYYY/MM/DD');
},
},
};
</script>
@@ -30,6 +30,10 @@ export default {
type: Object,
required: true,
},
resetCounter: {
type: Number,
required: true,
},
},
data () {
return {
@@ -38,6 +42,14 @@ export default {
hourglassTransactions: [],
};
},
watch: {
resetCounter () {
if (this.expand) {
this.expand = !this.expand;
this.toggleTransactionsOpen();
}
},
},
methods: {
async toggleTransactionsOpen () {
this.expand = !this.expand;
File diff suppressed because it is too large Load Diff
@@ -1,21 +1,5 @@
<template>
<div class="form">
<div class="form-group row text-center">
<div class="col-12">
<div
class="btn btn-secondary social-button"
@click="socialAuth('facebook')"
>
<div
class="svg-icon social-icon"
v-html="icons.facebookIcon"
></div>
<span>{{ registering
? $t('signUpWithSocial', {social: 'Facebook'})
: $t('loginWithSocial', {social: 'Facebook'}) }}</span>
</div>
</div>
</div>
<div class="form-group row text-center">
<div class="col-12">
<div
@@ -243,7 +227,6 @@ import debounce from 'lodash/debounce';
import isEmail from 'validator/lib/isEmail';
import { setUpAxios, buildAppleAuthUrl } from '@/libs/auth';
import { MINIMUM_PASSWORD_LENGTH } from '@/../../common/script/constants';
import facebookSquareIcon from '@/assets/svg/facebook-square.svg';
import googleIcon from '@/assets/svg/google.svg';
import appleIcon from '@/assets/svg/apple_black.svg';
@@ -260,7 +243,6 @@ export default {
};
data.icons = Object.freeze({
facebookIcon: facebookSquareIcon,
googleIcon,
appleIcon,
});
@@ -308,8 +290,6 @@ export default {
},
mounted () {
hello.init({
facebook: process.env.FACEBOOK_KEY, // eslint-disable-line
// windows: WINDOWS_CLIENT_ID,
google: process.env.GOOGLE_CLIENT_ID, // eslint-disable-line
});
},
@@ -621,7 +621,6 @@ import { MINIMUM_PASSWORD_LENGTH } from '@/../../common/script/constants';
import exclamation from '@/assets/svg/exclamation.svg';
import gryphon from '@/assets/svg/gryphon.svg';
import habiticaIcon from '@/assets/svg/habitica-logo.svg';
import facebookSquareIcon from '@/assets/svg/facebook-square.svg';
import googleIcon from '@/assets/svg/google.svg';
import appleIcon from '@/assets/svg/apple_black.svg';
@@ -644,7 +643,6 @@ export default {
exclamation,
gryphon,
habiticaIcon,
facebookIcon: facebookSquareIcon,
googleIcon,
appleIcon,
});
@@ -734,8 +732,6 @@ export default {
},
mounted () {
hello.init({
facebook: process.env.FACEBOOK_KEY, // eslint-disable-line
// windows: WINDOWS_CLIENT_ID,
google: process.env.GOOGLE_CLIENT_ID, // eslint-disable-line
});
},
@@ -27,7 +27,7 @@
<customize-options
:items="set.options"
:current-value="user.preferences.hair.color"
:full-set="!hideSet(set) && !userOwnsSet('hair', set.keys, 'color')"
:full-set="!hideSet(set.key) && !userOwnsSet('hair', set.keys, 'color')"
@unlock="unlock(`hair.color.${set.keys.join(',hair.color.')}`)"
/>
</div>
@@ -23,7 +23,7 @@
<customize-options
:items="set.options"
:current-value="user.preferences.skin"
:full-set="!hideSet(set) && !userOwnsSet('skin', set.keys)"
:full-set="!hideSet(set.key) && !userOwnsSet('skin', set.keys)"
@unlock="unlock(`skin.${set.keys.join(',skin.')}`)"
/>
</div>
@@ -280,6 +280,7 @@ import markdownDirective from '@/directives/markdown';
import { userStateMixin } from '../../mixins/userState';
import { TAVERN_ID, MIN_SHORTNAME_SIZE_FOR_CHALLENGES, MAX_SUMMARY_SIZE_FOR_CHALLENGES } from '@/../../common/script/constants';
import CategoryOptions from '@/../../common/script/content/categoryOptions';
export default {
directives: {
@@ -288,64 +289,7 @@ export default {
mixins: [userStateMixin],
props: ['groupId'],
data () {
const categoryOptions = [
{
label: 'habitica_official',
key: 'habitica_official',
},
{
label: 'academics',
key: 'academics',
},
{
label: 'advocacy_causes',
key: 'advocacy_causes',
},
{
label: 'creativity',
key: 'creativity',
},
{
label: 'entertainment',
key: 'entertainment',
},
{
label: 'finance',
key: 'finance',
},
{
label: 'health_fitness',
key: 'health_fitness',
},
{
label: 'hobbies_occupations',
key: 'hobbies_occupations',
},
{
label: 'location_based',
key: 'location_based',
},
{
label: 'mental_health',
key: 'mental_health',
},
{
label: 'getting_organized',
key: 'getting_organized',
},
{
label: 'self_improvement',
key: 'self_improvement',
},
{
label: 'spirituality',
key: 'spirituality',
},
{
label: 'time_management',
key: 'time_management',
},
];
const categoryOptions = CategoryOptions;
const hashedCategories = {};
categoryOptions.forEach(category => {
hashedCategories[category.key] = category.label;
@@ -89,70 +89,14 @@
import throttle from 'lodash/throttle';
import FilterSidebar from '@/components/ui/filterSidebar';
import FilterGroup from '@/components/ui/filterGroup';
import CategoryOptions from '@/../../common/script/content/categoryOptions';
export default {
components: { FilterGroup, FilterSidebar },
data () {
return {
categoryFilters: [],
categoryOptions: [
{
label: 'habitica_official',
key: 'habitica_official',
},
{
label: 'academics',
key: 'academics',
},
{
label: 'advocacy_causes',
key: 'advocacy_causes',
},
{
label: 'creativity',
key: 'creativity',
},
{
label: 'entertainment',
key: 'entertainment',
},
{
label: 'finance',
key: 'finance',
},
{
label: 'health_fitness',
key: 'health_fitness',
},
{
label: 'hobbies_occupations',
key: 'hobbies_occupations',
},
{
label: 'location_based',
key: 'location_based',
},
{
label: 'mental_health',
key: 'mental_health',
},
{
label: 'getting_organized',
key: 'getting_organized',
},
{
label: 'self_improvement',
key: 'self_improvement',
},
{
label: 'spirituality',
key: 'spirituality',
},
{
label: 'time_management',
key: 'time_management',
},
],
categoryOptions: CategoryOptions,
membershipFilters: [],
membershipOptions: [
{
@@ -1,3 +1,4 @@
<!-- THIS IS A VERY OLD FILE DO NOT USE -->
<template>
<div class="create-group-modal-pages">
<div
@@ -0,0 +1,356 @@
<template>
<b-modal
id="create-group"
:title="activePage === PAGES.CREATE_GROUP ? 'Create your Group' : 'Select Payment'"
:hide-footer="true"
:hide-header="true"
size="md"
@hide="onHide()"
>
<div
v-if="activePage === PAGES.CREATE_GROUP"
class="col-12"
>
<!-- HEADER -->
<div
class="modal-close"
>
<span
class="cancel-text"
@click="close()"
>
{{ $t('cancel') }}
</span>
<button
class="btn btn-primary next-button"
:value="$t('next')"
:disabled="!newGroupIsReady"
@click="createGroup()"
>
{{ $t('next') }}
</button>
</div>
<h2>{{ $t('createGroup') }}</h2>
<!-- FORM -->
<div class="form-group">
<lockable-label
:text="$t('nameStar')"
/>
<input
id="new-group-name"
v-model="newGroup.name"
class="form-control input-medium option-content name-input"
required="required"
type="text"
:placeholder="$t('nameStarText')"
>
</div>
<div class="form-group">
<lockable-label
for="new-group-description"
:text="$t('descriptionOptional')"
class="description-label"
/>
<div class="characters-remaining">
{{ $t('charactersRemaining', {characters: charactersRemaining}) }}
</div>
<textarea
id="new-group-description"
v-model="newGroup.description"
class="form-control option-content description-input"
cols="3"
:placeholder="$t('descriptionOptionalText')"
maxlength="250"
></textarea>
</div>
<div class="form-group">
<div class="custom-control custom-checkbox">
<input
id="create-group-leaderOnlyChallenges-checkbox"
v-model="newGroup.leaderOnly.challenges"
class="custom-control-input"
type="checkbox"
>
<label
class="custom-control-label"
for="create-group-leaderOnlyChallenges-checkbox"
>{{ $t('leaderOnlyChallenges') }}</label>
</div>
</div>
<div class="form-group">
<lockable-label
:text="$t('groupUse')"
/>
<select-translated-array
:items="[
'groupParentChildren',
'groupCouple',
'groupFriends',
'groupCoworkers',
'groupManager',
'groupTeacher'
]"
class="group-input"
:placeholder="'groupUseDefault'"
:value="newGroup.demographics"
@select="newGroup.demographics = $event"
/>
</div>
<div class="form-group">
<button
class="btn btn-primary btn-lg btn-block btn-payment"
:disabled="!newGroupIsReady"
@click="createGroup()"
>
{{ $t('nextPaymentMethod') }}
</button>
</div>
</div>
<!-- PAYMENT -->
<!-- @TODO: Separate payment into a separate modal -->
<div
v-if="activePage === PAGES.PAY"
class="col-12 payments"
>
<div class="text-center">
<payments-buttons
:stripe-fn="() => pay(PAYMENTS.STRIPE)"
:amazon-data="pay(PAYMENTS.AMAZON)"
/>
</div>
</div>
</b-modal>
</template>
<style lang="scss" scoped>
@import '~@/assets/scss/colors.scss';
h2 {
color: $purple-300;
font-size: 1.25rem;
height: 28px;
width: 120px;
margin-top: 24px;
align-self: center;
}
.cancel-text {
color: $blue-10;
font-size: 0.875rem;
margin-right: 16px;
text-align: center;
cursor: pointer;
}
.next-button {
align-self: center;
}
.form-control::placeholder {
color: $gray-50;
height: 32px;
}
.description-label {
margin-bottom: -24px;
}
.name-input, .description-input, .group-input {
margin-top: -4px;
}
.characters-remaining {
color: $gray-100;
font-size: 0.75rem;
line-height: 1.33;
text-align: right;
margin-bottom: 12px;
}
.description-input {
height: 56px;
}
.spacer {
margin-bottom: 16px !important;
}
.btn-payment {
margin: 24px 112px 24px 112px;
width: 177px;
}
.payments {
padding: 24px;
}
.payment-options {
margin-bottom: 4em;
.purple-box {
background-color: #4f2a93;
color: #fff;
padding: .5em;
border-radius: 8px;
width: 200px;
height: 215px;
.dollar {
}
.number {
font-size: 60px;
}
.name {
width: 100px;
margin-left: .3em;
}
div {
display: inline-block;
}
}
.box, .purple-box {
display: inline-block;
vertical-align: bottom;
}
}
</style>
<style lang="scss">
@import '~@/assets/scss/mixins.scss';
#create-group {
.modal-dialog {
max-width: 448px;
}
.modal-content {
width: 448px;
max-height: 436px;
border-radius: 8px;
box-shadow: 0 14px 28px 0 rgba(26, 24, 29, 0.24), 0 10px 10px 0 rgba(26, 24, 29, 0.28);
}
.modal-body{
padding: 0px;
margin-left: 12px;
margin-right: 12px;
}
.modal-close {
position: absolute;
right: 16px;
cursor: pointer;
top: 0px;
}
}
</style>
<script>
import paymentsMixin from '../../mixins/payments';
import { mapState } from '@/libs/store';
import paymentsButtons from '@/components/payments/buttons/list';
import selectTranslatedArray from '@/components/tasks/modal-controls/selectTranslatedArray';
import lockableLabel from '@/components/tasks/modal-controls/lockableLabel';
import * as Analytics from '@/libs/analytics';
export default {
components: {
paymentsButtons,
selectTranslatedArray,
lockableLabel,
},
mixins: [paymentsMixin],
data () {
return {
amazonPayments: {},
PAGES: {
CREATE_GROUP: 'create-group',
// UPGRADE_GROUP: 'upgrade-group',
PAY: 'pay',
},
PAYMENTS: {
AMAZON: 'amazon',
STRIPE: 'stripe',
},
paymentMethod: '',
newGroup: {
type: 'guild',
privacy: 'private',
name: '',
description: '',
leaderOnly: {
challenges: false,
},
demographics: null,
user: '',
},
activePage: 'create-group',
type: 'guild',
};
},
computed: {
...mapState({ user: 'user.data' }),
newGroupIsReady () {
return Boolean(this.newGroup.name) && Boolean(this.newGroup.demographics);
},
charactersRemaining () {
const currentLength = this.newGroup.description ? this.newGroup.description.length : 0;
return 250 - currentLength;
},
},
methods: {
close () {
this.$root.$emit('bv::hide::modal', 'create-group');
},
changePage (page) {
this.activePage = page;
},
createGroup () {
this.changePage(this.PAGES.PAY);
},
pay (paymentMethod) {
const subscriptionKey = 'group_monthly'; // @TODO: Get from content API?
const demographicsKey = this.newGroup.demographics;
const paymentData = {
subscription: subscriptionKey,
coupon: null,
demographics: demographicsKey,
};
Analytics.track({
hitType: 'event',
eventName: 'group plan create',
eventAction: 'group plan create',
eventCategory: 'behavior',
demographics: this.newGroup.demographics,
type: this.newGroup.type,
}, { trackOnClient: true });
if (this.upgradingGroup && this.upgradingGroup._id) {
paymentData.groupId = this.upgradingGroup._id;
paymentData.group = this.upgradingGroup;
} else {
paymentData.groupToCreate = this.newGroup;
}
this.paymentMethod = paymentMethod;
if (this.paymentMethod === this.PAYMENTS.AMAZON) {
paymentData.type = 'subscription';
return paymentData;
}
if (this.paymentMethod === this.PAYMENTS.STRIPE) {
this.redirectToStripe(paymentData);
}
return null;
},
onHide () {
this.sendingInProgress = false;
},
},
};
</script>
@@ -45,7 +45,7 @@
v-html="$t('dayStart', { startTime: groupStartTime } )"
>
</div>
<div class="ml-2">
<div class="create-task-area ml-2">
<button
id="create-task-btn"
v-if="canCreateTasks"
@@ -132,6 +132,14 @@
margin-bottom: 0px;
}
.create-task-area {
position: inherit;
.dropdown {
right: 24px;
}
}
.day-start {
height: 2rem;
padding: 0.25rem 0.75rem;
@@ -379,6 +379,7 @@ import informationIcon from '@/assets/svg/information.svg';
import { MAX_SUMMARY_SIZE_FOR_GUILDS } from '@/../../common/script/constants';
import { userStateMixin } from '../../mixins/userState';
import CategoryOptions from '@/../../common/script/content/categoryOptions';
// @TODO: Not sure the best way to pass party creating status
// Since we need the modal in the header, passing props doesn't work
@@ -410,64 +411,7 @@ export default {
allowGuildInvitationsFromNonMembers: true,
bannedWordsAllowed: null,
},
categoryOptions: [
{
label: 'habitica_official',
key: 'habitica_official',
},
{
label: 'academics',
key: 'academics',
},
{
label: 'advocacy_causes',
key: 'advocacy_causes',
},
{
label: 'creativity',
key: 'creativity',
},
{
label: 'entertainment',
key: 'entertainment',
},
{
label: 'finance',
key: 'finance',
},
{
label: 'health_fitness',
key: 'health_fitness',
},
{
label: 'hobbies_occupations',
key: 'hobbies_occupations',
},
{
label: 'location_based',
key: 'location_based',
},
{
label: 'mental_health',
key: 'mental_health',
},
{
label: 'getting_organized',
key: 'getting_organized',
},
{
label: 'recovery_support_groups',
key: 'recovery_support_groups',
},
{
label: 'spirituality',
key: 'spirituality',
},
{
label: 'time_management',
key: 'time_management',
},
],
categoryOptions: CategoryOptions,
showCategorySelect: false,
members: [],
inviteMembers: false,
@@ -1,6 +1,7 @@
<template>
<!-- @TODO: Move to group plans folder-->
<div>
<group-plan-creation-modal />
<div>
<div class="header">
<h1 class="text-center">
@@ -51,6 +52,7 @@
</div>
</div>
</div>
<!-- Upgrading an existing group -->
<div
v-if="upgradingGroup._id"
id="upgrading-group"
@@ -92,7 +94,6 @@
</div>
</div>
<div class="box payment-providers">
<h3>Choose your payment method</h3>
<payments-buttons
:stripe-fn="() => pay(PAYMENTS.STRIPE)"
:amazon-data="pay(PAYMENTS.AMAZON)"
@@ -101,154 +102,53 @@
</div>
</div>
</div>
<!-- Create a new group -->
<div
v-if="!upgradingGroup._id"
class="container col-6 offset-3 create-option"
>
<div class="row">
<h1 class="col-12 text-center purple-header">
Create your Group today!
Create Your Group Today!
</h1>
</div>
<div class="row">
<div class="col-12 text-center">
<button
class="btn btn-primary create-group"
@click="launchModal('create')"
@click="launchModal('create-page')"
>
Create Your New Group
Create Your New Group!
</button>
</div>
</div>
<div class="row pricing">
<div class="col-5">
<div class="dollar">
$
</div>
<div class="number">
9
</div>
<div class="name">
<div>Group Owner</div>
<div>Subscription</div>
</div>
<div class="row pricing justify-content-center align-items-center">
<div class="dollar">
$
</div>
<div class="col-1">
<div class="plus">
+
</div>
<div class="number">
9
</div>
<div class="col-6">
<div class="dollar">
$
</div>
<div class="number">
3
</div>
<div class="name">
<div>Each Additional</div>
<div>Member</div>
</div>
<div class="name">
<div>Group Owner</div>
<div>Subscription</div>
</div>
<div class="plus">
+
</div>
<div class="dollar">
$
</div>
<div class="number">
3
</div>
<div class="name">
<div>Each Additional</div>
<div>Member</div>
</div>
</div>
</div>
</div>
<b-modal
id="group-plan-modal"
:title="activePage === PAGES.CREATE_GROUP ? 'Create your Group' : 'Select Payment'"
size="md"
hide-footer="hide-footer"
>
<div
v-if="activePage === PAGES.CREATE_GROUP"
class="col-12"
>
<div class="form-group">
<label
class="control-label"
for="new-group-name"
>Name</label>
<input
id="new-group-name"
v-model="newGroup.name"
class="form-control input-medium option-content"
required="required"
type="text"
placeholder="Name"
>
</div>
<div class="form-group">
<label for="new-group-description">{{ $t('description') }}</label>
<textarea
id="new-group-description"
v-model="newGroup.description"
class="form-control option-content"
cols="3"
:placeholder="$t('description')"
></textarea>
</div>
<div
v-if="type === 'guild'"
class="form-group"
>
<div class="custom-control custom-radio">
<input
v-model="newGroup.privacy"
class="custom-control-input"
type="radio"
name="new-group-privacy"
value="private"
>
<label class="custom-control-label">{{ $t('inviteOnly') }}</label>
</div>
</div>
<div class="form-group">
<div class="custom-control custom-checkbox">
<input
id="create-group-leaderOnlyChallenges-checkbox"
v-model="newGroup.leaderOnly.challenges"
class="custom-control-input"
type="checkbox"
>
<label
class="custom-control-label"
for="create-group-leaderOnlyChallenges-checkbox"
>{{ $t('leaderOnlyChallenges') }}</label>
</div>
</div>
<div
v-if="type === 'party'"
class="form-group"
>
<button
class="btn btn-secondary form-control"
:value="$t('create')"
@click="createGroup()"
></button>
</div>
<div class="form-group">
<button
class="btn btn-primary btn-lg btn-block"
:disabled="!newGroupIsReady"
@click="createGroup()"
>
{{ $t('create') }}
</button>
</div>
</div>
<div
v-if="activePage === PAGES.PAY"
class="col-12"
>
<div class="text-center">
<h3>Choose your payment method</h3>
<payments-buttons
:stripe-fn="() => pay(PAYMENTS.STRIPE)"
:amazon-data="pay(PAYMENTS.AMAZON)"
/>
</div>
</div>
</b-modal>
</div>
</template>
@@ -260,12 +160,17 @@
.dollar {
position: absolute;
left: -1em;
top: 1em;
left: -16px;
top: 16px;
}
.purple-box {
color: #bda8ff;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
border-top-left-radius: 8px;
border-bottom-left-radius: 8px;
box-shadow: 0 2px 2px 0 rgba(26, 24, 29, 0.16), 0 1px 4px 0 rgba(26, 24, 29, 0.12);
}
.number {
@@ -279,6 +184,8 @@
.payment-providers {
width: 350px;
border-top-right-radius: 8px;
border-bottom-right-radius: 8px;
}
}
@@ -286,9 +193,9 @@
background: #432874;
background: linear-gradient(180deg, #4F2A93 0%, #432874 100%);
color: #fff;
padding: 2em;
padding: 32px;
height: 340px;
margin-bottom: 2em;
margin-bottom: 32px;
margin-left: -12px;
margin-right: -12px;
@@ -312,6 +219,7 @@
.box {
height: 416px;
border-radius: 8px;
}
h2 {
@@ -354,17 +262,19 @@
button.create-group {
width: 330px;
height: 96px;
border-radius: 8px;
font-size: 1.5rem;
}
.purple-header {
color: #6133b4;
font-size: 48px;
margin-top: 1em;
margin-top: 16px;
}
.pricing {
margin-top: 2em;
margin-bottom: 4em;
margin-top: 32px;
margin-bottom: 64px;
.dollar, .number, .name {
display: inline-block;
@@ -373,35 +283,41 @@
}
.plus {
font-size: 34px;
font-size: 2.125rem;
color: #a5a1ac;
margin-left: 16px;
margin-right: 16px;
}
.dollar {
margin-bottom: 1.5em;
font-size: 32px;
margin-bottom: 24px;
font-size: 2rem;
font-weight: bold;
}
.name {
font-size: 24px;
margin-bottom: .8em;
margin-left: .5em;
font-size: 1.5rem;
margin-left: 8px;
margin-right: 8px;
}
.number {
font-size: 72px;
font-size: 4.5rem;
font-weight: bolder;
}
}
.payment-options {
margin-bottom: 4em;
margin-bottom: 64px;
h4 {
color: #34313a;
}
.purple-box {
background-color: #4f2a93;
color: #fff;
padding: .5em;
padding: 8px;
border-radius: 8px;
width: 200px;
height: 215px;
@@ -415,7 +331,7 @@
.name {
width: 100px;
margin-left: .3em;
margin-left: 4.8px;
}
.plus {
@@ -440,10 +356,12 @@ import paymentsMixin from '../../mixins/payments';
import { mapState } from '@/libs/store';
import positiveIcon from '@/assets/svg/positive.svg';
import paymentsButtons from '@/components/payments/buttons/list';
import groupPlanCreationModal from '../group-plans/groupPlanCreationModal';
export default {
components: {
paymentsButtons,
groupPlanCreationModal,
},
mixins: [paymentsMixin],
data () {
@@ -492,12 +410,7 @@ export default {
},
methods: {
launchModal () {
this.changePage(this.PAGES.CREATE_GROUP);
this.$root.$emit('bv::show::modal', 'group-plan-modal');
},
changePage (page) {
this.activePage = page;
window.scrollTo(0, 0);
this.$root.$emit('bv::show::modal', 'create-group');
},
createGroup () {
this.changePage(this.PAGES.PAY);
@@ -86,6 +86,7 @@
import throttle from 'lodash/throttle';
import FilterSidebar from '@/components/ui/filterSidebar';
import FilterGroup from '@/components/ui/filterGroup';
import CategoryOptions from '@/../../common/script/content/categoryOptions';
// TODO use checkbox-component to add/remove entries to *Filters, but without the v-model binding
@@ -94,64 +95,7 @@ export default {
data () {
return {
categoryFilters: [],
categoryOptions: [
{
label: 'habitica_official',
key: 'habitica_official',
},
{
label: 'academics',
key: 'academics',
},
{
label: 'advocacy_causes',
key: 'advocacy_causes',
},
{
label: 'creativity',
key: 'creativity',
},
{
label: 'entertainment',
key: 'entertainment',
},
{
label: 'finance',
key: 'finance',
},
{
label: 'health_fitness',
key: 'health_fitness',
},
{
label: 'hobbies_occupations',
key: 'hobbies_occupations',
},
{
label: 'location_based',
key: 'location_based',
},
{
label: 'mental_health',
key: 'mental_health',
},
{
label: 'getting_organized',
key: 'getting_organized',
},
{
label: 'recovery_support_groups',
key: 'recovery_support_groups',
},
{
label: 'spirituality',
key: 'spirituality',
},
{
label: 'time_management',
key: 'time_management',
},
],
categoryOptions: CategoryOptions,
roleFilters: [],
roleOptions: [
{
@@ -267,7 +267,7 @@
</div>
</div>
<div class="px-4">
<sidebar-section :title="$t('staffAndModerators')">
<sidebar-section :title="$t('staff')">
<div class="row">
<div
v-for="user in staff"
@@ -289,19 +289,6 @@
class="svg-icon staff-icon"
v-html="icons.tierStaff"
></div>
<div
v-if="user.type === 'Moderator' && user.name !== 'It\'s Bailey'"
class="svg-icon mod-icon"
v-html="icons.tierMod"
></div>
<div
v-if="user.name === 'It\'s Bailey'"
class="svg-icon npc-icon"
v-html="icons.tierNPC"
></div>
</div>
<div class="type">
{{ user.type }}
</div>
</div>
</div>
@@ -787,18 +787,15 @@ export default {
if (sortBy === 'sortByColor') {
groupKey = 'potionKey';
} else if (sortBy === 'AZ') {
groupKey = '';
groupKey = i => i.eggName[0];
} else if (sortBy === 'sortByHatchable') {
groupKey = i => (i.isHatchable() ? 0 : 1);
}
const groupedPets = groupBy(pets, groupKey);
// Pets are rendered as grouped "rows". Count helps decide if show more button is necessary.
if (sortBy === 'AZ') {
this.petRowCount[animalGroup.key] = 1;
} else {
this.petRowCount[animalGroup.key] = Object.keys(groupedPets).length;
}
this.petRowCount[animalGroup.key] = Object.keys(groupedPets).length;
return groupedPets;
},
mounts (animalGroup, hideMissing, sortBy, searchText) {
@@ -814,14 +811,12 @@ export default {
if (sortBy === 'sortByColor') {
groupKey = 'potionKey';
} else if (sortBy === 'AZ') {
groupKey = '';
groupKey = i => i.eggName[0];
}
const groupedMounts = groupBy(mounts, groupKey);
if (sortBy === 'AZ') {
this.mountRowCount[animalGroup.key] = 1;
} else {
this.mountRowCount[animalGroup.key] = Object.keys(groupedMounts).length;
}
this.mountRowCount[animalGroup.key] = Object.keys(groupedMounts).length;
return groupedMounts;
},
// Actions
@@ -241,6 +241,14 @@ const NOTIFICATIONS = {
achievement: 'mountColorAchievs',
},
},
ACHIEVEMENT_PET_SET_COMPLETE: {
achievement: true,
label: $t => `${$t('achievement')}: ${$t('achievementPetSetComplete')}`,
modalId: 'generic-achievement',
data: {
achievement: 'petSetCompleteAchievs',
},
},
};
export default {
@@ -313,6 +321,7 @@ export default {
'ACHIEVEMENT_ANIMAL_SET',
'ACHIEVEMENT_PET_COLOR',
'ACHIEVEMENT_MOUNT_COLOR',
'ACHIEVEMENT_PET_SET_COMPLETE',
].forEach(type => {
handledNotifications[type] = true;
});
@@ -772,6 +781,15 @@ export default {
Vue.set(this.user.achievements, achievement, true);
break;
}
case 'ACHIEVEMENT_PET_SET_COMPLETE': {
const { achievement } = notification.data;
const upperCaseAchievement = achievement.charAt(0).toUpperCase() + achievement.slice(1);
const achievementTitleKey = `achievement${upperCaseAchievement}`;
NOTIFICATIONS.ACHIEVEMENT_PET_SET_COMPLETE.label = $t => `${$t('achievement')}: ${$t(achievementTitleKey)}`;
this.showNotificationWithModal(notification);
Vue.set(this.user.achievements, achievement, true);
break;
}
case 'ACHIEVEMENT': { // generic achievement
const { achievement } = notification.data;
const upperCaseAchievement = achievement.charAt(0).toUpperCase() + achievement.slice(1);
@@ -196,7 +196,7 @@ export default {
appState.group = pick(this.amazonPayments.groupToCreate, ['_id', 'memberCount', 'name']);
} else {
appState.newGroup = false;
appState.group = pick(this.amazonPayments.group, ['_id', 'memberCount', 'name']);
appState.group = pick(this.amazonPayments.group, ['_id', 'memberCount', 'name', 'type']);
}
} else if (paymentType && paymentType.indexOf('gift-') === 0) {
appState.gift = this.amazonPayments.gift;
@@ -153,14 +153,6 @@
</span>
</div>
</div>
<div class="row text-center">
<h4
v-once
class="col-12 text-payment mb-3"
>
{{ $t('choosePaymentMethod') }}
</h4>
</div>
<payments-buttons
:disabled="!selectedGemsBlock"
:stripe-fn="() => redirectToStripe({ gemsBlock: selectedGemsBlock })"
@@ -169,6 +161,19 @@
})"
:amazon-data="{type: 'single', gemsBlock: selectedGemsBlock}"
/>
<div
v-if="eventName === 'fall_extra_gems' || eventName === 'spooky_extra_gems'"
class="d-flex flex-column justify-content-center"
>
<h4 class="mt-3 mx-auto"> {{ $t('howItWorks') }}</h4>
<small class="text-center">
{{ $t('gemSaleHow', { eventStartMonth, eventStartOrdinal, eventEndOrdinal }) }}
</small>
<h4 class="mt-3 mx-auto"> {{ $t('limitations') }}</h4>
<small class="text-center">
{{ $t('gemSaleLimitations', { eventStartMonth, eventStartOrdinal, eventEndOrdinal }) }}
</small>
</div>
</div>
</b-modal>
</div>
@@ -178,6 +183,13 @@
@import '~@/assets/scss/colors.scss';
#buy-gems {
small {
color: $gray-100;
font-size: 12px;
margin-left: 20px;
margin-right: 20px;
}
.close-icon svg path {
stroke: $purple-400;
}
@@ -347,8 +359,8 @@
.svg-icon.check {
color: $purple-400;
width: 0.77rem;
height: 0.615rem;
width: 16px;
height: 16px;
}
.text-leadin {
@@ -423,6 +435,15 @@ export default {
}
return '';
},
eventStartMonth () {
return moment(this.currentEvent.start).format('MMMM');
},
eventStartOrdinal () {
return moment(this.currentEvent.start).format('Do');
},
eventEndOrdinal () {
return moment(this.currentEvent.end).format('Do');
},
isGemsPromoActive () {
const currEvt = this.currentEvent;
if (currEvt && currEvt.gemsPromo && moment().isBefore(currEvt.end)) {
@@ -75,6 +75,7 @@
v-show="selectedPage === 'subscription'"
class="subscribe-option"
:userReceivingGift="userReceivingGift"
:receiverName="receiverName"
/>
<!-- gem block -->
@@ -648,6 +649,7 @@ export default {
},
},
giftReceiver: this.receiverName,
toUserId: this.userReceivingGift._id,
});
}, 500);
},
@@ -1,11 +1,22 @@
<template>
<b-modal
id="payments-success-modal"
:title="$t('accountSuspendedTitle')"
:hide-footer="isFromBalance"
:modal-class="isFromBalance ? ['modal-hidden-footer'] : []"
:hide-footer="isNewGroup || isGems || isSubscription"
:modal-class="isNewGroup || isGems || isSubscription
? ['modal-hidden-footer'] : []"
>
<!-- HEADER -->
<div slot="modal-header">
<div
class="modal-close"
@click="close()"
>
<div
class="icon-close"
v-html="icons.close"
>
</div>
</div>
<div class="check-container d-flex align-items-center justify-content-center">
<div
v-once
@@ -13,19 +24,13 @@
v-html="icons.check"
></div>
</div>
<h2>{{ $t(isFromBalance ? 'success' : 'paymentSuccessful') }}</h2>
</div>
<div slot="modal-footer">
<div
v-once
class="small-text"
>
{{ $t('giftSubscriptionText4') }}
</div>
<h2>{{ $t(isGemsBalance ? 'success' : 'paymentSuccessful') }}</h2>
</div>
<!-- BODY -->
<div class="row">
<div class="col-12 modal-body-col">
<template v-if="paymentData.paymentType === 'gems'">
<!-- buy gems for self -->
<template v-if="isGems">
<strong v-once>{{ $t('paymentYouReceived') }}</strong>
<div class="details-block gems">
<div
@@ -36,9 +41,9 @@
<span>{{ paymentData.gemsBlock.gems }}</span>
</div>
</template>
<!-- buy gems to someone else OR send gems from balance-->
<template
v-if="paymentData.paymentType === 'gift-gems'
|| paymentData.paymentType === 'gift-gems-balance'"
v-if="isGiftGems || isGemsBalance"
>
<span v-html="$t('paymentYouSentGems', {name: paymentData.giftReceiver})"></span>
<div class="details-block gems">
@@ -50,13 +55,17 @@
<span>{{ paymentData.gift.gems.amount }}</span>
</div>
</template>
<!-- give gift subscription (non-recurring)-->
<template v-if="paymentData.paymentType === 'gift-subscription'">
<span
v-html="$t('paymentYouSentSubscription', {
name: paymentData.giftReceiver, months: paymentData.subscription.months})"
></span>
<div>
<span
v-html="$t('paymentYouSentSubscription', {
name: paymentData.giftReceiver, months: paymentData.subscription.months})"
></span>
</div>
</template>
<template v-if="paymentData.paymentType === 'subscription'">
<!-- buy self subscription (recurring) -->
<template v-if="isSubscription">
<strong v-once>{{ $t('nowSubscribed') }}</strong>
<div class="details-block">
<span
@@ -65,48 +74,238 @@
></span>
</div>
</template>
<template v-if="paymentData.paymentType === 'groupPlan'">
<!-- group plan new or upgraded -->
<template v-if="isGroupPlan">
<span
v-html="$t(paymentData.newGroup
v-html="$t(isNewGroup
? 'groupPlanCreated' : 'groupPlanUpgraded', {groupName: paymentData.group.name})"
></span>
<div class="details-block">
<span
v-html="$t('paymentSubBilling', {
amount: groupPlanCost, months: paymentData.subscription.months})"
></span>
<div
v-if="isGroupPlan"
class=""
>
<div class="details-block group-billing-date">
<span
v-html="$t('groupsPaymentSubBilling', { renewalDate })"
>
</span>
</div>
<div class="small-text group-auto-renew">
<span
v-once
>{{ $t('groupsPaymentAutoRenew') }}
</span>
</div>
</div>
</template>
<!-- buy self subscription auto renew -->
<template
v-if="paymentData.paymentType === 'groupPlan'
|| paymentData.paymentType === 'subscription'"
v-if="isSubscription"
>
<span
v-once
class="small-text auto-renew"
>{{ $t('paymentAutoRenew') }}</span>
</template>
<!-- buttons for subscriptions / new Group / buy Gems for self -->
<button
v-if="isNewGroup || isGems || isSubscription"
v-once
class="btn btn-primary"
@click="close()"
@click="submit()"
>
{{ $t('onwards') }}
</button>
</div>
</div>
<!-- FOOTER -->
<div slot="modal-footer">
<!-- gift gems balance & buy, gift subscription -->
<div
v-if="isGemsBalance || isGiftGems || isGiftSubscription"
class="message mx-auto"
>
<lockable-label
:text="$t('sendGiftLabel')"
class="mx-auto label-text"
/>
<textarea
v-model="gift.message"
class="form-control mx-auto"
:placeholder="$t('sendGiftMessagePlaceholder')"
></textarea>
<button
:disabled="!gift.message || sendingInProgress"
class="btn btn-primary mx-auto"
@click="sendMessage()"
>
{{ $t('sendMessage') }}
</button>
</div>
<!-- upgradedGroup -->
<div
v-else-if="isUpgradedGroup"
class="demographics d-flex flex-column justify-content-center"
>
<lockable-label
:text="$t('groupUse')"
class="mx-auto label-text"
/>
<select-translated-array
:items="[
'groupParentChildren',
'groupCouple',
'groupFriends',
'groupCoworkers',
'groupManager',
'groupTeacher'
]"
class="group-input"
:placeholder="'groupUseDefault'"
:value="upgradedGroup.demographics"
@select="upgradedGroup.demographics = $event"
/>
<button
v-if="!paymentData.newGroup"
class="btn btn-primary mx-auto"
:disabled="!upgradedGroup.demographics"
@click="submit()"
>
{{ $t('submit') }}
</button>
</div>
</div>
</b-modal>
</template>
<style lang="scss">
@import '~@/assets/scss/colors.scss';
#payments-success-modal .modal-md {
max-width: 20.5rem;
}
#payments-success-modal {
.modal-md {
max-width: 448px;
min-width: 330px;
#payments-success-modal .modal-content {
background: transparent;
.modal-close {
position: absolute;
right: 16px;
top: 16px;
cursor: pointer;
.icon-close {
width: 18px;
height: 18px;
vertical-align: middle;
& svg path {
fill: $green-1;
}
& :hover {
fill: $green-1;
}
}
}
.modal-content {
background: transparent;
}
.modal-header {
justify-content: center;
padding-top: 24px;
padding-bottom: 0px;
background: $green-100;
border-top-right-radius: 8px;
border-top-left-radius: 8px;
border-bottom: none;
h2 {
color: $green-1;
}
.check-container {
width: 64px;
height: 64px;
border-radius: 50%;
background: $green-1;
margin: 0 auto;
margin-bottom: 16px;
}
.check {
width: 35.1px;
height: 28px;
color: $white;
}
}
.modal-body {
padding: 16px 32px 24px 32px;
background: $white;
.modal-body-col {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
.btn.btn-primary {
margin-top: 24px;
}
}
.details-block {
background: $gray-700;
border-radius: 4px;
padding: 8px 16px;
margin-top: 16px;
display: inline-flex;
flex-direction: row;
text-align: center;
&.gems {
padding: 12px 16px 12px 20px;
color: $green-10;
font-size: 24px;
font-weight: bold;
line-height: 1.33;
.svg-icon {
margin-right: 8px;
width: 32px;
height: 32px;
}
}
}
.auto-renew {
margin-top: 16px;
color: $orange-10;
font-style: normal;
}
.group-auto-renew {
margin: 12px 20px -8px 20px;
color: $yellow-5;
font-style: normal;
}
.group-billing-date {
width: 269px;
}
}
.modal-footer {
background: $gray-700;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
justify-content: center;
border-top: none;
.small-text {
font-style: normal;
}
}
}
}
#payments-success-modal.modal-hidden-footer .modal-body {
@@ -114,119 +313,123 @@
border-bottom-left-radius: 8px;
}
#payments-success-modal .modal-header {
justify-content: center;
padding-top: 24px;
padding-bottom: 0px;
background: $green-100;
border-top-right-radius: 8px;
border-top-left-radius: 8px;
border-bottom: none;
.demographics {
background-color: $gray-700;
h2 {
color: white;
.label-text {
margin-bottom: 20px;
}
.check-container {
width: 64px;
height: 64px;
border-radius: 50%;
background: #1CA372;
margin: 0 auto;
margin-bottom: 16px;
.group-input {
width: 400px !important;
margin-top: -24px !important;
}
.check {
width: 35.1px;
height: 28px;
color: white;
.btn {
margin-top: 0px;
width: 77px;
margin-bottom: 20px;
}
}
.message {
margin-bottom: 8px;
width: 378px;
display: flex;
flex-direction: column;
#payments-success-modal .modal-body {
padding-top: 16px;
padding-bottom: 24px;
background: white;
.modal-body-col {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
.btn.btn-primary {
margin-top: 24px;
}
}
.details-block {
background: $gray-700;
border-radius: 4px;
padding: 8px 24px;
margin-top: 16px;
display: flex;
flex-direction: row;
text-align: center;
&.gems {
padding: 12px 16px 12px 20px;
color: $green-10;
font-size: 24px;
font-weight: bold;
line-height: 1.33;
.svg-icon {
margin-right: 8px;
width: 32px;
height: 32px;
}
}
}
.auto-renew {
margin-top: 16px;
color: $orange-10;
font-style: normal;
}
}
#payments-success-modal .modal-footer {
background: $gray-700;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
justify-content: center;
border-top: none;
.small-text {
font-style: normal;
textarea.form-control {
height: 56px;
margin: 0 24px 24px 24px;
font-size: 0.875rem;
}
}
</style>
<style lang="scss">
@import '~@/assets/scss/mixins.scss';
</style>
<script>
// icons
import checkIcon from '@/assets/svg/check.svg';
import gemIcon from '@/assets/svg/gem.svg';
import closeIcon from '@/assets/svg/close.svg';
// components
import { mapState } from '@/libs/store';
import subscriptionBlocks from '@/../../common/script/content/subscriptionBlocks';
import selectTranslatedArray from '@/components/tasks/modal-controls/selectTranslatedArray';
import lockableLabel from '@/components/tasks/modal-controls/lockableLabel';
// mixins
import notificationsMixin from '@/mixins/notifications';
import paymentsMixin from '@/mixins/payments';
// analytics
import * as Analytics from '@/libs/analytics';
export default {
components: {
selectTranslatedArray,
lockableLabel,
},
mixins: [
paymentsMixin,
notificationsMixin,
],
data () {
return {
icons: Object.freeze({
check: checkIcon,
gem: gemIcon,
close: closeIcon,
}),
paymentData: {},
upgradedGroup: {
name: '',
demographics: null,
},
sendingInProgress: false,
gift: {
message: '',
},
receiverName: {
name: null,
uuid: null,
},
};
},
computed: {
...mapState({ user: 'user.data', group: 'group.data' }),
groupPlanCost () {
const sub = this.paymentData.subscription;
const memberCount = this.paymentData.group.memberCount || 1;
return sub.price + 3 * (memberCount - 1);
},
isFromBalance () {
isGemsBalance () {
return this.paymentData.paymentType === 'gift-gems-balance';
},
isGems () {
return this.paymentData.paymentType === 'gems';
},
isGiftGems () {
return this.paymentData.paymentType === 'gift-gems';
},
isGiftSubscription () {
return this.paymentData.paymentType === 'gift-subscription';
},
isSubscription () {
return this.paymentData.paymentType === 'subscription';
},
isGroupPlan () {
return this.paymentData.paymentType === 'groupPlan';
},
isUpgradedGroup () {
return this.paymentData.paymentType === 'groupPlan' && !this.paymentData.newGroup;
},
isNewGroup () {
return this.paymentData.paymentType === 'groupPlan' && this.paymentData.newGroup;
},
},
mounted () {
this.$root.$on('habitica:payment-success', data => {
@@ -242,7 +445,30 @@ export default {
this.$root.$off('habitica:payments-success');
},
methods: {
async sendMessage () {
this.sendingInProgress = true;
await this.$store.dispatch('members:sendPrivateMessage', {
message: this.gift.message,
toUserId: this.paymentData.gift.uuid || this.paymentData.toUserId,
});
this.close();
},
close () {
this.gift.message = '';
this.sendingInProgress = false;
this.$root.$emit('bv::hide::modal', 'payments-success-modal');
},
submit () {
if (this.paymentData.group && !this.paymentData.newGroup) {
Analytics.track({
hitType: 'event',
eventName: 'group plan upgrade',
eventAction: 'group plan upgrade',
eventCategory: 'behavior',
demographics: this.upgradedGroup.demographics,
type: this.paymentData.group.type,
}, { trackOnClient: true });
}
this.paymentData = {};
this.$root.$emit('bv::hide::modal', 'payments-success-modal');
},
@@ -387,9 +387,7 @@
{{ $t('saveAndConfirm') }}
</button>
</div>
<h5
v-if="user.auth.local.email"
>
<h5 v-if="user.auth.local.has_password">
{{ $t('changeEmail') }}
</h5>
<div
@@ -125,6 +125,10 @@ export default {
type: Object,
default () {},
},
receiverName: {
type: String,
default: '',
},
},
data () {
return {
@@ -135,7 +139,6 @@ export default {
type: 'subscription',
subscription: { key: 'basic_earned' },
},
receiverName: '',
};
},
computed: {
@@ -385,7 +385,6 @@ import EquipmentAttributesGrid from '../inventory/equipment/attributesGrid.vue';
import Item from '@/components/inventory/item';
import Avatar from '@/components/avatar';
import seasonalShopConfig from '@/../../common/script/libs/shops-seasonal.config';
import { drops as dropEggs } from '@/../../common/script/content/eggs';
import { drops as dropPotions } from '@/../../common/script/content/hatching-potions';
@@ -438,7 +437,6 @@ export default {
selectedAmountToBuy: 1,
isPinned: false,
endDate: seasonalShopConfig.dateRange.end,
};
},
computed: {
@@ -489,6 +487,9 @@ export default {
nonSubscriberHourglasses () {
return (!this.user.purchased.plan.customerId && !this.user.purchased.plan.consecutive.trinkets && this.getPriceClass() === 'hourglasses');
},
endDate () {
return moment(this.item.event.end);
},
},
watch: {
item: function itemChanged () {
@@ -8,16 +8,6 @@
:popover-position="'top'"
@click="itemSelected(item)"
>
<span slot="popoverContent">
<strong v-if="item.key === 'gem' && gemsLeft === 0">{{ $t('maxBuyGems') }}</strong>
<h4 class="popover-content-title">{{ item.text }}</h4>
<div
v-if="item.event"
class="mt-2"
>
{{ limitedString }}
</div>
</span>
<template
slot="itemBadge"
slot-scope="ctx"
@@ -32,11 +22,9 @@
import _filter from 'lodash/filter';
import _sortBy from 'lodash/sortBy';
import _map from 'lodash/map';
import moment from 'moment';
import { mapState } from '@/libs/store';
import pinUtils from '@/mixins/pinUtils';
import planGemLimits from '@/../../common/script/libs/planGemLimits';
import seasonalShopConfig from '@/../../common/script/libs/shops-seasonal.config';
import ShopItem from '../shopItem';
import CategoryItem from './categoryItem';
@@ -48,12 +36,6 @@ export default {
},
mixins: [pinUtils],
props: ['hideLocked', 'hidePinned', 'searchBy', 'sortBy', 'category'],
data () {
return {
timer: '',
limitedString: '',
};
},
computed: {
...mapState({
content: 'content',
@@ -106,43 +88,10 @@ export default {
return result;
},
},
mounted () {
this.countdownString();
this.timer = setInterval(this.countdownString, 1000);
},
beforeDestroy () {
this.cancelAutoUpdate();
},
methods: {
itemSelected (item) {
this.$root.$emit('buyModal::showItem', item);
},
countdownString () {
const diffDuration = moment.duration(moment(seasonalShopConfig.dateRange.end).diff(moment()));
if (diffDuration.asSeconds() <= 0) {
this.limitedString = this.$t('noLongerAvailable');
} else if (diffDuration.days() > 0 || diffDuration.months() > 0) {
this.limitedString = this.$t('limitedAvailabilityDays', {
days: moment(seasonalShopConfig.dateRange.end).diff(moment(), 'days'),
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else if (diffDuration.asMinutes() > 2) {
this.limitedString = this.$t('limitedAvailabilityHours', {
hours: diffDuration.hours(),
minutes: diffDuration.minutes(),
});
} else {
this.limitedString = this.$t('limitedAvailabilityMinutes', {
minutes: diffDuration.minutes(),
seconds: diffDuration.seconds(),
});
}
},
cancelAutoUpdate () {
clearInterval(this.timer);
},
},
};
</script>
@@ -263,8 +263,8 @@
</style>
<script>
import moment from 'moment';
import { mapState } from '@/libs/store';
import seasonalShopConfig from '@/../../common/script/libs/shops-seasonal.config';
import svgClock from '@/assets/svg/clock.svg';
import svgClose from '@/assets/svg/close.svg';
@@ -319,7 +319,6 @@ export default {
isPinned: false,
selectedAmountToBuy: 1,
endDate: seasonalShopConfig.dateRange.end,
};
},
computed: {
@@ -343,6 +342,9 @@ export default {
if (this.priceType === 'hourglasses') return this.icons.hourglass;
return this.icons.gem;
},
endDate () {
return moment(this.item.event.end);
},
},
watch: {
item: function itemChanged () {
@@ -402,6 +402,8 @@ import _sortBy from 'lodash/sortBy';
import _throttle from 'lodash/throttle';
import _groupBy from 'lodash/groupBy';
import _map from 'lodash/map';
import _each from 'lodash/each';
import * as stopword from 'stopword/dist/stopword.esm.mjs';
import { mapState } from '@/libs/store';
import ShopItem from '../shopItem';
@@ -426,6 +428,51 @@ import SelectTranslatedArray from '@/components/tasks/modal-controls/selectTrans
import QuestPopover from './questPopover';
import { worldStateMixin } from '@/mixins/worldState';
function splitMultipleDelims (text, delims) {
const omniDelim = 'θνι';
let workingText = text;
for (const delim of delims) {
workingText = workingText.replace(new RegExp(delim, 'g'), omniDelim);
}
return workingText.split(omniDelim);
}
function removeStopwordsFromText (text, language) {
// list of supported languages https://www.npmjs.com/package/stopword
const langs = {
bg: stopword.bul,
cs: stopword.ces,
da: stopword.dan,
de: stopword.deu,
en: stopword.eng,
en_GB: stopword.eng,
'en@pirate': stopword.eng.concat(["th'"]),
es: stopword.spa,
es_419: stopword.spa,
fr: stopword.fra,
he: stopword.heb,
hu: stopword.hun,
id: stopword.ind,
it: stopword.ita,
ja: stopword.jpn,
nl: stopword.nld,
pl: stopword.pol,
pt: stopword.por,
pt_BR: stopword.porBr,
ro: stopword.ron,
ru: stopword.rus,
sk: stopword.slv,
// sr: stopword.,
sv: stopword.swe,
tr: stopword.tur,
uk: stopword.ukr,
zh: stopword.zho,
zh_TW: stopword.zho,
};
const splitText = splitMultipleDelims(text, [' ', "'"]);
return stopword.removeStopwords(splitText, langs[language] || stopword.eng).join(' ').toLowerCase();
}
export default {
components: {
QuestPopover,
@@ -539,7 +586,14 @@ export default {
switch (sortBy) { // eslint-disable-line default-case
case 'AZ': {
result = _sortBy(result, ['text']);
if (category.identifier === 'pet' || category.identifier === 'hatchingPotion') {
_each(result, item => {
item.sortText = removeStopwordsFromText(item.text, this.user.preferences.language);
});
result = _sortBy(result, ['sortText']);
} else {
result = _sortBy(result, ['text']);
}
break;
}
@@ -31,6 +31,11 @@
class="svg-icon inline lock"
v-html="icons.lock"
></span>
<span
v-if="item.completed"
class="svg-icon inline check"
v-html="icons.check"
></span>
<span
v-if="item.isSuggested"
class="suggestedDot"
@@ -200,6 +205,15 @@
color: $gray-200;
}
span.svg-icon.inline.check {
height: 16px;
width: 16px;
position: absolute;
left: 4px;
top: 4px;
color: $gray-200;
}
span.badge.badge-round.badge-item.badge-clock {
height: 24px;
width: 24px;
@@ -246,6 +260,7 @@ import svgGem from '@/assets/svg/gem.svg';
import svgGold from '@/assets/svg/gold.svg';
import svgHourglasses from '@/assets/svg/hourglass.svg';
import svgLock from '@/assets/svg/lock.svg';
import svgCheck from '@/assets/svg/check.svg';
import svgClock from '@/assets/svg/clock.svg';
import EquipmentAttributesPopover from '@/components/inventory/equipment/attributesPopover';
@@ -297,6 +312,7 @@ export default {
gems: svgGem,
gold: svgGold,
lock: svgLock,
check: svgCheck,
hourglasses: svgHourglasses,
clock: svgClock,
}),
@@ -350,6 +366,7 @@ export default {
'highlight-border': this.highlightBorder,
suggested: this.item.isSuggested,
locked: this.item.locked,
completed: this.item.completed,
};
},
countdownString () {
+22 -18
View File
@@ -13,25 +13,29 @@
:key="index"
class="faq-question"
>
<h2
v-b-toggle="heading"
role="tab"
variant="info"
@click="handleClick($event)"
<div
v-if="heading !== 'world-boss'"
>
{{ $t(`faqQuestion${index}`) }}
</h2>
<b-collapse
:id="heading"
:visible="isVisible(heading)"
accordion="faq"
role="tabpanel"
>
<div
v-markdown="$t(`webFaqAnswer${index}`, replacements)"
class="card-body"
></div>
</b-collapse>
<h2
v-b-toggle="heading"
role="tab"
variant="info"
@click="handleClick($event)"
>
{{ $t(`faqQuestion${index}`) }}
</h2>
<b-collapse
:id="heading"
:visible="isVisible(heading)"
accordion="faq"
role="tabpanel"
>
<div
v-markdown="$t(`webFaqAnswer${index}`, replacements)"
class="card-body"
></div>
</b-collapse>
</div>
</div>
<hr>
<p v-markdown="$t('webFaqStillNeedHelp')"></p>
+24 -29
View File
@@ -363,7 +363,7 @@
#front {
.form-text a {
color: #fff !important;
color: $white !important;
}
.container-fluid {
@@ -375,30 +375,24 @@
padding-bottom: 5em;
}
.logo {
width: 128px;
height: 28px;
color: purple;
}
.purple-1, .purple-2, .purple-3, .purple-4, h1, h2, h3, h4, h5 {
color: #fff;
color: $white;
}
.purple-1 {
background-color: #6133b4;
background-color: $purple-300;
}
.purple-2 {
background-color: #432874;
background-color: $purple-100;
}
.purple-3 {
background-color: #36205d;
background-color: $purple-50;
}
.purple-4 {
background-color: #271b3d;
background-color: $header-dark-background;
}
p.section-main {
@@ -419,15 +413,15 @@
}
.pixel-horizontal {
color: #6133b4;
color: $purple-300;
}
.pixel-horizontal-2 {
color: #432874;
color: $purple-100;
}
.pixel-horizontal-3 {
color: #271b3d;
color: $header-dark-background;
}
h1, h2, h3, h4, h5, h6, button, .strike > span, input {
@@ -455,13 +449,13 @@
.social-button {
border-radius: 2px;
border: solid 2px #bda8ff;
border: solid 2px $purple-500;
width: 100%;
min-height: 40px;
padding: .5em;
background: transparent;
margin-bottom: .5em;
color: #bda8ff;
color: $purple-500;
transition: .5s;
span {
@@ -471,8 +465,8 @@
.social-button:hover {
cursor: pointer;
border-color: #fff;
color: #fff;
border-color: $white;
color: $white;
}
.social-icon {
@@ -531,8 +525,8 @@
input {
margin-bottom: 1em;
border-radius: 2px;
background-color: #432874;
border-color: #432874;
background-color: $purple-100;
border-color: $purple-100;
color: $purple-400;
border: solid 2px transparent;
transition-timing-function: ease;
@@ -544,17 +538,17 @@
}
.input-valid {
color: #fff;
color: $white;
}
input:focus {
border: solid 2px #9a62ff;
border: solid 2px $purple-400;
color: #fff;
background-color: #36205d;
background-color: $purple-50;
}
input:hover {
background-color: #36205d;
background-color: $purple-50;
}
.sign-up {
@@ -657,7 +651,7 @@
width: 411px;
height: 48px;
border-radius: 2px;
background-color: #9a62ff;
background-color: $purple-400;
box-shadow: 0 2px 2px 0 rgba(26, 24, 29, 0.24), 0 1px 4px 0 rgba(26, 24, 29, 0.16);
margin-bottom: 5em;
}
@@ -674,7 +668,7 @@
cursor: pointer;
&:hover {
background-color: #5d3b9c;
background-color: $purple-50;
box-shadow: 0 4px 4px 0 rgba(26, 24, 29, 0.16), 0 1px 8px 0 rgba(26, 24, 29, 0.12);
}
}
@@ -693,7 +687,7 @@
.svg-icon {
vertical-align: bottom;
color: #d5c8ff;
color: $purple-600;
display: inline-block;
margin-right: 1em;
}
@@ -760,6 +754,7 @@
height: 500px;
width: 100%;
opacity: .5;
pointer-events: none;
}
}
@@ -776,7 +771,7 @@
}
.input-error {
color: #fff;
color: $white;
font-size: 90%;
width: 100%;
margin-bottom: 1em;
@@ -3,7 +3,7 @@
<div class="container-fluid">
<h1>Privacy Notice</h1>
<p class="strong pagemeta">
Last Updated: December 10, 2021
Last Updated September 19, 2022: Removed reference to Facebook login, which is no longer supported.
</p>
<p>
HabitRPG, Inc. (HabitRPG, we, us, or our) welcomes you. This privacy notice (the Privacy
@@ -39,8 +39,8 @@
In connection with the creation of an account on our Platforms, we collect account credentials such as
your email, username, and password. We use this account information to create your account, including to
verify your identity. We also use this information to manage your account, including your transactions. If
you choose to log into your account through Google, Apple or Facebook, we capture and store the User
ID and email address connected to the respective account, so we can verify your identity when you log in.
you choose to log into your account through Google or Apple, we capture and store the User ID and email
address connected to the respective account, so we can verify your identity when you log in.
</p>
<h3>User Content</h3>
<p>
@@ -33,7 +33,7 @@
@import '~@/assets/scss/colors.scss';
.home-header {
background: #6133b4 !important;
background: $purple-300 !important;
position: static;
box-shadow: none !important;
height: 100px !important;
@@ -46,13 +46,13 @@
.nav-item a {
font-size: 14px !important;
color: #d5c8ff !important;
color: $purple-600 !important;
padding-top: 2.8em !important;
}
.nav-item a:hover {
background: transparent !important;
color: #fff !important;
color: $white !important;
}
.nav-item .nav-link {
@@ -73,20 +73,20 @@
}
.white-header {
background: #fff !important;
background-color: #fff !important;
background: $white !important;
background-color: $white !important;
a {
color: #271b3d !important;
color: $header-dark-background !important;
}
a:hover {
color: #fff !important;
color: $white !important;
}
}
#purple-footer {
background-color: #271b3d;
background-color: $header-dark-background;
.row {
margin: 0;
@@ -94,19 +94,91 @@
footer, footer a {
background: transparent;
color: #d5c8ff;
color: $purple-500;
&:hover {
color: $white;
}
}
h3 {
color: $purple-400;
}
hr {
border-top-color: $purple-100;
}
.donate-text {
color: $purple-500;
}
.logo {
color: #bda8ff;
color: $purple-300;
}
.social-circle, .btn-contribute {
background: #36205d;
color: #bda8ff;
.colophon {
color: $purple-500;
}
.svg-icon {
color: #bda8ff;
.social-circle {
background: $purple-50;
color: $purple-500;
.instagram svg {
background-color: $purple-50;
fill: $purple-500;
&:hover {
fill: $white;
}
}
.twitter svg {
background-color: $purple-50;
fill: $purple-500;
&:hover {
fill: $white;
}
}
.facebook svg {
background-color: $purple-50;
fill: $purple-500;
&:hover {
fill: $white;
}
}
.tumblr svg {
background-color: $purple-50;
fill: $purple-500;
&:hover {
fill: $white;
}
}
}
.btn-contribute {
background: $white;
box-shadow: none;
border-radius: 2px;
width: 175px;
height: 32px;
color: $gray-50;
text-align: center;
line-height: 1.71;
font-weight: bold;
font-size: 0.875rem;
vertical-align: middle;
padding: 0;
margin: 32px 0 32px 24px;
box-shadow: 0 1px 3px 0 rgba(26, 24, 29, 0.12), 0 1px 2px 0 rgba(26, 24, 29, 0.24);
a {
display: flex;
}
.text{
display: inline-block;
vertical-align: bottom;
}
}
}
@@ -142,7 +214,7 @@
<style lang="scss" scoped>
#bottom-wrap.purple-4 {
background-color: #271b3d;
background-color: #271B3D;
}
#bottom-wrap {
@@ -9,6 +9,7 @@
:right="right"
:hide-icon="false"
:inline-dropdown="inlineDropdown"
:placeholder="placeholder"
@select="selectItem($event)"
>
<template v-slot:item="{ item }">
@@ -70,6 +71,9 @@ export default {
type: Boolean,
default: true,
},
placeholder: {
type: String,
},
},
data () {
return {
+4 -4
View File
@@ -1,5 +1,5 @@
<template>
<div class="task-wrapper">
<div class="task-wrapper" draggable>
<div
class="task transition"
:class="[{
@@ -773,9 +773,9 @@
}
.check.svg-icon {
width: 12.3px;
height: 9.8px;
margin: 9px 8px;
width: 16px;
height: 16px;
margin: 5px;
}
.challenge.broken {
@@ -1,105 +1,308 @@
<template>
<div class="row">
<div class="col-6">
<h1>{{ $t('gemTransactions') }}</h1>
<span v-if="gemTransactions.length === 0">{{ $t('noGemTransactions') }}</span>
<table class="table">
<tr
v-for="entry in gemTransactions"
:key="entry.createdAt"
<div>
<div class="clearfix">
<div class="mb-4 float-left">
<button
class="page-header btn-flat tab-button textCondensed"
:class="{'active': selectedTab === 'gems'}"
@click="selectTab('gems')"
>
<td>
<span
v-b-tooltip.hover="entry.createdAt"
>{{ entry.createdAt | timeAgo }}</span>
</td>
<td>
<span
class="svg-icon inline icon-24"
aria-hidden="true"
v-html="icons.gem"
></span>
<span
class="amount gems"
:class="entry.amount < 0 ? 'deducted' : 'added'"
>{{ entry.amount * 4 }}</span>
</td>
<td>
<span>{{ transactionTypeText(entry.transactionType) }}</span>
</td>
<td>
<span v-html="entryReferenceText(entry)"></span>
</td>
</tr>
</table>
</div>
<div class="col-6">
<h1>{{ $t('hourglassTransactions') }}</h1>
<span v-if="hourglassTransactions.length === 0">{{ $t('noHourglassTransactions') }}</span>
<table class="table">
<tr
v-for="entry in hourglassTransactions"
:key="entry.createdAt"
{{ $t('gems') }}
</button>
<button
class="page-header btn-flat tab-button textCondensed"
:class="{'active': selectedTab === 'hourglass'}"
@click="selectTab('hourglass')"
>
<td>
<span
v-b-tooltip.hover="entry.createdAt"
>{{ entry.createdAt | timeAgo }}</span>
</td>
<td>
<span
class="svg-icon inline icon-24"
aria-hidden="true"
v-html="icons.hourglass"
></span>
<span
class="amount hourglasses"
:class="entry.amount < 0 ? 'deducted' : 'added'"
>{{ entry.amount }}</span>
</td>
<td>
<span>{{ transactionTypeText(entry.transactionType) }}</span>
</td>
<td>
<span v-html="entryReferenceText(entry)"></span>
</td>
</tr>
</table>
{{ $t('mysticHourglass', { amount: ''}) }}
</button>
</div>
</div>
<div class="row">
<div class="col-12" v-if="selectedTab === 'gems'">
<span v-if="gemTransactions.length === 0">
{{ $t('noGemTransactions') }}
</span>
<table class="table">
<tr>
<th v-once class="timestamp-column">
{{ $t('timestamp')}}
</th>
<th v-once class="amount-column">
{{ $t('amount')}}
</th>
<th v-once class="action-column">
{{ $t('action')}}
</th>
<th v-once class="note-column">
{{ $t('note')}}
</th>
</tr>
<tr
v-for="entry in gemTransactions"
:key="entry.createdAt"
>
<td>
<span
v-b-tooltip.hover="entry.createdAt"
>{{ entry.createdAt | timeAgo }}</span>
</td>
<td>
<div class="amount-with-icon" :id="entry.id">
<span
class="svg-icon inline icon-16 my-1"
aria-hidden="true"
v-html="entry.amount < 0 ? icons.gemRed : icons.gem"
></span>
<span
class="amount gems"
:class="entry.amount | addedDeducted"
>{{ entry.amount * 4 }}</span>
</div>
<b-popover
v-if="typeof entry.currentAmount !== 'undefined'"
ref="popover"
:target="entry.id"
triggers="hover focus click"
placement="bottom"
>
<div class="remaining-amount-popover-content">
{{ $t('remainingBalance') }}:
<span
class="svg-icon inline icon-16 ml-1"
aria-hidden="true"
v-html="icons.gem"
></span>
<span
class="amount gems"
>{{ entry.currentAmount * 4 }}</span>
</div>
</b-popover>
</td>
<td class="entry-action">
<span v-html="transactionTypeText(entry.transactionType)"></span>
</td>
<td>
<span v-if="transactionTypes.gifted.includes(entry.transactionType)">
<router-link
class="user-link"
:to="{'name': 'userProfile', 'params': {'userId': entry.reference}}"
>
@{{ entry.referenceText }}
</router-link>
</span>
<span v-else-if="transactionTypes.challenges.includes(entry.transactionType)">
<router-link
class="challenge-link"
:to="{ name: 'challenge', params: { challengeId: entry.reference } }">
<span
v-markdown="entry.referenceText"
></span>
</router-link>
</span>
<span v-else v-html="entryReferenceText(entry)"></span>
<span v-if="entry.reference">
({{entry.reference}})
</span>
</td>
</tr>
</table>
</div>
<div class="col-12" v-if="selectedTab === 'hourglass'">
<span v-if="hourglassTransactions.length === 0">
{{ $t('noHourglassTransactions') }}
</span>
<table class="table">
<tr>
<th v-once class="timestamp-column">
{{ $t('timestamp')}}
</th>
<th v-once class="amount-column">
{{ $t('amount')}}
</th>
<th v-once class="action-column">
{{ $t('action')}}
</th>
<th v-once class="note-column">
{{ $t('note')}}
</th>
</tr>
<tr
v-for="entry in hourglassTransactions"
:key="entry.createdAt"
>
<td>
<span
v-b-tooltip.hover="entry.createdAt"
>{{ entry.createdAt | timeAgo }}</span>
</td>
<td>
<div class="amount-with-icon" :id="entry.id">
<span
class="svg-icon inline icon-16 my-1"
aria-hidden="true"
v-html="entry.amount < 0 ? icons.hourglassRed : icons.hourglass"
></span>
<span
class="amount hourglasses"
:class="entry.amount | addedDeducted"
>{{ entry.amount }}</span>
</div>
<b-popover
v-if="typeof entry.currentAmount !== 'undefined'"
ref="popover"
:target="entry.id"
triggers="hover focus click"
placement="bottom"
>
<div class="remaining-amount-popover-content">
{{ $t('remainingBalance') }}:
<span
class="svg-icon inline icon-16 ml-1"
aria-hidden="true"
v-html="icons.hourglass"
></span>
<span
class="amount gems"
>{{ entry.currentAmount }}</span>
</div>
</b-popover>
</td>
<td class="entry-action">
<span v-html="transactionTypeText(entry.transactionType)"></span>
</td>
<td>
<span v-html="entryReferenceText(entry)"></span>
</td>
</tr>
</table>
</div>
</div>
</div>
</template>
<style lang="scss">
<style lang="scss" scoped>
@import '~@/assets/scss/colors.scss';
.page-header.btn-flat {
background: transparent;
}
.tab-button {
height: 2rem;
font-size: 24px;
font-weight: bold;
font-stretch: condensed;
line-height: 1.33;
letter-spacing: normal;
color: $gray-10;
margin-right: 1.125rem;
padding-left: 0;
padding-right: 0;
padding-bottom: 2.5rem;
&.active, &:hover {
color: $purple-300;
box-shadow: 0px -0.25rem 0px $purple-300 inset;
outline: none;
}
}
.amount-column {
white-space: nowrap;
}
.svg-icon {
vertical-align: middle;
}
.amount {
font-weight: bold;
font-size: 1.1rem;
margin-left: 4px;
}
.added::before {
content: "+";
}
.gems {
color: $gems-color;
color: $green-10;
&.deducted {
color: $red-10;
color: $maroon-50;
}
}
.hourglasses {
font-weight: bold;
color: $hourglass-color;
color: $green-10;
&.deducted {
color: $red-10;
color: $maroon-50;
}
}
.amount-with-icon {
display: inline-flex;
}
.remaining-amount-popover-content {
display: flex;
font-size: 12px;
line-height: 1.33;
color: $white;
}
table {
line-height: 1.71;
color: $gray-50;
}
th {
border-top: 0 !important;
padding: 0.25rem 0.5rem !important;
font-weight: bold;
line-height: 1.71;
color: $gray-50;
}
td {
padding-left: 0.5rem !important;
padding-right: 0.5rem !important;
line-height: 1.71;
color: $gray-50;
}
th, td {
padding-top: 0.35rem !important;
padding-bottom: 0.35rem !important;
}
.timestamp-column, .action-column {
width: 20%;
}
.amount-column {
width: 10%;
}
.note-column {
width: 50%;
}
.challenge-link, .user-link {
color: $blue-10 !important;
}
.entry-action {
b {
text-transform: uppercase;
}
}
</style>
@@ -107,9 +310,15 @@
<script>
import moment from 'moment';
import svgGem from '@/assets/svg/gem.svg';
import svgGemRed from '@/assets/svg/gem-red.svg';
import svgHourglass from '@/assets/svg/hourglass.svg';
import svgHourglassRed from '@/assets/svg/hourglass-red.svg';
import markdownDirective from '@/directives/markdown';
export default {
directives: {
markdown: markdownDirective,
},
filters: {
timeAgo (value) {
return moment(value).fromNow();
@@ -118,6 +327,13 @@ export default {
// @TODO: Vue doesn't support this so we cant user preference
return moment(value).toDate().toString();
},
addedDeducted (amount) {
if (amount === 0) {
return '';
}
return amount < 0 ? 'deducted' : 'added';
},
},
props: {
gemTransactions: {
@@ -133,11 +349,21 @@ export default {
return {
icons: Object.freeze({
gem: svgGem,
gemRed: svgGemRed,
hourglass: svgHourglass,
hourglassRed: svgHourglassRed,
}),
selectedTab: 'gems',
transactionTypes: Object.freeze({
gifted: ['gift_send', 'gift_receive'],
challenges: ['create_challenge', 'create_bank_challenge'],
}),
};
},
methods: {
selectTab (type) {
this.selectedTab = type;
},
entryReferenceText (entry) {
if (entry.reference === undefined && entry.referenceText === undefined) {
return '';
@@ -12,7 +12,7 @@
<template v-slot:button-content>
<slot
name="item"
:item="selected"
:item="selected || placeholder"
:button="true"
>
<!-- Fallback content -->
@@ -114,6 +114,9 @@ export default {
type: Boolean,
default: true,
},
placeholder: {
type: String,
},
},
data () {
return {
-40
View File
@@ -34,44 +34,4 @@ export default [
type: 'Staff',
uuid: 'f4e5c6da-0617-48bf-b3bd-9f97636774a8',
},
{
name: 'Alys',
type: 'Moderator',
uuid: 'd904bd62-da08-416b-a816-ba797c9ee265',
},
{
name: 'Cantras',
type: 'Moderator',
uuid: '28771972-ca6d-4c03-8261-e1734aa7d21d',
},
{
name: 'deilann',
type: 'Moderator',
uuid: 'e7b5d1e2-3b6e-4192-b867-8bafdb03eeec',
},
{
name: 'Dewines',
type: 'Moderator',
uuid: '262a7afb-6b57-4d81-88e0-80d2e9f6cbdc',
},
{
name: 'Fox_town',
type: 'Moderator',
uuid: 'a05f0152-d66b-4ef1-93ac-4adb195d0031',
},
{
name: 'MaybeSteveRogers',
type: 'Moderator',
uuid: '767e5d92-0e13-4e30-acb1-d8bba62824fc',
},
{
name: 'Nakonana',
type: 'Moderator',
uuid: '33bb14bd-814d-40cb-98a4-7b76a752761c',
},
{
name: 'shanaqui',
type: 'Moderator',
uuid: 'bb089388-28ae-4e42-a8fa-f0c2bfb6f779',
},
];
@@ -17,8 +17,14 @@ export const avatarEditorUtilies = { // eslint-disable-line import/prefer-defaul
};
},
methods: {
hideSet (set) {
return moment(appearanceSets[set.key].availableUntil).isBefore(moment());
hideSet (setKey) {
if (appearanceSets[setKey].availableFrom) {
return !moment().isBetween(
appearanceSets[setKey].availableFrom,
appearanceSets[setKey].availableUntil,
);
}
return moment(appearanceSets[setKey].availableUntil).isBefore(moment());
},
mapKeysToFreeOption (key, type, subType) {
const userPreference = subType
@@ -43,8 +49,8 @@ export const avatarEditorUtilies = { // eslint-disable-line import/prefer-defaul
const locked = !userPurchased || !userPurchased[key];
let hide = false;
if (set && appearanceSets[set]) {
if (locked) hide = moment(appearanceSets[set].availableUntil).isBefore(moment());
if (set && appearanceSets[set] && locked) {
hide = this.hideSet(set);
}
option.gemLocked = locked;
+12
View File
@@ -39,6 +39,13 @@ export default {
return moment(this.user.purchased.plan.dateTerminated)
.format(this.user.preferences.dateFormat.toUpperCase());
},
renewalDate () {
const renewalDate = moment().add(1, 'months');
if (!this.user.preferences || !this.user.preferences.dateFormat) {
return renewalDate;
}
return renewalDate.format(this.user.preferences.dateFormat.toUpperCase());
},
},
methods: {
encodeGift (uuid, gift) {
@@ -140,6 +147,7 @@ export default {
if (data.subscription) postData.sub = sub.key;
if (data.coupon) postData.coupon = data.coupon;
if (data.groupId) postData.groupId = data.groupId;
if (data.demographics) postData.demographics = data.demographics;
const response = await axios.post(url, postData);
@@ -267,6 +275,10 @@ export default {
this.amazonPayments.groupToCreate = data.groupToCreate;
}
if (data.demographics) { // sending demographics
this.amazonPayments.demographics = data.demographics;
}
this.amazonPayments.gift = data.gift;
this.amazonPayments.type = data.type;
},
+1 -1
View File
@@ -102,7 +102,7 @@ export function canEdit (store) {
}
break;
case 'group':
isUserCanEditTask = isUserGroupLeader || isUserGroupManager || isUserAdmin;
isUserCanEditTask = isUserGroupLeader || isUserGroupManager;
break;
default:
break;
-1
View File
@@ -23,7 +23,6 @@ const envVars = [
'BASE_URL',
'GA_ID',
'STRIPE_PUB_KEY',
'FACEBOOK_KEY',
'GOOGLE_CLIENT_ID',
'APPLE_AUTH_CLIENT_ID',
'AMPLITUDE_KEY',
+21 -18
View File
@@ -21,10 +21,10 @@
"foundNewItemsExplanation": "القيام بمهامك يمنحك الفرصة للفوز بقطع جديدة مثل البيضات، جرعات التفقيس، وطعام الحيوانات الأليفة.",
"onboardingProgress": "التقدم <%= percentage %>%",
"achievementCreatedTask": "إصنع مهمتك الأولى",
"achievementJustAddWaterModalText": "لقد أكملت جميع مغامرات حيوانات الأخطبوط، فرس البحر، الحبار، عارية الخيشوم، حية البحر، و الدلفين الأليفة!",
"achievementJustAddWaterText": "قد أكمل جميع مغامرات حيوانات الأخطبوط، فرس البحر، الحبار، عارية الخيشوم، حية البحر، و الدلفين الأليفة.",
"achievementMindOverMatterModalText": "لقد أكملت جميع مغامرات حيوانات الصخر، اللزج، والغزل الأليفة!",
"achievementMindOverMatterText": "قد أكمل جميع مغامرات حيوانات الصخر، اللزج، والغزل الأليفة.",
"achievementJustAddWaterModalText": "أكملت جميع مغامرات حيوانات الأخطبوط، فرس البحر، الحبار، عارية الخيشوم، حية البحر، و الدلفين الأليفة!",
"achievementJustAddWaterText": "أكملت جميع مغامرات حيوانات: الأخطبوط، فرس البحر، الحبار، عارية الخيشوم، حية البحر، و الدلفين.",
"achievementMindOverMatterModalText": "أكملت جميع مغامرات حيوانات الصخر، اللزج، والغزل الأليفة!",
"achievementMindOverMatterText": "أكملت جميع مغامرات حيوانات الصخر، اللزج، والغزل الأليفة.",
"achievementLostMasterclasserModalText": "لقد أكملت جميع المغامرات الستة عشرة في سلسلة مغامرات الخبير و حللت لغز الخبيرة المفقودة!",
"achievementMonsterMagusModalText": "لقد جمعت جميع الحيوانات الأليفة من الأموات الأحياء!",
"achievementMonsterMagusText": "قد جمع جميع الحيوانات الأليفة من الأموات الأحياء.",
@@ -37,7 +37,7 @@
"achievementBackToBasicsModalText": "لقد جمعت جميع الحيوانات الأليفة الأساسية!",
"achievementBackToBasicsText": "قد جمع جميع الحيوانات الأليفة الأساسية.",
"achievementBackToBasics": "عودة إلى الأساسيات",
"achievementJustAddWater": "أضف الماء وحسب",
"achievementJustAddWater": "أضف الماء فقط",
"achievementMindOverMatter": "العقل فوق المادة",
"achievementFedPet": "أطعم/ي حيواناً أليفاً",
"achievementHatchedPetModalText": "إذهب/ي إلى قائمة أغراضك وحاول/ي جمع بيضة وجرعة تفقيس معاً",
@@ -49,8 +49,8 @@
"achievementAridAuthorityModalText": "لقد أكملت ترويض جميع حيوانات الركوب الصحراوية!",
"achievementAridAuthorityText": "أكملوا ترويض جميع حيوانات الركوب الصحراوية.",
"achievementPartyUp": "لقد كونت فريقاً مع عضو من مجموعتك!",
"achievementAllYourBaseModalText": "لقد أكملت ترويض جميع حيوانات الركوب الأساسية!",
"achievementAllYourBaseText": "أكمل(ت) ترويض جميع حيوانات الركوب الأساسية.",
"achievementAllYourBaseModalText": "أكملت ترويض جميع حيوانات الركوب الأساسية!",
"achievementAllYourBaseText": "أكملت ترويض جميع حيوانات الركوب الأساسية.",
"achievementAllYourBase": "كل قاعدتك ملكنا الأن",
"achievementFedPetText": "أطعموا حيوانهم الأليف الأول.",
"achievementBugBonanza": "حفلة الحشرات",
@@ -118,22 +118,25 @@
"achievementDomesticatedModalText": "لقد جمعت كل الحيوانات الأليفة المستأنسة!",
"achievementDomesticatedText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة المستأنسة: النمس ، وخنزير غينيا ، والديك ، والخنزير الطائر ، والجرذ ، والأرنب ، والحصان ، والبقر!",
"achievementDomesticated": "ا-يا-ا-يا-يو",
"achievementBirdsOfAFeatherModalText": قوم بجمع كل الحيوانات الأليفة الطائرة!",
"achievementBirdsOfAFeatherModalText": "لقد قمت بجمع كل الحيوانات الأليفة الطائرة!",
"achievementZodiacZookeeperText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة في الأبراج: الجرذ ، البقرة ، الأرنب ، الأفعى ، الحصان ، الأغنام ، القرد ، الديك ، الذئب ، النمر ، الخنزير الطائر ، والتنين!",
"achievementGroupsBeta2022ModalText": "لقد ساعدت أنت ومجموعاتك Habitica من خلال الاختبار وتقديم التعليقات!",
"achievementGroupsBeta2022": "اختبار تجريبي تفاعلي",
"achievementGroupsBeta2022Text": "قدمت أنت ومجموعتك تعليقات لا تقدر بثمن لمساعدة Habitica في الاختبار.",
"achievementReptacularRumble": "الدمدمة الزاحفة",
"achievementReptacularRumbleModalText": "لقد جمعت كل الزواحف الأليفة!",
"achievementReptacularRumbleText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الزواحف: التمساح ، الزاحف المجنح ، الأفعى ، ترايسيراتوبس ، السلحفاة ، التيرانوصور ريكس ، وفيلوسيرابتور!",
"achievementBirdsOfAFeather": "متشابهون",
"achievementReptacularRumbleText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الزواحف: التمساح، الزاحف المجنح، الأفعى، ترايسيراتوبس، السلحفاة، التيرانوصور ريكس وفيلوسيرابتور!",
"achievementBirdsOfAFeather": "أصدقاء الطيران",
"achievementZodiacZookeeper": "حارس حديقة الحيوانات الفلكية",
"achievementShadyCustomerText": "لقد جمع كل حيوانات الظل الأليفة.",
"achievementShadyCustomerModalText": "لقد قمت بتجميع كل حيوانات الظل الأليفة!",
"achievementZodiacZookeeperModalText": "لقد قمت بتجميع كل الحيوانات الفلكية الأليفة!",
"achievementBirdsOfAFeatherText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الطائرة: الخنزير الطائر ، البومة ، الببغاء ، الزاحف المجنح ، الجريفون ، فالكون ، الطاووس ، والديك!",
"achievementShadeOfItAllModalText": "لقد قمت بترويض كل حيوانات الظل للركوب!",
"achievementShadyCustomer": "زبون الظل",
"achievementShadeOfItAll": "ظل كل شيء",
"achievementShadeOfItAllText": "لقد ربي كل حيوانات الظل للترويض."
"achievementShadyCustomerText": "جمع كل حيوانات الظل الأليفة.",
"achievementShadyCustomerModalText": "لقد جمعت كل حيوانات الظل الأليفة!",
"achievementZodiacZookeeperModalText": "لقد جمعت كل الحيوانات الأليفة الفلكية!",
"achievementBirdsOfAFeatherText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الطائرة: الخنزير الطائر، البومة، الببغاء، الزاحف المجنح، الجرايفون، فالكون، الطاووس والديك!",
"achievementShadeOfItAllModalText": "قمت بترويض كل الحيوانات السوداء",
"achievementShadyCustomer": "عميل الظل",
"achievementShadeOfItAll": "الظل فوق كل شيء",
"achievementShadeOfItAllText": "روض كل حيوانات الظل السوداء.",
"achievementWoodlandWizard": "ساحر الغابة",
"achievementWoodlandWizardText": "لقد فقس جميع الألوان القياسية لمخلوقات الغابة: الغرير، الدب، الغزال، الثعلب، الضفدع، القنفذ، البومة، الأفعى، السنجاب والشجيرة!",
"achievementWoodlandWizardModalText": "لقد جمعت كل حيوانات الغابة الأليفة!"
}
+31 -1
View File
@@ -306,5 +306,35 @@
"foodSaddleText": "سرج",
"foodSaddleNotes": "يحول حيوانًا أليفًا إلى مركب فورًا.",
"foodSaddleSellWarningNote": "Hey! This is a pretty useful item! Are you familiar with how to use a Saddle with your Pets?",
"foodNotes": "إطعام أحد الحيوانات الأليفة بهذا يمكنه من النمو ليصبح مركبًا قويًا."
"foodNotes": "إطعام أحد الحيوانات الأليفة بهذا يمكنه من النمو ليصبح مركبًا قويًا.",
"hatchingPotionBronze": "البرونز",
"hatchingPotionWatery": "المائي",
"hatchingPotionPolkaDot": "نقاط البولكا",
"hatchingPotionBlackPearl": "اللؤلؤ الأسود",
"hatchingPotionAutumnLeaf": "ورقة الخريف",
"hatchingPotionVampire": "مصاص الدماء",
"hatchingPotionDessert": "حلويات",
"hatchingPotionVeggie": "حديقة",
"questEggRobotAdjective": "مستقبلي",
"hatchingPotionFluorite": "الفلوريت",
"questEggRobotText": "حيوان الروبوت الأليف",
"questEggDolphinMountText": "حيوان الدولفين للركوب",
"hatchingPotionSolarSystem": "المجموعة الشمسية",
"hatchingPotionMoonglow": "لمعان القمر",
"questEggRobotMountText": "حيوان الروبوت للركوب",
"hatchingPotionAmber": "العنبر",
"hatchingPotionAurora": "الشفق القطبي",
"hatchingPotionSandSculpture": "تمثال رملي",
"hatchingPotionStainedGlass": "الزجاج الملون",
"questEggDolphinText": "حيوان الدولفين الأليف",
"hatchingPotionSunset": "غروب الشمس",
"hatchingPotionShadow": "الظل",
"hatchingPotionSilver": "الفضي",
"hatchingPotionTurquoise": "التيركواز",
"hatchingPotionSunshine": "شعاع الشمس",
"hatchingPotionVirtualPet": "حيوان افتراضي أليف",
"hatchingPotionWindup": "الزنبرك",
"hatchingPotionPorcelain": "الخزف الملون",
"hatchingPotionBirchBark": "لحاء الشجر",
"hatchingPotionRuby": "الياقوت"
}
+42 -5
View File
@@ -2,8 +2,8 @@
"defaultHabit1Text": "عمل منتج (اضغط على القلم للتحرير)",
"defaultHabit2Text": "أكل طعام غير صحى (أنقر على القلم للتعديل)",
"defaultHabit3Text": "صعود السلم/استخدام المصعد (اضغط على قلم الرصاص للتعديل)",
"defaultHabit4Text": "Add a task to Habitica",
"defaultHabit4Notes": "Either a Habit, a Daily, or a To-Do",
"defaultHabit4Text": "أضف مهمة إلى Habitica",
"defaultHabit4Notes": "إما عادة أو يومية أو مهمة",
"defaultTodo1Text": "الانضمام إلى Habitica (عَلِّم عليَّ)",
"defaultTodoNotes": "بإمكانك أن تكمل هذه المهمة، تعدلها، أو تحذفها.",
"defaultReward1Text": "15 دقيقة استراحة",
@@ -11,9 +11,46 @@
"defaultReward2Notes": "شاهد التلفاز، إلعب لعبة، كل حلوى، الأمر يعود لك!",
"defaultTag1": "عمل",
"defaultTag2": "تمرين",
"defaultTag3": "Health + Wellness",
"defaultTag3": "الصحة + الراحة",
"defaultTag4": "مدرسة",
"defaultTag5": "فرق",
"defaultTag6": "Chores",
"defaultTag7": "الإبداع"
"defaultTag6": "عمل منزلي",
"defaultTag7": "إبداع",
"workTodoProject": "مشروع العمل >> إكمال مشروع العمل",
"workDailyImportantTask": "أهم مهمة >> عملت على أهم مهمة اليوم",
"workHabitMail": "معالجة البريد الإلكتروني",
"workDailyImportantTaskNotes": "انقر لتحديد أهم مهمة لديك",
"workTodoProjectNotes": "انقر لتحديد اسم مشروعك الحالي + تعيين تاريخ الاستحقاق!",
"exerciseDailyText": "التمدد (ستريتش) >> روتين التمرين اليومي",
"healthDailyNotes": "انقر للتعديل!",
"exerciseTodoText": "إعداد جدول التمرين",
"healthTodoNotes": "انقر لإضافة قائمة مراجعة!",
"creativityDailyText": "العمل على مشروع إبداعي",
"schoolDailyNotes": "انقر لاختيار جدول الواجبات المنزلية!",
"creativityDailyNotes": "انقر لتسمية مشروعك الحالي + تحديد جدول المواعيد!",
"selfCareDailyText": "5 دقائق للتنفس بهدوء",
"creativityTodoText": "إنهاء مشروع إبداعي",
"selfCareDailyNotes": "انقر لاختيار الجدول!",
"selfCareTodoNotes": "انقر لتحديد خطة العمل!",
"defaultHabitText": "انقر هنا لتحديد أن هذه العادة سلبية، وتريد أن تقلع عنها",
"defaultHabitNotes": "أو قم بالحذف من نافذة التعديل",
"choresDailyNotes": "انقر لاختيار جدولك!",
"creativityHabit": "احترف المهارة >> + مارس تقنية إبداعية جديدة",
"exerciseHabit": "10 دقائق كارديو >> + 10 دقائق كارديو",
"healthTodoText": "حدد موعداً للمراجعة >> تفكر في تغيير صحي",
"schoolHabit": "دراسة / مماطلة",
"selfCareHabit": "خذ استراحة قصيرة",
"exerciseTodoNotes": "انقر لإضافة قائمة تدقيق!",
"choresHabit": "10 دقائق تنظيف",
"schoolTodoText": "إنهاء واجب دراسي",
"healthHabit": "غذاء صحي/ غذاء غير صحي",
"choresTodoText": "ترتيب الخزانة >> ترتيب الفوضى",
"choresTodoNotes": "انقر لتحديد منطقة الفوضى!",
"exerciseDailyNotes": "انقر لاختيار الجدول وتحديد التمارين!",
"schoolTodoNotes": "انقر لتسمية الواجب المنزلي وتحديد وقت الانتهاء!",
"creativityTodoNotes": "انقر لتسمية مشروعك",
"selfCareTodoText": "شارك في فعالية ممتعة",
"healthDailyText": "خيط الأسنان",
"schoolDailyText": "إنهاء واجبات منزلية",
"choresDailyText": "غسيل الصحون"
}
+147 -13
View File
@@ -4,12 +4,12 @@
"forgotPassword": "هل نسيت كلمة المرور؟",
"logout": "تسجيل الخروج",
"footerMobile": "هاتف",
"companyDonate": "تبرع",
"companyDonate": "تبرع لصالح Habitica",
"login": "تسجيل الدخول",
"companyBlog": "مقالات",
"communityInstagram": "Instagram",
"guidanceForBlacksmiths": "إرشادات للحدادين (المبرمجين)",
"companyContribute": "ساهم",
"companyContribute": "ساهم في تطوير Habitica",
"marketing1Header": "حسن عاداتك من خلال اللعب",
"footerCompany": "الشركة",
"companyAbout": "كيف يعمل",
@@ -20,31 +20,165 @@
"emailNewPass": "إرسال رابط إعادة تعيين كلمة المرور الى البريد الإلكتروني",
"footerSocial": "منصات التواصل الاجتماعي",
"free": "الإنضمام مجاناً",
"marketing1Lead1": "Habitica هي لعبة تساعدك على تحسين عادات الحياة الواقعية. إنها \"تحاكي\" حياتك عن طريق تحويل كل مهامك (العادات ، الأعمال اليومية ، المهام) إلى وحوش صغيرة عليك التغلب عليها. كلما كنت أفضل في هذا ، كلما تقدمت في اللعبة. إذا تعثرت في الحياة ، تبدأ شخصيتك بالتراجع في اللعبة.",
"marketing1Lead1": "Habitica هي لعبة تساعدك على تحسين عادات الحياة الواقعية. إنها \"تحاكي\" حياتك عن طريق تحويل كل مهامك (العادات، الأعمال اليومية، المهام) إلى وحوش صغيرة عليك التغلب عليها. كلما كنت أفضل في هذا، كلما تقدمت في اللعبة. إذا تعثرت في الحياة، تبدأ شخصيتك بالتراجع في اللعبة.",
"termsAndAgreement": "بالنقر على الزر ادناه، فإنك تشير الى كونك قد قرأت ووافقت على <a href='/static/terms'>شروط الخدمة</a> و <a href='/static/privacy'>سياسة الخصوصية</a>.",
"clearBrowserData": "حذف بيانات المتصفح",
"communityExtensions": "<a href='https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>الإضافات</a>",
"forgotPasswordSteps": "أدخل عنوان البريد الإلكتروني الذي استخدمته لتسجيل حسابك في Habitica.",
"pkQuestion1": "ما الذي ألهم Habitica؟ كيف بدأ؟",
"mobileAndroid": "Android",
"communityExtensions": "الإضافات والتطويرات",
"forgotPasswordSteps": "أدخل اسم المستخدم أو عنوان البريد الإلكتروني الخاص بك لتسجيل حسابك في Habitica.",
"pkQuestion1": "ما الذي ألهم Habitica؟ كيف بدأت؟",
"mobileAndroid": "تطبيق آندرويد",
"playButton": "العب",
"playButtonFull": "دخول Habitica",
"password": "كلمة المرور",
"newsArchive": "أرشيف الأخبار في ويكيا (متعدد اللغات)",
"marketing4Lead3-1": "تريد تحويل حياتك الى لعبة؟",
"marketing4Lead3-1": "هل تريد إدخال نظام اللعب لتطوير حياتك؟",
"marketing2Lead3Title": "تحدوا بعضكم",
"marketing2Lead2Title": "حارب الوحوش",
"marketing4Lead3-2": "مهتم بإدارة مجموعة في التعليم، الصحة، وغير ذلك؟",
"mobileIOS": "iOS",
"mobileIOS": "تطبيق آيفون",
"marketing1Lead1Title": "حياتك، لعبة تقمص الأدوار",
"marketing3Header": "التطبيقات والإضافات",
"marketing2Lead1Title": "الإنتاجية الاجتماعية",
"marketing4Lead2": "تكاليف الرعاية الصحية في إزدياد، ويجب فعل شيء ما. تم إنشاء مئات البرامج لتقليل التكاليف وتحسين الصحة. نعتقد أن Habitica قادر على تمهيد طريق حقيقي نحو أنماط حياة صحية.",
"marketing4Lead2": "تكاليف الرعاية الصحية في ازدياد، ويجب فعل شيء ما. تم إنشاء مئات البرامج لتقليل التكاليف وتحسين الصحة. نعتقد أن Habitica قادرة على تمهيد طريق حقيقي نحو أنماط حياة صحية.",
"oldNews": "أخبار",
"setNewPass": "تعيين كلمة مرور جديدة",
"presskitText": "شكراً لاهتمامك ب Habitica! يمكن استخدام الصور التالية للمقالات أو مقاطع الفيديو حول Habitica. لمزيد من المعلومات، يرجى التواصل معنا على <٪ = pressEnquiryEmail٪>.",
"presskitText": "شكراً لاهتمامك ب Habitica! يمكن استخدام الصور التالية للمقالات أو مقاطع الفيديو حول Habitica. لمزيد من المعلومات، يرجى التواصل معنا على <٪ = pressEnquiryEmail٪>.",
"invalidEmail": "إجراء إعادة تعيين كلمة المرور يتطلب عنوان بريد الكتروني صالح.",
"marketing1Lead2": "حسن عاداتك لبناء صورتك الرمزية، تباهى بالعتاد الذي كسبته!",
"marketing2Lead2": "ما هي لعبة تقمص الأدوار من دون معارك؟ حارب الوحوش مع فريقك. الوحوش هي \"super accountability mode\" - اليوم الذي تتغيب فيه عن النادي الرياضي هو يوم يؤذي فيه الوحش * الجميع! *",
"marketing3Lead1": "تتيح لك تطبيقات ** الايفون و الاندرويد ** الاعتناء بالأعمال أثناء التنقل. نحن ندرك أن تسجيل الدخول إلى موقع الويب للنقر على الأزرار يمكن أن يشكل عائق."
"marketing2Lead2": "ما هي لعبة تقمص الأدوار من دون معارك؟ حارب الوحوش مع فريقك. الوحوش هي \"super accountability mode\" - اليوم الذي تتغيب فيه عن النادي الرياضي هو يوم يؤذي فيه الوحش *الجميع!*",
"marketing3Lead1": "تتيح لك تطبيقات **الآيفون والآندرويد** الاعتناء بالأعمال أثناء التنقل. نحن ندرك أن تسجيل الدخول إلى موقع الويب والنقر على الأزرار يمكن أن يشكل عائقاً.",
"chores": "الواجبات المنزلية",
"footerProduct": "منتج",
"marketing2Header": "تنافس مع الأصدقاء، وانضم إلى مجموعات من اهتماماتك",
"presskit": "العدة الصحفية",
"pkAnswer1": "إذا كنت قد استثمرت وقتاً في تحسين مستوى شخصية ما في لعبة ما، فمن الصعب ألا تتساءل عن مدى روعة حياتك إذا بذلت كل هذا الجهد لتحسين نفسك في الحياة الواقعية بدلاً من الصورة الرمزية الخاصة بك. بدأنا في بناء Habitica لمعالجة هذا السؤال. <br /> تم إطلاق Habitica رسمياً مع Kickstarter في عام 2013، وبدأت الفكرة حقاً. منذ ذلك الحين، نمت لتصبح مشروعاً ضخماً، مدعوماً من قبل متطوعينا الرائعين في دعم المصدر المفتوح ومستخدمينا الكرماء.",
"pkAnswer3": "يعد الضغط الاجتماعي عاملاً محفزاً كبيراً لكثير من الناس، لذلك عرفنا أننا نريد أن يكون لدينا مجتمع قوي يحاسب بعضنا البعض على أهدافهم ويشجع نجاحاتهم. لحسن الحظ، فإن أحد الأشياء التي تقوم بها ألعاب الفيديو متعددة اللاعبين هو تعزيز الشعور بالانتماء للمجتمع بين مستخدميها! يستعير هيكل مجتمع Habitica من هذه الأنواع من الألعاب؛ يمكنك تكوين مجموعة صغيرة من الأصدقاء المقربين، ولكن يمكنك أيضاً الانضمام إلى مجموعات مصالح مشتركة أكبر تُعرف باسم النقابة. على الرغم من أن بعض المستخدمين يختارون اللعب منفردين، فإن معظمهم يقررون تشكيل شبكة دعم تشجع المساءلة الاجتماعية من خلال ميزات مثل المهام، حيث يقوم أعضاء الحزب بتجميع إنتاجيتهم لمحاربة الوحوش معاً.",
"pkQuestion2": "لماذا تعمل Habitica؟",
"marketing1Lead3Title": "ابحث عن جوائز عشوائية",
"marketing3Lead2Title": "الإدراجات",
"marketing2Lead3": "تتيح لك التحديات التنافس مع الأصدقاء والغرباء. كل من يفعل الأفضل في نهاية التحدي يفوز بجوائز خاصة.",
"pkQuestion3": "لماذا أضفت ميزات اجتماعية؟",
"marketing1Lead3": "بالنسبة للبعض، فإن المغامرة التي تحفزهم: نظام يسمى \"المكافآت العشوائية\". تستوعب Habitica جميع أنماط التشجيع والعقاب: الإيجابية والسلبية والمتوقعة والعشوائية.",
"marketing2Lead1": "بينما يمكنك لعب Habitica منفرداً، فإن الأضواء تضيء حقاً عندما تبدأ في التعاون والمنافسة وتحميل بعضكم المسؤولية. الجزء الأكثر فعالية في أي برنامج لتحسين الذات هو تحمل المسؤولية الاجتماعية، وهل هناك بيئة للمساءلة والمنافسة أفضل من لعبة فيديو؟",
"marketing3Lead2": "**أدوات الطرف الثالث الأخرى** تربط Habitica بجوانب مختلفة من حياتك. توفر واجهة برمجة التطبيقات الخاصة بنا تكاملاً سهلاً لأشياء مثل [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US)، التي تفقدك نقاطاً عند تصفح مواقع الويب غير المنتجة، وتكسبك نقاطاً عندما تكون المواقع منتجة. [شاهد المزيد هنا](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).",
"pkAnswer2": "إن تكوين عادة جديدة أمر صعب لأن الناس يحتاجون حقاً إلى تلك المكافأة الفورية الواضحة. على سبيل المثال، من الصعب البدء في تنظيف الأسنان بالخيط، لأنه على الرغم من أن طبيب الأسنان لدينا يخبرنا أنه أكثر صحة على المدى الطويل، إلا أنه في الوقت الحالي يتسبب في إصابة لثتك. <br /> يضيف أسلوب اللعب في Habitica إحساساً بالإشباع الفوري للأهداف اليومية من خلال مكافأة مهمة صعبة وإعطائك الخبرة، والذهب ... وربما حتى جائزة عشوائية، مثل بيضة التنين! يساعد هذا في الحفاظ على تحفيز الأشخاص حتى عندما لا يكون للمهمة نفسها مكافأة جوهرية، وقد رأينا أشخاصاً يغيرون حياتهم نتيجة لذلك. يمكنك التحقق من قصص النجاح هنا: https://habitversary.tumblr.com",
"marketing1Lead2Title": "احصل على معدات رائعة",
"enterHabitica": "ادخل Habitica",
"pkQuestion6": "من هو مستخدم Habitica التقليدي؟",
"pkQuestion8": "كيف أثرت Habitica على حياة الناس الحقيقية؟",
"pkLogo": "شعارات",
"register": "تسجيل",
"teams": "مجموعات",
"terms": "الأحكام والشروط",
"reportAccountProblems": "الإبلاغ عن مشاكل الحساب",
"subscriptionPaymentIssues": "قضايا الاشتراك والدفع",
"generalQuestionsSite": "أسئلة عامة حول الموقع",
"businessInquiries": "استفسارات الأعمال / التسويق",
"merchandiseInquiries": "استفسارات عن البضائع المادية (قمصان، ملصقات)",
"socialAlreadyExists": "تسجيل الدخول الاجتماعي هذا مرتبط بالفعل بحساب Habitica موجود.",
"invalidReqParams": "معلمات الطلب غير صالحة.",
"confirmPassword": "تأكيد كلمة المرور",
"emailPlaceholder": "على سبيل المثال، gryphon@example.com",
"emailUsernamePlaceholder": "على سبيل المثال، HabitRabbit أو gryphon@example.com",
"passwordPlaceholder": "على سبيل المثال، ******************",
"confirmPasswordPlaceholder": "تأكد من أنها نفس كلمة المرور!",
"joinHabitica": "انضم إلى Habitica",
"or": "أو",
"gamifyYourLife": "حول حياتك إلى لعبة",
"aboutHabitica": "Habitica هو تطبيق مجاني لبناء العادات والإنتاجية يتعامل مع حياتك الواقعية وكأنها لعبة. من خلال المكافآت والعقوبات داخل اللعبة لتحفيزك وشبكة اجتماعية قوية لإلهامك، يمكن أن تساعدك Habitica في تحقيق أهدافك لتصبح صحياً وتعمل بجد وسعادة.",
"trackYourGoalsDesc": "كن مسؤولاً عن طريق تتبع وإدارة عاداتك وأهدافك اليومية وقائمة المهام مع تطبيقات الجوال سهلة الاستخدام وواجهة الويب من Habitica.",
"battleMonstersDesc": "حارب الوحوش مع مستخدمي Habitica الآخرين! استخدم الذهب الذي تربحه لشراء مكافآت داخل اللعبة أو المكافآت الخاصة، مثل مشاهدة حلقة من برنامجك التلفزيوني المفضل.",
"healthAndFitnessDesc": "ليس لديك الحافز لاستعمال خيط الأسنان؟ لا يبدو أنك تريد الذهاب إلى النادي الرياضي؟ Habitica تجعل أخيراً الحصول على صحة جيدة تحدياً ممتعاً.",
"schoolAndWorkDesc": "سواء كنت تقوم بإعداد تقرير لمعلمك أو لرئيسك في العمل، فمن السهل تتبع تقدمك وأنت تتعامل مع أصعب مهامك.",
"muchmuchMoreDesc": "تعني قائمة مهامنا القابلة للتخصيص بالكامل أنه يمكنك تشكيل Habitica لتناسب أهدافك الشخصية. اعمل على مشاريع إبداعية، أو ركز على الرعاية الذاتية، أو اسعى وراء حلم مختلف - الأمر كله متروك لك.",
"levelUpAnywhereDesc": "تجعل تطبيقات الأجهزة المحمولة الخاصة بنا من السهل تتبع مهامك أثناء التنقل. حقق أهدافك بنقرة واحدة، بغض النظر عن مكانك.",
"getStarted": "انطلق!",
"marketing4Lead2Title": "نظام الصحة والراحة عن طريق اللعب",
"marketing4Lead3Title": "أدخل نظام اللعب إلى كل شيء",
"pkQuestion4": "لماذا تنقص الصحة الشخصية عند عدم إتمام المهام؟",
"pkAnswer4": "إذا لم تؤدي أحد أهدافك اليومية، فستفقد بعضاً من صحة شخصيتك الرمزية. يعد هذا العامل التحفيزي مهماً جداً لتشجيع الناس على متابعة أهدافهم اليومية، لأن الناس يكرهون حقاً إيذاء صورتهم الرمزية الصغيرة! بالإضافة إلى ذلك، تعد المساءلة الاجتماعية أمراً بالغ الأهمية لكثير من الأشخاص: أي إذا كنت تقاتل وحشاً مع أصدقائك، فإن تخطي مهامك يضر بصحتهم الرمزية أيضاً.",
"pkAnswer5": "إحدى الطرق التي نجحت بها Habitica في استخدام التحفيز هي أننا بذلنا الكثير من الجهد في التفكير في جوانب اللعبة للتأكد من أنها ممتعة بالفعل. لقد قمنا أيضاً بتضمين العديد من المكونات الاجتماعية، لأننا نشعر أن بعض الألعاب الأكثر تحفيزاً تتيح لك اللعب مع الأصدقاء، ولأن الأبحاث أظهرت أنه من الأسهل تكوين عادات عندما تكون لديك مسؤولية تجاه الآخرين.",
"pkAnswer6": "يستخدم الكثير من الأشخاص المختلفين Habitica! أكثر من نصف مستخدمينا تتراوح أعمارهم بين 18 و 34 عاماً، لكن لدينا أجداد يستخدمون الموقع مع أحفادهم الصغار وفي كل الأعمار. غالباً ما تنضم العائلات إلى الحفلة وتقاتل الوحوش معاً. <br /> يتمتع العديد من مستخدمينا بمعرفة في الألعاب، ولكن من المدهش أنه عندما أجرينا استطلاعاً منذ فترة، تم تحديد 40٪ من مستخدمينا على أنهم ليسوا لاعبين! لذلك يبدو أن طريقتنا يمكن أن تكون فعالة لأي شخص يريد أن يشعر بالإنتاجية والعافية ليشعر بمزيد من المرح.",
"pkAnswer7": "تستخدم Habitica فن البكسل لعدة أسباب، بالإضافة إلى عامل الحنين الممتع، فإن فن البكسل سهل للغاية بالنسبة لفنانينا المتطوعين الذين يرغبون في المشاركة. من الأسهل كثيراً الحفاظ على اتساق فن البكسل حتى عندما يساهم الكثير من الفنانين المختلفين، ويتيح لنا إنشاء الكثير من الأعمال الجديدة بسرعة وزيادة المحتوى!",
"localStorageTryFirst": "إذا كنت تواجه مشكلات في Habitica ، فانقر فوق الزر أدناه لمسح التخزين المحلي ومعظم ملفات تعريف الارتباط لهذا الموقع (لن تتأثر مواقع الويب الأخرى). ستحتاج إلى تسجيل الدخول مرة أخرى بعد ذلك، لذا تأكد أولاً من أنك تعرف معلومات تسجيل الدخول الخاصة بك من اسم مستخدم وكلمة سر. يمكن العثور عليها في الإعدادات -> <%= linkStart %>Site<%= linkEnd %>.",
"missingUsernameEmail": "اسم المستخدم أو البريد الإلكتروني مفقود.",
"emailTaken": "عنوان البريد الإلكتروني مستخدم بالفعل في الحساب.",
"usernameInfo": "أصبحت الآن أسماء تسجيل دخول المستخدمين فريدة ستظهر بجانب اسم العرض الخاص بك وتستخدم للدعوات وإشارات @ للدردشة والمراسلة.<br> <br> إذا كنت ترغب في معرفة المزيد حول هذا التغيير، <a href='https://habitica.fandom.com/wiki/Player_Names' target='_blank'>قم بزيارة موقع wiki الخاص بنا</a>.",
"passwordConfirmationMatch": "تأكيد كلمة المرور لا يتطابق مع كلمة المرور.",
"invalidLoginCredentialsLong": "عذراً، عنوان بريدك الإلكتروني / اسم المستخدم أو كلمة المرور غير صحيحين.\n- تأكد من كتابتها بشكل صحيح. اسم المستخدم وكلمة المرور حساسان لحالة الأحرف الكبيرة والصغيرة.\n- ربما تكون قد اشتركت في حساب Facebook أو Google، وليس عبر البريد الإلكتروني، لذا تحقق جيداً من خلال تجربتها.\n- إذا نسيت كلمة المرور الخاصة بك، انقر فوق \"نسيت كلمة المرور\".",
"alreadyHaveAccountLogin": "لديك بالفعل حساب Habitica؟ <strong> تسجيل الدخول </strong>",
"earnRewardsDesc": "أنجز المهام لترفع مستوى شخصيتك الرمزية الخاصة بك وفتح الميزات داخل اللعبة مثل درع المعركة والحيوانات الأليفة الغامضة والمهارات السحرية وحتى المهام!",
"featuredIn": "أعلن عنها في",
"usernameTOSRequirements": "يجب أن تتوافق أسماء المستخدمين مع <a href='/static/terms' target='_blank'> شروط الخدمة </a> و <a href='/static/community-guidelines' target='_blank'> إرشادات المجتمع < / أ>. إذا لم تكن قد قمت بتعيين اسم تسجيل دخول من قبل، فسيتم إنشاء اسم المستخدم تلقائياً.",
"accountSuspended": "تم حظر هذا الحساب، للمستخدم \"<%= userId %>\"، لخرقه إرشادات المجتمع (https://habitica.com/static/community-guidelines) أو شروط الخدمة (https://habitica.com/static/community-guidelines). للحصول على تفاصيل أو لطلب إلغاء الحظر، يرجى إرسال بريد إلكتروني إلى مدير المجتمع لدينا على <%= communityManagerEmail %> أو اطلب من والديك أو الوصي عليك إرسال بريد إلكتروني إليهم. الرجاء تضمين اسم المستخدم @ في البريد الإلكتروني.",
"cannotFulfillReq": "لا يمكن تلبية طلبك. أرسل بريداً إلكترونياً إلى admin@habitica.com إذا استمر هذا الخطأ.",
"pkAnswer8": "يمكنك العثور على الكثير من الشهادات حول كيفية مساعدة Habitica للأشخاص هنا: https://habitversary.tumblr.com",
"sync": "تحديث",
"tumblr": "تمبلر Tumblr",
"emailOrUsername": "البريد الإلكتروني أو اسم المستخدم (مع الانتباه للأحرف الكبيرة والصغيرة)",
"missingUsername": "اسم المستخدم مفقود.",
"wrongPassword": "كلمة مرور خاطئة.",
"incorrectDeletePhrase": "يرجى كتابة <%= magicWord %> بأحرف كبيرة لحذف حسابك.",
"newEmailRequired": "عنوان البريد الإلكتروني الجديد مفقود.",
"accountSuspendedTitle": "تم تعليق حسابك",
"unsupportedNetwork": "هذه الشبكة غير مدعومة حالياً.",
"onlySocialAttachLocal": "يمكن إضافة المصادقة المحلية إلى تسجيل دخول حساب اجتماعي فقط.",
"loginWithSocial": "قم بالدخول عن طريق <%= social %>",
"usernamePlaceholder": "على سبيل المثال، HabitRabbit",
"motivateYourself": "حفز نفسك لتحقيق أهدافك.",
"timeToGetThingsDone": "حان الوقت للاستمتاع عندما تنجز الأشياء! انضم إلى أكثر من <%= userCountInMillions %> مليون مواطن وحسن حياتك مهمة واحدة في كل مرة.",
"earnRewards": "اكسب مكافآت مقابل تحقيق أهدافك",
"playersUseToImprove": "يستخدم اللاعبون Habitica للترقي",
"healthAndFitness": "الصحة واللياقة",
"muchmuchMore": "والكثير الكثير!",
"joinMany": "انضم إلى أكثر من <%= userCountInMillions %> مليون شخص يستمتعون خلال تحقيق أهدافهم!",
"work": "العمل",
"levelUpAnywhere": "تقدم في المستوى من أي مكان",
"learnMore": "تعلم أكثر",
"usernameTaken": "اسم المستخدم غير متاح.",
"pkBoss": "وحوش",
"username": "اسم المستخدم",
"trackYourGoals": "تتبع عاداتك وأهدافك",
"notAnEmail": "عنوان البريد الإلكتروني غير صالح.",
"missingEmail": "البريد الإلكتروني مفقود.",
"dontHaveAccountSignup": "ليس لديك حساب Habitica؟ <strong> إنشاء حساب </strong>",
"pkQuestion7": "لماذا تستخدم Habitica فن البكسل؟",
"tasks": "المهام",
"localStorageTryNext": "إذا استمرت المشكلة، يرجى <%= linkStart %>الإبلاغ عن الخطأ<%= linkEnd %> إذا لم تكن قد قمت ذلك.",
"pkMoreQuestions": "هل لديك سؤال غير موجود في هذه القائمة؟ أرسل بريد إلكتروني إلى admin@habitica.com!",
"mobileApps": "تطبيقات الموبايل",
"localStorageClearExplanation": "سيؤدي هذا الزر إلى مسح التخزين المحلي ومعظم ملفات تعريف الارتباط وتسجيل خروجك.",
"marketing4Header": "لاستخدام المنظمات",
"pkQuestion5": "ما الذي يميز Habitica عن برامج التلعيب (إضافة نظام اللعب) الأخرى؟",
"marketing4Lead1": "التعليم هو أحد أفضل القطاعات لتطبيق نظام اللعب. نعلم جميعاً مدى تعلق الطلاب بالهواتف والألعاب هذه الأيام؛ نعم لتسخير تلك القوة! إن كنت معلماً؛ حرض طلابك ضد بعضهم البعض في منافسة ودية، وكافئ السلوك الجيد بجوائز نادرة، تشاهد درجاتهم وسلوكهم يرتفع.",
"usernameTime": "حان الوقت لتعيين اسم المستخدم الخاص بك!",
"missingPassword": "كلمة المرور مفقودة.",
"joinToday": "انضم إلى Habitica اليوم",
"marketing4Lead1Title": "نظام التعليم عن طريق اللعب",
"memberIdRequired": "\"member\" يجب أن يكون معرف UUID صالحاً.",
"modelNotFound": "هذا النموذج غير موجود.",
"signUpWithSocial": "قم بالتسجيل عن طريق <%= social %>",
"pkSamples": "عينات لقطات شاشة",
"pkWebsite": "موقع",
"schoolAndWork": "الدراسة والعمل",
"invalidEmailDomain": "لا يمكنك تسجيل البريد الإلكتروني من المخدمات التالية: <%= domains %>",
"missingNewPassword": "كلمة المرور الجديدة مفقودة.",
"heroIdRequired": "\"heroId\" يجب أن يكون معرف UUID صالحاً.",
"signup": "اشتراك",
"minPasswordLength": "يجب أن تتكون كلمة المرور من 8 أحرف أو أكثر.",
"singUpForFree": "سجل مجاناً",
"localStorageClear": "مسح البيانات المحلية",
"pkPromo": "إجراءات",
"tweet": "تغريد",
"privacy": "سياسة الخصوصية",
"reportCommunityIssues": "الإبلاغ عن مشاكل المجتمع",
"checkOutMobileApps": "جرب تطبيقات الجوال!",
"school": "المدرسة",
"missingAuthHeaders": "سلاسل المصادقة مفقودة.",
"passwordReset": "إذا كان لدينا بريدك الإلكتروني أو اسم المستخدم الخاصين بك في الملف، فقد تم إرسال تعليمات تعيين كلمة مرور جديدة إلى بريدك الإلكتروني.",
"invalidCredentials": "لا يوجد حساب يستخدم بيانات الاعتماد هذه.",
"cantDetachSocial": "يفتقر الحساب إلى طريقة مصادقة أخرى؛ لا يمكن فصل طريقة المصادقة هذه.",
"usernameLimitations": "يجب أن يكون اسم المستخدم من 1 إلى 20 حرفاً، ويحتوي فقط على الأحرف، والأرقام من 0 إلى 9، والواصلات، أو الشرطات السفلية، ولا يمكن أن يتضمن أي مصطلحات غير ملائمة.",
"battleMonsters": "حارب الوحوش مع الأصدقاء",
"passwordResetPage": "إعادة تعيين كلمة المرور"
}
+111 -111
View File
@@ -1,39 +1,39 @@
{
"languageName": "العربية",
"stringNotFound": "سلسلة المحارف '<%= string %>' لم توجد.",
"stringNotFound": "سلسلة المحارف '<%= string %>' غير موجودة.",
"habitica": "Habitica",
"onward": "إلي الأمام!",
"done": "Done",
"gotIt": "Got it!",
"onward": "إلى الأمام!",
"done": "انتهى",
"gotIt": "فهمت!",
"titleTimeTravelers": "مسافرين عبر الزمن",
"titleSeasonalShop": "المتجر الموسمي",
"saveEdits": "Save Edits",
"showMore": "Show More",
"showLess": "Show Less",
"markdownHelpLink": "Markdown formatting help",
"bold": "**Bold**",
"saveEdits": "حفظ التغييرات",
"showMore": "إظهار المزيد",
"showLess": "عرض أقل",
"markdownHelpLink": "تعليمات تنسيق لغة Markdown",
"bold": "**سميك**",
"markdownImageEx": "![نص بديل إلزامي](https://habitica.com/cake.png \"ظهور عنوان اختياري عند المرور بالماوس\")",
"code": "`code`",
"achievements": "الإنجازات",
"basicAchievs": "Basic Achievements",
"seasonalAchievs": "Seasonal Achievements",
"specialAchievs": "Special Achievements",
"basicAchievs": "الإنجازات الأساسية",
"seasonalAchievs": "الإنجازات الموسمية",
"specialAchievs": "الإنجازات الخاصة",
"modalAchievement": "إنجاز!",
"special": "خاص",
"site": "الموقع",
"help": "مساعدة",
"user": "المستخدم",
"market": "المتجر",
"newSubscriberItem": "You have new <span class=\"notification-bold-blue\">Mystery Items</span>",
"newSubscriberItem": "لديك <span class=\"notification-bold-blue\"> عناصر غامضة جديدة </span>",
"subscriberItemText": "كل شهر يحصل المشتركون على غرض غامض. عادةً يصبح متاحا في بداية الشهر. راجع صفحة الويكي \"الغرض الغامض\" للمزيد من المعلومات.",
"all": "الجميع",
"none": "لا شيء",
"more": "<%= count %> more",
"more": "<%= count %> أكثر",
"and": "و",
"submit": "إرسال",
"close": "إغلاق",
"saveAndClose": "حفظ وإغلاق",
"saveAndConfirm": "Save & Confirm",
"saveAndConfirm": "حفظ & تأكيد",
"cancel": "إلغاء",
"ok": "حسناً",
"add": "إضافة",
@@ -47,29 +47,29 @@
"delete": "حذف",
"gemsPopoverTitle": "جواهر",
"gems": "الجواهر",
"needMoreGems": "Need More Gems?",
"needMoreGemsInfo": "Purchase Gems now, or become a subscriber to buy Gems with Gold, get monthly mystery items, enjoy increased drop caps and more!",
"needMoreGems": "تحتاج المزيد من الأحجار الكريمة؟",
"needMoreGemsInfo": "قم بشراء الأحجار الكريمة الآن، أو اشترك لتكون قادراً على شراء الأحجار الكريمة بالذهب، واحصل على عناصر غامضة شهرياً، واستمتع بالتميز والجوائز المتزايدة والمزيد!",
"veteran": "متمرس",
"veteranText": "نجا من \"العادة الرمادية\" (موقعنا السابق)، وحصل على العديد من ندب المعارك من أخطائه.",
"originalUser": "مستخدم أصلي!",
"originalUserText": "واحد من المتبنين <em>الأوائل</em>. نتكلم عن مجرب منذ البداية!",
"habitBirthday": "حفلة يوم ميلاد Habitica",
"habitBirthdayText": "احتفل بيوم ميلاد Habitica!",
"habitBirthdayPluralText": "Celebrated <%= count %> Habitica Birthday Bashes!",
"habitBirthdayPluralText": "احتفل <%= count %> أيام ميلاد Habitica!",
"habiticaDay": "يوم تسمية Habitica",
"habiticaDaySingularText": "احتفل بيوم تسمية Habitica! شكراً لكونك مستخدماً رائعاً.",
"habiticaDayPluralText": "Celebrated <%= count %> Naming Days! Thanks for being a fantastic user.",
"habiticaDayPluralText": "احتفل <%= count %> بأيام تسمية Habitica! شكراً لكونك مستخدماً رائعاً.",
"achievementDilatory": "المنقذ من المماطلة",
"achievementDilatoryText": "ساعد على هزيمة تنين المماطلة المروع خلال احتفال صيف 2014!",
"costumeContest": "متسابق الأزياء التنكرية",
"costumeContestText": "Participated in the Habitoween Costume Contest. See some of the awesome entries at blog.habitrpg.com!",
"costumeContestTextPlural": "Participated in <%= count %> Habitoween Costume Contests. See some of the awesome entries at blog.habitrpg.com!",
"newPassSent": "If we have your email on file, instructions for setting a new password have been sent to your email.",
"costumeContestText": "شارك في مسابقة أزياء الهالوين. شاهد بعض الأفكار الرائعة على blog.habitrpg.com!",
"costumeContestTextPlural": "شارك في <%= count %> مسابقات أزياء الهالوين. شاهد بعض الأفكار الرائعة على blog.habitrpg.com!",
"newPassSent": "إذا كان لدينا بريدك الإلكتروني في الملف، فقد تم إرسال تعليمات تعيين كلمة مرور جديدة إلى بريدك الإلكتروني.",
"error": "خطأ",
"menu": "القائمة",
"notifications": "الإشعارات",
"noNotifications": "You're all caught up!",
"noNotificationsText": "The notification fairies give you a raucous round of applause! Well done!",
"noNotifications": "لديك آخر التحديثات!",
"noNotificationsText": "تمنحك جنيات الإشعارات جولة من التصفيق الصاخب! أحسنت!",
"clear": "إزالة",
"audioTheme": "سمة الصوت",
"audioTheme_off": "تعطيل",
@@ -77,17 +77,17 @@
"audioTheme_wattsTheme": "سمة واتس",
"audioTheme_gokulTheme": "سمة غوكل",
"audioTheme_luneFoxTheme": "سمة لونفوكس",
"audioTheme_rosstavoTheme": "Rosstavo's Theme",
"audioTheme_dewinTheme": "Dewin's Theme",
"audioTheme_airuTheme": "Airu's Theme",
"audioTheme_beatscribeNesTheme": "Beatscribe's NES Theme",
"audioTheme_arashiTheme": "Arashi's Theme",
"audioTheme_triumphTheme": "Triumph Theme",
"audioTheme_lunasolTheme": "Lunasol Theme",
"audioTheme_spacePenguinTheme": "SpacePenguin's Theme",
"audioTheme_maflTheme": "MAFL Theme",
"audioTheme_pizildenTheme": "Pizilden's Theme",
"audioTheme_farvoidTheme": "Farvoid Theme",
"audioTheme_rosstavoTheme": "سمة روسستافو",
"audioTheme_dewinTheme": "سمة ديوين",
"audioTheme_airuTheme": "سمة آيرو",
"audioTheme_beatscribeNesTheme": "سمة بيتسكرايب NES",
"audioTheme_arashiTheme": "سمة أراشي",
"audioTheme_triumphTheme": "سمة الانتصار الساحق",
"audioTheme_lunasolTheme": "سمة لوناسول",
"audioTheme_spacePenguinTheme": "سمة بطريق الفضاء",
"audioTheme_maflTheme": "سمة مافل",
"audioTheme_pizildenTheme": "سمة بيزيلدن",
"audioTheme_farvoidTheme": "سمة فارفويد",
"reportBug": "بلّغ عن خطأ",
"overview": "لمحة عامة للمستخدمين الجدد",
"dateFormat": "صيغة التاريخ",
@@ -95,110 +95,110 @@
"achievementStressbeastText": "ساعد على هزيمة وحش التوتر الفظيع خلال احتفال شتاء 2014!",
"achievementBurnout": "المنقذ من الحقول المزدهرة",
"achievementBurnoutText": "ساعد على هزيمة احتراقي واستعادة أشباح العادم خلال احتفال خريف 2015!",
"achievementBewilder": "Savior of Mistiflying",
"achievementBewilderText": "Helped defeat the Be-Wilder during the 2016 Spring Fling Event!",
"achievementDysheartener": "Savior of the Shattered",
"achievementDysheartenerText": "Helped defeat the Dysheartener during the 2018 Valentine's Event!",
"cards": "Cards",
"sentCardToUser": "You sent a card to <%= profileName %>",
"cardReceived": "You received a <span class=\"notification-bold-blue\"><%= card %></span>",
"achievementBewilder": "المنقذ من الخطأ",
"achievementBewilderText": "ساعد في هزيمة Be-Wilder خلال حدث Spring Fling لعام 2016!",
"achievementDysheartener": "منقذ المحطمين",
"achievementDysheartenerText": "ساعد في هزيمة Dysheartener خلال حدث عيد الحب 2018!",
"cards": "البطاقات",
"sentCardToUser": "لقد أرسلت بطاقة إلى <%= profileName %>",
"cardReceived": "لقد وصلتك <span class=\"notification-bold-blue\"><%= card %></span>",
"greetingCard": "بطاقة معايدة",
"greetingCardExplanation": "كلاكما ستحصلان على إنجاز الصاحب المبتهج!",
"greetingCardNotes": "أرسل بطاقة تحية لعضو بالفريق.",
"greeting0": "مرحباً!",
"greeting1": "فقط أحببت أن أقول مرحباً :)",
"greeting2": "`waves frantically`",
"greeting2": "`موجات حميمية`",
"greeting3": "مرحباً يا!",
"greetingCardAchievementTitle": "الصاحب المبتهج",
"greetingCardAchievementText": "Hey! Hi! Hello! Sent or received <%= count %> greeting cards.",
"greetingCardAchievementText": "مرحباً! لقد أرسلت أو استلمت <%= count %> بطاقة تحية.",
"thankyouCard": "بطاقة شكر",
"thankyouCardExplanation": "كلاكما ستحصلان على إنجاز الممتن كثيراً!",
"thankyouCardNotes": "أرسل بطاقة شكر لعضو فريق.",
"thankyou0": "شكراً جزيلاً لك!",
"thankyou1": "شكراً، شكراً، شكراً!",
"thankyou1": "شكراً جزيلاً، شكراً!",
"thankyou2": "أرسل لك ألف شكر.",
"thankyou3": "أنا ممتن كثيراً، شكراً لك!",
"thankyouCardAchievementTitle": "ممتن لك بشدة",
"thankyouCardAchievementText": "Thanks for being thankful! Sent or received <%= count %> Thank-You cards.",
"thankyouCardAchievementText": "شكراً لكونك ممتناً! لقد أرسلت أو استلمت <%= count %> رسالة شكر.",
"birthdayCard": "بطاقة تهنئة بيوم الميلاد",
"birthdayCardExplanation": "كلاكما تحصلان على إنجاز يوم الميلاد المليء بالحظ!",
"birthdayCardNotes": "أرسل بطاقة تهنة يوم الميلاد لأحد أعضاء فريقك.",
"birthday0": "يوم ميلاد سعيد!",
"birthdayCardAchievementTitle": "يوم ميلاد مليء بالحظ",
"birthdayCardAchievementText": "Many happy returns! Sent or received <%= count %> birthday cards.",
"congratsCard": "Congratulations Card",
"congratsCardExplanation": "You both receive the Congratulatory Companion achievement!",
"congratsCardNotes": "Send a Congratulations card to a party member.",
"congrats0": "Congratulations on your success!",
"congrats1": "I'm so proud of you!",
"congrats2": "Well done!",
"congrats3": "A round of applause for you!",
"congrats4": "Bask in your well-deserved success!",
"congratsCardAchievementTitle": "Congratulatory Companion",
"congratsCardAchievementText": "It's great to celebrate your friends' achievements! Sent or received <%= count %> congratulations cards.",
"getwellCard": "Get Well Card",
"getwellCardExplanation": "You both receive the Caring Confidant achievement!",
"getwellCardNotes": "Send a Get Well card to a party member.",
"getwell0": "Hope you feel better soon!",
"getwell1": "Take care! <3",
"getwell2": "You're in my thoughts!",
"getwell3": "Sorry you're not feeling your best!",
"getwellCardAchievementTitle": "Caring Confidant",
"getwellCardAchievementText": "Well-wishes are always appreciated. Sent or received <%= count %> get well cards.",
"goodluckCard": "Good Luck Card",
"goodluckCardExplanation": "You both receive the Lucky Letter achievement!",
"goodluckCardNotes": "Send a good luck card to a party member.",
"goodluck0": "May luck always follow you!",
"goodluck1": "Wishing you lots of luck!",
"goodluck2": "I hope luck is on your side today and always!!",
"goodluckCardAchievementTitle": "Lucky Letter",
"goodluckCardAchievementText": "Wishes for good luck are great encouragement! Sent or received <%= count %> good luck cards.",
"streakAchievement": "You earned a streak achievement!",
"firstStreakAchievement": "21-Day Streak",
"streakAchievementCount": "<%= streaks %> 21-Day Streaks",
"twentyOneDays": "You've completed your Daily for 21 days in a row!",
"dontBreakStreak": "Amazing job. Don't break the streak!",
"birthdayCardAchievementText": "العديد من عوائد سعيدة! لقد أرسلت أو استلمت <%= count %> بطاقة عيد ميلاد سعيد.",
"congratsCard": "بطاقة تهنئة",
"congratsCardExplanation": "كلاكما تلقى إنجاز الرفيق المهنئ!",
"congratsCardNotes": "أرسل بطاقة تهنئة لعضو الفريق.",
"congrats0": "مبارك نجاحك!",
"congrats1": "أنا فخور جداً بك!",
"congrats2": "أحسنت!",
"congrats3": "جولة من التصفيق لك!",
"congrats4": "تشرق في نجاحك الذي تستحقه!",
"congratsCardAchievementTitle": "الرفيق المهنئ",
"congratsCardAchievementText": "إنه لأمر رائع أن تحتفل بإنجازات أصدقائك! لقد أرسلت أو استلمت <%= count %> بطاقة تهنئة.",
"getwellCard": "بطاقة التعافي والشفاء العاجل",
"getwellCardExplanation": "كلاكما حصل على إنجاز رعاية المقرب!",
"getwellCardNotes": "أرسل بطاقة تمنيات بالشفاء العاجل إلى أحد أعضاء الفريق.",
"getwell0": "أتمنى أن تشعر بتحسن عما قريب!",
"getwell1": "اعتن بنفسك! <3",
"getwell2": "أنت في أفكاري!",
"getwell3": "آسف لأنك لست في أفضل حالاتك!",
"getwellCardAchievementTitle": "رعاية المقرب",
"getwellCardAchievementText": "إنه لموضع تقدير، التمنيات الطيبة. لقد أرسلت أو استلمت <%= count %> بطاقة تمنيات طيبة.",
"goodluckCard": "بطاقة حظ سعيد",
"goodluckCardExplanation": "كلاكما تلقيت إنجاز البريد المحظوظ!",
"goodluckCardNotes": "أرسل بطاقة حظ سعيد إلى أحد أعضاء الفريق.",
"goodluck0": "فليتبعك الحظ دائماً!",
"goodluck1": "أتمنى لك الكثير من الحظ!",
"goodluck2": "أتمنى أن يكون الحظ بجانبك اليوم ودائماً !!",
"goodluckCardAchievementTitle": "البريد المحظوظ",
"goodluckCardAchievementText": "التمنيات بالتوفيق هي تشجيع كبير! لقد أرسلت أو استلمت <%= count %> بطاقة حظ سعيد.",
"streakAchievement": "لقد ربحت إنجازاً متتالياً!",
"firstStreakAchievement": "ضربة 21-يوماً",
"streakAchievementCount": "<%= streaks %> ضربة 21-يوماً",
"twentyOneDays": "لقد أكملت برنامجك اليومي لمدة 21 يوماً على التوالي!",
"dontBreakStreak": "عمل مبهر. لا تكسر الضربة المتتالية!",
"dontStop": "لا تتوقف الآن!",
"wonChallengeShare": "فزت بتحد في Habitica!",
"orderBy": "Order By <%= item %>",
"you": "(you)",
"loading": "Loading...",
"userIdRequired": "User ID is required",
"resetFilters": "Clear all filters",
"applyFilters": "Apply Filters",
"wantToWorkOn": "I want to work on:",
"categories": "Categories",
"animals": "Animals",
"exercise": "Exercise",
"creativity": "Creativity",
"health_wellness": "Health & Wellness",
"self_care": "Self-Care",
"habitica_official": "Habitica Official",
"academics": "Academics",
"advocacy_causes": "Advocacy + Causes",
"entertainment": "Entertainment",
"finance": "Finance",
"orderBy": "ترتيب حسب <%= item %>",
"you": "(أنت)",
"loading": "تحميل...",
"userIdRequired": "مطلوب ID المستخدم (User ID)",
"resetFilters": "امسح كل عوامل التصفية",
"applyFilters": "تطبيق عوامل التصفية",
"wantToWorkOn": "أريد العمل على:",
"categories": "الفئات",
"animals": "الحيوانات",
"exercise": "التمرين",
"creativity": "الإِبداع",
"health_wellness": "الصحة & الراحة",
"self_care": "العناية بالنفس",
"habitica_official": "Habitica رسمي",
"academics": "أكاديمي",
"advocacy_causes": "تطوع + مجتمعات الاهتمام",
"entertainment": "وسائل الترفيه",
"finance": "الموارد المالية",
"health_fitness": "الصحة واللياقة البدنية",
"hobbies_occupations": "الهوايات والمهن",
"location_based": "Location-based",
"location_based": "معتمد على الموقع",
"mental_health": "الصحة العقلية + العناية الذاتية",
"getting_organized": "Getting Organized",
"self_improvement": "Self-Improvement",
"spirituality": "Spirituality",
"time_management": "Time-Management + Accountability",
"recovery_support_groups": "Recovery + Support Groups",
"dismissAll": "Dismiss All",
"messages": "Messages",
"emptyMessagesLine1": "You don't have any messages",
"getting_organized": "أن تصبح أكثر تنظيماً",
"self_improvement": "تطوير الذات",
"spirituality": "الروحانية",
"time_management": "إدارة الوقت + المسؤولية",
"recovery_support_groups": "مجموعات التجديد + الدعم",
"dismissAll": "امسح الكل",
"messages": "الرسائل",
"emptyMessagesLine1": "ليس لديك أية رسائل",
"emptyMessagesLine2": "يمكنك إرسال رسالة جديدة إلى مستخدم من خلال زيارة ملفه الشخصي والنقر على زر \"رسالة\".",
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span> sent you a message",
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span> أرسل لك رسالة",
"letsgo": "لنذهب!",
"selected": "Selected",
"howManyToBuy": "How many would you like to buy?",
"contactForm": "Contact the Moderation Team",
"selected": "محدد",
"howManyToBuy": "كم تريد أن تشتري؟",
"contactForm": "تواصل مع فريق الإشراف",
"congratulations": "تهانينا!",
"finish": "نهاية",
"onboardingAchievs": "إنجازات الإعداد",
"onboardingAchievs": "الإنجازات الترحيبية",
"reportBugHeaderDescribe": "يُرجى وصف الخطأ الذي تواجهه وسيتواصل معك فريقنا.",
"reportEmailText": "سيتم استخدام هذا فقط للاتصال بك بخصوص تقرير الخطأ.",
"reportEmailPlaceholder": "عنوان بريدك الإلكتروني",
+4 -4
View File
@@ -1,10 +1,10 @@
{
"noItemsAvailableForType": "لا يوجد لديك <%= type %>",
"noItemsAvailableForType": "لا يوجد لديك <%= type %>.",
"foodItemType": "طعام الحيوانات الأليفة",
"eggsItemType": "بيض",
"hatchingPotionsItemType": "جرعات الفقس",
"specialItemType": "حاجات خاصة",
"lockedItem": "حاجة مقفلة",
"hatchingPotionsItemType": "جرعات التلقيح",
"specialItemType": "عناصر خاصة",
"lockedItem": "عنصر مقفل",
"petAndMount": "حيوان أليف وحيوان للركوب",
"allItems": "كل العناصر"
}
+21 -21
View File
@@ -1,25 +1,25 @@
{
"unlockedReward": "You have received <%= reward %>",
"earnedRewardForDevotion": "You have earned <%= reward %> for being committed to improving your life.",
"nextRewardUnlocksIn": "Check-ins until your next prize: <%= numberOfCheckinsLeft %>",
"awesome": "Awesome!",
"unlockedReward": "لقد استلمت <%= reward %>",
"earnedRewardForDevotion": "لقد حصلت على <%= reward %> لكونك ملتزماً بتحسين حياتك.",
"nextRewardUnlocksIn": "تسجيلات دخول للحصول على جائزتك القادمة: <%= numberOfCheckinsLeft %>",
"awesome": "رائع!",
"countLeft": "Check-ins until next reward: <%= count %>",
"incentivesDescription": "When it comes to building habits, consistency is key. Each day you check-in you get closer to a prize.",
"checkinEarned": "Your Check-In Counter went up!",
"unlockedCheckInReward": "You unlocked a Check-In Prize!",
"checkinProgressTitle": "Progress until next",
"incentiveBackgroundsUnlockedWithCheckins": "Locked Plain Backgrounds will unlock with Daily Check-Ins.",
"oneOfAllPetEggs": "one of each standard Pet Egg",
"twoOfAllPetEggs": "two of each standard Pet Egg",
"threeOfAllPetEggs": "three of each standard Pet Egg",
"oneOfAllHatchingPotions": "one of each standard Hatching Potion",
"threeOfEachFood": "three of each standard Pet Food",
"fourOfEachFood": "four of each standard Pet Food",
"twoSaddles": "two Saddles",
"incentivesDescription": "عندما يتعلق الأمر ببناء العادات ، فإن الاستمرار هو المفتاح. كل يوم تقوم بتسجيل الدخول تقترب من مكافأة.",
"checkinEarned": "ازداد عدد تسجيلات الدخول الخاص بك!",
"unlockedCheckInReward": "لقد حررت جائزة تسجيل دخول!",
"checkinProgressTitle": "عملية التقدم للتالي",
"incentiveBackgroundsUnlockedWithCheckins": "التقدم حتى يتم فتح الخلفيات العادية المقفلة التالية مع تسجيلات الدخول اليومية.",
"oneOfAllPetEggs": "واحدة من بيض كل الحيوانات الأليفة القياسية",
"twoOfAllPetEggs": "اثنين من بيض كل الحيوانات الأليفة القياسية",
"threeOfAllPetEggs": "ثلاثة من بيض كل الحيوانات الأليفة القياسية",
"oneOfAllHatchingPotions": "واحدة من كل جرعات التفقيس القياسية",
"threeOfEachFood": "ثلاثة من كل جرعات التفقيس القياسية",
"fourOfEachFood": "أربعة من غذاء كل الحيوانات الأليفة القياسية",
"twoSaddles": "اثنين من السروج",
"threeSaddles": "ثلاثة سروج",
"incentiveAchievement": "the Royally Loyal achievement",
"royallyLoyal": "Royally Loyal",
"royallyLoyalText": "This user has checked in over 500 times, and has earned every Check-In Prize!",
"checkInRewards": "Check-In Rewards",
"backloggedCheckInRewards": "You received Check-In Prizes! Visit your Inventory and Equipment to see what's new."
"incentiveAchievement": "إنجاز الولاء الملكي",
"royallyLoyal": "الولاء الملكي",
"royallyLoyalText": "هذا المستخدم قد قام بتسجيل الدخول أكثر من 500 مرة، وحصل على كل مكافآت تسجيل الدخول!",
"checkInRewards": "مكافآت تسجيل الدخول",
"backloggedCheckInRewards": "لقد استلمت مكافآت تسجيل دخول! ادخل على مخزنك ومعداتك لترى ما هو جديد."
}
+2 -2
View File
@@ -609,7 +609,7 @@
"questSeaSerpentNotes": "Your streaks have you feeling lucky—its the perfect time for a trip to the seahorse racetrack. You board the submarine at Diligent Docks and settle in for the trip to Dilatory, but youve barely submerged when an impact rocks the sub, sending its occupants tumbling. “Whats going on?” @AriesFaries shouts.<br><br>You glance through a nearby porthole and are shocked by the wall of shimmering scales passing by it. “Sea serpent!” Captain @Witticaster calls through the intercom. “Brace yourselves, its coming round again!” As you grip the arms of your seat, your unfinished tasks flash before your eyes. Maybe if we work together and complete them, you think, we can drive this monster away!",
"questSeaSerpentCompletion": "Battered by your commitment, the sea serpent flees, disappearing into the depths. When you arrive in Dilatory, you breathe a sigh of relief before noticing @*~Seraphina~ approaching with three translucent eggs cradled in her arms. “Here, you should have these,” she says. “You know how to handle a sea serpent!” As you accept the eggs, you vow anew to remain steadfast in completing your tasks to ensure that theres not a repeat occurrence.",
"questSeaSerpentBoss": "The Mighty Sea Serpent",
"questSeaSerpentDropSeaSerpentEgg": "Sea Serpent (Egg)",
"questSeaSerpentDropSeaSerpentEgg": "",
"questSeaSerpentUnlockText": "Unlocks purchasable Sea Serpent eggs in the Market",
"questKangarooText": "Kangaroo Catastrophe",
"questKangarooNotes": "Maybe you should have finished that last task… you know, the one you keep avoiding, even though it always comes back around? But @Mewrose and @LilithofAlfheim invited you and @stefalupagus to see a rare kangaroo troop hopping through the Sloensteadi Savannah; how could you say no?! As the troop comes into view, something hits you on the back of the head with a mighty <em>whack!</em><br><br>Shaking the stars from your vision, you pick up the responsible object--a dark red boomerang, with the very task you continually push back etched into its surface. A quick glance around confirms the rest of your party met a similar fate. One larger kangaroo looks at you with a smug grin, like shes daring you to face her and that dreaded task once and for all!",
@@ -635,4 +635,4 @@
"questVelociraptorBoss": "Veloci-Rapper",
"questVelociraptorDropVelociraptorEgg": "Velociraptor (Egg)",
"questVelociraptorUnlockText": "Unlocks purchasable Velociraptor eggs in the Market"
}
}
+1 -1
View File
@@ -5,7 +5,7 @@
"accept2Terms": "и",
"chores": "Домакинска работа",
"clearBrowserData": "Изчистване на данните на браузъра",
"communityExtensions": "<a href='http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Добавки и разширения</a>",
"communityExtensions": "Добавки и разширения",
"communityFacebook": "Фейсбук",
"companyAbout": "Как работи",
"companyBlog": "Блог",
+1 -1
View File
@@ -5,7 +5,7 @@
"accept2Terms": "a",
"chores": "Domácí práce",
"clearBrowserData": "Vyčistit data v prohlížeči",
"communityExtensions": "<a href='http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Doplňky & Rozšírení</a>",
"communityExtensions": "Doplňky & Rozšírení",
"communityFacebook": "Facebook",
"companyAbout": "Jak to funguje",
"companyBlog": "Blog",
+5 -1
View File
@@ -2014,5 +2014,9 @@
"weaponMystery202102Notes": "Zářivý růžový drahokem v této hůlce dokáže šířit radost a přátelství všude možně! Nepřináší žádné výhody. Předmět pro předplatitele, únor 2021.",
"weaponMystery202104Notes": "Tvoji nepřátele by si měli dávat pozor - máš totiž mocnou a pichlavou obranu! Nepřináší žádné výhody. Předmět pro předplatitele duben 2021.",
"weaponMystery202102Text": "Okouzlující hůlka",
"weaponMystery202104Text": "Hůl trnitého bodláku"
"weaponMystery202104Text": "Hůl trnitého bodláku",
"weaponMystery202201Notes": "O silvestrovské půlnoci vypusť oblak zlatého a stříbrného třpytu. Štastný nový rok! Kdo to teď uklidí? Nepřináší žádné výhody. Předmět pro předplatitele leden 2022.",
"weaponMystery202201Text": "Konfetové dělo půlnoci",
"weaponMystery202111Text": "Chronomancerova hůl",
"weaponMystery202111Notes": "Ohýbej tok času s touto tajemnou a mocnou holí. Nepřináší žádné výhody. Předmět pro předplatitele listopad 2021."
}
+2 -1
View File
@@ -492,5 +492,6 @@
"backgroundParkWithStatueText": "Park med Statue",
"backgroundDojoNotes": "Lær nye teknikker i en Dojo.",
"backgroundDojoText": "Dojo",
"backgrounds052019": "SET 60: Frigivet Maj 2019"
"backgrounds052019": "SET 60: Frigivet Maj 2019",
"hideLockedBackgrounds": "Skjul låste baggrunde"
}
+2 -1
View File
@@ -103,5 +103,6 @@
"selectParticipant": "Vælg en deltager",
"filters": "Filtre",
"wonChallengeDesc": "<%= challengeName %> udvalgte dig som vinder! Din sejr er noteret i dine Præstationer.",
"yourReward": "Din Belønning"
"yourReward": "Din Belønning",
"removeTasks": "Fjern opgaver"
}
@@ -2,25 +2,25 @@
"tavernCommunityGuidelinesPlaceholder": "Venlig påmindelse: Det her er en chat for alle aldre, så hold venligst en passende tone og vær opmærksom på indholdet af dine beskeder! Læs Retningslinjer for fællesskabet i sidepanelet, hvis du har spørgsmål.",
"lastUpdated": "Sidst opdateret:",
"commGuideHeadingWelcome": "Velkommen til Habitica!",
"commGuidePara001": "Vær hilset, eventyrer! Velkommen til Habitica, et land af produktivitet, sund levemåde, og til tider en enkelt hærgende grif. Vi er et muntert fællesskab fuld af hjælpsomme folk der støtter op om hinanden på deres vej til at forbedre sig selv. For at passe ind har du kun brug for en positiv attitude, respektfuld opførsel, og forståelse for at alle har forskellige evner of begrænsninger -- inklusiv dig! Habiticanere er tålmodige med hinanden og forsøger at hjælpe hvor de kan.",
"commGuidePara002": "For at sikre at alle er trygge, glade, og produktive i vores fællesskab, har vi nogle retningslinjer. Vi har omhyggeligt konstrueret dem så de er så venlige og letlæselige som muligt. Brug venligt et øjeblik på at læse dem inden du begynder at chatte.",
"commGuidePara003": "Disse regler gælder alle de sociale områder vi bruger, inklusiv (men ikke nødvendigvis begrænset til) Trello, GitHub, Weblate og Wikia (wiki'en). Sommetider vil der opstå uforudsete situationer, eksempelvis en ny kilde til konflikt eller en ondskabsfuld åndemaner. Når det sker, kan moderatorer reagere ved at ændre disse retningslinjer for at beskytte fællesskabet mod ny trusler. Frygt ikke: Du vil blive gjort opmærksom på ændringer i retningslinjerne via en påmindelse fra Bailey.",
"commGuidePara001": "Vær hilset, eventyrer! Velkommen til Habitica, et land af produktivitet, sund levemåde, og til tider en enkelt hærgende grif. Vi er et muntert fællesskab fuld af hjælpsomme folk der støtter op om hinanden på deres vej til at forbedre sig selv. For at passe ind har du kun brug for en positiv attitude, respektfuld opførsel, og forståelse for at alle har forskellige evner of begrænsninger - inklusiv dig! Habiticanere er tålmodige med hinanden og forsøger at hjælpe hvor de kan.",
"commGuidePara002": "For at sikre at alle er trygge, glade, og produktive i vores fællesskab, har vi nogle retningslinjer. Vi har omhyggeligt konstrueret dem så de er så venlige og letlæselige som muligt. Brug venligst et øjeblik på at læse dem inden du begynder at chatte.",
"commGuidePara003": "Disse regler gælder alle de sociale områder vi bruger, inklusiv (men ikke nødvendigvis begrænset til) Trello, GitHub, Weblate og Habitica wiki'en på fandom.com. Efterhånden som Habitica vokser og forandres, kan det ske at vores regler bliver ændret. Når der er sket bemærkelsesværdige ændringer af retningslinjerne for fællesskabet, vil du kunne høre om det i en meddelelse fra Bailey og/eller på vores sociale medier!",
"commGuideHeadingInteractions": "Interaktioner i Habitica",
"commGuidePara015": "Habitica har to slags sociale rum: offentlige og private. Offentlige rum inkluderer Værtshuset, Offentlige klaner, GitHub, Trello og Wiki'en. Private rum er Private klaner, Holdchatten og Private beskeder. Alle display names skal følge retningslinjerne for offentlige rum. Gå til Bruger > Indstillinger > Side for at ændre dit brugernavn.",
"commGuidePara016": "Når du navigerer rundt i de offentlige steder af Habitica, er der nogle generelle regler for at sørge for, at alle er sikre og glade. De burde være lette for eventyrere som dig!",
"commGuideList02A": "<strong>Respekter hinanden</strong>. Vær høflig, venlig og hjælpsom. Husk: Habiticanere kommer fra alle baggrunde og har haft vildt skiftende oplevelser og erfaringer. Det er en del af det, der gør Habitica så cool! At bygge et fællesskab betyder at vi respekterer og fejrer vores forskelle såvel som vores ligheder. Her er nogle nemme måder at vise respekt for hinanden på:",
"commGuideList02B": "<strong>Adlyd alt i <a href='/static/terms' target='_blank'>Vilkår og betingelser</a></strong>.",
"commGuideList02C": "<strong>Læg ikke billeder eller tekst op, der er voldeligt, truende eller seksuelt eksplicit/antydende, eller som promoverer diskrimination, fordomme, racisme, sexisme, had, chikane eller skade mod et individ eller en gruppe</strong>. Ikke engang som en joke. Dette inkluderer skældsord såvel som udtalelser. Ikke alle har den samme form for humor, så noget du anser som en joke er muligvis sårende for en anden. Angrib jeres Daglige opgaver, ikke hinanden.",
"commGuideList02D": "<strong>Hold diskussioner passende for alle aldre</strong>. Vi har mange unge Habiticanere der bruger hjemmesiden! Lad os ikke genere nogen uskyldige eller forhindre nogen Habiticanere i at opnår deres mål.",
"commGuideList02E": "<strong>Undgå bandeord. Dette inkluderer mildere, religiøst baserede bandeord der kan være acceptable andre steder</strong>. Vi har folk fra alle religiøse og kulturelle baggrunde, og vi vil gerne sørge for at de alle føler sig trygge i offentlige rum. <strong>Hvis en moderator eller medarbejder fortæller dig at et udtryk ikke er tilladt i Habitica, selvom det er et udtryk, du ikke vidste var problematisk, er den beslutning endegyldig</strong>. Der vil blive slået særlig hårdt ned på skældsord, da de også går imod vores Vilkår og betingelser.",
"commGuideList02F": "<strong>Undgå lange diskussioner af opsplittende emner i Værtshuset og hvor det ellers ikke ville være et passende emne</strong>. Hvis du føler nogen har sagt noget uhøfligt eller sårende, så svar dem ikke. Hvis nogen nævner noget der er tilladt ifølge retningslinjerne, men sårende for dig, er det okay høfligt at sige det til dem. Hvis det er imod retningslinjerne eller Vilkår og betingelser, så rapporter det og lad en moderator håndtere det. Hvis du er i tvivl, så rapporter beskeden.",
"commGuideList02G": "<strong>Overhold omgående enhver anmodning fra en Moderator.</strong>. Dette kan inkludere, men er ikke begrænset til, at bede dig begrænse antallet af dine beskeder i et bestemt rum, at fjerne upassende indhold fra din profil, at bede dig om at tage din diskussion et mere passende sted osv.",
"commGuideList02J": "<strong>Spam ikke</strong>. Spam inkluderer, men er ikke begrænset til: at skrive den samme kommentar eller spørgsmål flere steder, at lægge links op uden forklaring eller kontekst, at skrive meningsløse beskeder, at skrive adskillige promoverende beskeder om en Klan, Hold eller Udfordring, eller at skrive mange beskeder på én gang. At tigge om ædelsten eller et abonnement i ethvert chatrum eller via Privatbesked betragtes også som spam.<br/><br/>Det er op til moderatorerne at beslutte om noget er spam eller kan føre til spam, selv hvis du ikke mener du har spammet. For eksempel er det i orden at reklamere for en Klan en enkelt eller to gange, men adskillige beskeder samme da ville sikkert blive betragtet som spam, uanset hvor nyttig Klanen er!",
"commGuidePara015": "Habitica har to slags sociale rum: offentlige og private. Offentlige rum inkluderer Værtshuset, offentlige klaner, GitHub, Trello og wiki'en. Private rum tæller private klaner, Holdchatten og private beskeder. Alle displaynavne og @brugernavne skal følge retningslinjerne for offentlige rum. Gå til Menu > Indstillinger > Profil for at ændre dit displaynavn eller @brugernavn i app'en. På Habiticas hjemmeside skal du gå til Bruger > Indstillinger.",
"commGuidePara016": "Når du navigerer rundt i de offentlige rum af Habitica, er der nogle generelle regler for at sørge for, at alle er sikre og glade.",
"commGuideList02A": "<strong>Respekter hinanden</strong>. Vær høflig, venlig og hjælpsom. Husk: Habiticanere kommer fra alle baggrunde og har haft vildt skiftende oplevelser og erfaringer. Det er en del af det, der gør Habitica så cool! At bygge et fællesskab betyder at vi respekterer og fejrer vores forskelle såvel som vores ligheder.",
"commGuideList02B": "<strong>Adlyd alt i <a href='/static/terms' target='_blank'>Vilkår og betingelser</a></strong> i både offentlige og private rum.",
"commGuideList02C": "<strong>Læg ikke billeder eller tekst op, der er voldeligt, truende eller seksuelt eksplicit/antydende, eller som promoverer diskrimination, fordomme, racisme, sexisme, had, chikane eller skade mod et individ eller en gruppe</strong>. Ikke engang som en joke. Dette inkluderer skældsord såvel som udtalelser. Ikke alle har den samme form for humor, så noget du anser som en joke er muligvis sårende for en anden.",
"commGuideList02D": "<strong>Hold diskussioner passende for alle aldre</strong>. Dette betyder at 18+ emner ikke bør diskuteres i offentlige rum. Vi har mange unge Habiticanere der bruger hjemmesiden, og vores brugere kommer fra mange steder i verden. Vi vil gerne have, at Habitica er så rart og inkluderende et sted som muligt.",
"commGuideList02E": "<strong>Undgå bandeord. Dette inkluderer mildere, religiøst baserede bandeord der kan være acceptable andre steder, og forkortede eller forklædte bandeord.</strong> Vi har folk fra alle religiøse og kulturelle baggrunde, og vi vil gerne sørge for at de alle føler sig trygge i offentlige rum. <strong>Hvis en moderator eller medarbejder fortæller dig at et udtryk ikke er tilladt i Habitica, selvom det er et udtryk, du ikke vidste var problematisk, er den beslutning endegyldig.</strong> Der vil blive slået særlig hårdt ned på skældsord, da de også går imod vores Vilkår og betingelser.",
"commGuideList02F": "Undgå lange diskussioner af opsplittende emner i Værtshuset og hvor det ellers ikke ville være et passende emne. Hvis nogen siger noget der er tilladt under vores retningslinjer, men som er sårende for dig, er det okay høfligt at sige det til dem. Hvis nogen siger til dig, at du har gjort dem ubehageligt til mode, så tag et øjeblik til at tænke over dine ord frem for at svare i vrede. Hvis du føler, at en samtale er ved at blive overophedet, følelsesladet eller sårende, <strong>så hold op med at svare. Rapportér i stedet de relevante beskeder for at sende besked til os.</strong> Moderatorerne vil se på det, så hurtigt de kan. Du kan også sende en email til <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> og er velkommen til at sende screenshots, hvis det ville hjælpe os med at forstå sagen.",
"commGuideList02G": "<strong>Overhold omgående enhver anmodning fra en Moderator.</strong> Dette kan inkludere, men er ikke begrænset til, at bede dig begrænse antallet af dine beskeder i et bestemt rum, at fjerne upassende indhold fra din profil, at bede dig om at tage din diskussion et mere passende sted osv. Begynd ikke at diskutere med moderatorerne. Hvis du har kommentarer til Habiticas moderering, så send en email til <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> for at komme i kontakt med vores community manager.",
"commGuideList02J": "<strong>Spam ikke</strong>. Spam inkluderer, men er ikke begrænset til: at skrive den samme kommentar eller spørgsmål flere steder, <strong>at lægge links op uden forklaring eller kontekst</strong>, at skrive meningsløse beskeder, at skrive adskillige promoverende beskeder om en Klan, Hold eller Udfordring, eller at skrive mange beskeder på én gang. Hvis det at andre brugere følger et link vil give nogen form for afkast eller fordel til dig, skal det stå i beskeden, ellers vil det også blive regnet for spam. Det er op til moderatorerne at beslutte om noget er spam.",
"commGuideList02K": "<strong>Undgå at skrive store overskrifter i offentlige chatrum, især Værtshuset</strong>. Ligesom ALL CAPS læses det som om du råber, og forstyrrer den behagelige stemning.",
"commGuideList02L": "<strong>Vi fraråder kraftigt deling af personlig information -- især information der kan bruges til at identificere dig - i offentlige chatrum</strong>. Identificerende personlig information inkluderer, men er ikke begrænset til: din adresse, emailadresse og din API token/password. Det er for din sikkerheds skyld! Medarbejdere eller moderatorer kan fjerne sådanne beskeder efter forgodtbefindende. Hvis du bliver bedt om personlig information i en privat Klan, Hold eller Besked, anbefaler vi kraftigt at du høfligt afviser og gør medarbejderne og moderatorerne opmærksomme ved enten 1) at rapportere beskeden hvis det er i chatten tilhørende et Hold eller privat Klan, eller 2) at udfylde <a href='https://contact.habitica.com/' target='_blank'>Moderatorkontaktformularen</a> og vedlægger screenshots.",
"commGuideList02L": "<strong>Vi fraråder kraftigt deling af personlig information -- især information der kan bruges til at identificere dig - i offentlige chatrum</strong>. Identificerende personlig information inkluderer, men er ikke begrænset til: din adresse, emailadresse og din API token/password. Det er for din sikkerheds skyld! Medarbejdere eller moderatorer kan fjerne sådanne beskeder efter forgodtbefindende. Hvis du bliver bedt om personlig information i en privat Klan, Hold eller Besked, anbefaler vi kraftigt at du høfligt afviser og gør medarbejderne og moderatorerne opmærksomme ved enten 1) at rapportere beskeden, eller 2) at sende en email til <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> og vedhæfte screenshots.",
"commGuidePara019": "<strong>I private rum</strong> har brugere mere frihed til at diskutere hvilke emner de har lyst til, men de må stadig ikke gå imod Vilkår og betingelser, inklusiv at skrive nedværdigende skældsord eller noget diskriminerende, voldeligt eller truende indhold. Bemærk, at fordi navne på Udfordringer kan ses i vinderens offentlige profil skal ALLE navne på Udfrodringer adlyde retningslinjerne for offentlige rum, selv hvis de foregår i et privat rum.",
"commGuidePara020": "<strong>Privatbeskeder</strong> har nogle ekstra retningslinjer. Hvis nogen har blokeret dig må du ikke kontakte dem på andre måder for at bede dem om at fjerne blokeringen. Derudover må du ikke sende privatbeskeder til andre for at bede om hjælp (fordi offentlige svar til spørgsmål om hjælp også kan hjælpe resten af fællesskabet). Sidst men ikke mindst må du ikke sende privatbeskeder til nogen for at tigge om ædelsten eller et abonnement, da dette kan anses som spamming.",
"commGuidePara020A": "<strong>Hvis du ser et indlæg eller en privatbesked, du mener går imod retningslinjerne for offenlige rum, beskrevet ovenfor, eller hvis du ser indlæg eller privatbeskeder, der bekymrer dig eller gør dig utryg, kan du gøre Moderatorer og Medarbejdere opmærksomme på den ved at klikke på flag-ikonet for at rapportere det</strong>. En Medarbejder eller Moderator vil tage sig af situationen, så snart de kan. Bemærk venligst, at det at rapportere uskyldige indlæg går imod disse Retningslinjer (se \"Overtrædelser\" nedenunder). Du kan også kontakte Moderatorerne via formularen “<a href='https://contact.habitica.com/' target='_blank'>Kontakt Moderatorerne</a>. Det kan være det bedste at gøre dette hvis der er flere problematiske indlæg af den samme person i forskellige Klaner, eller hvis situationen kræver en forklaring. Du kan kontakte os på dit eget sprog hvis det er lettere for dig. Vi bliver muligvis nødt til at bruge Google Translate, men vi vil gerne have at du føler dig tryg ved at tage kontakt til os, hvis du har et problem.",
"commGuidePara020": "<strong>Privatbeskeder</strong> har nogle ekstra retningslinjer. Hvis nogen har blokeret dig må du ikke kontakte dem på andre måder for at bede dem om at fjerne blokeringen. Derudover må du ikke sende privatbeskeder til andre for at bede om hjælp (fordi offentlige svar til spørgsmål om hjælp også kan hjælpe resten af fællesskabet). Sidst men ikke mindst må du ikke sende privatbeskeder til nogen for at tigge om nogen form for service, der koster rigtige penge.",
"commGuidePara020A": "<strong>Hvis du ser et indlæg eller en privatbesked, du mener går imod retningslinjerne for offentlige rum, beskrevet ovenfor, eller hvis du ser indlæg eller privatbeskeder, der bekymrer dig eller gør dig utryg, kan du gøre Moderatorer og Medarbejdere opmærksomme på den ved at klikke på flag-ikonet for at rapportere det</strong>. En Medarbejder eller Moderator vil tage sig af situationen, så snart de kan. Bemærk venligst, at det at rapportere uskyldige indlæg går imod disse retningslinjer (se \"Overtrædelser\" nedenunder). Du kan også kontakte Moderatorerne ved at emaile <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>. Det kan være det bedste at gøre dette, hvis der er flere problematiske indlæg af den samme person i forskellige Klaner, eller hvis situationen kræver en forklaring. Du kan kontakte os på dit eget sprog hvis det er lettere for dig. Vi bliver muligvis nødt til at bruge Google Translate, men vi vil gerne have at du føler dig tryg ved at tage kontakt til os, hvis du har et problem.",
"commGuidePara021": "Herudover har nogen offentlige steder i Habitica ekstra retningslinjer.",
"commGuideHeadingTavern": "Værtshuset",
"commGuidePara022": "Værtshuset er det primære sted Habiticanere hænger ud. Kroværten Daniel holder stedet funklende rent, og Lemoness vil med glæde fremtrylle dig et glas lemonade mens du sidder og snakker. Bare husk…",
@@ -31,8 +31,8 @@
"commGuidePara029": "<strong>Offentlige Klaner er meget ligesom Værtshuset, bortset fra at de i stedet for at være til generelle samtaler har et bestemt tema</strong>. Chat i offentlige Klaner bør have fokus på dette tema. For eksempel ville medlemmer af Klanen Wordsmiths måske blive fornærmede, hvis samtalen pludselig handler om havearbejde, og Klanen for Dragefans har nok ikke meget interesse i at tyde oldtidens runer. Nogle Klaner er meget afslappede om dette end andre, men forsøg generelt <strong>at holde dig til emnet</strong>!",
"commGuidePara031": "I nogle offentlige Klaner omtales der følsomme emner som depression, religion, politik osv. Dette er helt i orden, så længe samtalerne i Klanen ikke bryder nogle Vilkår og betingelser eller Regler for offentlige rum, og så længe de holder sig til Klanens emne.",
"commGuidePara033": "<strong>Offentlige Klaner må IKKE indeholde indhold for aldersgruppen 18+. Hvis de planlægger jævnligt at diskutere følsomt indhold, skal dette stå i Klanens beskrivelse</strong>. Dette er for at holde Habitica sikkert of trygt for alle.",
"commGuidePara035": "<strong>Hvis en Klan omhandler flere forskellige følsomme emner, er det hensynsfuldt over for dine med-Habiticanere at skrive din kommentar efter en advarsel (fx \"Advarsel: Omtaler selvskade\")</strong>. Disse kan karakteriseres som trigger warnings og/eller noter om indholdet, og Klaner kan have deres egne regler om disse udover dem, der er givet her. Hvis det er muligt, så brug venligst <a href='http://habitica.fandom.com/wiki/Markdown_Cheat_Sheet' target='_blank'>markdown</a> for at gemme det potentielt følsomme indhold under flere linjeskift, så de, der ikke ønsker at læse det, kan scrolle forbi uden at se indholdet. Habiticas medarbejdere og moderatorer kan stadig fjerne dette indhold efter eget skøn.",
"commGuidePara036": "Desuden bør følsomt indhold stadig være aktuelt for Klanens emne - at tale om selvskade i en Klan hvor fokus er på at kæmpe mod depression giver mening, men er mindre passende i en Klan for musik. Hvis du ser nogen, som gentagne gange går imod denne retningslinje, især efter at være blevet bedt om at stoppe flere gange, så rapportér venligst deres indlæg og gør moderatorerne opmærksom på dette via <a href='https://contact.habitica.com/' target='_blank'>Moderatorkontaktformularen</a>.",
"commGuidePara035": "<strong>Hvis en Klan omhandler flere forskellige følsomme emner, er det hensynsfuldt over for dine med-Habiticanere at skrive din kommentar efter en advarsel (fx \"Advarsel: Omtaler selvskade\")</strong>. Disse kan karakteriseres som trigger warnings og/eller noter om indholdet, og Klaner kan have deres egne regler om disse udover dem, der er givet her. Hvis det er muligt, så brug venligst <a href='https://habitica.fandom.com/wiki/Markdown_Cheat_Sheet' target='_blank'>markdown</a> for at gemme det potentielt følsomme indhold under flere linjeskift, så de, der ikke ønsker at læse det, kan scrolle forbi uden at se indholdet. Habiticas medarbejdere og moderatorer kan stadig fjerne dette indhold efter eget skøn.",
"commGuidePara036": "Desuden bør følsomt indhold stadig være aktuelt for Klanens emne - at tale om selvskade i en Klan hvor fokus er på at kæmpe mod depression giver mening, men er mindre passende i en Klan for musik. Hvis du ser nogen, som gentagne gange går imod denne retningslinje, især efter at være blevet bedt om at stoppe flere gange, så rapportér deres beskeder.",
"commGuidePara037": "<strong>Ingen Klaner, hverken Offentlige eller Private, bør oprettes med det formål at angribe en gruppe eller et individ</strong>. At oprette en sådan Klan er grundlæg for øjeblikkelig bortvisning fra Habitica. Nedkæmp dårlige vaner, ikke dine med-eventyrere!",
"commGuidePara038": "<strong>Alle Udfordringer i Værtshuset og Offentlige Klaner skal også følge disse regler</strong>.",
"commGuideHeadingInfractionsEtc": "Overtrædelser, Konsekvenser og Genskabelse",
@@ -44,24 +44,24 @@
"commGuidePara053": "De følgende er eksempler på større overtrædelser. Listen er ikke fyldestgørende.",
"commGuideList05A": "Brud på Betingelser og Vilkår",
"commGuideList05B": "Hadtale/billeder, Chikane/stalking, Cyber-mobning, Flaming og Trolling",
"commGuideList05C": "Brud på Prøvetid",
"commGuideList05D": "At udgive sig for at være Ansat eller Moderator",
"commGuideList05E": "Gentagne Moderate Overtrædelser",
"commGuideList05C": "Brud på prøvetid",
"commGuideList05D": "At udgive sig for at være Ansat eller Moderator - dette inkluderer at påstå, at brugerskabte platforme, der ikke at associerede med Habitica, er officielle og/eller modereret af Habitica eller deres mods/medarbejdere",
"commGuideList05E": "Gentagne moderate overtrædelser",
"commGuideList05F": "Oprettelse af en ekstra konto for at undgå konsekvenser (for eksempel at oprette en ny konto til at chatte med, efter at have fået frataget ens chat-privilegier)",
"commGuideList05G": "Bevidst bedrag af Ansatte eller Moderatorer med det formål at undgå konsekvenser eller bringe en anden bruger i vanskeligheder",
"commGuideHeadingModerateInfractions": "Moderate Overtrædelser",
"commGuideHeadingModerateInfractions": "Moderate overtrædelser",
"commGuidePara054": "Moderate overtrædelser gør ikke fællesskabet usikkert, men de gør det ubehageligt. Disse overtrædelser har moderate konsekvenser. Når de står sammen med andre overtrædelser, kan konsekvenserne blive større.",
"commGuidePara055": "De følgende er eksempler på Moderate Overtrædelser. Listen er ikke endelig.",
"commGuidePara055": "De følgende er eksempler på moderate overtrædelser. Listen er ikke fyldestgørende.",
"commGuideList06A": "At ignorere, opføre respektløst overfor, eller skændes med en Moderator. Dette inkluderer offentlige at klage over moderatorer eller andre brugere, offentligt at forherlige eller forsvare bortviste brugere, eller at debatterer hvorvidt en moderators handlinger var passende. Hvis du er bekymret om en af reglerne eller en Moderators opførsel, så kontakt venligst de ansatte via email (<a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>).",
"commGuideList06B": "Backseat Modding. For at tydeliggøre en relevant pointe: En venlig påmindelse om reglerne er helt fint. Backseat modding består i at fortælle, kræve, og/eller stærkt antyde at nogen bør gøre som du siger for at rette op på en fejl. Du kan gøre nogen opmærksom på at de har begået en overtrædelse, men forlang venligst ikke at de skal gøre noget - for eksempel er det bedre at sige \"Bare så du ved det er det ikke så godt at bande i Værtshuset, så det kan være du skulle slette det\" end \"Jeg er nødt til at bede dig slette det indlæg.\"",
"commGuideList06C": "At rapportere uskyldige indlæg med vilje.",
"commGuideList06D": "Gentagne gange at bryde Retningslinjerne for offentlige rum",
"commGuideList06E": "Gentagne gange at begå mindre overtrædelser",
"commGuideHeadingMinorInfractions": "Mindre Overtrædelser",
"commGuideHeadingMinorInfractions": "Mindre overtrædelser",
"commGuidePara056": "Mindre overtrædelser har kun mindre konsekvenser, men er stadig ikke anbefalede. Hvis de sker gentagne gange kan det føre til større konsekvenser.",
"commGuidePara057": "De følgende er eksempler på Mindre Overtrædelser. Listen er ikke fyldestgørende.",
"commGuidePara057": "De følgende er eksempler på mindre overtrædelser. Listen er ikke fyldestgørende.",
"commGuideList07A": "Førstegangsbrud på Retningslinjer for Offentlige Steder",
"commGuideList07B": "Alle udsagn eller handlinger, som udløser et \"Lad venligst være\". Når en Moderator er nødt til at sige \"Lad venligst være med det\" til en bruger, kan det tælle som en meget lille overtrædelse for den bruger. Et eksempel kunne være \"Lad venligst være med at blive ved med at argumentere for indførslen af den funktion, når vi har sgat til dig adskillige gange at det ikke kan lade sig gøre.\" I mange tilfælde vil 'Lad venligst være' blot være konsekvensen af overtrædelsen, men hvis Moderatorerne er nødt til at bede den samme bruger flere gange om at holde op, vil de Mindre Overtrædelser begynde at tælle som Moderate Overtrædelser.",
"commGuideList07B": "Alle udsagn eller handlinger, som udløser et \"lad venligst være\" fra en moderator. Når du offentligt bliver bedt om at stoppe en handling, kan dette i sig selv tælle som en mindre overtrædelse. Hvis mods er nødt til gentagne gange at irettesætte den samme person, kan det komme til at tælle som en grovere overtrædelse",
"commGuidePara057A": "Nogle indlæg kan blive skjult fordi de indeholder følsom information eller kan give folk det forkerte indtryk. Typisk gælder dette ikke som en overtrædelser, især ikke den første gang det sker!",
"commGuideHeadingConsequences": "Konsekvenser",
"commGuidePara058": "I Habitica - som i virkeligheden - har alle handlinger også konsekvenser, hvad enten det er at komme i bedre form fordi du har løbet, få huller i tænderne fordi du har spist for meget sukker, eller bestå et fag fordi du har studeret.",
@@ -71,53 +71,63 @@
"commGuideList08B": "hvad konsekvensen er",
"commGuideList08C": "hvad der skal til for at rette fejlen og genoprette din status, hvis muligt.",
"commGuidePara060A": "Hvis situationen påkræver det kan du også modtage en PM eller email plus et indlæg i det forum, hvor overtrædelsen blev begået. I nogle tilfælde bliver du slet ikke irettesat offentligt.",
"commGuidePara060B": "Hvis din konto bortvises (en alvorlig konsekvens), vil du ikke være i stand til at logge på Habitica, og vil få en fejl-besked når du prøver. <strong>Hvis du ønsker at undskylde eller argumentere for genoprettelse af din konto, så skriv venligst en email til de ansatte på <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> med dit UUID (unikke bruger-ID)</strong> (som vil blive oplyst i fejl-beskeden). Det er <strong>dit</strong> ansvar at tage kontakt, hvis du ønsker en genovervejelse af situationen, eller genoprettelse.",
"commGuideHeadingSevereConsequences": "Eksempler på Større Konsekvenser",
"commGuidePara060B": "Hvis din konto bortvises (en alvorlig konsekvens), vil du ikke være i stand til at logge på Habitica, og vil få en fejl-besked når du prøver. <strong>Hvis du ønsker at undskylde eller argumentere for genoprettelse af din konto, så skriv venligst en email til de ansatte på <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> med dit bruger-ID</strong> (som vil blive oplyst i fejlbeskeden) eller @brugernavn. Det er <strong>dit</strong> ansvar at tage kontakt, hvis du ønsker en genovervejelse af situationen, eller genoprettelse.",
"commGuideHeadingSevereConsequences": "Eksempler på større konsekvenser",
"commGuideList09A": "Kontoudelukkelser (se ovenstående)",
"commGuideList09C": "Permanent deaktivering (\"indefrysning\") af fremskridt i Bidragsyder-niveauer",
"commGuideHeadingModerateConsequences": "Eksempler på Moderate Konsekvenser",
"commGuideHeadingModerateConsequences": "Eksempler på moderate konsekvenser",
"commGuideList10A": "Begrænsede offentlige og/eller private chatprivilegier",
"commGuideList10A1": "Hvis dine handlinger resulterer i fradragelse af dine rettigheder til chatten, vil en Moderator eller Ansat sende dig en privatbesked og/eller et indlæg i det forum du blev suspenderet fra for at fortælle dig grunden til og længden af din suspendering. Efter denne periode vil du få dine chatrettigheder tilbage, forudsat at du er villig til at ændre ved den opførsel du blev suspenderet for og overholde Fællesskabets Retningslinjer.",
"commGuideList10A1": "Hvis dine handlinger resulterer i fradragelse af dine rettigheder til chatten, vil en Moderator eller Ansat sende dig en privatbesked og/eller et indlæg i det forum du blev suspenderet fra for at fortælle dig grunden til og længden af din suspendering, og/eller hvad du skal gøre for at få dine chatprivilegier tilbage. Du vil få dem igen, hvis du høfligt følger de anvisninger du får, og erklærer dig villig til at følge vores Retningslinjer for Fællesskabet og Betingelser & Vilkår",
"commGuideList10C": "Begrænsede Klan/Udfordringsoprettelsesprivilegier",
"commGuideList10D": "Midlertidig deaktivering (\"indefrysning\") af fremskridt i Bidragsyder-niveauer",
"commGuideList10E": "Degradering af Bidragsyder-niveauer",
"commGuideList10F": "Sætte brugere på \"Prøvetid\"",
"commGuideHeadingMinorConsequences": "Eksempler på Mindre Konsekvenser",
"commGuideList10F": "At sætte brugere på \"prøvetid\"",
"commGuideHeadingMinorConsequences": "Eksempler på mindre konsekvenser",
"commGuideList11A": "Påmindelser om Retningslinjer for Offentlige Steder",
"commGuideList11B": "Advarsler",
"commGuideList11C": "Anmodninger",
"commGuideList11D": "Slettelser (Moderatorer/Ansatte kan slette problematisk indhold)",
"commGuideList11E": "Rettelser (Moderatorer/Ansatte kan slette problematisk indhold)",
"commGuideList11E": "Rettelser (Moderatorer/Ansatte kan redigere problematisk indhold)",
"commGuideHeadingRestoration": "Genoprettelse",
"commGuidePara061": "Habitica er en land dedikeret til forbedring, og vi tror på at give en chance til <strong>Hvis du begår en overtrædelse og bliver udsat for en konsekvens som følge, så se det som en mulighed for at evaluere dine handlinger og forbedre din opførsel som medlem af fællesskabet</strong>.",
"commGuidePara062": "Den bekendtgørelse, besked og/eller email du modtager, der forklarer konsekvenserne af dine handlinger, er en god kilde til information. Hold dig til de begrænsninger der er blevet påført, og bestræb dig på at møde de krav, der kan få eventuelle straffe ophævet.",
"commGuidePara063": "Hvis du ikke forstår konsekvenserne eller arten af din overtrædelse, så bed Medarbejderne/Moderatorerne om hjælp, så du kan undgå at begå overtrædelser i fremtiden. Hvis du føler at en bestemt beslutning var uretfærdig, kan du kontakte de ansatte for at diskutere det på <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>.",
"commGuideHeadingMeet": "Mød de Ansatte og Moderatorerne!",
"commGuidePara006": "Habitica har nogle utrættelige omvandrende riddere, der kæmper sammen med de ansatta for at holde fællesskabet roligt, tilfreds, og frit for trolde. Hver har et specifikt domæne, men vil sommetider blive kaldt ind for at hjælpe i andre sociale sfærer.",
"commGuidePara006": "Habitica har nogle utrættelige omvandrende riddere, der kæmper sammen med de ansatte for at holde fællesskabet roligt, tilfreds, og frit for trolde. Hver har et specifikt domæne, men vil sommetider blive kaldt ind for at hjælpe i andre sociale sfærer.",
"commGuidePara007": "Ansatte har lilla tags markeret med kroner. Deres titel er \"Heltemodig\".",
"commGuidePara008": "Moderatorer har mørkeblå tags markeret med stjerner. Deres titel er \"Beskytter\". Den eneste undtagelse er Bailey, der som NPC har et sort og grønt tag markeret med en stjerne.",
"commGuidePara009": "De nuværende Ansatte er (fra venstre mod højre):",
"commGuideAKA": "<%= habitName %> aka <%= realName %>",
"commGuidePara008": "Moderatorer har mørkeblå tags markeret med stjerner. Deres titel er \"Beskytter\".",
"commGuidePara009": "De nuværende ansatte er (fra venstre mod højre):",
"commGuideAKA": "<%= habitName %>, aka <%= realName %>",
"commGuideOnTrello": "<%= trelloName %> på Trello",
"commGuideOnGitHub": "<%= gitHubName %> på GitHub",
"commGuidePara010": "Der er også flere Moderatorer, der hjælper de ansatte. Disse er omhyggeligt udvalgt, så vis dem respekt og lyt til deres forslag.",
"commGuidePara011": "De nuværende Moderatorer er (fra venstre mod højre):",
"commGuidePara011b": "På GitHub/Wikia",
"commGuidePara011c": "på Wikia",
"commGuidePara011": "De nuværende moderatorer er (fra venstre mod højre):",
"commGuidePara011b": "på GitHub/Fandom",
"commGuidePara011c": "på wiki'en",
"commGuidePara011d": "på GitHub",
"commGuidePara012": "Hvis du har et problem eller bekymring, der drejer sig om en bestemt Moderator, så send venligst en email til vores Medarbejdere (<a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>).",
"commGuidePara013": "Brugere kommer og går i et fællesskab så stort som Habitica. Sommetider bliver en medarbejder eller moderator nødt til at fralægge sig deres ædle kappe, og slappe lidt af. De følgende er Ansatte og Moderatorer Emeritus. De løfter ikke længere et ansvar som Ansat eller Moderator, men vi vil stadig gerne mindes deres indsats!",
"commGuidePara014": "Ansatte og Moderatorer Emeritus:",
"commGuideHeadingFinal": "Den Sidste Sektion",
"commGuidePara067": "Det var så det, modige Habiticaner - Retningslinjerne for fællesskabet! Tør sveden af panden og giv dig selv nogle Erfaringpoint for at læse det hele. Hvis du har nogle spørgsmål om disse Retningslinjer for fællesskabet, så tag venligst fat i os via <a href='https://contact.habitica.com/' target='_blank'>Moderatorkontaktformularen</a>, og vi vil med glæde forsøge at gøre tingene klart for dig.",
"commGuidePara068": "Tag afsted, modige eventyrer, og bekæmp nogle Daglige!",
"commGuidePara014": "Ansatte og Moderatorer emeritus:",
"commGuideHeadingFinal": "Den sidste sektion",
"commGuidePara067": "Det var så det, modige Habiticaner - Retningslinjerne for fællesskabet! Tør sveden af panden og giv dig selv nogle Erfaringpoint for at læse det hele. Hvis du har nogle spørgsmål om disse Retningslinjer for fællesskabet, så tag venligst fat i os via <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>, og vi vil med glæde forsøge at gøre tingene klart for dig.",
"commGuidePara068": "Tag afsted, modige eventyrer, og nedkæmp nogle Daglige!",
"commGuideHeadingLinks": "Nyttige links",
"commGuideLink01": "<a href='/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>Habitica Help: Ask a Question</a>: en Klan hvor brugere kan stille spørgsmål!",
"commGuideLink02": "<a href='http://habitica.fandom.com/wiki/Habitica_Wiki' target='_blank'>Wiki'en</a>: den største samling af information om Habitica.",
"commGuideLink03": "<a href='https://github.com/HabitRPG/habitica' target='_blank'>GitHub</a>: til bug-rapporter eller hjælp med kodning!",
"commGuideLink02": "<a href='https://habitica.fandom.com/wiki/Habitica_Wiki' target='_blank'>Wiki'en</a>: den største samling af information om Habitica.",
"commGuideLink03": "<a href='https://github.com/HabitRPG/habitica' target='_blank'>GitHub</a>: for at hjælpe med kodning!",
"commGuideLink04": "<a href='https://docs.google.com/forms/d/e/1FAIpQLScPhrwq_7P1C6PTrI3lbvTsvqGyTNnGzp1ugi1Ml0PFee_p5g/viewform?usp=sf_link' target='_blank'>Feedbackformularen</a>: til forslag til hjemmesiden og app'en.",
"commGuideLink05": "<a href='https://trello.com/b/mXK3Eavg/' target='_blank'>Den mobile Trello</a>: til at bede om funktioner til vores apps.",
"commGuideLink06": "<a href='https://trello.com/b/vwuE9fbO/' target='_blank'>Kunst-Trello</a>: til at indsende pixel art.",
"commGuideLink07": "<a href='https://trello.com/b/nnv4QIRX/' target='_blank'>Quest-Trello</a>: til at indsende tekst til quests.",
"commGuidePara069": "Følgende talentfulde kunstnere har bidraget med disse illustrationer:"
"commGuidePara069": "Følgende talentfulde kunstnere har bidraget med disse illustrationer:",
"commGuidePara017": "Her er den hurtige version, men vi opfordrer dig til at læse den mere detaljerede udgave nedenunder:",
"commGuideList01A": "Vores Betingelser & Vilkår gælder alle steder i Habitica, inklusiv private klaner, holdchatten og private beskeder.",
"commGuideList02M": "Bed eller tig ikke andre om at give dig ædelsten, et abonnement eller medlemskab i gruppeplaner. Dette er ikke tilladt at gøre i hverken Værtshuset, offentlige eller private rum, eller i privatbeskeder. Hvis du får en besked med en anmodning om ting, der koster rigtige penge, så rapportér dem venligst. Gentaget eller groft tiggeri, især efter en advarsel er blevet udstedt, kan resulterer i en blokering af din konto.",
"commGuideList01B": "Forbudt: Al kommunikation der er voldeligt, truende, opfordrer til diskrimination osv., inklusiv memes, billeder og jokes.",
"commGuideList01C": "Al samtale skal være passende for enhver aldersgruppe og ikke indeholde skælds- ellers bandeord.",
"commGuideList01D": "Følg venligst moderatorernes anvisninger.",
"commGuideList01E": "Start og deltag ikke i diskussioner i Værtshuset, der kan føre til skænderier.",
"commGuideList01F": "Bed ikke andre om at give dig ting der koster rigtige penge, spam ikke, og skriv ikke beskeder i all caps eller stor overskriftstekst.",
"commGuideList05H": "Grove eller gentagne forsøg på at bedrage eller presse andre spillere til at give dig genstande/services, der koster rigtige penge",
"commGuideList09D": "Fjernelse af Bidragsyder-niveauer"
}
+1 -1
View File
@@ -200,7 +200,7 @@
"hatchingPotionEmber": "Glødende",
"hatchingPotionThunderstorm": "Tordenvejr",
"hatchingPotionGhost": "Spøgelse",
"hatchingPotionRoyalPurple": "Royal lilla",
"hatchingPotionRoyalPurple": "Purpur",
"hatchingPotionHolly": "Kristtorn",
"hatchingPotionCupid": "Amor",
"hatchingPotionShimmer": "Glimmer",
+3 -2
View File
@@ -49,9 +49,10 @@
"balance": "Balance",
"playerTiers": "Spillertrin",
"tier": "Trin",
"conRewardsURL": "http://habitica.fandom.com/wiki/Contributor_Rewards",
"conRewardsURL": "https://habitica.fandom.com/wiki/Contributor_Rewards",
"surveysSingle": "Hjalp Habitica med at vokse ved at udfylde et spørgeskema eller var en stor hjælp ved test. Tusind tak!",
"surveysMultiple": "Hjalp Habitica med at vokse ved <%= count %> lejligheder, enten ved at udfylde et spørgeskema eller hjalp med et større test-arbejde. Tusind tak!",
"blurbHallPatrons": "Dette er Protektorernes Sal, hvor vi ærer de ædle eventyrere, der støttede Habiticas originale Kickstarter. Vi takker dem for at hjælpe os med at vække Habitica til live!",
"blurbHallContributors": "Dette er Bidragsydernes Sal, hvor dem, der har bidraget med open-source materiale til Habitica, bliver æret. Om det er gennem kode, grafik, musik, tekst eller bare generel hjælpsomhed, har de modtaget <a href='http://habitica.fandom.com/wiki/Contributor_Rewards' target='_blank'> ædelsten, eksklusivt udstyr</a>, og <a href='http://habitica.fandom.com/wiki/Contributor_Titles' target='_blank'>prestigefyldte titler</a>. Du kan også bidrage til Habitica! <a href='http://habitica.fandom.com/wiki/Contributing_to_Habitica' target='_blank'> Find ud af mere her. </a>"
"blurbHallContributors": "Dette er Bidragsydernes Sal, hvor dem, der har bidraget med open-source materiale til Habitica, bliver æret. Om det er gennem kode, grafik, musik, tekst eller bare generel hjælpsomhed, har de modtaget <a href='https://habitica.fandom.com/wiki/Contributor_Rewards' target='_blank'> ædelsten, eksklusivt udstyr</a>, og <a href='https://habitica.fandom.com/wiki/Contributor_Titles' target='_blank'>prestigefyldte titler</a>. Du kan også bidrage til Habitica! <a href='https://habitica.fandom.com/wiki/Contributing_to_Habitica' target='_blank'> Find ud af mere her. </a>",
"noPrivAccess": "Du har ikke de påkrævede rettigheder."
}
+2 -2
View File
@@ -3,7 +3,7 @@
"dontDespair": "Bare rolig!",
"deathPenaltyDetails": "Du mistede et Niveau, dit Guld og et stykke Udstyr, men du kan få det hele igen med hårdt arbejde! Held og lykke - du skal nok klare den.",
"refillHealthTryAgain": "Genfyld Liv og Prøv Igen",
"dyingOftenTips": "Sker dette ofte? <a href='http://habitica.fandom.com/wiki/Death_Mechanics#Strategies_for_Staying_Alive' target='_blank'>Her er nogle fif!</a>",
"dyingOftenTips": "Sker dette ofte? <a href='https://habitica.fandom.com/wiki/Death_Mechanics#Strategies_for_Staying_Alive' target='_blank'>Her er nogle fif!</a>",
"losingHealthWarning": "Pas på - du mister Liv!",
"losingHealthWarning2": "Lad ikke dit Liv falde til nul! Hvis du gør det vil du tabe et niveau, alt dit guld og et stykke udstyr.",
"toRegainHealth": "For at genopfylde Liv:",
@@ -14,4 +14,4 @@
"lowHealthTips4": "Hvis en Daglig ikke er forfalden på en given dag, kan du deaktivere den ved at klikke på blyanten.",
"goodLuck": "Held og lykke!",
"cannotRevive": "Du kan ikke genoplive hvis du ikke er død"
}
}
+2 -2
View File
@@ -3,9 +3,9 @@
"defaultHabit2Text": "Spis junk food (Klik på blyanten for at redigere)",
"defaultHabit3Text": "Tag trapperne/elevatoren (Klik på blyanten for at redigere)",
"defaultHabit4Text": "Tilføj en opgave til Habitica",
"defaultHabit4Notes": "Enten en Vane, en Daglig eller en To-Do",
"defaultHabit4Notes": "Enten en Vane, en Daglig eller en To Do",
"defaultTodo1Text": "Begynd at bruge Habitica (Markér mig som færdig!)",
"defaultTodoNotes": "Du kan enten færdiggøre denne To-Do, ændre den, eller fjerne den.",
"defaultTodoNotes": "Du kan enten færdiggøre denne To Do, ændre den eller fjerne den.",
"defaultReward1Text": "15 minutters pause",
"defaultReward2Text": "Beløn dig selv",
"defaultReward2Notes": "Se fjernsyn, spil et spil, spis noget guf, det er op til dig!",
File diff suppressed because one or more lines are too long
+5 -4
View File
@@ -5,7 +5,7 @@
"accept2Terms": "og",
"chores": "Pligter",
"clearBrowserData": "Ryd browserdata",
"communityExtensions": "<a href='http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Tilføjelser og udvidelser</a>",
"communityExtensions": "Tilføjelser og udvidelser",
"communityFacebook": "Facebook",
"companyAbout": "Hvordan det virker",
"companyBlog": "Blog",
@@ -13,7 +13,7 @@
"companyDonate": "Donér",
"forgotPassword": "Glemt kodeord?",
"emailNewPass": "E-mail et nulstillings-link til kodeord",
"forgotPasswordSteps": "Skriv den e-mail adresse du benyttede til at registrere din Habitica-konto.",
"forgotPasswordSteps": "Skriv dit @brugernavn eller den e-mail adresse, du benyttede til at registrere din Habitica-konto.",
"sendLink": "Send link",
"featuredIn": "Omtalt i",
"footerDevs": "Udviklere",
@@ -44,7 +44,7 @@
"marketing3Header": "Apps og Udvidelser",
"marketing3Lead1": "**iPhone & Android** apps lader dig klare dine ting på farten. Vi ved, at det nogen gange er for meget at skulle logge ind på websiden for at klikke på knapper.",
"marketing3Lead2Title": "Integrationer",
"marketing3Lead2": "Andre **tredjepartsværktøjer** kan binde Habitica sammen med andre dele af dit liv. Vores API muliggør integrationer som [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), med hvilken du mister point ved at bruge unyttige hjemmesider, og optjener point når du browser de nyttige i stedet. [Se mere her](http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).",
"marketing3Lead2": "Andre **tredjepartsværktøjer** kan binde Habitica sammen med andre dele af dit liv. Vores API muliggør integrationer som [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), med hvilken du mister point ved at bruge unyttige hjemmesider, og optjener point når du browser de nyttige i stedet. [Se mere her](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).",
"marketing4Header": "Organisatorisk brug",
"marketing4Lead1": "Uddannelse er en af de bedste områder at bruge spilelementer. Vi ved alle, hvordan studerende nærmest er limet til deres telefon disse dage, så brug dette! Sæt dine elever til at kæmpe mod hinanden som hyggelig konkurrence. Beløn god opførsel med sjældne præmier. Se deres karakterer og opførsel blive forbedret.",
"marketing4Lead1Title": "Brug af Spilelementer i Undervisning",
@@ -184,5 +184,6 @@
"mobileApps": "Mobile apps",
"learnMore": "Lær mere",
"communityInstagram": "Instagram",
"minPasswordLength": "Kodeord skal bestå af 8 eller flere tegn."
"minPasswordLength": "Kodeord skal bestå af 8 eller flere tegn.",
"enterHabitica": "Spil Habitica"
}
+5 -4
View File
@@ -19,7 +19,7 @@
"sortByStr": "STY",
"sortByInt": "INT",
"weapon": "våben",
"weaponCapitalized": "Main-Hand Item",
"weaponCapitalized": "Primær hånd",
"weaponBase0Text": "Intet våben",
"weaponBase0Notes": "Intet våben.",
"weaponWarrior0Text": "Træningssværd",
@@ -892,7 +892,7 @@
"headSpecialDandyHatNotes": "Sikke en herlig hat! Den vil klæde dig så nydeligt på en gåtur. Forøger Konstitution med <%= con %>.",
"headSpecialKabutoText": "Samuraihjelm",
"headSpecialKabutoNotes": "Denne hjelm er funktionel og smuk! Dine fjender vil være helt distraherede af den. Forøger Intelligens med <%= int %>.",
"headSpecialNamingDay2017Text": "Royal lilla grifhjelm",
"headSpecialNamingDay2017Text": "Purpurfarvet grifhjelm",
"headSpecialNamingDay2017Notes": "Glædelig Navngivningsdag! Ifør dig denne truende og fjerklædte hjelm for at fejre Habitica. Giver ingen bonusser.",
"headSpecialTurkeyHelmBaseText": "Kalkunhjelm",
"headSpecialTurkeyHelmBaseNotes": "Dit Thanksgiving-look vil være fuldendt med denne næbbede hjelm! Giver ingen bonusser.",
@@ -1599,7 +1599,7 @@
"bodySpecialSummer2015MageNotes": "Dette spænde giver ingen krafter overhovedet, men det er pænt. Giver ingen bonusser. Specielt 2015 Sommerudstyr.",
"bodySpecialSummer2015HealerText": "Matrostørklæde",
"bodySpecialSummer2015HealerNotes": "Hiv Ohøj? Nej nej nej! Giver ingen bonusser. Specielt 2015 Sommerudstyr.",
"bodySpecialNamingDay2018Text": "Royal Purple Gryphon Cloak",
"bodySpecialNamingDay2018Text": "Purpurfarvet grif-kappe",
"bodySpecialNamingDay2018Notes": "Happy Naming Day! Wear this fancy and feathery cloak as you celebrate Habitica. Confers no benefit.",
"bodyMystery201705Text": "Folded Feathered Fighter Wings",
"bodyMystery201705Notes": "These folded wings don't just look snazzy: they will give you the speed and agility of a gryphon! Confers no benefit. May 2017 Subscriber Item.",
@@ -1873,5 +1873,6 @@
"headSpecialNye2020Notes": "Du har modtaget en Ekstravagant Festhat! Bær den med stolthed imens du byder det nye år velkommen! Giver ingen fordele.",
"headSpecialNye2020Text": "Ekstravagant Festhat",
"weaponSpecialWinter2021MageNotes": "Dette mægtige våben er bestemt mere end en fase. Kanalisér din energi, fokusér på en måneds flow, og studér tid og rum. Øger Intelligens med <%= int %> og Opfattelse med <%= per %>. Begrænset 2020-2021 Vinterudstyr.",
"weaponSpecialWinter2021MageText": "Magisk Måne-faser"
"weaponSpecialWinter2021MageText": "Magisk Måne-faser",
"backSpecialNamingDay2020Text": "Purpurfarvet grifhale"
}
+4 -3
View File
@@ -14,7 +14,7 @@
"contributing": "Sådan bidrager du",
"faq": "FAQ",
"tutorial": "Vejledning",
"glossary": "<a target='_blank' href='http://habitica.fandom.com/wiki/Glossary'>Ordliste (EN)</a>",
"glossary": "<a target='_blank' href='https://habitica.fandom.com/wiki/Glossary'>Ordliste (EN)</a>",
"wiki": "Wiki",
"requestAF": "Anmod om en funktion",
"dataTool": "Datavisningsværktøj",
@@ -324,7 +324,7 @@
"gettingStarted": "Kom i gang",
"congratsOnGroupPlan": "Tillykke med oprettelsen af din nye Gruppe! Her er nogle svar på flere af de mest almindelige spørgsmål.",
"whatsIncludedGroup": "Hvad er inkluderet i abonnementet",
"whatsIncludedGroupDesc": "Alle medlemmer af Gruppen får alle fordele ved et abonnement, inklusiv de månedlige abonnentgenstande, evnen til at købe Ædelsten for Guld, og det Royale Lilla Jackalope-ridedyr, som er en eksklusiv belønning for medlemmer af en Gruppeplan.",
"whatsIncludedGroupDesc": "Alle medlemmer af Gruppen får alle fordele ved et abonnement, inklusiv de månedlige abonnentgenstande, evnen til at købe Ædelsten for Guld, og det purpur Jackalope-ridedyr, som er en eksklusiv belønning for medlemmer af en Gruppeplan.",
"howDoesBillingWork": "Hvordan fungerer betalingen?",
"howDoesBillingWorkDesc": "Gruppeledere faktureres baseret på antallet af gruppemedlemmer på en månedlig basis. Regningen omfatter prisen for Gruppelederens abonnement ($9 USD) plus $3 USD for hvert ekstra gruppemedlem. Fx: En gruppe af fire brugere vil koste $18 USD om måneden, da gruppen består af 1 Gruppeleder + 3 gruppemedlemmer.",
"howToAssignTask": "Hvordan tildeler du en Opgave?",
@@ -339,5 +339,6 @@
"recurringCompletion": "Ingen - Gruppeopgave kan ikke udføres",
"singleCompletion": "Single - Completes when any assigned user finishes",
"allAssignedCompletion": "All - Completes when all assigned users finish",
"pmReported": "Tak, fordi du rapporterede denne besked."
"pmReported": "Tak, fordi du rapporterede denne besked.",
"features": "Funktioner"
}
+125 -48
View File
@@ -27,10 +27,10 @@
"seasonalShopClosedTitle": "<%= linkStart %>Leslie<%= linkEnd %>",
"seasonalShopTitle": "<%= linkStart %>Sæson-heksen<%= linkEnd %>",
"seasonalShopClosedText": "Sæson-markedet er lukket lige nu!! Det er kun åbent under Habiticas fire Grandiøse Gallaer.",
"seasonalShopSummerText": "Glædeligt Sommerplask!! Vil du købe nogle sjældne genstande? De vil kun være tilgængelige indtil 31. juli!",
"seasonalShopFallText": "Glædelig Efterårsfestival!! Vil du købe nogle sjældne genstande? De vil kun være tilgængelige indtil 31. oktober!",
"seasonalShopWinterText": "Velkommen til Vintereventyret!! Vil du købe nogle sjældne genstande? De vil kun være tilgængelige indtil 31. januar!",
"seasonalShopSpringText": "Glædelig Forårsfest!! Vil du købe nogle sjældne genstande? De vil kun være tilgængelige indtil 30. april!",
"seasonalShopSummerText": "Glædeligt Sommerplask!! Vil du købe nogle sjældne genstande? Sørg for at købe dem før Gallaen slutter!",
"seasonalShopFallText": "Glædelig Efterårsfestival!! Vil du købe nogle sjældne genstande? Sørg for at købe dem før Gallaen slutter!",
"seasonalShopWinterText": "Velkommen til Vintereventyret!! Vil du købe nogle sjældne genstande? Sørg for at købe dem før Gallaen slutter!",
"seasonalShopSpringText": "Glædelig Forårsfest!! Vil du købe nogle sjældne genstande? Sørg for at købe dem før Gallaen slutter!",
"seasonalShopFallTextBroken": "Åh.... Velkommen til Sæson-markedet... Vi har efterårs-sæson varer, eller noget... Alting her kan købes under Efterårsfestival-eventet hvert år, men vi har kun åbent indtil den 31. oktober... Du burde nok købe ind nu, ellers vil du skulle vente... og vente... og vente... <strong>*suk*</strong>",
"seasonalShopBrokenText": "Min pavillon!!!!!!! Mine dekorationer!!!! Åh, den Dysheartener har ødelagt det hele :( Hjælp med at bekæmpe den i Værtshuset, så jeg kan genopbygge!",
"seasonalShopRebirth": "Hvis du har købt noget af detteudstyr før, men ikke ejer det i øjeblikket, kan du genkøbe det i Belønningskolonnen. I starten vil du kun kunne købe de ting der passer til din nuværende klasse (Kriger som standard), men frygt ej, de andre klasse-specifikke varer bliver tilgængelige hvis du skifter til den klasse.",
@@ -45,7 +45,7 @@
"snowDaySet": "Snedagskriger (Kriger)",
"snowboardingSet": "Snowboardende Sortkunstner (Magiker)",
"festiveFairySet": "Festlig Fe (Helbreder)",
"cocoaSet": "Kakao Slyngel (Slyngel)",
"cocoaSet": "Kakao (Slyngel)",
"toAndFromCard": "Til: <%= toName %>, Fra: <%= fromName %>",
"nyeCard": "Nytårskort",
"nyeCardExplanation": "Da I har fejret nytår sammen, modtager I begge \"Gammel Kending\"-emblemet!",
@@ -56,7 +56,7 @@
"nye0": "Godt Nytår! Må du overvinde mange dårlige Vaner.",
"nye1": "Godt Nytår! Må du modtage mange Belønninger.",
"nye2": "Godt Nytår! Må du udføre mange Perfekte Dage.",
"nye3": "Godt Nytår! Må din To-Do-liste forblive kort og overskuelig.",
"nye3": "Godt nytår! Må din To-Do-liste forblive kort og overskuelig.",
"nye4": "Godt nytår! Må du undgå at blive angrebet af vrede Hippogriffer.",
"mightyBunnySet": "Kraftfuld Kanin (Kriger)",
"magicMouseSet": "Magisk Mus (Magiker)",
@@ -74,11 +74,11 @@
"magicianBunnySet": "Tryllekunstners Kanin (Magiker)",
"comfortingKittySet": "Trøstende Kat (Helbreder)",
"sneakySqueakerSet": "Pibende Sniger (Slyngel)",
"sunfishWarriorSet": "Solfiskekriger (Kriger)",
"sunfishWarriorSet": "Solfisk (Kriger)",
"shipSoothsayerSet": "Skibs-sandsigerske (Magiker)",
"strappingSailorSet": "Spændstig Sømand (Helbreder)",
"reefRenegadeSet": "Røver på Revet (Slyngel)",
"scarecrowWarriorSet": "Fægtende Fugleskræmsel (Kriger)",
"scarecrowWarriorSet": "Fugleskræmsel (Kriger)",
"stitchWitchSet": "Skrædderheks (Magiker)",
"potionerSet": "Eleksirmager (Helbreder)",
"battleRogueSet": "Flager-Fusker (Slyngel)",
@@ -86,40 +86,40 @@
"grandMalkinSet": "Mester-malkin (Magiker)",
"cleverDogSet": "Kløgtig Hund (Slyngel)",
"braveMouseSet": "Modig Mus (Kriger)",
"summer2016SharkWarriorSet": "Hajkriger (Kriger)",
"summer2016DolphinMageSet": "Delfinmagiker (Magiker)",
"summer2016SeahorseHealerSet": "Søhesthelbreder (Helbreder)",
"summer2016EelSet": "Åleslyngel (Slyngel)",
"summer2016SharkWarriorSet": "Haj (Kriger)",
"summer2016DolphinMageSet": "Delfin (Magiker)",
"summer2016SeahorseHealerSet": "Søhest (Helbreder)",
"summer2016EelSet": "Ål (Slyngel)",
"fall2016SwampThingSet": "Sump-ting (Kriger)",
"fall2016WickedSorcererSet": "Skummel Sortkunstner (Magiker)",
"fall2016GorgonHealerSet": "Gorgon-helbreder (Helbreder)",
"fall2016BlackWidowSet": "Sort Enke-slyngel (Slyngel)",
"fall2016GorgonHealerSet": "Gorgon (Helbreder)",
"fall2016BlackWidowSet": "Sort enke (Slyngel)",
"winter2017IceHockeySet": "Ishockey (Kriger)",
"winter2017WinterWolfSet": "Vinterulv (Magiker)",
"winter2017SugarPlumSet": "Sukkerblomme-helbreder (Helbreder)",
"winter2017FrostyRogueSet": "Sukkerslyngel (Slyngel)",
"spring2017FelineWarriorSet": "Kattekriger (Kriger)",
"winter2017SugarPlumSet": "Sukkerblomme (Helbreder)",
"winter2017FrostyRogueSet": "Frost (Slyngel)",
"spring2017FelineWarriorSet": "Kattedyr (Kriger)",
"spring2017CanineConjurorSet": "Hundehekser (Magiker)",
"spring2017FloralMouseSet": "Blomstermus (Helbreder)",
"spring2017SneakyBunnySet": "Krybende Kanin (Slyngel)",
"summer2017SandcastleWarriorSet": "Sandslotskriger (Kriger)",
"summer2017WhirlpoolMageSet": "Malstrømsmagiker (Magiker)",
"summer2017SandcastleWarriorSet": "Sandslot (Kriger)",
"summer2017WhirlpoolMageSet": "Malstrøm(Magiker)",
"summer2017SeashellSeahealerSet": "Havmuslingehelbreder (Helbreder)",
"summer2017SeaDragonSet": "Sødrage (Slyngel)",
"fall2017HabitoweenSet": "Habitoweenkriger (Kriger)",
"fall2017MasqueradeSet": "Maskerademagiker (Magiker)",
"fall2017HauntedHouseSet": "Spøgelseshuslæge (Helbreder)",
"fall2017TrickOrTreatSet": "Ballademagerbandit (Slyngel)",
"winter2018ConfettiSet": "Konfettimagiker (Magiker)",
"winter2018GiftWrappedSet": "Indpakket Kriger (Kriger)",
"winter2018MistletoeSet": "Misteltenshelbreder (Helbreder)",
"winter2018ReindeerSet": "Rendsdyrslyngel (Slyngel)",
"spring2018SunriseWarriorSet": "Solopgangskriger (Kriger)",
"spring2018TulipMageSet": "Tulipanmagiker (Magiker)",
"spring2018GarnetHealerSet": "Granatrød Helbreder (Helbreder)",
"spring2018DucklingRogueSet": "Ællingeslyngel (Slyngel)",
"summer2018BettaFishWarriorSet": "Kampfiskkriger (Kriger)",
"summer2018LionfishMageSet": "Dragefiskmagiker (Magiker)",
"fall2017HabitoweenSet": "Habitoween (Kriger)",
"fall2017MasqueradeSet": "Maskerade(Magiker)",
"fall2017HauntedHouseSet": "Spøgelseshus (Helbreder)",
"fall2017TrickOrTreatSet": "Ballademager (Slyngel)",
"winter2018ConfettiSet": "Konfetti (Magiker)",
"winter2018GiftWrappedSet": "Gavepapir (Kriger)",
"winter2018MistletoeSet": "Mistelten (Helbreder)",
"winter2018ReindeerSet": "Rensdyr (Slyngel)",
"spring2018SunriseWarriorSet": "Solopgang (Kriger)",
"spring2018TulipMageSet": "Tulipan (Magiker)",
"spring2018GarnetHealerSet": "Granatrød (Helbreder)",
"spring2018DucklingRogueSet": "Ælling (Slyngel)",
"summer2018BettaFishWarriorSet": "Kampfisk (Kriger)",
"summer2018LionfishMageSet": "Dragefisk (Magiker)",
"summer2018MerfolkMonarchSet": "Havfruehertug(inde) (Helbreder)",
"summer2018FisherRogueSet": "Fiskerslyngel (Slyngel)",
"fall2018MinotaurWarriorSet": "Minotaur (Kriger)",
@@ -131,21 +131,98 @@
"winter2019WinterStarSet": "Vinterstjerne (Helbreder)",
"winter2019PoinsettiaSet": "Julestjerne (Slyngel)",
"eventAvailability": "Tilgændelig til køb indtil <%= date(locale) %>.",
"dateEndMarch": "April 30",
"dateEndApril": "19. april",
"dateEndMay": "May 31",
"dateEndJune": "Juni 14",
"dateEndJuly": "July 31",
"dateEndAugust": "August 31",
"dateEndSeptember": "September 21",
"dateEndOctober": "October 31",
"dateEndNovember": "December 3",
"dateEndJanuary": "January 31",
"dateEndFebruary": "February 28",
"winterPromoGiftHeader": "GIFT A SUBSCRIPTION AND GET ONE FREE!",
"winterPromoGiftDetails1": "Til og med 15. januar vil du få det samme abonnement med til dig selv, når du køber et abonnement til nogen i gave!",
"dateEndMarch": "31. marts",
"dateEndApril": "30. april",
"dateEndMay": "31. maj",
"dateEndJune": "30. juni",
"dateEndJuly": "31. juli",
"dateEndAugust": "31. august",
"dateEndSeptember": "30. september",
"dateEndOctober": "31. oktober",
"dateEndNovember": "30. november",
"dateEndJanuary": "31. januar",
"dateEndFebruary": "28. februar",
"winterPromoGiftHeader": "GIV ET ABONNEMENT I GAVE, OG FÅ ET GRATIS!",
"winterPromoGiftDetails1": "Til og med 6. januar vil du få det samme abonnement med til dig selv, når du køber et abonnement til nogen i gave!",
"winterPromoGiftDetails2": "Bemærk venligst, at hvis du eller modtageren af din gave allerede har et tilbagevendende abonnement, vil gave-abonnementet kun starte efter det tilbagevendende er blevet opsagt eller er udløbet. Tusind tak for din støtte! <3",
"discountBundle": "pakke",
"g1g1Announcement": "<strong>Giv et abonnement, få et abonnement gratis!</strong> Tilbuddet gælder lige nu!",
"g1g1Details": "Send et gave-abonnement til en ven fra deres profil, og du vil få det samme abonnement til dig selv gratis!"
"g1g1Announcement": "<strong>Giv et abonnement og få et abonnement gratis!</strong> Tilbuddet gælder lige nu!",
"g1g1Details": "Send et gave-abonnement til en ven, og du vil få det samme abonnement til dig selv gratis!",
"g1g1": "Send et, få et",
"winter2020EvergreenSet": "Stedsegrøn (Kriger)",
"winter2020CarolOfTheMageSet": "Magisk julesang (Magiker)",
"winter2020WinterSpiceSet": "Vinterkrydderi (Helbreder)",
"spring2020IrisHealerSet": "Iris (Helbreder)",
"spring2019OrchidWarriorSet": "Orkidé (Kriger)",
"spring2019AmberMageSet": "Rav (Magiker)",
"summer2020OarfishMageSet": "Sildekonge (Magiker)",
"spring2019RobinHealerSet": "Rødhals (Helbreder)",
"summer2020SeaGlassHealerSet": "Havglas (Helbreder)",
"spring2019CloudRogueSet": "Sky (Slyngel)",
"fall2020DeathsHeadMothHealerSet": "Dødningehovednatsværmer (Helbreder)",
"summer2019SeaTurtleWarriorSet": "Havskildpadde (Kriger)",
"winter2021IceFishingWarriorSet": "Isfisker (Kriger)",
"summer2019WaterLilyMageSet": "Åkande (Magiker)",
"winter2021WinterMoonMageSet": "Vintermåne (Magiker)",
"summer2019ConchHealerSet": "Konkylie (Helbreder)",
"spring2021SwanMageSet": "Svane (Magiker)",
"summer2019HammerheadRogueSet": "Hammerhaj (Slyngel)",
"fall2019CyclopsSet": "Kyklop (Magiker)",
"summer2021NautilusMageSet": "Nautilus (Magiker)",
"summer2021ParrotHealerSet": "Papegøje (Helbreder)",
"summer2021ClownfishRogueSet": "Klovnefisk (Slyngel)",
"fall2020TwoHeadedRogueSet": "Tohovedet (Slyngel)",
"spring2020PuddleMageSet": "Vandpyt (Magiker)",
"fall2020WraithWarriorSet": "Genfærd (Kriger)",
"summer2021FlyingFishWarriorSet": "Flyvefisk (Kriger)",
"spring2021SunstoneWarriorSet": "Solsten (Kriger)",
"summer2020RainbowTroutWarriorSet": "Regnbueørred (Kriger)",
"fall2020ThirdEyeMageSet": "Treøjet (Magiker)",
"fall2019RavenSet": "Ravn (Kriger)",
"spring2021TwinFlowerRogueSet": "Kaprifolie (Slyngel)",
"spring2021WillowHealerSet": "Piletræ (Helbreder)",
"winter2020LanternSet": "Lanterne (Slyngel)",
"spring2020BeetleWarriorSet": "Næsehornsbille (Kriger)",
"summer2020CrocodileRogueSet": "Krokodille (Slyngel)",
"winter2021HollyIvyRogueSet": "Kristtjørn og vedbend (Slyngel)",
"winter2021ArcticExplorerHealerSet": "Arktisk udforsker (Helbreder)",
"spring2020LapisLazuliRogueSet": "Lapis lazuli (Slyngel)",
"fall2019OperaticSpecterSet": "Operaspøgelse (Slyngel)",
"g1g1Limitations": "Dette er et tidsbegrænset tilbud der begynder d. 16. december kl. 14:00 (UTC+1), og slutter d. 6. januar kl. 02:00 (UTC+1). Dette tilbud gælder kun, når du giver et gave-abonnement til en anden Habiticaner. Hvis du eller modtageren allerede har et abonnement, vil gave-abonnementet tilføje yderligere tid, der kun vil blive brugt så snart det nuværende abonnement opsiges eller udløber.",
"mayYYYY": "maj <%= year %>",
"limitations": "Begrænsninger",
"summer2022CrabRogueSet": "Krabbe (Slyngel)",
"summer2022WaterspoutWarriorSet": "Vandsøjle (Kriger)",
"summer2022MantaRayMageSet": "Djævlerokke (Magiker)",
"summer2022AngelfishHealerSet": "Englefisk (Helbreder)",
"dateEndDecember": "31. december",
"februaryYYYY": "februar <%= year %>",
"julyYYYY": "juli <%= year %>",
"octoberYYYY": "oktober <%= year %>",
"howItWorks": "Sådan virker det",
"noLongerAvailable": "Denne genstand er ikke længere tilgængelig.",
"spring2022MagpieRogueSet": "Skade (Slyngel)",
"spring2022RainstormWarriorSet": "Uvejr (Kriger)",
"spring2022ForsythiaMageSet": "Forsythia (Magiker)",
"g1g1HowItWorks": "Skriv brugernavnet på den konto, du vil sende gave-abonnementet til. Derefter skal du vælge længden på abonnementet, og så checke ud. Din konto vil automatisk få tildelt den samme type abonnement, du lige har givet en anden.",
"fall2021OozeRogueSet": "Slim (Slyngel)",
"fall2021HeadlessWarriorSet": "Hovedløs (Kriger)",
"fall2021BrainEaterMageSet": "Hjerneæder (Magiker)",
"fall2021FlameSummonerHealerSet": "Flammehidkalder (Helbreder)",
"eventAvailabilityReturning": "Kan købes indtil <%= availableDate(locale) %>. Denne eliksir var sidst tilgængelig <%= previousDate(locale) %>.",
"septemberYYYY": "september <%= year %>",
"marchYYYY": "marts <%= year %>",
"juneYYYY": "juni <%= year %>",
"novemberYYYY": "november <%= year %>",
"decemberYYYY": "december <%= year %>",
"augustYYYY": "august <%= year %>",
"winter2022FireworksRogueSet": "Fyrværkeri (Slyngel)",
"winter2022StockingWarriorSet": "Julesok (Kriger)",
"winter2022PomegranateMageSet": "Granatæble (Magiker)",
"winter2022IceCrystalHealerSet": "Iskrystal (Helbreder)",
"g1g1Event": "Send et, få et - tilbuddet gælder nu!",
"g1g1Returning": "For at fejre nytåret bringer vi et ganske særligt tilbud tilbage. Lige nu, når du køber et abonnement som gave, får du det samme abonnement selv!",
"januaryYYYY": "januar <%= year %>",
"aprilYYYY": "april <%= year %>",
"royalPurpleJackolantern": "Purpur Græskarlygte"
}
+5 -4
View File
@@ -17,9 +17,9 @@
"mattBochText1": "Velkommen til Stalden! Jeg er Staldmesteren Matt. Hver gang du færdiggør en opgave, vil du have en chance for at modtage et tilfældigt Æg eller Udklækningseliksir til at udklække Kæledyr. Når du udruger et Kæledyr, vil det dukke op her! Klik på billedet af Kæledyret for at føje det til din Avatar. Giv dem det Dyrefoder du finder, og de vil vokse sig til kraftfulde Ridedyr.",
"welcomeToTavern": "Velkommen til Værtshuset!",
"sleepDescription": "Har du brug for en pause? Check ind i Daniels Værtshus for at sætte nogle af Habiticas svære elementer på pause:",
"sleepBullet1": "Missede Daglige vil ikke skade dig",
"sleepBullet2": "Opgavers stribe-præstation vil ikke blive tabt",
"sleepBullet3": "Bosser vil ikke skade dig på grund af dine egne missede Daglige",
"sleepBullet1": "Dine missede Daglige vil ikke skade dig (bosser vil stadig kunne skade dig baseret på andre Holdmedlemmers missede Daglige)",
"sleepBullet2": "Dagliges stribe-præstation og Vanetæller vil ikke blive nulstillet",
"sleepBullet3": "Den skade, du vil påføre bossen, eller dine indsamlede questgenstande, vil først tælle med i questen, når du checker ud af Værtshuset",
"sleepBullet4": "Du vil beholde din afventende skade til bosser eller indsamlede questgenstande indtil du checker ud",
"pauseDailies": "Sæt skade på pause",
"unpauseDailies": "Skade er ikke længere på pause",
@@ -129,5 +129,6 @@
"cannotUnpinItem": "Denne genstand kan ikke frigøres.",
"nMonthsSubscriptionGift": "<%= nMonths %> Måned(ers) Abonnement (Gave)",
"nGemsGift": "<%= nGems %> Ædelsten (Gave)",
"nGems": "<%= nGems %> Ædelsten"
"nGems": "<%= nGems %> Ædelsten",
"amountExp": "<%= amount %> Exp"
}
+3 -3
View File
@@ -1,10 +1,10 @@
{
"needTips": "Brug for noget hjælp til at starte? Her er en enkel guide!",
"step1": "Trin 1: Indtast opgaver",
"webStep1Text": "Habitica er intet uden mål i det virkelige liv, så opret et par opgaver. Du kan altid tilføje flere! Alle opgaver kan tilføjes ved at klikke på den grønne 'Opret' knap.\n* **Opret [To-Dos](http://habitica.fandom.com/wiki/To-Dos):** Tilføj opgaver, du kun skal gøre én gang, eller sjældent, i kolonnen 'To-Dos', en af gangen. Du kan klikke på opgaverne for at redigere dem og tilføje checklister, forfaldsdag og mere!\n* **Opret [Daglige](http://habitica.fandom.com/wiki/Dailies):** Tilføj aktiviteter, du skal klare hver dag, eller på en bestemt dag i ugen, måneden, eller året i kolonnen 'Daglige'. Klik på en opgaver for at ændre, hvornår den skal være forfalden og/eller fastsætte en startdato. Du kan også sætte den til at være forfalden med jævne mellemrum, for eksempel hver tredje dag.\n* **Opret [Vaner](http://habitica.fandom.com/wiki/Habits):** Tilføj vaner, du gerne vil tillægge dig, i kolonnen 'Vaner'. Du kan ændre Vanen for kun at gøre den til en god vane :heavy_plus_sign: eller en dårlig vane :heavy_minus_sign:\n* **Opret [Belønninger](http://habitica.fandom.com/wiki/Rewards):** Udover de Belønninger, der tilbydes i spillet, kan du tilføje aktiviteter eller små gaver/lækkerier, du kan bruge som motivation, i kolonnen 'Belønninger'. Det er vigtigt at give dig selv en pause eller tillade en lille luksus sommetider!\n* Hvis du har brug for inspiration til dine opgaver, kan du se [eksempler på Vaner](http://habitica.fandom.com/wiki/Sample_Habits), [eksempler på Daglige](http://habitica.fandom.com/wiki/Sample_Dailies), [eksempler på To-Dos](http://habitica.fandom.com/wiki/Sample_To-Dos), og [eksempler på Belønninger](http://habitica.fandom.com/wiki/Sample_Custom_Rewards) på wiki'en (engelsk).",
"webStep1Text": "Habitica er intet uden mål i det virkelige liv, så opret et par opgaver. Du kan altid tilføje flere! Alle opgaver kan tilføjes ved at klikke på den grønne 'Opret' knap.\n* **Opret [To Do's](https://habitica.fandom.com/wiki/To_Do%27s):** Tilføj opgaver, du kun skal gøre én gang, eller sjældent, i kolonnen To Do's, en af gangen. Du kan klikke på opgaverne for at redigere dem og tilføje checklister, forfaldsdag og mere!\n* **Opret [Daglige](https://habitica.fandom.com/wiki/Dailies):** Tilføj aktiviteter, du skal klare hver dag, eller på en bestemt dag i ugen, måneden, eller året i kolonnen 'Daglige'. Klik på en opgaver for at ændre, hvornår den skal være forfalden og/eller fastsætte en startdato. Du kan også sætte den til at være forfalden med jævne mellemrum, for eksempel hver tredje dag.\n* **Opret [Vaner](https://habitica.fandom.com/wiki/Habits):** Tilføj vaner, du gerne vil tillægge dig, i kolonnen 'Vaner'. Du kan ændre Vanen for kun at gøre den til en god vane :heavy_plus_sign: eller en dårlig vane :heavy_minus_sign:\n* **Opret [Belønninger](https://habitica.fandom.com/wiki/Rewards):** Udover de Belønninger, der tilbydes i spillet, kan du tilføje aktiviteter eller små gaver/lækkerier, du kan bruge som motivation, i kolonnen 'Belønninger'. Det er vigtigt at give dig selv en pause eller tillade en lille luksus sommetider!\n* Hvis du har brug for inspiration til dine opgaver, kan du se [eksempler på Vaner](https://habitica.fandom.com/wiki/Sample_Habits), [eksempler på Daglige](https://habitica.fandom.com/wiki/Sample_Dailies), [eksempler på To Do's](https://habitica.fandom.com/wiki/Sample_To_Do%27s), og [eksempler på Belønninger](https://habitica.fandom.com/wiki/Sample_Custom_Rewards) på wiki'en (engelsk).",
"step2": "Trin 2: Optjen Point ved at gøre ting i det virkelig liv",
"webStep2Text": "Begynd nu på dine mål fra listen! Efterhånden som du fuldfører opgaver og krydser dem af i Habitica vil du få [Erfaring](http://habitica.fandom.com/wiki/Experience_Points), som vil lade dig stige i niveau, og [Guld](http://habitica.fandom.com/wiki/Gold_Points), som du kan købe Belønninger for. Hvis du giver efter for dårlige vaner eller misser dine Daglige, vil du miste [Liv](http://habitica.fandom.com/wiki/Health_Points). På denne måde vil Habiticas Erfarings- og Helbredsbjælker være en morsom indikater for fremskridt mod dine mål. Du vil begynde at se forbedringer i dit virkelige liv mens din karakter avancerer i spillet.",
"webStep2Text": "Begynd nu på dine mål fra listen! Efterhånden som du fuldfører opgaver og krydser dem af i Habitica vil du få [Erfaring](https://habitica.fandom.com/wiki/Experience_Points), som vil lade dig stige i niveau, og [Guld](https://habitica.fandom.com/wiki/Gold_Points), som du kan købe Belønninger for. Hvis du giver efter for dårlige vaner eller misser dine Daglige, vil du miste [Liv](https://habitica.fandom.com/wiki/Health_Points). På denne måde vil Habiticas Erfarings- og Helbredsbjælker være en morsom indikator for fremskridt mod dine mål. Du vil begynde at se forbedringer i dit virkelige liv, mens din karakter avancerer i spillet.",
"step3": "Trin 3: Brugerdefiner og udforsk Habitica",
"webStep3Text": "Når du er blevet tryg ved nøglefunktionerne, kan du få endnu mere ud af Habitica med de følgende fikse detaljer:\n * Hold styr på dine opgaver med [tags](http://habitica.fandom.com/wiki/Tags) (rediger en opgave for at tilføje dem).\n * Tilpas din [avatar](http://habitica.fandom.com/wiki/Avatar) ved at klikke på brugerikonet i øverste højre hjørne.\n * Køb [Udstyr](http://habitica.fandom.com/wiki/Equipment) under Belønninger eller fra [Butikkerne](<%= shopUrl %>), og skift det ud under [Inventar > Udstyr](<%= equipUrl %>).\n * Sig hej til andre brugere i [Værtshuset](http://habitica.fandom.com/wiki/Tavern).\n * Fra niveau 3 kan du udklække [Kæledyr](http://habitica.fandom.com/wiki/Pets) ved at samle [æg](http://habitica.fandom.com/wiki/Eggs) og [udrugningseliksirer](http://habitica.fandom.com/wiki/Hatching_Potions). [Fodr](http://habitica.fandom.com/wiki/Food) dem for at få [Ridedyr](http://habitica.fandom.com/wiki/Mounts).\n * Fra niveau 10 kan du vælge en [klasse](http://habitica.fandom.com/wiki/Class_System), og får adgang til specielle [evner](http://habitica.fandom.com/wiki/Skills) (låses op fra niveau 11 til 14).\n * Lav et hold med dine venner (ved at klikke på [Hold](<%= partyUrl %>) i navigationsbarren), for at blive holdt ansvarlig og få en Questskriftrulle.\n * Du kan besejre monstre og indsamle genstande på [quests](http://habitica.fandom.com/wiki/Quests) (du vil få en quest på niveau 15).",
"webStep3Text": "Når du er blevet tryg ved nøglefunktionerne, kan du få endnu mere ud af Habitica med de følgende fikse detaljer:\n * Hold styr på dine opgaver med [tags](https://habitica.fandom.com/wiki/Tags) (rediger en opgave for at tilføje dem).\n * Tilpas din [avatar](https://habitica.fandom.com/wiki/Avatar) ved at klikke på brugerikonet i øverste højre hjørne.\n * Køb [udstyr](https://habitica.fandom.com/wiki/Equipment) under Belønninger eller fra [Butikkerne](<%= shopUrl %>), og skift det ud under [Inventar > Udstyr](<%= equipUrl %>).\n * Sig hej til andre brugere i [Værtshuset](https://habitica.fandom.com/wiki/Tavern).\n * Udklæk [kæledyr](https://habitica.fandom.com/wiki/Pets) ved at samle [æg](https://habitica.fandom.com/wiki/Eggs) og [udrugningseliksirer](https://habitica.fandom.com/wiki/Hatching_Potions). [Fodr](https://habitica.fandom.com/wiki/Food) dem for at få [ridedyr](https://habitica.fandom.com/wiki/Mounts).\n * Fra niveau 10 kan du vælge en [klasse](https://habitica.fandom.com/wiki/Class_System), og får adgang til specielle [evner](https://habitica.fandom.com/wiki/Skills) (låses op fra niveau 11 til 14).\n * Lav et hold med dine venner (ved at klikke på [Hold](<%= partyUrl %>) i navigationsbarren), for at blive holdt ansvarlig og få en Questskriftrulle.\n * Du kan besejre monstre og indsamle genstande på [quests](https://habitica.fandom.com/wiki/Quests) (du vil få en quest på niveau 15).",
"overviewQuestions": "Har du flere spørgsmål? Læs vores [FAQ](<%= faqUrl %>)! Hvis du ikke kan finde et svar der, kan du bede om hjælp i Klanen [Habitica Help](<%= helpGuildUrl %>).\n\nHeld og lykke med dine opgaver!"
}
+4 -4
View File
@@ -23,12 +23,12 @@
"mantisShrimp": "Knælerreje",
"mammoth": "Ulden mammut",
"orca": "Spækhugger",
"royalPurpleGryphon": "Royal Lilla Grif",
"royalPurpleGryphon": "Purpur Grif",
"phoenix": "Føniks",
"magicalBee": "Magisk bi",
"hopefulHippogriffPet": "Håbefuld hippogrif",
"hopefulHippogriffMount": "Håbefuld hippogrif",
"royalPurpleJackalope": "Royal Lilla Jackalope",
"royalPurpleJackalope": "Purpur Jackalope",
"invisibleAether": "Usynlig æter",
"potion": "<%= potionType %> eliksir",
"egg": "<%= eggType %> æg",
@@ -44,8 +44,8 @@
"noFoodAvailable": "Du har ikke noget Dyrefoder.",
"noSaddlesAvailable": "Du har ikke nogle sadler.",
"noFood": "Du har hverken mad eller sadler.",
"dropsExplanation": "Du kan få fat i disse ting hurtigere med ædelsten, hvis du ikke længere vil vente på at finde dem når du gennemfører en opgave. <a href=\"http://habitica.fandom.com/wiki/Drops\">Lær mere om drop-systemet.</a>",
"dropsExplanationEggs": "Brug Ædelsten for hurtigere at få æg, hvis du ikke vil vente på at få standard-æg som drops, eller gentage Quests for at vinde Quest-æg. <a href=\"http://habitica.fandom.com/wiki/Drops\">Læs mere om dropsystemet her.</a>",
"dropsExplanation": "Du kan få fat i disse ting hurtigere med ædelsten, hvis du ikke længere vil vente på at finde dem når du gennemfører en opgave. <a href=\"https://habitica.fandom.com/wiki/Drops\">Lær mere om drop-systemet.</a>",
"dropsExplanationEggs": "Brug Ædelsten for hurtigere at få æg, hvis du ikke vil vente på at få standard-æg som drops, eller gentage Quests for at vinde Quest-æg. <a href=\"https://habitica.fandom.com/wiki/Drops\">Læs mere om dropsystemet her.</a>",
"premiumPotionNoDropExplanation": "Magiske udrugningseliksirer kan ikke blive brugt på æg, der er modtaget fra quests. Den eneste måde at få en magisk udrugningseliksir på, er ved at købe dem nedenfor, ikke fra tilfældige drop.",
"beastMasterProgress": "Dyretæmmerfremskridt",
"beastAchievement": "Du har opnået \"Dyretæmmer\"-præstationen ved at samle alle kæledyr!",

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