Merge branch 'develop' into party-chat-translations

This commit is contained in:
Mateus Etto
2018-03-17 00:08:20 +09:00
310 changed files with 10732 additions and 10045 deletions

View File

@@ -1,10 +1,6 @@
{
"presets": ["es2015"],
"plugins": [
"transform-object-rest-spread",
["transform-async-to-module-method", {
"module": "bluebird",
"method": "coroutine"
}]
"transform-es2015-modules-commonjs",
"syntax-object-rest-spread",
]
}

View File

@@ -4,6 +4,7 @@ node_modules/**
.bower-registry/**
website/client-old/**
website/client/**
website/client/store/**
website/views/**
website/build/**
dist/**

2
.nvmrc
View File

@@ -1 +1 @@
6
8

View File

@@ -1,6 +1,6 @@
language: node_js
node_js:
- '6'
- '8'
services:
- mongodb
cache:
@@ -8,8 +8,6 @@ cache:
- 'node_modules'
addons:
chrome: stable
before_install:
- npm install -g npm@5
before_script:
- npm run test:build
- cp config.json.example config.json

View File

@@ -1,4 +1,4 @@
FROM node:boron
FROM node:8
# Upgrade NPM to v5 (Yarn is needed because of this bug https://github.com/npm/npm/issues/16807)
# The used solution is suggested here https://github.com/npm/npm/issues/16807#issuecomment-313591975

View File

@@ -1,4 +1,4 @@
FROM node:boron
FROM node:8
ENV ADMIN_EMAIL admin@habitica.com
ENV AMAZON_PAYMENTS_CLIENT_ID amzn1.application-oa2-client.68ed9e6904ef438fbc1bf86bf494056e
@@ -20,7 +20,7 @@ RUN npm install -g gulp-cli mocha
# Clone Habitica repo and install dependencies
RUN mkdir -p /usr/src/habitrpg
WORKDIR /usr/src/habitrpg
RUN git clone --branch v4.29.7 https://github.com/HabitRPG/habitica.git /usr/src/habitrpg
RUN git clone --branch v4.29.8 https://github.com/HabitRPG/habitica.git /usr/src/habitrpg
RUN npm install
RUN gulp build:prod --force

View File

@@ -2,7 +2,6 @@ import { exec } from 'child_process';
import psTree from 'ps-tree';
import nconf from 'nconf';
import net from 'net';
import Bluebird from 'bluebird';
import { post } from 'superagent';
import { sync as glob } from 'glob';
import Mocha from 'mocha';
@@ -45,7 +44,7 @@ export function kill (proc) {
* before failing.
*/
export function awaitPort (port, max = 60) {
return new Bluebird((rej, res) => {
return new Promise((rej, res) => {
let socket;
let timeout;
let interval;

View File

@@ -16,7 +16,6 @@
const authorName = 'Blade';
const authorUuid = '75f270e8-c5db-4722-a5e6-a83f1b23f76b';
global.Promise = require('bluebird');
const MongoClient = require('mongodb').MongoClient;
const TaskQueue = require('cwait').TaskQueue;
const logger = require('./utils/logger');

View File

@@ -11,7 +11,6 @@
* pm'ed each user asking if they would like their tasks reset to the previous day
***************************************/
global.Promise = require('bluebird');
const MongoClient = require('mongodb').MongoClient;
const TaskQueue = require('cwait').TaskQueue;
const logger = require('./utils/logger');

View File

@@ -12,7 +12,6 @@
* from an object to a number, hence this migration.
***************************************/
global.Promise = require('bluebird');
const TaskQueue = require('cwait').TaskQueue;
const logger = require('./utils/logger');
const Timer = require('./utils/timer');

View File

@@ -9,7 +9,6 @@
* and transfers a group's progress to it
***************************************/
global.Promise = require('bluebird');
const TaskQueue = require('cwait').TaskQueue;
const logger = require('./utils/logger');
const Timer = require('./utils/timer');

View File

@@ -12,7 +12,6 @@
* <userid>@example.com
***************************************/
global.Promise = require('bluebird');
const TaskQueue = require('cwait').TaskQueue;
const logger = require('./utils/logger');
const Timer = require('./utils/timer');

View File

@@ -9,7 +9,6 @@
* they support a type and options and label
* ***************************************/
global.Promise = require('bluebird');
const TaskQueue = require('cwait').TaskQueue;
const logger = require('./utils/logger');
const Timer = require('./utils/timer');

View File

@@ -12,7 +12,6 @@
* message into the chat for affected parties.
***************************************/
global.Promise = require('bluebird');
const uuid = require('uuid');
const TaskQueue = require('cwait').TaskQueue;
const logger = require('./utils/logger');

View File

@@ -2,3 +2,5 @@ If you need to use a migration from this folder, move it to /migrations.
Note that /migrations files (excluding /archive) are linted, so to pass test you'll have to make sure
that the file is written correctly.
They might also be using some old deps that we don't use anymore like Bluebird, mongoskin, ...

View File

@@ -1,5 +1,3 @@
import Bluebird from 'Bluebird';
import { model as Challenges } from '../../website/server/models/challenge';
import { model as User } from '../../website/server/models/user';
@@ -17,10 +15,10 @@ async function syncChallengeToMembers (challenges) {
promises.push(user.save());
});
return Bluebird.all(promises);
return Promise.all(promises);
});
return await Bluebird.all(challengSyncPromises);
return await Promise.all(challengSyncPromises);
}
async function syncChallenges (lastChallengeDate) {

View File

@@ -1,5 +1,3 @@
import Bluebird from 'bluebird';
import { model as Group } from '../../website/server/models/group';
import { model as User } from '../../website/server/models/user';
@@ -16,7 +14,7 @@ async function createGroup (name, privacy, type, leaderId) {
group.leader = user._id;
user.guilds.push(group._id);
return Bluebird.all([group.save(), user.save()]);
return Promise.all([group.save(), user.save()]);
}
module.exports = async function groupCreator () {

View File

@@ -3,7 +3,6 @@
/*
* This migration will find users with unlimited subscriptions who are also eligible for Jackalope mounts, and award them
*/
import Bluebird from 'bluebird';
import { model as Group } from '../../website/server/models/group';
import { model as User } from '../../website/server/models/user';
@@ -38,7 +37,7 @@ async function handOutJackalopes () {
cursor.on('close', async () => {
console.log('done');
return await Bluebird.all(promises);
return await Promise.all(promises);
});
}

View File

@@ -9,8 +9,6 @@ let authorUuid = ''; // ... own data is done
* subscription to all members
*/
import Bluebird from 'bluebird';
import { model as Group } from '../../website/server/models/group';
import * as payments from '../../website/server/libs/payments';
@@ -28,7 +26,7 @@ async function updateGroupsWithGroupPlans () {
});
cursor.on('close', async () => {
return await Bluebird.all(promises);
return await Promise.all(promises);
});
}

View File

@@ -1,14 +1,14 @@
require('babel-register');
require('babel-polyfill');
// This file must use ES5, everything required can be in ES6
function setUpServer () {
const nconf = require('nconf'); // eslint-disable-line global-require, no-unused-vars
const mongoose = require('mongoose'); // eslint-disable-line global-require, no-unused-vars
const Bluebird = require('bluebird'); // eslint-disable-line global-require, no-unused-vars
const setupNconf = require('../website/server/libs/setupNconf'); // eslint-disable-line global-require
setupNconf();
// We require src/server and npt src/index because
// 1. nconf is already setup
// 2. we don't need clustering

View File

@@ -1,4 +1,3 @@
let Bluebird = require('bluebird');
let request = require('superagent');
let last = require('lodash/last');
let AWS = require('aws-sdk');
@@ -74,7 +73,7 @@ function uploadToS3 (start, end, filesUrls) {
});
console.log(promises.length);
return Bluebird.all(promises)
return Promise.all(promises)
.then(() => {
currentIndex += 50;
uploadToS3(currentIndex, currentIndex + 50, filesUrls);

3502
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,24 +1,24 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.29.8",
"version": "4.31.0",
"main": "./website/server/index.js",
"dependencies": {
"@slack/client": "^3.8.1",
"accepts": "^1.3.2",
"accepts": "^1.3.5",
"amazon-payments": "^0.2.6",
"amplitude": "^3.5.0",
"apidoc": "^0.17.5",
"autoprefixer": "^8.0.0",
"aws-sdk": "^2.200.0",
"autoprefixer": "^8.1.0",
"aws-sdk": "^2.209.0",
"axios": "^0.18.0",
"axios-progress-bar": "^1.1.8",
"babel-core": "^6.0.0",
"babel-eslint": "^8.2.2",
"babel-loader": "^7.1.2",
"babel-loader": "^7.1.4",
"babel-plugin-syntax-async-functions": "^6.13.0",
"babel-plugin-syntax-dynamic-import": "^6.18.0",
"babel-plugin-transform-async-to-module-method": "^6.8.0",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
"babel-plugin-transform-object-rest-spread": "^6.16.0",
"babel-plugin-transform-regenerator": "^6.16.1",
"babel-polyfill": "^6.6.1",
@@ -26,24 +26,23 @@
"babel-register": "^6.6.0",
"babel-runtime": "^6.11.6",
"bcrypt": "^1.0.2",
"bluebird": "^3.3.5",
"body-parser": "^1.15.0",
"bootstrap": "^4.0.0",
"bootstrap-vue": "^2.0.0-rc.1",
"bootstrap-vue": "^2.0.0-rc.2",
"compression": "^1.7.2",
"cookie-session": "^1.2.0",
"coupon-code": "^0.4.5",
"cross-env": "^5.1.3",
"cross-env": "^5.1.4",
"css-loader": "^0.28.0",
"csv-stringify": "^2.0.4",
"cwait": "^1.1.1",
"domain-middleware": "~0.1.0",
"express": "^4.16.2",
"express": "^4.16.3",
"express-basic-auth": "^1.1.4",
"express-validator": "^5.0.1",
"express-validator": "^5.0.3",
"extract-text-webpack-plugin": "^3.0.2",
"glob": "^7.1.2",
"got": "^8.2.0",
"got": "^8.3.0",
"gulp": "^4.0.0",
"gulp-babel": "^7.0.1",
"gulp-imagemin": "^4.1.0",
@@ -53,22 +52,21 @@
"hellojs": "^1.15.1",
"html-webpack-plugin": "^2.8.1",
"image-size": "^0.6.2",
"in-app-purchase": "^1.1.6",
"in-app-purchase": "^1.8.9",
"intro.js": "^2.6.0",
"jquery": ">=3.0.0",
"js2xmlparser": "^3.0.0",
"lodash": "^4.17.4",
"merge-stream": "^1.0.0",
"method-override": "^2.3.5",
"moment": "^2.13.0",
"moment": "^2.21.0",
"moment-recur": "^1.0.7",
"mongoose": "^5.0.9",
"mongoose": "^5.0.10",
"morgan": "^1.7.0",
"nconf": "^0.10.0",
"node-gcm": "^0.14.4",
"node-rdkafka": "^2.2.3",
"node-sass": "^4.5.0",
"nodemailer": "^4.5.0",
"node-sass": "^4.8.2",
"nodemailer": "^4.6.3",
"ora": "^2.0.0",
"pageres": "^4.1.1",
"passport": "^0.4.0",
@@ -76,21 +74,21 @@
"passport-google-oauth20": "1.0.0",
"paypal-ipn": "3.0.0",
"paypal-rest-sdk": "^1.8.1",
"popper.js": "^1.13.0",
"popper.js": "^1.14.1",
"postcss-easy-import": "^3.0.0",
"ps-tree": "^1.0.0",
"pug": "^2.0.0-rc.4",
"pug": "^2.0.1",
"push-notify": "git://github.com/habitrpg/push-notify.git#6bc2b5fdb1bdc9649b9ec1964d79ca50187fc8a9",
"pusher": "^1.3.0",
"rimraf": "^2.4.3",
"sass-loader": "^6.0.2",
"sass-loader": "^6.0.7",
"shelljs": "^0.8.1",
"stackimpact": "^1.2.1",
"stripe": "^5.5.0",
"superagent": "^3.4.3",
"svg-inline-loader": "^0.8.0",
"svg-url-loader": "^2.0.2",
"svgo": "^1.0.4",
"svg-url-loader": "^2.3.2",
"svgo": "^1.0.5",
"svgo-loader": "^2.1.0",
"universal-analytics": "^0.4.16",
"url-loader": "^0.6.2",
@@ -98,24 +96,24 @@
"uuid": "^3.0.1",
"validator": "^9.4.1",
"vinyl-buffer": "^1.0.1",
"vue": "^2.5.2",
"vue-loader": "^14.1.1",
"vue": "^2.5.16",
"vue-loader": "^14.2.1",
"vue-mugen-scroll": "^0.2.1",
"vue-router": "^3.0.0",
"vue-style-loader": "^4.0.2",
"vue-template-compiler": "^2.5.2",
"vue-template-compiler": "^2.5.16",
"vuedraggable": "^2.15.0",
"vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec",
"webpack": "^3.11.0",
"webpack-merge": "^4.0.0",
"winston": "^2.1.0",
"winston": "^2.4.1",
"winston-loggly-bulk": "^2.0.2",
"xml2js": "^0.4.4"
},
"private": true,
"engines": {
"node": "^6.9.1",
"npm": "^5.0.0"
"node": "^8.9.4",
"npm": "^5.6.0"
},
"scripts": {
"lint": "eslint --ext .js,.vue .",
@@ -142,20 +140,21 @@
"apidoc": "gulp apidoc"
},
"devDependencies": {
"babel-plugin-istanbul": "^4.0.0",
"babel-plugin-syntax-object-rest-spread": "^6.13.0",
"babel-plugin-istanbul": "^4.1.6",
"chai": "^4.1.2",
"chai-as-promised": "^7.1.1",
"chalk": "^2.3.1",
"chromedriver": "^2.27.2",
"chalk": "^2.3.2",
"chromedriver": "^2.36.0",
"connect-history-api-fallback": "^1.1.0",
"coveralls": "^3.0.0",
"cross-spawn": "^6.0.4",
"eslint": "^4.18.1",
"cross-spawn": "^6.0.5",
"eslint": "^4.18.2",
"eslint-config-habitrpg": "^4.0.0",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.3.0",
"eslint-plugin-html": "^4.0.2",
"eslint-plugin-mocha": "^4.7.0",
"eslint-plugin-mocha": "^4.12.1",
"eventsource-polyfill": "^0.9.6",
"expect.js": "^0.3.1",
"http-proxy-middleware": "^0.17.0",
@@ -171,19 +170,22 @@
"karma-sinon-stub-promise": "^1.0.0",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.32",
"karma-webpack": "^2.0.2",
"karma-webpack": "^2.0.13",
"lcov-result-merger": "^2.0.0",
"mocha": "^5.0.1",
"mocha": "^5.0.4",
"monk": "^6.0.5",
"nightwatch": "^0.9.12",
"puppeteer": "^1.1.0",
"nightwatch": "^0.9.20",
"puppeteer": "^1.1.1",
"require-again": "^2.0.0",
"selenium-server": "^3.9.1",
"sinon": "^4.3.0",
"selenium-server": "^3.11.0",
"sinon": "^4.4.5",
"sinon-chai": "^2.8.0",
"sinon-stub-promise": "^4.0.0",
"webpack-bundle-analyzer": "^2.2.1",
"webpack-bundle-analyzer": "^2.11.1",
"webpack-dev-middleware": "^2.0.5",
"webpack-hot-middleware": "^2.6.1"
"webpack-hot-middleware": "^2.21.2"
},
"optionalDependencies": {
"node-rdkafka": "^2.3.0"
}
}

View File

@@ -1,5 +1,4 @@
require('babel-register');
require('babel-polyfill');
// This file is used for creating paypal billing plans. PayPal doesn't have a web interface for setting up recurring
// payment plan definitions, instead you have to create it via their REST SDK and keep it updated the same way. So this

View File

@@ -2,9 +2,9 @@ import {
generateUser,
} from '../../../../helpers/api-v3-integration.helper';
import xml2js from 'xml2js';
import Bluebird from 'bluebird';
import util from 'util';
let parseStringAsync = Bluebird.promisify(xml2js.parseString, {context: xml2js});
let parseStringAsync = util.promisify(xml2js.parseString).bind(xml2js);
describe('GET /export/userdata.xml', () => {
// TODO disabled because it randomly causes the build to fail

View File

@@ -2,8 +2,8 @@ import {
createAndPopulateGroup,
translate as t,
generateUser,
sleep,
} from '../../../../helpers/api-v3-integration.helper';
import Bluebird from 'bluebird';
describe('POST /groups/:groupId/quests/accept', () => {
const PET_QUEST = 'whale';
@@ -140,7 +140,7 @@ describe('POST /groups/:groupId/quests/accept', () => {
// quest will start after everyone has accepted
await partyMembers[1].post(`/groups/${questingGroup._id}/quests/accept`);
await Bluebird.delay(500);
await sleep(0.5);
await rejectingMember.sync();

View File

@@ -2,8 +2,8 @@ import {
createAndPopulateGroup,
translate as t,
generateUser,
sleep,
} from '../../../../helpers/api-v3-integration.helper';
import Bluebird from 'bluebird';
describe('POST /groups/:groupId/quests/force-start', () => {
const PET_QUEST = 'whale';
@@ -135,7 +135,7 @@ describe('POST /groups/:groupId/quests/force-start', () => {
await leader.post(`/groups/${questingGroup._id}/quests/force-start`);
await Bluebird.delay(500);
await sleep(0.5);
await Promise.all([
partyMemberThatRejects.sync(),
@@ -161,7 +161,7 @@ describe('POST /groups/:groupId/quests/force-start', () => {
await leader.post(`/groups/${questingGroup._id}/quests/force-start`);
await Bluebird.delay(500);
await sleep(0.5);
await questingGroup.sync();
@@ -184,7 +184,7 @@ describe('POST /groups/:groupId/quests/force-start', () => {
await leader.post(`/groups/${questingGroup._id}/quests/force-start`);
await Bluebird.delay(500);
await sleep(0.5);
await questingGroup.sync();
@@ -201,7 +201,7 @@ describe('POST /groups/:groupId/quests/force-start', () => {
await leader.post(`/groups/${questingGroup._id}/quests/force-start`);
await Bluebird.delay(500);
await sleep(0.5);
await questingGroup.sync();
@@ -222,7 +222,7 @@ describe('POST /groups/:groupId/quests/force-start', () => {
await leader.post(`/groups/${questingGroup._id}/quests/force-start`);
await Bluebird.delay(500);
await sleep(0.5);
await questingGroup.sync();

View File

@@ -2,9 +2,9 @@ import {
createAndPopulateGroup,
translate as t,
generateUser,
sleep,
} from '../../../../helpers/api-v3-integration.helper';
import { v4 as generateUUID } from 'uuid';
import Bluebird from 'bluebird';
describe('POST /groups/:groupId/quests/reject', () => {
let questingGroup;
@@ -168,7 +168,7 @@ describe('POST /groups/:groupId/quests/reject', () => {
// quest will start after everyone has accepted or rejected
await rejectingMember.post(`/groups/${questingGroup._id}/quests/reject`);
await Bluebird.delay(500);
await sleep(0.5);
await questingGroup.sync();

View File

@@ -2,7 +2,6 @@ import {
generateUser,
translate as t,
} from '../../../../helpers/api-integration/v3';
import Bluebird from 'bluebird';
describe('GET /shops/market', () => {
let user;
@@ -42,13 +41,13 @@ describe('GET /shops/market', () => {
return array;
}, []);
let results = await Bluebird.each(items, (item) => {
let results = await Promise.all(items.map((item) => {
let { purchaseType, key } = item;
return user.post(`/user/purchase/${purchaseType}/${key}`);
});
}));
expect(results.length).to.be.greaterThan(0);
results.forEach((item) => {
items.forEach((item) => {
expect(item).to.include.keys('key', 'text', 'notes', 'class', 'value', 'currency');
});
});

View File

@@ -2,8 +2,8 @@ import {
generateUser,
generateGroup,
generateChallenge,
sleep,
} from '../../../../../helpers/api-integration/v3';
import Bluebird from 'bluebird';
import { find } from 'lodash';
describe('POST /tasks/:id/score/:direction', () => {
@@ -27,7 +27,7 @@ describe('POST /tasks/:id/score/:direction', () => {
text: 'test habit',
type: 'habit',
});
await Bluebird.delay(1000);
await sleep(1);
let updatedUser = await user.get('/user');
usersChallengeTaskId = updatedUser.tasksOrder.habits[0];
});
@@ -65,7 +65,7 @@ describe('POST /tasks/:id/score/:direction', () => {
text: 'test daily',
type: 'daily',
});
await Bluebird.delay(1000);
await sleep(1);
let updatedUser = await user.get('/user');
usersChallengeTaskId = updatedUser.tasksOrder.dailys[0];
});
@@ -109,7 +109,7 @@ describe('POST /tasks/:id/score/:direction', () => {
text: 'test todo',
type: 'todo',
});
await Bluebird.delay(1000);
await sleep(1);
let updatedUser = await user.get('/user');
usersChallengeTaskId = updatedUser.tasksOrder.todos[0];
});
@@ -134,7 +134,7 @@ describe('POST /tasks/:id/score/:direction', () => {
text: 'test reward',
type: 'reward',
});
await Bluebird.delay(1000);
await sleep(1);
let updatedUser = await user.get('/user');
usersChallengeTaskId = updatedUser.tasksOrder.todos[0];
});

View File

@@ -11,7 +11,6 @@ import {
each,
map,
} from 'lodash';
import Bluebird from 'bluebird';
import {
sha1MakeSalt,
sha1Encrypt as sha1EncryptPassword,
@@ -104,7 +103,7 @@ describe('DELETE /user', () => {
password,
});
await Bluebird.all(map(ids, id => {
await Promise.all(map(ids, id => {
return expect(checkExistence('tasks', id)).to.eventually.eql(false);
}));
});

View File

@@ -1,7 +1,6 @@
/* eslint-disable global-require */
import moment from 'moment';
import nconf from 'nconf';
import Bluebird from 'bluebird';
import requireAgain from 'require-again';
import { recoverCron, cron } from '../../../../../website/server/libs/cron';
import { model as User } from '../../../../../website/server/models/user';
@@ -1363,7 +1362,7 @@ describe('recoverCron', () => {
});
it('throws an error if user cannot be found', async () => {
execStub.returns(Bluebird.resolve(null));
execStub.returns(Promise.resolve(null));
try {
await recoverCron(status, locals);
@@ -1374,8 +1373,8 @@ describe('recoverCron', () => {
});
it('increases status.times count and reruns up to 4 times', async () => {
execStub.returns(Bluebird.resolve({_cronSignature: 'RUNNING_CRON'}));
execStub.onCall(4).returns(Bluebird.resolve({_cronSignature: 'NOT_RUNNING'}));
execStub.returns(Promise.resolve({_cronSignature: 'RUNNING_CRON'}));
execStub.onCall(4).returns(Promise.resolve({_cronSignature: 'NOT_RUNNING'}));
await recoverCron(status, locals);
@@ -1384,7 +1383,7 @@ describe('recoverCron', () => {
});
it('throws an error if recoverCron runs 5 times', async () => {
execStub.returns(Bluebird.resolve({_cronSignature: 'RUNNING_CRON'}));
execStub.returns(Promise.resolve({_cronSignature: 'RUNNING_CRON'}));
try {
await recoverCron(status, locals);

View File

@@ -47,7 +47,7 @@ describe('slack', () => {
expect(IncomingWebhook.prototype.send).to.be.calledOnce;
expect(IncomingWebhook.prototype.send).to.be.calledWith({
text: 'flagger (flagger-id) flagged a message (language: flagger-lang)',
text: 'flagger (flagger-id; language: flagger-lang) flagged a message',
attachments: [{
fallback: 'Flag Message',
color: 'danger',

View File

@@ -8,7 +8,6 @@ import {
attachTranslateFunction,
} from '../../../../../website/server/middlewares/language';
import common from '../../../../../website/common';
import Bluebird from 'bluebird';
import { model as User } from '../../../../../website/server/models/user';
const i18n = common.i18n;
@@ -162,7 +161,7 @@ describe('language middleware', () => {
return this;
},
exec () {
return Bluebird.resolve({
return Promise.resolve({
preferences: {
language: 'it',
},

View File

@@ -1,4 +1,3 @@
import Bluebird from 'bluebird';
import moment from 'moment';
import { model as User } from '../../../../../website/server/models/user';
import { model as Group } from '../../../../../website/server/models/group';
@@ -123,7 +122,7 @@ describe('User Model', () => {
it('adds notifications without data for all given users via static method', async () => {
let user = new User();
let otherUser = new User();
await Bluebird.all([user.save(), otherUser.save()]);
await Promise.all([user.save(), otherUser.save()]);
await User.pushNotification({_id: {$in: [user._id, otherUser._id]}}, 'CRON');
@@ -149,7 +148,7 @@ describe('User Model', () => {
it('adds notifications with data and seen status for all given users via static method', async () => {
let user = new User();
let otherUser = new User();
await Bluebird.all([user.save(), otherUser.save()]);
await Promise.all([user.save(), otherUser.save()]);
await User.pushNotification({_id: {$in: [user._id, otherUser._id]}}, 'CRON', {field: 1}, true);

View File

@@ -1,7 +1,6 @@
import {
times,
} from 'lodash';
import Bluebird from 'bluebird';
import { v4 as generateUUID } from 'uuid';
import { ApiUser, ApiGroup, ApiChallenge } from '../api-classes';
import { requester } from '../requester';
@@ -106,7 +105,7 @@ export async function createAndPopulateGroup (settings = {}) {
guild: { guilds: [group._id] },
};
let members = await Bluebird.all(
let members = await Promise.all(
times(numberOfMembers, () => {
return generateUser(groupMembershipTypes[group.type]);
})
@@ -114,7 +113,7 @@ export async function createAndPopulateGroup (settings = {}) {
await group.update({ memberCount: numberOfMembers + 1});
let invitees = await Bluebird.all(
let invitees = await Promise.all(
times(numberOfInvites, () => {
return generateUser();
})
@@ -126,9 +125,9 @@ export async function createAndPopulateGroup (settings = {}) {
});
});
await Bluebird.all(invitationPromises);
await Promise.all(invitationPromises);
await Bluebird.map(invitees, (invitee) => invitee.sync());
await Promise.all(invitees.map((invitee) => invitee.sync()));
return {
groupLeader,

View File

@@ -2,8 +2,6 @@
/* eslint-disable global-require */
/* eslint-disable no-process-env */
import Bluebird from 'bluebird';
//------------------------------
// Global modules
//------------------------------
@@ -16,7 +14,6 @@ global.sinon = require('sinon');
let sinonStubPromise = require('sinon-stub-promise');
sinonStubPromise(global.sinon);
global.sandbox = sinon.sandbox.create();
global.Promise = Bluebird;
import setupNconf from '../../website/server/libs/setupNconf';
setupNconf('./config.json.example');

View File

@@ -1,7 +1 @@
export async function sleep (seconds = 1) {
let milliseconds = seconds * 1000;
return new Promise((resolve) => {
setTimeout(resolve, milliseconds);
});
}
export { default as sleep } from '../../website/server/libs/sleep';

View File

@@ -1,13 +1,11 @@
/* eslint-disable no-process-env */
import nconf from 'nconf';
import mongoose from 'mongoose';
import Bluebird from 'bluebird';
import setupNconf from '../../website/server/libs/setupNconf';
if (process.env.LOAD_SERVER === '0') { // when the server is in a different process we simply connect to mongoose
setupNconf('./config.json');
// Use Q promises instead of mpromise in mongoose
mongoose.Promise = Bluebird;
mongoose.connect(nconf.get('TEST_DB_URI'));
} else { // When running tests and the server in the same process
setupNconf('./config.json.example');

View File

@@ -3,7 +3,6 @@
--timeout 8000
--check-leaks
--globals io
-r babel-polyfill
--require babel-register
--require ./test/helpers/globals.helper
--exit

View File

@@ -11,12 +11,12 @@ source /home/vagrant/.profile
echo Setting up node...
cd /vagrant
nvm install
nvm use
nvm install 8
nvm use 8
nvm alias default current
echo Update npm...
npm install -g npm@4
npm install -g npm@5
echo Installing global modules...
npm install -g gulp mocha node-pre-gyp

View File

@@ -6,7 +6,7 @@
}
.promo_cupid_potions {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -142px -735px;
background-position: -284px -735px;
width: 138px;
height: 441px;
}
@@ -18,7 +18,7 @@
}
.promo_hippogriff {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -1172px -442px;
background-position: -1172px -587px;
width: 105px;
height: 105px;
}
@@ -34,6 +34,12 @@
width: 372px;
height: 196px;
}
.promo_rainbow_potions {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -142px -735px;
width: 141px;
height: 441px;
}
.promo_seasonalshop_broken {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -751px -171px;
@@ -42,7 +48,7 @@
}
.promo_take_this {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -1172px -548px;
background-position: -950px -171px;
width: 114px;
height: 87px;
}
@@ -64,6 +70,12 @@
width: 150px;
height: 150px;
}
.scene_sweeping {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -1172px -442px;
width: 138px;
height: 144px;
}
.scene_tavern {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px 0px;

View File

@@ -1798,42 +1798,48 @@
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Red {
.Mount_Body_BearCub-Rainbow {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -318px -985px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-RoyalPurple {
.Mount_Body_BearCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -212px -985px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Shade {
.Mount_Body_BearCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -106px -985px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Shimmer {
.Mount_Body_BearCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: 0px -985px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Skeleton {
.Mount_Body_BearCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Spooky {
.Mount_Body_BearCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -440px -299px;
@@ -1842,139 +1848,139 @@
}
.Mount_Body_BearCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px -530px;
background-position: -1081px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px -424px;
background-position: -1081px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px -318px;
background-position: -1081px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px -212px;
background-position: -1081px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px -106px;
background-position: -1081px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px 0px;
background-position: -954px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -954px -879px;
background-position: -848px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -848px -879px;
background-position: -742px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -742px -879px;
background-position: -636px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -636px -879px;
background-position: -530px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -530px -879px;
background-position: -424px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -424px -879px;
background-position: -318px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -318px -879px;
background-position: -212px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -212px -879px;
background-position: -106px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -106px -879px;
background-position: 0px -879px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: 0px -879px;
background-position: -975px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -975px -742px;
background-position: -975px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -975px -636px;
background-position: -975px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -975px -530px;
background-position: -975px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -975px -424px;
background-position: -975px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -975px -318px;
background-position: -975px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -975px -212px;
background-position: -975px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -975px -106px;
background-position: -975px 0px;
width: 105px;
height: 105px;
}
@@ -2040,118 +2046,124 @@
}
.Mount_Body_Cactus-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -869px -636px;
background-position: -869px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -869px -530px;
background-position: -869px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -869px -424px;
background-position: -869px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -869px -318px;
background-position: -869px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -869px -212px;
background-position: -869px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -869px -106px;
background-position: -869px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -869px 0px;
background-position: -742px -667px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -742px -667px;
background-position: -636px -667px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -636px -667px;
background-position: -530px -667px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -530px -667px;
background-position: -424px -667px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -424px -667px;
background-position: -318px -667px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -318px -667px;
background-position: -212px -667px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -212px -667px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -106px -667px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-RoyalPurple {
.Mount_Body_Cactus-Rainbow {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: 0px -667px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Shade {
.Mount_Body_Cactus-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -763px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Shimmer {
.Mount_Body_Cactus-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -763px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Skeleton {
.Mount_Body_Cactus-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -763px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Spooky {
.Mount_Body_Cactus-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -763px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -763px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -763px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -440px -178px;
@@ -2160,127 +2172,115 @@
}
.Mount_Body_Cactus-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -763px 0px;
background-position: -530px -561px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -636px -561px;
background-position: -424px -561px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -530px -561px;
background-position: -318px -561px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -424px -561px;
background-position: -212px -561px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -318px -561px;
background-position: -106px -561px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -212px -561px;
background-position: 0px -561px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -106px -561px;
background-position: -424px -1197px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: 0px -561px;
background-position: -1081px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -424px -1197px;
background-position: -848px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -1081px -636px;
background-position: -742px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -975px 0px;
background-position: -636px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -848px -773px;
background-position: -530px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -742px -773px;
background-position: -424px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -636px -773px;
background-position: -318px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -530px -773px;
background-position: -212px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -424px -773px;
background-position: -106px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -318px -773px;
background-position: 0px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -212px -773px;
background-position: -869px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -106px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: 0px -773px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
background-position: -763px -106px;
background-position: -636px -561px;
width: 105px;
height: 105px;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -1,18 +1,65 @@
<template lang="pug">
b-modal#report-flag(:title='$t("abuseFlagModalHeading")', size='lg', :hide-footer='true')
.modal-header
h4(v-html="$t('abuseFlagModalHeading', reportData)")
b-modal#report-flag(:title='$t("abuseFlagModalHeading")', size='md', :hide-footer='true')
.modal-body
strong(v-html="$t('abuseFlagModalHeading', reportData)")
blockquote
div(v-markdown='abuseObject.text')
p(v-html="$t('abuseFlagModalBody', abuseFlagModalBody)")
.modal-footer
div
strong {{$t('whyReportingPost')}}
span.optional {{$t('optional')}}
textarea.form-control(v-model='reportComment', :placeholder='$t("whyReportingPostPlaceholder")')
small(v-html="$t('abuseFlagModalBody', abuseFlagModalBody)")
.footer.text-center
button.pull-left.btn.btn-danger(@click='clearFlagCount()', v-if='user.contributor.admin && abuseObject.flagCount > 0')
| Reset Flag Count
button.btn.btn-primary(@click='close()') {{ $t('cancel') }}
button.btn.btn-danger(@click='reportAbuse()') {{ $t('abuseFlagModalButton') }}
a.cancel-link(@click.prevent='close()') {{ $t('cancel') }}
button.btn.btn-danger(@click='reportAbuse()') {{ $t('report') }}
</template>
<style>
#report-flag h5 {
color: #f23035;
}
</style>
<style lang="scss" scoped>
@import '~client/assets/scss/colors.scss';
.modal-body {
margin-top: 1em;
}
blockquote {
border-radius: 2px;
background-color: #f4f4f4;
padding: 1em;
margin-top: 1em;
}
textarea {
margin-top: 1em;
margin-bottom: 1em;
border-radius: 2px;
border: solid 1px $gray-400;
min-height: 106px;
}
.footer {
padding: 1em;
padding-bottom: 2em;
}
a.cancel-link {
color: $blue-10;
margin-right: .5em;
}
.optional {
color: $gray-200;
float: right;
}
</style>
<script>
import { mapState } from 'client/libs/store';
import notifications from 'client/mixins/notifications';
@@ -45,6 +92,7 @@ export default {
abuseFlagModalBody,
abuseObject: '',
groupId: '',
reportComment: '',
};
},
created () {
@@ -64,9 +112,11 @@ export default {
},
async reportAbuse () {
this.notify('Thank you for reporting this violation. The moderators have been notified.');
await this.$store.dispatch('chat:flag', {
groupId: this.groupId,
chatId: this.abuseObject.id,
comment: this.reportComment,
});
this.close();

View File

@@ -904,7 +904,7 @@
this.$store.dispatch('common:hatch', {egg: pet.eggKey, hatchingPotion: pet.potionKey});
this.closeHatchPetDialog();
this.$root.$emit('hatchedPet::open', pet);
// this.$root.$emit('hatchedPet::open', pet);
},
onDragStart (ev, food) {

View File

@@ -79,11 +79,11 @@ export default {
}
if (filters.guildSize && filters.guildSize.indexOf('silver_tier') !== -1) {
correctSize = group.memberCount > 100 && group.memberCount < 999;
correctSize = group.memberCount > 100 && group.memberCount < 1000;
}
if (filters.guildSize && filters.guildSize.indexOf('bronze_tier') !== -1) {
correctSize = group.memberCount < 99;
correctSize = group.memberCount < 100;
}
return passedSearch && hasCategories && isMember && isLeader && correctSize;

View File

@@ -69,8 +69,10 @@ export async function like (store, payload) {
}
export async function flag (store, payload) {
let url = `/api/v3/groups/${payload.groupId}/chat/${payload.chatId}/flag`;
let response = await axios.post(url);
const url = `/api/v3/groups/${payload.groupId}/chat/${payload.chatId}/flag`;
const response = await axios.post(url, {
comment: payload.comment,
});
return response.data.data;
}

View File

@@ -191,6 +191,7 @@
"hatchingPotionShimmer": "Блещукащ цвят",
"hatchingPotionFairy": "Фейски цвят",
"hatchingPotionStarryNight": "Звездна нощ",
"hatchingPotionRainbow": "Дъга",
"hatchingPotionNotes": "Излейте това върху яйце и от него ще се излюпи любимец с(ъс) <%= potText(locale) %>.",
"premiumPotionAddlNotes": "Не може да се използва върху яйца за любимци от мисии.",
"foodMeat": "Месо",

View File

@@ -167,8 +167,8 @@
"achievementBurnoutText": "Помогнал(а) за победата над Умората и възстановяването на Духовете на изтощението по време на Есенния фестивал — 2015 г.",
"achievementBewilder": "Спасител на Мъглоград",
"achievementBewilderText": "Помогнал(а) за победата над Озадачителя по време на Буйното пролетно събитие — 2016 г.",
"achievementDysheartener": "Savior of the Shattered",
"achievementDysheartenerText": "Helped defeat the Dysheartener during the 2018 Valentine's Event!",
"achievementDysheartener": "Спасител на разбитите",
"achievementDysheartenerText": "Помогнал(а) за победата над Обезсърчителя по време на събитието за св. Валентин — 2018 г.",
"checkOutProgress": "Вижте напредъка ми в Хабитика!",
"cards": "Картички",
"sentCardToUser": "Изпратихте картичка на <%= profileName %>",

View File

@@ -143,11 +143,14 @@
"badAmountOfGemsToSend": "Стойността трябва да бъде между 1 и текущия Ви брой диаманти.",
"report": "Докладване",
"abuseFlag": "Докладване на нарушение на Обществените правила",
"abuseFlagModalHeading": "Докладване на <%= name %> за нарушение?",
"abuseFlagModalBody": "Наистина ли искате да докладвате тази публикация? Трябва да докладвате САМО публикации, които нарушават <%= firstLinkStart %>Обществените правила<%= linkEnd %> и/или <%= secondLinkStart %>Условията на услугата<%= linkEnd %>. Неуместното докладване на публикация е нарушение на Обществените правила, и може да получите наказание. Правилните причина за докладване на публикация включват (но не се изчерпват):<br><br><ul style='margin-left: 10px;'><li>ругаене, религиозни клетви;</li><li>фанатизъм, обиди;</li><li>теми за възрастни;</li><li>насилие, дори и на шега;</li><li>нежелани или безсмислени съобщения.</li></ul>",
"abuseFlagModalHeading": "Report a Violation",
"abuseFlagModalBody": "Are you sure you want to report this post? You should <strong>only</strong> 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.",
"abuseFlagModalButton": "Докладване за нарушение",
"abuseReported": "Благодарим Ви, че докладвахте за това нарушение. Модераторите бяха уведомени.",
"abuseAlreadyReported": "Вече сте докладвали това съобщение.",
"whyReportingPost": "Why are you reporting this post?",
"whyReportingPostPlaceholder": "Please help our moderators by letting us know why you are reporting this post for a violation, e.g., spam, swearing, religious oaths, bigotry, slurs, adult topics, violence.",
"optional": "Optional",
"needsText": "Моля, напишете съобщение.",
"needsTextPlaceholder": "Въведете съобщението си тук.",
"copyMessageAsToDo": "Копиране на съобщението като задача",

View File

@@ -118,6 +118,7 @@
"winter2018MistletoeSet": "Имелен лечител (лечител)",
"winter2018ReindeerSet": "Еленов мошеник (мошеник)",
"eventAvailability": "Налично за купуване до <%= date(locale) %>.",
"dateEndMarch": "31 март",
"dateEndApril": "19 април",
"dateEndMay": "17 май",
"dateEndJune": "14 юни",

View File

@@ -138,5 +138,8 @@
"dragThisPotion": "Завлачете <%= potionName %> до яйце и ще се излюпи нов любимец!",
"clickOnEggToHatch": "Щракнете върху яйце, за да използвате своята излюпваща отвара с(ъс) <%= potionName %> и ще се излюпи нов любимец!",
"hatchDialogText": "Изсипете своята излюпваща отвара с(ъс) <%= potionName %> върху своето яйце на <%= eggName %> и от него ще се излюпи <%= petName %>.",
"clickOnPotionToHatch": "Щракнете върху излюпваща отвара, която да използвате върху върху своето яйце на <%= eggName %> и от него ще се излюпи нов любимец!"
"clickOnPotionToHatch": "Щракнете върху излюпваща отвара, която да използвате върху върху своето яйце на <%= eggName %> и от него ще се излюпи нов любимец!",
"notEnoughPets": "You have not collected enough pets",
"notEnoughMounts": "You have not collected enough mounts",
"notEnoughPetsMounts": "You have not collected enough pets and mounts"
}

View File

@@ -191,6 +191,7 @@
"hatchingPotionShimmer": "třpytivý",
"hatchingPotionFairy": "pohádkový",
"hatchingPotionStarryNight": "Hvězdná Noc",
"hatchingPotionRainbow": "Rainbow",
"hatchingPotionNotes": "Nalij ho na vejce a vylíhne se ti <%= potText(locale) %> mazlíček.",
"premiumPotionAddlNotes": "Nelze použít na vejce mazlíčků z výprav.",
"foodMeat": "Maso",

View File

@@ -143,11 +143,14 @@
"badAmountOfGemsToSend": "Částka musí být mezi 1 a vaším současným počtem drahokamů.",
"report": "Report",
"abuseFlag": "Nahlaš porušení Zásad komunity",
"abuseFlagModalHeading": "Nahlásit <%= name %> za porušení?",
"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, religious oaths</li><li>bigotry, slurs</li><li>adult topics</li><li>violence, including as a joke</li><li>spam, nonsensical messages</li></ul>",
"abuseFlagModalHeading": "Report a Violation",
"abuseFlagModalBody": "Are you sure you want to report this post? You should <strong>only</strong> 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.",
"abuseFlagModalButton": "Nahlásit porušení pravidel",
"abuseReported": "Děkujeme za nahlášení tohoto příspěvku. Moderátoři byli upozorněni.",
"abuseAlreadyReported": "Již jsi tento příspěvek nahlásil.",
"whyReportingPost": "Why are you reporting this post?",
"whyReportingPostPlaceholder": "Please help our moderators by letting us know why you are reporting this post for a violation, e.g., spam, swearing, religious oaths, bigotry, slurs, adult topics, violence.",
"optional": "Optional",
"needsText": "Prosím, napiš zprávu.",
"needsTextPlaceholder": "Napiš svou zprávu sem.",
"copyMessageAsToDo": "Zkopírovat zprávu jako Úkol",

View File

@@ -118,6 +118,7 @@
"winter2018MistletoeSet": "Léčitel z Jmelí (Léčitel)",
"winter2018ReindeerSet": "Sobí Zloděj (Zloděj)",
"eventAvailability": "Dostupný k zakoupení do <%= date(locale) %>.",
"dateEndMarch": "March 31",
"dateEndApril": "Duben 19",
"dateEndMay": "Květen 17",
"dateEndJune": "Červen 14",

View File

@@ -138,5 +138,8 @@
"dragThisPotion": "Drag this <%= potionName %> to an Egg and hatch a new pet!",
"clickOnEggToHatch": "Click on an Egg to use your <%= potionName %> hatching potion and hatch a new pet!",
"hatchDialogText": "Pour your <%= potionName %> hatching potion on your <%= eggName %> egg, and it will hatch into a <%= petName %>.",
"clickOnPotionToHatch": "Click on a hatching potion to use it on your <%= eggName %> and hatch a new pet!"
"clickOnPotionToHatch": "Click on a hatching potion to use it on your <%= eggName %> and hatch a new pet!",
"notEnoughPets": "You have not collected enough pets",
"notEnoughMounts": "You have not collected enough mounts",
"notEnoughPetsMounts": "You have not collected enough pets and mounts"
}

View File

@@ -191,6 +191,7 @@
"hatchingPotionShimmer": "Glimmer",
"hatchingPotionFairy": "Fe",
"hatchingPotionStarryNight": "Starry Night",
"hatchingPotionRainbow": "Rainbow",
"hatchingPotionNotes": "Hæld på et æg, og det vil udklække til et <%= potText(locale) %> kæledyr.",
"premiumPotionAddlNotes": "Kan ikke bruges på quest-æg.",
"foodMeat": "Kød",

View File

@@ -143,11 +143,14 @@
"badAmountOfGemsToSend": "Mængden skal være mellem 1 og dit nuværende antal ædelsten.",
"report": "Report",
"abuseFlag": "Anmeld overtrædelse af Retningslinjer for Fællesskabet",
"abuseFlagModalHeading": "Anmeld <%= name %> for overtrædelse?",
"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, religious oaths</li><li>bigotry, slurs</li><li>adult topics</li><li>violence, including as a joke</li><li>spam, nonsensical messages</li></ul>",
"abuseFlagModalHeading": "Report a Violation",
"abuseFlagModalBody": "Are you sure you want to report this post? You should <strong>only</strong> 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.",
"abuseFlagModalButton": "Anmeld Overtrædelse",
"abuseReported": "Tak for at anmelde denne overtrædelse. Moderatorerne er blevet informeret.",
"abuseAlreadyReported": "Du har allerede anmeldt denne besked.",
"whyReportingPost": "Why are you reporting this post?",
"whyReportingPostPlaceholder": "Please help our moderators by letting us know why you are reporting this post for a violation, e.g., spam, swearing, religious oaths, bigotry, slurs, adult topics, violence.",
"optional": "Optional",
"needsText": "Indtast venligst en besked.",
"needsTextPlaceholder": "Skriv din besked her.",
"copyMessageAsToDo": "Kopier besked som To-Do",

View File

@@ -118,6 +118,7 @@
"winter2018MistletoeSet": "Mistletoe Healer (Healer)",
"winter2018ReindeerSet": "Reindeer Rogue (Rogue)",
"eventAvailability": "Tilgændelig til køb indtil <%= date(locale) %>.",
"dateEndMarch": "March 31",
"dateEndApril": "19. april",
"dateEndMay": "17. maj",
"dateEndJune": "Juni 14",

View File

@@ -138,5 +138,8 @@
"dragThisPotion": "Drag this <%= potionName %> to an Egg and hatch a new pet!",
"clickOnEggToHatch": "Click on an Egg to use your <%= potionName %> hatching potion and hatch a new pet!",
"hatchDialogText": "Pour your <%= potionName %> hatching potion on your <%= eggName %> egg, and it will hatch into a <%= petName %>.",
"clickOnPotionToHatch": "Click on a hatching potion to use it on your <%= eggName %> and hatch a new pet!"
"clickOnPotionToHatch": "Click on a hatching potion to use it on your <%= eggName %> and hatch a new pet!",
"notEnoughPets": "You have not collected enough pets",
"notEnoughMounts": "You have not collected enough mounts",
"notEnoughPetsMounts": "You have not collected enough pets and mounts"
}

View File

@@ -191,6 +191,7 @@
"hatchingPotionShimmer": "Schimmerndes",
"hatchingPotionFairy": "Feenhaftes",
"hatchingPotionStarryNight": "Sternenklare Nacht",
"hatchingPotionRainbow": "Rainbow",
"hatchingPotionNotes": "Gieße dies über ein Ei und es wird ein <%= potText(locale) %> Haustier daraus schlüpfen.",
"premiumPotionAddlNotes": "Nicht auf Eier von Quest-Haustieren anwendbar.",
"foodMeat": "Fleisch",

View File

@@ -143,11 +143,14 @@
"badAmountOfGemsToSend": "Die Menge muss zwischen 1 und Deiner aktuellen Edelsteinanzahl liegen.",
"report": "Melden",
"abuseFlag": "Verletzung der Community-Richtlinien melden",
"abuseFlagModalHeading": "<%= name %> melden?",
"abuseFlagModalBody": "Möchtest Du diesen Beitrag wirklich melden? Du solltest AUSSCHLIESSLICH Beiträge melden, die unsere <%= firstLinkStart %>Community-Richtlinien<%= linkEnd %> und/oder unsere <%= secondLinkStart %>Nutzungsbedingungen<%= linkEnd %> verletzen. Das ungerechtfertigte Melden von Beiträgen stellt eine Verletzung der Community-Richtlinien dar und kann geahndet werden. Gute Gründe einen Beitrag zu melden sind unter anderem: <br><br><ul style='margin-left: 10px;'><li>Fluchen, Religiöse Schwüre</li><li>Intoleranz, herabwürdigende Bezeichnung jeglicher Ethnien</li><li>Nicht jugendfreie Themen</li><li>Gewalt, auch innerhalb eines Witzes</li><li>Spam, unsinnige Nachrichten</li></ul>.",
"abuseFlagModalHeading": "Report a Violation",
"abuseFlagModalBody": "Are you sure you want to report this post? You should <strong>only</strong> 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.",
"abuseFlagModalButton": "Verstoß melden",
"abuseReported": "Danke, dass Du diesen Verstoß gemeldet hast. Die Moderatoren wurden benachrichtigt.",
"abuseAlreadyReported": "Du hast diese Nachricht bereits gemeldet.",
"whyReportingPost": "Why are you reporting this post?",
"whyReportingPostPlaceholder": "Please help our moderators by letting us know why you are reporting this post for a violation, e.g., spam, swearing, religious oaths, bigotry, slurs, adult topics, violence.",
"optional": "Optional",
"needsText": "Bitte gib eine Nachricht ein.",
"needsTextPlaceholder": "Gib Deine Nachricht hier ein.",
"copyMessageAsToDo": "Nachricht als To-Do übernehmen",

View File

@@ -118,6 +118,7 @@
"winter2018MistletoeSet": "Mistelzweigheiler (Heiler)",
"winter2018ReindeerSet": "Rentier-Schurke (Schurke)",
"eventAvailability": "Zum Kauf verfügbar bis zum <%= date(locale) %>.",
"dateEndMarch": "March 31",
"dateEndApril": "19. April",
"dateEndMay": "17. Mai",
"dateEndJune": "14. Juni",

View File

@@ -138,5 +138,8 @@
"dragThisPotion": "Ziehe dieses <%= potionName %> zu einem Ei und brüte ein neues Haustier aus!",
"clickOnEggToHatch": "Klicke auf ein Ei um Dein <%= potionName %> Schlüpfelixier zu nutzen und ein neues Haustier auszubrüten!",
"hatchDialogText": "Gieße Dein <%= potionName %> Schlüpfelixier auf Dein <%= eggName %>-Ei und es wird ein <%= petName %> daraus schlüpfen.",
"clickOnPotionToHatch": "Klicke auf ein Schlüpfelixier, um es über Dein <%= eggName %> zu gießen und ein neues Haustier schlüpfen zu lassen!"
"clickOnPotionToHatch": "Klicke auf ein Schlüpfelixier, um es über Dein <%= eggName %> zu gießen und ein neues Haustier schlüpfen zu lassen!",
"notEnoughPets": "You have not collected enough pets",
"notEnoughMounts": "You have not collected enough mounts",
"notEnoughPetsMounts": "You have not collected enough pets and mounts"
}

View File

@@ -256,6 +256,7 @@
"hatchingPotionShimmer": "Shimmer",
"hatchingPotionFairy": "Fairy",
"hatchingPotionStarryNight": "Starry Night",
"hatchingPotionRainbow": "Rainbow",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Not usable on quest pet eggs.",

View File

@@ -145,11 +145,14 @@
"badAmountOfGemsToSend": "Amount must be within 1 and your current number of gems.",
"report": "Report",
"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, religious oaths</li><li>bigotry, slurs</li><li>adult topics</li><li>violence, including as a joke</li><li>spam, nonsensical messages</li></ul>",
"abuseFlagModalHeading": "Report a Violation",
"abuseFlagModalBody": "Are you sure you want to report this post? You should <strong>only</strong> 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.",
"abuseFlagModalButton": "Report Violation",
"abuseReported": "Thank you for reporting this violation. The moderators have been notified.",
"abuseAlreadyReported": "You have already reported this message.",
"whyReportingPost": "Why are you reporting this post?",
"whyReportingPostPlaceholder": "Please help our moderators by letting us know why you are reporting this post for a violation, e.g., spam, swearing, religious oaths, bigotry, slurs, adult topics, violence.",
"optional": "Optional",
"needsText": "Please type a message.",
"needsTextPlaceholder": "Type your message here.",
"copyMessageAsToDo": "Copy message as To-Do",

View File

@@ -118,6 +118,7 @@
"winter2018MistletoeSet": "Mistletoe Healer (Healer)",
"winter2018ReindeerSet": "Reindeer Rogue (Rogue)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"dateEndMarch": "March 31",
"dateEndApril": "April 19",
"dateEndMay": "May 17",
"dateEndJune": "June 14",

View File

@@ -191,6 +191,7 @@
"hatchingPotionShimmer": "Shimmer",
"hatchingPotionFairy": "Fairy",
"hatchingPotionStarryNight": "Starry Night",
"hatchingPotionRainbow": "Rainbow",
"hatchingPotionNotes": "Pour this on an egg, an' it'll hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Ye canna use this on quest pet eggs.",
"foodMeat": "Meat",

View File

@@ -143,11 +143,14 @@
"badAmountOfGemsToSend": "Amount must be within 1 and your current number of gems.",
"report": "Report",
"abuseFlag": "Report violation o' Rules o' th' Sea",
"abuseFlagModalHeading": "Report <%= name %> fer 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, religious oaths</li><li>bigotry, slurs</li><li>adult topics</li><li>violence, including as a joke</li><li>spam, nonsensical messages</li></ul>",
"abuseFlagModalHeading": "Report a Violation",
"abuseFlagModalBody": "Are you sure you want to report this post? You should <strong>only</strong> 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.",
"abuseFlagModalButton": "Report Violation",
"abuseReported": "Thank ye for reportin' this violation. Th' moderators have been notified.",
"abuseAlreadyReported": "Ye have already reported this message.",
"whyReportingPost": "Why are you reporting this post?",
"whyReportingPostPlaceholder": "Please help our moderators by letting us know why you are reporting this post for a violation, e.g., spam, swearing, religious oaths, bigotry, slurs, adult topics, violence.",
"optional": "Optional",
"needsText": "Please type a message.",
"needsTextPlaceholder": "Type yer message here.",
"copyMessageAsToDo": "Copy message as T'-Do",

View File

@@ -118,6 +118,7 @@
"winter2018MistletoeSet": "Mistletoe Healer (Healer)",
"winter2018ReindeerSet": "Reindeer Rogue (Rogue)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"dateEndMarch": "March 31",
"dateEndApril": "April 19",
"dateEndMay": "May 17",
"dateEndJune": "June 14",

View File

@@ -138,5 +138,8 @@
"dragThisPotion": "Drag this <%= potionName %> to an Egg and hatch a new pet!",
"clickOnEggToHatch": "Click on an Egg to use your <%= potionName %> hatching potion and hatch a new pet!",
"hatchDialogText": "Pour your <%= potionName %> hatching potion on your <%= eggName %> egg, and it will hatch into a <%= petName %>.",
"clickOnPotionToHatch": "Click on a hatching potion to use it on your <%= eggName %> and hatch a new pet!"
"clickOnPotionToHatch": "Click on a hatching potion to use it on your <%= eggName %> and hatch a new pet!",
"notEnoughPets": "You have not collected enough pets",
"notEnoughMounts": "You have not collected enough mounts",
"notEnoughPetsMounts": "You have not collected enough pets and mounts"
}

View File

@@ -191,6 +191,7 @@
"hatchingPotionShimmer": "Shimmer",
"hatchingPotionFairy": "Fairy",
"hatchingPotionStarryNight": "Starry Night",
"hatchingPotionRainbow": "Rainbow",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Not usable on quest pet eggs.",
"foodMeat": "Meat",

View File

@@ -143,11 +143,14 @@
"badAmountOfGemsToSend": "Amount must be within 1 and your current number of gems.",
"report": "Report",
"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, religious oaths</li><li>bigotry, slurs</li><li>adult topics</li><li>violence, including as a joke</li><li>spam, nonsensical messages</li></ul>",
"abuseFlagModalHeading": "Report a Violation",
"abuseFlagModalBody": "Are you sure you want to report this post? You should <strong>only</strong> 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.",
"abuseFlagModalButton": "Report Violation",
"abuseReported": "Thank you for reporting this violation. The moderators have been notified.",
"abuseAlreadyReported": "You have already reported this message.",
"whyReportingPost": "Why are you reporting this post?",
"whyReportingPostPlaceholder": "Please help our moderators by letting us know why you are reporting this post for a violation, e.g., spam, swearing, religious oaths, bigotry, slurs, adult topics, violence.",
"optional": "Optional",
"needsText": "Please type a message.",
"needsTextPlaceholder": "Type your message here.",
"copyMessageAsToDo": "Copy message as To-Do",

View File

@@ -118,6 +118,7 @@
"winter2018MistletoeSet": "Mistletoe Healer (Healer)",
"winter2018ReindeerSet": "Reindeer Rogue (Rogue)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"dateEndMarch": "March 31",
"dateEndApril": "April 19",
"dateEndMay": "May 17",
"dateEndJune": "June 14",

View File

@@ -138,5 +138,8 @@
"dragThisPotion": "Drag this <%= potionName %> to an Egg and hatch a new pet!",
"clickOnEggToHatch": "Click on an Egg to use your <%= potionName %> hatching potion and hatch a new pet!",
"hatchDialogText": "Pour your <%= potionName %> hatching potion on your <%= eggName %> egg, and it will hatch into a <%= petName %>.",
"clickOnPotionToHatch": "Click on a hatching potion to use it on your <%= eggName %> and hatch a new pet!"
"clickOnPotionToHatch": "Click on a hatching potion to use it on your <%= eggName %> and hatch a new pet!",
"notEnoughPets": "You have not collected enough pets",
"notEnoughMounts": "You have not collected enough mounts",
"notEnoughPetsMounts": "You have not collected enough pets and mounts"
}

View File

@@ -191,6 +191,7 @@
"hatchingPotionShimmer": "Resplandeciente",
"hatchingPotionFairy": "Hada",
"hatchingPotionStarryNight": "Noche Estrellada",
"hatchingPotionRainbow": "Rainbow",
"hatchingPotionNotes": "Vierte esto en un huevo y eclosionará como una mascota <%= potText(locale) %>.",
"premiumPotionAddlNotes": "No puede usarse en huevos de mascota de misión.",
"foodMeat": "Carne",

View File

@@ -537,7 +537,7 @@
"armorSpecialSummer2017HealerText": "Cola Mardeplata",
"armorSpecialSummer2017HealerNotes": "¡Esta prenda de escamas plateadas transforma a su usuario en un verdadero Sanador Marino! Aumenta la Constitución en <%= con %>. Equipo de Edición Limitada Verano 2017.",
"armorSpecialFall2017RogueText": "Ropajes de Parche de Calabaza",
"armorSpecialFall2017RogueNotes": "Need to hide out? Crouch among the Jack o' Lanterns and these robes will conceal you! Increases Perception by <%= per %>. Limited Edition 2017 Autumn Gear.",
"armorSpecialFall2017RogueNotes": "¿Necesitas esconderte? ¡Agáchate ente las Cabezas de Halloween y este ropaje te ocultará! Aumenta la Percepción en <%= per %>. Equipamiento de Otoño de Edición Limitada del 2017.",
"armorSpecialFall2017WarriorText": "Fuerte y Dulce Armadura",
"armorSpecialFall2017WarriorNotes": "Esta armadura te protegerá como un delicioso cascarón de caramelo. Aumenta la Constitución en un <%= con %>. Equipamiento de Otoño de Edición Limitada del 2017.",
"armorSpecialFall2017MageText": "Toga de Baile de Disfraces",
@@ -698,11 +698,11 @@
"armorArmoireCoachDriverLiveryNotes": "Este pesado abrigo te protegerá del clima mientras conduces. ¡Además, también se ve bastante elegante! Aumenta la Fuerza en un <%= str %>. Armario Encantado: Conjunto de Conductor de Carruajes (Objeto 1 de 3).",
"armorArmoireRobeOfDiamondsText": "Ropaje de Diamantes",
"armorArmoireRobeOfDiamondsNotes": "Estos ropajes reales, no solo te hacen parecer nobles: te permiten ver la nobleza en otras personas. Aumenta la Percepción en <%= per %>. Armario Encantado: Conjunto de Rey de DIamantes. (Objeto 1 de 3).",
"armorArmoireFlutteryFrockText": "Fluttery Frock",
"armorArmoireFlutteryFrockNotes": "A light and airy gown with a wide skirt the butterflies might mistake for a giant blossom! Increases Constitution, Perception, and Strength by <%= attrs %> each. Enchanted Armoire: Fluttery Frock Set (Item 1 of 3).",
"armorArmoireFlutteryFrockText": "Hábito Trémulo",
"armorArmoireFlutteryFrockNotes": "¡Un vestido ligero y etéreo con una falda amplia que las mariposas podrían confundir con una flor gigante! Aumenta Constitución, Percepción, y Fuerza en un <%= attrs %> cada uno. Armario Encantado: Conjunto de Hábito Trémulo (Objeto 1 de 3)",
"headgear": "casco",
"headgearCapitalized": "Equipo de cabeza",
"headBase0Text": "No Headgear",
"headBase0Text": "Sin Equipo de cabeza",
"headBase0Notes": "Sin equipo de cabeza.",
"headWarrior1Text": "Yelmo de Cuero.",
"headWarrior1Notes": "Capuchón de resistente cuero hervido. Aumenta la fuerza en <%= str %>.",
@@ -747,11 +747,11 @@
"headSpecial0Text": "Casco de Sombras",
"headSpecial0Notes": "Sangre y ceniza, lava y obsidiana le dan a este casco su imagen y poder. Aumenta la inteligencia en <%= int %>.",
"headSpecial1Text": "Casco de cristal",
"headSpecial1Notes": "The favored crown of those who lead by example. Increases all Stats by <%= attrs %>.",
"headSpecial1Notes": "La corona favorita de aquellos que lideran con el ejemplo. Aumenta todas las Estadísticas en un <%= attrs %>.",
"headSpecial2Text": "Casco sin nombre",
"headSpecial2Notes": "Un testimonio de aquellos que se sacrificaron sin pedir nada a cambio. Aumenta tanto la inteligencia como la fuerza en <%= attrs %>.",
"headSpecialTakeThisText": "Yelmo 'Take This'",
"headSpecialTakeThisNotes": "This helm was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.",
"headSpecialTakeThisNotes": "Este casco se ganó al participar en un Desafío patrocinado por Take This. ¡Felicidades! Aumenta todas las Estadísticas en un <%= attrs %>.",
"headSpecialFireCoralCircletText": "Diadema de coral de fuego",
"headSpecialFireCoralCircletNotes": "Esta diadema, diseñada por los mejores alquimistas de Habitica, te permite respirar agua y bucear en busca de tesoros. Suma <%= per %> de percepción.",
"headSpecialPyromancersTurbanText": "Turbante de Pirómano",
@@ -911,21 +911,21 @@
"headSpecialFall2017RogueText": "Casco de Calabaza",
"headSpecialFall2017RogueNotes": "¿Preparado para tratos? ¡Hora de ponerse este festivo y brillante casco! Aumenta la Percepción en <%= per %>. Edición Limitada 2017 del Equipamiento de Otoño",
"headSpecialFall2017WarriorText": "Casco de Golosinas de Maíz.",
"headSpecialFall2017WarriorNotes": "This helm might look like a treat, but wayward tasks won't find it so sweet! Increases Strength by <%= str %>. Limited Edition 2017 Autumn Gear.",
"headSpecialFall2017MageText": "Masquerade Helm",
"headSpecialFall2017MageNotes": "When you appear in this feathery hat, everyone will be left guessing the identity of the magical stranger in the room! Increases Perception by <%= per %>. Limited Edition 2017 Autumn Gear.",
"headSpecialFall2017HealerText": "Haunted House Helm",
"headSpecialFall2017HealerNotes": "Invite spooky spirits and friendly creatures to seek your healing powers in this helm! Increases Intelligence by <%= int %>. Limited Edition 2017 Autumn Gear.",
"headSpecialNye2017Text": "Fanciful Party Hat",
"headSpecialNye2017Notes": "You've received a Fanciful Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
"headSpecialWinter2018RogueText": "Reindeer Helm",
"headSpecialWinter2018RogueNotes": "The perfect holiday disguise, with a built-in headlight! Increases Perception by <%= per %>. Limited Edition 2017-2018 Winter Gear.",
"headSpecialWinter2018WarriorText": "Giftbox Helm",
"headSpecialWinter2018WarriorNotes": "This jaunty box top and bow are not only festive, but quite sturdy. Increases Strength by <%= str %>. Limited Edition 2017-2018 Winter Gear.",
"headSpecialWinter2018MageText": "Sparkly Top Hat",
"headSpecialWinter2018MageNotes": "Ready for some extra special magic? This glittery hat is sure to boost all your spells! Increases Perception by <%= per %>. Limited Edition 2017-2018 Winter Gear.",
"headSpecialWinter2018HealerText": "Mistletoe Hood",
"headSpecialWinter2018HealerNotes": "This fancy hood will keep you warm with happy holiday feelings! Increases Intelligence by <%= int %>. Limited Edition 2017-2018 Winter Gear.",
"headSpecialFall2017WarriorNotes": "Este casco puede parecer una delicia, ¡pero a las tareas pendientes obstinadas no les parecerá tan dulce! Aumenta la Fuerza en un <%= str %>. Equipamiento de Otoño de Edición Limitada del 2017.",
"headSpecialFall2017MageText": "Casco del Baile de Máscaras",
"headSpecialFall2017MageNotes": "¡Cuando aparezcas con este sombrero emplumado, todos se quedarán preguntándose la identidad del mágico extraño de la sala! Aumenta la Percepción en un <%= per %>. Equipamiento de Otoño de Edición Limitada del 2017.",
"headSpecialFall2017HealerText": "Casco de Casa Encantada",
"headSpecialFall2017HealerNotes": "¡Invita a espíritus espeluznantes y a criaturas afables a buscar tus poderes curativos al llevar este casco! Aumenta la Inteligencia en un <%= int %>. Equipamiento de Otoño de Edición Limitada del 2017.",
"headSpecialNye2017Text": "Sombrero Festivo Rocambolesco",
"headSpecialNye2017Notes": "¡Has recibido un Sombrero Festivo Rocambolesco! ¡Llévalo con orgullo mientras resuena en Año Nuevo! Sin beneficios.",
"headSpecialWinter2018RogueText": "Casco de Reno",
"headSpecialWinter2018RogueNotes": "¡El disfraz festivo perfecto, con un foco delantero incorporado! Aumenta la Percepción en un <%= per %>. Equipamiento de Invierno de Edición Limitada del 2017-2018.",
"headSpecialWinter2018WarriorText": "Casco Caja de Regalo",
"headSpecialWinter2018WarriorNotes": "La superficie y el lazo de esta desenfadada caja no solo son festivos, sino bastante robustos también. Aumenta la Fuerza en un <%= str %>. Armamento de Invierno de Edición Limitada del 2017-2018.",
"headSpecialWinter2018MageText": "Sombrero de Copa Centelleante",
"headSpecialWinter2018MageNotes": "¿Listo para algo de magia especial extra? ¡Este sombrero brillante impulsará infalible todos tus hechizos! Aumenta la Percepción en un <%= per %>. Equipamiento de Invierno de Edición Limitada del 2017-2018.",
"headSpecialWinter2018HealerText": "Capucha de Muérdago",
"headSpecialWinter2018HealerNotes": "¡Esta sofisticada capucha te mantendrá cálido con alegres sensaciones festivas! Aumenta la Inteligencia en <%= int %>. Equipo de Invierno de Edición Limitada del 2017-2018.",
"headSpecialGaymerxText": "Casco de Guerrero de Arco Iris",
"headSpecialGaymerxNotes": "Con motivo de la celebración por la Conferencia GaymerX, ¡este casco especial está decorado con un radiante y colorido estampado arco iris! GaymerX es una convención de juegos que celebra a la gente LGBTQ y a los videojuegos, y está abierta a todo el público.",
"headMystery201402Text": "Casco alado",
@@ -986,12 +986,12 @@
"headMystery201705Notes": "¡Habitica es conocido por sus fieros y productivos Guerreros del Grifo! Únete a su prestigioso grupo vistiendo este yelmo de plumas. No proporciona ningún beneficio. Artículo del Suscriptor Mayo 2017.",
"headMystery201707Text": "Yelmo Medusomante",
"headMystery201707Notes": "¿Necesitas manos extra para tus tareas? ¡Este translúcido yelmo tiene unos pocos tentáculos que ofrecerán esa ayuda! No proporciona ningún beneficio. Artículo del suscriptor Julio 2017.",
"headMystery201710Text": "Imperious Imp Helm",
"headMystery201710Notes": "This helm makes you look intimidating... but it won't do any favors for your depth perception! Confers no benefit. October 2017 Subscriber Item.",
"headMystery201712Text": "Candlemancer Crown",
"headMystery201712Notes": "This crown will bring light and warmth to even the darkest winter night. Confers no benefit. December 2017 Subscriber Item.",
"headMystery201802Text": "Love Bug Helm",
"headMystery201802Notes": "The antennae on this helm act as cute dowsing rods, detecting feelings of love and support nearby. Confers no benefit. February 2018 Subscriber Item.",
"headMystery201710Text": "Casco de Granuja Arrogante",
"headMystery201710Notes": "Este casco te hace parecer intimidante... ¡pero no le hará ningún favor a tu percepción de la profundidad! Sin beneficios. Artículo del Subscriptor de octubre del 2017.",
"headMystery201712Text": "Corona de Candelamancia",
"headMystery201712Notes": "Esta corona traerá luz y calor incluso a la noche de invierno más oscura. Sin beneficios. Artículo del Suscriptor de diciembre del 2017.",
"headMystery201802Text": "Casco del Insecto del Amor",
"headMystery201802Notes": "Las antenas en este casco actúan como adorables varas de radiestesia, al detectar sentimientos de amor y apoyo cercanos. Sin beneficios. Artículo del Suscriptor de febrero del 2018.",
"headMystery301404Text": "Sombrero de copa sofisticado",
"headMystery301404Notes": "¡Un sofisticado sombrero de copa solo para los más refinados caballeros! No otorga ningún beneficio. Artículo de Suscriptor de Enero del 3015",
"headMystery301405Text": "Sombrero de copa básico",
@@ -1061,7 +1061,7 @@
"headArmoireWoodElfHelmText": "Yelmo de Madera para Elfo",
"headArmoireWoodElfHelmNotes": "Este yelmo de hojas puede parecer frágil, pero te protegerá de las inclemencias del tiempo y de peligrosos enemigos. Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto de Madera para Elfo (Artículo 1 de 3).",
"headArmoireRamHeaddressText": "Tocado de Carnero",
"headArmoireRamHeaddressNotes": "This elaborate helm is fashioned to look like a ram's head. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Ram Barbarian Set (Item 1 of 3).",
"headArmoireRamHeaddressNotes": "Este elaborado casco está diseñado para parecerse a la cabeza de un carnero. Aumenta la Constitución en <%= con %> y la Percepción en <%= per %>. Armario Encantado: Conjunto de Carnero Bárbaro (Objeto 1 de 3).",
"headArmoireCrownOfHeartsText": "Corona de Corazones",
"headArmoireCrownOfHeartsNotes": "¡Esta corona rosada no sólo es llamativa! . También fortalecerá tu corazón contra las tareas más duras. Aumenta la Fuerza en <%= str %>. Armario Encantado: Conjunto de Reina de Corazones (Artículo 1 de 3)",
"headArmoireMushroomDruidCapText": "Caperuza de Druida de Champiñón",
@@ -1074,20 +1074,20 @@
"headArmoireSwanFeatherCrownNotes": "¡Esta tiara es hermosa y ligera como una pluma de cisne! Aumenta la Inteligencia en <%= int %>. Armario Encantado: Conjunto Cisne Bailarín (Objeto 1 de 3).",
"headArmoireAntiProcrastinationHelmText": "Yelmo Anti-Procastinación",
"headArmoireAntiProcrastinationHelmNotes": "¡Este yelmo de poderoso acero te ayudará a vencer en tu batalla por se productivo, feliz y saludable! Aumenta la Percepción en <%= per %>. Armario Encantado: Conjunto Anti-Procastinación (Objeto 1 de 3).",
"headArmoireCandlestickMakerHatText": "Candlestick Maker Hat",
"headArmoireCandlestickMakerHatNotes": "A jaunty hat makes every job more fun, and candlemaking is no exception! Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Candlestick Maker Set (Item 2 of 3).",
"headArmoireLamplightersTopHatText": "Lamplighter's Top Hat",
"headArmoireLamplightersTopHatNotes": "This jaunty black hat completes your lamp-lighting ensemble! Increases Constitution by <%= con %>.",
"headArmoireCoachDriversHatText": "Coach Driver's Hat",
"headArmoireCoachDriversHatNotes": "This hat is dressy, but not quite so dressy as a top hat. Make sure you don't lose it as you drive speedily across the land! Increases Intelligence by <%= int %>. Enchanted Armoire: Coach Driver Set (Item 2 of 3).",
"headArmoireCrownOfDiamondsText": "Crown of Diamonds",
"headArmoireCrownOfDiamondsNotes": "This shining crown isn't just a great hat; it will also sharpen your mind! Increases Intelligence by <%= int %>. Enchanted Armoire: King of Diamonds Set (Item 2 of 3).",
"headArmoireFlutteryWigText": "Fluttery Wig",
"headArmoireFlutteryWigNotes": "This fine powdered wig has plenty of room for your butterflies to rest if they get tired while doing your bidding. Increases Intelligence, Perception, and Strength by <%= attrs %> each. Enchanted Armoire: Fluttery Frock Set (Item 2 of 3).",
"offhand": "off-hand item",
"offhandCapitalized": "Off-Hand Item",
"shieldBase0Text": "No Off-Hand Equipment",
"shieldBase0Notes": "No shield or other off-hand item.",
"headArmoireCandlestickMakerHatText": "Sombrero de Creador de Candelabros",
"headArmoireCandlestickMakerHatNotes": "¡Un alegre sombrero que hace cada trabajo sea más divertido, y la fabricación de velas no es una excepción! Aumenta la Percepción y la Inteligencia en <%= attrs %> cada uno. Armario Encantado: Conjunto de Creador de Candelabros (Objeto 2 de 3).",
"headArmoireLamplightersTopHatText": "Sombrero de Copa de Farolero",
"headArmoireLamplightersTopHatNotes": "¡Este alegre sombrero negro completa tu conjunto de farolero! Aumenta la Constitución en <%= con %>.",
"headArmoireCoachDriversHatText": "Sombrero de Conductor de Carruajes.",
"headArmoireCoachDriversHatNotes": "Este sombrero es elegante, pero no tan elegante como un sombrero de copa. ¡Asegúrate de no perderlo mientras conduces rápidamente por el terreno! Aumenta la Inteligencia en un <%= int %>. Armario Encantado: Conjunto de Conductor de Carruajes (Objeto 2 de 3).",
"headArmoireCrownOfDiamondsText": "Corona de Diamantes",
"headArmoireCrownOfDiamondsNotes": "Esta brillante corona no es tan solo un gran sombrero; también agudizará tu mente! Aumenta la Inteligencia en <%= int %>. Armario Encantado: Conjunto de Rey de Diamantes (Objeto 2 de 3).",
"headArmoireFlutteryWigText": "Peluca Trémula",
"headArmoireFlutteryWigNotes": "Esta fina peluca empolvada tiene suficiente espacio para que tus mariposas descansen si se cansan mientras haces tus ofertas. Aumenta la Inteligencia, la Percepción y la Fuerza en <%= attrs %> cada una. Armario Encantado: Conjunto de Hábito Trémulo (Objeto 2 de 3).",
"offhand": "objeto para la mano izquierda",
"offhandCapitalized": "Objeto para la Mano Izquierda",
"shieldBase0Text": "Sin Equipamiento en la Mano Izquierda",
"shieldBase0Notes": "Sin escudo u otro objeto para la mano izquierda",
"shieldWarrior1Text": "Escudo de madera",
"shieldWarrior1Notes": "Escudo redondo de madera gruesa. Aumenta Constitución en <%= con %>.",
"shieldWarrior2Text": "Escudo",
@@ -1111,9 +1111,9 @@
"shieldSpecial0Text": "Cráneo atormentado",
"shieldSpecial0Notes": "Ve más allá del velo de la muerte, y muestra lo que allí se encuentra para asustar a los enemigos. Aumenta Percepción en <%= per %>.",
"shieldSpecial1Text": "Escudo de cristal",
"shieldSpecial1Notes": "Shatters arrows and deflects the words of naysayers. Increases all Stats by <%= attrs %>.",
"shieldSpecial1Notes": "Destroza las flechas y desvía las palabras de los detractores. Aumenta todas las Estadísticas en <%= attrs %>.",
"shieldSpecialTakeThisText": "Escudo 'Take This'",
"shieldSpecialTakeThisNotes": "This shield was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.",
"shieldSpecialTakeThisNotes": "Este escudo se consiguió por participar en un Desafío patrocinado por Take This. ¡Felicidades! Aumenta todas las Estadísticas en <%= attrs %>.",
"shieldSpecialGoldenknightText": "Lucero del Alba Machaca Hitos de Mustaine",
"shieldSpecialGoldenknightNotes": "¡Encuentros, monstruos, malestar: superados! ¡Machacados! Aumenta la Constitución y la Percepción en <%= attrs %>.",
"shieldSpecialMoonpearlShieldText": "Escudo de perla lunar",
@@ -1218,28 +1218,28 @@
"shieldSpecialSummer2017WarriorNotes": "¡Esta concha que acabas de encontrar es tan decorativa como defensiva! Aumenta la Constitución en <%= con %>. Equipo de Edición Limitada de Verano 2017.",
"shieldSpecialSummer2017HealerText": "Escudo de Ostra",
"shieldSpecialSummer2017HealerNotes": "Esta ostra mágica genera perlas constantemente al tiempo que sirve de protección. Aumenta la Constitución en <%= con %>. Equipo de Edición Limitada Verano 2017.",
"shieldSpecialFall2017RogueText": "Candied Apple Mace",
"shieldSpecialFall2017RogueNotes": "Defeat your foes with sweetness! Increases Strength by <%= str %>. Limited Edition 2017 Autumn Gear.",
"shieldSpecialFall2017WarriorText": "Candy Corn Shield",
"shieldSpecialFall2017WarriorNotes": "This candy shield has mighty protective powers, so try not to nibble on it! Increases Constitution by <%= con %>. Limited Edition 2017 Autumn Gear.",
"shieldSpecialFall2017HealerText": "Haunted Orb",
"shieldSpecialFall2017HealerNotes": "This orb occasionally screeches. We're sorry, we're not sure why. But it sure looks nifty! Increases Constitution by <%= con %>. Limited Edition 2017 Autumn Gear.",
"shieldSpecialWinter2018RogueText": "Peppermint Hook",
"shieldSpecialWinter2018RogueNotes": "Perfect for climbing walls or distracting your foes with sweet, sweet candy. Increases Strength by <%= str %>. Limited Edition 2017-2018 Winter Gear.",
"shieldSpecialWinter2018WarriorText": "Magic Gift Bag",
"shieldSpecialWinter2018WarriorNotes": "Just about any useful thing you need can be found in this sack, if you know the right magic words to whisper. Increases Constitution by <%= con %>. Limited Edition 2017-2018 Winter Gear.",
"shieldSpecialFall2017RogueText": "Maza de Manzana Confitada",
"shieldSpecialFall2017RogueNotes": "¡Derrota a tus enemigos con dulzura! Aumenta la Fuerza en <%= str %>. Equipamiento de Otoño de Edición Limitada del 2017.",
"shieldSpecialFall2017WarriorText": "Escudo de Maíz Dulce",
"shieldSpecialFall2017WarriorNotes": "Este dulce escudo tiene poderosos poderes de protección, ¡así que intenta no mordisquearlo! Aumenta la Constitución en <%= con %>. Equipamiento de Otoño de Edición Limitada del 2017.",
"shieldSpecialFall2017HealerText": "Orbe Encantado",
"shieldSpecialFall2017HealerNotes": "Este orbe chilla en ocasiones. Lo sentimos, no estamos seguros de por qué. ¡Pero parece ingenioso! Aumenta la Aumenta la Constitución en <%= con %>. Equipamiento de Otoño de Edición Limitada del 2017.",
"shieldSpecialWinter2018RogueText": "Garfio de Menta",
"shieldSpecialWinter2018RogueNotes": "Perfecto para escalar paredes o para distraer a tus oponentes con un caramelo muy, muy dulce. Aumenta la fuerza en <%= str %>. Equipamiento de Invierno de Edición Limitada del 2017-2018.",
"shieldSpecialWinter2018WarriorText": "Bolsa de Regalo Mágica",
"shieldSpecialWinter2018WarriorNotes": "Puedes encontrar casi cualquier cosa útil que necesites en este saco, si conoces las palabras mágicas correctas que susurrar. Aumenta la Constitución en <%= con %>. Equipamiento de Invierno de Edición Limitada de 2017-2018.",
"shieldSpecialWinter2018HealerText": "Campana de muérdago",
"shieldSpecialWinter2018HealerNotes": "What's that sound? The sound of warmth and cheer for all to hear! Increases Constitution by <%= con %>. Limited Edition 2017-2018 Winter Gear.",
"shieldSpecialWinter2018HealerNotes": "¿Qué es ese sonido? ¡El sonido de calidez y alegría para que todos lo escuchen! Aumenta la Constitución en <%= con %>. Equipamiento de Invierno de Edición Limitada del 2017-2018.",
"shieldMystery201601Text": "Destructora de Resoluciones",
"shieldMystery201601Notes": "Esta espada se puede usar para desviar a todas las distracciones. No otorga ningún beneficio. Artículo de Suscriptor de Enero 2016.",
"shieldMystery201701Text": "Escudo para congelar el tiempo",
"shieldMystery201701Notes": "¡Congela el tiempo y conquista tus tareas! No proporciona ventajas. Artículo de Suscriptor de enero de 2017.",
"shieldMystery201708Text": "Escudo de lava",
"shieldMystery201708Notes": "Este escudo escabroso de roca fundida te protege de los Malos Hábitos pero no quemará tus manos. Sin beneficio. Agosto 2017 artículo del suscriptor.",
"shieldMystery201709Text": "Sorcery Handbook",
"shieldMystery201709Notes": "This book will guide you through your forays into sorcery. Confers no benefit. September 2017 Subscriber Item.",
"shieldMystery201802Text": "Love Bug Shield",
"shieldMystery201802Notes": "Although it may look like brittle candy, this shield is resistant to even the strongest Shattering Heartbreak attacks! Confers no benefit. February 2018 Subscriber Item.",
"shieldMystery201709Text": "Manual de Brujería",
"shieldMystery201709Notes": "Este libro te guiará a través de de tus incursiones hacia la brujería. Sin beneficio. Artículo del Subscriptor de septiembre del 2017.",
"shieldMystery201802Text": "Escudo de Insecto Amoroso",
"shieldMystery201802Notes": "Aunque puede que parezca un dulce quebradizo, ¡este escudo resiste hasta el más fuerte de los ataques de Desamor Aplastante! Sin beneficios. Artículo del Suscriptor de febrero del 2018.",
"shieldMystery301405Text": "Escudo Reloj",
"shieldMystery301405Notes": "¡El tiempo está de tu parte con este imponente escudo reloj! No confiere ningún beneficio. Equipo de suscriptor Junio 3015.",
"shieldMystery301704Text": "Abanico vibrante",
@@ -1261,7 +1261,7 @@
"shieldArmoirePerchingFalconText": "Halcón posado",
"shieldArmoirePerchingFalconNotes": "Un halcón amigo se posa en tu brazo, preparado para abalanzarse sobre tus enemigos. Suma <%= str %> de fuerza. Armario encantado: conjunto de halconero (artículo 3 de 3).",
"shieldArmoireRamHornShieldText": "Escudo de Cuerno de Carnero",
"shieldArmoireRamHornShieldNotes": "Ram this shield into opposing Dailies! Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Ram Barbarian Set (Item 3 of 3).",
"shieldArmoireRamHornShieldNotes": "¡Embiste este escudo contra las Tareas Diarias opositoras! Aumenta la Constitución y la Fuerza en <%= attrs %> cada uno. Armario Encantado: Conjunto de Carnero Bárbaro (Artículo 3 de 3).",
"shieldArmoireRedRoseText": "Rosa Roja",
"shieldArmoireRedRoseNotes": "Esta roja de un rojo profundo huele a encantada. Además, agudizará tu entendimiento. Aumenta Percepción por <%= per %> . Armario Encantado: Artículo Independiente.",
"shieldArmoireMushroomDruidShieldText": "Escudo de Druida de Champiñón",
@@ -1276,18 +1276,18 @@
"shieldArmoireGoldenBatonNotes": "¡Cuando te lanzas a la batalla ondeando este bastón al marcar el ritmo, eres imparable! Aumenta la Inteligencia y la Fuerza en <%= attrs %> cada uno. Armario Encantado: Objeto Independiente.",
"shieldArmoireAntiProcrastinationShieldText": "Escudo Anti-Procastinación",
"shieldArmoireAntiProcrastinationShieldNotes": "¡Este poderoso escudo de acero te ayudará a bloquear las distracciones cuando se acerquen! Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto Anti-Procastinación (Objeto 3 de 3).",
"shieldArmoireHorseshoeText": "Horseshoe",
"shieldArmoireHorseshoeNotes": "Help protect the feet of your hooved mounts with this iron shoe. Increases Constitution, Perception, and Strength by <%= attrs %> each. Enchanted Armoire: Farrier Set (Item 3 of 3)",
"shieldArmoireHandmadeCandlestickText": "Handmade Candlestick",
"shieldArmoireHandmadeCandlestickNotes": "Your fine wax wares provide light and warmth to grateful Habiticans! Increases Strength by <%= str %>. Enchanted Armoire: Candlestick Maker Set (Item 3 of 3).",
"shieldArmoireWeaversShuttleText": "Weaver's Shuttle",
"shieldArmoireWeaversShuttleNotes": "This tool passes your weft thread through the warp to make cloth! Increases Intelligence by <%= int %> and Perception by <%= per %>. Enchanted Armoire: Weaver Set (Item 3 of 3).",
"shieldArmoireShieldOfDiamondsText": "Crimson Jewel Shield",
"shieldArmoireShieldOfDiamondsNotes": "This radiant shield not only provides protection, it empowers you with endurance! Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.",
"shieldArmoireFlutteryFanText": "Flowery Fan",
"shieldArmoireFlutteryFanNotes": "On a hot day, there's nothing quite like a fancy fan to help you look and feel cool. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.",
"shieldArmoireHorseshoeText": "Herradura",
"shieldArmoireHorseshoeNotes": "Ayuda a proteger las patas de tus monturas con pezuñas con este calzado de hierro. Aumenta la Constitución, la Percepción y la Fuerza en <%= attrs %> cada uno. Armario Encantado: Conjunto de Herrero (Artículo 3 de 3)",
"shieldArmoireHandmadeCandlestickText": "Candelabro Casero",
"shieldArmoireHandmadeCandlestickNotes": "¡Tus finas mercancías de cera proporcionan luz y calidez a los agradecidos Habiticanos! Aumenta la Fuerza en <%= str %>. Armario Encantado: Conjunto de Fabricante de Candeleros (Artículo 3 de 3).",
"shieldArmoireWeaversShuttleText": "Lanzadera de Tejedor",
"shieldArmoireWeaversShuttleNotes": "¡Esta herramienta pasa tu hilo de trama a través de la urdimbre para fabricar tela! Aumenta la Inteligencia en <%= int %> y la Percepción en <%= per %>. Armario Encantado: Conjunto de Tejedor (Artículo 3 de 3).",
"shieldArmoireShieldOfDiamondsText": "Escudo de Joya Carmesí",
"shieldArmoireShieldOfDiamondsNotes": "¡Este radiante escudo no solo proporciona protección, sino que te fortalece con resistencia! Aumenta la Constitución en <%= con %>. Armario Encantado: Artículo Independiente.",
"shieldArmoireFlutteryFanText": "Ventilador Floreado",
"shieldArmoireFlutteryFanNotes": "En un día caluroso, no hay nada como un sofisticado ventilador que te ayude a verte y a sentirte fresco. Aumenta la Constitución, la Inteligencia y la Percepción en <%= attrs %> cada uno. Armario Encantado: Artículo Independiente.",
"back": "Accesorio en la Espalda",
"backCapitalized": "Back Accessory",
"backCapitalized": "Accesorio en la Espalda",
"backBase0Text": "Sin Accesorio en la Espalda",
"backBase0Notes": "Sin Accesorio en la Espalda",
"backMystery201402Text": "Alas doradas",
@@ -1312,24 +1312,24 @@
"backMystery201704Notes": "Estas relucientes alas te llevarán a todas partes, incluso a recónditos reinos gobernados por mágicas criaturas. No proporciona ningún beneficio. Artículo del suscriptor Abril 2017.",
"backMystery201706Text": "Bandera del Filibustero Andrajoso",
"backMystery201706Notes": "¡La visión de esta bandera con el blasón pirata de Jolly Roger llena de temor a tus Tareas Diarias y Pendientes! No proporciona ningún beneficio. Artículo del Suscriptor Junio 2017.",
"backMystery201709Text": "Stack o' Sorcery Books",
"backMystery201709Notes": "Learning magic takes a lot of reading, but you're sure to enjoy your studies! Confers no benefit. September 2017 Subscriber Item.",
"backMystery201801Text": "Frost Sprite Wings",
"backMystery201801Notes": "They may look as delicate as snowflakes, but these enchanted wings can carry you anywhere you wish! Confers no benefit. January 2018 Subscriber Item.",
"backMystery201709Text": "Pila de Libros de Brujería",
"backMystery201709Notes": "Aprender magia conlleva mucha lectura, ¡pero seguro que disfrutarás de tus estudios! Sin beneficios. Artículo del Suscriptor de septiembre del 2017.",
"backMystery201801Text": "Alas de Duendecillo de Hielo",
"backMystery201801Notes": "Puede que parezcan tan delicadas como copos de nieve, ¡pero estas alas encantadas pueden llevarte a cualquier parte que desees! Sin beneficios. Artículo del subscriptor de enero del 2018.",
"backSpecialWonderconRedText": "Capa del poder",
"backSpecialWonderconRedNotes": "Castañea con fuerza y belleza. No confiere beneficio. Artículo Edición Especial Convención.",
"backSpecialWonderconBlackText": "Capa Sigilosa",
"backSpecialWonderconBlackNotes": "Hilada de sombras y suspiros. No otorga ningún beneficio. Artículo de Convención Edición especial",
"backSpecialTakeThisText": "Alas 'Take This'",
"backSpecialTakeThisNotes": "These wings were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.",
"backSpecialTakeThisNotes": "Estas alas se consiguieron al participar en un Desafío patrocinado por \"Take This\". ¡Felicidades! Aumenta todas las Estadísticas en <%= attrs %>.",
"backSpecialSnowdriftVeilText": "Velo Derrapanieves",
"backSpecialSnowdriftVeilNotes": "¡Este translúcido velo te hará parecer que estás rodeado por una elegante ráfaga de nieve! No proporciona ningún beneficio. ",
"backSpecialAetherCloakText": "Aether Cloak",
"backSpecialAetherCloakNotes": "This cloak once belonged to the Lost Masterclasser herself. Increases Perception by <%= per %>.",
"backSpecialTurkeyTailBaseText": "Turkey Tail",
"backSpecialTurkeyTailBaseNotes": "Wear your noble Turkey Tail with pride while you celebrate! Confers no benefit.",
"backSpecialAetherCloakText": "Capa Etérea",
"backSpecialAetherCloakNotes": "Esta capa perteneció una vez a la mismísima \"Lost Masterclasser\". Aumenta la Percepción en <%= per %>.",
"backSpecialTurkeyTailBaseText": "Cola de Pavo",
"backSpecialTurkeyTailBaseNotes": "¡Viste tu honorable Cola de Pavo con orgullo mientras lo celebras! Sin beneficios.",
"body": "Accesorio para el cuerpo",
"bodyCapitalized": "Body Accessory",
"bodyCapitalized": "Accesorio para el Cuerpo",
"bodyBase0Text": "Sin accesorio en el cuerpo",
"bodyBase0Notes": "Sin accesorio en el cuerpo",
"bodySpecialWonderconRedText": "Collar de rubí",
@@ -1339,9 +1339,9 @@
"bodySpecialWonderconBlackText": "Collar de ébano",
"bodySpecialWonderconBlackNotes": "¡Un precioso collar de Ébano! No otorga ningún beneficio. Artículo de Congreso Edición Especial",
"bodySpecialTakeThisText": "Hombreras 'Take This'",
"bodySpecialTakeThisNotes": "These pauldrons were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.",
"bodySpecialAetherAmuletText": "Aether Amulet",
"bodySpecialAetherAmuletNotes": "This amulet has a mysterious history. Increases Constitution and Strength by <%= attrs %> each.",
"bodySpecialTakeThisNotes": "Estas hombreras se consiguieron al participar en un Desafío patrocinado por \"Take This\". ¡Felicidades! Aumenta todas las Estadísticas en <%= attrs %>.",
"bodySpecialAetherAmuletText": "Amuleto Etéreo",
"bodySpecialAetherAmuletNotes": "Este amuleto tiene una historia misteriosa. Aumenta la Constitución y la Fuerza en <%= attrs %> cada uno.",
"bodySpecialSummerMageText": "Poncho Reluciente",
"bodySpecialSummerMageNotes": "Ni el agua salada ni el agua fresca pueden deslustrar este metálico poncho. No confiere ningún beneficio. Equipamiento de Primavera 2014, Edición Limitada.",
"bodySpecialSummerHealerText": "Collar de coral",
@@ -1358,10 +1358,10 @@
"bodyMystery201705Notes": "Estas alas plegadas no solo lucen elegantes: ¡te concederán la velocidad y agilidad de un grifo! No proporciona ningún beneficio. Artículo del suscriptor Mayo 2017.",
"bodyMystery201706Text": "Capa de Corsario Raída",
"bodyMystery201706Notes": "Esta capa tiene bolsillos secretos para esconder todo el oro que le robes a tus tareas. No proporciona ningún beneficio. Artículo del suscriptor Junio 2017.",
"bodyMystery201711Text": "Carpet Rider Scarf",
"bodyMystery201711Notes": "This soft knitted scarf looks quite majestic blowing in the wind. Confers no benefit. November 2017 Subscriber Item.",
"bodyArmoireCozyScarfText": "Cozy Scarf",
"bodyArmoireCozyScarfNotes": "This fine scarf will keep you warm as you go about your wintry business. Confers no benefit.",
"bodyMystery201711Text": "Bufanda de Jinete de Alfombra",
"bodyMystery201711Notes": "Esta suave bufanda tejida luce bastante majestuosa an volar en el viento. Sin beneficios. Artículo del Suscriptor de noviembre del 2017.",
"bodyArmoireCozyScarfText": "Bufanda Cómoda",
"bodyArmoireCozyScarfNotes": "Esta bonita bufanda te mantendrá cálido mientras realizas tus trabajos invernales. Sin beneficios.",
"headAccessory": "Accesorio de Cabeza",
"headAccessoryCapitalized": "Accesorio para la cabeza",
"accessories": "Accesorios",
@@ -1426,12 +1426,12 @@
"headAccessoryMystery201502Notes": "¡Deja volar tu imaginación! No otorga ningún beneficio. Artículo de suscriptor de febrero 2015.",
"headAccessoryMystery201510Text": "Cuernos de Trasgo",
"headAccessoryMystery201510Notes": "Estos cuernos aterradores son ligeramente babosos. No otorgan ningún beneficio. Artículo de Suscriptor de Octubre 2015.",
"headAccessoryMystery201801Text": "Frost Sprite Antlers",
"headAccessoryMystery201801Notes": "These icy antlers shimmer with the glow of winter auroras. Confers no benefit. January 2018 Subscriber Item.",
"headAccessoryMystery201801Text": "Astas de Duendecillo de Hielo",
"headAccessoryMystery201801Notes": "Estas astas de hielo brillan con el resplandor de las auroras invernales. Sin beneficios. Artículo del Suscriptor de enero del 2018.",
"headAccessoryMystery301405Text": "Gafas para la Cabeza",
"headAccessoryMystery301405Notes": "\"Las gafas son para los ojos\" dijeron, \"Nadie quiere gafas que solo se puedan llevar en la cabeza\" dijeron. ¡Ja! ¡Demuéstrales que eso no es así! No confiere ningún beneficio. Artículo de suscriptor de agosto de 3015.",
"headAccessoryArmoireComicalArrowText": "Flecha Cómica",
"headAccessoryArmoireComicalArrowNotes": "This whimsical item doesn't provide a Stat boost, but it sure is good for a laugh! Confers no benefit. Enchanted Armoire: Independent Item.",
"headAccessoryArmoireComicalArrowNotes": "Este extravagante objeto no proporciona una mejora en las Estadísticas, ¡pero seguro que sirve para echarse unas risas! Sin beneficios. Armario Encantado: Artículo Independiente.",
"eyewear": "Gafas",
"eyewearCapitalized": "Gafas",
"eyewearBase0Text": "Sin Gafas.",
@@ -1476,5 +1476,5 @@
"eyewearMystery301703Notes": "Perfecto para un sofisticado baile de máscaras o para moverte sigilosamente entre cualquier muchedumbre bien vestida. No otorga beneficios. Artículo de Suscriptor de marzo de 3017.",
"eyewearArmoirePlagueDoctorMaskText": "Máscara de médico de la peste negra",
"eyewearArmoirePlagueDoctorMaskNotes": "La auténtica máscara de los médicos que combatieron la plaga de la procrastinación. No aporta ningún beneficio. Armario encantado: conjunto de médico de la plaga (artículo 2 de 3).",
"twoHandedItem": "Two-handed item."
"twoHandedItem": "Objeto de dos manos."
}

View File

@@ -167,8 +167,8 @@
"achievementBurnoutText": "¡Ayudó a derrotar al Burnout y restaurar los Espíritus del Cansancio durante el evento Fall Festival de 2015!",
"achievementBewilder": "Salvador de Calavuelos",
"achievementBewilderText": "¡Ayudó a derrotar al Apa-bullador durante el Evento de Primavera de 2016!",
"achievementDysheartener": "Savior of the Shattered",
"achievementDysheartenerText": "Helped defeat the Dysheartener during the 2018 Valentine's Event!",
"achievementDysheartener": "Salvador de los Destrozados",
"achievementDysheartenerText": "¡Ayudó a derrotar al Dysheartener durante el Evento de San Valentin del 2018!",
"checkOutProgress": "Consultar mi progreso en Habitica",
"cards": "Tarjetas ",
"sentCardToUser": "Enviaste una tarjeta a <%= profileName %>",

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