habitica-self-host/website/common/script/content/index.js

645 lines
13 KiB
JavaScript
Raw Normal View History

import defaults from 'lodash/defaults';
import each from 'lodash/each';
import moment from 'moment';
2016-03-03 03:36:27 +00:00
import t from './translation';
2015-11-12 02:32:00 +00:00
import {
CLASSES,
GEAR_TYPES,
ITEM_LIST,
} from './constants';
2016-03-03 03:36:27 +00:00
let api = module.exports;
Achievement list renovation & Achievements API (#7904) * pull apart achievements into different subcategories * achievs previously hidden to others if unachieved are now always shown * achievs previously always hidden if unachieved are now always shown * pull apart ultimate gear achievs * add achiev wrapper mixin * add achiev mixin for simple counts * add achiev mixin for singular/plural achievs * add simpleAchiev mixin and support attributes * always hide potentially unearnable achievs if unearned * contributor achiev now uses string interpolation for readMore link * transition to basic achiev grid layout * fix npc achievement img bug introduced in c90f7e2 * move surveys and contributor achievs into special section so it is never empty * double size of achievs in achievs grid * achievs in grid are muted if unachieved (includes recompiled sprites) * fix streak notification strings * add counts to achievement badges for applicable achieved achievs * list achievements by api * fix achievement strings in new api * unearned achievs now use dedicated (WIP) 'unearned' badge instead of muted versions of the normal badges * fix & cleanup achievements api * extract generation of the achievements result to a class * clean up achievement counter css using existing classes * simplify exports of new achievementBuilder lib * remove class logic from achievementBuilder lib * move achievs to common, add rebirth achiev logic, misc fixes * replace achievs jade logic with results of api call * fix linting errors * achievs lib now returns achievs object subdivided by type (basic/seasonal/special * add tests for new achievs lib * fix linting errors * update controllers and views for updated achievs lib * add indices to achievements to preserve intended order * move achiev popovers to left * rename achievs lib to achievements * adjust positioning of achieve popovers now that stats and achievs pages are separate * fix: achievements api correctly decides whether to append extra string for master and triadBingo achievs * revert compiled sprites so they don't bog down the PR * pull out achievs api integration tests * parameterize ultimate gear achievements' text string * break out static achievement data from user-specific data * reorg content.achievements to add achiev data in related chunks * cleanup, respond to feedback * improve api documentation * fix merge issues * Helped Habit Grow --> Helped Habitica Grow * achievement popovers are muted if the achiev is unearned * fix singular achievement labels / achievement popover on click * update apidoc for achievements (description, param-type, successExample, error-types) * fix whitespace issues in members.js * move html to a variable * updated json example * fix syntax after merge
2016-12-13 18:48:18 +00:00
import achievements from './achievements';
import eggs from './eggs';
import hatchingPotions from './hatching-potions';
import stable from './stable';
2015-11-16 23:29:13 +00:00
import gear from './gear';
import {
quests,
questsByLevel,
userCanOwnQuestCategories,
} from './quests';
import appearances from './appearance';
2017-10-06 21:06:48 +00:00
import {backgroundsTree, backgroundsFlat} from './appearance/backgrounds';
2016-03-02 11:46:06 +00:00
import spells from './spells';
Thehollidayinn/group plans part 2 (#8262) * Added all ui components back * Added group ui items back and initial group approval directive * Added approval list view with approving functionality * Added notification display for group approvals * Fixed linting issues * Removed expectation from beforeEach * Moved string to locale * Added per use group plan for stripe * Added tests for stripe group plan upgrade * Removed paypal option * Abstract sub blocks. Hit group sub block from user settings page. Added group subscriptin beneifts display * Fixed lint issue * Added pricing and adjusted styles * Moved text to translations * Added group email types * Fixed typo * Fixed group plan abstraction and other style issues * Fixed email unit test * Added type to group plan to filter our group plans * Removed dev protection from routes * Removed hard coding and fixed upgrade plan * Added error when group has subscription and tries to remove * Fixed payment unit tests * Added custom string and moved subscription check up in the logic * Added ability for old leader to delete subscription the created * Allowed old guild leader to edit their group subscription * Fixed linting and tests * Added group sub page to user sub settings * Added approval and group tasks requests back. Hid user group sub on profile * Added group tasks sync after adding to allow for editing * Fixed promise chain when resolving group * Added approvals to group promise chain * Ensured compelted group todos are not delted at cron * Updated copy and other minor styles * Added group field to tags and recolored group tag. * Added chat message when task is claimed * Preventing task scoring when approval is needed * Added approval requested indicator * Updated column with for tasks on group page * Added checklist sync on assign * Added sync for checklist items * Added checkilist sync when task is updated * Added checklist sync remove * Sanatized group tasks when updated * Fixed lint issues * Added instant scoring of approved task * Added task modal * Fixed editing of challenge and group tasks * Added cancel button * Added add new checklist option to update sync * Added remove for checklist * Added checklist update * Added difference check and sync for checklist if there is a diff * Fixed task syncing * Fixed linting issues * Fixed styles and karma tests * Fixed minor style issues * Fixed obj transfer on scope * Fixed broken tests * Added new benefits page * Updated group page styles * Updated benefits page style * Added translations * Prevented sync with empty trask list * Added task title to edit modal * Added new group plans page and upgrade redirect * Added group plans redirect to upgrade * Fixed party home page being hidden and home button click * Fixed dynamic changing of task status and grey popup * Fixed tag editing * Hid benifites information if group has subscription * Added quotes to task name * Fixed issue with assigning multiple users * Added new group plans ctrl * Hid menu from public guilds * Fixed task sync issue * Updated placeholder for assign field * Added correct cost to subscribe details * Hid create, edit, delete task options from non group leaders * Prevented some front end modifications to group tasks * Hid tags option from group original task * Added refresh for approvals and group tasks * Prepend new group tasks * Fix last checklist item sync * Fixed casing issue with tags * Added claimed by message on hover * Prevent user from deleting assigned task * Added single route for group plan sign up and payments * Abstracted stripe payments and added initial tests * Abstracted amazon and added initial tests * Fixed create group message * Update group id check and return group * Updated to use the new returned group * Fixed linting and promise issues * Fixed broken leave test after merge issue * Fixed undefined approval error and editing/deleting challenge tasks * Add pricing to group plans, removed confirmation, and fixed redirect after payment * Updated group plan cost text
2016-12-21 19:45:45 +00:00
import subscriptionBlocks from './subscriptionBlocks';
2016-03-03 03:36:27 +00:00
import faq from './faq';
import timeTravelers from './time-travelers';
Login Incentives (#8230) * feat(incentives): login bennies WIP * feat(content): incentive prize content WIP * fix(content): placeholders pass tests * WIP(content): Bard instrument placeholder * feat(content): Incentives build * chore(sprites): compile and fix some strings * WIP(incentives): quests and backgrounds * fix(quests): correct buy/launch handling * [WIP] Incentives rewarding (#8226) * Added login incentive rewards * Updated incentive rewards * Added incentive modal and updated notification structure * Added analytics to sleeping * Added login incentives to user analytics * Fixed unit tests and ensured that prizes are incremented and not replaced * Updated style of daily login incentive modal * Added rewards modal * Added translations * Added loigin incentive ui elements to profile * Updated login incentives structure and abstracted to common.content * Added dynamic display for login incentives on profile * Added purple potion image * Updated daily login modal * Fixed progress calculation * Added bard gear * Updated login incentive rewards * Fixed styles and text * Added multiple read for notifications * Fixed lint issues * Fixed styles and added 50 limit * Updated quest keys * Added login incentives reward page * Fixed tests * Fixed linting and tests * Read named notifications route. Add image for backgrounds * Fixed style issues and added tranlsations to login incentive notification * Hided abiltiy to purchase incentive backgrounds and added message to detail how to unlock * Updated awarded message * Fixed text and updated progress counter to display better * Fixed purple potion reward text * Fixed check in backgrouns reward text * fix(quest): pass tests * Added display of multiple rewards * Updated modal styles * Fixed neagtive 50 issue * Remvoed total count from daily login incentives modal * Fixed magic paw display * fix(awards): give bunnies again * WIP(incentives): more progress on BG shop * fix(incentives): actually award backgrounds * fix(incentives): more BG fixy * fix(backgrounds): don't gem-buy checkin bgs * Added dust bunny notification * fix(incentives): don't redisplay bunny award * chore(news): Bailey and different promo sprite
2016-11-24 01:34:09 +00:00
import loginIncentives from './loginIncentives';
2015-11-12 02:32:00 +00:00
import officialPinnedItems from './officialPinnedItems';
Achievement list renovation & Achievements API (#7904) * pull apart achievements into different subcategories * achievs previously hidden to others if unachieved are now always shown * achievs previously always hidden if unachieved are now always shown * pull apart ultimate gear achievs * add achiev wrapper mixin * add achiev mixin for simple counts * add achiev mixin for singular/plural achievs * add simpleAchiev mixin and support attributes * always hide potentially unearnable achievs if unearned * contributor achiev now uses string interpolation for readMore link * transition to basic achiev grid layout * fix npc achievement img bug introduced in c90f7e2 * move surveys and contributor achievs into special section so it is never empty * double size of achievs in achievs grid * achievs in grid are muted if unachieved (includes recompiled sprites) * fix streak notification strings * add counts to achievement badges for applicable achieved achievs * list achievements by api * fix achievement strings in new api * unearned achievs now use dedicated (WIP) 'unearned' badge instead of muted versions of the normal badges * fix & cleanup achievements api * extract generation of the achievements result to a class * clean up achievement counter css using existing classes * simplify exports of new achievementBuilder lib * remove class logic from achievementBuilder lib * move achievs to common, add rebirth achiev logic, misc fixes * replace achievs jade logic with results of api call * fix linting errors * achievs lib now returns achievs object subdivided by type (basic/seasonal/special * add tests for new achievs lib * fix linting errors * update controllers and views for updated achievs lib * add indices to achievements to preserve intended order * move achiev popovers to left * rename achievs lib to achievements * adjust positioning of achieve popovers now that stats and achievs pages are separate * fix: achievements api correctly decides whether to append extra string for master and triadBingo achievs * revert compiled sprites so they don't bog down the PR * pull out achievs api integration tests * parameterize ultimate gear achievements' text string * break out static achievement data from user-specific data * reorg content.achievements to add achiev data in related chunks * cleanup, respond to feedback * improve api documentation * fix merge issues * Helped Habit Grow --> Helped Habitica Grow * achievement popovers are muted if the achiev is unearned * fix singular achievement labels / achievement popover on click * update apidoc for achievements (description, param-type, successExample, error-types) * fix whitespace issues in members.js * move html to a variable * updated json example * fix syntax after merge
2016-12-13 18:48:18 +00:00
api.achievements = achievements;
api.quests = quests;
api.questsByLevel = questsByLevel;
api.userCanOwnQuestCategories = userCanOwnQuestCategories;
api.itemList = ITEM_LIST;
2015-11-12 02:32:00 +00:00
2015-11-16 23:29:13 +00:00
api.gear = gear;
2016-03-02 11:46:06 +00:00
api.spells = spells;
Thehollidayinn/group plans part 2 (#8262) * Added all ui components back * Added group ui items back and initial group approval directive * Added approval list view with approving functionality * Added notification display for group approvals * Fixed linting issues * Removed expectation from beforeEach * Moved string to locale * Added per use group plan for stripe * Added tests for stripe group plan upgrade * Removed paypal option * Abstract sub blocks. Hit group sub block from user settings page. Added group subscriptin beneifts display * Fixed lint issue * Added pricing and adjusted styles * Moved text to translations * Added group email types * Fixed typo * Fixed group plan abstraction and other style issues * Fixed email unit test * Added type to group plan to filter our group plans * Removed dev protection from routes * Removed hard coding and fixed upgrade plan * Added error when group has subscription and tries to remove * Fixed payment unit tests * Added custom string and moved subscription check up in the logic * Added ability for old leader to delete subscription the created * Allowed old guild leader to edit their group subscription * Fixed linting and tests * Added group sub page to user sub settings * Added approval and group tasks requests back. Hid user group sub on profile * Added group tasks sync after adding to allow for editing * Fixed promise chain when resolving group * Added approvals to group promise chain * Ensured compelted group todos are not delted at cron * Updated copy and other minor styles * Added group field to tags and recolored group tag. * Added chat message when task is claimed * Preventing task scoring when approval is needed * Added approval requested indicator * Updated column with for tasks on group page * Added checklist sync on assign * Added sync for checklist items * Added checkilist sync when task is updated * Added checklist sync remove * Sanatized group tasks when updated * Fixed lint issues * Added instant scoring of approved task * Added task modal * Fixed editing of challenge and group tasks * Added cancel button * Added add new checklist option to update sync * Added remove for checklist * Added checklist update * Added difference check and sync for checklist if there is a diff * Fixed task syncing * Fixed linting issues * Fixed styles and karma tests * Fixed minor style issues * Fixed obj transfer on scope * Fixed broken tests * Added new benefits page * Updated group page styles * Updated benefits page style * Added translations * Prevented sync with empty trask list * Added task title to edit modal * Added new group plans page and upgrade redirect * Added group plans redirect to upgrade * Fixed party home page being hidden and home button click * Fixed dynamic changing of task status and grey popup * Fixed tag editing * Hid benifites information if group has subscription * Added quotes to task name * Fixed issue with assigning multiple users * Added new group plans ctrl * Hid menu from public guilds * Fixed task sync issue * Updated placeholder for assign field * Added correct cost to subscribe details * Hid create, edit, delete task options from non group leaders * Prevented some front end modifications to group tasks * Hid tags option from group original task * Added refresh for approvals and group tasks * Prepend new group tasks * Fix last checklist item sync * Fixed casing issue with tags * Added claimed by message on hover * Prevent user from deleting assigned task * Added single route for group plan sign up and payments * Abstracted stripe payments and added initial tests * Abstracted amazon and added initial tests * Fixed create group message * Update group id check and return group * Updated to use the new returned group * Fixed linting and promise issues * Fixed broken leave test after merge issue * Fixed undefined approval error and editing/deleting challenge tasks * Add pricing to group plans, removed confirmation, and fixed redirect after payment * Updated group plan cost text
2016-12-21 19:45:45 +00:00
api.subscriptionBlocks = subscriptionBlocks;
2015-11-12 02:32:00 +00:00
api.audioThemes = ['danielTheBard', 'gokulTheme', 'luneFoxTheme', 'wattsTheme', 'rosstavoTheme', 'dewinTheme', 'airuTheme', 'beatscribeNesTheme', 'arashiTheme'];
api.mystery = timeTravelers.mystery;
api.timeTravelerStore = timeTravelers.timeTravelerStore;
2015-11-12 02:32:00 +00:00
api.officialPinnedItems = officialPinnedItems;
/*
---------------------------------------------------------------
Discounted Item Bundles
---------------------------------------------------------------
*/
api.bundles = {
featheredFriends: {
key: 'featheredFriends',
text: t('featheredFriendsText'),
notes: t('featheredFriendsNotes'),
bundleKeys: [
'falcon',
'harpy',
'owl',
],
canBuy () {
return moment().isBetween('2017-05-16', '2017-05-31');
},
type: 'quests',
class: 'quest_bundle_featheredFriends',
value: 7,
},
splashyPals: {
key: 'splashyPals',
text: t('splashyPalsText'),
notes: t('splashyPalsNotes'),
bundleKeys: [
'dilatory_derby',
'turtle',
'whale',
],
canBuy () {
return moment().isBetween('2017-07-11', '2017-08-02');
},
type: 'quests',
class: 'quest_bundle_splashyPals',
value: 7,
},
farmFriends: {
key: 'farmFriends',
text: t('farmFriendsText'),
notes: t('farmFriendsNotes'),
bundleKeys: [
'cow',
'horse',
'sheep',
],
canBuy () {
return moment().isBetween('2017-09-12', '2017-10-07');
},
type: 'quests',
value: 7,
},
witchyFamiliars: {
key: 'witchyFamiliars',
text: t('witchyFamiliarsText'),
notes: t('witchyFamiliarsNotes'),
bundleKeys: [
'rat',
'spider',
'frog',
],
canBuy () {
return moment().isBetween('2017-10-10', '2017-11-02');
},
type: 'quests',
value: 7,
},
};
2015-11-12 02:32:00 +00:00
/*
2016-03-03 03:36:27 +00:00
---------------------------------------------------------------
Unique Rewards: Potion and Armoire
---------------------------------------------------------------
*/
2015-11-12 02:32:00 +00:00
api.potion = {
type: 'potion',
text: t('potionText'),
notes: t('potionNotes'),
value: 25,
key: 'potion',
2015-11-12 02:32:00 +00:00
};
api.armoire = {
type: 'armoire',
text: t('armoireText'),
notes (user, count) {
2015-11-12 02:32:00 +00:00
if (user.flags.armoireEmpty) {
return t('armoireNotesEmpty')();
}
return t('armoireNotesFull')() + count;
},
2015-11-12 02:32:00 +00:00
value: 100,
key: 'armoire',
canOwn () {
return true;
},
2015-11-12 02:32:00 +00:00
};
/*
---------------------------------------------------------------
Classes
---------------------------------------------------------------
2016-03-03 03:36:27 +00:00
*/
2015-11-12 02:32:00 +00:00
api.classes = CLASSES;
2015-11-12 02:32:00 +00:00
/*
---------------------------------------------------------------
Gear Types
---------------------------------------------------------------
2016-03-03 03:36:27 +00:00
*/
2015-11-12 02:32:00 +00:00
api.gearTypes = GEAR_TYPES;
2015-11-12 02:32:00 +00:00
api.cardTypes = {
greeting: {
key: 'greeting',
messageOptions: 4,
yearRound: true,
2015-11-12 02:32:00 +00:00
},
nye: {
key: 'nye',
messageOptions: 5,
2015-11-12 02:32:00 +00:00
},
thankyou: {
key: 'thankyou',
messageOptions: 4,
yearRound: true,
2015-11-12 02:32:00 +00:00
},
valentine: {
key: 'valentine',
messageOptions: 4,
},
birthday: {
key: 'birthday',
messageOptions: 1,
yearRound: true,
},
congrats: {
key: 'congrats',
messageOptions: 5,
yearRound: true,
},
getwell: {
key: 'getwell',
messageOptions: 4,
yearRound: true,
},
goodluck: {
key: 'goodluck',
messageOptions: 3,
yearRound: true,
},
2015-11-12 02:32:00 +00:00
};
api.special = api.spells.special;
api.dropEggs = eggs.drops;
api.questEggs = eggs.quests;
api.eggs = eggs.all;
2015-11-12 02:32:00 +00:00
api.timeTravelStable = {
pets: {
'Mammoth-Base': t('mammoth'),
'MantisShrimp-Base': t('mantisShrimp'),
'Phoenix-Base': t('phoenix'),
2017-04-18 22:38:53 +00:00
'MagicalBee-Base': t('magicalBee'),
2015-11-12 02:32:00 +00:00
},
mounts: {
'Mammoth-Base': t('mammoth'),
'MantisShrimp-Base': t('mantisShrimp'),
'Phoenix-Base': t('phoenix'),
2017-04-18 22:38:53 +00:00
'MagicalBee-Base': t('magicalBee'),
},
2015-11-12 02:32:00 +00:00
};
api.dropHatchingPotions = hatchingPotions.drops;
api.premiumHatchingPotions = hatchingPotions.premium;
api.hatchingPotions = hatchingPotions.all;
api.pets = stable.dropPets;
api.premiumPets = stable.premiumPets;
api.questPets = stable.questPets;
api.specialPets = stable.specialPets;
api.petInfo = stable.petInfo;
api.mounts = stable.dropMounts;
api.questMounts = stable.questMounts;
api.premiumMounts = stable.premiumMounts;
api.specialMounts = stable.specialMounts;
api.mountInfo = stable.mountInfo;
API v3 [WIP] (#6144) * Fixed more tests * Added tags into user service * Added api-v3 auth urls * v3: fix package.json * v3: fix package.json * Fixed auth tests. Updated Authctrl response * v3: remove newrelic config file in favour of env variables * v3: upgrade some deps * switch from Q to Bluebird * v3 fix tests with deferred * Removed extra consoles.log. Changed data.data to res.data * v3 fix tests and use coroutines instead of regenerator * v3: fix tests * v3: do not await a non promise * v3: q -> bluebird * Changed id param for registration response * Updated party query and create * Ensured login callback happens after user sync * Add challenges to groups. Fixed isMemberOfGuild check * Updated party and group tests * Fixed cron test * return user.id and send analytics event before changing page * fix trailing spaces * disable redirects * Api v3 party tavern fixes (#7191) * Added check if user is in party before query * Cached party query. Prevented party request when user is not in party. Updated Party create with no invites * Update tavern ctrl to use new promise * v3: misc fixes * Api v3 task fixes (#7193) * Update task view to use _id * Added try catch to user service ops calls * v3 client: saving after syncing is complete * Fixed test broken by part sync change (#7195) * v3: fix todo scoring and try to fix production testing problem * revert changes to mongoose config * mongoose: increase keepAlive * test mongoose fix * fix: Only apply captureStackTrace if it exists on the error object * v3: fix reminders with no startDate * mongoose: use options * chore(): rename website/src -> website/server and website/public -> website/client (#7199) * v3 fix GET /groups: return an error only if an invalid type is supplied not when there are 0 results (#7203) * [API v3] Fix calls to user.ops and deleting tags (#7204) * v3: fixes calls to user.ops from views and deleting tags * v3: fix tests that use user._statsComputed * Api v3 fixes continued (#7205) * Added timzeone offset back * Added APIToken back to settings page * Fixed fetch recent messages for party * Fixed returning group description * Fixed check if user is member of challenge * Fixed party members appearing in header * Updated get myGroups param to include public groups. Fixed isMemberOf group * Fixed hourglass purchase * Fixed challenge addding tasks on first creating * Updated tests to accomidate new changes * fix: Correct checklist on client Closes #7207 * fix: Pin eslint to 2.9 * minor improvements to cron code for clarity; fix inaccurate comments; add TODOs for rest-in-inn actions * fix: Add missing type param to equip call closes #7212 * rename and reword pubChalsMinPrize to reflect that it's only for Tavern challenges * allows players to send gems to each other; other minor related changes - fixes https://github.com/HabitRPG/habitrpg/issues/7227 * fix tests for /members/transfer-gems * fix: Set gems sent notification as translatable string * chore: Remove unusued variable * fix: Remove requirement on message paramter in transfer-gems * add a missing variable declaration * chore: clarify comments on cron code * fix: Correct client request from habitrpg -> tavern * update apidoc URL in package.json Closes #7222 * Fixed start party by invites * Updated spell casting to v3 * Fixed adding and removing tags on tasks * Fixed page reload on settings change * Fixed battle monsters with friends button * Loaded completed todos when done is clicked * chore: Reinstate floating version number for eslint babel-eslint regression fixed * Fixed reload tests * change "an user" to "a user" in comments and text (no code changes) (#7257) * fix: Alert user that drops were recieved * remove userServices.js from karma.conf - it's been moved to website/client/js/services * feat: Create debug update user route * fix: Correct set cron debug function * feat: Add make admin button to debug menu * lint: Add missing semicolons in test * fix: Temporarilly comment out udpate user debug route * v3: fix _tmp for crit and streakBonus * v3: execute all actions when leaving a solo party * v3 client: fix group not found when leaving party * v3 migration: fix challenge prize * v3 cron: only save modified tasks * v3: add CHALLENGE_TASK_NOT_FOUND to valid broken reasons * v3: fix tasks chart * v3 client: fix ability to leave challenge * v3 client: fix filtering by tag and correctly show tag tooltip * v3 common: fix tags tests * v3 client: support unlinking not found challenges tasks * v3: disable Bluebird warning for missing return, fixes #7269 * feat: Separate out update-user into set-cron and make-admin debug routes * chore: Disable make admin debug route for v3 prod testing * v3: misc fixes * v3: misc fixes * v3: fix adding multiple tasks * Fixed join/leave button updates * Queried only user groups to be available when creating challenges * Fixed bulk add tasks to challenge * Synced challenge tasks after leave and join. * Fixed default selected group * Fixed challenge member info. Fixed challenge winner selection * Fixed deleting challenge tasks * Fixed particiapting filter * v3 client: fix casting spells * v3: do not log sensitive data * v3: always save user when casting spell * v3: always save user when casting spell * v3: more fixes for spells * fix typos and missing information in apidocs - fixes https://github.com/HabitRPG/habitrpg/issues/7277 (#7282) * v3: add TODO for client side spells * feat: Add modify inventory debug menu * Fixed viewing user progress on challenge * Updated tests * fix: Fix quest progress button * fix incorrect Armoire test; remove unneeded param details from apidocs; disambiguate health potion * v3: fix stealth casting * v3: fix tasks saving and selection for rebirth reroll and reset (server-only) * v3: fix auto allocation * v3 client: misc fixes * rename buyPotion and buy-potion to buyHealthPotion and buy-health-potion; fix apidoc param error * Added delete for saved challenge task * Fixed member modal on front page * adjust text in apidocs for errors / clarity / consistency / standard terminology (no code changes) (#7298) * fix bug in Rebirth test, add new tests, adjust apidocs (#7293) * Updated task model to allow setting streak (#7306) * fix: Correct missing * in apidoc comments * Api v3 challenge fixes (#7287) * Fixed join/leave button updates * Queried only user groups to be available when creating challenges * Fixed bulk add tasks to challenge * Synced challenge tasks after leave and join. * Fixed default selected group * Fixed challenge member info. Fixed challenge winner selection * Fixed deleting challenge tasks * Fixed particiapting filter * Fixed viewing user progress on challenge * Updated tests * Added delete for saved challenge task * v3: fix sorting * [API v3] add CRON_SAFE_MODE (#7286) * add CRON_SAFE_MODE to example config file, fix some bugs, add an unrelated low-priority TODO * create CRON_SAFE_MODE to disable parts of cron for use after extended outage - fixes https://github.com/HabitRPG/habitrpg/issues/7161 * fix a bug with CRON_SAFE_MODE, remove duplicated code, remove completed TODO comment * fix check for CRON_SAFE_MODE * v3 client: fix typo * adjust debug menu Modify Inventory: hungrier pets, fewer Special items, "Hide" buttons * completed To-Dos: return the 30 most recent instead of 30 oldest (#7318) * v3 migration: fix createdAt date * adjust locales text, key names, and files for Rebirth, Reset, and Fortify / ReRoll for consistency with existing strings (#7321) * v3: fix unlinking multiple tasks * v3 fix releasing pets * v3: fix authenticating with apiUrl * v3: fix typo * v3 fix client tests for unlinking * v3 client: do not show start quest button when quest is active * v3 client: fix ability to send cards * v3 client: fix misc challenge issues * v3: fix notifications * v3 client: more user friendly errors * v3 client: only load completed todos once * v3 client: fix tests * v3: move TAVERN_ID to common code * fix: Provide default type and text for new task creation in score route * fix: Provide default history [] for habit in score route * fix: Add _legacyId prop to tasks to support non-uuid identifiers * chore: Change v3 migration to use _legacyId instead of legacyId * fix: check for _legacyId in tasks if id does not exist * refactor: Extract out finding task by id or _legacyId into a function * Api v3 party quest fixes (#7341) * Fix display of add challenge message when group challenges are empty * Fixed forced quest start to update quest without reload * Fixed needing to reload when accepting party invite * Fix group leave and join reload * Fixed leave current party and join another * Updated party tests * v3 client: remove console.log statement * v3: misc fixes * v3 client: fix predicatbale random * v3: info about API v3 * v3: update footer with links to developer resources * v3: support party invitation from email * v3 client: fix chat flagging * fix: Correct get tasks route to properly get todos (#7349) * move locales strings from api-v3.json to other locales files (#7347) * move locales strings from api-v3.json: authentication strings -> front.json * move locales strings from api-v3.json: authentication strings -> tasks.json * move locales strings from api-v3.json: authentication strings -> groups.json * move locales strings from api-v3.json: authentication strings -> challenge.json * move locales strings from api-v3.json: authentication strings -> groups.json (again) * move locales strings from api-v3.json: authentication strings -> quests.json * move locales strings from api-v3.json: authentication strings -> subscriber.json * move locales strings from api-v3.json: authentication strings -> spells.json * move locales strings from api-v3.json: authentication strings -> character.json * move locales strings from api-v3.json: authentication strings -> groups.json (PMs) * move locales strings from api-v3.json: authentication strings -> npc.json * move locales strings from api-v3.json: authentication strings -> pets.json * move locales strings from api-v3.json: authentication strings -> miscellaneous * move locales strings from api-v3.json: authentication strings -> contrib.json and settings.json * move locales strings from api-v3.json: delete unused string (invalidTasksOwner), delete api-v3.json, whitespace cleanup * v3 client: fix sticky header * v3: remove unused code * v3 client: correctly redirect after inviting * Removed v2 calls from views (#7351) * v3: fix tests for challenge export * v3: fallbackto authWithHeaders if wuthWithSession or authWithUrl fails * Added force cache update when fetching new messages (#7360) * v3: fetch whole user when booting from group tto avoid issues with pre save hook expecting all data * v3: misc fixes for payments * v3: limit fields of challenge tasks that can be updated * fix(tests): never connect to NODE_DB_URI for tests * Added new route for setting last cron and updated front end * v3: fix iap url * v3: fix build and ios IAP * Changed route to user set custom day start * v3: iap accessible under /api/v3, fixes to spells and groups invitations * v3: correctly use v3 routes in client * remove XP, GP when unticking a Daily with a completed checklist - fixes https://github.com/HabitRPG/habitrpg/issues/7246 * use natural language for error message about skills on challenge tasks (#7336), fix other gramatical error * Updated ui when user rejects a guild invite (#7368) * feat: complete custom day start route Closes #7363 * fix: Correct spelling of healAll skill fix: Correct sprite name of healAll skill * fix: Change all instances of spookDust -> spookySparkles * add dateCreated to all tasks; add empty challenge object to tasks that don't have one (#7386) * add plumilla to artists for Tangle Tree in Bailey message * Fixed quest drop modal (#7377) * Fixed quest drop modal * Fixed broken party test * [API v3] Maintenance Mode (#7367) * WIP(maintenance): maintenance * WIP(maintenance): working locale features * fix(maintenance): don't translate info page target * WIP(maintenance): start adding info page * fix(maintenance): linting * feat: Add container to maintenance info page * fix(maintenance): add config.json edits Also DRY variables for main vs info pages * fix(maintenance): linting * refactor(maintenance): further slim down variables * refactor: Remove unnecessary variables * fix: Correct string interpolation in maintenace view * feat: Dynamically add time to maintenance pages * maintenance mode: do not connect to mongodb * fix(maintenance): clean up timezones etc. * fix(maintenance): remove unneeded sprite * Tavern party challenges invites fix (#7394) * Added challenges and invitations to party * Loaded tavern challenges * Updated group and quest services tests * v3: implement automatic syncing if user is not up to date * Removed unnecessary fields when updating groups and challenges (#7395) * v3: do not saved populated user * v3: correctly return user subset * Chained party promises together (#7396) * v3: $w -> splitWhitespace * use bluebird * use babel polyfill * migration: fix items * update links for v3 * Updated shortname validation to support multiple browsers * Docs changes (#7401) * chore: Clarify transfer-gems documentation * chore: Clarify api status route documentation * chore: Mark webhooks as BETA * Added tags update route. Added sort to user service (#7381) * Added tags update route. Added sort to user service * Change update tasks route to reorder tasks * Fixed linting issue * Changed params for reorder tags route * Fixed not found tag and added test * Added password confirmation when deleteing account (#7402) * fix production logging * feat(commit): push * empty commit * feat(maintenance): post-downtime news & awards (#7406) * fix exporting avatar * second attempt at fixing exporting avatar * fix production logging * s3: convert moment to date instance * fix avatar sharing and caching (30 minutes) * fix: Correct missing parameter Closes #7433 * fix: Validate challenge shortname on server * adjust text strings - fixes https://github.com/HabitRPG/habitrpg/issues/5631 and also Short Name -> Tag Name
2016-05-23 11:58:31 +00:00
// For seasonal events, change these booleans:
let canBuyNormalFood = true;
let canDropNormalFood = true;
let canBuyCandyFood = false;
let canDropCandyFood = false;
let canBuyCakeFood = false;
let canDropCakeFood = false;
2015-11-12 02:32:00 +00:00
api.food = {
Meat: {
text: t('foodMeat'),
target: 'Base',
2016-02-01 22:01:17 +00:00
article: '',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
Milk: {
text: t('foodMilk'),
target: 'White',
2016-02-01 22:01:17 +00:00
article: '',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
Potatoe: {
text: t('foodPotatoe'),
target: 'Desert',
2016-02-01 22:01:17 +00:00
article: 'a ',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
Strawberry: {
text: t('foodStrawberry'),
target: 'Red',
2016-02-01 22:01:17 +00:00
article: 'a ',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
Chocolate: {
text: t('foodChocolate'),
target: 'Shade',
2016-02-01 22:01:17 +00:00
article: '',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
Fish: {
text: t('foodFish'),
target: 'Skeleton',
2016-02-01 22:01:17 +00:00
article: 'a ',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
RottenMeat: {
text: t('foodRottenMeat'),
target: 'Zombie',
2016-02-01 22:01:17 +00:00
article: '',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
CottonCandyPink: {
text: t('foodCottonCandyPink'),
target: 'CottonCandyPink',
2016-02-01 22:01:17 +00:00
article: '',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
CottonCandyBlue: {
text: t('foodCottonCandyBlue'),
target: 'CottonCandyBlue',
2016-02-01 22:01:17 +00:00
article: '',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
Honey: {
text: t('foodHoney'),
target: 'Golden',
2016-02-01 22:01:17 +00:00
article: '',
canBuy () {
return canBuyNormalFood;
},
canDrop: canDropNormalFood,
2015-11-12 02:32:00 +00:00
},
Saddle: {
canBuy () {
2015-11-12 02:32:00 +00:00
return true;
},
2015-11-12 02:32:00 +00:00
text: t('foodSaddleText'),
value: 5,
notes: t('foodSaddleNotes'),
2015-11-12 02:32:00 +00:00
},
/* eslint-disable camelcase */
2015-11-12 02:32:00 +00:00
Cake_Skeleton: {
text: t('foodCakeSkeleton'),
target: 'Skeleton',
article: '',
canBuy () {
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Cake_Base: {
text: t('foodCakeBase'),
target: 'Base',
article: '',
canBuy () {
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Cake_CottonCandyBlue: {
text: t('foodCakeCottonCandyBlue'),
target: 'CottonCandyBlue',
article: '',
canBuy () {
2017-01-31 21:10:51 +00:00
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Cake_CottonCandyPink: {
text: t('foodCakeCottonCandyPink'),
target: 'CottonCandyPink',
article: '',
canBuy () {
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Cake_Shade: {
text: t('foodCakeShade'),
target: 'Shade',
article: '',
canBuy () {
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Cake_White: {
text: t('foodCakeWhite'),
target: 'White',
article: '',
canBuy () {
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Cake_Golden: {
text: t('foodCakeGolden'),
target: 'Golden',
article: '',
canBuy () {
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Cake_Zombie: {
text: t('foodCakeZombie'),
target: 'Zombie',
article: '',
canBuy () {
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Cake_Desert: {
text: t('foodCakeDesert'),
target: 'Desert',
article: '',
canBuy () {
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Cake_Red: {
text: t('foodCakeRed'),
target: 'Red',
article: '',
canBuy () {
return canBuyCakeFood;
},
canDrop: canDropCakeFood,
2015-11-12 02:32:00 +00:00
},
Candy_Skeleton: {
text: t('foodCandySkeleton'),
target: 'Skeleton',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
2015-11-12 02:32:00 +00:00
},
Candy_Base: {
text: t('foodCandyBase'),
target: 'Base',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
2015-11-12 02:32:00 +00:00
},
Candy_CottonCandyBlue: {
text: t('foodCandyCottonCandyBlue'),
target: 'CottonCandyBlue',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
2015-11-12 02:32:00 +00:00
},
Candy_CottonCandyPink: {
text: t('foodCandyCottonCandyPink'),
target: 'CottonCandyPink',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
2015-11-12 02:32:00 +00:00
},
Candy_Shade: {
text: t('foodCandyShade'),
target: 'Shade',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
2015-11-12 02:32:00 +00:00
},
Candy_White: {
text: t('foodCandyWhite'),
target: 'White',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
2015-11-12 02:32:00 +00:00
},
Candy_Golden: {
text: t('foodCandyGolden'),
target: 'Golden',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
2015-11-12 02:32:00 +00:00
},
Candy_Zombie: {
text: t('foodCandyZombie'),
target: 'Zombie',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
2015-11-12 02:32:00 +00:00
},
Candy_Desert: {
text: t('foodCandyDesert'),
target: 'Desert',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
2015-11-12 02:32:00 +00:00
},
Candy_Red: {
text: t('foodCandyRed'),
target: 'Red',
article: '',
canBuy () {
return canBuyCandyFood;
},
canDrop: canDropCandyFood,
},
/* eslint-enable camelcase */
2015-11-12 02:32:00 +00:00
};
each(api.food, (food, key) => {
return defaults(food, {
2015-11-12 02:32:00 +00:00
value: 1,
key,
2015-11-12 02:32:00 +00:00
notes: t('foodNotes'),
canBuy () {
2015-11-12 02:32:00 +00:00
return false;
},
canDrop: false,
2015-11-12 02:32:00 +00:00
});
});
api.appearances = appearances;
2017-10-06 21:06:48 +00:00
api.backgrounds = backgroundsTree();
api.backgroundsFlat = backgroundsFlat();
2015-11-12 02:32:00 +00:00
api.userDefaults = {
habits: [
{
type: 'habit',
text: t('defaultHabit1Text'),
value: 0,
up: true,
down: false,
attribute: 'per',
tags: [
t('defaultTag1'), // Work
t('defaultTag4'), // School
t('defaultTag6'), // Chores
],
2015-11-12 02:32:00 +00:00
}, {
type: 'habit',
text: t('defaultHabit2Text'),
value: 0,
up: false,
down: true,
attribute: 'str',
tags: [
t('defaultTag3'), // Health + Wellness
],
2015-11-12 02:32:00 +00:00
}, {
type: 'habit',
text: t('defaultHabit3Text'),
value: 0,
up: true,
down: true,
attribute: 'str',
tags: [
t('defaultTag2'), // Exercise
t('defaultTag3'), // Health + Wellness
],
},
2015-11-12 02:32:00 +00:00
],
dailys: [],
todos: [
{
type: 'todo',
text: t('defaultTodo1Text'),
notes: t('defaultTodoNotes'),
completed: false,
attribute: 'int',
},
2015-11-12 02:32:00 +00:00
],
rewards: [
{
type: 'reward',
text: t('defaultReward1Text'),
value: 10,
},
2015-11-12 02:32:00 +00:00
],
tags: [
{
name: t('defaultTag1'),
2015-11-12 02:32:00 +00:00
}, {
name: t('defaultTag2'),
2015-11-12 02:32:00 +00:00
}, {
name: t('defaultTag3'),
}, {
name: t('defaultTag4'),
}, {
name: t('defaultTag5'),
}, {
name: t('defaultTag6'),
}, {
name: t('defaultTag7'),
},
],
2015-11-12 02:32:00 +00:00
};
api.userDefaultsMobile = {
habits: [],
dailys: [],
todos: [],
rewards: [],
tags: [],
};
2016-03-03 03:36:27 +00:00
api.faq = faq;
Login Incentives (#8230) * feat(incentives): login bennies WIP * feat(content): incentive prize content WIP * fix(content): placeholders pass tests * WIP(content): Bard instrument placeholder * feat(content): Incentives build * chore(sprites): compile and fix some strings * WIP(incentives): quests and backgrounds * fix(quests): correct buy/launch handling * [WIP] Incentives rewarding (#8226) * Added login incentive rewards * Updated incentive rewards * Added incentive modal and updated notification structure * Added analytics to sleeping * Added login incentives to user analytics * Fixed unit tests and ensured that prizes are incremented and not replaced * Updated style of daily login incentive modal * Added rewards modal * Added translations * Added loigin incentive ui elements to profile * Updated login incentives structure and abstracted to common.content * Added dynamic display for login incentives on profile * Added purple potion image * Updated daily login modal * Fixed progress calculation * Added bard gear * Updated login incentive rewards * Fixed styles and text * Added multiple read for notifications * Fixed lint issues * Fixed styles and added 50 limit * Updated quest keys * Added login incentives reward page * Fixed tests * Fixed linting and tests * Read named notifications route. Add image for backgrounds * Fixed style issues and added tranlsations to login incentive notification * Hided abiltiy to purchase incentive backgrounds and added message to detail how to unlock * Updated awarded message * Fixed text and updated progress counter to display better * Fixed purple potion reward text * Fixed check in backgrouns reward text * fix(quest): pass tests * Added display of multiple rewards * Updated modal styles * Fixed neagtive 50 issue * Remvoed total count from daily login incentives modal * Fixed magic paw display * fix(awards): give bunnies again * WIP(incentives): more progress on BG shop * fix(incentives): actually award backgrounds * fix(incentives): more BG fixy * fix(backgrounds): don't gem-buy checkin bgs * Added dust bunny notification * fix(incentives): don't redisplay bunny award * chore(news): Bailey and different promo sprite
2016-11-24 01:34:09 +00:00
api.loginIncentives = loginIncentives(api);