mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
Merge branch 'api-v3' of github.com:HabitRPG/habitrpg into api-v3
This commit is contained in:
@@ -1,178 +0,0 @@
|
||||
{
|
||||
"missingAuthHeaders": "Missing authentication headers.",
|
||||
"missingAuthParams": "Missing authentication parameters.",
|
||||
"missingUsernameEmail": "Missing username or email.",
|
||||
"missingEmail": "Missing email.",
|
||||
"missingUsername": "Missing username.",
|
||||
"missingPassword": "Missing password.",
|
||||
"missingNewPassword": "Missing newPassword.",
|
||||
"wrongPassword": "Wrong password.",
|
||||
"notAnEmail": "Invalid email address.",
|
||||
"emailTaken": "Email already taken.",
|
||||
"newEmailRequired": "The newEmail body parameter is required.",
|
||||
"usernameTaken": "Username already taken.",
|
||||
"passwordConfirmationMatch": "Password confirmation doesn't match password.",
|
||||
"invalidLoginCredentials": "Incorrect username / email and / or password.",
|
||||
"passwordReset": "If we have your email on file, your password reset link has been sent to your email.",
|
||||
"passwordResetEmailSubject": "Password Reset for Habitica",
|
||||
"passwordResetEmailText": "Password for <%= username %> has been reset to <%= newPassword %> . Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them. Log in at <%= baseUrl %>. After you have logged in, head to <%= baseUrl %>/#/options/settings/settings and change your password.",
|
||||
"passwordResetEmailHtml": "Password for <strong><%= username %></strong> has been reset to <strong><%= newPassword %></strong>.<br /><br />Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them.<br /><br />Log in at <%= baseUrl %>. After you have logged in, head to <%= baseUrl %>/#/options/settings/settings and change your password.",
|
||||
"invalidLoginCredentialsLong": "Uh-oh - your username or password is incorrect.\n- Make sure your username or email is typed correctly.\n- You may have signed up with Facebook, not email. Double-check by trying Facebook login.\n- If you forgot your password, click \"Forgot Password\".",
|
||||
"invalidCredentials": "User not found with given auth credentials.",
|
||||
"accountSuspended": "Account has been suspended, please contact leslie@habitica.com with your UUID \"<%= userId %>\" for assistance.",
|
||||
"onlyFbSupported": "Only Facebook supported currently.",
|
||||
"cantDetachFb": "Account lacks another authentication method, can't detach Facebook.",
|
||||
"onlySocialAttachLocal": "Local auth can only be added to a social account.",
|
||||
"invalidReqParams": "Invalid request parameters.",
|
||||
"memberIdRequired": "\"member\" must be a valid UUID.",
|
||||
"heroIdRequired": "\"heroId\" must be a valid UUID.",
|
||||
"taskIdRequired": "\"taskId\" must be a valid UUID.",
|
||||
"taskNotFound": "Task not found.",
|
||||
"invalidTaskType": "Task type must be one of \"habit\", \"daily\", \"todo\", \"reward\".",
|
||||
"cantDeleteChallengeTasks": "A task belonging to a challenge can't be deleted.",
|
||||
"checklistOnlyDailyTodo": "Checklists are supported only on dailies and todos",
|
||||
"checklistItemNotFound": "No checklist item was found with given id.",
|
||||
"itemIdRequired": "\"itemId\" must be a valid UUID.",
|
||||
"tagNotFound": "No tag item was found with given id.",
|
||||
"tagIdRequired": "\"tagId\" must be a valid UUID corresponding to a tag belonging to the user.",
|
||||
"positionRequired": "\"position\" is required and must be a number.",
|
||||
"cantMoveCompletedTodo": "Can't move a completed todo.",
|
||||
"directionUpDown": "\"direction\" is required and must be 'up' or 'down'",
|
||||
"alreadyTagged": "The task is already tagged with given tag.",
|
||||
"groupIdRequired": "\"groupId\" must be a valid UUID",
|
||||
"groupNotFound": "Group not found.",
|
||||
"groupTypesRequired": "You must supply a valid \"type\" query string.",
|
||||
"questLeaderCannotLeaveGroup": "You cannot leave your party when you have started a quest. Abort the quest first.",
|
||||
"cannotLeaveWhileActiveQuest": "You cannot leave party during an active quest. Please leave the quest first.",
|
||||
"onlyLeaderCanRemoveMember": "Only group leader can remove a member!",
|
||||
"memberCannotRemoveYourself": "You cannot remove yourself!",
|
||||
"groupMemberNotFound": "User not found among group's members",
|
||||
"challengeMemberNotFound": "User not found among challenge's members",
|
||||
"mustBeGroupMember": "Must be member of the group.",
|
||||
"keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"",
|
||||
"keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"",
|
||||
"canOnlyInviteEmailUuid": "Can only invite using uuids or emails.",
|
||||
"inviteMissingEmail": "Missing email address in invite.",
|
||||
"onlyGroupLeaderChal": "Only the group leader can create challenges",
|
||||
"tavChalsMinPrize": "Prize must be at least 1 Gem for Tavern challenges.",
|
||||
"cantAfford": "You can't afford this prize. Purchase more gems or lower the prize amount.",
|
||||
"challengeIdRequired": "\"challengeId\" must be a valid UUID.",
|
||||
"winnerIdRequired": "\"winnerId\" must be a valid UUID.",
|
||||
"challengeNotFound": "Challenge not found.",
|
||||
"onlyLeaderDeleteChal": "Only the challenge leader can delete it.",
|
||||
"onlyLeaderUpdateChal": "Only the challenge leader can update it.",
|
||||
"winnerNotFound": "Winner with id \"<%= userId %>\" not found or not part of the challenge.",
|
||||
"noCompletedTodosChallenge": "\"includeComepletedTodos\" is not supported when fetching a challenge tasks.",
|
||||
"userTasksNoChallengeId": "When \"tasksOwner\" is \"user\" \"challengeId\" can't be passed.",
|
||||
"onlyChalLeaderEditTasks": "Tasks belonging to a challenge can only be edited by the leader.",
|
||||
"userAlreadyInChallenge": "User is already participating in this challenge.",
|
||||
"invalidTasksOwner": "\"tasksOwner\" must be \"user\" or \"challenge\".",
|
||||
"partyMustbePrivate": "Parties must be private",
|
||||
"userAlreadyInGroup": "User already in that group.",
|
||||
"userAlreadyInvitedToGroup": "User already invited to that group.",
|
||||
"userAlreadyPendingInvitation": "User already pending invitation.",
|
||||
"userAlreadyInAParty": "User already in a party.",
|
||||
"userWithIDNotFound": "User with id \"<%= userId %>\" not found.",
|
||||
"userHasNoLocalRegistration": "User does not have a local registration (username, email, password).",
|
||||
"uuidsMustBeAnArray": "UUIDs invites must be a an Array.",
|
||||
"emailsMustBeAnArray": "Email invites must be a an Array.",
|
||||
"canOnlyInviteMaxInvites": "You can only invite \"<%= maxInvites %>\" at a time",
|
||||
"cantOnlyUnlinkChalTask": "Only broken challenges tasks can be unlinked.",
|
||||
"onlyCreatorOrAdminCanDeleteChat": "Not authorized to delete this message!",
|
||||
"questInviteNotFound": "No quest invitation found.",
|
||||
"guildQuestsNotSupported": "Guilds cannot be invited on quests.",
|
||||
"questNotFound": "Quest \"<%= key %>\" not found.",
|
||||
"questNotOwned": "You don't own that quest scroll.",
|
||||
"questNotGoldPurchasable": "Quest \"<%= key %>\" is not a Gold-purchasable quest.",
|
||||
"questLevelTooHigh": "You must be level <%= level %> to begin this quest.",
|
||||
"questAlreadyUnderway": "Your party is already on a quest. Try again when the current quest has ended.",
|
||||
"questAlreadyAccepted": "You already accepted the quest invitation.",
|
||||
"noActiveQuestToLeave": "No active quest to leave",
|
||||
"questLeaderCannotLeaveQuest": "Quest leader cannot leave quest",
|
||||
"notPartOfQuest": "You are not part of the quest",
|
||||
"noActiveQuestToAbort": "There is no active quest to abort.",
|
||||
"onlyLeaderAbortQuest": "Only the group or quest leader can abort a quest.",
|
||||
"questAlreadyRejected": "You already rejected the quest invitation.",
|
||||
"cantCancelActiveQuest": "You can not cancel an active quest, use the abort functionality.",
|
||||
"onlyLeaderCancelQuest": "Only the group or quest leader can cancel the quest.",
|
||||
"questInvitationDoesNotExist": "No quest invitation has been sent out yet.",
|
||||
"questNotPending": "There is no quest to start.",
|
||||
"questOrGroupLeaderOnlyStartQuest": "Only the quest leader or group leader can force start the quest",
|
||||
"noAdminAccess": "You don't have admin access.",
|
||||
"pageMustBeNumber": "req.query.page must be a number",
|
||||
"missingUnsubscriptionCode": "Missing unsubscription code.",
|
||||
"missingSubscription": "User does not have a plan subscription",
|
||||
"missingSubscriptionCode": "Missing subscription code. Possible values: basic_earned, basic_3mo, basic_6mo, google_6mo, basic_12mo.",
|
||||
"userNotFound": "User not found.",
|
||||
"spellNotFound": "Spell \"<%= spellId %>\" not found.",
|
||||
"partyNotFound": "Party not found",
|
||||
"targetIdUUID": "\"targetId\" must be a valid UUID.",
|
||||
"invalidUUID": "UUID must be valid",
|
||||
"challengeTasksNoCast": "Casting a spell on challenge tasks is not supported.",
|
||||
"spellNotOwned": "You don't own this spell.",
|
||||
"spellLevelTooHigh": "You must be level <%= level %> to use this spell.",
|
||||
"invalidAttribute": "\"<%= attr %>\" is not a valid attribute.",
|
||||
"notEnoughAttrPoints": "You don't have enough attribute points.",
|
||||
"missingKeyParam": "\"req.params.key\" is required.",
|
||||
"mysterySetNotFound": "Mystery set not found, or set already owned.",
|
||||
"itemNotFound": "Item \"<%= key %>\" not found.",
|
||||
"cannotBuyItem": "You can't buy this item.",
|
||||
"missingTypeKeyEquip": "\"key\" and \"type\" are required parameters.",
|
||||
"missingPetFoodFeed": "\"pet\" and \"food\" are required parameters.",
|
||||
"invalidPetName": "Invalid pet name supplied.",
|
||||
"missingEggHatchingPotionHatch": "\"egg\" and \"hatchingPotion\" are required parameters.",
|
||||
"invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.",
|
||||
"cannotDeleteActiveAccount": "You have an active subscription, cancel your plan before deleting your account.",
|
||||
"messageRequired": "A message is required.",
|
||||
"toUserIDRequired": "A User ID is required",
|
||||
"gemAmountRequired": "A number of gems is required",
|
||||
"notAuthorizedToSendMessageToThisUser": "Can't send message to this user.",
|
||||
"privateMessageGiftIntro": "Hello <%= receiverName %>, <%= senderName %> has sent you ",
|
||||
"privateMessageGiftGemsMessage": "<%= gemAmount %> gems! ",
|
||||
"privateMessageGiftSubscriptionMessage": "<%= numberOfMonths %> months of subscription! ",
|
||||
"cannotSendGemsToYourself": "Cannot send gems to yourself. Try a subscription instead.",
|
||||
"badAmountOfGemsToSend": "Amount must be within 1 and your current number of gems.",
|
||||
"mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.",
|
||||
"typeRequired": "Type is required",
|
||||
"keyRequired": "Key is required",
|
||||
"mustSubscribeToPurchaseGems": "Must subscribe to purchase gems with GP",
|
||||
"reachedGoldToGemCap": "You've reached the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap will reset within the first three days of next month.",
|
||||
"notAccteptedType": "Type must be in [eggs, hatchingPotions, food, quests, gear]",
|
||||
"contentKeyNotFound": "Key not found for Content <%= type %>",
|
||||
"plusOneGem": "+1 Gem",
|
||||
"notAllowedHourglass": "Pet/Mount not available for purchase with Mystic Hourglass.",
|
||||
"readCard": "<%= cardType %> has been read",
|
||||
"cardTypeRequired": "Card type required",
|
||||
"cardTypeNotAllowed": "Unkown card type.",
|
||||
"mysteryItemIsEmpty": "Mystery items are empty",
|
||||
"mysteryItemOpened": "Mystery item opened.",
|
||||
"invalidCoupon": "Invalid coupon code.",
|
||||
"couponUsed": "Coupon code already used.",
|
||||
"noSudoAccess": "You don't have sudo access.",
|
||||
"couponCodeRequired": "The coupon code is required.",
|
||||
"eventRequired": "\"req.params.event\" is required.",
|
||||
"countRequired": "\"req.query.count\" is required.",
|
||||
"invalidUrl": "invalid url",
|
||||
"invalidEnabled": "the \"enabled\" parameter should be a boolean",
|
||||
"petsReleased": "Pets released.",
|
||||
"mountsAndPetsReleased": "Mounts and pets released",
|
||||
"mountsReleased": "Mounts released",
|
||||
"typeNotSellable": "Type is not sellable. Must be one of the following <%= acceptedTypes %>",
|
||||
"userItemsKeyNotFound": "Key not found for user.items <%= type %>",
|
||||
"pathRequired": "Path string is required",
|
||||
"unlocked": "Items have been unlocked",
|
||||
"alreadyUnlocked": "Full set already unlocked.",
|
||||
"alreadyUnlockedPart": "Full set already partially unlocked.",
|
||||
"cannotRevive": "Cannot revive if not dead",
|
||||
"rebirthComplete": "You have been reborn!",
|
||||
"petNotOwned": "You do not own this pet.",
|
||||
"regIdRequired": "RegId is required",
|
||||
"pushDeviceAdded": "Push device added successfully",
|
||||
"pushDeviceAlreadyAdded": "The user already has the push device",
|
||||
"lvl10ChangeClass": "To change class you must be at least level 10.",
|
||||
"equipmentAlreadyOwned": "You already own that piece of equipment",
|
||||
"pmsMarkedRead": "Your private messages have been marked as read",
|
||||
"paymentNotSuccessful": "The payment was not successful",
|
||||
"planNotActive": "The plan hasn't activated yet (due to a PayPal bug). It will begin <%= nextBillingDate %>, after which you can cancel to retain your full benefits",
|
||||
"cancelingSubscription": "Canceling the subscription"
|
||||
}
|
||||
@@ -63,5 +63,20 @@
|
||||
"congratulations": "Congratulations!",
|
||||
"hurray": "Hurray!",
|
||||
"noChallengeOwner": "no owner",
|
||||
"noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account."
|
||||
"noChallengeOwnerPopover": "This challenge does not have an owner because the person who created the challenge deleted their account.",
|
||||
"challengeMemberNotFound": "User not found among challenge's members",
|
||||
"onlyGroupLeaderChal": "Only the group leader can create challenges",
|
||||
"tavChalsMinPrize": "Prize must be at least 1 Gem for Tavern challenges.",
|
||||
"cantAfford": "You can't afford this prize. Purchase more gems or lower the prize amount.",
|
||||
"challengeIdRequired": "\"challengeId\" must be a valid UUID.",
|
||||
"winnerIdRequired": "\"winnerId\" must be a valid UUID.",
|
||||
"challengeNotFound": "Challenge not found.",
|
||||
"onlyLeaderDeleteChal": "Only the challenge leader can delete it.",
|
||||
"onlyLeaderUpdateChal": "Only the challenge leader can update it.",
|
||||
"winnerNotFound": "Winner with id \"<%= userId %>\" not found or not part of the challenge.",
|
||||
"noCompletedTodosChallenge": "\"includeComepletedTodos\" is not supported when fetching a challenge tasks.",
|
||||
"userTasksNoChallengeId": "When \"tasksOwner\" is \"user\" \"challengeId\" can't be passed.",
|
||||
"onlyChalLeaderEditTasks": "Tasks belonging to a challenge can only be edited by the leader.",
|
||||
"userAlreadyInChallenge": "User is already participating in this challenge.",
|
||||
"cantOnlyUnlinkChalTask": "Only broken challenges tasks can be unlinked."
|
||||
}
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
"mage": "Mage",
|
||||
"mystery": "Mystery",
|
||||
"changeClass": "Change Class, Refund Attribute Points",
|
||||
"lvl10ChangeClass": "To change class you must be at least level 10.",
|
||||
"levelPopover": "Each level earns you one point to assign to an attribute of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options.",
|
||||
"unallocated": "Unallocated Attribute Points",
|
||||
"haveUnallocated": "You have <%= points %> unallocated Attribute Point(s)",
|
||||
@@ -165,5 +166,7 @@
|
||||
"int": "INT",
|
||||
"showQuickAllocation": "Show stat allocation",
|
||||
"hideQuickAllocation": "Hide stat allocation",
|
||||
"quickAllocationLevelPopover": "Each level earns you one point to assign to an attribute of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User -> Stats."
|
||||
"quickAllocationLevelPopover": "Each level earns you one point to assign to an attribute of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User -> Stats.",
|
||||
"invalidAttribute": "\"<%= attr %>\" is not a valid attribute.",
|
||||
"notEnoughAttrPoints": "You don't have enough attribute points."
|
||||
}
|
||||
|
||||
@@ -223,5 +223,4 @@
|
||||
"foodSaddleNotes": "Instantly raises one of your pets into a mount.",
|
||||
|
||||
"foodNotes": "Feed this to a pet and it may grow into a sturdy steed."
|
||||
|
||||
}
|
||||
|
||||
@@ -35,8 +35,12 @@
|
||||
"hallContributors": "Hall of Contributors",
|
||||
"hallPatrons": "Hall of Patrons",
|
||||
"rewardUser": "Reward User",
|
||||
"UUID": "UUID",
|
||||
"UUID": "User ID",
|
||||
"loadUser": "Load User",
|
||||
"noAdminAccess": "You don't have admin access.",
|
||||
"pageMustBeNumber": "req.query.page must be a number",
|
||||
"userNotFound": "User not found.",
|
||||
"invalidUUID": "UUID must be valid",
|
||||
"title": "Title",
|
||||
"moreDetails": "More details (1-7)",
|
||||
"moreDetails2": "more details (8-9)",
|
||||
|
||||
@@ -12,6 +12,6 @@
|
||||
"losingHealthQuickly": "Losing Health quickly?",
|
||||
"lowHealthTips3": "Incomplete Dailies hurt you overnight, so be careful not to add too many at first!",
|
||||
"lowHealthTips4": "If a Daily isn't due on a certain day, you can disable it by clicking the pencil icon.",
|
||||
"goodLuck": "Good luck!"
|
||||
"goodLuck": "Good luck!",
|
||||
"cannotRevive": "Cannot revive if not dead"
|
||||
}
|
||||
|
||||
|
||||
@@ -225,5 +225,32 @@
|
||||
"altAttrWebstorm": "WebStorm",
|
||||
"altAttrGithub": "GitHub",
|
||||
"altAttrTrello": "Trello",
|
||||
"altAttrSlack": "Slack"
|
||||
"altAttrSlack": "Slack",
|
||||
"missingAuthHeaders": "Missing authentication headers.",
|
||||
"missingAuthParams": "Missing authentication parameters.",
|
||||
"missingUsernameEmail": "Missing username or email.",
|
||||
"missingEmail": "Missing email.",
|
||||
"missingUsername": "Missing username.",
|
||||
"missingPassword": "Missing password.",
|
||||
"missingNewPassword": "Missing new password.",
|
||||
"wrongPassword": "Wrong password.",
|
||||
"notAnEmail": "Invalid email address.",
|
||||
"emailTaken": "Email address is already used in an account.",
|
||||
"newEmailRequired": "Missing new email address.",
|
||||
"usernameTaken": "Username already taken.",
|
||||
"passwordConfirmationMatch": "Password confirmation doesn't match password.",
|
||||
"invalidLoginCredentials": "Incorrect username and/or email and/or password.",
|
||||
"passwordReset": "If we have your email on file, your password reset link has been sent to your email.",
|
||||
"passwordResetEmailSubject": "Password Reset for Habitica",
|
||||
"passwordResetEmailText": "Password for <%= username %> has been reset to <%= newPassword %> . Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them. Log in at <%= baseUrl %>. After you have logged in, head to <%= baseUrl %>/#/options/settings/settings and change your password.",
|
||||
"passwordResetEmailHtml": "Password for <strong><%= username %></strong> has been reset to <strong><%= newPassword %></strong>.<br /><br />Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them.<br /><br />Log in at <%= baseUrl %>. After you have logged in, head to <%= baseUrl %>/#/options/settings/settings and change your password.",
|
||||
"invalidLoginCredentialsLong": "Uh-oh - your username or password is incorrect.\n- Make sure your username or email is typed correctly.\n- You may have signed up with Facebook, not email. Double-check by trying Facebook login.\n- If you forgot your password, click \"Forgot Password\".",
|
||||
"invalidCredentials": "There is no account that uses those credentials.",
|
||||
"accountSuspended": "Account has been suspended, please contact leslie@habitica.com with your User ID \"<%= userId %>\" for assistance.",
|
||||
"onlyFbSupported": "Only Facebook is supported currently.",
|
||||
"cantDetachFb": "Account lacks another authentication method, can't detach Facebook.",
|
||||
"onlySocialAttachLocal": "Local authentication can be added to only a social account.",
|
||||
"invalidReqParams": "Invalid request parameters.",
|
||||
"memberIdRequired": "\"member\" must be a valid UUID.",
|
||||
"heroIdRequired": "\"heroId\" must be a valid UUID."
|
||||
}
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
"send": "Send",
|
||||
"messageSentAlert": "Message sent",
|
||||
"pmHeading": "Private message to <%= name %>",
|
||||
"pmsMarkedRead": "Your private messages have been marked as read",
|
||||
"clearAll": "Delete All Messages",
|
||||
"confirmDeleteAllMessages": "Are you sure you want to delete all messages in your inbox? Other users will still see messages you have sent to them.",
|
||||
"optOutPopover": "Don't like private messages? Click to completely opt out",
|
||||
@@ -99,6 +100,15 @@
|
||||
"unblock": "Un-block",
|
||||
"pm-reply": "Send a reply",
|
||||
"inbox": "Inbox",
|
||||
"messageRequired": "A message is required.",
|
||||
"toUserIDRequired": "A User ID is required",
|
||||
"gemAmountRequired": "A number of gems is required",
|
||||
"notAuthorizedToSendMessageToThisUser": "Can't send message to this user.",
|
||||
"privateMessageGiftIntro": "Hello <%= receiverName %>, <%= senderName %> has sent you ",
|
||||
"privateMessageGiftGemsMessage": "<%= gemAmount %> gems! ",
|
||||
"privateMessageGiftSubscriptionMessage": "<%= numberOfMonths %> months of subscription! ",
|
||||
"cannotSendGemsToYourself": "Cannot send gems to yourself. Try a subscription instead.",
|
||||
"badAmountOfGemsToSend": "Amount must be within 1 and your current number of gems.",
|
||||
"abuseFlag": "Report violation of Community Guidelines",
|
||||
"abuseFlagModalHeading": "Report <%= name %> for violation?",
|
||||
"abuseFlagModalBody": "Are you sure you want to report this post? You should ONLY report a post that violates the <%= firstLinkStart %>Community Guidelines<%= linkEnd %> and/or <%= secondLinkStart %>Terms of Service<%= linkEnd %>. Inappropriately reporting a post is a violation of the Community Guidelines and may give you an infraction. Appropriate reasons to flag a post include but are not limited to:<br><br><ul style='margin-left: 10px;'><li>swearing, religous oaths</li><li>bigotry, slurs</li><li>adult topics</li><li>violence, including as a joke</li><li>spam, nonsensical messages</li></ul>",
|
||||
@@ -151,6 +161,29 @@
|
||||
"partyUpName": "Party Up",
|
||||
"partyOnName": "Party On",
|
||||
"partyUpAchievement": "Joined a Party with another person! Have fun battling monsters and supporting each other.",
|
||||
"partyOnAchievement": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!"
|
||||
"partyOnAchievement": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!",
|
||||
"groupIdRequired": "\"groupId\" must be a valid UUID",
|
||||
"groupNotFound": "Group not found.",
|
||||
"groupTypesRequired": "You must supply a valid \"type\" query string.",
|
||||
"questLeaderCannotLeaveGroup": "You cannot leave your party when you have started a quest. Abort the quest first.",
|
||||
"cannotLeaveWhileActiveQuest": "You cannot leave party during an active quest. Please leave the quest first.",
|
||||
"onlyLeaderCanRemoveMember": "Only group leader can remove a member!",
|
||||
"memberCannotRemoveYourself": "You cannot remove yourself!",
|
||||
"groupMemberNotFound": "User not found among group's members",
|
||||
"mustBeGroupMember": "Must be member of the group.",
|
||||
"keepOrRemoveAll": "req.query.keep must be either \"keep-all\" or \"remove-all\"",
|
||||
"keepOrRemove": "req.query.keep must be either \"keep\" or \"remove\"",
|
||||
"canOnlyInviteEmailUuid": "Can only invite using uuids or emails.",
|
||||
"inviteMissingEmail": "Missing email address in invite.",
|
||||
"partyMustbePrivate": "Parties must be private",
|
||||
"userAlreadyInGroup": "User already in that group.",
|
||||
"userAlreadyInvitedToGroup": "User already invited to that group.",
|
||||
"userAlreadyPendingInvitation": "User already pending invitation.",
|
||||
"userAlreadyInAParty": "User already in a party.",
|
||||
"userWithIDNotFound": "User with id \"<%= userId %>\" not found.",
|
||||
"userHasNoLocalRegistration": "User does not have a local registration (username, email, password).",
|
||||
"uuidsMustBeAnArray": "UUIDs invites must be a an Array.",
|
||||
"emailsMustBeAnArray": "Email invites must be a an Array.",
|
||||
"canOnlyInviteMaxInvites": "You can only invite \"<%= maxInvites %>\" at a time",
|
||||
"onlyCreatorOrAdminCanDeleteChat": "Not authorized to delete this message!"
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,28 @@
|
||||
"ian": "Ian",
|
||||
"ianText": "Welcome to the Quest Shop! Here you can use Quest Scrolls to battle monsters with your friends. Be sure to check out our fine array of Quest Scrolls for purchase on the right!",
|
||||
"ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...",
|
||||
|
||||
"missingKeyParam": "\"req.params.key\" is required.",
|
||||
"itemNotFound": "Item \"<%= key %>\" not found.",
|
||||
"cannotBuyItem": "You can't buy this item.",
|
||||
"missingTypeKeyEquip": "\"key\" and \"type\" are required parameters.",
|
||||
"missingPetFoodFeed": "\"pet\" and \"food\" are required parameters.",
|
||||
"invalidPetName": "Invalid pet name supplied.",
|
||||
"missingEggHatchingPotionHatch": "\"egg\" and \"hatchingPotion\" are required parameters.",
|
||||
"invalidTypeEquip": "\"type\" must be one of 'equipped', 'pet', 'mount', 'costume'.",
|
||||
"mustPurchaseToSet": "Must purchase <%= val %> to set it on <%= key %>.",
|
||||
"typeRequired": "Type is required",
|
||||
"keyRequired": "Key is required",
|
||||
"notAccteptedType": "Type must be in [eggs, hatchingPotions, food, quests, gear]",
|
||||
"contentKeyNotFound": "Key not found for Content <%= type %>",
|
||||
"plusOneGem": "+1 Gem",
|
||||
"typeNotSellable": "Type is not sellable. Must be one of the following <%= acceptedTypes %>",
|
||||
"userItemsKeyNotFound": "Key not found for user.items <%= type %>",
|
||||
"pathRequired": "Path string is required",
|
||||
"unlocked": "Items have been unlocked",
|
||||
"alreadyUnlocked": "Full set already unlocked.",
|
||||
"alreadyUnlockedPart": "Full set already partially unlocked.",
|
||||
|
||||
"USD": "(USD)",
|
||||
"newStuff": "New Stuff",
|
||||
"cool": "Tell Me Later",
|
||||
@@ -67,6 +89,7 @@
|
||||
"tourPetsPage": "This is the Stable! After level 3, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 3, and they'll grow into powerful mounts.",
|
||||
"tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. (Pets, mounts, and food are available after level 3.) Click a mount to saddle up!",
|
||||
"tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your stats. If you want to show different Equipment on your avatar without changing your stats, click \"Enable Costume.\"",
|
||||
"equipmentAlreadyOwned": "You already own that piece of equipment",
|
||||
|
||||
"tourOkay": "Okay!",
|
||||
"tourAwesome": "Awesome!",
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
"hatchedPet": "You hatched a <%= potion %> <%= egg %>!",
|
||||
"displayNow": "Display Now",
|
||||
"displayLater": "Display Later",
|
||||
"petNotOwned": "You do not own this pet.",
|
||||
"earnedCompanion": "With all your productivity, you've earned a new companion. Feed it to make it grow!",
|
||||
"feedPet": "Feed <%= article %><%= text %> to your <%= name %>?",
|
||||
"useSaddle": "Saddle <%= pet %>?",
|
||||
@@ -83,5 +84,8 @@
|
||||
"petKeyBoth": "Release Both",
|
||||
"confirmPetKey": "Are you sure?",
|
||||
"petKeyNeverMind": "Not Yet",
|
||||
"petsReleased": "Pets released.",
|
||||
"mountsAndPetsReleased": "Mounts and pets released",
|
||||
"mountsReleased": "Mounts released",
|
||||
"gemsEach": "gems each"
|
||||
}
|
||||
|
||||
@@ -79,5 +79,24 @@
|
||||
"getMoreQuests": "Get more quests",
|
||||
"unlockedAQuest": "You unlocked a quest!",
|
||||
"leveledUpReceivedQuest": "You leveled up to <strong>Level <%= level %></strong> and received a quest scroll!",
|
||||
"questInvitationDoesNotExist": "No quest invitation has been sent out yet."
|
||||
"questInvitationDoesNotExist": "No quest invitation has been sent out yet.",
|
||||
"questInviteNotFound": "No quest invitation found.",
|
||||
"guildQuestsNotSupported": "Guilds cannot be invited on quests.",
|
||||
"questNotFound": "Quest \"<%= key %>\" not found.",
|
||||
"questNotOwned": "You don't own that quest scroll.",
|
||||
"questNotGoldPurchasable": "Quest \"<%= key %>\" is not a Gold-purchasable quest.",
|
||||
"questLevelTooHigh": "You must be level <%= level %> to begin this quest.",
|
||||
"questAlreadyUnderway": "Your party is already on a quest. Try again when the current quest has ended.",
|
||||
"questAlreadyAccepted": "You already accepted the quest invitation.",
|
||||
"noActiveQuestToLeave": "No active quest to leave",
|
||||
"questLeaderCannotLeaveQuest": "Quest leader cannot leave quest",
|
||||
"notPartOfQuest": "You are not part of the quest",
|
||||
"noActiveQuestToAbort": "There is no active quest to abort.",
|
||||
"onlyLeaderAbortQuest": "Only the group or quest leader can abort a quest.",
|
||||
"questAlreadyRejected": "You already rejected the quest invitation.",
|
||||
"cantCancelActiveQuest": "You can not cancel an active quest, use the abort functionality.",
|
||||
"onlyLeaderCancelQuest": "Only the group or quest leader can cancel the quest.",
|
||||
"questInvitationDoesNotExist": "No quest invitation has been sent out yet.",
|
||||
"questNotPending": "There is no quest to start.",
|
||||
"questOrGroupLeaderOnlyStartQuest": "Only the quest leader or group leader can force start the quest"
|
||||
}
|
||||
|
||||
@@ -24,5 +24,6 @@
|
||||
"rebirthPop": "Begin a new character at Level 1 while retaining achievements, collectibles, and tasks with history.",
|
||||
"rebirthName": "Orb of Rebirth",
|
||||
"reborn": "Reborn, max level <%= reLevel %>",
|
||||
"confirmReborn": "Are you sure?"
|
||||
"confirmReborn": "Are you sure?",
|
||||
"rebirthComplete": "You have been reborn!"
|
||||
}
|
||||
|
||||
@@ -148,6 +148,11 @@
|
||||
"webhooks": "Webhooks",
|
||||
"enabled": "Enabled",
|
||||
"webhookURL": "Webhook URL",
|
||||
"invalidUrl": "invalid url",
|
||||
"invalidEnabled": "the \"enabled\" parameter should be a boolean",
|
||||
"regIdRequired": "RegId is required",
|
||||
"pushDeviceAdded": "Push device added successfully",
|
||||
"pushDeviceAlreadyAdded": "The user already has the push device",
|
||||
"add": "Add",
|
||||
"buyGemsGoldCap": "Cap raised to <%= amount %>",
|
||||
"mysticHourglass": "<%= amount %> Mystic Hourglass",
|
||||
|
||||
@@ -65,6 +65,12 @@
|
||||
"spellSpecialSeafoamText": "Seafoam",
|
||||
"spellSpecialSeafoamNotes": "Turn a friend into a sea creature!",
|
||||
"spellSpecialSandText": "Sand",
|
||||
"spellSpecialSandNotes": "Cancel the effects of Seafoam."
|
||||
"spellSpecialSandNotes": "Cancel the effects of Seafoam.",
|
||||
|
||||
"spellNotFound": "Skill \"<%= spellId %>\" not found.",
|
||||
"partyNotFound": "Party not found",
|
||||
"targetIdUUID": "\"targetId\" must be a valid User ID.",
|
||||
"challengeTasksNoCast": "Casting a skill on challenge tasks is not supported.",
|
||||
"spellNotOwned": "You don't own this skill.",
|
||||
"spellLevelTooHigh": "You must be level <%= level %> to use this skill."
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
"subDescription": "Buy Gems with gold, get monthly mystery items, retain progress history, double daily drop-caps, support the devs. Click for more info.",
|
||||
"buyGemsGold": "Buy Gems with Gold",
|
||||
"buyGemsGoldText": "Alexander the Merchant will sell you Gems at a cost of <%= gemCost %> gold per gem. His monthly shipments are initially capped at <%= gemLimit %> Gems per month, but this cap increases by 5 Gems for every three months of consecutive subscription, up to a maximum of 50 Gems per month!",
|
||||
"mustSubscribeToPurchaseGems": "Must subscribe to purchase gems with GP",
|
||||
"reachedGoldToGemCap": "You've reached the Gold=>Gem conversion cap <%= convCap %> for this month. We have this to prevent abuse / farming. The cap will reset within the first three days of next month.",
|
||||
"retainHistory": "Retain additional history entries",
|
||||
"retainHistoryText": "Makes completed To-Dos and task history available for longer.",
|
||||
"doubleDrops": "Daily drop-caps doubled",
|
||||
@@ -29,6 +31,7 @@
|
||||
"manageSub": "Click to manage subscription",
|
||||
"cancelSub": "Cancel Subscription",
|
||||
"canceledSubscription": "Canceled Subscription",
|
||||
"cancelingSubscription": "Canceling the subscription",
|
||||
"adminSub": "Administrator Subscriptions",
|
||||
"morePlans": "More Plans<br>Coming Soon",
|
||||
"organizationSub": "Private Organization",
|
||||
@@ -73,6 +76,9 @@
|
||||
"timeTravelersPopover": "We see you have a Mystic Hourglass, so we will happily travel back in time for you! Please choose the pet, mount, or Mystery Item Set you would like. You can see a list of the past item sets <a href='http://habitica.wikia.com/wiki/Mystery_Item' target='_blank'>here</a>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?",
|
||||
"timeTravelersAlreadyOwned": "Congratulations! You already own everything the Time Travelers currently offer. Thanks for supporting the site!",
|
||||
"mysticHourglassPopover": "A Mystic Hourglass allows you to purchase certain limited-time items, such as monthly Mystery Item Sets and awards from world bosses, from the past!",
|
||||
"mysterySetNotFound": "Mystery set not found, or set already owned.",
|
||||
"mysteryItemIsEmpty": "Mystery items are empty",
|
||||
"mysteryItemOpened": "Mystery item opened.",
|
||||
|
||||
"mysterySet201402": "Winged Messenger Set",
|
||||
"mysterySet201403": "Forest Walker Set",
|
||||
@@ -118,5 +124,21 @@
|
||||
"petsNotAllowedHourglass": "Pet not available for purchase with Mystic Hourglass.",
|
||||
"mountsNotAllowedHourglass": "Mount not available for purchase with Mystic Hourglass.",
|
||||
"hourglassPurchase": "Purchased an item using a Mystic Hourglass!",
|
||||
"hourglassPurchaseSet": "Purchased an item set using a Mystic Hourglass!"
|
||||
"hourglassPurchaseSet": "Purchased an item set using a Mystic Hourglass!",
|
||||
"missingUnsubscriptionCode": "Missing unsubscription code.",
|
||||
"missingSubscription": "User does not have a plan subscription",
|
||||
"missingSubscriptionCode": "Missing subscription code. Possible values: basic_earned, basic_3mo, basic_6mo, google_6mo, basic_12mo.",
|
||||
"cannotDeleteActiveAccount": "You have an active subscription, cancel your plan before deleting your account.",
|
||||
"paymentNotSuccessful": "The payment was not successful",
|
||||
"planNotActive": "The plan hasn't activated yet (due to a PayPal bug). It will begin <%= nextBillingDate %>, after which you can cancel to retain your full benefits",
|
||||
"notAllowedHourglass": "Pet/Mount not available for purchase with Mystic Hourglass.",
|
||||
"readCard": "<%= cardType %> has been read",
|
||||
"cardTypeRequired": "Card type required",
|
||||
"cardTypeNotAllowed": "Unkown card type.",
|
||||
"invalidCoupon": "Invalid coupon code.",
|
||||
"couponUsed": "Coupon code already used.",
|
||||
"noSudoAccess": "You don't have sudo access.",
|
||||
"couponCodeRequired": "The coupon code is required.",
|
||||
"eventRequired": "\"req.params.event\" is required.",
|
||||
"countRequired": "\"req.query.count\" is required."
|
||||
}
|
||||
|
||||
@@ -113,5 +113,18 @@
|
||||
"rewardHelp2": "Equipment affects your stats (<%= linkStart %>Avatar > Stats<%= linkEnd %>).",
|
||||
"rewardHelp3": "Special equipment will appear here during World Events.",
|
||||
"rewardHelp4": "Don't be afraid to set custom Rewards! Check out <a href='http://habitica.wikia.com/wiki/Sample_Custom_Rewards' target='_blank'>some samples here</a>.",
|
||||
"clickForHelp": "Click for help"
|
||||
"clickForHelp": "Click for help",
|
||||
"taskIdRequired": "\"taskId\" must be a valid UUID.",
|
||||
"taskNotFound": "Task not found.",
|
||||
"invalidTaskType": "Task type must be one of \"habit\", \"daily\", \"todo\", \"reward\".",
|
||||
"cantDeleteChallengeTasks": "A task belonging to a challenge can't be deleted.",
|
||||
"checklistOnlyDailyTodo": "Checklists are supported only on dailies and todos",
|
||||
"checklistItemNotFound": "No checklist item was found with given id.",
|
||||
"itemIdRequired": "\"itemId\" must be a valid UUID.",
|
||||
"tagNotFound": "No tag item was found with given id.",
|
||||
"tagIdRequired": "\"tagId\" must be a valid UUID corresponding to a tag belonging to the user.",
|
||||
"positionRequired": "\"position\" is required and must be a number.",
|
||||
"cantMoveCompletedTodo": "Can't move a completed todo.",
|
||||
"directionUpDown": "\"direction\" is required and must be 'up' or 'down'",
|
||||
"alreadyTagged": "The task is already tagged with given tag."
|
||||
}
|
||||
|
||||
@@ -16,13 +16,55 @@ describe('GET /tasks/user', () => {
|
||||
});
|
||||
|
||||
it('returns only a type of user\'s tasks if req.query.type is specified', async () => {
|
||||
let createdTasks = await user.post('/tasks/user', [{text: 'test habit', type: 'habit'}, {text: 'test todo', type: 'todo'}]);
|
||||
let tasks = await user.get('/tasks/user?type=habits');
|
||||
expect(tasks.length).to.equal(1);
|
||||
expect(tasks[0]._id).to.equal(createdTasks[0]._id);
|
||||
let createdTasks = await user.post('/tasks/user', [
|
||||
{text: 'test habit', type: 'habit'},
|
||||
{text: 'test daily', type: 'daily'},
|
||||
{text: 'test reward', type: 'reward'},
|
||||
{text: 'test todo', type: 'todo'},
|
||||
]);
|
||||
let habits = await user.get('/tasks/user?type=habits');
|
||||
let dailys = await user.get('/tasks/user?type=dailys');
|
||||
let rewards = await user.get('/tasks/user?type=rewards');
|
||||
|
||||
expect(habits.length).to.be.at.least(1);
|
||||
expect(habits[0]._id).to.equal(createdTasks[0]._id);
|
||||
expect(dailys.length).to.be.at.least(1);
|
||||
expect(dailys[0]._id).to.equal(createdTasks[1]._id);
|
||||
expect(rewards.length).to.be.at.least(1);
|
||||
expect(rewards[0]._id).to.equal(createdTasks[2]._id);
|
||||
});
|
||||
|
||||
it('returns completed todos sorted by reverse completion date if req.query.type === "completeTodos"', async () => {
|
||||
it('returns uncompleted todos if req.query.type is "todos"', async () => {
|
||||
let existingTodos = await user.get('/tasks/user?type=todos');
|
||||
|
||||
// populate user with other task types
|
||||
await user.post('/tasks/user', [
|
||||
{text: 'daily', type: 'daily'},
|
||||
{text: 'reward', type: 'reward'},
|
||||
{text: 'habit', type: 'habit'},
|
||||
]);
|
||||
|
||||
let newUncompletedTodos = await user.post('/tasks/user', [
|
||||
{text: 'test todo 1', type: 'todo'},
|
||||
{text: 'test todo 2', type: 'todo'},
|
||||
]);
|
||||
let todoToBeCompleted = await user.post('/tasks/user', {
|
||||
text: 'wll be completed todo', type: 'todo',
|
||||
});
|
||||
|
||||
await user.post(`/tasks/${todoToBeCompleted._id}/score/up`);
|
||||
|
||||
let uncompletedTodos = [...existingTodos, ...newUncompletedTodos];
|
||||
|
||||
let todos = await user.get('/tasks/user?type=todos');
|
||||
|
||||
expect(todos.length).to.be.gte(2);
|
||||
expect(todos.length).to.eql(uncompletedTodos.length);
|
||||
expect(todos.every(task => task.type === 'todo'));
|
||||
expect(todos.every(task => task.completed === false));
|
||||
});
|
||||
|
||||
it('returns completed todos sorted by reverse completion date if req.query.type is "completeTodos"', async () => {
|
||||
let todo1 = await user.post('/tasks/user', {text: 'todo to complete 1', type: 'todo'});
|
||||
let todo2 = await user.post('/tasks/user', {text: 'todo to complete 2', type: 'todo'});
|
||||
|
||||
|
||||
@@ -121,6 +121,7 @@ async function _getTasks (req, res, user, challenge) {
|
||||
if (type) {
|
||||
if (type === 'todos') {
|
||||
query.completed = false; // Exclude completed todos
|
||||
query.type = 'todo';
|
||||
} else if (type === 'completedTodos') {
|
||||
query = Tasks.Task.find({
|
||||
userId: user._id,
|
||||
|
||||
Reference in New Issue
Block a user