Merge branch 'master' of github.com:Ocelot-Social-Community/Ocelot-Social into 4265-move-sort-newsfeed-menu-into-filter-menu

# Conflicts:
#	backend/src/schema/resolvers/donations.spec.js
This commit is contained in:
Wolfgang Huß 2021-07-21 11:22:34 +02:00
commit 629a8da241
50 changed files with 4433 additions and 1317 deletions

View File

@ -1,25 +1,9 @@
---
name: 🐛 Bug report
about: Create a report to help us improve
name: 🐛 Bug Report
about: Create a report to help us to improve.
labels: bug
title: 🐛 [Bug]
---
## :bug: Bugreport
## :bug: Bug Report
<!-- Describe your issue in detail. Include screenshots if needed. Give us as much information as possible. Use a clear and concise description of what the bug is.-->
### Steps to reproduce the behavior
1.
2.
3.
4. ...
5. Profit
### Expected behavior
<!-- A clear and concise description of what you expected to happen. -->
### Version & Environment
<!-- Add context about your environment and used version here. -->
### Additional context
<!-- Add any other context about the problem here. -->

View File

@ -1,24 +1,9 @@
---
name: 💥 DevOps ticket
about: Help us manage our deployed App.
name: 💥 DevOps Ticket
about: Help us manage our deployed app.
labels: devops
title: 💥 [DevOps]
---
## 💥 DevOps ticket
## 💥 DevOps Ticket
<!-- Describe your issue in detail. Include screenshots if needed. Give us as much information as possible. Use a clear and concise description of what the problem is.-->
### Motive
<!-- Why does this task need to be done? What can we benefit from this? -->
### Related issues
<!-- Are there any related issues to link to? Please paste them below for reference. -->
### Implementation
<!-- Please, document any ideas of how the task can be performed. -->
### Validation
<!-- How can we make sure that this task was successful? -->
### Additional context
<!-- Add other context or background about the feature request here.-->

12
.github/ISSUE_TEMPLATE/epic.md vendored Normal file
View File

@ -0,0 +1,12 @@
---
name: 🌟 Epic
about: Define a big development step.
labels: epic
title: 🌟 [EPIC]
---
<!-- THIS ISSUE-TYPE IS NOT FOR YOU! -->
<!-- If you need an answer right away, visit the ocelot.social Discord:
https://discord.gg/AJSX9DCSUA -->
## 🌟 EPIC
<!-- Describe your Epic in detail. Include screenshots and drawings -->

View File

@ -1,24 +1,9 @@
---
name: 🚀 Feature request
about: Suggest an idea for this project
name: 🚀 Feature Request
about: Suggest an idea for this project.
labels: feature
title: 🚀 [Feature]
---
## :rocket: Feature
## :rocket: Feature Request
<!-- Give a short summary of the Feature. Use Screenshots if you want. -->
### User Problem
<!-- Which problem is this solving? Why do you think this is important? Who will benefit from it and how? -->
### Implementation
<!-- How do you think this feature should be implemented? How will it be used? Where in the network should it be located? Which steps and screens are involved? -->
### Design & Layout
<!-- Attach Screenshots and Sketches to illustrate your idea. -->
### Validation
<!-- How can we make sure that this feature indeed solves the above problem? How do we know if it has been accepted by the users of the network, once released? -->
### Additional context
<!-- Add other context or background about the feature request here.-->

View File

@ -8,5 +8,5 @@ title: 💬 [Question]
<!-- If you need an answer right away, visit the ocelot.social Discord:
https://discord.gg/AJSX9DCSUA -->
## :speech_balloon: Question
## 💬 Question
<!-- Describe your Question in detail. Include screenshots and drawings if needed. -->

View File

@ -1,21 +1,10 @@
---
name: 🔧 Refactor ticket
name: 🔧 Refactor
about: Help us improve our code by refactoring it.
labels: refactor
title: 🔧 [Refactor]
---
## :zap: Refactor ticket
## 🔧 Refactor
<!-- Describe your issue in detail. Include screenshots if needed. Give us as much information as possible. Use a clear and concise description of what the problem is.-->
### Motive
<!-- What is the purpose of this refactoring? If it's removing depcrecated code, please link to the deprecation notice. -->
### Related issues
<!-- Are there any related issues to link to? Please paste them below for reference. -->
### Implementation
<!-- Please, document any ideas of how the code should be refactored. -->
### Additional context
<!-- Add other context or background about the feature request here.-->

179
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,179 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 10
ignore:
- dependency-name: cypress
versions:
- 6.3.0
- 6.4.0
- 6.5.0
- 6.6.0
- 6.7.1
- 6.8.0
- 7.0.0
- 7.0.1
- 7.1.0
- dependency-name: cypress-cucumber-preprocessor
versions:
- 4.0.0
- 4.0.1
- 4.0.3
- dependency-name: date-fns
versions:
- 2.16.1
- 2.17.0
- 2.18.0
- 2.19.0
- 2.20.0
- 2.20.1
- 2.20.2
- 2.20.3
- 2.21.0
- dependency-name: cypress-file-upload
versions:
- 5.0.2
- 5.0.3
- 5.0.4
- 5.0.5
- dependency-name: neo4j-driver
versions:
- 4.2.2
- package-ecosystem: npm
directory: "/backend"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 10
ignore:
- dependency-name: y18n
versions:
- 4.0.1
- 4.0.2
- dependency-name: metascraper-publisher
versions:
- 5.16.16
- 5.18.1
- 5.18.12
- 5.18.2
- 5.18.4
- 5.18.5
- 5.18.6
- 5.18.9
- 5.20.0
- 5.21.0
- 5.21.2
- 5.21.3
- 5.21.4
- 5.21.5
- dependency-name: metascraper-author
versions:
- 5.16.16
- 5.18.1
- 5.18.12
- 5.18.2
- 5.18.4
- 5.18.5
- 5.18.6
- 5.18.9
- 5.20.0
- 5.21.0
- 5.21.2
- 5.21.3
- 5.21.4
- 5.21.5
- dependency-name: neo4j-driver
versions:
- 4.2.2
- dependency-name: neo4j-graphql-js
versions:
- 2.19.1
- dependency-name: mustache
versions:
- 4.1.0
- package-ecosystem: npm
directory: "/webapp"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 10
ignore:
- dependency-name: nuxt
versions:
- 2.14.12
- 2.15.0
- 2.15.1
- 2.15.2
- 2.15.3
- dependency-name: v-tooltip
versions:
- 2.1.2
- dependency-name: "@vue/server-test-utils"
versions:
- 1.1.2
- 1.1.3
- dependency-name: node-notifier
versions:
- 8.0.1
- package-ecosystem: docker
directory: "/webapp"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 10
ignore:
- dependency-name: node
versions:
- ">= 15.5.a, < 15.6"
- dependency-name: node
versions:
- 15.10.0.pre.alpine3.10
- 15.11.0.pre.alpine3.10
- 15.12.0.pre.alpine3.10
- 15.13.0.pre.alpine3.10
- 15.7.0.pre.alpine3.10
- 15.8.0.pre.alpine3.10
- 15.9.0.pre.alpine3.10
- package-ecosystem: docker
directory: "/backend"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 10
ignore:
- dependency-name: node
versions:
- ">= 15.4.a, < 15.5"
- dependency-name: node
versions:
- ">= 15.5.a, < 15.6"
- dependency-name: node
versions:
- 15.10.0.pre.alpine3.10
- 15.11.0.pre.alpine3.10
- 15.12.0.pre.alpine3.10
- 15.13.0.pre.alpine3.10
- 15.7.0.pre.alpine3.10
- 15.8.0.pre.alpine3.10
- 15.9.0.pre.alpine3.10
- package-ecosystem: docker
directory: "/neo4j"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 10
ignore:
- dependency-name: neo4j
versions:
- 4.2.3
- 4.2.4
- package-ecosystem: docker
directory: "/deployment/legacy-migration/maintenance-worker"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 10

