mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
Merge branch 'master' into migrate-styleguide-card
This commit is contained in:
commit
701564c708
@ -70,7 +70,7 @@
|
||||
"lodash": "~4.17.14",
|
||||
"merge-graphql-schemas": "^1.7.6",
|
||||
"metascraper": "^5.11.0",
|
||||
"metascraper-audio": "^5.10.7",
|
||||
"metascraper-audio": "^5.11.1",
|
||||
"metascraper-author": "^5.10.7",
|
||||
"metascraper-clearbit-logo": "^5.3.0",
|
||||
"metascraper-date": "^5.10.7",
|
||||
@ -112,7 +112,7 @@
|
||||
"@babel/plugin-proposal-throw-expressions": "^7.8.3",
|
||||
"@babel/preset-env": "~7.8.4",
|
||||
"@babel/register": "^7.8.3",
|
||||
"apollo-server-testing": "~2.10.0",
|
||||
"apollo-server-testing": "~2.10.1",
|
||||
"babel-core": "~7.0.0-0",
|
||||
"babel-eslint": "~10.0.3",
|
||||
"babel-jest": "~25.1.0",
|
||||
|
||||
@ -2,11 +2,21 @@ import extractMentionedUsers from './mentions/extractMentionedUsers'
|
||||
import { validateNotifyUsers } from '../validation/validationMiddleware'
|
||||
import { pubsub, NOTIFICATION_ADDED } from '../../server'
|
||||
|
||||
const publishNotifications = async (...promises) => {
|
||||
const notifications = await Promise.all(promises)
|
||||
notifications
|
||||
.flat()
|
||||
.forEach(notificationAdded => pubsub.publish(NOTIFICATION_ADDED, { notificationAdded }))
|
||||
}
|
||||
|
||||
const handleContentDataOfPost = async (resolve, root, args, context, resolveInfo) => {
|
||||
const idsOfUsers = extractMentionedUsers(args.content)
|
||||
const post = await resolve(root, args, context, resolveInfo)
|
||||
if (post && idsOfUsers && idsOfUsers.length)
|
||||
await notifyUsersOfMention('Post', post.id, idsOfUsers, 'mentioned_in_post', context)
|
||||
if (post) {
|
||||
await publishNotifications(
|
||||
notifyUsersOfMention('Post', post.id, idsOfUsers, 'mentioned_in_post', context),
|
||||
)
|
||||
}
|
||||
return post
|
||||
}
|
||||
|
||||
@ -16,10 +26,10 @@ const handleContentDataOfComment = async (resolve, root, args, context, resolveI
|
||||
const comment = await resolve(root, args, context, resolveInfo)
|
||||
const [postAuthor] = await postAuthorOfComment(comment.id, { context })
|
||||
idsOfUsers = idsOfUsers.filter(id => id !== postAuthor.id)
|
||||
if (idsOfUsers && idsOfUsers.length)
|
||||
await notifyUsersOfMention('Comment', comment.id, idsOfUsers, 'mentioned_in_comment', context)
|
||||
if (context.user.id !== postAuthor.id)
|
||||
await notifyUsersOfComment('Comment', comment.id, postAuthor.id, 'commented_on_post', context)
|
||||
await publishNotifications(
|
||||
notifyUsersOfMention('Comment', comment.id, idsOfUsers, 'mentioned_in_comment', context),
|
||||
notifyUsersOfComment('Comment', comment.id, postAuthor.id, 'commented_on_post', context),
|
||||
)
|
||||
return comment
|
||||
}
|
||||
|
||||
@ -29,7 +39,7 @@ const postAuthorOfComment = async (commentId, { context }) => {
|
||||
try {
|
||||
postAuthorId = await session.readTransaction(transaction => {
|
||||
return transaction.run(
|
||||
`
|
||||
`
|
||||
MATCH (author:User)-[:WROTE]->(:Post)<-[:COMMENTS]-(:Comment { id: $commentId })
|
||||
RETURN author { .id } as authorId
|
||||
`,
|
||||
@ -43,6 +53,7 @@ const postAuthorOfComment = async (commentId, { context }) => {
|
||||
}
|
||||
|
||||
const notifyUsersOfMention = async (label, id, idsOfUsers, reason, context) => {
|
||||
if (!(idsOfUsers && idsOfUsers.length)) return []
|
||||
await validateNotifyUsers(label, reason)
|
||||
let mentionedCypher
|
||||
switch (reason) {
|
||||
@ -91,8 +102,8 @@ const notifyUsersOfMention = async (label, id, idsOfUsers, reason, context) => {
|
||||
return notificationTransactionResponse.records.map(record => record.get('notification'))
|
||||
})
|
||||
try {
|
||||
const [notification] = await writeTxResultPromise
|
||||
return pubsub.publish(NOTIFICATION_ADDED, { notificationAdded: notification })
|
||||
const notifications = await writeTxResultPromise
|
||||
return notifications
|
||||
} catch (error) {
|
||||
throw new Error(error)
|
||||
} finally {
|
||||
@ -101,6 +112,7 @@ const notifyUsersOfMention = async (label, id, idsOfUsers, reason, context) => {
|
||||
}
|
||||
|
||||
const notifyUsersOfComment = async (label, commentId, postAuthorId, reason, context) => {
|
||||
if (context.user.id === postAuthorId) return []
|
||||
await validateNotifyUsers(label, reason)
|
||||
const session = context.driver.session()
|
||||
const writeTxResultPromise = await session.writeTransaction(async transaction => {
|
||||
@ -121,8 +133,8 @@ const notifyUsersOfComment = async (label, commentId, postAuthorId, reason, cont
|
||||
return notificationTransactionResponse.records.map(record => record.get('notification'))
|
||||
})
|
||||
try {
|
||||
const [notification] = await writeTxResultPromise
|
||||
return pubsub.publish(NOTIFICATION_ADDED, { notificationAdded: notification })
|
||||
const notifications = await writeTxResultPromise
|
||||
return notifications
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
|
||||
@ -2,9 +2,10 @@ import { gql } from '../../helpers/jest'
|
||||
import { cleanDatabase } from '../../db/factories'
|
||||
import { createTestClient } from 'apollo-server-testing'
|
||||
import { getNeode, getDriver } from '../../db/neo4j'
|
||||
import createServer from '../../server'
|
||||
import createServer, { pubsub } from '../../server'
|
||||
|
||||
let server, query, mutate, notifiedUser, authenticatedUser
|
||||
let publishSpy
|
||||
const driver = getDriver()
|
||||
const neode = getNeode()
|
||||
const categoryIds = ['cat9']
|
||||
@ -36,6 +37,7 @@ const createCommentMutation = gql`
|
||||
|
||||
beforeAll(async () => {
|
||||
await cleanDatabase()
|
||||
publishSpy = jest.spyOn(pubsub, 'publish')
|
||||
const createServerResult = createServer({
|
||||
context: () => {
|
||||
return {
|
||||
@ -52,6 +54,7 @@ beforeAll(async () => {
|
||||
})
|
||||
|
||||
beforeEach(async () => {
|
||||
publishSpy.mockClear()
|
||||
notifiedUser = await neode.create(
|
||||
'User',
|
||||
{
|
||||
@ -259,7 +262,15 @@ describe('notifications', () => {
|
||||
await createPostAction()
|
||||
const expectedContent =
|
||||
'Hey <a class="mention" data-mention-id="you" href="/profile/you/al-capone" target="_blank">@al-capone</a> how do you do?'
|
||||
const expected = expect.objectContaining({
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
variables: {
|
||||
read: false,
|
||||
},
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
errors: undefined,
|
||||
data: {
|
||||
notifications: [
|
||||
{
|
||||
@ -275,15 +286,22 @@ describe('notifications', () => {
|
||||
],
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
variables: {
|
||||
read: false,
|
||||
},
|
||||
it('publishes `NOTIFICATION_ADDED` to me', async () => {
|
||||
await createPostAction()
|
||||
expect(publishSpy).toHaveBeenCalledWith(
|
||||
'NOTIFICATION_ADDED',
|
||||
expect.objectContaining({
|
||||
notificationAdded: expect.objectContaining({
|
||||
reason: 'mentioned_in_post',
|
||||
to: expect.objectContaining({
|
||||
id: 'you',
|
||||
}),
|
||||
}),
|
||||
}),
|
||||
).resolves.toEqual(expected)
|
||||
)
|
||||
expect(publishSpy).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
describe('updates the post and mentions me again', () => {
|
||||
@ -429,6 +447,11 @@ describe('notifications', () => {
|
||||
}),
|
||||
).resolves.toEqual(expected)
|
||||
})
|
||||
|
||||
it('does not publish `NOTIFICATION_ADDED`', async () => {
|
||||
await createPostAction()
|
||||
expect(publishSpy).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -505,7 +528,7 @@ describe('notifications', () => {
|
||||
})
|
||||
it('sends only one notification with reason commented_on_post, no notification with reason mentioned_in_comment', async () => {
|
||||
await createCommentOnPostAction()
|
||||
const expected = expect.objectContaining({
|
||||
const expected = {
|
||||
data: {
|
||||
notifications: [
|
||||
{
|
||||
@ -520,7 +543,7 @@ describe('notifications', () => {
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
await expect(
|
||||
query({
|
||||
@ -529,7 +552,7 @@ describe('notifications', () => {
|
||||
read: false,
|
||||
},
|
||||
}),
|
||||
).resolves.toEqual(expected)
|
||||
).resolves.toMatchObject(expected, { errors: undefined })
|
||||
})
|
||||
})
|
||||
|
||||
@ -554,10 +577,6 @@ describe('notifications', () => {
|
||||
|
||||
it('sends no notification', async () => {
|
||||
await createCommentOnPostAction()
|
||||
const expected = expect.objectContaining({
|
||||
data: { notifications: [] },
|
||||
})
|
||||
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
@ -565,7 +584,26 @@ describe('notifications', () => {
|
||||
read: false,
|
||||
},
|
||||
}),
|
||||
).resolves.toEqual(expected)
|
||||
).resolves.toMatchObject({
|
||||
data: { notifications: [] },
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('does not publish `NOTIFICATION_ADDED` to authenticated user', async () => {
|
||||
await createCommentOnPostAction()
|
||||
expect(publishSpy).toHaveBeenCalledWith(
|
||||
'NOTIFICATION_ADDED',
|
||||
expect.objectContaining({
|
||||
notificationAdded: expect.objectContaining({
|
||||
reason: 'commented_on_post',
|
||||
to: expect.objectContaining({
|
||||
id: 'postAuthor', // that's expected, it's not me but the post author
|
||||
}),
|
||||
}),
|
||||
}),
|
||||
)
|
||||
expect(publishSpy).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -1860,10 +1860,10 @@ apollo-engine-reporting-protobuf@^0.4.4:
|
||||
dependencies:
|
||||
"@apollo/protobufjs" "^1.0.3"
|
||||
|
||||
apollo-engine-reporting@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.5.0.tgz#6e3746de14fc87e14c289c0776a2d350e6f50918"
|
||||
integrity sha512-Pe2DelijZ2QHqkqv8E97iOb32l+FIMT2nxpQsuH+nWi+96cCFJJJHjm3RLAPEUuvGOgW9dFYQP3J91EyC5O0tQ==
|
||||
apollo-engine-reporting@^1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.6.0.tgz#a5073a2e350ea4c8ce6adb5a5b536028ed165390"
|
||||
integrity sha512-prA17Tp/WYBJdCd4ey1CnGX8d4Xis1n9PsFmT7x8PV/oNpxG21/x3yNw5kPBZuKAoKz8yEggYtHhkYie1ZBjPQ==
|
||||
dependencies:
|
||||
apollo-engine-reporting-protobuf "^0.4.4"
|
||||
apollo-graphql "^0.4.0"
|
||||
@ -1943,10 +1943,10 @@ apollo-server-caching@^0.5.1:
|
||||
dependencies:
|
||||
lru-cache "^5.0.0"
|
||||
|
||||
apollo-server-core@^2.10.0:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.10.0.tgz#b8d51bdffe6529f0e3ca670ee8f1238765cfade4"
|
||||
integrity sha512-x/UK6XvU307W8D/pzTclU04JIjRarcbg5mFPe0nVmO4OTc26uQgKi1WlZkcewXsAUnn+nDwKVn2c2G3dHEgXzQ==
|
||||
apollo-server-core@^2.10.0, apollo-server-core@^2.10.1:
|
||||
version "2.10.1"
|
||||
resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.10.1.tgz#5fa4ce7992d0bf1cce616dedf1a22a41c7589c7c"
|
||||
integrity sha512-BVITSJRMnj+CWFkjt7FMcaoqg/Ni9gfyVE9iu8bUc1IebBfFDcQj652Iolr7dTqyUziN2jbf0wfcybKYJLQHQQ==
|
||||
dependencies:
|
||||
"@apollographql/apollo-tools" "^0.4.3"
|
||||
"@apollographql/graphql-playground-html" "1.6.24"
|
||||
@ -1954,7 +1954,7 @@ apollo-server-core@^2.10.0:
|
||||
"@types/ws" "^6.0.0"
|
||||
apollo-cache-control "^0.8.11"
|
||||
apollo-datasource "^0.7.0"
|
||||
apollo-engine-reporting "^1.5.0"
|
||||
apollo-engine-reporting "^1.6.0"
|
||||
apollo-server-caching "^0.5.1"
|
||||
apollo-server-env "^2.4.3"
|
||||
apollo-server-errors "^2.3.4"
|
||||
@ -2012,12 +2012,12 @@ apollo-server-plugin-base@^0.6.10:
|
||||
dependencies:
|
||||
apollo-server-types "^0.2.10"
|
||||
|
||||
apollo-server-testing@~2.10.0:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/apollo-server-testing/-/apollo-server-testing-2.10.0.tgz#c8d7fc2d4e6eaf84232aaa7c125d9fae691fbcf4"
|
||||
integrity sha512-wBJ/CT3ZN5nmSySMqgpAFwX/I3yzsQhRGR8MCK/16MjhEZH6svNaJWzoif6gaocj0NyVBJvOIijuMTecG9+6vg==
|
||||
apollo-server-testing@~2.10.1:
|
||||
version "2.10.1"
|
||||
resolved "https://registry.yarnpkg.com/apollo-server-testing/-/apollo-server-testing-2.10.1.tgz#c493c41f51c122b3d87c0e5ffba4f0590b924593"
|
||||
integrity sha512-KsvLzDb/mIf5h93QUxGXymywZq8urnXUPqckBxyNaF08puAO8VO0c4EE0VvuVZnelKZvlKlU0tYQQNQsc9iHfg==
|
||||
dependencies:
|
||||
apollo-server-core "^2.10.0"
|
||||
apollo-server-core "^2.10.1"
|
||||
|
||||
apollo-server-types@^0.2.10:
|
||||
version "0.2.10"
|
||||
@ -6197,12 +6197,12 @@ merge2@^1.3.0:
|
||||
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81"
|
||||
integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==
|
||||
|
||||
metascraper-audio@^5.10.7:
|
||||
version "5.10.7"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.10.7.tgz#ba9f8333a7b71d388a0bf88dff64fc4f06595566"
|
||||
integrity sha512-VHZlT21bh/TWnHOQMGret3UcMdJOsyWvagK7MG8rLczYmrPEtvxnJjwPhyrEj1oJC+fz2P//bfQ6gyrD4HrmEQ==
|
||||
metascraper-audio@^5.11.1:
|
||||
version "5.11.1"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.11.1.tgz#46a45fc8d9c4ccc1c24340d46a8c25dc3685d7b9"
|
||||
integrity sha512-L5eGfw5cOww4/f3ppMa/k+bix3LdICKcKJ2WVTLgz1QkKTWt5IQrgdW+kRfwUdaUTH6w0Tco+nOO7yUCaWytAQ==
|
||||
dependencies:
|
||||
"@metascraper/helpers" "^5.10.7"
|
||||
"@metascraper/helpers" "^5.11.1"
|
||||
|
||||
metascraper-author@^5.10.7:
|
||||
version "5.10.7"
|
||||
|
||||
@ -342,7 +342,6 @@ Then(
|
||||
|
||||
Given("I am logged in with these credentials:", table => {
|
||||
loginCredentials = table.hashes()[0];
|
||||
cy.debug();
|
||||
cy.factory().build("user", {
|
||||
...termsAndConditionsAgreedVersion,
|
||||
name: loginCredentials.email,
|
||||
@ -420,7 +419,6 @@ When("mention {string} in the text", mention => {
|
||||
cy.get(".suggestion-list__item")
|
||||
.contains(mention)
|
||||
.click();
|
||||
cy.debug();
|
||||
});
|
||||
|
||||
Then("the notification gets marked as read", () => {
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<div id="comments" class="comment-list">
|
||||
<h3 class="title">
|
||||
<counter-icon icon="comments" :count="post.comments.length" />
|
||||
<counter-icon icon="comments" :count="postComments.length" />
|
||||
{{ $t('common.comment', null, 0) }}
|
||||
</h3>
|
||||
<div v-if="post.comments && post.comments.length" id="comments" class="comments">
|
||||
<div v-if="postComments" id="comments" class="comments">
|
||||
<comment-card
|
||||
v-for="comment in post.comments"
|
||||
v-for="comment in postComments"
|
||||
:key="comment.id"
|
||||
:comment="comment"
|
||||
:postId="post.id"
|
||||
@ -35,6 +35,11 @@ export default {
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
postComments() {
|
||||
return (this.post && this.post.comments) || []
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
reply(message) {
|
||||
this.$emit('reply', message)
|
||||
@ -43,7 +48,7 @@ export default {
|
||||
return anchor === '#comments'
|
||||
},
|
||||
updateCommentList(updatedComment) {
|
||||
this.post.comments = this.post.comments.map(comment => {
|
||||
this.postComments = this.postComments.map(comment => {
|
||||
return comment.id === updatedComment.id ? updatedComment : comment
|
||||
})
|
||||
},
|
||||
|
||||
@ -3,107 +3,36 @@
|
||||
<user-avatar v-if="showAvatar" size="small" />
|
||||
<span class="info anonymous">{{ $t('profile.userAnonym') }}</span>
|
||||
</div>
|
||||
<dropdown
|
||||
v-else
|
||||
:class="[{ 'disabled-content': user.disabled }]"
|
||||
placement="top-start"
|
||||
offset="0"
|
||||
>
|
||||
<template #default="{ openMenu, closeMenu, isOpen }">
|
||||
<nuxt-link
|
||||
:to="userLink"
|
||||
:class="['user-teaser', isOpen && 'active']"
|
||||
@mouseover.native="showPopover ? openMenu(true) : () => {}"
|
||||
@mouseleave.native="closeMenu(true)"
|
||||
>
|
||||
<user-avatar v-if="showAvatar" :user="user" size="small" />
|
||||
<div class="info">
|
||||
<span class="text">
|
||||
<span class="slug">{{ userSlug }}</span>
|
||||
<span v-if="dateTime">{{ userName }}</span>
|
||||
</span>
|
||||
<span v-if="dateTime" class="text">
|
||||
<base-icon name="clock" />
|
||||
<hc-relative-date-time :date-time="dateTime" />
|
||||
<slot name="dateTime"></slot>
|
||||
</span>
|
||||
<span v-else class="text">{{ userName }}</span>
|
||||
</div>
|
||||
</nuxt-link>
|
||||
</template>
|
||||
<template #popover v-if="showPopover">
|
||||
<div style="min-width: 250px">
|
||||
<hc-badges v-if="user.badges && user.badges.length" :badges="user.badges" />
|
||||
<ds-text
|
||||
v-if="user.location"
|
||||
align="center"
|
||||
color="soft"
|
||||
size="small"
|
||||
style="margin-top: 5px"
|
||||
bold
|
||||
>
|
||||
<base-icon name="map-marker" />
|
||||
{{ user.location.name }}
|
||||
</ds-text>
|
||||
<ds-flex style="margin-top: -10px">
|
||||
<ds-flex-item class="ds-tab-nav-item">
|
||||
<ds-space margin="small">
|
||||
<ds-number
|
||||
:count="user.followedByCount"
|
||||
:label="$t('profile.followers')"
|
||||
size="x-large"
|
||||
/>
|
||||
</ds-space>
|
||||
</ds-flex-item>
|
||||
<ds-flex-item class="ds-tab-nav-item ds-tab-nav-item-active">
|
||||
<ds-space margin="small">
|
||||
<ds-number
|
||||
:count="user.contributionsCount"
|
||||
:label="$t('common.post', null, user.contributionsCount)"
|
||||
/>
|
||||
</ds-space>
|
||||
</ds-flex-item>
|
||||
<ds-flex-item class="ds-tab-nav-item">
|
||||
<ds-space margin="small">
|
||||
<ds-number
|
||||
:count="user.commentedCount"
|
||||
:label="$t('common.comment', null, user.commentedCount)"
|
||||
/>
|
||||
</ds-space>
|
||||
</ds-flex-item>
|
||||
</ds-flex>
|
||||
<ds-flex v-if="!itsMe" gutter="x-small" style="margin-bottom: 0;">
|
||||
<ds-flex-item>
|
||||
<hc-follow-button
|
||||
:follow-id="user.id"
|
||||
:is-followed="user.followedByCurrentUser"
|
||||
@optimistic="optimisticFollow"
|
||||
@update="updateFollow"
|
||||
/>
|
||||
</ds-flex-item>
|
||||
</ds-flex>
|
||||
<div v-else :class="[{ 'disabled-content': user.disabled }]" placement="top-start">
|
||||
<nuxt-link :to="userLink" :class="['user-teaser']">
|
||||
<user-avatar v-if="showAvatar" :user="user" size="small" />
|
||||
<div class="info">
|
||||
<span class="text">
|
||||
<span class="slug">{{ userSlug }}</span>
|
||||
<span v-if="dateTime">{{ userName }}</span>
|
||||
</span>
|
||||
<span v-if="dateTime" class="text">
|
||||
<base-icon name="clock" />
|
||||
<hc-relative-date-time :date-time="dateTime" />
|
||||
<slot name="dateTime"></slot>
|
||||
</span>
|
||||
<span v-else class="text">{{ userName }}</span>
|
||||
</div>
|
||||
</template>
|
||||
</dropdown>
|
||||
</nuxt-link>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
|
||||
import HcRelativeDateTime from '~/components/RelativeDateTime'
|
||||
import HcFollowButton from '~/components/FollowButton'
|
||||
import HcBadges from '~/components/Badges'
|
||||
import UserAvatar from '~/components/_new/generic/UserAvatar/UserAvatar'
|
||||
import Dropdown from '~/components/Dropdown'
|
||||
|
||||
export default {
|
||||
name: 'UserTeaser',
|
||||
components: {
|
||||
HcRelativeDateTime,
|
||||
HcFollowButton,
|
||||
UserAvatar,
|
||||
HcBadges,
|
||||
Dropdown,
|
||||
},
|
||||
props: {
|
||||
user: { type: Object, default: null },
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
"tagCountUnique": "Benutzer"
|
||||
},
|
||||
"invites": {
|
||||
"description": "Einladungen sind ein wunderbarer Weg, deine Freund in deinem Netzwerk zu haben …",
|
||||
"description": "Einladungen sind eine wunderbare Möglichkeit, Deine Freunde in Deinem Netzwerk zu haben …",
|
||||
"name": "Benutzer einladen",
|
||||
"title": "Leute einladen"
|
||||
},
|
||||
@ -66,7 +66,7 @@
|
||||
"table": {
|
||||
"columns": {
|
||||
"createdAt": "Erstellt am",
|
||||
"email": "E-mail",
|
||||
"email": "E-Mail",
|
||||
"name": "Name",
|
||||
"number": "Nr.",
|
||||
"role": "Rolle",
|
||||
@ -81,9 +81,9 @@
|
||||
"list": {
|
||||
"0": "Aufforderung zum sofortigen Abstellen des inakzeptablen Verhaltens",
|
||||
"1": "Sperren oder Löschen von Kommentaren",
|
||||
"2": "Temporärer Ausschluss aus dem jeweiligen Beitrag",
|
||||
"2": "Vorübergehender Ausschluss aus dem jeweiligen Beitrag",
|
||||
"3": "Sperren bzw. Löschen von Inhalten",
|
||||
"4": "Temporärer Entzug von Schreibrechten",
|
||||
"4": "Vorübergehender Entzug von Schreibrechten",
|
||||
"5": "Vorübergehender Ausschluss aus dem Netzwerk",
|
||||
"6": "Endgültiger Ausschluss aus dem Netzwerk",
|
||||
"7": "Verstöße gegen deutsches Recht können zur Anzeige gebracht werden."
|
||||
@ -93,10 +93,10 @@
|
||||
"expected-behaviour": {
|
||||
"description": "Die folgenden Verhaltensweisen werden von allen Community-Mitgliedern erwartet und gefordert:",
|
||||
"list": {
|
||||
"0": "Sei rücksichtsvoll und respektvoll bei dem was Du schreibst und tust.",
|
||||
"0": "Sei rücksichtsvoll und respektvoll, bei dem, was Du schreibst und tust.",
|
||||
"1": "Versuche auf andere zuzugehen, bevor ein Konflikt entsteht.",
|
||||
"2": "Vermeide erniedrigende, diskriminierende oder belästigende Verhaltensweisen und Ausdrücke.",
|
||||
"3": "Gehe achtsam mit Deiner Umgebung um. Informiere den Support bei gefährlichen Situationen, wenn eine Person in Not ist oder bei Verstößen gegen diesen Verhaltenskodex, auch wenn sie unbedeutend erscheinen."
|
||||
"3": "Achte Dein Umfeld und Deine Mitmenschen. Warne die Verantwortlichen der Community, falls Du eine gefährliche Situation, jemanden in Not oder Verstöße gegen diesen Verhaltenskodex bemerkst, auch wenn diese unbedeutend erscheinen."
|
||||
},
|
||||
"title": "Erwartetes Verhalten"
|
||||
},
|
||||
@ -114,9 +114,9 @@
|
||||
"description": "Die folgenden Verhaltensweisen sind in unserer Community inakzeptabel:",
|
||||
"list": {
|
||||
"0": "Diskriminierende Beiträge, Kommentare, Äußerungen oder Beleidigungen, insbesondere solche, die sich auf Geschlecht, sexuelle Orientierung, Rasse, Religion, politische oder weltanschauliche Ausrichtung oder Behinderung beziehen.",
|
||||
"1": "Das Posten oder Verlinken eindeutig pornografischen Materials.",
|
||||
"1": "Das Senden oder Verlinken eindeutig pornografischen Materials.",
|
||||
"2": "Verherrlichung oder Verharmlosung grausamer oder unmenschlicher Gewalttätigkeiten.",
|
||||
"3": "Das Veröffentlichen von personenbezogenen Daten anderer ohne deren Einverständnis oder das Androhen dessen (\"Doxing\").",
|
||||
"3": "Das Veröffentlichen von personenbezogenen Daten anderer ohne deren Einverständnis oder das Androhen dessen („Doxing“).",
|
||||
"4": "Absichtliche Einschüchterung, Stalking oder Verfolgung.",
|
||||
"5": "Bewerben von Produkten und Dienstleistungen mit kommerzieller Absicht.",
|
||||
"6": "Strafbares Verhalten bzw. Verstoß gegen deutsches Recht.",
|
||||
@ -157,7 +157,7 @@
|
||||
"user": "Benutzer ::: Benutzer",
|
||||
"validations": {
|
||||
"categories": "es müssen eine bis drei Kategorien ausgewählt werden",
|
||||
"email": "muss eine gültige E-Mail Adresse sein",
|
||||
"email": "muss eine gültige E-Mail-Adresse sein",
|
||||
"url": "muss eine gültige URL sein"
|
||||
},
|
||||
"versus": "Versus"
|
||||
@ -165,7 +165,7 @@
|
||||
"components": {
|
||||
"enter-nonce": {
|
||||
"form": {
|
||||
"description": "Öffne dein E-Mail Postfach und gib den Code ein, den wir geschickt haben.",
|
||||
"description": "Öffne Dein E-Mail Postfach und gib den Code ein, den wir geschickt haben.",
|
||||
"next": "Weiter",
|
||||
"nonce": "Code eingeben",
|
||||
"validations": {
|
||||
@ -181,9 +181,9 @@
|
||||
},
|
||||
"request": {
|
||||
"form": {
|
||||
"description": "Eine Mail zum Zurücksetzen des Passworts wird an die angegebene E-Mail Adresse geschickt.",
|
||||
"description": "Eine E-Mail zum Zurücksetzen des Passworts wird an die angegebene Adresse geschickt.",
|
||||
"submit": "E-Mail anfordern",
|
||||
"submitted": "Eine E-Mail mit weiteren Instruktionen wurde verschickt an <b>{email}</b>"
|
||||
"submitted": "Eine E-Mail mit weiteren Hinweisen wurde verschickt an <b>{email}</b>"
|
||||
},
|
||||
"title": "Passwort zurücksetzen"
|
||||
}
|
||||
@ -191,25 +191,25 @@
|
||||
"registration": {
|
||||
"create-user-account": {
|
||||
"error": "Es konnte kein Benutzerkonto erstellt werden!",
|
||||
"help": "Vielleicht war der Bestätigungscode falsch oder abgelaufen? Wenn das Problem weiterhin besteht, schick uns gerne eine E-Mail an:",
|
||||
"help": "Vielleicht war der Bestätigungscode falsch oder abgelaufen? Wenn das Problem weiterhin besteht, schicke uns gerne eine E-Mail an:",
|
||||
"success": "Dein Benutzerkonto wurde erstellt!",
|
||||
"title": "Benutzerkonto anlegen"
|
||||
},
|
||||
"signup": {
|
||||
"form": {
|
||||
"data-privacy": "Ich habe die <a href=\"https://human-connection.org/datenschutz/\" target=\"_blank\"><ds-text bold color=\"primary\" >Datenschutzerklärung</ds-text></a> gelesen und verstanden",
|
||||
"description": "Um loszulegen, kannst du dich hier kostenfrei registrieren:",
|
||||
"data-privacy": "Ich habe die <a href=\"https://human-connection.org/datenschutz/\" target=\"_blank\"><ds-text bold color=\"primary\" >Datenschutzerklärung</ds-text></a> gelesen und verstanden",
|
||||
"description": "Um loszulegen, kannst Du Dich hier kostenfrei registrieren:",
|
||||
"errors": {
|
||||
"email-exists": "Es gibt schon ein Benutzerkonto mit dieser E-Mail Adresse!",
|
||||
"email-exists": "Es gibt schon ein Benutzerkonto mit dieser E-Mail-Adresse!",
|
||||
"invalid-invitation-token": "Es sieht so aus, als ob der Einladungscode schon eingelöst wurde. Jeder Code kann nur einmalig benutzt werden."
|
||||
},
|
||||
"invitation-code": "Dein Einladungscode lautet: <b>{code}</b>",
|
||||
"minimum-age": "Ich bin 18 Jahre oder älter.",
|
||||
"no-commercial": "Ich habe keine kommerziellen Absichten und ich repräsentiere kein kommerzielles Unternehmen oder Organisation.",
|
||||
"no-political": "Ich bin nicht im Auftrag einer Partei oder politischen Organisation im Netzwerk. ",
|
||||
"no-political": "Ich bin nicht im Auftrag einer Partei oder politischen Organisation im Netzwerk.",
|
||||
"submit": "Konto erstellen",
|
||||
"success": "Eine Mail mit einem Bestätigungslink für die Registrierung wurde an <b>{email}</b> geschickt",
|
||||
"terms-and-condition": "Ich stimme den <a href=\"/terms-and-conditions\"><ds-text bold color=\"primary\" > Nutzungsbedingungen</ds-text></a>zu."
|
||||
"success": "Eine E-Mail mit einem Link zum Abschließen Deiner Registrierung wurde an <b>{email}</b> geschickt",
|
||||
"terms-and-condition": "Ich stimme den <a href=\"/terms-and-conditions\"><ds-text bold color=\"primary\" >Nutzungsbedingungen</ds-text></a> zu."
|
||||
},
|
||||
"title": "Mach mit bei Human Connection!",
|
||||
"unavailable": "Leider ist die öffentliche Registrierung von Benutzerkonten auf diesem Server derzeit nicht möglich."
|
||||
@ -250,10 +250,10 @@
|
||||
"surprised": "Erstaunt"
|
||||
},
|
||||
"filterALL": "Alle Beiträge anzeigen",
|
||||
"filterFollow": "Beiträge filtern von Usern denen ich folge",
|
||||
"filterFollow": "Beiträge von Benutzern filtern, denen ich folge",
|
||||
"inappropriatePicture": "Dieses Bild kann für einige Menschen unangemessen sein.",
|
||||
"inappropriatePictureText": "Wann soll ein Foto versteckt werden",
|
||||
"languageSelectLabel": "Sprache deines Beitrags",
|
||||
"inappropriatePictureText": "Wann sollte mein Beitragsbild verschwommen sein?",
|
||||
"languageSelectLabel": "Sprache Deines Beitrags",
|
||||
"languageSelectText": "Sprache wählen",
|
||||
"newPost": "Erstelle einen neuen Beitrag",
|
||||
"success": "Gespeichert!",
|
||||
@ -265,16 +265,16 @@
|
||||
"delete": {
|
||||
"cancel": "Abbrechen",
|
||||
"comment": {
|
||||
"message": "Bist du sicher, dass du den Kommentar \"<b>{name}</b>\" löschen möchtest?",
|
||||
"message": "Bist Du sicher, dass Du den Kommentar „<b>{name}</b>“ löschen möchtest?",
|
||||
"success": "Kommentar erfolgreich gelöscht!",
|
||||
"title": "Lösche Kommentar",
|
||||
"type": "Comment"
|
||||
"type": "Kommentar"
|
||||
},
|
||||
"contribution": {
|
||||
"message": "Bist du sicher, dass du den Beitrag \"<b>{name}</b>\" löschen möchtest?",
|
||||
"message": "Bist Du sicher, dass Du den Beitrag „<b>{name}</b>“ löschen möchtest?",
|
||||
"success": "Beitrag erfolgreich gelöscht!",
|
||||
"title": "Lösche Beitrag",
|
||||
"type": "Contribution"
|
||||
"type": "Beitrag"
|
||||
},
|
||||
"submit": "Löschen"
|
||||
},
|
||||
@ -299,15 +299,15 @@
|
||||
}
|
||||
},
|
||||
"donations": {
|
||||
"amount-of-total": "{amount} von {total} € erreicht",
|
||||
"amount-of-total": "{amount} von {total} € erreicht",
|
||||
"donate-now": "Jetzt spenden",
|
||||
"donations-for": "Spenden für"
|
||||
},
|
||||
"editor": {
|
||||
"embed": {
|
||||
"always_allow": "Inhalte von Drittanbietern immer anzeigen (diese Einstellung kannst du jederzeit ändern)",
|
||||
"data_privacy_info": "Deine Daten wurden noch nicht an Drittanbieter weitergegeben. Wenn du dieses Video jetzt abspielst, registriert der folgende Anbieter wahrscheinlich deine Nutzerdaten:",
|
||||
"data_privacy_warning": "Achte auf deine Daten!",
|
||||
"always_allow": "Einzubettende Inhalte von Drittanbietern immer erlauben (diese Einstellung ist jederzeit änderbar)",
|
||||
"data_privacy_info": "Deine Daten wurden noch nicht an Drittanbieter weitergegeben. Wenn Du dieses Video jetzt abspielst, registriert der folgende Anbieter wahrscheinlich Deine Nutzerdaten:",
|
||||
"data_privacy_warning": "Achte auf Deine Daten!",
|
||||
"play_now": "Jetzt ansehen"
|
||||
},
|
||||
"hashtag": {
|
||||
@ -357,7 +357,7 @@
|
||||
"following": "Folge Ich"
|
||||
},
|
||||
"index": {
|
||||
"change-filter-settings": "Verändere die Filter-Einstellungen um mehr Ergebnisse zu erhalten.",
|
||||
"change-filter-settings": "Verändere die Filter-Einstellungen, um mehr Ergebnisse zu erhalten.",
|
||||
"no-results": "Keine Beiträge gefunden."
|
||||
},
|
||||
"login": {
|
||||
@ -377,8 +377,8 @@
|
||||
"success": "Du bist eingeloggt!"
|
||||
},
|
||||
"maintenance": {
|
||||
"explanation": "Zurzeit führen wir einige geplante Wartungsarbeiten durch, bitte versuch es später erneut.",
|
||||
"questions": "Bei Fragen oder Problemen erreichst du uns per E-Mail an",
|
||||
"explanation": "Derzeit führen wir einige geplante Wartungsarbeiten durch, bitte versuche es später erneut.",
|
||||
"questions": "Bei Fragen oder Problemen erreichst Du uns per E-Mail an",
|
||||
"title": "Human Connection befindet sich in der Wartung"
|
||||
},
|
||||
"moderation": {
|
||||
@ -392,32 +392,32 @@
|
||||
"cancel": "Abbruch",
|
||||
"Comment": {
|
||||
"disable": {
|
||||
"message": "Möchtest du den Kommentar \"<b>{name}</b>\" wirklich <b>gesperrt</b> lassen?",
|
||||
"message": "Möchtest Du den Kommentar „<b>{name}</b>“ wirklich <b>gesperrt</b> lassen?",
|
||||
"title": "Sperre den Kommentar abschließend"
|
||||
},
|
||||
"enable": {
|
||||
"message": "Möchtest du den Kommentar \"<b>{name}</b>\" wirklich <b>entsperrt</b> lassen?",
|
||||
"message": "Möchtest Du den Kommentar „<b>{name}</b>“ wirklich <b>entsperrt</b> lassen?",
|
||||
"title": "Entsperre den Kommentar abschließend"
|
||||
}
|
||||
},
|
||||
"Post": {
|
||||
"disable": {
|
||||
"message": "Möchtest du den Beitrag \"<b>{name}</b>\" wirklich <b>gesperrt</b> lassen?",
|
||||
"message": "Möchtest Du den Beitrag „<b>{name}</b>“ wirklich <b>gesperrt</b> lassen?",
|
||||
"title": "Sperre den Beitrag abschließend"
|
||||
},
|
||||
"enable": {
|
||||
"message": "Möchtest du den Beitrag \"<b>{name}</b>\" wirklich <b>entsperrt</b> lassen?",
|
||||
"message": "Möchtest Du den Beitrag „<b>{name}</b>“ wirklich <b>entsperrt</b> lassen?",
|
||||
"title": "Entsperre den Beitrag abschließend"
|
||||
}
|
||||
},
|
||||
"submit": "Bestätige Entscheidung",
|
||||
"User": {
|
||||
"disable": {
|
||||
"message": "Möchtest du den Benutzer \"<b>{name}</b>\" wirklich <b>gesperrt</b> lassen?",
|
||||
"message": "Möchtest Du den Benutzer „<b>{name}</b>“ wirklich <b>gesperrt</b> lassen?",
|
||||
"title": "Sperre den Benutzer abschließend"
|
||||
},
|
||||
"enable": {
|
||||
"message": "Möchtest du den Benutzer \"<b>{name}</b>\" wirklich <b>entsperrt</b> lassen?",
|
||||
"message": "Möchtest Du den Benutzer „<b>{name}</b>“ wirklich <b>entsperrt</b> lassen?",
|
||||
"title": "Entsperre den Benutzer abschließend"
|
||||
}
|
||||
}
|
||||
@ -461,9 +461,9 @@
|
||||
"pageLink": "Alle Benachrichtigungen",
|
||||
"post": "Beitrag",
|
||||
"reason": {
|
||||
"commented_on_post": "Hat deinen Beitrag kommentiert …",
|
||||
"mentioned_in_comment": "Hat dich in einem Kommentar erwähnt …",
|
||||
"mentioned_in_post": "Hat dich in einem Beitrag erwähnt …"
|
||||
"commented_on_post": "Hat Deinen Beitrag kommentiert …",
|
||||
"mentioned_in_comment": "Hat Dich in einem Kommentar erwähnt …",
|
||||
"mentioned_in_post": "Hat Dich in einem Beitrag erwähnt …"
|
||||
},
|
||||
"title": "Benachrichtigungen",
|
||||
"user": "Benutzer"
|
||||
@ -472,20 +472,20 @@
|
||||
"comment": {
|
||||
"reply": "Antworten",
|
||||
"submit": "Kommentiere",
|
||||
"submitted": "Kommentar gesendet!",
|
||||
"submitted": "Kommentar gesendet",
|
||||
"updated": "Änderungen gespeichert"
|
||||
},
|
||||
"edited": "bearbeitet",
|
||||
"menu": {
|
||||
"delete": "Beitrag löschen",
|
||||
"edit": "Beitrag bearbeiten",
|
||||
"pin": "Post festpinnen",
|
||||
"pinnedSuccessfully": "Post erfolgreich festgepinnt!",
|
||||
"unpin": "Post nicht mehr festpinnen",
|
||||
"unpinnedSuccessfully": "Post erfolgreich nicht mehr festgepinnt!"
|
||||
"pin": "Beitrag anheften",
|
||||
"pinnedSuccessfully": "Beitrag erfolgreich angeheftet!",
|
||||
"unpin": "Beitrag loslösen",
|
||||
"unpinnedSuccessfully": "Angehefteten Beitrag erfolgreich losgelöst!"
|
||||
},
|
||||
"moreInfo": {
|
||||
"description": "Hier findest du weitere Infos zum Thema.",
|
||||
"description": "Hier findest Du weitere Infos zum Thema.",
|
||||
"name": "Mehr Info",
|
||||
"title": "Mehr Informationen",
|
||||
"titleOfCategoriesSection": "Kategorien",
|
||||
@ -531,22 +531,22 @@
|
||||
"release": {
|
||||
"cancel": "Abbrechen",
|
||||
"comment": {
|
||||
"error": "Den Kommentar hast du schon gemeldet!",
|
||||
"message": "Bist du sicher, dass du den Kommentar \"<b>{name}</b>\" freigeben möchtest?",
|
||||
"error": "Den Kommentar hast Du schon gemeldet!",
|
||||
"message": "Bist Du sicher, dass Du den Kommentar „<b>{name}</b>“ freigeben möchtest?",
|
||||
"title": "Kommentar freigeben",
|
||||
"type": "Kommentar"
|
||||
},
|
||||
"contribution": {
|
||||
"error": "Den Beitrag hast du schon gemeldet!",
|
||||
"message": "Bist du sicher, dass du den Beitrag \"<b>{name}</b>\" freigeben möchtest?",
|
||||
"error": "Den Beitrag hast Du schon gemeldet!",
|
||||
"message": "Bist Du sicher, dass Du den Beitrag „<b>{name}</b>“ freigeben möchtest?",
|
||||
"title": "Beitrag freigeben",
|
||||
"type": "Beitrag"
|
||||
},
|
||||
"submit": "freigeben",
|
||||
"success": "Erfolgreich freigegeben!",
|
||||
"user": {
|
||||
"error": "Den User hast du schon gemeldet!",
|
||||
"message": "Bist du sicher, dass du den Nutzer \"<b>{name}</b>\" freigeben möchtest?",
|
||||
"error": "Den Benutzer hast Du schon gemeldet!",
|
||||
"message": "Bist Du sicher, dass Du den Nutzer „<b>{name}</b>“ freigeben möchtest?",
|
||||
"title": "Nutzer freigeben",
|
||||
"type": "Nutzer"
|
||||
}
|
||||
@ -573,16 +573,16 @@
|
||||
"advert_products_services_commercial": "Bewerben von Produkten und Dienstleistungen mit kommerzieller Absicht.",
|
||||
"criminal_behavior_violation_german_law": "Strafbares Verhalten bzw. Verstoß gegen deutsches Recht.",
|
||||
"discrimination_etc": "Diskriminierende Beiträge, Kommentare, Äußerungen oder Beleidigungen.",
|
||||
"doxing": "Das Veröffentlichen von personenbezogenen Daten anderer ohne deren Einverständnis oder das Androhen dessen (\"Doxing\").",
|
||||
"doxing": "Das Veröffentlichen von personenbezogenen Daten anderer ohne deren Einverständnis oder das Androhen dessen („Doxing“).",
|
||||
"glorific_trivia_of_cruel_inhuman_acts": "Verherrlichung oder Verharmlosung grausamer oder unmenschlicher Gewalttätigkeiten.",
|
||||
"intentional_intimidation_stalking_persecution": "Absichtliche Einschüchterung, Stalking oder Verfolgung.",
|
||||
"other": "Andere …",
|
||||
"pornographic_content_links": "Das Posten oder Verlinken eindeutig pornografischen Materials."
|
||||
"pornographic_content_links": "Das Senden oder Verlinken eindeutig pornografischen Materials."
|
||||
},
|
||||
"placeholder": "Kategorie …"
|
||||
},
|
||||
"description": {
|
||||
"label": "Bitte erkläre: Warum möchtest du dies melden?",
|
||||
"label": "Bitte erkläre: Warum möchtest Du dies melden?",
|
||||
"placeholder": "Zusätzliche Information …"
|
||||
}
|
||||
},
|
||||
@ -612,19 +612,19 @@
|
||||
"slug": "Alias",
|
||||
"unblock": "Entsperren"
|
||||
},
|
||||
"empty": "Bislang hast du niemanden blockiert.",
|
||||
"empty": "Bislang hast Du niemanden blockiert.",
|
||||
"explanation": {
|
||||
"closing": "Das sollte fürs Erste genügen, damit blockierte Benutzer dich nicht mehr länger belästigen können.",
|
||||
"closing": "Das sollte fürs Erste genügen, damit blockierte Benutzer Dich nicht mehr länger belästigen können.",
|
||||
"commenting-disabled": "Du kannst den Beitrag derzeit nicht kommentieren.",
|
||||
"commenting-explanation": "Dafür kann es mehrere Gründe geben, bitte schau in unsere ",
|
||||
"intro": "Wenn ein anderer Benutzer von dir blockiert wurde, dann passiert folgendes:",
|
||||
"notifications": "Von dir blockierte Personen erhalten keine Benachrichtigungen mehr, wenn sie in deinen Beiträgen erwähnt werden.",
|
||||
"their-perspective": "Die blockierte Person kann deine Beiträge nicht mehr kommentieren",
|
||||
"your-perspective": "Du kannst keine Beiträge der blockierten Person mehr kommentieren."
|
||||
"intro": "Wenn ein anderer Benutzer durch Dich blockiert wurde, dann passiert Folgendes:",
|
||||
"notifications": "Von Dir blockierte Benutzer werden keine Benachrichtigungen mehr erhalten, falls sie in Deinen Beiträgen erwähnt werden.",
|
||||
"their-perspective": "Umgekehrt das gleiche: Die blockierte Person bekommt auch in ihren Benachrichtigungen Deine Beiträge nicht mehr zu sehen.",
|
||||
"your-perspective": "In Deinen Benachrichtigungen tauchen keine Beiträge der blockierten Person mehr auf."
|
||||
},
|
||||
"how-to": "Du kannst andere Benutzer auf deren Profilseite über das Inhaltsmenü blockieren.",
|
||||
"name": "Blocked users",
|
||||
"unblock": "Nutzer entsperren",
|
||||
"name": "Blockierte Benutzer",
|
||||
"unblock": "Blockierten Nutzer freigeben",
|
||||
"unblocked": "{name} ist wieder entsperrt"
|
||||
},
|
||||
"data": {
|
||||
@ -649,36 +649,36 @@
|
||||
"name": "Daten herunterladen"
|
||||
},
|
||||
"email": {
|
||||
"change-successful": "Deine E-Mail Adresse wurde erfolgreich geändert.",
|
||||
"labelEmail": "E-Mail Adresse ändern",
|
||||
"labelNewEmail": "Neue E-Mail Adresse",
|
||||
"change-successful": "Deine E-Mail-Adresse wurde erfolgreich geändert.",
|
||||
"labelEmail": "E-Mail-Adresse ändern",
|
||||
"labelNewEmail": "Neue E-Mail-Adresse",
|
||||
"labelNonce": "Bestätigungscode eingeben",
|
||||
"name": "Deine E-Mail",
|
||||
"submitted": "Eine E-Mail zur Bestätigung deiner Adresse wurde an <b>{email}</b> gesendet.",
|
||||
"success": "Eine neue E-Mail Addresse wurde registriert.",
|
||||
"submitted": "Eine E-Mail zur Bestätigung Deiner Adresse wurde an <b>{email}</b> gesendet.",
|
||||
"success": "Eine neue E-Mail-Adresse wurde registriert.",
|
||||
"validation": {
|
||||
"same-email": "Das ist deine aktuelle E-Mail Addresse"
|
||||
"same-email": "Das ist Deine aktuelle E-Mail-Adresse"
|
||||
},
|
||||
"verification-error": {
|
||||
"explanation": "Das kann verschiedene Ursachen haben:",
|
||||
"message": "Deine E-Mail Adresse konnte nicht verifiziert werden.",
|
||||
"message": "Deine E-Mail-Adresse konnte nicht verifiziert werden.",
|
||||
"reason": {
|
||||
"invalid-nonce": "Ist der Bestätigungscode falsch?",
|
||||
"no-email-request": "Bist du dir sicher, dass du eine Änderung deiner E-Mail Adresse angefragt hattest?"
|
||||
"no-email-request": "Bist Du Dir sicher, dass Du eine Änderung Deiner E-Mail-Adresse angefragt hattest?"
|
||||
},
|
||||
"support": "Wenn das Problem weiterhin besteht, kontaktiere uns gerne per E-Mail an"
|
||||
}
|
||||
},
|
||||
"embeds": {
|
||||
"info-description": "Hier ist die Liste an Drittanbietern, deren Inhalte als Fremdcode z.B. in Form von eingebetteten Videos angezeigt werden kann:",
|
||||
"info-description": "Hier ist die Liste der Drittanbieter, deren Inhalte, z.B. in Form eingebetteter Videos, mittels Drittanbieter-Programmcode angezeigt werden kann:",
|
||||
"name": "Drittanbieter",
|
||||
"status": {
|
||||
"change": {
|
||||
"allow": "Na klar",
|
||||
"deny": "Lieber nicht",
|
||||
"question": "Soll eingebetter Fremdcode von Dritten für dich immer angezeigt werden?"
|
||||
"question": "Soll einzubettender Programmcode der Drittanbieter Dir immer zur Anzeige gebracht werden?"
|
||||
},
|
||||
"description": "Als Grundeinstellung für dich wird eingebetter Fremdcode von Drittanbietern",
|
||||
"description": "Als Grundeinstellung wird Dir der einzubettende Code der Drittanbieter",
|
||||
"disabled": {
|
||||
"off": "zunächst nicht angezeigt",
|
||||
"on": "sofort angezeigt"
|
||||
@ -724,10 +724,10 @@
|
||||
"label-new-password": "Dein neues Passwort",
|
||||
"label-new-password-confirm": "Bestätige Dein neues Passwort",
|
||||
"label-old-password": "Dein altes Passwort",
|
||||
"message-new-password-confirm-required": "Bestätige dein neues Passwort",
|
||||
"message-new-password-missmatch": "Gebe das gleiche Passwort nochmals ein",
|
||||
"message-new-password-required": "Gebe ein neues Passwort ein",
|
||||
"message-old-password-required": "Gebe dein altes Passwort ein",
|
||||
"message-new-password-confirm-required": "Bestätige Dein neues Passwort",
|
||||
"message-new-password-missmatch": "Gib dasselbe Passwort nochmals ein",
|
||||
"message-new-password-required": "Gib ein neues Passwort ein",
|
||||
"message-old-password-required": "Gib Dein altes Passwort ein",
|
||||
"passwordSecurity": "Passwortsicherheit",
|
||||
"passwordStrength0": "Sehr unsicheres Passwort",
|
||||
"passwordStrength1": "Unsicheres Passwort",
|
||||
@ -739,12 +739,12 @@
|
||||
"name": "Sicherheit"
|
||||
},
|
||||
"social-media": {
|
||||
"name": "Soziale Medien",
|
||||
"placeholder": "Deine Social-Media URL",
|
||||
"name": "Soziale Netzwerke",
|
||||
"placeholder": "Deine Webadresse des Sozialen Netzwerkes",
|
||||
"requireUnique": "Dieser Link existiert bereits",
|
||||
"submit": "Link hinzufügen",
|
||||
"successAdd": "Social-Media hinzugefügt. Profil aktualisiert!",
|
||||
"successDelete": "Social-Media gelöscht. Profil aktualisiert!"
|
||||
"successAdd": "Soziales Netzwerk hinzugefügt. Profil wurde aktualisiert!",
|
||||
"successDelete": "Soziales Netzwerk entfernt. Profil wurde aktualisiert!"
|
||||
},
|
||||
"validation": {
|
||||
"slug": {
|
||||
@ -769,7 +769,7 @@
|
||||
"imprint": "Impressum",
|
||||
"made": "Mit ❤ gemacht",
|
||||
"register": "Registernummer",
|
||||
"responsible": "Verantwortlicher gemäß § 55 Abs. 2 RStV ",
|
||||
"responsible": "Verantwortlich für Inhalte dieser Seite (§ 55 Abs. 2 RStV)",
|
||||
"taxident": "Umsatzsteuer-Identifikationsnummer gemäß § 27 a Umsatzsteuergesetz (Deutschland)",
|
||||
"termsAndConditions": "Nutzungsbedingungen",
|
||||
"thanks": "Danke!",
|
||||
@ -790,11 +790,11 @@
|
||||
"termsAndConditions": {
|
||||
"addition": {
|
||||
"description": "<a href=\"https://human-connection.org/veranstaltungen/\" target=\"_blank\" > https://human-connection.org/veranstaltungen/ </a>",
|
||||
"title": "Zusätzlich machen wir regelmäßig Veranstaltungen, wo Du auch Eindrücke wiedergeben und Fragen stellen kannst. Du findest eine aktuelle Übersicht hier:"
|
||||
"title": "Zusätzlich veranstalten wir regelmäßig Ereignisse, wo Du auch Eindrücke teilen und Fragen stellen kannst. Du findest eine aktuelle Übersicht hier:"
|
||||
},
|
||||
"agree": "Ich stimme zu!",
|
||||
"code-of-conduct": {
|
||||
"description": "Unser Verhaltenskodex dient als Leitfaden für das persönliche Auftreten und den Umgang miteinander. Wer als Nutzer im Human Connection-Netzwerk aktiv ist, Beiträge verfasst, kommentiert oder mit anderen Nutzern, auch außerhalb des Netzwerkes, Kontakt aufnimmt, erkennt diese Verhaltensregeln als verbindlich an. <a href=\"https://alpha.human-connection.org/code-of-conduct\" target=\"_blank\"> https://alpha.human-connection.org/code-of-conduct</a>",
|
||||
"description": "Unser Verhaltenskodex dient als Leitfaden für das persönliche Auftreten und den Umgang miteinander. Wer als Nutzer im Human Connection-Netzwerk aktiv ist, Beiträge verfasst, kommentiert oder mit anderen Nutzern, auch außerhalb des Netzwerkes, Kontakt aufnimmt, erkennt diese Verhaltensregeln als verbindlich an. <a href=\"https://alpha.human-connection.org/code-of-conduct\" target=\"_blank\">https://alpha.human-connection.org/code-of-conduct</a>",
|
||||
"title": "Verhaltenscodex"
|
||||
},
|
||||
"errors-and-feedback": {
|
||||
@ -802,7 +802,7 @@
|
||||
"title": "Fehler und Rückmeldungen"
|
||||
},
|
||||
"help-and-questions": {
|
||||
"description": "Für Hilfe und Fragen haben wir Dir eine umfassende Sammlung an häufig gestellten Fragen und Antworten (FAQ) zusammengestellt. Du findest diese hier: <a href=\"https://support.human-connection.org/kb/\" target=\"_blank\" > https://support.human-connection.org/kb/ </a>",
|
||||
"description": "Für Hilfe und Fragen haben wir Dir eine umfassende Sammlung an häufig gestellten Fragen und Antworten (FAQ) zusammengestellt; Du findest diese auf <a href=\"https://support.human-connection.org/kb/\" target=\"_blank\" > support.human-connection.org/kb/ </a>",
|
||||
"title": "Hilfe und Fragen"
|
||||
},
|
||||
"moderation": {
|
||||
@ -811,11 +811,11 @@
|
||||
},
|
||||
"newTermsAndConditions": "Neue Nutzungsbedingungen",
|
||||
"no-commercial-use": {
|
||||
"description": "Die Nutzung des Human Connection Netzwerkes ist nicht gestattet für kommerzielle Nutzung. Darunter fällt unter anderem das Bewerben von Produkten mit kommerzieller Absicht, das Einstellen von Affiliate-Links, direkter Aufruf zu Spenden oder finanzieller Unterstützung für Zwecke, die steuerlich nicht als gemeinnützig anerkannt sind.",
|
||||
"description": "Die Nutzung des Human Connection Netzwerkes ist nicht gestattet für kommerzielle Nutzung. Darunter fällt unter anderem das Bewerben von Produkten mit kommerzieller Absicht, das Einstellen von Affiliate-Links (Geschäftspartner-Links), direkter Aufruf zu Spenden oder finanzieller Unterstützung für Zwecke, die steuerlich nicht als gemeinnützig anerkannt sind.",
|
||||
"title": "Keine kommerzielle Nutzung"
|
||||
},
|
||||
"privacy-statement": {
|
||||
"description": "Unser Netzwerk ist ein soziales Wissens- und Aktionsnetzwerk. Daher ist es uns besonders wichtig, dass möglichst viele Inhalte öffentlich zugänglich sind. Im Laufe der Entwicklung unseres Netzwerkes wird es mehr und mehr die Möglichkeit geben, über die Sichtbarkeit der selbst angegebenen bzw. persönlichen Daten zu entscheiden. Über diese neuen Funktionen werden wir Euch informieren. Ansonsten gilt, dass Du immer darüber nachdenken solltest, welche persönlichen Daten Du über Dich (oder andere) preisgibst. Dies gilt insbesondere für Inhalte von Beiträgen und Kommentaren, da diese einen weitgehend öffentlichen Charakter haben. Später wird es Möglichkeiten geben, die Sichtbarkeit Deines Profils einzuschränken. Teil der Nutzungsbedingungen ist unsere Datenschutzerklärung, die Dich über die einzelnen Datenverarbeitungen in unserem Netzwerk informiert: <a href=\"https://human-connection.org/datenschutz/#netzwerk\" target=\"_blank\"> https://human-connection.org/datenschutz/#netzwerk</a> bzw. <a href=\"https://human-connection.org/datenschutz/\" target=\"_blank\">https://human-connection.org/datenschutz/</a> Unsere Datenschutzerklärung ist an die Gesetzeslage und die Charakteristika unseres Netzwerks angepasst und gilt immer in der aktuellsten Version.",
|
||||
"description": "Unser Netzwerk ist ein soziales Wissens- und Aktionsnetzwerk. Daher ist es uns besonders wichtig, dass möglichst viele Inhalte öffentlich zugänglich sind. Im Laufe der Entwicklung unseres Netzwerkes wird es mehr und mehr die Möglichkeit geben, über die Sichtbarkeit der selbst angegebenen bzw. persönlichen Daten zu entscheiden. Über diese neuen Funktionen werden wir Euch informieren. Ansonsten gilt, dass Du immer darüber nachdenken solltest, welche persönlichen Daten Du über Dich (oder andere) preisgibst. Dies gilt insbesondere für Inhalte von Beiträgen und Kommentaren, da diese einen weitgehend öffentlichen Charakter haben. Später wird es Möglichkeiten geben, die Sichtbarkeit Deines Profils einzuschränken. Teil der Nutzungsbedingungen ist unsere Datenschutzerklärung, die Dich über die einzelnen Datenverarbeitungen in unserem Netzwerk informiert: <a href=\"https://human-connection.org/datenschutz/#netzwerk\" target=\"_blank\">https://human-connection.org/datenschutz/#netzwerk</a> bzw. <a href=\"https://human-connection.org/datenschutz/\" target=\"_blank\">https://human-connection.org/datenschutz/</a>. Unsere Datenschutzerklärung ist an die Gesetzeslage und die Charakteristika unseres Netzwerks angepasst und gilt immer in der aktuellsten Version.",
|
||||
"title": "Datenschutz"
|
||||
},
|
||||
"terms-of-service": {
|
||||
@ -824,7 +824,7 @@
|
||||
},
|
||||
"termsAndConditionsConfirmed": "Ich habe die <a href=\"/terms-and-conditions\" target=\"_blank\">Nutzungsbedingungen</a> durchgelesen und stimme ihnen zu.",
|
||||
"termsAndConditionsNewConfirm": "Ich habe die neuen Nutzungsbedingungen durchgelesen und stimme zu.",
|
||||
"termsAndConditionsNewConfirmText": "Bitte lies Dir die neue Nutzungsbedingungen jetzt durch!",
|
||||
"termsAndConditionsNewConfirmText": "Bitte lies Dir die neuen Nutzungsbedingungen jetzt durch!",
|
||||
"use-and-license": {
|
||||
"description": "Sind Inhalte, die Du bei uns einstellst, durch Rechte am geistigen Eigentum geschützt, erteilst Du uns eine nicht-exklusive, übertragbare, unterlizenzierbare und weltweite Lizenz für die Nutzung dieser Inhalte für die Bereitstellung in unserem Netzwerk. Diese Lizenz endet, sobald Du Deine Inhalte oder Deinen ganzen Account löscht. Bedenke, dass andere Deine Inhalte weiter teilen können und wir diese nicht löschen können.",
|
||||
"title": "Nutzung und Lizenz"
|
||||
@ -832,7 +832,7 @@
|
||||
},
|
||||
"user": {
|
||||
"avatar": {
|
||||
"submitted": "Upload erfolgreich"
|
||||
"submitted": "Erfolgreich hochgeladen!"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,7 +63,7 @@
|
||||
"@nuxtjs/axios": "~5.9.5",
|
||||
"@nuxtjs/dotenv": "~1.4.1",
|
||||
"@nuxtjs/pwa": "^3.0.0-beta.20",
|
||||
"@nuxtjs/sentry": "^3.2.3",
|
||||
"@nuxtjs/sentry": "^3.2.4",
|
||||
"@nuxtjs/style-resources": "~1.0.0",
|
||||
"accounting": "~0.4.1",
|
||||
"apollo-cache-inmemory": "~1.6.5",
|
||||
@ -122,7 +122,7 @@
|
||||
"eslint-config-standard": "~14.1.0",
|
||||
"eslint-loader": "~3.0.3",
|
||||
"eslint-plugin-import": "~2.20.1",
|
||||
"eslint-plugin-jest": "~23.6.0",
|
||||
"eslint-plugin-jest": "~23.7.0",
|
||||
"eslint-plugin-node": "~11.0.0",
|
||||
"eslint-plugin-prettier": "~3.1.2",
|
||||
"eslint-plugin-promise": "~4.2.1",
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import { config, mount } from '@vue/test-utils'
|
||||
import Vuex from 'vuex'
|
||||
import Vue from 'vue'
|
||||
import PostSlug from './index.vue'
|
||||
import CommentList from '~/components/CommentList/CommentList'
|
||||
|
||||
@ -11,85 +12,103 @@ const localVue = global.localVue
|
||||
localVue.directive('scrollTo', jest.fn())
|
||||
|
||||
describe('PostSlug', () => {
|
||||
let store, propsData, mocks, stubs, wrapper, Wrapper
|
||||
let wrapper, Wrapper, backendData, mocks, stubs
|
||||
|
||||
beforeEach(() => {
|
||||
store = new Vuex.Store({
|
||||
getters: {
|
||||
'auth/user': () => {
|
||||
return { id: '1stUser' }
|
||||
},
|
||||
'auth/isModerator': () => false,
|
||||
},
|
||||
})
|
||||
propsData = {}
|
||||
mocks = {
|
||||
$t: jest.fn(),
|
||||
$filters: {
|
||||
truncate: a => a,
|
||||
removeHtml: a => a,
|
||||
},
|
||||
$route: {
|
||||
hash: '',
|
||||
},
|
||||
// If you are mocking the router, then don't use VueRouter with localVue: https://vue-test-utils.vuejs.org/guides/using-with-vue-router.html
|
||||
$router: {
|
||||
history: {
|
||||
push: jest.fn(),
|
||||
},
|
||||
},
|
||||
$toast: {
|
||||
success: jest.fn(),
|
||||
error: jest.fn(),
|
||||
},
|
||||
$apollo: {
|
||||
mutate: jest.fn().mockResolvedValue(),
|
||||
query: jest.fn().mockResolvedValue({ data: { PostEmotionsCountByEmotion: {} } }),
|
||||
},
|
||||
$scrollTo: jest.fn(),
|
||||
}
|
||||
stubs = {
|
||||
HcEditor: { render: () => {}, methods: { insertReply: jest.fn(() => null) } },
|
||||
ContentViewer: true,
|
||||
}
|
||||
jest.useFakeTimers()
|
||||
wrapper = Wrapper()
|
||||
wrapper.setData({
|
||||
const author = { id: '1stUser', slug: '1st-user' }
|
||||
backendData = {
|
||||
post: {
|
||||
id: '1',
|
||||
author: {
|
||||
id: '1stUser',
|
||||
},
|
||||
author,
|
||||
comments: [
|
||||
{
|
||||
id: 'comment134',
|
||||
contentExcerpt: 'this is a comment',
|
||||
content: 'this is a comment',
|
||||
author: {
|
||||
id: '1stUser',
|
||||
slug: '1st-user',
|
||||
},
|
||||
author,
|
||||
},
|
||||
],
|
||||
},
|
||||
ready: true,
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
describe('mount', () => {
|
||||
Wrapper = () => {
|
||||
return mount(PostSlug, {
|
||||
Wrapper = async (opts = {}) => {
|
||||
jest.useFakeTimers()
|
||||
const store = new Vuex.Store({
|
||||
getters: {
|
||||
'auth/user': () => {
|
||||
return { id: '1stUser' }
|
||||
},
|
||||
'auth/isModerator': () => false,
|
||||
},
|
||||
})
|
||||
const propsData = {}
|
||||
mocks = {
|
||||
$t: jest.fn(),
|
||||
$filters: {
|
||||
truncate: a => a,
|
||||
removeHtml: a => a,
|
||||
},
|
||||
$route: {
|
||||
hash: '',
|
||||
},
|
||||
// If you are mocking the router, then don't use VueRouter with localVue: https://vue-test-utils.vuejs.org/guides/using-with-vue-router.html
|
||||
$router: {
|
||||
history: {
|
||||
push: jest.fn(),
|
||||
},
|
||||
},
|
||||
$toast: {
|
||||
success: jest.fn(),
|
||||
error: jest.fn(),
|
||||
},
|
||||
$apollo: {
|
||||
mutate: jest.fn().mockResolvedValue(),
|
||||
query: jest.fn().mockResolvedValue({ data: { PostEmotionsCountByEmotion: {} } }),
|
||||
},
|
||||
$scrollTo: jest.fn(),
|
||||
}
|
||||
stubs = {
|
||||
HcEditor: { render: () => {}, methods: { insertReply: jest.fn(() => null) } },
|
||||
ContentViewer: true,
|
||||
}
|
||||
const defaults = {
|
||||
store,
|
||||
mocks,
|
||||
localVue,
|
||||
propsData,
|
||||
stubs,
|
||||
}
|
||||
const wrapper = mount(PostSlug, {
|
||||
...defaults,
|
||||
...opts,
|
||||
})
|
||||
wrapper.setData(backendData)
|
||||
await Vue.nextTick()
|
||||
return wrapper
|
||||
}
|
||||
|
||||
describe('given author is `null`', () => {
|
||||
it('does not crash', async () => {
|
||||
backendData = {
|
||||
post: {
|
||||
id: '1',
|
||||
author: null,
|
||||
comments: [],
|
||||
},
|
||||
ready: true,
|
||||
}
|
||||
wrapper = await Wrapper()
|
||||
expect(wrapper.find('.info.anonymous').exists()).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
describe('test Post callbacks', () => {
|
||||
describe('deletion of Post from Page by invoking "deletePostCallback()"', () => {
|
||||
beforeEach(async () => {
|
||||
wrapper = await Wrapper()
|
||||
await wrapper.vm.deletePostCallback()
|
||||
})
|
||||
|
||||
@ -113,6 +132,7 @@ describe('PostSlug', () => {
|
||||
|
||||
describe('reply method called when emitted reply received', () => {
|
||||
it('CommentList', async () => {
|
||||
wrapper = await Wrapper()
|
||||
wrapper.find(CommentList).vm.$emit('reply', {
|
||||
id: 'commentAuthorId',
|
||||
slug: 'ogerly',
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
resource-type="contribution"
|
||||
:resource="post"
|
||||
:modalsData="menuModalsData"
|
||||
:is-owner="isAuthor(post.author ? post.author.id : null)"
|
||||
:is-owner="isAuthor"
|
||||
@pinPost="pinPost"
|
||||
@unpinPost="unpinPost"
|
||||
/>
|
||||
@ -78,7 +78,7 @@
|
||||
>
|
||||
<hc-shout-button
|
||||
v-if="post.author"
|
||||
:disabled="isAuthor(post.author.id)"
|
||||
:disabled="isAuthor"
|
||||
:count="post.shoutedCount"
|
||||
:is-shouted="post.shoutedByCurrentUser"
|
||||
:post-id="post.id"
|
||||
@ -91,12 +91,12 @@
|
||||
<comment-list :post="post" @toggleNewCommentForm="toggleNewCommentForm" @reply="reply" />
|
||||
<ds-space margin-bottom="large" />
|
||||
<comment-form
|
||||
v-if="showNewCommentForm && !post.author.blocked"
|
||||
v-if="showNewCommentForm && !isBlocked"
|
||||
ref="commentForm"
|
||||
:post="post"
|
||||
@createComment="createComment"
|
||||
/>
|
||||
<ds-placeholder v-if="post.author.blocked">
|
||||
<ds-placeholder v-if="isBlocked">
|
||||
{{ $t('settings.blocked-users.explanation.commenting-disabled') }}
|
||||
<br />
|
||||
{{ $t('settings.blocked-users.explanation.commenting-explanation') }}
|
||||
@ -169,14 +169,21 @@ export default {
|
||||
this.deletePostCallback,
|
||||
)
|
||||
},
|
||||
isBlocked() {
|
||||
const { author } = this.post
|
||||
if (!author) return false
|
||||
return author.blocked
|
||||
},
|
||||
isAuthor() {
|
||||
const { author } = this.post
|
||||
if (!author) return false
|
||||
return this.$store.getters['auth/user'].id === author.id
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
reply(message) {
|
||||
this.$refs.commentForm && this.$refs.commentForm.reply(message)
|
||||
},
|
||||
isAuthor(id) {
|
||||
return this.$store.getters['auth/user'].id === id
|
||||
},
|
||||
async deletePostCallback() {
|
||||
try {
|
||||
await this.$apollo.mutate(deletePostMutation(this.post.id))
|
||||
|
||||
@ -1721,10 +1721,10 @@
|
||||
jimp-compact "^0.8.0"
|
||||
workbox-cdn "^4.3.1"
|
||||
|
||||
"@nuxtjs/sentry@^3.2.3":
|
||||
version "3.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@nuxtjs/sentry/-/sentry-3.2.3.tgz#ac102faeb9b1d6ad65d14abdb9705173108dc6c2"
|
||||
integrity sha512-3dTH9y2Of70h7JSk73kuxRMd9zxidwMsZp/OJJlb66b73rKR9dZtBCkH6J7z1vh+32b5IZh9vLP1LfWZaHnd0Q==
|
||||
"@nuxtjs/sentry@^3.2.4":
|
||||
version "3.2.4"
|
||||
resolved "https://registry.yarnpkg.com/@nuxtjs/sentry/-/sentry-3.2.4.tgz#736c4b62e76c788eefd6a27c879658541a130bab"
|
||||
integrity sha512-asM9pt/bdHLoALIea2OVOB/2S8OUx4vLhzi30B747Z6o0WLxB9RVYMsGgzjBO7Q7CEdrqei4UNEgTfE1G7EKTg==
|
||||
dependencies:
|
||||
"@sentry/browser" "^5.12.1"
|
||||
"@sentry/integrations" "^5.12.0"
|
||||
@ -7270,13 +7270,12 @@ eslint-plugin-import@~2.20.1:
|
||||
read-pkg-up "^2.0.0"
|
||||
resolve "^1.12.0"
|
||||
|
||||
eslint-plugin-jest@~23.6.0:
|
||||
version "23.6.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.6.0.tgz#508b32f80d44058c8c01257c0ee718cfbd521e9d"
|
||||
integrity sha512-GH8AhcFXspOLqak7fqnddLXEJsrFyvgO8Bm60SexvKSn1+3rWYESnCiWUOCUcBTprNSDSE4CtAZdM4EyV6gPPw==
|
||||
eslint-plugin-jest@~23.7.0:
|
||||
version "23.7.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.7.0.tgz#84d5603b6e745b59898cb6750df6a44782a39b04"
|
||||
integrity sha512-zkiyGlvJeHNjAEz8FaIxTXNblJJ/zj3waNbYbgflK7K6uy0cpE5zJBt/JpJtOBGM/UGkC6BqsQ4n0y7kQ2HA8w==
|
||||
dependencies:
|
||||
"@typescript-eslint/experimental-utils" "^2.5.0"
|
||||
micromatch "^4.0.2"
|
||||
|
||||
eslint-plugin-node@~11.0.0:
|
||||
version "11.0.0"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user