Compare commits

..

34 Commits

Author SHA1 Message Date
Sabe Jones cf03261bbf 4.138.0 2020-03-19 08:11:37 -05:00
Sabe Jones 3ec95ad821 fix(event): feature something from 2020 2020-03-19 08:11:30 -05:00
Sabe Jones 57d11d5b20 Merge branch 'develop' into release 2020-03-19 08:10:56 -05:00
Matteo Pagliazzi 289032047c 4.137.1 2020-03-18 19:39:37 +01:00
Matteo Pagliazzi 6f5515214a update mongoose options 2020-03-18 19:36:10 +01:00
Sabe Jones fd2c4e3265 fix(sprites): CUBBB 2020-03-18 13:35:53 -05:00
Matteo Pagliazzi dd91bada8f Merge branch 'release' into develop 2020-03-18 19:30:11 +01:00
Matteo Pagliazzi d724933640 update mongoose options 2020-03-18 19:20:09 +01:00
Sabe Jones e4b74bc347 fix(content): feature shinies 2020-03-18 11:15:49 -05:00
Sabe Jones c609db09c1 fix(content): feature shinies 2020-03-18 11:15:10 -05:00
Sabe Jones 55feebdf9e Merge branch 'release' into develop 2020-03-17 15:36:35 -05:00
Sabe Jones d8a99647e7 chore(sprites): compile 2020-03-17 15:35:49 -05:00
Sabe Jones 353b4aed05 feat(content): Magic Hatching Potions 2020-03-17 15:35:38 -05:00
Sabe Jones 411f82202b feat(content): Spring Fling 2020 2020-03-17 14:49:22 -05:00
Sabe Jones 5a5a6e4c5d feat(content): Spring Fling 2020 2020-03-17 14:48:49 -05:00
Sabe Jones 914eee015e Merge branch 'release' into develop 2020-03-17 09:12:29 -05:00
tsukimi2 a301f817e9 Fix for party members missing from header after viewing private messages / inbox / PMs (#11912)
* Fix bug in missing party members in app header

* Modified by running lint

* Change code for handling missing party members in app header from within computed hiddenHeader property to watcher function on hiddenHeader

Co-authored-by: osiris <eynsan@yahoo.co.uk>
2020-03-16 22:17:52 +01:00
tsukimi2 519af8f1b6 Fix for search guilds result being inconsistent between "My Guilds" and "Discover Guilds" (#11903)
* Fix bug to allow guild summary and description to match against search term in MyGuilds component

* Add unit test to groupUtilities to test filterGroup function

* Changes made after running npm:run:lint

* Fix bug when filter guild function does not match against guild size correctly when the guild has member count = 100 or 1000

According to habitica wiki Guilds Guide, gold-tier guilds are guilds with 1000 or more members.  However, under the current code of filter guild function, it matches guilds as gold-tier as strictly more than 1000 members, excluding 1000 members.  Similar silver-tier guilds should have 100 to 999 members, but the current code it matches guilds as silver-tier for members between 101 and 999 members.

* Added unit tests to test the newly added code in the groupsUtilities mixin for the current issue

* Add unit testing to test search guild name, summary, and description in myGuilds component

* Add suggestions from lint

* Added searching by guild summary and white space handling in search terms.

For discover guilds component, added the following:
1) handling of searching by guild summary
2) preventing white space in search terms to display all guilds
3) added test cases for testing the search functionality in discove guilds to ensure consistent behaviour between the searching in MyGuilds and public guilds.

* Remove console statements from test file

* Implement suggestions from lint.