View File

@ -81,7 +81,7 @@
"languagedetect": "^2.0.0",
"linkifyjs": "~2.1.8",
"lodash": "~4.17.14",
"merge-graphql-schemas": "^1.7.7",
"merge-graphql-schemas": "^1.7.8",
"metascraper": "^5.11.8",
"metascraper-audio": "^5.14.26",
"metascraper-author": "^5.14.22",
@ -134,7 +134,7 @@
"eslint-plugin-standard": "~4.0.1",
"jest": "~25.3.0",
"nodemon": "~2.0.2",
"prettier": "~2.2.0",
"prettier": "~2.3.2",
"rosie": "^2.0.1",
"supertest": "~4.0.2"
},

View File

@ -137,100 +137,93 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
}),
])
const [
peterLustig,
bobDerBaumeister,
jennyRostock,
huey,
dewey,
louie,
dagobert,
] = await Promise.all([
Factory.build(
'user',
{
id: 'u1',
name: 'Peter Lustig',
slug: 'peter-lustig',
role: 'admin',
},
{
email: 'admin@example.org',
},
),
Factory.build(
'user',
{
id: 'u2',
name: 'Bob der Baumeister',
slug: 'bob-der-baumeister',
role: 'moderator',
},
{
email: 'moderator@example.org',
},
),
Factory.build(
'user',
{
id: 'u3',
name: 'Jenny Rostock',
slug: 'jenny-rostock',
role: 'user',
},
{
email: 'user@example.org',
},
),
Factory.build(
'user',
{
id: 'u4',
name: 'Huey',
slug: 'huey',
role: 'user',
},
{
email: 'huey@example.org',
},
),
Factory.build(
'user',
{
id: 'u5',
name: 'Dewey',
slug: 'dewey',
role: 'user',
},
{
email: 'dewey@example.org',
},
),
Factory.build(
'user',
{
id: 'u6',
name: 'Louie',
slug: 'louie',
role: 'user',
},
{
email: 'louie@example.org',
},
),
Factory.build(
'user',
{
id: 'u7',
name: 'Dagobert',
slug: 'dagobert',
role: 'user',
},
{
email: 'dagobert@example.org',
},
),
])
const [peterLustig, bobDerBaumeister, jennyRostock, huey, dewey, louie, dagobert] =
await Promise.all([
Factory.build(
'user',
{
id: 'u1',
name: 'Peter Lustig',
slug: 'peter-lustig',
role: 'admin',
},
{
email: 'admin@example.org',
},
),
Factory.build(
'user',
{
id: 'u2',
name: 'Bob der Baumeister',
slug: 'bob-der-baumeister',
role: 'moderator',
},
{
email: 'moderator@example.org',
},
),
Factory.build(
'user',
{
id: 'u3',
name: 'Jenny Rostock',
slug: 'jenny-rostock',
role: 'user',
},
{
email: 'user@example.org',
},
),
Factory.build(
'user',
{
id: 'u4',
name: 'Huey',
slug: 'huey',
role: 'user',
},
{
email: 'huey@example.org',
},
),
Factory.build(
'user',
{
id: 'u5',
name: 'Dewey',
slug: 'dewey',
role: 'user',
},
{
email: 'dewey@example.org',
},
),
Factory.build(
'user',
{
id: 'u6',
name: 'Louie',
slug: 'louie',
role: 'user',
},
{
email: 'louie@example.org',
},
),
Factory.build(
'user',
{
id: 'u7',
name: 'Dagobert',
slug: 'dagobert',
role: 'user',
},
{
email: 'dagobert@example.org',
},
),
])
await Promise.all([
peterLustig.relateTo(Berlin, 'isIn'),
@ -561,7 +554,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
const hashtagAndMention1 =
'The new physics of <a class="hashtag" data-hashtag-id="QuantenFlussTheorie" href="/?hashtag=QuantenFlussTheorie">#QuantenFlussTheorie</a> can explain <a class="hashtag" data-hashtag-id="QuantumGravity" href="/?hashtag=QuantumGravity">#QuantumGravity</a>! <a class="mention" data-mention-id="u1" href="/profile/u1">@peter-lustig</a> got that already. ;-)'
const createPostMutation = gql`
mutation($id: ID, $title: String!, $content: String!, $categoryIds: [ID]) {
mutation ($id: ID, $title: String!, $content: String!, $categoryIds: [ID]) {
CreatePost(id: $id, title: $title, content: $content, categoryIds: $categoryIds) {
id
}
@ -618,7 +611,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
const mentionInComment2 =
'Did <a class="mention" data-mention-id="u1" href="/profile/u1">@peter-lustig</a> tell you?'
const createCommentMutation = gql`
mutation($id: ID, $postId: ID!, $content: String!) {
mutation ($id: ID, $postId: ID!, $content: String!) {
CreateComment(id: $id, postId: $postId, content: $content) {
id
}

View File

@ -13,7 +13,7 @@ const driver = getDriver()
const neode = getNeode()
const categoryIds = ['cat9']
const createPostMutation = gql`
mutation($id: ID, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
mutation ($id: ID, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
CreatePost(id: $id, title: $title, content: $postContent, categoryIds: $categoryIds) {
id
title
@ -22,7 +22,7 @@ const createPostMutation = gql`
}
`
const updatePostMutation = gql`
mutation($id: ID!, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
mutation ($id: ID!, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
UpdatePost(id: $id, content: $postContent, title: $title, categoryIds: $categoryIds) {
title
content
@ -95,7 +95,7 @@ describe('hashtags', () => {
</p>
`
const postWithHastagsQuery = gql`
query($id: ID) {
query ($id: ID) {
Post(id: $id) {
tags {
id

View File

@ -29,7 +29,7 @@ afterAll(async () => {
})
const createPostMutation = gql`
mutation($title: String!, $content: String!, $categoryIds: [ID]) {
mutation ($title: String!, $content: String!, $categoryIds: [ID]) {
CreatePost(title: $title, content: $content, categoryIds: $categoryIds) {
language
}

View File

@ -10,7 +10,7 @@ const driver = getDriver()
const neode = getNeode()
const categoryIds = ['cat9']
const createPostMutation = gql`
mutation($id: ID, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
mutation ($id: ID, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
CreatePost(id: $id, title: $title, content: $postContent, categoryIds: $categoryIds) {
id
title
@ -19,7 +19,7 @@ const createPostMutation = gql`
}
`
const updatePostMutation = gql`
mutation($id: ID!, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
mutation ($id: ID!, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
UpdatePost(id: $id, content: $postContent, title: $title, categoryIds: $categoryIds) {
title
content
@ -27,7 +27,7 @@ const updatePostMutation = gql`
}
`
const createCommentMutation = gql`
mutation($id: ID, $postId: ID!, $commentContent: String!) {
mutation ($id: ID, $postId: ID!, $commentContent: String!) {
CreateComment(id: $id, postId: $postId, content: $commentContent) {
id
content
@ -80,7 +80,7 @@ afterEach(async () => {
describe('notifications', () => {
const notificationQuery = gql`
query($read: Boolean) {
query ($read: Boolean) {
notifications(read: $read, orderBy: updatedAt_desc) {
read
reason
@ -367,7 +367,7 @@ describe('notifications', () => {
describe('if the notification was marked as read earlier', () => {
const markAsReadAction = async () => {
const mutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
markAsRead(id: $id) {
read
}

View File

@ -80,7 +80,7 @@ describe('authorization', () => {
describe('access email address', () => {
const userQuery = gql`
query($name: String) {
query ($name: String) {
User(name: $name) {
email
}
@ -165,7 +165,7 @@ describe('authorization', () => {
describe('access Signup', () => {
const signupMutation = gql`
mutation($email: String!, $inviteCode: String) {
mutation ($email: String!, $inviteCode: String) {
Signup(email: $email, inviteCode: $inviteCode) {
email
}

View File

@ -54,7 +54,7 @@ describe('slugifyMiddleware', () => {
describe('CreatePost', () => {
const categoryIds = ['cat9']
const createPostMutation = gql`
mutation($title: String!, $content: String!, $categoryIds: [ID]!, $slug: String) {
mutation ($title: String!, $content: String!, $categoryIds: [ID]!, $slug: String) {
CreatePost(title: $title, content: $content, categoryIds: $categoryIds, slug: $slug) {
slug
}
@ -164,7 +164,7 @@ describe('slugifyMiddleware', () => {
describe('SignupVerification', () => {
const mutation = gql`
mutation(
mutation (
$password: String!
$email: String!
$name: String!

View File

@ -10,7 +10,7 @@ const driver = getDriver()
const neode = getNeode()
const postQuery = gql`
query($id: ID) {
query ($id: ID) {
Post(id: $id) {
clickedCount
}

View File

@ -17,14 +17,14 @@ let authenticatedUser,
commentingUser
const createCommentMutation = gql`
mutation($id: ID, $postId: ID!, $content: String!) {
mutation ($id: ID, $postId: ID!, $content: String!) {
CreateComment(id: $id, postId: $postId, content: $content) {
id
}
}
`
const updateCommentMutation = gql`
mutation($content: String!, $id: ID!) {
mutation ($content: String!, $id: ID!) {
UpdateComment(content: $content, id: $id) {
id
}
@ -32,7 +32,7 @@ const updateCommentMutation = gql`
`
const reportMutation = gql`
mutation($resourceId: ID!, $reasonCategory: ReasonCategory!, $reasonDescription: String!) {
mutation ($resourceId: ID!, $reasonCategory: ReasonCategory!, $reasonDescription: String!) {
fileReport(
resourceId: $resourceId
reasonCategory: $reasonCategory
@ -43,7 +43,7 @@ const reportMutation = gql`
}
`
const reviewMutation = gql`
mutation($resourceId: ID!, $disable: Boolean, $closed: Boolean) {
mutation ($resourceId: ID!, $disable: Boolean, $closed: Boolean) {
review(resourceId: $resourceId, disable: $disable, closed: $closed) {
createdAt
updatedAt
@ -52,7 +52,7 @@ const reviewMutation = gql`
`
const updateUserMutation = gql`
mutation($id: ID!, $name: String) {
mutation ($id: ID!, $name: String) {
UpdateUser(id: $id, name: $name) {
name
}

View File

@ -36,7 +36,7 @@ afterEach(async () => {
})
const createCommentMutation = gql`
mutation($id: ID, $postId: ID!, $content: String!) {
mutation ($id: ID, $postId: ID!, $content: String!) {
CreateComment(id: $id, postId: $postId, content: $content) {
id
content
@ -128,7 +128,7 @@ describe('CreateComment', () => {
describe('UpdateComment', () => {
const updateCommentMutation = gql`
mutation($content: String!, $id: ID!) {
mutation ($content: String!, $id: ID!) {
UpdateComment(content: $content, id: $id) {
id
content
@ -220,7 +220,7 @@ describe('UpdateComment', () => {
describe('DeleteComment', () => {
const deleteCommentMutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
DeleteComment(id: $id) {
id
content

View File

@ -9,8 +9,8 @@ const instance = getNeode()
const driver = getDriver()
const updateDonationsMutation = gql`
mutation($showDonations: Boolean, $goal: Int, $progress: Int) {
UpdateDonations(showDonations: $showDonations, goal: $goal, progress: $progress) {
mutation ($goal: Int, $progress: Int) {
UpdateDonations(goal: $goal, progress: $progress) {
id
showDonations
goal

View File

@ -37,7 +37,7 @@ afterEach(async () => {
describe('AddEmailAddress', () => {
const mutation = gql`
mutation($email: String!) {
mutation ($email: String!) {
AddEmailAddress(email: $email) {
email
verifiedAt
@ -142,7 +142,7 @@ describe('AddEmailAddress', () => {
describe('VerifyEmailAddress', () => {
const mutation = gql`
mutation($email: String!, $nonce: String!) {
mutation ($email: String!, $nonce: String!) {
VerifyEmailAddress(email: $email, nonce: $nonce) {
email
createdAt
@ -309,7 +309,7 @@ describe('VerifyNonce', () => {
})
const verifyNonceQuery = gql`
query($email: String!, $nonce: String!) {
query ($email: String!, $nonce: String!) {
VerifyNonce(email: $email, nonce: $nonce)
}
`

View File

@ -37,8 +37,7 @@ const babyLovesCatEmbedResponse = new Response(
thumbnail_height: 360,
provider_url: 'https://www.youtube.com/',
thumbnail_width: 480,
html:
'<iframe width="480" height="270" src="https://www.youtube.com/embed/qkdXAtO40Fo?start=18&feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
html: '<iframe width="480" height="270" src="https://www.youtube.com/embed/qkdXAtO40Fo?start=18&feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
thumbnail_url: 'https://i.ytimg.com/vi/qkdXAtO40Fo/hqdefault.jpg',
version: '1.0',
author_name: 'Merkley Family',
@ -57,7 +56,7 @@ describe('Query', () => {
})
const { query } = createTestClient(server)
const embed = gql`
query($url: String!) {
query ($url: String!) {
embed(url: $url) {
type
title
@ -204,8 +203,7 @@ Have all the information for the brand in separate config files. Set these defau
video: null,
lang: 'de',
sources: ['resource', 'oembed'],
html:
'<iframe width="480" height="270" src="https://www.youtube.com/embed/qkdXAtO40Fo?start=18&feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
html: '<iframe width="480" height="270" src="https://www.youtube.com/embed/qkdXAtO40Fo?start=18&feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
},
},
errors: undefined,

View File

@ -16,7 +16,7 @@ let user2
let variables
const mutationFollowUser = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
followUser(id: $id) {
name
followedBy {
@ -29,7 +29,7 @@ const mutationFollowUser = gql`
`
const mutationUnfollowUser = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
unfollowUser(id: $id) {
name
followedBy {
@ -42,7 +42,7 @@ const mutationUnfollowUser = gql`
`
const userQuery = gql`
query($id: ID) {
query ($id: ID) {
User(id: $id) {
followedBy {
id

View File

@ -11,7 +11,7 @@ let mutate
const driver = getDriver()
const generateInviteCodeMutation = gql`
mutation($expiresAt: String = null) {
mutation ($expiresAt: String = null) {
GenerateInviteCode(expiresAt: $expiresAt) {
code
createdAt
@ -31,7 +31,7 @@ const myInviteCodesQuery = gql`
`
const isValidInviteCodeQuery = gql`
query($code: ID!) {
query ($code: ID!) {
isValidInviteCode(code: $code)
}
`

View File

@ -31,7 +31,7 @@ describe('resolvers', () => {
describe('custom mutation, not handled by neo4j-graphql-js', () => {
let variables
const updateUserMutation = gql`
mutation($id: ID!, $name: String) {
mutation ($id: ID!, $name: String) {
UpdateUser(id: $id, name: $name) {
name
location {

View File

@ -16,7 +16,7 @@ let mutate,
closeReportVariables
const reviewMutation = gql`
mutation($resourceId: ID!, $disable: Boolean, $closed: Boolean) {
mutation ($resourceId: ID!, $disable: Boolean, $closed: Boolean) {
review(resourceId: $resourceId, disable: $disable, closed: $closed) {
createdAt
updatedAt

View File

@ -139,7 +139,7 @@ describe('given some notifications', () => {
describe('notifications', () => {
const notificationQuery = gql`
query($read: Boolean, $orderBy: NotificationOrdering) {
query ($read: Boolean, $orderBy: NotificationOrdering) {
notifications(read: $read, orderBy: $orderBy) {
from {
__typename
@ -249,7 +249,7 @@ describe('given some notifications', () => {
const deletePostAction = async () => {
authenticatedUser = await author.toJson()
const deletePostMutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
DeletePost(id: $id) {
id
deleted
@ -284,7 +284,7 @@ describe('given some notifications', () => {
describe('markAsRead', () => {
const markAsReadMutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
markAsRead(id: $id) {
from {
__typename

View File

@ -55,7 +55,7 @@ describe('passwordReset', () => {
describe('requestPasswordReset', () => {
const mutation = gql`
mutation($email: String!) {
mutation ($email: String!) {
requestPasswordReset(email: $email)
}
`
@ -116,7 +116,7 @@ describe('resetPassword', () => {
}
const mutation = gql`
mutation($nonce: String!, $email: String!, $newPassword: String!) {
mutation ($nonce: String!, $email: String!, $newPassword: String!) {
resetPassword(nonce: $nonce, email: $email, newPassword: $newPassword)
}
`
@ -196,7 +196,7 @@ describe('resetPassword', () => {
it('updates password of the user', async () => {
await mutate({ mutation, variables })
const checkLoginMutation = gql`
mutation($email: String!, $password: String!) {
mutation ($email: String!, $password: String!) {
login(email: $email, password: $password)
}
`

View File

@ -16,7 +16,7 @@ const categoryIds = ['cat9', 'cat4', 'cat15']
let variables
const createPostMutation = gql`
mutation($id: ID, $title: String!, $content: String!, $language: String, $categoryIds: [ID]) {
mutation ($id: ID, $title: String!, $content: String!, $language: String, $categoryIds: [ID]) {
CreatePost(
id: $id
title: $title
@ -323,7 +323,7 @@ describe('CreatePost', () => {
describe('UpdatePost', () => {
let author, newlyCreatedPost
const updatePostMutation = gql`
mutation($id: ID!, $title: String!, $content: String!, $image: ImageInput) {
mutation ($id: ID!, $title: String!, $content: String!, $image: ImageInput) {
UpdatePost(id: $id, title: $title, content: $content, image: $image) {
id
title
@ -497,7 +497,7 @@ describe('UpdatePost', () => {
describe('pin posts', () => {
let author
const pinPostMutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
pinPost(id: $id) {
id
title
@ -773,7 +773,7 @@ describe('pin posts', () => {
it('pinned post appear first even when created before other posts', async () => {
const postOrderingQuery = gql`
query($orderBy: [_PostOrdering]) {
query ($orderBy: [_PostOrdering]) {
Post(orderBy: $orderBy) {
id
pinned
@ -816,7 +816,7 @@ describe('pin posts', () => {
describe('unpin posts', () => {
let pinnedPost
const unpinPostMutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
unpinPost(id: $id) {
id
title
@ -928,7 +928,7 @@ describe('unpin posts', () => {
describe('DeletePost', () => {
let author
const deletePostMutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
DeletePost(id: $id) {
id
deleted
@ -1052,14 +1052,14 @@ describe('DeletePost', () => {
describe('emotions', () => {
let author, postToEmote
const PostsEmotionsCountQuery = gql`
query($id: ID!) {
query ($id: ID!) {
Post(id: $id) {
emotionsCount
}
}
`
const PostsEmotionsQuery = gql`
query($id: ID!) {
query ($id: ID!) {
Post(id: $id) {
emotions {
emotion
@ -1093,7 +1093,7 @@ describe('emotions', () => {
describe('AddPostEmotions', () => {
const addPostEmotionsMutation = gql`
mutation($to: _PostInput!, $data: _EMOTEDInput!) {
mutation ($to: _PostInput!, $data: _EMOTEDInput!) {
AddPostEmotions(to: $to, data: $data) {
from {
id
@ -1210,7 +1210,7 @@ describe('emotions', () => {
describe('RemovePostEmotions', () => {
let removePostEmotionsVariables, postsEmotionsQueryVariables
const removePostEmotionsMutation = gql`
mutation($to: _PostInput!, $data: _EMOTEDInput!) {
mutation ($to: _PostInput!, $data: _EMOTEDInput!) {
RemovePostEmotions(to: $to, data: $data) {
from {
id
@ -1309,13 +1309,13 @@ describe('emotions', () => {
let PostsEmotionsByCurrentUserVariables
const PostsEmotionsCountByEmotionQuery = gql`
query($postId: ID!, $data: _EMOTEDInput!) {
query ($postId: ID!, $data: _EMOTEDInput!) {
PostsEmotionsCountByEmotion(postId: $postId, data: $data)
}
`
const PostsEmotionsByCurrentUserQuery = gql`
query($postId: ID!) {
query ($postId: ID!) {
PostsEmotionsByCurrentUser(postId: $postId)
}
`

View File

@ -36,7 +36,7 @@ afterEach(async () => {
describe('Signup', () => {
const mutation = gql`
mutation($email: String!, $inviteCode: String) {
mutation ($email: String!, $inviteCode: String) {
Signup(email: $email, inviteCode: $inviteCode) {
email
}
@ -145,7 +145,7 @@ describe('Signup', () => {
describe('SignupVerification', () => {
const mutation = gql`
mutation(
mutation (
$name: String!
$password: String!
$email: String!

View File

@ -11,7 +11,7 @@ describe('file a report on a resource', () => {
let authenticatedUser, currentUser, mutate, query, moderator, abusiveUser, otherReportingUser
const categoryIds = ['cat9']
const fileReportMutation = gql`
mutation($resourceId: ID!, $reasonCategory: ReasonCategory!, $reasonDescription: String!) {
mutation ($resourceId: ID!, $reasonCategory: ReasonCategory!, $reasonDescription: String!) {
fileReport(
resourceId: $resourceId
reasonCategory: $reasonCategory
@ -42,7 +42,7 @@ describe('file a report on a resource', () => {
reasonDescription: 'Violates code of conduct !!!',
}
const reportsQuery = gql`
query($closed: Boolean) {
query ($closed: Boolean) {
reports(orderBy: createdAt_desc, closed: $closed) {
id
createdAt
@ -74,7 +74,7 @@ describe('file a report on a resource', () => {
}
`
const reviewMutation = gql`
mutation($resourceId: ID!, $disable: Boolean, $closed: Boolean) {
mutation ($resourceId: ID!, $disable: Boolean, $closed: Boolean) {
review(resourceId: $resourceId, disable: $disable, closed: $closed) {
createdAt
resource {

View File

@ -76,7 +76,7 @@ describe('rewards', () => {
describe('reward', () => {
const rewardMutation = gql`
mutation($from: ID!, $to: ID!) {
mutation ($from: ID!, $to: ID!) {
reward(badgeKey: $from, userId: $to) {
id
badges {
@ -266,7 +266,7 @@ describe('rewards', () => {
}
const unrewardMutation = gql`
mutation($from: ID!, $to: ID!) {
mutation ($from: ID!, $to: ID!) {
unreward(badgeKey: $from, userId: $to) {
id
badges {

View File

@ -28,7 +28,7 @@ afterAll(async () => {
})
const searchQuery = gql`
query($query: String!) {
query ($query: String!) {
searchResults(query: $query, limit: 5) {
__typename
... on Post {
@ -49,7 +49,7 @@ const searchQuery = gql`
`
const searchPostQuery = gql`
query($query: String!, $firstPosts: Int, $postsOffset: Int) {
query ($query: String!, $firstPosts: Int, $postsOffset: Int) {
searchPosts(query: $query, firstPosts: $firstPosts, postsOffset: $postsOffset) {
postCount
posts {

View File

@ -9,17 +9,17 @@ const instance = getNeode()
const driver = getDriver()
const mutationShoutPost = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
shout(id: $id, type: Post)
}
`
const mutationUnshoutPost = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
unshout(id: $id, type: Post)
}
`
const queryPost = gql`
query($id: ID!) {
query ($id: ID!) {
Post(id: $id) {
id
shoutedBy {

View File

@ -70,7 +70,7 @@ describe('SocialMedia', () => {
beforeEach(() => {
mutation = gql`
mutation($url: String!) {
mutation ($url: String!) {
CreateSocialMedia(url: $url) {
id
url
@ -131,7 +131,7 @@ describe('SocialMedia', () => {
describe('ownedBy', () => {
beforeEach(() => {
mutation = gql`
mutation($url: String!) {
mutation ($url: String!) {
CreateSocialMedia(url: $url) {
url
ownedBy {
@ -162,7 +162,7 @@ describe('SocialMedia', () => {
const socialMedia = await setUpSocialMedia()
mutation = gql`
mutation($id: ID!, $url: String!) {
mutation ($id: ID!, $url: String!) {
UpdateSocialMedia(id: $id, url: $url) {
id
url
@ -225,7 +225,7 @@ describe('SocialMedia', () => {
const socialMedia = await setUpSocialMedia()
mutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
DeleteSocialMedia(id: $id) {
id
url

View File

@ -39,7 +39,7 @@ afterAll(async () => {
})
const userDataQuery = gql`
query($id: ID!) {
query ($id: ID!) {
userData(id: $id) {
user {
id

View File

@ -171,7 +171,7 @@ describe('currentUser', () => {
describe('login', () => {
const loginMutation = gql`
mutation($email: String!, $password: String!) {
mutation ($email: String!, $password: String!) {
login(email: $email, password: $password)
}
`
@ -287,7 +287,7 @@ describe('login', () => {
describe('change password', () => {
const changePasswordMutation = gql`
mutation($oldPassword: String!, $newPassword: String!) {
mutation ($oldPassword: String!, $newPassword: String!) {
changePassword(oldPassword: $oldPassword, newPassword: $newPassword)
}
`

View File

@ -17,7 +17,7 @@ const driver = getDriver()
const neode = getNeode()
const deleteUserMutation = gql`
mutation($id: ID!, $resource: [Deletable]) {
mutation ($id: ID!, $resource: [Deletable]) {
DeleteUser(id: $id, resource: $resource) {
id
name
@ -46,7 +46,7 @@ const deleteUserMutation = gql`
`
const switchUserRoleMutation = gql`
mutation($role: UserGroup!, $id: ID!) {
mutation ($role: UserGroup!, $id: ID!) {
switchUserRole(role: $role, id: $id) {
name
role
@ -81,7 +81,7 @@ describe('User', () => {
beforeEach(async () => {
userQuery = gql`
query($email: String) {
query ($email: String) {
User(email: $email) {
name
}
@ -144,7 +144,7 @@ describe('UpdateUser', () => {
beforeEach(async () => {
updateUserMutation = gql`
mutation(
mutation (
$id: ID!
$name: String
$termsAndConditionsAgreedVersion: String

View File

@ -9,7 +9,7 @@ const driver = getDriver()
let authenticatedUser, mutate, query, variables
const updateUserMutation = gql`
mutation($id: ID!, $name: String!, $locationName: String) {
mutation ($id: ID!, $name: String!, $locationName: String) {
UpdateUser(id: $id, name: $name, locationName: $locationName) {
locationName
}
@ -17,7 +17,7 @@ const updateUserMutation = gql`
`
const queryLocations = gql`
query($place: String!, $lang: String!) {
query ($place: String!, $lang: String!) {
queryLocations(place: $place, lang: $lang) {
place_name
id

View File

@ -93,7 +93,7 @@ describe('muteUser', () => {
muteAction = (variables) => {
const { mutate } = createTestClient(server)
const muteUserMutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
muteUser(id: $id) {
id
name
@ -310,7 +310,7 @@ describe('unmuteUser', () => {
unmuteAction = (variables) => {
const { mutate } = createTestClient(server)
const unmuteUserMutation = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
unmuteUser(id: $id) {
id
name

View File

@ -32,7 +32,7 @@ afterAll(async () => {
describe('count post teaser views', () => {
let aUser, bUser
const markTeaserAsViewed = gql`
mutation($id: ID!) {
mutation ($id: ID!) {
markTeaserAsViewed(id: $id) {
id
viewedTeaserCount

View File

@ -910,6 +910,13 @@
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.9.2":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6":
version "7.8.6"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b"
@ -956,32 +963,32 @@
exec-sh "^0.3.2"
minimist "^1.2.0"
"@graphql-toolkit/common@0.9.12":
version "0.9.12"
resolved "https://registry.yarnpkg.com/@graphql-toolkit/common/-/common-0.9.12.tgz#a3bf91d00130100cfa0a72be718b16cc1011ab45"
integrity sha512-NjBVxeM1GB0bldiBm4UQoxKtbu/hjRfcqDEt1JPia+uXgFde3qTxtF5IZkworRFNCp+8KPSVrwcreQHSfFW63w==
"@graphql-toolkit/common@0.10.4":
version "0.10.4"
resolved "https://registry.yarnpkg.com/@graphql-toolkit/common/-/common-0.10.4.tgz#7785f2a3f14559d0778859c49f4442078c196695"
integrity sha512-HQ3HaxCqX+UE8y/0h7LMDBBGSIKJxY/gaQesaksvE2Y+N4NpSWdiW6HpOcgXfC2HGf9yM0hEdsERzzL8z3mbHQ==
dependencies:
aggregate-error "3.0.1"
camel-case "4.1.1"
graphql-tools-fork "9.0.1"
graphql-tools "5.0.0"
lodash "4.17.15"
"@graphql-toolkit/file-loading@0.9.12":
version "0.9.12"
resolved "https://registry.yarnpkg.com/@graphql-toolkit/file-loading/-/file-loading-0.9.12.tgz#f7d5d7e042df59c4e6c8fe3417c67dd1cddf9043"
integrity sha512-xEmKkbWI5FXQARTN3dbPzshwcmduOJUvx1QGsfcuryVDdQJZynUEaPF7IxYaFpvQF7vwxGIRdff/jC/a5ypDrA==
"@graphql-toolkit/file-loading@0.10.4":
version "0.10.4"
resolved "https://registry.yarnpkg.com/@graphql-toolkit/file-loading/-/file-loading-0.10.4.tgz#50e8933e44b17853544c1fe63350df93f33a5e80"
integrity sha512-oUmy/sO3BJfax85pVKI7FZ6TWrViNuWXoJkRM293YV9bKGuYU9TgqZoHyM+oEqWO5ruXCL/nCdw3cIBau+rSNA==
dependencies:
globby "11.0.0"
unixify "1.0.0"
"@graphql-toolkit/schema-merging@0.9.12":
version "0.9.12"
resolved "https://registry.yarnpkg.com/@graphql-toolkit/schema-merging/-/schema-merging-0.9.12.tgz#f058a7d256a4ed0e61e9874f90ae03326b81668e"
integrity sha512-ciqxLeMw7KPbJcq/xgnPbGyJGRO6bO1zQcdWCUSssyw8VDRHj5PFqEOAzT88eZQkEtg3qLN/wQEypeyFyNTHzw==
"@graphql-toolkit/schema-merging@0.10.4":
version "0.10.4"
resolved "https://registry.yarnpkg.com/@graphql-toolkit/schema-merging/-/schema-merging-0.10.4.tgz#2428590a531a33e9fe03be27cce9030f1c4c044b"
integrity sha512-naL6reYBuILLMrkMfKz0lOLL0kl6gGYnaaywnO/Dgp9F4NeAxDdAs5CV6Fy9NO5OzePFP58Dnc4sh2RyYrrFJg==
dependencies:
"@graphql-toolkit/common" "0.9.12"
"@graphql-toolkit/common" "0.10.4"
deepmerge "4.2.2"
graphql-tools-fork "9.0.1"
graphql-tools "5.0.0"
tslib "1.11.1"
"@hapi/address@2.x.x":
@ -2036,7 +2043,7 @@ apollo-link-context@~1.0.20:
apollo-link "^1.2.14"
tslib "^1.9.3"
apollo-link-http-common@^0.2.15, apollo-link-http-common@^0.2.16:
apollo-link-http-common@^0.2.14, apollo-link-http-common@^0.2.16:
version "0.2.16"
resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz#756749dafc732792c8ca0923f9a40564b7c59ecc"
integrity sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg==
@ -2054,7 +2061,7 @@ apollo-link-http@~1.5.17:
apollo-link-http-common "^0.2.16"
tslib "^1.9.3"
apollo-link@^1.0.0, apollo-link@^1.2.13, apollo-link@^1.2.14:
apollo-link@^1.0.0, apollo-link@^1.2.12, apollo-link@^1.2.14:
version "1.2.14"
resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9"
integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==
@ -2211,6 +2218,16 @@ apollo-tracing@^0.12.0:
apollo-server-env "^2.4.5"
apollo-server-plugin-base "^0.10.2"
apollo-upload-client@^13.0.0:
version "13.0.0"
resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-13.0.0.tgz#146d1ddd85d711fcac8ca97a72d3ca6787f2b71b"
integrity sha512-lJ9/bk1BH1lD15WhWRha2J3+LrXrPIX5LP5EwiOUHv8PCORp4EUrcujrA3rI5hZeZygrTX8bshcuMdpqpSrvtA==
dependencies:
"@babel/runtime" "^7.9.2"
apollo-link "^1.2.12"
apollo-link-http-common "^0.2.14"
extract-files "^8.0.0"
apollo-utilities@1.3.3, apollo-utilities@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.3.tgz#f1854715a7be80cd810bc3ac95df085815c0787c"
@ -4299,10 +4316,10 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
extract-files@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-7.0.0.tgz#3dc7853320ff7876ec62d6e98f2f4e6f3e6282f6"
integrity sha512-3AUlT7TD+DbQXNe3t70QrgJU6Wgcp7rk1Zm0vqWz8OYnw4vxihgG0TgZ2SIGrVqScc4WfOu7B4a0BezGJ0YqvQ==
extract-files@^8.0.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-8.1.0.tgz#46a0690d0fe77411a2e3804852adeaa65cd59288"
integrity sha512-PTGtfthZK79WUMk+avLmwx3NGdU8+iVFXC2NMGxKsn0MnihOG2lvumj+AZo8CTwTrwjXDgZ5tztbRlEdRjBonQ==
extsprintf@1.3.0:
version "1.3.0"
@ -4849,19 +4866,19 @@ graphql-tag@^2.9.2, graphql-tag@~2.10.3:
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.3.tgz#ea1baba5eb8fc6339e4c4cf049dabe522b0edf03"
integrity sha512-4FOv3ZKfA4WdOKJeHdz6B3F/vxBLSgmBcGeAFPf4n1F64ltJUvOOerNj0rsJxONQGdhUMynQIvd6LzB+1J5oKA==
graphql-tools-fork@9.0.1:
version "9.0.1"
resolved "https://registry.yarnpkg.com/graphql-tools-fork/-/graphql-tools-fork-9.0.1.tgz#fc8df40c108bdba3268999dea355cc614c765038"
integrity sha512-kM6mUNVekgnWKtVqLGQ9HvQqQ3zZVPZRg1esltBoohsbUMaChl+9QkjBjoMxnZPnbTGOOGGagopNBQALIBysNg==
graphql-tools@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-5.0.0.tgz#67281c834a0e29f458adba8018f424816fa627e9"
integrity sha512-5zn3vtn//382b7G3Wzz3d5q/sh+f7tVrnxeuhTMTJ7pWJijNqLxH7VEzv8VwXCq19zAzHYEosFHfXiK7qzvk7w==
dependencies:
apollo-link "^1.2.13"
apollo-link-http-common "^0.2.15"
apollo-link "^1.2.14"
apollo-upload-client "^13.0.0"
deprecated-decorator "^0.1.6"
extract-files "^7.0.0"
form-data "^3.0.0"
iterall "^1.3.0"
node-fetch "^2.6.0"
uuid "^7.0.2"
tslib "^1.11.1"
uuid "^7.0.3"
graphql-tools@^4.0.0, graphql-tools@^4.0.4, graphql-tools@^4.0.5:
version "4.0.8"
@ -6606,13 +6623,13 @@ merge-descriptors@1.0.1:
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
merge-graphql-schemas@^1.7.7:
version "1.7.7"
resolved "https://registry.yarnpkg.com/merge-graphql-schemas/-/merge-graphql-schemas-1.7.7.tgz#673898f97c384d88fd66e49359b2f604e5864441"
integrity sha512-3mjFHXpsF+bnsnSy/FlZiWCcNo7AULuG8kEBE+YVX8qbzNrEPJVhSg7ANr5LjQZbGtSlTz7fa3Wqw0bfbQ5R5Q==
merge-graphql-schemas@^1.7.8:
version "1.7.8"
resolved "https://registry.yarnpkg.com/merge-graphql-schemas/-/merge-graphql-schemas-1.7.8.tgz#11a0a672a38a61d988c09ffdebe1bd4f8418de48"
integrity sha512-C3EJ1i86OjmbcCT524wVPRl17M5VZzgyh9kIGYAlYnAILX+7xfh8cCbMKfehh9n4opZg6CtcPogCiVZ6PB2NyQ==
dependencies:
"@graphql-toolkit/file-loading" "0.9.12"
"@graphql-toolkit/schema-merging" "0.9.12"
"@graphql-toolkit/file-loading" "0.10.4"
"@graphql-toolkit/schema-merging" "0.10.4"
tslib "1.11.1"
merge-stream@^2.0.0:
@ -7816,10 +7833,10 @@ prettier-linter-helpers@^1.0.0:
dependencies:
fast-diff "^1.1.2"
prettier@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.0.tgz#8a03c7777883b29b37fb2c4348c66a78e980418b"
integrity sha512-yYerpkvseM4iKD/BXLYUkQV5aKt4tQPqaGW6EsZjzyu0r7sVZZNPJW4Y8MyKmicp6t42XUPcBVA+H6sB3gqndw==
prettier@~2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d"
integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==
pretty-format@^25.3.0:
version "25.3.0"
@ -9406,15 +9423,15 @@ ts-invariant@^0.4.0:
dependencies:
tslib "^1.9.3"
tslib@1.11.1, tslib@^1.9.0:
tslib@1.11.1:
version "1.11.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
tslib@^1.10.0, tslib@^1.9.3:
version "1.13.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
tslib@^1.10.0, tslib@^1.11.1, tslib@^1.9.0, tslib@^1.9.3:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tunnel-agent@^0.6.0:
version "0.6.0"
@ -9689,7 +9706,7 @@ uuid@^3.1.0, uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
uuid@^7.0.2:
uuid@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==

View File

@ -49,5 +49,6 @@
},
"resolutions": {
"set-value": "^2.0.1"
}
},
"dependencies": {}
}

View File

@ -59,6 +59,8 @@
:onClick="commands.horizontal_rule"
icon="minus"
/>
<menu-legend class="legend-button" />
</div>
</editor-menu-bar>
</template>
@ -66,11 +68,13 @@
<script>
import { EditorMenuBar } from 'tiptap'
import MenuBarButton from './MenuBarButton'
import MenuLegend from './MenuLegend.vue'
export default {
components: {
EditorMenuBar,
MenuBarButton,
MenuLegend,
},
props: {
editor: Object,
@ -78,3 +82,10 @@ export default {
},
}
</script>
<style lang="scss">
.legend-button {
display: inline;
position: relative;
}
</style>

View File

@ -10,7 +10,7 @@ export default {
isActive: Boolean,
icon: String,
label: String,
onClick: Function,
onClick: { type: Function, default: () => {} },
},
}
</script>

View File

@ -0,0 +1,115 @@
<template>
<dropdown :placement="placement" offset="5">
<template #default="{ openMenu, closeMenu }">
<slot name="button">
<menu-bar-button
icon="question-circle"
circle
ghost
class="legend-question-button"
@mouseover.native="openMenu()"
@mouseleave.native="closeMenu()"
/>
</slot>
</template>
<template #popover="" class="legend">
<div class="legend-container">
<div class="legend-header">{{ $t(`editor.legend.legendTitle`) }}</div>
<div
:class="['legend-table', index < legendItems.length - 1 && 'legend-table-split-line']"
v-for="(item, index) in legendItems"
:key="item.name"
>
<div>
<base-button size="small" circle ghost :icon="item.iconName" class="legend-icon">
<span v-if="item.label">{{ item.label }}</span>
</base-button>
<span>{{ $t(item.name) }}</span>
</div>
<span class="tool-shortcut">{{ item.shortcut }}</span>
</div>
</div>
</template>
</dropdown>
</template>
<script>
import Dropdown from '~/components/Dropdown'
import MenuBarButton from './MenuBarButton'
export default {
components: {
Dropdown,
MenuBarButton,
},
props: {
placement: { type: String, default: 'bottom-start' },
},
data() {
return {
legendItems: [
{ iconName: 'bold', name: `editor.legend.bold`, shortcut: 'ctrl + b' },
{ iconName: 'italic', name: `editor.legend.italic`, shortcut: 'ctrl + i' },
{ iconName: 'underline', name: `editor.legend.underline`, shortcut: 'ctrl + u' },
{ iconName: 'link', name: `editor.legend.link`, shortcut: '' },
{ iconName: 'paragraph', name: `editor.legend.paragraph`, shortcut: '' },
{ label: 'H3', name: `editor.legend.heading3`, shortcut: '### + space' },
{ label: 'H4', name: `editor.legend.heading4`, shortcut: '#### + space' },
{ iconName: 'list-ul', name: `editor.legend.unorderedList`, shortcut: '* + space' },
{ iconName: 'list-ol', name: `editor.legend.orderedList`, shortcut: '1. + space' },
{ iconName: 'quote-right', name: `editor.legend.quote`, shortcut: '> + space' },
{ iconName: 'minus', name: `editor.legend.ruler`, shortcut: '---' },
],
}
},
}
</script>
<style lang="scss">
.legend-question-button {
color: $color-neutral-40;
font-size: 1.2rem !important;
}
.legend-question-button:hover {
background: none !important;
color: $color-neutral-40 !important;
}
.legend-question-button:focus {
outline: none !important;
}
.legend {
padding: 0rem;
border: 1px solid #e5e3e8;
}
.legend-container {
display: flex;
width: 18rem !important;
flex-direction: column;
}
.legend-header {
margin-bottom: 0.5em;
text-align: center;
}
.legend-table {
display: grid;
align-items: center;
grid-template-columns: 1fr 1fr;
padding: 0.2em;
}
.legend-table-split-line {
border-bottom: 0.5px solid grey;
}
.legend-table > div {
display: flex;
align-items: center;
}
.tool-shortcut {
padding-left: 2rem;
}
.legend-icon {
pointer-events: none;
margin-right: 1rem;
}
</style>

View File

@ -313,6 +313,20 @@
"addLetter": "Tippe einen Buchstaben",
"noHashtagsFound": "Keine Hashtags gefunden"
},
"legend": {
"bold": "Fett",
"heading3": "Überschrift 3",
"heading4": "Überschrift 4",
"italic": "Kursiv",
"legendTitle": "Tastaturkürzel und Markdown-Code",
"link": "Verlinkung",
"orderedList": "Geordnete Liste",
"paragraph": "Absatz",
"quote": "Zitat",
"ruler": "Linie",
"underline": "Unterstrichen",
"unorderedList": "Ungeordnete Liste"
},
"mention": {
"noUsersFound": "Keine Benutzer gefunden"
},

View File

@ -313,6 +313,20 @@
"addLetter": "Type a letter",
"noHashtagsFound": "No hashtags found"
},
"legend": {
"bold": "Bold",
"heading3": "Heading 3",
"heading4": "Heading 4",
"italic": "Italic",
"legendTitle": "Keyboard shortcuts and markdown code",
"link": "Link",
"orderedList": "Ordered list",
"paragraph": "Paragraph",
"quote": "Quote",
"ruler": "Ruler",
"underline": "Underline",
"unorderedList": "Unordered list"
},
"mention": {
"noUsersFound": "No users found"
},

View File

@ -259,6 +259,20 @@
"addLetter": "Введите букву",
"noHashtagsFound": "Хэштеги не найдены"
},
"legend": {
"bold": "Полужирный",
"heading3": "Заголовок 3",
"heading4": "Заголовок 4",
"italic": "Курсив",
"legendTitle": "Клавиатурные сокращения и код разметки",
"link": "Ссылка",
"orderedList": "Нумерованный список",
"paragraph": "Параграф",
"quote": "Кавычки",
"ruler": "Горизонтальная линия",
"underline": "Подчеркнутый",
"unorderedList": "Маркированный список"
},
"mention": {
"noUsersFound": "Пользователи не найдены"
},

4814
webapp/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -78,7 +78,7 @@
"cross-env": "~7.0.2",
"date-fns": "2.12.0",
"express": "~4.17.1",
"graphql": "~14.6.0",
"graphql": "~14.7.0",
"intersection-observer": "^0.12.0",
"jsonwebtoken": "~8.5.1",
"linkify-it": "~2.2.0",
@ -133,7 +133,7 @@
"eslint-plugin-jest": "~24.1.3",
"eslint-plugin-node": "~11.1.0",
"eslint-plugin-prettier": "~3.1.4",
"eslint-plugin-promise": "~4.2.1",
"eslint-plugin-promise": "~4.3.1",
"eslint-plugin-standard": "~5.0.0",
"eslint-plugin-vue": "~6.2.2",
"faker": "^5.1.0",

View File

@ -8016,10 +8016,10 @@ eslint-plugin-prettier@~3.1.4:
dependencies:
prettier-linter-helpers "^1.0.0"
eslint-plugin-promise@~4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a"
integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==
eslint-plugin-promise@~4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45"
integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==
eslint-plugin-standard@~5.0.0:
version "5.0.0"
@ -9349,10 +9349,10 @@ graphql-upload@^8.0.2:
http-errors "^1.7.3"
object-path "^0.11.4"
"graphql@14.0.2 - 14.2.0 || ^14.3.1", graphql@^14.5.8, graphql@~14.6.0:
version "14.6.0"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.6.0.tgz#57822297111e874ea12f5cd4419616930cd83e49"
integrity sha512-VKzfvHEKybTKjQVpTFrA5yUq2S9ihcZvfJAtsDBBCuV6wauPu1xl/f9ehgVf0FcEJJs4vz6ysb/ZMkGigQZseg==
"graphql@14.0.2 - 14.2.0 || ^14.3.1", graphql@^14.5.8, graphql@~14.7.0:
version "14.7.0"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.7.0.tgz#7fa79a80a69be4a31c27dda824dc04dac2035a72"
integrity sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA==
dependencies:
iterall "^1.2.2"
@ -10670,16 +10670,11 @@ istanbul-reports@^3.0.2:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
iterall@^1.1.3, iterall@^1.2.1:
iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2:
version "1.3.0"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea"
integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==
iterall@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"
integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==
izitoast@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/izitoast/-/izitoast-1.4.0.tgz#1aa4e3408b7159fba743506af66d8be54fd929fb"