diff --git a/SUMMARY.md b/SUMMARY.md
index 11c4b0293..f3ed9d515 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -6,6 +6,7 @@
* [Neo4J](neo4j/README.md)
* [Backend](backend/README.md)
* [GraphQL](backend/graphql.md)
+ * [neo4j-graphql-js](backend/neo4j-graphql-js.md)
* [Webapp](webapp/README.md)
* [Components](webapp/components.md)
* [HTML](webapp/html.md)
diff --git a/backend/neo4j-graphql-js.md b/backend/neo4j-graphql-js.md
new file mode 100644
index 000000000..280942acd
--- /dev/null
+++ b/backend/neo4j-graphql-js.md
@@ -0,0 +1,16 @@
+# neo4j-graphql.js
+
+We use an npm package called `neo4j-graphql-js` as a cypher query builder. This
+library also generates resolvers for graphql queries, unless we implement them
+ourselves.
+
+
+## Debugging
+
+As you can see in their [documentation](https://github.com/neo4j-graphql/neo4j-graphql-js)
+it is possible to log out the generated cypher statements. To do so, run the
+backend like this:
+
+```sh
+DEBUG=neo4j-graphql-js yarn run dev
+```
diff --git a/backend/package.json b/backend/package.json
index 699dc9972..04528f5c8 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -83,7 +83,7 @@
"minimatch": "^3.0.4",
"mustache": "^3.1.0",
"neo4j-driver": "~1.7.6",
- "neo4j-graphql-js": "^2.8.0",
+ "neo4j-graphql-js": "^2.9.0",
"neode": "^0.3.3",
"node-fetch": "~2.6.0",
"nodemailer": "^6.3.1",
@@ -110,7 +110,7 @@
"babel-eslint": "~10.0.3",
"babel-jest": "~24.9.0",
"chai": "~4.2.0",
- "cucumber": "~6.0.3",
+ "cucumber": "~6.0.5",
"eslint": "~6.6.0",
"eslint-config-prettier": "~6.5.0",
"eslint-config-standard": "~14.1.0",
diff --git a/backend/src/schema/resolvers/badges.js b/backend/src/schema/resolvers/badges.js
index 19bc24fd6..d10d6b482 100644
--- a/backend/src/schema/resolvers/badges.js
+++ b/backend/src/schema/resolvers/badges.js
@@ -3,7 +3,7 @@ import { neo4jgraphql } from 'neo4j-graphql-js'
export default {
Query: {
Badge: async (object, args, context, resolveInfo) => {
- return neo4jgraphql(object, args, context, resolveInfo, false)
+ return neo4jgraphql(object, args, context, resolveInfo)
},
},
}
diff --git a/backend/src/schema/resolvers/posts.js b/backend/src/schema/resolvers/posts.js
index 3ba5498b9..12e050298 100644
--- a/backend/src/schema/resolvers/posts.js
+++ b/backend/src/schema/resolvers/posts.js
@@ -43,15 +43,15 @@ export default {
Post: async (object, params, context, resolveInfo) => {
params = await filterForBlockedUsers(params, context)
params = await maintainPinnedPosts(params)
- return neo4jgraphql(object, params, context, resolveInfo, false)
+ return neo4jgraphql(object, params, context, resolveInfo)
},
findPosts: async (object, params, context, resolveInfo) => {
params = await filterForBlockedUsers(params, context)
- return neo4jgraphql(object, params, context, resolveInfo, false)
+ return neo4jgraphql(object, params, context, resolveInfo)
},
profilePagePosts: async (object, params, context, resolveInfo) => {
params = await filterForBlockedUsers(params, context)
- return neo4jgraphql(object, params, context, resolveInfo, false)
+ return neo4jgraphql(object, params, context, resolveInfo)
},
PostsEmotionsCountByEmotion: async (object, params, context, resolveInfo) => {
const session = context.driver.session()
diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js
index 619a21aa2..0bb921bc4 100644
--- a/backend/src/schema/resolvers/users.js
+++ b/backend/src/schema/resolvers/users.js
@@ -54,7 +54,7 @@ export default {
user = await user.toJson()
return [user.node]
}
- return neo4jgraphql(object, args, context, resolveInfo, false)
+ return neo4jgraphql(object, args, context, resolveInfo)
},
},
Mutation: {
diff --git a/backend/yarn.lock b/backend/yarn.lock
index 7dc7c6503..9a32b789c 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -2790,10 +2790,10 @@ cssstyle@^1.0.0:
dependencies:
cssom "0.3.x"
-cucumber-expressions@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-8.0.1.tgz#47eb87dcb626e90a4672986da1130f3c470b9e3d"
- integrity sha512-g+A+tUEafNofe6ErwvOkqaMvDj9NuOr0GouGotpw4r5yK2d4144o9/6sQpXBr2YXbRy5ItmER/2bzAyDAzhPyQ==
+cucumber-expressions@^8.1.0:
+ version "8.2.1"
+ resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-8.2.1.tgz#e250063993350df106a8664c90a414814f555e2d"
+ integrity sha512-6n5JKbAzXfIiwyu2UyUcOmO83QmuSme25+Dw2taK6VNOybOfRkh4yNMA9VtuAJHOmsX3/8l0OVjTbE8lHnjOHA==
dependencies:
becke-ch--regex--s0-0-v1--base--pl--lib "^1.4.0"
xregexp "^4.2.4"
@@ -2803,17 +2803,17 @@ cucumber-tag-expressions@^2.0.2:
resolved "https://registry.yarnpkg.com/cucumber-tag-expressions/-/cucumber-tag-expressions-2.0.2.tgz#aac27aae3690818ec15235bd056282dad8a2d2b8"
integrity sha512-DohmT4X641KX/sb96bdb7J2kXNcQBPrYmf3Oc5kiHCLfzFMWx/o2kB4JvjvQPZnYuA9lRt6pqtArM5gvUn4uzw==
-cucumber@~6.0.3:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/cucumber/-/cucumber-6.0.3.tgz#bf69ecc992772e580dabe265b2ed06ddab13d076"
- integrity sha512-FSx7xdAQfFjcxp/iRBAuCFSXp2iJP1tF2Q5k/a67YgHiYbnwsD9F+UNv9ZG90LFHNsNQhb+67AmVxHkp4JRDpg==
+cucumber@~6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cucumber/-/cucumber-6.0.5.tgz#cdc752ad18b551bcf7bc92774c925302f4408714"
+ integrity sha512-x+W9Fwk6TvcapQsYMxwFU5AsQJDOIJVGrPKmH15OC7jzb9/Dk7Hb0ZAyw4WcpaDcUDRc8bi2k2yJejDp5eTRlg==
dependencies:
assertion-error-formatter "^3.0.0"
bluebird "^3.4.1"
cli-table3 "^0.5.1"
colors "^1.1.2"
commander "^3.0.1"
- cucumber-expressions "^8.0.1"
+ cucumber-expressions "^8.1.0"
cucumber-tag-expressions "^2.0.2"
duration "^0.2.1"
escape-string-regexp "^2.0.0"
@@ -3981,7 +3981,7 @@ glob-parent@^5.0.0:
dependencies:
is-glob "^4.0.1"
-glob@7.1.6:
+glob@7.1.6, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@@ -3993,18 +3993,6 @@ glob@7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
- version "7.1.5"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0"
- integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
global-dirs@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
@@ -6070,10 +6058,10 @@ neo4j-driver@^1.7.3, neo4j-driver@^1.7.5, neo4j-driver@~1.7.6:
text-encoding-utf-8 "^1.0.2"
uri-js "^4.2.2"
-neo4j-graphql-js@^2.8.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/neo4j-graphql-js/-/neo4j-graphql-js-2.8.0.tgz#58035b9213656e17b6ed4c6cbf4dfe1c56a8a219"
- integrity sha512-nDuzmi6W/YGIIVm+GAXCr/8CLABsU/RfeLebLH32vqeKViFATMfm4eT66aOq/GwHJ0838+o20yCbIFdx5rTP/A==
+neo4j-graphql-js@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/neo4j-graphql-js/-/neo4j-graphql-js-2.9.0.tgz#b214a0546479565cb5b812fb7e602f2136d36a0d"
+ integrity sha512-vpOUPwx7Xwn2EZoe0i9z+AMJ4uwZeUjWDGiR4ZAR6ebNd5BaYpiC9SihYOZlS3hVXHZxADQfpGhz9dx++lZwlg==
dependencies:
"@babel/runtime" "^7.5.5"
"@babel/runtime-corejs2" "^7.5.5"
diff --git a/docker-compose.build-and-test.yml b/docker-compose.build-and-test.yml
index e8e79644f..27aa9fc6b 100644
--- a/docker-compose.build-and-test.yml
+++ b/docker-compose.build-and-test.yml
@@ -2,11 +2,15 @@ version: "3.4"
services:
webapp:
+ environment:
+ - "CI=${CI}"
image: humanconnection/nitro-web:build-and-test
build:
context: webapp
target: build-and-test
backend:
+ environment:
+ - "CI=${CI}"
image: humanconnection/nitro-backend:build-and-test
build:
context: backend
diff --git a/webapp/components/AvatarMenu/AvatarMenu.vue b/webapp/components/AvatarMenu/AvatarMenu.vue
index 393963997..7443c91a7 100644
--- a/webapp/components/AvatarMenu/AvatarMenu.vue
+++ b/webapp/components/AvatarMenu/AvatarMenu.vue
@@ -69,7 +69,7 @@ export default {
if (!this.user.slug) {
return []
}
- let routes = [
+ const routes = [
{
name: this.$t('profile.name'),
path: `/profile/${this.user.id}/${this.user.slug}`,
diff --git a/webapp/components/Category/index.spec.js b/webapp/components/Category/index.spec.js
index 7ce0b7243..13de0b690 100644
--- a/webapp/components/Category/index.spec.js
+++ b/webapp/components/Category/index.spec.js
@@ -9,7 +9,7 @@ describe('Category', () => {
let icon
let name
- let Wrapper = () => {
+ const Wrapper = () => {
return shallowMount(Category, {
localVue,
propsData: {
diff --git a/webapp/components/ContentMenu.vue b/webapp/components/ContentMenu.vue
index 3b1470fba..66f09e181 100644
--- a/webapp/components/ContentMenu.vue
+++ b/webapp/components/ContentMenu.vue
@@ -53,7 +53,7 @@ export default {
},
computed: {
routes() {
- let routes = []
+ const routes = []
if (this.resourceType === 'contribution') {
if (this.isOwner) {
diff --git a/webapp/components/ContributionForm/ContributionForm.vue b/webapp/components/ContributionForm/ContributionForm.vue
index eb849c71f..f5a02e305 100644
--- a/webapp/components/ContributionForm/ContributionForm.vue
+++ b/webapp/components/ContributionForm/ContributionForm.vue
@@ -223,7 +223,7 @@ export default {
this.form.teaserImage = file
},
categoryIds(categories) {
- let categoryIds = []
+ const categoryIds = []
categories.map(categoryId => {
categoryIds.push(categoryId.id)
})
diff --git a/webapp/components/DeleteData/DeleteData.vue b/webapp/components/DeleteData/DeleteData.vue
index f6e6d47f0..451a44eb4 100644
--- a/webapp/components/DeleteData/DeleteData.vue
+++ b/webapp/components/DeleteData/DeleteData.vue
@@ -101,7 +101,7 @@ export default {
}
},
handleSubmit() {
- let resourceArgs = []
+ const resourceArgs = []
if (this.deleteContributions) {
resourceArgs.push('Post')
}
diff --git a/webapp/components/Editor/Editor.spec.js b/webapp/components/Editor/Editor.spec.js
index 18eaef3b8..68ed6de53 100644
--- a/webapp/components/Editor/Editor.spec.js
+++ b/webapp/components/Editor/Editor.spec.js
@@ -79,7 +79,7 @@ describe('Editor.vue', () => {
describe('limists suggestion list to 15 users', () => {
beforeEach(() => {
- let manyUsersList = []
+ const manyUsersList = []
for (let i = 0; i < 25; i++) {
manyUsersList.push({ id: `user${i}` })
}
@@ -120,7 +120,7 @@ describe('Editor.vue', () => {
describe('limists suggestion list to 15 hashtags', () => {
beforeEach(() => {
- let manyHashtagsList = []
+ const manyHashtagsList = []
for (let i = 0; i < 25; i++) {
manyHashtagsList.push({ id: `hashtag${i}` })
}
diff --git a/webapp/components/Editor/Editor.story.js b/webapp/components/Editor/Editor.story.js
index 7a69b347f..8efcf3f4c 100644
--- a/webapp/components/Editor/Editor.story.js
+++ b/webapp/components/Editor/Editor.story.js
@@ -27,7 +27,11 @@ const plugins = [
]
helpers.init({ plugins })
-const users = [{ id: 1, slug: 'peter' }, { id: 2, slug: 'sandra' }, { id: 3, slug: 'jane' }]
+const users = [
+ { id: 1, slug: 'peter' },
+ { id: 2, slug: 'sandra' },
+ { id: 3, slug: 'jane' },
+]
storiesOf('Editor', module)
.addDecorator(withA11y)
diff --git a/webapp/components/Editor/Editor.vue b/webapp/components/Editor/Editor.vue
index fa37c64dc..234d94d2d 100644
--- a/webapp/components/Editor/Editor.vue
+++ b/webapp/components/Editor/Editor.vue
@@ -377,6 +377,7 @@ li > p {
.embed-preview-image {
width: 100%;
height: auto;
+ max-height: 450px;
}
.embed-preview-image--clickable {
diff --git a/webapp/components/Editor/defaultExtensions.spec.js b/webapp/components/Editor/defaultExtensions.spec.js
index 78924db55..13f8cb0f3 100644
--- a/webapp/components/Editor/defaultExtensions.spec.js
+++ b/webapp/components/Editor/defaultExtensions.spec.js
@@ -63,30 +63,26 @@ describe('defaultExtensions', () => {
it('recognizes embed code', () => {
const editor = createEditor()
const expected = {
+ type: 'doc',
content: [
{
+ type: 'paragraph',
content: [
{
text: 'Baby loves cat:',
type: 'text',
},
],
- type: 'paragraph',
},
{
- content: [
- {
- attrs: {
- dataEmbedUrl: 'https://www.youtube.com/watch?v=qkdXAtO40Fo',
- },
- type: 'embed',
- },
- ],
- type: 'paragraph',
+ type: 'embed',
+ attrs: {
+ dataEmbedUrl: 'https://www.youtube.com/watch?v=qkdXAtO40Fo',
+ },
},
],
- type: 'doc',
}
+
expect(editor.getJSON()).toEqual(expected)
})
})
diff --git a/webapp/components/Editor/nodes/Embed.js b/webapp/components/Editor/nodes/Embed.js
index 0d7a82a18..e84b717e2 100644
--- a/webapp/components/Editor/nodes/Embed.js
+++ b/webapp/components/Editor/nodes/Embed.js
@@ -38,8 +38,8 @@ export default class Embed extends Node {
default: null,
},
},
- group: 'inline',
- inline: true,
+ group: 'block',
+ inline: false,
parseDOM: [
{
tag: 'a[href].embed',
diff --git a/webapp/components/Editor/plugins/eventHandler.js b/webapp/components/Editor/plugins/eventHandler.js
index 807949aa8..4e2448d23 100644
--- a/webapp/components/Editor/plugins/eventHandler.js
+++ b/webapp/components/Editor/plugins/eventHandler.js
@@ -5,6 +5,7 @@ export default class EventHandler extends Extension {
get name() {
return 'event_handler'
}
+
get plugins() {
return [
new Plugin({
diff --git a/webapp/components/Hashtag/Hashtag.spec.js b/webapp/components/Hashtag/Hashtag.spec.js
index cfd1a7c2a..a8b9f7641 100644
--- a/webapp/components/Hashtag/Hashtag.spec.js
+++ b/webapp/components/Hashtag/Hashtag.spec.js
@@ -10,7 +10,7 @@ config.stubs['nuxt-link'] = ''
describe('Hashtag', () => {
let id
- let Wrapper = () => {
+ const Wrapper = () => {
return shallowMount(Hashtag, {
localVue,
propsData: {
diff --git a/webapp/components/LocaleSwitch/LocaleSwitch.vue b/webapp/components/LocaleSwitch/LocaleSwitch.vue
index 38334621e..37a6c97e7 100644
--- a/webapp/components/LocaleSwitch/LocaleSwitch.vue
+++ b/webapp/components/LocaleSwitch/LocaleSwitch.vue
@@ -58,7 +58,7 @@ export default {
return find(this.locales, { code: this.$i18n.locale() })
},
routes() {
- let routes = this.locales.map(locale => {
+ const routes = this.locales.map(locale => {
return {
name: locale.name,
path: locale.code,
diff --git a/webapp/components/NotificationMenu/NotificationMenu.spec.js b/webapp/components/NotificationMenu/NotificationMenu.spec.js
index 87576a5f3..6b19b7fb1 100644
--- a/webapp/components/NotificationMenu/NotificationMenu.spec.js
+++ b/webapp/components/NotificationMenu/NotificationMenu.spec.js
@@ -10,7 +10,7 @@ localVue.use(Styleguide)
localVue.use(Filters)
localVue.filter('truncate', string => string)
-config.stubs['dropdown'] = ''
+config.stubs.dropdown = ''
describe('NotificationMenu.vue', () => {
let wrapper
diff --git a/webapp/components/Paginate/Paginate.spec.js b/webapp/components/Paginate/Paginate.spec.js
index 034d33301..a71e8cec8 100644
--- a/webapp/components/Paginate/Paginate.spec.js
+++ b/webapp/components/Paginate/Paginate.spec.js
@@ -7,13 +7,13 @@ const localVue = createLocalVue()
localVue.use(Styleguide)
describe('Paginate.vue', () => {
- let propsData, wrapper, Wrapper, nextButton, backButton
+ let propsData, wrapper, nextButton, backButton
beforeEach(() => {
propsData = {}
})
- Wrapper = () => {
+ const Wrapper = () => {
return mount(Paginate, { propsData, localVue })
}
describe('mount', () => {
diff --git a/webapp/components/RelativeDateTime/spec.js b/webapp/components/RelativeDateTime/spec.js
index 15574f539..356ea8874 100644
--- a/webapp/components/RelativeDateTime/spec.js
+++ b/webapp/components/RelativeDateTime/spec.js
@@ -16,7 +16,7 @@ describe('RelativeDateTime', () => {
}
})
- let Wrapper = () => {
+ const Wrapper = () => {
return shallowMount(RelativeDateTime, {
mocks,
localVue,
diff --git a/webapp/components/Ribbon/index.spec.js b/webapp/components/Ribbon/index.spec.js
index b1c519992..c642378f6 100644
--- a/webapp/components/Ribbon/index.spec.js
+++ b/webapp/components/Ribbon/index.spec.js
@@ -6,7 +6,7 @@ const localVue = createLocalVue()
describe('Ribbon', () => {
let text
- let Wrapper = () => {
+ const Wrapper = () => {
return shallowMount(Ribbon, {
localVue,
propsData: {
diff --git a/webapp/components/TeaserImage/TeaserImage.vue b/webapp/components/TeaserImage/TeaserImage.vue
index d7ba0e7d8..1b64073f2 100644
--- a/webapp/components/TeaserImage/TeaserImage.vue
+++ b/webapp/components/TeaserImage/TeaserImage.vue
@@ -64,7 +64,7 @@ export default {
},
watch: {
error() {
- let that = this
+ const that = this
setTimeout(function() {
that.error = false
}, 2000)
diff --git a/webapp/components/Upload/index.vue b/webapp/components/Upload/index.vue
index 3f84f8a7c..c348dda92 100644
--- a/webapp/components/Upload/index.vue
+++ b/webapp/components/Upload/index.vue
@@ -43,7 +43,7 @@ export default {
},
watch: {
error() {
- let that = this
+ const that = this
setTimeout(function() {
that.error = false
}, 2000)
diff --git a/webapp/components/utils/ReportModal.spec.js b/webapp/components/utils/ReportModal.spec.js
index de4277c4c..babfaa5cc 100644
--- a/webapp/components/utils/ReportModal.spec.js
+++ b/webapp/components/utils/ReportModal.spec.js
@@ -8,7 +8,7 @@ beforeEach(() => {
})
describe('validReport', () => {
- let validate = object => {
+ const validate = object => {
const { formSchema } = validReport({ translate })
const validator = new Schema(formSchema)
return validator.validate(object, { suppressWarning: true }).catch(({ errors }) => {
diff --git a/webapp/components/utils/UniqueSlugForm.spec.js b/webapp/components/utils/UniqueSlugForm.spec.js
index de0e3fee6..da65104fc 100644
--- a/webapp/components/utils/UniqueSlugForm.spec.js
+++ b/webapp/components/utils/UniqueSlugForm.spec.js
@@ -14,7 +14,7 @@ beforeEach(() => {
})
describe('UniqueSlugForm', () => {
- let validate = object => {
+ const validate = object => {
const { formSchema } = UniqueSlugForm({ translate, apollo, currentUser })
const validator = new Schema(formSchema)
return validator.validate(object, { suppressWarning: true }).catch(({ errors }) => {
diff --git a/webapp/layouts/default.vue b/webapp/layouts/default.vue
index a39e0a148..94a9c0912 100644
--- a/webapp/layouts/default.vue
+++ b/webapp/layouts/default.vue
@@ -6,11 +6,7 @@
-
+
@@ -143,7 +139,6 @@ export default {
...mapActions({
quickSearchClear: 'search/quickClear',
quickSearch: 'search/quickSearch',
- refreshPosts: 'posts/refreshPosts',
}),
goToPost(item) {
this.$nextTick(() => {
diff --git a/webapp/locales/de.json b/webapp/locales/de.json
index 2867f5495..773720298 100644
--- a/webapp/locales/de.json
+++ b/webapp/locales/de.json
@@ -313,12 +313,14 @@
},
"columns": {
"name": "Name",
- "slug": "Alias"
+ "slug": "Alias",
+ "unblock": "Entblocken"
},
"empty": "Bislang hast du niemanden blockiert.",
"how-to": "Du kannst andere Benutzer auf deren Profilseite über das Inhaltsmenü blockieren.",
"block": "Nutzer blockieren",
- "unblock": "Nutzer entblocken"
+ "unblock": "Nutzer entblocken",
+ "unblocked": "{name} ist wieder entblockt"
}
},
"admin": {
diff --git a/webapp/locales/en.json b/webapp/locales/en.json
index d1b56cdc0..25270d178 100644
--- a/webapp/locales/en.json
+++ b/webapp/locales/en.json
@@ -314,12 +314,14 @@
},
"columns": {
"name": "Name",
- "slug": "Slug"
+ "slug": "Slug",
+ "unblock": "Unblock"
},
"empty": "So far, you have not blocked anybody.",
"how-to": "You can block other users on their profile page via the content menu.",
"block": "Block user",
- "unblock": "Unblock user"
+ "unblock": "Unblock user",
+ "unblocked": "{name} is unblocked again"
}
},
"admin": {
diff --git a/webapp/middleware/authenticated.js b/webapp/middleware/authenticated.js
index f2273df58..91a230865 100644
--- a/webapp/middleware/authenticated.js
+++ b/webapp/middleware/authenticated.js
@@ -1,7 +1,7 @@
import isEmpty from 'lodash/isEmpty'
export default async ({ store, env, route, redirect }) => {
- let publicPages = env.publicPages
+ const publicPages = env.publicPages
// only affect non public pages
if (publicPages.indexOf(route.name) >= 0) {
return true
@@ -17,7 +17,7 @@ export default async ({ store, env, route, redirect }) => {
// await store.dispatch('auth/logout', null, { root: true })
// set the redirect path for after the login
- let params = {}
+ const params = {}
if (!isEmpty(route.path) && route.path !== '/') {
params.path = route.path
}
diff --git a/webapp/middleware/termsAndConditions.js b/webapp/middleware/termsAndConditions.js
index 68ad49bf8..e056bf40a 100644
--- a/webapp/middleware/termsAndConditions.js
+++ b/webapp/middleware/termsAndConditions.js
@@ -1,7 +1,7 @@
import isEmpty from 'lodash/isEmpty'
export default async ({ store, env, route, redirect }) => {
- let publicPages = env.publicPages
+ const publicPages = env.publicPages
// only affect non public pages
if (publicPages.indexOf(route.name) >= 0) {
return true
@@ -11,7 +11,7 @@ export default async ({ store, env, route, redirect }) => {
if (store.getters['auth/termsAndConditionsAgreed']) return true
- let params = {}
+ const params = {}
if (!isEmpty(route.path) && route.path !== '/') {
params.path = route.path
}
diff --git a/webapp/nuxt.config.js b/webapp/nuxt.config.js
index 17bb5290c..eb628c7d6 100644
--- a/webapp/nuxt.config.js
+++ b/webapp/nuxt.config.js
@@ -118,7 +118,7 @@ export default {
{ src: '~/plugins/v-tooltip.js', ssr: false },
{ src: '~/plugins/izi-toast.js', ssr: false },
{ src: '~/plugins/vue-filters.js' },
- { src: '~/plugins/vue-infinite-scroll.js', ssr: false },
+ { src: '~/plugins/vue-infinite-loading.js', ssr: false },
],
router: {
diff --git a/webapp/package.json b/webapp/package.json
index a75d80095..ea217436c 100644
--- a/webapp/package.json
+++ b/webapp/package.json
@@ -83,7 +83,7 @@
"v-tooltip": "~2.0.2",
"validator": "^12.0.0",
"vue-count-to": "~1.0.13",
- "vue-infinite-scroll": "^2.0.2",
+ "vue-infinite-loading": "^2.4.4",
"vue-izitoast": "^1.2.1",
"vue-scrollto": "^2.17.1",
"vue-sweetalert-icons": "~4.2.0",
@@ -111,17 +111,17 @@
"babel-preset-vue": "~2.0.2",
"core-js": "~2.6.10",
"css-loader": "~3.2.0",
- "eslint": "~5.16.0",
+ "eslint": "~6.6.0",
"eslint-config-prettier": "~6.5.0",
- "eslint-config-standard": "~12.0.0",
+ "eslint-config-standard": "~14.1.0",
"eslint-loader": "~3.0.2",
"eslint-plugin-import": "~2.18.2",
- "eslint-plugin-jest": "~23.0.2",
+ "eslint-plugin-jest": "~23.0.4",
"eslint-plugin-node": "~10.0.0",
"eslint-plugin-prettier": "~3.1.1",
"eslint-plugin-promise": "~4.2.1",
"eslint-plugin-standard": "~4.0.1",
- "eslint-plugin-vue": "~6.0.0",
+ "eslint-plugin-vue": "~6.0.1",
"faker": "^4.1.0",
"flush-promises": "^1.0.2",
"fuse.js": "^3.4.5",
@@ -129,7 +129,7 @@
"jest": "~24.9.0",
"mutation-observer": "^1.0.3",
"node-sass": "~4.13.0",
- "prettier": "~1.18.2",
+ "prettier": "~1.19.1",
"sass-loader": "~8.0.0",
"storybook-design-token": "^0.4.1",
"storybook-vue-router": "^1.0.7",
diff --git a/webapp/pages/admin/hashtags.vue b/webapp/pages/admin/hashtags.vue
index 76306873a..521d3110a 100644
--- a/webapp/pages/admin/hashtags.vue
+++ b/webapp/pages/admin/hashtags.vue
@@ -1,9 +1,7 @@
-
- {{ scope.index + 1 }}.
-
+ {{ scope.index + 1 }}.
#{{ scope.row.id | truncate(20) }}
diff --git a/webapp/pages/admin/users.vue b/webapp/pages/admin/users.vue
index b8478df41..67594180d 100644
--- a/webapp/pages/admin/users.vue
+++ b/webapp/pages/admin/users.vue
@@ -20,9 +20,7 @@
-
- {{ scope.row.index + 1 }}.
-
+ {{ scope.row.index + 1 }}.
-
+
-
-
-
+
+
+
+
+
@@ -97,7 +92,6 @@ export default {
orderBy: 'posts/orderBy',
selectedOrder: 'posts/selectedOrder',
sortingIcon: 'posts/orderIcon',
- currentPosts: 'posts/currentPosts',
}),
selected: {
get() {
@@ -105,7 +99,7 @@ export default {
},
set({ value }) {
this.offset = 0
- this.setCurrentPosts([])
+ this.posts = []
this.selectOrder(value)
},
},
@@ -123,13 +117,12 @@ export default {
return filter
},
hasResults() {
- return this.$apollo.loading || (this.currentPosts && this.currentPosts.length > 0)
+ return this.$apollo.loading || (this.posts && this.posts.length > 0)
},
},
methods: {
...mapMutations({
selectOrder: 'posts/SELECT_ORDER',
- setCurrentPosts: 'posts/SET_CURRENT_POSTS',
}),
clearSearch() {
this.$router.push({ path: '/' })
@@ -141,7 +134,7 @@ export default {
params: { id: post.id, slug: post.slug },
}).href
},
- showMoreContributions() {
+ showMoreContributions($state) {
const { Post: PostQuery } = this.$apollo.queries
if (!PostQuery) return // seems this can be undefined on subpages
@@ -156,7 +149,9 @@ export default {
updateQuery: (previousResult, { fetchMoreResult }) => {
if (!fetchMoreResult || fetchMoreResult.Post.length < this.pageSize) {
this.hasMore = false
+ $state.complete()
}
+
const result = {
...previousResult,
Post: [
@@ -168,19 +163,19 @@ export default {
...fetchMoreResult.Post,
],
}
- this.setCurrentPosts(result.Post)
+ $state.loaded()
+ return result
},
})
},
deletePost(deletedPost) {
- const posts = this.currentPosts.filter(post => {
+ this.posts = this.posts.filter(post => {
return post.id !== deletedPost.id
})
- this.setCurrentPosts(posts)
},
resetPostList() {
this.offset = 0
- this.setCurrentPosts([])
+ this.posts = []
this.hasMore = true
},
pinPost(post) {
@@ -224,7 +219,7 @@ export default {
}
},
update({ Post }) {
- this.setCurrentPosts(Post)
+ this.posts = Post
},
fetchPolicy: 'cache-and-network',
},
diff --git a/webapp/pages/profile/_id/_slug.spec.js b/webapp/pages/profile/_id/_slug.spec.js
index f7eba10cc..4dfbbd3e0 100644
--- a/webapp/pages/profile/_id/_slug.spec.js
+++ b/webapp/pages/profile/_id/_slug.spec.js
@@ -3,19 +3,20 @@ import ProfileSlug from './_slug.vue'
import Vuex from 'vuex'
import Styleguide from '@human-connection/styleguide'
import Filters from '~/plugins/vue-filters'
-import InfiniteScroll from '~/plugins/vue-infinite-scroll'
+import InfiniteLoading from '~/plugins/vue-infinite-loading'
const localVue = createLocalVue()
localVue.use(Vuex)
localVue.use(Styleguide)
localVue.use(Filters)
-localVue.use(InfiniteScroll)
+localVue.use(InfiniteLoading)
localVue.filter('date', d => d)
config.stubs['client-only'] = ''
config.stubs['v-popover'] = ''
config.stubs['nuxt-link'] = ''
+config.stubs['infinite-loading'] = ''
describe('ProfileSlug', () => {
let wrapper
@@ -127,23 +128,6 @@ describe('ProfileSlug', () => {
})
})
- describe('pagination returned less posts than available', () => {
- beforeEach(() => {
- const posts = [1, 2, 3, 4, 5].map(id => {
- return {
- ...aPost,
- id,
- }
- })
-
- wrapper.setData({ posts, hasMore: true })
- })
-
- it('does not display a "load more" button', () => {
- expect(wrapper.find('.load-more').exists()).toBe(false)
- })
- })
-
describe('pagination returned at least as many posts as pageSize', () => {
beforeEach(() => {
const posts = [1, 2, 3, 4, 5, 6].map(id => {
diff --git a/webapp/pages/profile/_id/_slug.vue b/webapp/pages/profile/_id/_slug.vue
index b0d6a8d11..e0436753d 100644
--- a/webapp/pages/profile/_id/_slug.vue
+++ b/webapp/pages/profile/_id/_slug.vue
@@ -255,16 +255,11 @@
-
-
-
+
+
+
+
+
@@ -378,7 +373,7 @@ export default {
uniq(items, field = 'id') {
return uniqBy(items, field)
},
- showMoreContributions() {
+ showMoreContributions($state) {
const { profilePagePosts: PostQuery } = this.$apollo.queries
if (!PostQuery) return // seems this can be undefined on subpages
this.offset += this.pageSize
@@ -393,6 +388,7 @@ export default {
updateQuery: (previousResult, { fetchMoreResult }) => {
if (!fetchMoreResult || fetchMoreResult.profilePagePosts.length < this.pageSize) {
this.hasMore = false
+ $state.complete()
}
const result = {
...previousResult,
@@ -406,6 +402,7 @@ export default {
...fetchMoreResult.profilePagePosts,
],
}
+ $state.loaded()
return result
},
})
diff --git a/webapp/pages/settings/blocked-users.spec.js b/webapp/pages/settings/blocked-users.spec.js
new file mode 100644
index 000000000..c78de5dc7
--- /dev/null
+++ b/webapp/pages/settings/blocked-users.spec.js
@@ -0,0 +1,69 @@
+import { config, mount, createLocalVue } from '@vue/test-utils'
+import BlockedUsers from './blocked-users.vue'
+import Styleguide from '@human-connection/styleguide'
+import Filters from '~/plugins/vue-filters'
+import { Unblock } from '~/graphql/settings/BlockedUsers'
+
+const localVue = createLocalVue()
+
+localVue.use(Styleguide)
+localVue.use(Filters)
+
+config.stubs['nuxt-link'] = ''
+
+describe('blocked-users.vue', () => {
+ let wrapper
+ let mocks
+
+ beforeEach(() => {
+ mocks = {
+ $t: jest.fn(),
+ $apollo: {
+ mutate: jest.fn(),
+ queries: {
+ blockedUsers: {
+ refetch: jest.fn(),
+ },
+ },
+ },
+ $toast: {
+ error: jest.fn(),
+ success: jest.fn(),
+ },
+ }
+ })
+
+ describe('mount', () => {
+ const Wrapper = () => {
+ return mount(BlockedUsers, { mocks, localVue })
+ }
+
+ beforeEach(() => {
+ wrapper = Wrapper()
+ })
+
+ it('renders', () => {
+ expect(wrapper.is('div')).toBe(true)
+ })
+
+ describe('given a list of blocked users', () => {
+ beforeEach(() => {
+ const blockedUsers = [{ id: 'u1', name: 'John Doe', slug: 'john-doe', avatar: '' }]
+ wrapper.setData({ blockedUsers })
+ })
+
+ describe('click unblock', () => {
+ beforeEach(() => {
+ wrapper.find('button').trigger('click')
+ })
+
+ it('calls unblock mutation with given user', () => {
+ expect(mocks.$apollo.mutate).toHaveBeenCalledWith({
+ mutation: Unblock(),
+ variables: { id: 'u1' },
+ })
+ })
+ })
+ })
+ })
+})
diff --git a/webapp/pages/settings/blocked-users.vue b/webapp/pages/settings/blocked-users.vue
index 19e24c994..acbd253aa 100644
--- a/webapp/pages/settings/blocked-users.vue
+++ b/webapp/pages/settings/blocked-users.vue
@@ -56,6 +56,10 @@
{{ scope.row.slug | truncate(20) }}
+
+
+
+
@@ -74,7 +78,7 @@
diff --git a/webapp/pages/settings/index.vue b/webapp/pages/settings/index.vue
index 934b10558..8ea6dddaf 100644
--- a/webapp/pages/settings/index.vue
+++ b/webapp/pages/settings/index.vue
@@ -117,7 +117,7 @@ export default {
this.loadingData = true
const { name, slug, about } = this.formData
let { locationName } = this.formData || this.currentUser
- locationName = locationName && (locationName['label'] || locationName)
+ locationName = locationName && (locationName.label || locationName)
try {
await this.$apollo.mutate({
mutation,
@@ -154,7 +154,7 @@ export default {
if (!res || !res.data || !res.data.features || !res.data.features.length) {
return []
}
- let output = []
+ const output = []
res.data.features.forEach(item => {
output.push({
label: item.place_name,
diff --git a/webapp/plugins/vue-filters.js b/webapp/plugins/vue-filters.js
index 399b675fa..56fc6ca73 100644
--- a/webapp/plugins/vue-filters.js
+++ b/webapp/plugins/vue-filters.js
@@ -45,7 +45,11 @@ export default ({ app = {} }) => {
return value.join(glue)
},
listByKey: (values, key, glue, truncate) => {
- return app.$filters.list(values.map(item => item[key]), glue, truncate)
+ return app.$filters.list(
+ values.map(item => item[key]),
+ glue,
+ truncate,
+ )
},
camelCase: (value = '') => {
return value
diff --git a/webapp/plugins/vue-infinite-loading.js b/webapp/plugins/vue-infinite-loading.js
new file mode 100644
index 000000000..e3e447a21
--- /dev/null
+++ b/webapp/plugins/vue-infinite-loading.js
@@ -0,0 +1,4 @@
+import Vue from 'vue'
+import InfiniteLoading from 'vue-infinite-loading'
+
+Vue.use(InfiniteLoading, { props: { distance: 10 }, system: { throttleLimit: 800 } })
diff --git a/webapp/plugins/vue-infinite-scroll.js b/webapp/plugins/vue-infinite-scroll.js
deleted file mode 100644
index 776db193b..000000000
--- a/webapp/plugins/vue-infinite-scroll.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import Vue from 'vue'
-import infiniteScroll from 'vue-infinite-scroll'
-
-Vue.use(infiniteScroll)
diff --git a/webapp/store/auth.test.js b/webapp/store/auth.test.js
index ad398520f..87b5295dc 100644
--- a/webapp/store/auth.test.js
+++ b/webapp/store/auth.test.js
@@ -169,7 +169,10 @@ describe('actions', () => {
it('saves pending flags in order', () => {
expect(commit.mock.calls).toEqual(
- expect.arrayContaining([['SET_PENDING', true], ['SET_PENDING', false]]),
+ expect.arrayContaining([
+ ['SET_PENDING', true],
+ ['SET_PENDING', false],
+ ]),
)
})
})
@@ -207,7 +210,10 @@ describe('actions', () => {
await action({ commit }, { email: 'user@example.org', password: 'wrong' })
} catch (err) {} // ignore
expect(commit.mock.calls).toEqual(
- expect.arrayContaining([['SET_PENDING', true], ['SET_PENDING', false]]),
+ expect.arrayContaining([
+ ['SET_PENDING', true],
+ ['SET_PENDING', false],
+ ]),
)
})
})
diff --git a/webapp/store/posts.js b/webapp/store/posts.js
index 4342c5e9e..0583388f7 100644
--- a/webapp/store/posts.js
+++ b/webapp/store/posts.js
@@ -4,8 +4,6 @@ import xor from 'lodash/xor'
import isEmpty from 'lodash/isEmpty'
import isEqual from 'lodash/isEqual'
import clone from 'lodash/clone'
-import { filterPosts } from '~/graphql/PostQuery'
-import { first, offset } from '~/constants/posts'
const defaultFilter = {}
@@ -27,8 +25,7 @@ export const state = () => {
filter: {
...defaultFilter,
},
- order: orderOptions['createdAt_desc'],
- currentPosts: [],
+ order: orderOptions.createdAt_desc,
}
}
@@ -77,9 +74,6 @@ export const mutations = {
SELECT_ORDER(state, value) {
state.order = orderOptions[value]
},
- SET_CURRENT_POSTS(state, posts) {
- state.currentPosts = posts
- },
}
export const getters = {
@@ -120,26 +114,4 @@ export const getters = {
orderIcon(state) {
return state.order.icon
},
- currentPosts(state) {
- return state.currentPosts || []
- },
-}
-
-export const actions = {
- async refreshPosts({ commit, getters }, { i18n }) {
- const client = this.app.apolloProvider.defaultClient
- const {
- data: { Post },
- } = await client.query({
- query: filterPosts(i18n),
- variables: {
- filter: getters.filter,
- first,
- orderBy: ['pinned_asc', getters.orderBy],
- offset,
- },
- })
- commit('SET_CURRENT_POSTS', Post)
- return Post
- },
}
diff --git a/webapp/yarn.lock b/webapp/yarn.lock
index 72a6dd55b..ae9933ca6 100644
--- a/webapp/yarn.lock
+++ b/webapp/yarn.lock
@@ -3255,6 +3255,11 @@ acorn-jsx@^5.0.0:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
+acorn-jsx@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384"
+ integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==
+
acorn-walk@^6.0.1, acorn-walk@^6.1.1:
version "6.1.1"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913"
@@ -3275,6 +3280,11 @@ acorn@^6.2.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51"
integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==
+acorn@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c"
+ integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==
+
address@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
@@ -3338,17 +3348,7 @@ ajv-keywords@^3.4.1:
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
-ajv@^6.1.0, ajv@^6.5.5, ajv@^6.9.1:
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
- integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
- dependencies:
- fast-deep-equal "^2.0.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-ajv@^6.10.2:
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
version "6.10.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
@@ -5465,6 +5465,13 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0:
dependencies:
restore-cursor "^2.0.0"
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
cli-spinners@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.1.0.tgz#22c34b4d51f573240885b201efda4e4ec9fff3c7"
@@ -7052,10 +7059,10 @@ eslint-config-prettier@^6.0.0, eslint-config-prettier@~6.5.0:
dependencies:
get-stdin "^6.0.0"
-eslint-config-standard@~12.0.0:
- version "12.0.0"
- resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9"
- integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==
+eslint-config-standard@~14.1.0:
+ version "14.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz#b23da2b76fe5a2eba668374f246454e7058f15d4"
+ integrity sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA==
eslint-import-resolver-node@^0.3.2:
version "0.3.2"
@@ -7109,10 +7116,10 @@ eslint-plugin-import@~2.18.2:
read-pkg-up "^2.0.0"
resolve "^1.11.0"
-eslint-plugin-jest@~23.0.2:
- version "23.0.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.0.2.tgz#54a59bfe77245186afe13711a297067aefefff0a"
- integrity sha512-fkxcvOJm0hC/jbJqYJjtuC9mvpTJqXd0Nixx7joVQvJoBQuXk/ws3+MtRYzD/4TcKSgvr21uuSLdwSxKJKC2cg==
+eslint-plugin-jest@~23.0.4:
+ version "23.0.4"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.0.4.tgz#1ab81ffe3b16c5168efa72cbd4db14d335092aa0"
+ integrity sha512-OaP8hhT8chJNodUPvLJ6vl8gnalcsU/Ww1t9oR3HnGdEWjm/DdCCUXLOral+IPGAeWu/EwgVQCK/QtxALpH1Yw==
dependencies:
"@typescript-eslint/experimental-utils" "^2.5.0"
@@ -7145,12 +7152,12 @@ eslint-plugin-standard@~4.0.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4"
integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==
-eslint-plugin-vue@~6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.0.0.tgz#fc7a4116dff614a27be8639fb47973703dd332fa"
- integrity sha512-+LxTJCd6nDt+AKQ1X+ySD48xJHft8OkeQmAhiq6UoAMxRFTiEKIDusiGgEUJLwKyiwGUGWbbqEbbWvupH5TSjg==
+eslint-plugin-vue@~6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.0.1.tgz#166d3eb24cf290f3ff24d44fe9fca496f3924fc2"
+ integrity sha512-5tgFPcxGDKjfVB/6Yi56bKiWxygUibfZmzSh26Np3kuwAk/lfaGbVld+Yt+MPgD84ppvcachtiL4/winsXLjXA==
dependencies:
- vue-eslint-parser "^6.0.4"
+ vue-eslint-parser "^6.0.5"
eslint-scope@^4.0.0, eslint-scope@^4.0.3:
version "4.0.3"
@@ -7168,66 +7175,67 @@ eslint-scope@^5.0.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"
-eslint-utils@^1.3.1, eslint-utils@^1.4.2:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab"
- integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==
+eslint-utils@^1.4.2, eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
dependencies:
- eslint-visitor-keys "^1.0.0"
+ eslint-visitor-keys "^1.1.0"
-eslint-visitor-keys@^1.0.0:
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
-eslint@~5.16.0:
- version "5.16.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
- integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
+eslint@~6.6.0:
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.6.0.tgz#4a01a2fb48d32aacef5530ee9c5a78f11a8afd04"
+ integrity sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g==
dependencies:
"@babel/code-frame" "^7.0.0"
- ajv "^6.9.1"
+ ajv "^6.10.0"
chalk "^2.1.0"
cross-spawn "^6.0.5"
debug "^4.0.1"
doctrine "^3.0.0"
- eslint-scope "^4.0.3"
- eslint-utils "^1.3.1"
- eslint-visitor-keys "^1.0.0"
- espree "^5.0.1"
+ eslint-scope "^5.0.0"
+ eslint-utils "^1.4.3"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.1.2"
esquery "^1.0.1"
esutils "^2.0.2"
file-entry-cache "^5.0.1"
functional-red-black-tree "^1.0.1"
- glob "^7.1.2"
+ glob-parent "^5.0.0"
globals "^11.7.0"
ignore "^4.0.6"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
- inquirer "^6.2.2"
- js-yaml "^3.13.0"
+ inquirer "^7.0.0"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.3.0"
- lodash "^4.17.11"
+ lodash "^4.17.14"
minimatch "^3.0.4"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
optionator "^0.8.2"
- path-is-inside "^1.0.2"
progress "^2.0.0"
regexpp "^2.0.1"
- semver "^5.5.1"
- strip-ansi "^4.0.0"
- strip-json-comments "^2.0.1"
+ semver "^6.1.2"
+ strip-ansi "^5.2.0"
+ strip-json-comments "^3.0.1"
table "^5.2.3"
text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
esm@^3.2.25:
version "3.2.25"
resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
-espree@^5.0.0, espree@^5.0.1:
+espree@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
@@ -7236,6 +7244,15 @@ espree@^5.0.0, espree@^5.0.1:
acorn-jsx "^5.0.0"
eslint-visitor-keys "^1.0.0"
+espree@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d"
+ integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==
+ dependencies:
+ acorn "^7.1.0"
+ acorn-jsx "^5.1.0"
+ eslint-visitor-keys "^1.1.0"
+
esprima@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
@@ -8121,7 +8138,7 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
-glob-parent@~5.1.0:
+glob-parent@^5.0.0, glob-parent@~5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2"
integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==
@@ -8981,7 +8998,7 @@ inquirer@6.2.2:
strip-ansi "^5.0.0"
through "^2.3.6"
-inquirer@^6.2.0:
+inquirer@^6.2.0, inquirer@^6.2.2:
version "6.5.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42"
integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==
@@ -9000,22 +9017,22 @@ inquirer@^6.2.0:
strip-ansi "^5.1.0"
through "^2.3.6"
-inquirer@^6.2.2:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.3.1.tgz#7a413b5e7950811013a3db491c61d1f3b776e8e7"
- integrity sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==
+inquirer@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a"
+ integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==
dependencies:
- ansi-escapes "^3.2.0"
+ ansi-escapes "^4.2.1"
chalk "^2.4.2"
- cli-cursor "^2.1.0"
+ cli-cursor "^3.1.0"
cli-width "^2.0.0"
external-editor "^3.0.3"
- figures "^2.0.0"
- lodash "^4.17.11"
- mute-stream "0.0.7"
+ figures "^3.0.0"
+ lodash "^4.17.15"
+ mute-stream "0.0.8"
run-async "^2.2.0"
rxjs "^6.4.0"
- string-width "^2.1.0"
+ string-width "^4.1.0"
strip-ansi "^5.1.0"
through "^2.3.6"
@@ -11088,6 +11105,11 @@ mute-stream@0.0.7:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
nan@^2.12.1, nan@^2.13.2:
version "2.13.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7"
@@ -12016,7 +12038,7 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+path-is-inside@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
@@ -12879,10 +12901,10 @@ prettier@1.16.3:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d"
integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==
-prettier@~1.18.2:
- version "1.18.2"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
- integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==
+prettier@~1.19.1:
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
+ integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
pretty-bytes@^5.3.0:
version "5.3.0"
@@ -13970,6 +13992,14 @@ restore-cursor@^2.0.0:
onetime "^2.0.0"
signal-exit "^3.0.2"
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
@@ -15154,11 +15184,16 @@ strip-indent@^1.0.1:
dependencies:
get-stdin "^4.0.1"
-strip-json-comments@^2.0.0, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
+strip-json-comments@^2.0.0, strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+strip-json-comments@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
+ integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+
style-loader@^0.23.1, style-loader@~0.23.1:
version "0.23.1"
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
@@ -15300,7 +15335,7 @@ symbol.prototype.description@^1.0.0:
dependencies:
has-symbols "^1.0.0"
-table@5.4.6:
+table@5.4.6, table@^5.2.3:
version "5.4.6"
resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
@@ -15310,16 +15345,6 @@ table@5.4.6:
slice-ansi "^2.1.0"
string-width "^3.0.0"
-table@^5.2.3:
- version "5.2.3"
- resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2"
- integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==
- dependencies:
- ajv "^6.9.1"
- lodash "^4.17.11"
- slice-ansi "^2.1.0"
- string-width "^3.0.0"
-
tapable@^1.0.0, tapable@^1.0.0-beta.5, tapable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
@@ -16159,6 +16184,11 @@ v-tooltip@~2.0.2:
popper.js "^1.15.0"
vue-resize "^0.4.5"
+v8-compile-cache@^2.0.3:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
+ integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
+
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@@ -16284,10 +16314,10 @@ vue-count-to@~1.0.13:
resolved "https://registry.yarnpkg.com/vue-count-to/-/vue-count-to-1.0.13.tgz#3e7573ea6e64c2b2972f64e0a2ab2e23c7590ff3"
integrity sha512-6R4OVBVNtQTlcbXu6SJ8ENR35M2/CdWt3Jmv57jOUM+1ojiFmjVGvZPH8DfHpMDSA+ITs+EW5V6qthADxeyYOQ==
-vue-eslint-parser@^6.0.4:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-6.0.4.tgz#56ff47e2c2644bff39951d5a284982c7ecd6f7fa"
- integrity sha512-GYsDsDWwKaGtnkW4nGUxr01wqIO2FB9/QHQTW1Gl5SUr5OyQvpnR90/D+Gq2cIxURX7aJ7+VyD+37Yx9eFwTgw==
+vue-eslint-parser@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-6.0.5.tgz#c1c067c2755748e28f3872cd42e8c1c4c1a8059f"
+ integrity sha512-Bvjlx7rH1Ulvus56KHeLXOjEi3JMOYTa1GAqZr9lBQhd8weK8mV7U7V2l85yokBZEWHJQjLn6X3nosY8TzkOKg==
dependencies:
debug "^4.1.1"
eslint-scope "^4.0.0"
@@ -16301,10 +16331,10 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf"
integrity sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==
-vue-infinite-scroll@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/vue-infinite-scroll/-/vue-infinite-scroll-2.0.2.tgz#ca37a91fe92ee0ad3b74acf8682c00917144b711"
- integrity sha512-n+YghR059YmciANGJh9SsNWRi1YZEBVlODtmnb/12zI+4R72QZSWd+EuZ5mW6auEo/yaJXgxzwsuhvALVnm73A==
+vue-infinite-loading@^2.4.4:
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/vue-infinite-loading/-/vue-infinite-loading-2.4.4.tgz#8a9defb9ceeea797c057cb36bdf558a4b2ce409f"
+ integrity sha512-eIFBcyKqkivtsDDq7Ee5ybDJVGLxIzU1NcBJCHG7Zx9Ic66QEGzSPs2OPJlGUdtu0/RS7KpUER35ZP/a7FdSOg==
vue-izitoast@^1.2.1:
version "1.2.1"