Co-authored-by: osiris <eynsan@yahoo.co.uk>
2020-03-16 20:03:48 +01:00
dependabot-preview[bot] a71abea032 build(deps): bump @storybook/addon-knobs in /website/client (#11977)
Bumps [@storybook/addon-knobs](https://github.com/storybookjs/storybook/tree/HEAD/addons/knobs) from 5.3.14 to 5.3.17.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.17/addons/knobs)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:26:27 +01:00
dependabot-preview[bot] 3c623b08c4 build(deps): [security] bump acorn from 6.3.0 to 6.4.1 (#11970)
Bumps [acorn](https://github.com/acornjs/acorn) from 6.3.0 to 6.4.1. **This update includes a security fix.**
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/6.3.0...6.4.1)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:24:30 +01:00
dependabot-preview[bot] ddfa3f8a91 build(deps): bump @storybook/vue in /website/client (#11984)
Bumps [@storybook/vue](https://github.com/storybookjs/storybook/tree/HEAD/app/vue) from 5.3.14 to 5.3.17.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.17/app/vue)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:22:52 +01:00
dependabot-preview[bot] e2d1de0cf0 build(deps): bump @storybook/addon-links in /website/client (#11975)
Bumps [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/addons/links) from 5.3.14 to 5.3.17.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.17/addons/links)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:22:36 +01:00
dependabot-preview[bot] 9281de1801 build(deps): bump regenerator-runtime from 0.13.3 to 0.13.5 (#11976)
Bumps [regenerator-runtime](https://github.com/facebook/regenerator) from 0.13.3 to 0.13.5.
- [Release notes](https://github.com/facebook/regenerator/releases)
- [Commits](https://github.com/facebook/regenerator/compare/regenerator-runtime@0.13.3...regenerator-runtime@0.13.5)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:20:11 +01:00
dependabot-preview[bot] 4960171565 build(deps): bump sass from 1.26.2 to 1.26.3 in /website/client (#11973)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.2 to 1.26.3.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.26.2...1.26.3)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:19:54 +01:00
dependabot-preview[bot] d063a57faa build(deps): bump aws-sdk from 2.635.0 to 2.639.0 (#11978)
Bumps [aws-sdk](https://github.com/aws/aws-sdk-js) from 2.635.0 to 2.639.0.
- [Release notes](https://github.com/aws/aws-sdk-js/releases)
- [Changelog](https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js/compare/v2.635.0...v2.639.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:19:41 +01:00
dependabot-preview[bot] 0960eaf571 build(deps): bump amplitude-js from 5.9.0 to 5.10.0 in /website/client (#11979)
Bumps [amplitude-js](https://github.com/amplitude/amplitude-javascript) from 5.9.0 to 5.10.0.
- [Release notes](https://github.com/amplitude/amplitude-javascript/releases)
- [Changelog](https://github.com/amplitude/Amplitude-JavaScript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/amplitude/amplitude-javascript/compare/v5.9.0...v5.10.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:19:33 +01:00
dependabot-preview[bot] fd0ec41c53 build(deps): bump vue2-perfect-scrollbar in /website/client (#11983)
Bumps [vue2-perfect-scrollbar](https://github.com/mercs600/vue2-perfect-scrollbar) from 1.3.0 to 1.4.0.
- [Release notes](https://github.com/mercs600/vue2-perfect-scrollbar/releases)
- [Commits](https://github.com/mercs600/vue2-perfect-scrollbar/commits)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:18:53 +01:00
dependabot-preview[bot] 1420e1c8d7 build(deps): bump bootstrap-vue from 2.6.1 to 2.7.0 in /website/client (#11985)
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.6.1 to 2.7.0.
- [Release notes](https://github.com/bootstrap-vue/bootstrap-vue/releases)
- [Changelog](https://github.com/bootstrap-vue/bootstrap-vue/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/bootstrap-vue/bootstrap-vue/compare/v2.6.1...v2.7.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:18:40 +01:00
Matteo Pagliazzi c7c854664f build(deps): bump @storybook/addon-notes in /website/client (#11986)
Bumps [@storybook/addon-notes](https://github.com/storybookjs/storybook/tree/HEAD/addons/notes) from 5.3.14 to 5.3.17.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v5.3.17/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.17/addons/notes)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:18:31 +01:00
dependabot-preview[bot] 68e5679340 build(deps): bump @storybook/addon-actions in /website/client (#11987)
Bumps [@storybook/addon-actions](https://github.com/storybookjs/storybook/tree/HEAD/addons/actions) from 5.3.14 to 5.3.17.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.17/addons/actions)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-16 15:18:25 +01:00
dependabot-preview[bot] 32a9dda2c6 build(deps): bump @storybook/addon-notes in /website/client
Bumps [@storybook/addon-notes](https://github.com/storybookjs/storybook/tree/HEAD/addons/notes) from 5.3.14 to 5.3.17.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v5.3.17/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v5.3.17/addons/notes)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-16 08:29:26 +00:00
Sabe Jones 8b19c0ad69 Merge branch 'release' into develop 2020-03-14 06:50:23 -05:00
Alys 33e8b64df6 remove excess 'the' from two locales strings 2020-03-14 20:47:50 +10:00
Sabe Jones 427251ed1d fix(test): food expectation, sigh 2020-03-13 11:10:08 -05:00
142 changed files with 13289 additions and 12784 deletions
+2 -2
View File
@@ -32,7 +32,7 @@
"LOGGLY_SUBDOMAIN": "example-subdomain",
"LOGGLY_TOKEN": "example-token",
"MAINTENANCE_MODE": "false",
"NODE_DB_URI": "mongodb://localhost/habitrpg",
"NODE_DB_URI": "mongodb://localhost:27017/habitrpg",
"MONGODB_POOL_SIZE": "10",
"NODE_ENV": "development",
"PATH": "bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin",
@@ -70,7 +70,7 @@
"SLACK_URL": "https://hooks.slack.com/services/some-url",
"STRIPE_API_KEY": "aaaabbbbccccddddeeeeffff00001111",
"STRIPE_PUB_KEY": "22223333444455556666777788889999",
"TEST_DB_URI": "mongodb://localhost/habitrpg_test",
"TEST_DB_URI": "mongodb://localhost:27017/habitrpg_test",
"TRANSIFEX_SLACK_CHANNEL": "transifex",
"WEB_CONCURRENCY": 1,
"SKIP_SSL_CHECK_KEY": "key",
+13 -13
View File
@@ -1,6 +1,6 @@
{
"name": "habitica",
"version": "4.137.0",
"version": "4.138.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -1427,9 +1427,9 @@
}
},
"acorn": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
"integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ=="
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
"integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg=="
},
"acorn-jsx": {
"version": "5.1.0",
@@ -2121,9 +2121,9 @@
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
},
"aws-sdk": {
"version": "2.635.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.635.0.tgz",
"integrity": "sha512-NlKqMB4HqMqSutY6YmPzQVa+mMhqo0655hYYl8G2zkUvrYy+YxDitvwDEUkSsNKVFkEvmHtZggFCgVYIUu/sXg==",
"version": "2.639.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.639.0.tgz",
"integrity": "sha512-cbH69oV0ObZ4tapbjDqu0j3I779uscQNhRaewjIJY5O5At4RULtd7us24n72FtT4HIwM9cwORzVxA9rK6DHKOA==",
"requires": {
"buffer": "4.9.1",
"events": "1.1.1",
@@ -11457,9 +11457,9 @@
}
},
"regenerator-runtime": {
"version": "0.13.3",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
"integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
"version": "0.13.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
"integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
},
"regenerator-transform": {
"version": "0.14.2",
@@ -13940,9 +13940,9 @@
},
"dependencies": {
"acorn": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
"integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA=="
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
"integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
},
"eslint-scope": {
"version": "4.0.3",
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.137.0",
"version": "4.138.0",
"main": "./website/server/index.js",
"dependencies": {
"@babel/core": "^7.8.7",
@@ -14,7 +14,7 @@
"amplitude": "^3.5.0",
"apidoc": "^0.17.5",
"apn": "^2.2.0",
"aws-sdk": "^2.635.0",
"aws-sdk": "^2.639.0",
"bcrypt": "^3.0.8",
"body-parser": "^1.18.3",
"compression": "^1.7.4",
@@ -58,7 +58,7 @@
"paypal-ipn": "3.0.0",
"paypal-rest-sdk": "^1.8.1",
"ps-tree": "^1.0.0",
"regenerator-runtime": "^0.13.3",
"regenerator-runtime": "^0.13.5",
"remove-markdown": "^0.3.0",
"rimraf": "^3.0.2",
"short-uuid": "^3.0.0",
@@ -11,7 +11,9 @@ import apiError from '../../../../../website/server/libs/apiError';
describe('GET /groups', () => {
let user;
let userInGuild;
const NUMBER_OF_PUBLIC_GUILDS = 3; // 2 + the tavern
const NUMBER_OF_PUBLIC_GUILDS_USER_IS_LEADER = 2;
const NUMBER_OF_PUBLIC_GUILDS_USER_IS_MEMBER = 1;
const NUMBER_OF_USERS_PRIVATE_GUILDS = 1;
const NUMBER_OF_GROUPS_USER_CAN_VIEW = 5;
@@ -33,14 +35,20 @@ describe('GET /groups', () => {
name: 'public guild - is member',
type: 'guild',
privacy: 'public',
summary: 'ohayou kombonwa',
description: 'oyasumi',
});
await leader.post(`/groups/${publicGuildUserIsMemberOf._id}/invite`, { uuids: [user._id] });
await user.post(`/groups/${publicGuildUserIsMemberOf._id}/join`);
userInGuild = await generateUser({ guilds: [publicGuildUserIsMemberOf._id] });
publicGuildNotMember = await generateGroup(leader, {
name: 'public guild - is not member',
type: 'guild',
privacy: 'public',
summary: 'Natsume Soseki',
description: 'Kinnosuke no Hondana',
categories,
});
@@ -150,6 +158,35 @@ describe('GET /groups', () => {
expect(guilds.length).to.equal(0);
});
it('filters public guilds by leader role', async () => {
const guilds = await user.get('/groups?type=publicGuilds&leader=true');
expect(guilds.length).to.equal(NUMBER_OF_PUBLIC_GUILDS_USER_IS_LEADER);
});
it('filters public guilds by member role', async () => {
const guilds = await userInGuild.get('/groups?type=publicGuilds&member=true');
expect(guilds.length).to.equal(1);
expect(guilds[0].name).to.have.string('is member');
});
it('filters public guilds by single-word search term', async () => {
const guilds = await user.get('/groups?type=publicGuilds&search=kom');
expect(guilds.length).to.equal(1);
expect(guilds[0].summary).to.have.string('ohayou kombonwa');
});
it('filters public guilds by single-word search term left and right-padded by spaces', async () => {
const guilds = await user.get('/groups?type=publicGuilds&search=++++ohayou+kombonwa+++++');
expect(guilds.length).to.equal(1);
expect(guilds[0].summary).to.have.string('ohayou kombonwa');
});
it('filters public guilds by two-words search term separated by multiple spaces', async () => {
const guilds = await user.get('/groups?type=publicGuilds&search=kinnosuke+++++hon');
expect(guilds.length).to.equal(1);
expect(guilds[0].description).to.have.string('Kinnosuke');
});
});
describe('public guilds pagination', () => {
+591 -1143
View File
File diff suppressed because it is too large Load Diff
+9 -9
View File
@@ -18,18 +18,18 @@
"@vue/cli-plugin-router": "^4.2.3",
"@vue/cli-plugin-unit-mocha": "^4.2.3",
"@vue/cli-service": "^4.2.3",
"@storybook/addon-actions": "^5.3.14",
"@storybook/addon-knobs": "^5.3.14",
"@storybook/addon-links": "^5.3.14",
"@storybook/addon-notes": "^5.3.14",
"@storybook/vue": "^5.3.14",
"@storybook/addon-actions": "^5.3.17",
"@storybook/addon-knobs": "^5.3.17",
"@storybook/addon-links": "^5.3.17",
"@storybook/addon-notes": "^5.3.17",
"@storybook/vue": "^5.3.17",
"@vue/test-utils": "1.0.0-beta.29",
"amplitude-js": "^5.9.0",
"amplitude-js": "^5.10.0",
"axios": "^0.19.2",
"axios-progress-bar": "^1.2.0",
"babel-eslint": "^10.1.0",
"bootstrap": "^4.4.1",
"bootstrap-vue": "^2.6.1",
"bootstrap-vue": "^2.7.0",
"chai": "^4.1.2",
"core-js": "^3.6.4",
"eslint": "^6.8.0",
@@ -44,7 +44,7 @@
"lodash": "^4.17.15",
"moment": "^2.24.0",
"nconf": "^0.10.0",
"sass": "^1.26.2",
"sass": "^1.26.3",
"sass-loader": "^8.0.2",
"smartbanner.js": "^1.15.0",
"svg-inline-loader": "^0.8.2",
@@ -58,7 +58,7 @@
"vue-mugen-scroll": "^0.2.6",
"vue-router": "^3.1.6",
"vue-template-compiler": "^2.6.11",
"vue2-perfect-scrollbar": "^1.3.0",
"vue2-perfect-scrollbar": "^1.4.0",
"vuedraggable": "^2.23.1",
"vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec",
"webpack": "^4.42.0"
@@ -6,7 +6,7 @@
}
.promo_armoire_backgrounds_202003 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -445px;
background-position: -433px -445px;
width: 423px;
height: 147px;
}
@@ -18,25 +18,49 @@
}
.promo_hugabug_bundle {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -424px -445px;
background-position: -424px -608px;
width: 420px;
height: 147px;
}
.promo_mystery_202003 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -624px -211px;
background-position: -328px -168px;
width: 282px;
height: 147px;
}
.promo_pi_day {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -593px;
background-position: -283px -756px;
width: 273px;
height: 147px;
}
.promo_seasonal_shop_spring {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -857px -445px;
width: 162px;
height: 138px;
}
.promo_spring_2019 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -445px;
width: 432px;
height: 162px;
}
.promo_spring_2020 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -624px 0px;
width: 429px;
height: 183px;
}
.promo_spring_potions_2020 {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -608px;
width: 423px;
height: 147px;
}
.promo_take_this {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -624px -359px;
background-position: -845px -608px;
width: 96px;
height: 69px;
}
@@ -48,13 +72,13 @@
}
.scene_gaining_achievement {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -624px 0px;
background-position: -624px -184px;
width: 339px;
height: 210px;
}
.scene_shanaqui {
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: -328px -168px;
background-position: 0px -756px;
width: 282px;
height: 147px;
}
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
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: 236 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 KiB

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

After

Width:  |  Height:  |  Size: 426 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 139 KiB

@@ -2,11 +2,11 @@
// possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, spring, summer
// more to be added on future seasons
$npc_market_flavor: 'normal';
$npc_quests_flavor: 'normal';
$npc_seasonal_flavor: 'normal';
$npc_timetravelers_flavor: 'normal';
$npc_tavern_flavor: 'normal';
$npc_market_flavor: 'spring';
$npc_quests_flavor: 'spring';
$npc_seasonal_flavor: 'spring';
$npc_timetravelers_flavor: 'spring';
$npc_tavern_flavor: 'spring';
$restingToolbarHeight: 40px;
$menuToolbarHeight: 56px;
@@ -225,30 +225,30 @@ export default {
classGear (heroClass) {
if (heroClass === 'rogue') {
return {
armor: 'armor_rogue_5',
head: 'head_rogue_5',
shield: 'shield_rogue_6',
weapon: 'weapon_rogue_6',
armor: 'armor_special_spring2020Rogue',
head: 'head_special_spring2020Rogue',
shield: 'shield_special_spring2020Rogue',
weapon: 'weapon_special_spring2020Rogue',
};
} if (heroClass === 'wizard') {
return {
armor: 'armor_wizard_5',
head: 'head_wizard_5',
weapon: 'weapon_wizard_6',
armor: 'armor_special_spring2020Mage',
head: 'head_special_spring2020Mage',
weapon: 'weapon_special_spring2020Mage',
};
} if (heroClass === 'healer') {
return {
armor: 'armor_healer_5',
head: 'head_healer_5',
shield: 'shield_healer_5',
weapon: 'weapon_healer_6',
armor: 'armor_special_spring2020Healer',
head: 'head_special_spring2020Healer',
shield: 'shield_special_spring2020Healer',
weapon: 'weapon_special_spring2020Healer',
};
}
return {
armor: 'armor_warrior_5',
head: 'head_warrior_5',
shield: 'shield_warrior_5',
weapon: 'weapon_warrior_6',
armor: 'armor_special_spring2020Warrior',
head: 'head_special_spring2020Warrior',
shield: 'shield_special_spring2020Warrior',
weapon: 'weapon_special_spring2020Warrior',
};
},
selectionBox (selectedClass, heroClass) {
@@ -30,6 +30,7 @@
</div>
<div
v-if="hasParty"
ref="partyMembersDiv"
v-resize="1500"
class="party-members d-flex"
@resized="setPartyMembersWidth($event)"
@@ -153,6 +154,15 @@ export default {
inviteModalGroupType: undefined,
};
},
watch: {
hideHeader () {
this.$nextTick(() => {
if (this.$refs.partyMembersDiv) {
this.setPartyMembersWidth({ width: this.$refs.partyMembersDiv.clientWidth });
}
});
},
},
computed: {
...mapGetters({
user: 'user:data',
+21 -5
View File
@@ -1,4 +1,22 @@
import intersection from 'lodash/intersection';
import _ from 'lodash';
const containsAnyCi = (target, patterns) => patterns.some(el => target.match(new RegExp(el, 'i')));
const isPassedSearch = ({ name, summary, description }, search) => {
if (!search) return false;
const searchWords = _.escapeRegExp(search.trim()).split(/\s+/);
if (containsAnyCi(name, searchWords)) return true;
if (!summary) return false;
if (containsAnyCi(summary, searchWords)) return true;
if (!description) return false;
if (containsAnyCi(description, searchWords)) return true;
return false;
};
export default {
filters: {
@@ -56,9 +74,7 @@ export default {
if (group._id === this.$store.state.constants.TAVERN_ID || group._id === 'habitrpg') return false;
if (search) {
passedSearch = group.name.toLowerCase().indexOf(search.toLowerCase()) >= 0;
}
if (search) passedSearch = isPassedSearch(group, search);
if (filters.categories && filters.categories.length > 0) {
const intersectingCats = intersection(filters.categories, group.categorySlugs);
@@ -75,11 +91,11 @@ export default {
}
if (filters.guildSize && filters.guildSize.indexOf('gold_tier') !== -1) {
correctSize = group.memberCount > 1000;
correctSize = group.memberCount >= 1000;
}
if (filters.guildSize && filters.guildSize.indexOf('silver_tier') !== -1) {
correctSize = group.memberCount > 100 && group.memberCount < 1000;
correctSize = group.memberCount >= 100 && group.memberCount < 1000;
}
if (filters.guildSize && filters.guildSize.indexOf('bronze_tier') !== -1) {
@@ -0,0 +1,107 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import Store from '@/libs/store';
import myGuilds from '@/components/groups/myGuilds';
import PublicGuildItem from '@/components/groups/publicGuildItem';
const localVue = createLocalVue();
localVue.use(Store);
describe('myGuilds component', () => {
let computed;
const guilds = [{
_id: '1',
type: 'guild',
name: 'Crimson Vow',
summary: 'testing',
description: 'testing',
}, {
_id: '2',
type: 'guild',
name: 'Log Horizon',
summary: 'testing',
description: 'testing',
}, {
_id: '3',
type: 'guild',
name: 'CAD Cads',
summary: '3D',
description: '3D',
}, {
_id: '4',
type: 'guild',
name: 'Santa Claus',
summary: '3d',
description: 'hohoho',
}];
const store = new Store({
state: {
user: {
data: {
_id: '999',
guilds: ['1', '2', '3', '4'],
},
},
editingGroup: {},
constants: {
TAVERN_ID: '9999',
},
},
getters: {},
actions: {
'guilds:getMyGuilds': () => guilds,
},
});
function makeWrapper (opts = {}) {
return shallowMount(myGuilds, {
data () {
return {
filter: {},
search: '',
};
},
store,
localVue,
...opts,
});
}
before(() => {
computed = {
guilds: () => guilds,
};
});
it('renders all guilds with no filter and no search', () => {
const wrapper = makeWrapper({ computed });
expect(wrapper.findAll(PublicGuildItem).length).to.equal(4);
});
it('renders guilds with name matching against a single-word search term', () => {
const search = 'vow';
const wrapper = makeWrapper({ computed });
wrapper.setData({ search });
expect(wrapper.findAll(PublicGuildItem).length).to.equal(1);
});
it('renders guilds with summary matching against a single-word search term', () => {
const search = '3d';
const wrapper = makeWrapper({ computed });
wrapper.setData({ search });
expect(wrapper.findAll(PublicGuildItem).length).to.equal(2);
});
it('renders guilds with description matching against a single-word search term', () => {
const search = 'hoho';
const wrapper = makeWrapper({ computed });
wrapper.setData({ search });
expect(wrapper.findAll(PublicGuildItem).length).to.equal(1);
});
it('renders guilds with summary matching against two search terms with space in between', () => {
const search = '3d ohayou';
const wrapper = makeWrapper({ computed });
wrapper.setData({ search });
expect(wrapper.findAll(PublicGuildItem).length).to.equal(2);
});
});
@@ -61,4 +61,172 @@ describe('Groups Utilities Mixin', () => {
})).to.equal(false);
});
});
describe('filterGuild', () => {
let testGroup;
let testGroup2;
before(() => {
testGroup = {
type: 'guild',
_id: user.guilds[0],
name: 'Crimson Vow',
summary: 'testing',
description: 'dummy 1',
leader: user.guilds[0], // test user is not guild leader
categories: [{
_id: '123',
slug: 'hobbies_occupations',
name: 'hobbies_occupations',
}],
categorySlugs: ['hobbies_occupations'],
memberCount: 1000,
};
testGroup2 = {
type: 'guild',
_id: '790',
name: 'CAD Cads',
summary: '3D',
description: 'My dummy',
leader: user._id, // test user is guild leader
categories: [{
_id: '123',
slug: 'hobbies_occupations',
name: 'hobbies_occupations',
}],
categorySlugs: ['hobbies_occupations'],
memberCount: 100,
};
});
it('returns true with no filter and no search', () => {
const filter = {};
const search = '';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true);
});
it('returns false with no filter and one search word not matching against any of the guild name, summary, and description', () => {
const filter = {};
const search = '3d';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false);
});
it('returns true with no filter and one search word matched successfully against guild name', () => {
const filter = {};
const search = 'vow';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true);
});
it('returns true with no filter and one search word matched successfully against guild summary', () => {
const filter = {};
const search = 'test';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true);
});
it('returns true with no filter and one search word matched successfully against guild description', () => {
const filter = {};
const search = 'dum';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true);
});
it('returns true with no filter and two search words with two spaces in between matched successfully against guild name', () => {
const filter = {};
const search = 'cad test';
expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true);
});
it('returns true with no filter and two search words with two spaces in between matched successfully against guild summary', () => {
const filter = {};
const search = 'cad 3d';
expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true);
});
it('returns true with no filter and two search words with two spaces in between matched successfully against guild description', () => {
const filter = {};
const search = 'my dummy';
expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true);
});
it('returns false with no search word and one filter category that does not match against any guild categories', () => {
const filter = {
categories: ['academics'],
};
const search = '';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false);
});
it('returns true with no search word and one filter category that matches successfully against any guild categories', () => {
const filter = {
categories: ['hobbies_occupations'],
};
const search = '';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true);
});
it('returns false with no search word and one filter role that does not match against guild role', () => {
const filter = {
roles: ['guild_leader'],
};
const search = '';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false);
});
it('returns true with no search word and one filter role that matches successfully against guild role', () => {
const filter = {
roles: ['member'],
};
const search = '';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true);
});
it('returns true with no search word and filter size silver tier that matches against a guild size of 1000, the max guild size belonging to silver tier', () => {
const filter = {
guildSize: 'gold_tier',
};
const search = '';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true);
});
it('returns true with no search word and filter size bronze tier that matches against a guild size of 100, the max guild size belonging to bronze tier', () => {
const filter = {
guildSize: 'silver_tier',
};
const search = '';
expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true);
});
it('returns false with no search word and filter category that matches successfully against one guild category and filter role that does not match against guild role', () => {
const filter = {
categories: ['hobbies_occupations'],
roles: ['guild_leader'],
};
const search = '';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false);
});
it('returns true with no search word and filter category that matches successfully against one guild category and filter role that matches successfully against guild role', () => {
const filter = {
categories: ['hobbies_occupations'],
roles: ['guild_leader'],
};
const search = '';
expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true);
});
it('returns false with one search word that does not match against guild name and one filter category that matches successfully against guild categories', () => {
const filter = {
categories: ['hobbies_occupations'],
};
const search = 'konnichiwa';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false);
});
it('returns true with one search word that matches against guild name and one filter role that matches successfully against guild role', () => {
const filter = {
categories: ['hobbies_occupations'],
};
const search = 'vow';
expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true);
});
});
});
+1
View File
@@ -298,6 +298,7 @@
"hatchingPotionAmber": "Amber",
"hatchingPotionAurora": "Aurora",
"hatchingPotionRuby": "Ruby",
"hatchingPotionBirchBark": "Birch Bark",
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
"premiumPotionAddlNotes": "Not usable on quest pet eggs. Available for purchase until <%= date(locale) %>.",
+32
View File
@@ -350,6 +350,15 @@
"weaponSpecialWinter2020HealerText": "Clove Scepter",
"weaponSpecialWinter2020HealerNotes": "Wave it about, and its aroma will summon your friends and helpers to begin cooking and baking! Increases Intelligence by <%= int %>. Limited Edition 2019-2020 Winter Gear.",
"weaponSpecialSpring2020RogueText": "Lazurite Blade",
"weaponSpecialSpring2020RogueNotes": "You'll strike so fast it'll look even MORE blue! Increases Strength by <%= str %>. Limited Edition 2020 Spring Gear.",
"weaponSpecialSpring2020WarriorText": "Sharpened Wing",
"weaponSpecialSpring2020WarriorNotes": "Fight or flight, this wing will serve you well! Increases Strength by <%= str %>. Limited Edition 2020 Spring Gear.",
"weaponSpecialSpring2020MageText": "Raindrops",
"weaponSpecialSpring2020MageNotes": "They keep falling on your head! But you'll never stop them by complaining. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2020 Spring Gear.",
"weaponSpecialSpring2020HealerText": "Sword-Lily Staff",
"weaponSpecialSpring2020HealerNotes": "An iris is beautiful, but the leaves are like swords... don't be deceived by the flowers, this staff is tough as steel! Increases Intelligence by <%= int %>. Limited Edition 2020 Spring Gear.",
"weaponMystery201411Text": "Pitchfork of Feasting",
"weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.",
"weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth",
@@ -809,6 +818,15 @@
"armorSpecialWinter2020HealerText": "Orange Peel Gown",
"armorSpecialWinter2020HealerNotes": "An opulent gown for those with festive zest! Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter Gear.",
"armorSpecialSpring2020RogueText": "Ultramarine Armor",
"armorSpecialSpring2020RogueNotes": "The color of twilight, of a multitude of precious stones, of the deepest sea! Increases Perception by <%= per %>. Limited Edition 2020 Spring Gear.",
"armorSpecialSpring2020WarriorText": "Exoskeleton Armor",
"armorSpecialSpring2020WarriorNotes": "This rigid carapace can keep you safe from even the most crushing attacks. Increases Constitution by <%= con %>. Limited Edition 2020 Spring Gear.",
"armorSpecialSpring2020MageText": "Whirlpuddle Gown",
"armorSpecialSpring2020MageNotes": "If you can't resist stomping through the leavings of rainstorms, this armor is for you! Turn a childish impulse into a display of mystic artistry. Increases Intelligence by <%= int %>. Limited Edition 2020 Spring Gear.",
"armorSpecialSpring2020HealerText": "Protective Petals",
"armorSpecialSpring2020HealerNotes": "Wrap yourself in soft iris leaves and petals to fool enemies into underestimating your healing power. Increases Constitution by <%= con %>. Limited Edition 2020 Spring Gear.",
"armorMystery201402Text": "Messenger Robes",
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
"armorMystery201403Text": "Forest Walker Armor",
@@ -1361,6 +1379,15 @@
"headSpecialWinter2020HealerText": "Star Anise Emblem",
"headSpecialWinter2020HealerNotes": "Please remove it from your head before attempting to brew chai or coffee with it. Increases Intelligence by <%= int %>. Limited Edition 2019-2020 Winter Gear.",
"headSpecialSpring2020RogueText": "Lapis Kabuto",
"headSpecialSpring2020RogueNotes": "So vibrant and valuable, you'll be tempted to steal it off your own head. Increases Perception by <%= per %>. Limited Edition 2020 Spring Gear.",
"headSpecialSpring2020WarriorText": "Beetle Helm",
"headSpecialSpring2020WarriorNotes": "Your enemies' blows will glance off this beetle-inspired helm! Increases Strength by <%= str %>. Limited Edition 2020 Spring Gear.",
"headSpecialSpring2020MageText": "Drip Top Cap",
"headSpecialSpring2020MageNotes": "Is the sky clear? Humidity low? Don't worry, we've got you. Moisten your magic without dampening your spirits! Increases Perception by <%= per %>. Limited Edition 2020 Spring Gear.",
"headSpecialSpring2020HealerText": "Iris Fascinator",
"headSpecialSpring2020HealerNotes": "Beguile your foes with this headpiece made of flowers! Increases Intelligence by <%= int %>. Limited Edition 2020 Spring Gear.",
"headSpecialGaymerxText": "Rainbow Warrior Helm",
"headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
@@ -1814,6 +1841,11 @@
"shieldSpecialWinter2020HealerText": "Giant Cinnamon Stick",
"shieldSpecialWinter2020HealerNotes": "Do you feel you are too good for this world, too pure? Only this beauty of a spice will do. Increases Constitution by <%= con %>. Limited Edition 2019-2020 Winter Gear.",
"shieldSpecialSpring2020WarriorText": "Iridescent Shield",
"shieldSpecialSpring2020WarriorNotes": "Don't let the delicate colors fool you. This shield has got you covered! Increases Constitution by <%= con %>. Limited Edition 2020 Spring Gear.",
"shieldSpecialSpring2020HealerText": "Perfumed Shield",
"shieldSpecialSpring2020HealerNotes": "Ward off those musty old To-Dos with this sweet-smelling shield. Increases Constitution by <%= con %>. Limited Edition 2020 Spring Gear.",
"shieldMystery201601Text": "Resolution Slayer",
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
"shieldMystery201701Text": "Time-Freezer Shield",
+31 -26
View File
@@ -85,45 +85,45 @@
"scarecrowWarriorSet": "Scarecrow Warrior (Warrior)",
"stitchWitchSet": "Stitch Witch (Mage)",
"potionerSet": "Potioner (Healer)",
"battleRogueSet": "Bat-tle Rogue (Rogue)",
"battleRogueSet": "Bat-tle (Rogue)",
"springingBunnySet": "Springing Bunny (Healer)",
"grandMalkinSet": "Grand Malkin (Mage)",
"cleverDogSet": "Clever Dog (Rogue)",
"braveMouseSet": "Brave Mouse (Warrior)",
"summer2016SharkWarriorSet": "Shark Warrior (Warrior)",
"summer2016DolphinMageSet": "Dolphin Mage (Mage)",
"summer2016SeahorseHealerSet": "Seahorse Healer (Healer)",
"summer2016EelSet": "Eel Rogue (Rogue)",
"summer2016SharkWarriorSet": "Shark (Warrior)",
"summer2016DolphinMageSet": "Dolphin (Mage)",
"summer2016SeahorseHealerSet": "Seahorse (Healer)",
"summer2016EelSet": "Eel (Rogue)",
"fall2016SwampThingSet": "Swamp Thing (Warrior)",
"fall2016WickedSorcererSet": "Wicked Sorcerer (Mage)",
"fall2016GorgonHealerSet": "Gorgon Healer (Healer)",
"fall2016BlackWidowSet": "Black Widow Rogue (Rogue)",
"fall2016GorgonHealerSet": "Gorgon (Healer)",
"fall2016BlackWidowSet": "Black Widow (Rogue)",
"winter2017IceHockeySet": "Ice Hockey (Warrior)",
"winter2017WinterWolfSet": "Winter Wolf (Mage)",
"winter2017SugarPlumSet": "Sugar Plum Healer (Healer)",
"winter2017FrostyRogueSet": "Frosty Rogue (Rogue)",
"spring2017FelineWarriorSet": "Feline Warrior (Warrior)",
"winter2017SugarPlumSet": "Sugar Plum (Healer)",
"winter2017FrostyRogueSet": "Frosty (Rogue)",
"spring2017FelineWarriorSet": "Feline (Warrior)",
"spring2017CanineConjurorSet": "Canine Conjuror (Mage)",
"spring2017FloralMouseSet": "Floral Mouse (Healer)",
"spring2017SneakyBunnySet": "Sneaky Bunny (Rogue)",
"summer2017SandcastleWarriorSet": "Sandcastle Warrior (Warrior)",
"summer2017WhirlpoolMageSet": "Whirlpool Mage (Mage)",
"summer2017SandcastleWarriorSet": "Sandcastle (Warrior)",
"summer2017WhirlpoolMageSet": "Whirlpool (Mage)",
"summer2017SeashellSeahealerSet": "Seashell Seahealer (Healer)",
"summer2017SeaDragonSet": "Sea Dragon (Rogue)",
"fall2017HabitoweenSet": "Habitoween Warrior (Warrior)",
"fall2017MasqueradeSet": "Masquerade Mage (Mage)",
"fall2017HauntedHouseSet": "Haunted House Healer (Healer)",
"fall2017TrickOrTreatSet": "Trick or Treat Rogue (Rogue)",
"winter2018ConfettiSet": "Confetti Mage (Mage)",
"winter2018GiftWrappedSet": "Gift-Wrapped Warrior (Warrior)",
"winter2018MistletoeSet": "Mistletoe Healer (Healer)",
"winter2018ReindeerSet": "Reindeer Rogue (Rogue)",
"spring2018SunriseWarriorSet": "Sunrise Warrior (Warrior)",
"spring2018TulipMageSet": "Tulip Mage (Mage)",
"spring2018GarnetHealerSet": "Garnet Healer (Healer)",
"spring2018DucklingRogueSet": "Duckling Rogue (Rogue)",
"summer2018BettaFishWarriorSet": "Betta Fish Warrior (Warrior)",
"summer2018LionfishMageSet": "Lionfish Mage (Mage)",
"fall2017HabitoweenSet": "Habitoween (Warrior)",
"fall2017MasqueradeSet": "Masquerade (Mage)",
"fall2017HauntedHouseSet": "Haunted House (Healer)",
"fall2017TrickOrTreatSet": "Trick or Treat (Rogue)",
"winter2018ConfettiSet": "Confetti (Mage)",
"winter2018GiftWrappedSet": "Gift-Wrapped (Warrior)",
"winter2018MistletoeSet": "Mistletoe (Healer)",
"winter2018ReindeerSet": "Reindeer (Rogue)",
"spring2018SunriseWarriorSet": "Sunrise (Warrior)",
"spring2018TulipMageSet": "Tulip (Mage)",
"spring2018GarnetHealerSet": "Garnet (Healer)",
"spring2018DucklingRogueSet": "Duckling (Rogue)",
"summer2018BettaFishWarriorSet": "Betta Fish (Warrior)",
"summer2018LionfishMageSet": "Lionfish (Mage)",
"summer2018MerfolkMonarchSet": "Merfolk Monarch (Healer)",
"summer2018FisherRogueSet": "Fisher-Rogue (Rogue)",
"fall2018MinotaurWarriorSet": "Minotaur (Warrior)",
@@ -151,6 +151,10 @@
"winter2020CarolOfTheMageSet": "Carol of the Mage (Mage)",
"winter2020WinterSpiceSet": "Winter Spice (Healer)",
"winter2020LanternSet": "Lantern (Rogue)",
"spring2020BeetleWarriorSet": "Rhinoceros Beetle (Warrior)",
"spring2020PuddleMageSet": "Puddle (Mage)",
"spring2020IrisHealerSet": "Iris (Healer)",
"spring2020LapisLazuliRogueSet": "Lapis Lazuli (Rogue)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
"dateEndMarch": "April 30",
@@ -159,6 +163,7 @@
"dateEndJune": "June 14",
"augustYYYY": "August <%= year %>",
"decemberYYYY": "December <%= year %>",
"marchYYYY": "March <%= year %>",
"dateEndJuly": "July 31",
"dateEndAugust": "August 31",
"dateEndSeptember": "September 21",
+2 -2
View File
@@ -271,7 +271,7 @@
"questGroupDilatoryDistress": "Dilatory Distress",
"questDilatoryDistress1Text": "Dilatory Distress, Part 1: Message in a Bottle",
"questDilatoryDistress1Notes": "A message in a bottle arrived from the newly rebuilt city of Dilatory! It reads: \"Dear Habiticans, we need your help once again. Our princess has disappeared and the city is under siege by some unknown watery demons! The mantis shrimps are holding the attackers at bay. Please aid us!\" To make the long journey to the sunken city, one must be able to breathe water. Fortunately, the alchemists @Benga and @hazel can make it all possible! You only have to find the proper ingredients.",
"questDilatoryDistress1Completion": "You don the the finned armor and swim to Dilatory as quickly as you can. The merfolk and their mantis shrimp allies have managed to keep the monsters outside the city for the moment, but they are losing. No sooner are you within the castle walls than the horrifying siege descends!",
"questDilatoryDistress1Completion": "You don the finned armor and swim to Dilatory as quickly as you can. The merfolk and their mantis shrimp allies have managed to keep the monsters outside the city for the moment, but they are losing. No sooner are you within the castle walls than the horrifying siege descends!",
"questDilatoryDistress1CollectFireCoral": "Fire Coral",
"questDilatoryDistress1CollectBlueFins": "Blue Fins",
"questDilatoryDistress1DropArmor": "Finned Oceanic Armor (Armor)",
@@ -661,7 +661,7 @@
"questBadgerText": "Stop Badgering Me!",
"questBadgerNotes": "Ah, winter in the Taskwoods. The softly falling snow, the branches sparkling with frost, the Flourishing Fairies… still not snoozing?<br><br>“Why are they still awake?” cries @LilithofAlfheim. “If they don't hibernate soon, they'll never have the energy for planting season.”<br><br>As you and @Willow the Witty hurry to investigate, a furry head pops up from the ground. Before you can yell, “Its the Badgering Bother!” its back in its burrow—but not before snatching up the Fairies' “Hibernate” To-Dos and dropping a giant list of pesky tasks in their place!<br><br>“No wonder the fairies aren't resting, if they're constantly being badgered like that!” @plumilla says. Can you chase off this beast and save the Taskwoods harvest this year?",
"questBadgerCompletion": "You finally drive away the the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.",
"questBadgerCompletion": "You finally drive away the Badgering Bother and hurry into its burrow. At the end of a tunnel, you find its hoard of the faeries “Hibernate” To-Dos. The den is otherwise abandoned, except for three eggs that look ready to hatch.",
"questBadgerBoss": "The Badgering Bother",
"questBadgerDropBadgerEgg": "Badger (Egg)",
"questBadgerUnlockText": "Unlocks Badger Eggs for purchase in the Market",
@@ -39,6 +39,7 @@ export const EVENTS = {
summer2019: { start: '2019-06-18', end: '2019-08-02' },
fall2019: { start: '2019-09-24', end: '2019-11-02' },
winter2020: { start: '2019-12-19', end: '2020-02-02' },
spring2020: { start: '2019-03-17', end: '2020-05-02' },
};
export const SEASONAL_SETS = {
@@ -121,6 +122,13 @@ export const SEASONAL_SETS = {
'spring2019OrchidWarriorSet',
'spring2019CloudRogueSet',
'spring2019RobinHealerSet',
// spring 2020
'spring2020BeetleWarriorSet',
'spring2020IrisHealerSet',
'spring2020LapisLazuliRogueSet',
'spring2020PuddleMageSet',
],
summer: [
// summer 2014
@@ -1,3 +1,4 @@
import moment from 'moment';
import {
EVENTS,
} from '../../../constants';
@@ -8,7 +9,7 @@ import * as takeThisGear from './special-takeThis';
import * as wonderconGear from './special-wondercon';
import t from '../../../translation';
const CURRENT_SEASON = 'winter';
const CURRENT_SEASON = moment().isBetween('2020-03-17', '2020-05-02') ? 'spring' : '_NONE_';
const armor = {
0: backerGear.armorSpecial0,
@@ -1002,6 +1003,7 @@ const armor = {
notes: t('armorSpecialSpring2019RogueNotes', { per: 15 }),
value: 90,
per: 15,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Warrior: {
event: EVENTS.spring2019,
@@ -1011,6 +1013,7 @@ const armor = {
notes: t('armorSpecialSpring2019WarriorNotes', { con: 9 }),
value: 90,
con: 9,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Mage: {
event: EVENTS.spring2019,
@@ -1020,6 +1023,7 @@ const armor = {
notes: t('armorSpecialSpring2019MageNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Healer: {
event: EVENTS.spring2019,
@@ -1029,6 +1033,7 @@ const armor = {
notes: t('armorSpecialSpring2019HealerNotes', { con: 15 }),
value: 90,
con: 15,
canBuy: () => CURRENT_SEASON === 'spring',
},
summer2019Rogue: {
event: EVENTS.summer2019,
@@ -1151,6 +1156,42 @@ const armor = {
value: 0,
canOwn: ownsItem('armor_special_birthday2020'),
},
spring2020Rogue: {
event: EVENTS.spring2020,
specialClass: 'rogue',
set: 'spring2020LapisLazuliRogueSet',
text: t('armorSpecialSpring2020RogueText'),
notes: t('armorSpecialSpring2020RogueNotes', { per: 15 }),
value: 90,
per: 15,
},
spring2020Warrior: {
event: EVENTS.spring2020,
specialClass: 'warrior',
set: 'spring2020BeetleWarriorSet',
text: t('armorSpecialSpring2020WarriorText'),
notes: t('armorSpecialSpring2020WarriorNotes', { con: 9 }),
value: 90,
con: 9,
},
spring2020Mage: {
event: EVENTS.spring2020,
specialClass: 'wizard',
set: 'spring2020PuddleMageSet',
text: t('armorSpecialSpring2020MageText'),
notes: t('armorSpecialSpring2020MageNotes', { int: 9 }),
value: 90,
int: 9,
},
spring2020Healer: {
event: EVENTS.spring2020,
specialClass: 'healer',
set: 'spring2020IrisHealerSet',
text: t('armorSpecialSpring2020HealerText'),
notes: t('armorSpecialSpring2020HealerNotes', { con: 15 }),
value: 90,
con: 15,
},
};
const back = {
@@ -2477,6 +2518,7 @@ const head = {
notes: t('headSpecialSpring2019RogueNotes', { per: 9 }),
value: 60,
per: 9,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Warrior: {
event: EVENTS.spring2019,
@@ -2486,6 +2528,7 @@ const head = {
notes: t('headSpecialSpring2019WarriorNotes', { str: 9 }),
value: 60,
str: 9,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Mage: {
event: EVENTS.spring2019,
@@ -2495,6 +2538,7 @@ const head = {
notes: t('headSpecialSpring2019MageNotes', { per: 7 }),
value: 60,
per: 7,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Healer: {
event: EVENTS.spring2019,
@@ -2504,6 +2548,7 @@ const head = {
notes: t('headSpecialSpring2019HealerNotes', { int: 7 }),
value: 60,
int: 7,
canBuy: () => CURRENT_SEASON === 'spring',
},
summer2019Rogue: {
event: EVENTS.summer2019,
@@ -2626,6 +2671,42 @@ const head = {
value: 0,
canOwn: ownsItem('head_special_nye2019'),
},
spring2020Rogue: {
event: EVENTS.spring2020,
specialClass: 'rogue',
set: 'spring2020LapisLazuliRogueSet',
text: t('headSpecialSpring2020RogueText'),
notes: t('headSpecialSpring2020RogueNotes', { per: 9 }),
value: 60,
per: 9,
},
spring2020Warrior: {
event: EVENTS.spring2020,
specialClass: 'warrior',
set: 'spring2020BeetleWarriorSet',
text: t('headSpecialSpring2020WarriorText'),
notes: t('headSpecialSpring2020WarriorNotes', { str: 9 }),
value: 60,
str: 9,
},
spring2020Mage: {
event: EVENTS.spring2020,
specialClass: 'wizard',
set: 'spring2020PuddleMageSet',
text: t('headSpecialSpring2020MageText'),
notes: t('headSpecialSpring2020MageNotes', { per: 7 }),
value: 60,
per: 7,
},
spring2020Healer: {
event: EVENTS.spring2020,
specialClass: 'healer',
set: 'spring2020IrisHealerSet',
text: t('headSpecialSpring2020HealerText'),
notes: t('headSpecialSpring2020HealerNotes', { int: 7 }),
value: 60,
int: 7,
},
};
const headAccessory = {
@@ -3593,6 +3674,7 @@ const shield = {
notes: t('weaponSpecialSpring2019RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Warrior: {
event: EVENTS.spring2019,
@@ -3602,6 +3684,7 @@ const shield = {
notes: t('shieldSpecialSpring2019WarriorNotes', { con: 7 }),
value: 70,
con: 7,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Healer: {
event: EVENTS.spring2019,
@@ -3611,6 +3694,7 @@ const shield = {
notes: t('shieldSpecialSpring2019HealerNotes', { con: 9 }),
value: 70,
con: 9,
canBuy: () => CURRENT_SEASON === 'spring',
},
summer2019Rogue: {
event: EVENTS.summer2019,
@@ -3709,6 +3793,33 @@ const shield = {
value: 70,
con: 9,
},
spring2020Rogue: {
event: EVENTS.spring2020,
specialClass: 'rogue',
set: 'spring2020LapisLazuliRogueSet',
text: t('weaponSpecialSpring2020RogueText'),
notes: t('weaponSpecialSpring2020RogueNotes', { str: 8 }),
value: 80,
str: 8,
},
spring2020Warrior: {
event: EVENTS.spring2020,
specialClass: 'warrior',
set: 'spring2020BeetleWarriorSet',
text: t('shieldSpecialSpring2020WarriorText'),
notes: t('shieldSpecialSpring2020WarriorNotes', { con: 7 }),
value: 70,
con: 7,
},
spring2020Healer: {
event: EVENTS.spring2020,
specialClass: 'healer',
set: 'spring2020IrisHealerSet',
text: t('shieldSpecialSpring2020HealerText'),
notes: t('shieldSpecialSpring2020HealerNotes', { con: 9 }),
value: 70,
con: 9,
},
};
const weapon = {
@@ -4702,6 +4813,7 @@ const weapon = {
notes: t('weaponSpecialSpring2019RogueNotes', { str: 8 }),
value: 80,
str: 8,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Warrior: {
event: EVENTS.spring2019,
@@ -4711,6 +4823,7 @@ const weapon = {
notes: t('weaponSpecialSpring2019WarriorNotes', { str: 15 }),
value: 90,
str: 15,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Mage: {
event: EVENTS.spring2019,
@@ -4722,6 +4835,7 @@ const weapon = {
value: 160,
int: 15,
per: 7,
canBuy: () => CURRENT_SEASON === 'spring',
},
spring2019Healer: {
event: EVENTS.spring2019,
@@ -4731,6 +4845,7 @@ const weapon = {
notes: t('weaponSpecialSpring2019HealerNotes', { int: 9 }),
value: 90,
int: 9,
canBuy: () => CURRENT_SEASON === 'spring',
},
summer2019Rogue: {
event: EVENTS.summer2019,
@@ -4851,6 +4966,44 @@ const weapon = {
value: 90,
int: 9,
},
spring2020Rogue: {
event: EVENTS.spring2020,
specialClass: 'rogue',
set: 'spring2020LapisLazuliRogueSet',
text: t('weaponSpecialSpring2020RogueText'),
notes: t('weaponSpecialSpring2020RogueNotes', { str: 8 }),
value: 80,
str: 8,
},
spring2020Warrior: {
event: EVENTS.spring2020,
specialClass: 'warrior',
set: 'spring2020BeetleWarriorSet',
text: t('weaponSpecialSpring2020WarriorText'),
notes: t('weaponSpecialSpring2020WarriorNotes', { str: 15 }),
value: 90,
str: 15,
},
spring2020Mage: {
event: EVENTS.spring2020,
specialClass: 'wizard',
set: 'spring2020PuddleMageSet',
twoHanded: true,
text: t('weaponSpecialSpring2020MageText'),
notes: t('weaponSpecialSpring2020MageNotes', { int: 15, per: 7 }),
value: 160,
int: 15,
per: 7,
},
spring2020Healer: {
event: EVENTS.spring2020,
specialClass: 'healer',
set: 'spring2020IrisHealerSet',
text: t('weaponSpecialSpring2020HealerText'),
notes: t('weaponSpecialSpring2020HealerNotes', { int: 9 }),
value: 90,
int: 9,
},
};
export {
@@ -70,6 +70,13 @@ const premium = {
value: 2,
text: t('hatchingPotionShimmer'),
limited: true,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndMarch'),
previousDate: t('marchYYYY', { year: 2018 }),
}),
canBuy () {
return moment().isBefore('2020-05-02');
},
},
Fairy: {
value: 2,
@@ -198,6 +205,13 @@ const premium = {
value: 2,
text: t('hatchingPotionCelestial'),
limited: true,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndMarch'),
previousDate: t('marchYYYY', { year: 2019 }),
}),
canBuy () {
return moment().isBefore('2020-05-02');
},
},
Sunshine: {
value: 2,
@@ -253,6 +267,17 @@ const premium = {
canBuy: hasQuestAchievementFunction('ruby'),
_addlNotes: t('premiumPotionUnlimitedNotes'),
},
BirchBark: {
value: 2,
text: t('hatchingPotionBirchBark'),
limited: true,
canBuy () {
return moment().isBefore('2020-05-02');
},
_addlNotes: t('premiumPotionAddlNotes', {
date: t('dateEndMarch'),
}),
},
};
const wacky = {
@@ -5,6 +5,26 @@ import moment from 'moment';
// path: 'premiumHatchingPotions.Rainbow',
const featuredItems = {
market () {
if (moment().isBefore('2020-05-02')) {
return [
{
type: 'armoire',
path: 'armoire',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.BirchBark',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Shimmer',
},
{
type: 'premiumHatchingPotion',
path: 'premiumHatchingPotions.Celestial',
},
];
}
return [
{
type: 'armoire',
@@ -56,7 +76,7 @@ const featuredItems = {
},
];
},
seasonal: 'winter2019Warrior',
seasonal: 'spring2019Rogue',
timeTravelers: [
// TODO
],
@@ -1,16 +1,21 @@
// import { SEASONAL_SETS } from '../content/constants';
import { SEASONAL_SETS } from '../content/constants';
export default {
opened: false,
opened: true,
currentSeason: 'Closed',
currentSeason: 'Spring',
dateRange: { start: '2019-09-24', end: '2019-10-31' },
dateRange: { start: '2020-03-19', end: '2020-04-30' },
availableSets: [
...SEASONAL_SETS.spring,
],
pinnedSets: {
healer: 'spring2020IrisHealerSet',
rogue: 'spring2020LapisLazuliRogueSet',
warrior: 'spring2020BeetleWarriorSet',
wizard: 'spring2020PuddleMageSet',
},
availableSpells: [
@@ -19,5 +24,5 @@ export default {
availableQuests: [
],
featuredSet: 'fall2018AlterEgoSet',
featuredSet: 'spring2020PuddleMageSet',
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 861 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 850 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 684 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 899 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 976 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

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