remove all files
13
.github/ISSUE_TEMPLATE.md
vendored
@ -1,13 +0,0 @@
|
|||||||
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Please take a look at the issue templates at https://github.com/[ORGA/USER]/[REPO]/issues/new/choose
|
|
||||||
before submitting a new issue. Following one of the issue templates will ensure maintainers can route your request efficiently.
|
|
||||||
|
|
||||||
Thanks!
|
|
||||||
-->
|
|
||||||
|
|
||||||
## 💬 Issue
|
|
||||||
<!-- Describe your Issue in detail. -->
|
|
||||||
|
|
||||||
<!-- Attach screenshots and drawings if needed. -->
|
|
||||||
10
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🐛 Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
labels: bug
|
|
||||||
title: 🐛 [Bug]
|
|
||||||
---
|
|
||||||
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
|
|
||||||
|
|
||||||
## 🐛 Bugreport
|
|
||||||
<!-- 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.-->
|
|
||||||
10
.github/ISSUE_TEMPLATE/devops_ticket.md
vendored
@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
name: 💥 DevOps ticket
|
|
||||||
about: Help us manage our deployed Software.
|
|
||||||
labels: devops
|
|
||||||
title: 💥 [DevOps]
|
|
||||||
---
|
|
||||||
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
|
|
||||||
|
|
||||||
## 💥 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.-->
|
|
||||||
13
.github/ISSUE_TEMPLATE/epic.md
vendored
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🌟 Epic
|
|
||||||
about: Define a big development Step
|
|
||||||
labels: epic
|
|
||||||
title: 🌟 [EPIC]
|
|
||||||
---
|
|
||||||
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
|
|
||||||
|
|
||||||
<!-- THIS ISSUE-TYPE IS NOT FOR YOU! -->
|
|
||||||
<!-- Proceed only if you know what you are doing - have a chat with Project's Team first -->
|
|
||||||
|
|
||||||
## 🌟 EPIC
|
|
||||||
<!-- Describe your Epic in detail. Include screenshots and drawings -->
|
|
||||||
10
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🚀 Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
labels: feature
|
|
||||||
title: 🚀 [Feature]
|
|
||||||
---
|
|
||||||
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
|
|
||||||
|
|
||||||
## 🚀 Feature
|
|
||||||
<!-- Give a short summary of the Feature. Use Screenshots if you want. -->
|
|
||||||
13
.github/ISSUE_TEMPLATE/question.md
vendored
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
name: 💬 Question
|
|
||||||
about: If you need help understanding our Software.
|
|
||||||
labels: question
|
|
||||||
title: 💬 [Question]
|
|
||||||
---
|
|
||||||
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
|
|
||||||
|
|
||||||
<!-- Question the project's team -->
|
|
||||||
<!-- If you need an answer right away, consider to take other means of communication with the project's team -->
|
|
||||||
|
|
||||||
## 💬 Question
|
|
||||||
<!-- Describe your Question in detail. Include screenshots and drawings if needed. -->
|
|
||||||
10
.github/ISSUE_TEMPLATE/refactor_ticket.md
vendored
@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🔧 Refactor ticket
|
|
||||||
about: Help us improve our code by refactoring it.
|
|
||||||
labels: refactor
|
|
||||||
title: 🔧 [Refactor]
|
|
||||||
---
|
|
||||||
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
|
|
||||||
|
|
||||||
## 🔧 Refactor 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.-->
|
|
||||||
13
.github/ISSUE_TEMPLATE/release.md
vendored
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🎂 Release
|
|
||||||
about: Define a Release
|
|
||||||
labels: release
|
|
||||||
title: 🎂 [RELEASE]
|
|
||||||
---
|
|
||||||
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
|
|
||||||
|
|
||||||
<!-- THIS ISSUE-TYPE IS NOT FOR YOU! -->
|
|
||||||
<!-- Proceed only if you know what you are doing - have a chat with Project's Team first -->
|
|
||||||
|
|
||||||
## 🎂 RELEASE
|
|
||||||
<!-- Describe your Release in detail. Include screenshots and drawings -->
|
|
||||||
15
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,15 +0,0 @@
|
|||||||
<!-- You can find the latest issue templates here https://github.com/ulfgebhardt/issue-templates -->
|
|
||||||
|
|
||||||
## 🍰 Pullrequest
|
|
||||||
<!-- Describe the Pullrequest. Use Screenshots if possible. -->
|
|
||||||
|
|
||||||
### Issues
|
|
||||||
<!-- Which Issues does this fix, which are related?
|
|
||||||
- fixes #XXX
|
|
||||||
- relates #XXX
|
|
||||||
-->
|
|
||||||
- None
|
|
||||||
|
|
||||||
### Todo
|
|
||||||
<!-- In case some parts are still missing, list them here. -->
|
|
||||||
- [X] None
|
|
||||||
69
.github/workflows/lint_pr.yml
vendored
@ -1,69 +0,0 @@
|
|||||||
name: "lint pull request CI"
|
|
||||||
|
|
||||||
on:
|
|
||||||
#pull_request:
|
|
||||||
pull_request_target:
|
|
||||||
types:
|
|
||||||
- opened
|
|
||||||
- edited
|
|
||||||
- synchronize
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
main:
|
|
||||||
name: Validate PR title
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: amannn/action-semantic-pull-request@v5
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
# Configure which types are allowed (newline delimited).
|
|
||||||
# Default: https://github.com/commitizen/conventional-commit-types
|
|
||||||
#types: |
|
|
||||||
# fix
|
|
||||||
# feat
|
|
||||||
# Configure which scopes are allowed (newline delimited).
|
|
||||||
scopes: |
|
|
||||||
content
|
|
||||||
workflow
|
|
||||||
other
|
|
||||||
# Configure that a scope must always be provided.
|
|
||||||
requireScope: true
|
|
||||||
# Configure which scopes (newline delimited) are disallowed in PR
|
|
||||||
# titles. For instance by setting # the value below, `chore(release):
|
|
||||||
# ...` and `ci(e2e,release): ...` will be rejected.
|
|
||||||
#disallowScopes: |
|
|
||||||
# release
|
|
||||||
# Configure additional validation for the subject based on a regex.
|
|
||||||
# This example ensures the subject doesn't start with an uppercase character.
|
|
||||||
subjectPattern: ^(?![A-Z]).+$
|
|
||||||
# If `subjectPattern` is configured, you can use this property to override
|
|
||||||
# the default error message that is shown when the pattern doesn't match.
|
|
||||||
# The variables `subject` and `title` can be used within the message.
|
|
||||||
subjectPatternError: |
|
|
||||||
The subject "{subject}" found in the pull request title "{title}"
|
|
||||||
didn't match the configured pattern. Please ensure that the subject
|
|
||||||
doesn't start with an uppercase character.
|
|
||||||
# If you use GitHub Enterprise, you can set this to the URL of your server
|
|
||||||
#githubBaseUrl: https://github.myorg.com/api/v3
|
|
||||||
# If the PR contains one of these labels (newline delimited), the
|
|
||||||
# validation is skipped.
|
|
||||||
# If you want to rerun the validation when labels change, you might want
|
|
||||||
# to use the `labeled` and `unlabeled` event triggers in your workflow.
|
|
||||||
#ignoreLabels: |
|
|
||||||
# bot
|
|
||||||
# ignore-semantic-pull-request
|
|
||||||
# If you're using a format for the PR title that differs from the traditional Conventional
|
|
||||||
# Commits spec, you can use these options to customize the parsing of the type, scope and
|
|
||||||
# subject. The `headerPattern` should contain a regex where the capturing groups in parentheses
|
|
||||||
# correspond to the parts listed in `headerPatternCorrespondence`.
|
|
||||||
# See: https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-commits-parser#headerpattern
|
|
||||||
headerPattern: '^(\w*)(?:\(([\w$.\-*/ ]*)\))?: (.*)$'
|
|
||||||
headerPatternCorrespondence: type, scope, subject
|
|
||||||
# For work-in-progress PRs you can typically use draft pull requests
|
|
||||||
# from GitHub. However, private repositories on the free plan don't have
|
|
||||||
# this option and therefore this action allows you to opt-in to using the
|
|
||||||
# special "[WIP]" prefix to indicate this state. This will avoid the
|
|
||||||
# validation of the PR title and the pull request checks remain pending.
|
|
||||||
# Note that a second check will be reported if this is enabled.
|
|
||||||
wip: true
|
|
||||||
22
.github/workflows/test-build.yml
vendored
@ -1,22 +0,0 @@
|
|||||||
name: build test CI
|
|
||||||
|
|
||||||
on: push
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-test:
|
|
||||||
name: Build Test
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Setup Node 19
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: '19'
|
|
||||||
|
|
||||||
- name: npm-install
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: npm-build
|
|
||||||
run: npm run build
|
|
||||||
22
.github/workflows/test-lint.yml
vendored
@ -1,22 +0,0 @@
|
|||||||
name: lint test CI
|
|
||||||
|
|
||||||
on: push
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-test:
|
|
||||||
name: Lint Test
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Setup Node 19
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: '19'
|
|
||||||
|
|
||||||
- name: npm-install
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: npm-test
|
|
||||||
run: npm test
|
|
||||||
28
.github/workflows/vuepress-deploy.yml
vendored
@ -1,28 +0,0 @@
|
|||||||
name: Build and Deploy
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@master
|
|
||||||
|
|
||||||
- name: Setup Node 19
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 19
|
|
||||||
|
|
||||||
- name: vuepress-deploy
|
|
||||||
uses: jenkey2011/vuepress-deploy@master
|
|
||||||
env:
|
|
||||||
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
|
|
||||||
TARGET_REPO: Ocelot-Social-Community/ocelot.social
|
|
||||||
TARGET_BRANCH: gh-pages
|
|
||||||
BUILD_SCRIPT: npm install && npm run build-legacy
|
|
||||||
BUILD_DIR: docs/.vuepress/dist
|
|
||||||
CNAME: https://www.ocelot.social
|
|
||||||
2
.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
/node_modules/
|
|
||||||
/docs/.vuepress/dist/
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
rules: {
|
|
||||||
'no-todo': true,
|
|
||||||
'no-start-duplicated-conjunction': {
|
|
||||||
interval : 2, // interval of sentences
|
|
||||||
},
|
|
||||||
/*'max-comma': {
|
|
||||||
max : 4,
|
|
||||||
},*/
|
|
||||||
/*'no-dead-link': {
|
|
||||||
checkRelative: true,
|
|
||||||
baseURI: null,
|
|
||||||
ignore: ['http://localhost*'],
|
|
||||||
preferGET: [],
|
|
||||||
ignoreRedirects: false,
|
|
||||||
retry: 3,
|
|
||||||
userAgent: 'textlint-rule-no-dead-link/1.0',
|
|
||||||
maxRetryTime: 10,
|
|
||||||
maxRetryAfterTime: 90
|
|
||||||
},*/
|
|
||||||
'no-empty-section': true,
|
|
||||||
'textlint-rule-no-empty-element': true,
|
|
||||||
'period-in-list-item': true,
|
|
||||||
'@textlint-rule/no-unmatched-pair': true,
|
|
||||||
'no-zero-width-spaces': true,
|
|
||||||
'doubled-spaces': true,
|
|
||||||
'common-misspellings': {
|
|
||||||
// Misspellings to be ignored (case-insensitive)
|
|
||||||
ignore: [],
|
|
||||||
},
|
|
||||||
/*'write-good': {
|
|
||||||
passive: false,
|
|
||||||
thereIs: false
|
|
||||||
},*/
|
|
||||||
'apostrophe': true,
|
|
||||||
},
|
|
||||||
filters: {
|
|
||||||
comments: true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
21
LICENSE
@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2023 Ocelot.Social Community
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
51
README.md
@ -1,51 +0,0 @@
|
|||||||
# ocelot.social
|
|
||||||
|
|
||||||
This repository contains the https://www.ocelot.social Website utilizing `vuepress` to generate it.
|
|
||||||
|
|
||||||
## Software requirements
|
|
||||||
|
|
||||||
This package requires:
|
|
||||||
- [nodejs](https://github.com/nodejs/node)
|
|
||||||
- [npm](https://github.com/npm/cli)
|
|
||||||
|
|
||||||
## Techstack
|
|
||||||
|
|
||||||
This package uses:
|
|
||||||
- [vuepress](https://github.com/vuejs/vuepress)
|
|
||||||
- [vuepress-theme-book](https://github.com/cyrilf/vuepress-theme-book)
|
|
||||||
- [vuepress-deploy](https://github.com/jenkey2011/vuepress-deploy)
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
How to use this package
|
|
||||||
|
|
||||||
### Build
|
|
||||||
|
|
||||||
Build the static files of the website which then can be found under `docs/.vuepress/dist/`.
|
|
||||||
```
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### Dev
|
|
||||||
|
|
||||||
Bring up a development environment with hot reloading which can be reached under http://localhost:8080/
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Test
|
|
||||||
|
|
||||||
Run the tests to ensure everything is working as expected
|
|
||||||
|
|
||||||
```
|
|
||||||
npm test
|
|
||||||
```
|
|
||||||
|
|
||||||
## How it works
|
|
||||||
|
|
||||||
This repository utilizes `vuepress-deploy` to automatically deploy the current `master` branch to github pages.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
A Pullrequest-Review-Workflow is applied to get changes into the `master`. From there on an automatic github workflow script utilizing `vuepress-deploy` is taking over. The vuepress page is built and force-pushed to the `gh-pages` branch, which in turn is then deployed on the github pages infrastructure and bound to the web address [ocelot.social](https://www.ocelot.social).
|
|
||||||
@ -1,70 +0,0 @@
|
|||||||
const path = require('path')
|
|
||||||
module.exports = {
|
|
||||||
title: 'Ocelot Social',
|
|
||||||
description: 'ocelot.social is free and open source software program code to run social networks. Its development is supported by a community of programmers and interested network operators.',
|
|
||||||
head: [
|
|
||||||
['meta', {name: 'viewport', content: 'width=device-width,initial-scale=1'}]
|
|
||||||
],
|
|
||||||
theme: 'vuepress-theme-book',
|
|
||||||
themeConfig: {
|
|
||||||
logo: "/logo.svg",
|
|
||||||
searchPlaceholder: "Search...",
|
|
||||||
lastUpdated: "Last Updated",
|
|
||||||
docsRepo: "https://github.com/Ocelot-Social-Community/ocelot.social/",
|
|
||||||
docsDir: "docs",
|
|
||||||
editLinks: true,
|
|
||||||
editLinkText: 'Edit this page on Github',
|
|
||||||
nav: [
|
|
||||||
{ text: 'Ocelot.Social', link: '/' },
|
|
||||||
{
|
|
||||||
text: 'Github',
|
|
||||||
link:
|
|
||||||
'https://github.com/Ocelot-Social-Community'
|
|
||||||
},
|
|
||||||
],
|
|
||||||
sidebar: {
|
|
||||||
'/': [
|
|
||||||
{
|
|
||||||
title: '',
|
|
||||||
collapsable: false,
|
|
||||||
sidebarDepth: 0,
|
|
||||||
children: [
|
|
||||||
['/', 'Ocelot.Social'],
|
|
||||||
['/code-of-conduct', 'Code of Conduct'],
|
|
||||||
['/contributing', 'Contributing'],
|
|
||||||
['/feature-specification', 'Feature Specification'],
|
|
||||||
['/license', 'License']
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Tech',
|
|
||||||
collapsable: true,
|
|
||||||
sidebarDepth: 0,
|
|
||||||
children: [
|
|
||||||
['/tech/neo4j', 'Neo4J'],
|
|
||||||
['/tech/backend', 'Backend'],
|
|
||||||
['/tech/webapp', 'WebApp']
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Testing',
|
|
||||||
collapsable: true,
|
|
||||||
sidebarDepth: 0,
|
|
||||||
children: [
|
|
||||||
['test/', 'Testing'],
|
|
||||||
['/test/cypress', 'End-To-End Tests'],
|
|
||||||
['/test/webapp', 'Frontend Tests'],
|
|
||||||
['/test/backend', 'Backend Tests']
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
},
|
|
||||||
configureWebpack: {
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
'@images': path.resolve(__dirname, '../images')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 28 KiB |
@ -1,44 +0,0 @@
|
|||||||
# Contributor Covenant Code of Conduct
|
|
||||||
|
|
||||||
## Our Pledge
|
|
||||||
|
|
||||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
|
||||||
|
|
||||||
## Our Standards
|
|
||||||
|
|
||||||
Examples of behavior that contributes to creating a positive environment include:
|
|
||||||
|
|
||||||
* Using welcoming and inclusive language
|
|
||||||
* Being respectful of differing viewpoints and experiences
|
|
||||||
* Gracefully accepting constructive criticism
|
|
||||||
* Focusing on what is best for the community
|
|
||||||
* Showing empathy towards other community members
|
|
||||||
|
|
||||||
Examples of unacceptable behavior by participants include:
|
|
||||||
|
|
||||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
|
||||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
|
||||||
* Public or private harassment
|
|
||||||
* Publishing others’ private information, such as a physical or electronic address, without explicit permission
|
|
||||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
|
||||||
|
|
||||||
## Our Responsibilities
|
|
||||||
|
|
||||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
|
||||||
|
|
||||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
|
||||||
|
|
||||||
## Enforcement
|
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at devops@ocelot.social. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
|
||||||
|
|
||||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project’s leadership.
|
|
||||||
|
|
||||||
## Attribution
|
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.4, available at [http://contributor-covenant.org/version/1/4](http://contributor-covenant.org/version/1/4/)
|
|
||||||
|
|
||||||
@ -1,234 +0,0 @@
|
|||||||
# CONTRIBUTING
|
|
||||||
|
|
||||||
Thank you so much for thinking of contributing to the [ocelot.social](https://ocelot.social) project! It’s awesome you’re here, we really appreciate it. :-\)
|
|
||||||
|
|
||||||
## Getting Set Up
|
|
||||||
|
|
||||||
Instructions for how to install all the necessary software and some code guidelines can be found in our main [Readme](/README.md) or in our [documentation](/SUMMARY.md).
|
|
||||||
|
|
||||||
To get you started we recommend that you join forces with a regular contributor. Please join [our Discord instance](https://discord.gg/AJSX9DCSUA) to chat with developers or just get in touch directly on an issue on either [Github](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues) or [Zenhub](https://app.zenhub.com/workspaces/ocelotsocial-5fb21ff922cb410015dd6535/board?filterLogic=any&repos=301151089):
|
|
||||||
|
|
||||||
We also can have pair programming sessions for you! We feel this is often the best way to get to know both the project and the team. Most developers are also available for spontaneous sessions.
|
|
||||||
|
|
||||||
## Development Flow
|
|
||||||
|
|
||||||
We operate in two week sprints that are planned, estimated and prioritised on [Zenhub](https://app.zenhub.com/workspaces/ocelotsocial-5fb21ff922cb410015dd6535/board?filterLogic=any&repos=301151089). All issues are also linked to and synced with [Github](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues). Look for the `good first issue` label if you’re not sure where to start!
|
|
||||||
|
|
||||||
We try to discuss all questions directly related to a feature or bug in the respective issue, in order to preserve it for the future and for other developers. We use [Discord](https://discord.gg/AJSX9DCSUA) for real-time communication.
|
|
||||||
|
|
||||||
This is how we solve bugs and implement features, step by step:
|
|
||||||
|
|
||||||
1. We find an issue we want to work on, usually during the sprint planning but as an open source contributor this can happen at any time
|
|
||||||
2. We communicate with the team to see if the issue is still available. (When you comment on an issue but don’t get an answer there within 1-2 days try to mention @Ocelot-Social-Community/core-team to make sure we check in.)
|
|
||||||
3. We make sure we understand the issue in detail – what problem is it solving and how should it be implemented?
|
|
||||||
4. We assign ourselves to the issue and move it to `In Progress` on [Zenhub](https://app.zenhub.com/workspaces/ocelotsocial-5fb21ff922cb410015dd6535/board?filterLogic=any&repos=301151089)
|
|
||||||
5. We start working on it in a `new branch` and open a `pull request` prefixed with `[WIP]` (work in progress) to which we regularly push our changes
|
|
||||||
6. When questions come up we clarify them with the team (directly in the issue on Github)
|
|
||||||
7. When we are happy with our work and our PR is passing all tests we remove the `[WIP]` from the PR description and ask for reviews (if you’re not sure who to ask there is @Ocelot-Social-Community/core-team which pings all core developers)
|
|
||||||
8. We then incorporate the suggestions from the reviews into our work and once it has been approved it can be merged into master!
|
|
||||||
|
|
||||||
Every pull request needs to:
|
|
||||||
|
|
||||||
* fix an issue (if there is something you want to work on but there is no issue for it, create one first and discuss it with the team)
|
|
||||||
* include tests for the code that is added or changed
|
|
||||||
* pass all tests (linter, backend, webapp, code coverage, end-to-end)
|
|
||||||
* be approved by at least 1 developer who is not the owner of the PR (when more than 10 files were changed it needs 2 approvals)
|
|
||||||
|
|
||||||
## Contribution Flow For Open Source Contributors
|
|
||||||
|
|
||||||
See [contributing in main README.md](/README.md#contributing)
|
|
||||||
|
|
||||||
## The Team
|
|
||||||
|
|
||||||
There are many volunteers all around the world helping us build this network and without their contributions we wouldn’t be where we are today. Big thank you to all of you!
|
|
||||||
|
|
||||||
You can talk to our core team on [Discord](https://discord.gg/AJSX9DCSUA). And on Github you will mostly run into our core developers:
|
|
||||||
|
|
||||||
* Ulf (@ulfgebhardt)
|
|
||||||
* Moriz (@Mogge)
|
|
||||||
* Wolle (@Tirokk)
|
|
||||||
* Alex (@ogerly)
|
|
||||||
|
|
||||||
<!-- * Robert (@roschaefer)
|
|
||||||
* Matt (@mattwr18)
|
|
||||||
* Alina (@alina-beck)
|
|
||||||
* Martin (@datenbrei), our head of IT
|
|
||||||
* and sometimes Dennis (@DennisHack), the founder of Human Connection -->
|
|
||||||
|
|
||||||
## Meetings and Pair Programming Sessions
|
|
||||||
|
|
||||||
Times below refer to **German Time** – that’s CET (GMT+1) in winter and CEST (GMT+2) in summer – because most ocelot.social Community core team members are living in Germany.
|
|
||||||
|
|
||||||
Daily standup
|
|
||||||
|
|
||||||
* every Monday–Thursday 11:30 am (german time see above 👆🏼)
|
|
||||||
* in our [Discord](https://discord.gg/AJSX9DCSUA) `Office Cube`
|
|
||||||
* all contributors welcome!
|
|
||||||
* everybody shares what they are working on and asks for help if they are blocked
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Regular pair programming sessions
|
|
||||||
|
|
||||||
* every Monday, Wednesday and Thursday 15:00
|
|
||||||
* the link will be posted in the [Discord chat](https://discord.gg/AJSX9DCSUA) and on the [Agile Ventures website](https://www.agileventures.org/events?utf8=%E2%9C%93&project_id=220&commit=Filter+by+Project)
|
|
||||||
* all contributors welcome!
|
|
||||||
* we team up and work on an issue together (often using Visual Studio live sharing sessions)
|
|
||||||
|
|
||||||
Open-Source Community Meeting
|
|
||||||
|
|
||||||
* bi-weekly on Mondays 13:00 (when there is no sprint retrospective)
|
|
||||||
* the link will be posted in the [Discord chat](https://discord.gg/AJSX9DCSUA) and on the [Agile Ventures website](https://www.agileventures.org/events?utf8=%E2%9C%93&project_id=220&commit=Filter+by+Project)
|
|
||||||
* all contributors welcome!
|
|
||||||
|
|
||||||
Meet the team
|
|
||||||
|
|
||||||
* every Monday 21:00 (at the moment only in German)
|
|
||||||
* details here https://human-connection.org/veranstaltungen/
|
|
||||||
* via this [zoom link](https://zoom.us/j/936943532)
|
|
||||||
* all contributors and users of the network welcome!
|
|
||||||
* users of the network chat with the Human Connection team and discuss current questions and issues
|
|
||||||
|
|
||||||
Sprint planning
|
|
||||||
|
|
||||||
* bi-weekly on Tuesday 13:00
|
|
||||||
* via this [zoom link](https://zoom.us/j/7743582385)
|
|
||||||
* all contributors welcome (recommended for those who want to work on an issue in this sprint)
|
|
||||||
* we select and prioritise the issues we will work on in the following two weeks
|
|
||||||
|
|
||||||
Sprint retrospective
|
|
||||||
|
|
||||||
* bi-weekly on Monday 13:00
|
|
||||||
* via this [zoom link](https://zoom.us/j/7743582385)
|
|
||||||
* all contributors welcome (most interesting for those who participated in the sprint)
|
|
||||||
* we review the past sprint and talk about what went well and what we could improve
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Philosophy
|
|
||||||
|
|
||||||
We practice [collective code ownership](http://www.extremeprogramming.org/rules/collective.html) rather than strong code ownership, which means that:
|
|
||||||
|
|
||||||
* developers can make contributions to other people’s PRs (after checking in with them)
|
|
||||||
* we avoid blocking because someone else isn’t working, so we sometimes take over PRs from other developers
|
|
||||||
* everyone should always push their code to branches so others can see it
|
|
||||||
|
|
||||||
We believe in open source contributions as a learning experience – everyone is welcome to join our team of volunteers and to contribute to the project, no matter their background or level of experience. To support your learning experience we founded the charity association [busFaktor() e.V.](https://www.busfaktor.org/en).
|
|
||||||
|
|
||||||
We use pair programming sessions as a tool for knowledge sharing. We can learn a lot from each other and only by sharing what we know and overcoming challenges together can we grow as a team and truly own this project collectively.
|
|
||||||
|
|
||||||
As a volunteer you have no commitment except your own self development and your awesomeness by contributing to this free and open-source software project. Cheers to you!
|
|
||||||
|
|
||||||
<!--
|
|
||||||
## Open-Source Bounties
|
|
||||||
|
|
||||||
There are so many good reasons to contribute to ocelot.social
|
|
||||||
|
|
||||||
* You learn state-of-the-art technologies
|
|
||||||
* You build your portfolio
|
|
||||||
* You contribute to a good cause
|
|
||||||
|
|
||||||
Now there is one more good reason: You can receive a small fincancial
|
|
||||||
compensation for your contribution! :tada:
|
|
||||||
|
|
||||||
### How it works
|
|
||||||
|
|
||||||
Before you can benefit from the Open-Source bounty program you **must get one
|
|
||||||
pull request approved and merged for free**. You can choose something really
|
|
||||||
quick and easy. What's important is starting a working relationship with the
|
|
||||||
team, learning the workflow, and understanding this contribution guide. You can
|
|
||||||
filter issues by 'good first issue', to get an idea where to start. Please join
|
|
||||||
our our [Discord community chat](https://discord.gg/AJSX9DCSUA), too.
|
|
||||||
|
|
||||||
You can filter Github issues with label [bounty](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues?q=is%3Aopen+is%3Aissue+label%3Abounty). These issues should have a second label `€<amount>`
|
|
||||||
which indicate their respective financial compensation in Euros.
|
|
||||||
|
|
||||||
You can bill us after your pull request got approved and merged into `master`.
|
|
||||||
Payment methods are up to you: Bank transfer or PayPal is fine for us. Just send
|
|
||||||
us your invoice as .pdf file attached to an E-Mail once you are done.
|
|
||||||
|
|
||||||
Our Open-Source bounty program is a work-in-progress. Based on our future
|
|
||||||
experience we will make changes and improvements. So keep an eye on this
|
|
||||||
contribution guide.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Programming
|
|
||||||
|
|
||||||
### Localization
|
|
||||||
|
|
||||||
#### Quotation Marks
|
|
||||||
|
|
||||||
The following characters are different from the programming quotation mark:
|
|
||||||
|
|
||||||
`"` or `\"`
|
|
||||||
|
|
||||||
Please copy and paste the following quotes for the languages:
|
|
||||||
|
|
||||||
* de: „Dies ist ein Beispielsatz.“
|
|
||||||
* en: “This is a sample sentence.”
|
|
||||||
* See <https://grammar.collinsdictionary.com/easy-learning/when-do-you-use-quotation-marks-or-in-english>
|
|
||||||
|
|
||||||
## Docker – More Closely
|
|
||||||
|
|
||||||
### Apple M1 Platform
|
|
||||||
|
|
||||||
***Attention:** For using Docker commands in Apple M1 environments!*
|
|
||||||
|
|
||||||
#### Environment Variable For Apple M1 Platform
|
|
||||||
|
|
||||||
If you encounter trouble building the docker containers on an Apple M1 chip you can try to explicitly define the target platform docker builds and pulls images for:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# set env variable for your shell
|
|
||||||
$ export DOCKER_DEFAULT_PLATFORM=linux/amd64
|
|
||||||
```
|
|
||||||
|
|
||||||
Or alternatively use a `YAML` docker compose overwrite file with `platform: linux/amd64`.
|
|
||||||
|
|
||||||
### Analyzing Docker Builds
|
|
||||||
|
|
||||||
To analyze a Docker build, there is a wonderful tool called [dive](https://github.com/wagoodman/dive). Please sponsor if you’re using it!
|
|
||||||
|
|
||||||
The `dive build` command is exactly the right one to fulfill what we are looking for.
|
|
||||||
We can use it just like the `docker build` command and get an analysis afterwards.
|
|
||||||
|
|
||||||
So, in our main folder, we use it in the following way:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ dive build --target <layer-name> -t "ocelotsocialnetwork/<app-name>:local-<layer-name>" --build-arg BBUILD_DATE="<build-date>" --build-arg BBUILD_VERSION="<build-version>" --build-arg BBUILD_COMMIT="<build-commit>" <app-folder-name-or-dot>/
|
|
||||||
```
|
|
||||||
|
|
||||||
The build arguments are optional.
|
|
||||||
|
|
||||||
For the specific applications, we use them as follows.
|
|
||||||
|
|
||||||
#### Backend
|
|
||||||
|
|
||||||
##### Production For Backend
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ dive build --target production -t "ocelotsocialnetwork/backend:local-production" backend/
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Development For Backend
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ dive build --target development -t "ocelotsocialnetwork/backend:local-development" backend/
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Webapp
|
|
||||||
|
|
||||||
##### Production For Webapp
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ dive build --target production -t "ocelotsocialnetwork/webapp:local-production" webapp/
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Development For Webapp
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ dive build --target development -t "ocelotsocialnetwork/webapp:local-development" webapp/
|
|
||||||
```
|
|
||||||
@ -1,281 +0,0 @@
|
|||||||
# Network Specification
|
|
||||||
|
|
||||||
ocelot.social is free and open-source social network code that connects information to action and promotes positive local and global change in all areas of life.
|
|
||||||
|
|
||||||
* **Social**: Interact with other people not just by commenting their posts, but by providing **Pro & Contra** arguments, give a **Versus** or ask them by integrated **Chat** or **Let’s Talk**
|
|
||||||
* **Knowledge**: Read articles about interesting topics and find related posts in the **More Info** tab or by **Filtering** based on **Categories** and **Tagging** or by using the **Fulltext Search**
|
|
||||||
* **Action**: Don’t just read about how to make the world a better place, but come into **Action** by following provided suggestions on the **Action** tab provided by other people or **Organisations**
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
The following features will be implemented. This gets done in three steps:
|
|
||||||
|
|
||||||
1. First we will implement a basic feature set and provide a test system to test the basic network functionality
|
|
||||||
2. In a second step we will make our prototype publicly available with an advanced feature set including the technology and organizational structure to drive a bigger public social network
|
|
||||||
3. In a third step all the remaining features will be implemented to build the full product
|
|
||||||
|
|
||||||
### User Account
|
|
||||||
|
|
||||||
[Cucumber Features](https://github.com/Ocelot-Social-Community/Ocelot-Social/tree/master/cypress/integration/user_account)
|
|
||||||
|
|
||||||
* Sign-up
|
|
||||||
* Agree to Data Privacy Statement
|
|
||||||
* Agree to Terms of Service
|
|
||||||
* Login
|
|
||||||
* Logoff
|
|
||||||
* Change User Name
|
|
||||||
* Change Email Address
|
|
||||||
* Change Password
|
|
||||||
* Delete Account
|
|
||||||
* Download User’s Content
|
|
||||||
* GDPR-Information about stored Content
|
|
||||||
* Choosing Interface Language \(e.g. German / English / French\)
|
|
||||||
* Persistent Links
|
|
||||||
|
|
||||||
### User Profile
|
|
||||||
|
|
||||||
[Cucumber Features](https://github.com/Ocelot-Social-Community/Ocelot-Social/tree/master/cypress/integration/user_profile)
|
|
||||||
|
|
||||||
* Upload and Change Avatar
|
|
||||||
* Upload and Change Profile Picture
|
|
||||||
* Edit Social Media Accounts
|
|
||||||
* Edit Locale information
|
|
||||||
* Show and delete Bookmarks \(later\)
|
|
||||||
* Show Posts of a specific User
|
|
||||||
* Show Comments of a specific User
|
|
||||||
|
|
||||||
### Dashboard
|
|
||||||
|
|
||||||
[Clickdummy](https://preview.uxpin.com/24a2ab8adcd84f9a763d87ed27251351225e0ecd#/pages/99768919/simulate/sitemap?mode=i)
|
|
||||||
|
|
||||||
* Show Link to own Profile
|
|
||||||
* Show Friends Widget
|
|
||||||
* Show Favorites Widget
|
|
||||||
* Show Get Friends Widget
|
|
||||||
* Show popular Hashtags Widget
|
|
||||||
* Show Mini-Statistics Widget \(all time\)
|
|
||||||
* Show Chatrooms Widget
|
|
||||||
* Show List of Let’s Talk requests with online status of requesting people
|
|
||||||
|
|
||||||
### Posts
|
|
||||||
|
|
||||||
[Cucumber Features](https://github.com/Ocelot-Social-Community/Ocelot-Social/tree/master/cypress/integration/post)
|
|
||||||
|
|
||||||
* Creating Posts
|
|
||||||
* Persistent Links
|
|
||||||
* Upload Teaser Picture for Post
|
|
||||||
* Upload additional Pictures
|
|
||||||
* Editing Title and Content
|
|
||||||
* Allow embedded Conten \(Videos, Sound, ...\)
|
|
||||||
* Choosing a Category
|
|
||||||
* Adding Tags
|
|
||||||
* Choosing Language \(e.g. German / English / French\)
|
|
||||||
* Choosing Visibility \(Public / Friends / Private\)
|
|
||||||
* Shout Button for Posts
|
|
||||||
* Bookmark Posts \(later\)
|
|
||||||
* Optionally provide Let’s Talk Feature
|
|
||||||
* Optionally provide Commenting Feature
|
|
||||||
|
|
||||||
### Comments
|
|
||||||
|
|
||||||
* Creating Comments
|
|
||||||
* Deleting Comments
|
|
||||||
* Editing Comments
|
|
||||||
* Upvote comments of others
|
|
||||||
|
|
||||||
### Notifications
|
|
||||||
|
|
||||||
[Cucumber features](https://github.com/Ocelot-Social-Community/Ocelot-Social/tree/master/cypress/integration/notifications)
|
|
||||||
|
|
||||||
* User @-mentionings
|
|
||||||
* Notify authors for comments
|
|
||||||
* Administrative notifications to all users
|
|
||||||
|
|
||||||
### Contribution List
|
|
||||||
|
|
||||||
* Show Posts by Tiles
|
|
||||||
* Show Posts as List
|
|
||||||
* Filter by Category \(Health and Wellbeing, Global Peace & Non-Violence, ...\)
|
|
||||||
* Filter by Mood \(Funny, Happy, Surprised, Cry, Angry, ...\)
|
|
||||||
* Filter by Source \(Connections, Following, Individuals, Non-Profits, ...\)
|
|
||||||
* Filter by Posts & Tools \(Post, Events, CanDos, ...\)
|
|
||||||
* Filter by Format Type \(Text, Pictures, Video, ...\)
|
|
||||||
* Extended Filter \(Continent, Country, Language, ...\)
|
|
||||||
* Sort Posts by Date
|
|
||||||
* Sort Posts by Shouts
|
|
||||||
* Sort Posts by most Comments
|
|
||||||
* Sort Posts by Emoji-Count \(all Types\)
|
|
||||||
|
|
||||||
### Blacklist
|
|
||||||
|
|
||||||
[Video](https://www.youtube.com/watch?v=-uDvvmN8hLQ)
|
|
||||||
|
|
||||||
* Blacklist Users
|
|
||||||
* Blacklist specific Terms
|
|
||||||
* Blacklist Tags
|
|
||||||
* Switch on/off Adult Content
|
|
||||||
|
|
||||||
### Search
|
|
||||||
|
|
||||||
[Cucumber Features](https://github.com/Ocelot-Social-Community/Ocelot-Social/tree/master/cypress/integration/search)
|
|
||||||
|
|
||||||
* Search for Categories
|
|
||||||
* Search for Tags
|
|
||||||
* Fulltext Search
|
|
||||||
|
|
||||||
### CanDos
|
|
||||||
|
|
||||||
* Creating CanDos
|
|
||||||
* Editing Title and Content
|
|
||||||
* Choosing a Category
|
|
||||||
* Adding Tags
|
|
||||||
* Choosing Language \(e.g. German / English / French\)
|
|
||||||
* Choosing Visibility \(Public / Friends / Private\)
|
|
||||||
* Choosing Difficulty
|
|
||||||
* Editing Why - why should you do this
|
|
||||||
* Editing Usefulness - what is it good for
|
|
||||||
|
|
||||||
### Versus \(interaction on existing Post\)
|
|
||||||
|
|
||||||
* Create / edit / delete Versus
|
|
||||||
|
|
||||||
### Jobs
|
|
||||||
|
|
||||||
* Create, edit and delete Jobs by an User
|
|
||||||
* Handle Jobs as Part of Projects
|
|
||||||
* Handle Jobs done by Organizations
|
|
||||||
|
|
||||||
### Projects
|
|
||||||
|
|
||||||
* Create, edit and delete Projects
|
|
||||||
* Edit Title and Description for the Project
|
|
||||||
* Set Project Type
|
|
||||||
* Set and Edit Timeline for the Project
|
|
||||||
* Add Media to the Project
|
|
||||||
* Chat about the Project
|
|
||||||
|
|
||||||
### Pro & Contra
|
|
||||||
|
|
||||||
* Create Pro and Con \(2-row\)
|
|
||||||
* Add Arguments on Pro or Con Side
|
|
||||||
* Rate up Arguments
|
|
||||||
* Add Tags
|
|
||||||
* Attach Media
|
|
||||||
|
|
||||||
### Votes
|
|
||||||
|
|
||||||
* Create Votes \(Surveys with two or more Choices\)
|
|
||||||
* Add Title and Description
|
|
||||||
* Let Users vote
|
|
||||||
* Add Tags
|
|
||||||
|
|
||||||
### Bestlist
|
|
||||||
|
|
||||||
* Create Bestlist
|
|
||||||
* Create Votes \(Surveys\)
|
|
||||||
* Add Title and Description
|
|
||||||
* Add Tags
|
|
||||||
* Let Users vote for Best Item
|
|
||||||
* Set Settings \(allow Uploads, allow Links, ...\)
|
|
||||||
|
|
||||||
### Events
|
|
||||||
|
|
||||||
* Create Events
|
|
||||||
* Add Title and Description
|
|
||||||
* Choose Date and Location
|
|
||||||
* Add Tags
|
|
||||||
|
|
||||||
### More Info
|
|
||||||
|
|
||||||
Shows automatically related information for existing post.
|
|
||||||
|
|
||||||
* Show related Posts
|
|
||||||
* Show Pros and Cons
|
|
||||||
* Show Bestlist
|
|
||||||
* Show Votes
|
|
||||||
* Link to corresponding Chatroom
|
|
||||||
|
|
||||||
### Take Action
|
|
||||||
|
|
||||||
Shows automatically related actions for existing post.
|
|
||||||
|
|
||||||
* Show related Organisations
|
|
||||||
* Show related CanDos
|
|
||||||
* Show related Projects
|
|
||||||
* Show related Jobs
|
|
||||||
* Show related Events
|
|
||||||
* Show Map
|
|
||||||
|
|
||||||
### Badges System
|
|
||||||
|
|
||||||
* Importing Badge Information \(CSV\)
|
|
||||||
* Showing Badges
|
|
||||||
* Badge Administration by Admins
|
|
||||||
* Choosing Badges to display by User
|
|
||||||
|
|
||||||
### Chat
|
|
||||||
|
|
||||||
* Basic 1:1 Chat functionality
|
|
||||||
|
|
||||||
### Let’s Talk
|
|
||||||
|
|
||||||
* Request Let’s talk with Author of Post
|
|
||||||
* Requestor can request private or public Let’s Talk
|
|
||||||
* Requestor can choose the Chat format \(Video, Audio, Text\)
|
|
||||||
* Interact with interested People 1:1
|
|
||||||
* Approve request from Requestor
|
|
||||||
|
|
||||||
### Organizations
|
|
||||||
|
|
||||||
* Propose Organizations by users
|
|
||||||
* Set Name and Details
|
|
||||||
* Set Homepage
|
|
||||||
* Set Region
|
|
||||||
* Set Topic
|
|
||||||
* Commit organizations by HC-Org-Team
|
|
||||||
* Panel for Organisation Handling by themselfes
|
|
||||||
* Choose/Mark Users as authorized to manage an Organization
|
|
||||||
|
|
||||||
### Moderation
|
|
||||||
|
|
||||||
[Cucumber Features](https://github.com/Ocelot-Social-Community/Ocelot-Social/tree/master/cypress/integration/moderation)
|
|
||||||
|
|
||||||
* Report Button for users for doubtful Content
|
|
||||||
* Moderator Panel
|
|
||||||
* List of reported Content \(later replaced by User-Moderation\)
|
|
||||||
* Mark verified Users as Moderators
|
|
||||||
* Show Posts to be moderated highlighted to User-Moderators
|
|
||||||
* Statistics about kinds of reported Content by Time
|
|
||||||
* Statistics about Decisions in Moderation
|
|
||||||
|
|
||||||
### Administration
|
|
||||||
|
|
||||||
[Cucumber Features](https://github.com/Ocelot-Social-Community/Ocelot-Social/tree/master/cypress/integration/administration)
|
|
||||||
|
|
||||||
* Provide Admin-Interface to send Users Invite Code
|
|
||||||
* Static Pages for Data Privacy Statement
|
|
||||||
* Create, edit and delete Announcements
|
|
||||||
* Pin a post to inform users
|
|
||||||
|
|
||||||
### Invitation
|
|
||||||
|
|
||||||
* Allow Users to invite others by Email
|
|
||||||
* Allow Users to register with Invite Code
|
|
||||||
* Double-opt-in by Email
|
|
||||||
|
|
||||||
### Internationalization
|
|
||||||
|
|
||||||
[Cucumber Features](https://github.com/Ocelot-Social-Community/Ocelot-Social/tree/master/cypress/integration/internationalization)
|
|
||||||
|
|
||||||
* Frontend UI
|
|
||||||
* Backend Error Messages
|
|
||||||
|
|
||||||
### Federation
|
|
||||||
|
|
||||||
* Provide Server-Server ActivityPub-API
|
|
||||||
* Provide User-Server Activitypub-API
|
|
||||||
* Receiving public addressed Article and Note Objects
|
|
||||||
* Receiving Like and Follow Activities
|
|
||||||
* Receiving Undo and Delete Activities for Articles and Notes
|
|
||||||
* Serving Webfinger records and Actor Objects
|
|
||||||
* Serving Followers, Following and Outbox collections
|
|
||||||
@ -1,90 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
viewBox="0 0 490.1 105.6" style="enable-background:new 0 0 490.1 105.6;" xml:space="preserve">
|
|
||||||
<style type="text/css">
|
|
||||||
.st0{fill:#F4B960;}
|
|
||||||
.st1{fill:#E66F32;}
|
|
||||||
.st2{fill:#E43C41;}
|
|
||||||
.st3{fill:#BDD041;}
|
|
||||||
.st4{fill:#6DB54C;}
|
|
||||||
.st5{fill:#AEDAE6;}
|
|
||||||
.st6{fill:#56B8DE;}
|
|
||||||
.st7{fill:#00B1D5;}
|
|
||||||
.st8{fill:url(#SVGID_1_);}
|
|
||||||
.st9{fill:#221F1F;}
|
|
||||||
.st10{fill:#FFFFFF;}
|
|
||||||
.st11{fill:#000111;}
|
|
||||||
</style>
|
|
||||||
<title>Browserstack-logo-white</title>
|
|
||||||
<circle class="st0" cx="52.8" cy="52.8" r="52.8"/>
|
|
||||||
<circle class="st1" cx="47.5" cy="47.5" r="47.5"/>
|
|
||||||
<circle class="st2" cx="53.8" cy="41.1" r="41.1"/>
|
|
||||||
<circle class="st3" cx="57.1" cy="44.4" r="37.8"/>
|
|
||||||
<circle class="st4" cx="54.3" cy="47.2" r="35.1"/>
|
|
||||||
<circle class="st5" cx="48.8" cy="41.7" r="29.5"/>
|
|
||||||
<circle class="st6" cx="53.6" cy="36.8" r="24.7"/>
|
|
||||||
<circle class="st7" cx="56.6" cy="39.9" r="21.7"/>
|
|
||||||
<radialGradient id="SVGID_1_" cx="53.45" cy="63.02" r="18.57" gradientTransform="matrix(1 0 0 -1 0 106)" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop offset="0" style="stop-color:#797979"/>
|
|
||||||
<stop offset="1" style="stop-color:#4C4C4C"/>
|
|
||||||
</radialGradient>
|
|
||||||
<circle class="st8" cx="53.5" cy="43" r="18.6"/>
|
|
||||||
<circle class="st9" cx="53.5" cy="43" r="18.6"/>
|
|
||||||
<ellipse transform="matrix(0.4094 -0.9123 0.9123 0.4094 2.8913 76.9251)" class="st10" cx="60.9" cy="36.2" rx="5.7" ry="3.7"/>
|
|
||||||
<path class="st11" d="M122.5,32.6c0-0.3,0.3-0.6,0.6-0.6c0,0,0,0,0.1,0h16.6c9.5,0,13.9,4.4,13.9,11c0.2,3.7-1.8,7.2-5.2,8.8v0.1
|
|
||||||
c3.7,1.5,6.1,5.2,6,9.3c0,8.2-5.6,12.2-15.4,12.2h-16c-0.3,0-0.6-0.2-0.7-0.5c0,0,0,0,0-0.1L122.5,32.6L122.5,32.6z M139.6,49.1
|
|
||||||
c3.9,0,6.4-2.2,6.4-5.4s-2.4-5.5-6.4-5.5h-8.9c-0.2,0-0.4,0.1-0.4,0.3c0,0,0,0,0,0.1v10.2c0,0.2,0.1,0.3,0.3,0.4c0,0,0,0,0.1,0
|
|
||||||
H139.6L139.6,49.1z M130.6,66.9h9.3c4.3,0,6.8-2.3,6.8-5.8s-2.4-5.7-6.7-5.7h-9.3c-0.2,0-0.4,0.1-0.4,0.3c0,0,0,0,0,0.1v10.7
|
|
||||||
C130.3,66.8,130.4,66.9,130.6,66.9C130.6,66.9,130.6,66.9,130.6,66.9L130.6,66.9z"/>
|
|
||||||
<path class="st11" d="M159.9,73.3c-0.3,0-0.6-0.2-0.7-0.5c0,0,0,0,0-0.1V44.6c0-0.3,0.3-0.6,0.6-0.6c0,0,0,0,0.1,0h6
|
|
||||||
c0.3,0,0.6,0.2,0.7,0.5c0,0,0,0,0,0.1v2.5h0.1c1.5-2.2,4.2-3.8,8.2-3.8c2.4,0,4.8,0.8,6.6,2.4c0.3,0.3,0.4,0.5,0.1,0.8l-3.5,4.1
|
|
||||||
c-0.2,0.3-0.6,0.4-0.9,0.2c0,0,0,0-0.1,0c-1.4-0.9-3-1.4-4.7-1.4c-4.1,0-6,2.7-6,7.4v15.9c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0-0.1,0
|
|
||||||
H159.9L159.9,73.3z"/>
|
|
||||||
<path class="st11" d="M182.9,65.8c-0.8-2.3-1.1-4.8-1.1-7.2c-0.1-2.5,0.3-4.9,1.1-7.2c1.8-5.1,6.6-8.1,13.1-8.1s11.2,3,13,8.1
|
|
||||||
c0.8,2.3,1.1,4.8,1.1,7.2c0.1,2.5-0.3,4.9-1.1,7.2c-1.8,5.1-6.6,8.1-13,8.1S184.7,71,182.9,65.8z M201.9,64c0.5-1.7,0.8-3.6,0.7-5.4
|
|
||||||
c0.1-1.8-0.1-3.7-0.7-5.4c-0.9-2.5-3.3-4-5.9-3.8c-2.6-0.2-5.1,1.4-6,3.8c-0.5,1.8-0.8,3.6-0.7,5.4c-0.1,1.8,0.1,3.7,0.7,5.4
|
|
||||||
c0.9,2.5,3.4,4,6,3.8C198.6,68,201,66.5,201.9,64L201.9,64z"/>
|
|
||||||
<path class="st11" d="M241.9,73.3c-0.4,0-0.7-0.3-0.8-0.6L235,53.9h-0.1l-6.2,18.7c-0.1,0.4-0.4,0.6-0.8,0.6h-5.4
|
|
||||||
c-0.4,0-0.7-0.3-0.8-0.6l-10-28.1c-0.1-0.2,0-0.5,0.2-0.6c0.1,0,0.2-0.1,0.3,0h6.3c0.4,0,0.8,0.2,0.9,0.6l6.1,19.3h0.1l6-19.3
|
|
||||||
c0.1-0.4,0.5-0.6,0.9-0.6h4.7c0.4,0,0.7,0.2,0.9,0.6l6.4,19.3h0.1l5.8-19.3c0.1-0.4,0.5-0.7,0.9-0.6h6.3c0.2-0.1,0.5,0.1,0.5,0.3
|
|
||||||
c0,0.1,0,0.2,0,0.3l-10,28.1c-0.1,0.4-0.4,0.6-0.8,0.6L241.9,73.3L241.9,73.3z"/>
|
|
||||||
<path class="st11" d="M259.3,69.3c-0.2-0.2-0.3-0.6-0.1-0.8c0,0,0,0,0.1-0.1l3.7-3.6c0.3-0.2,0.7-0.2,0.9,0c2.6,2.1,5.9,3.3,9.3,3.3
|
|
||||||
c3.9,0,5.9-1.5,5.9-3.5c0-1.8-1.1-2.9-5.2-3.2l-3.4-0.3c-6.4-0.6-9.7-3.6-9.7-8.6c0-5.7,4.4-9.2,12.3-9.2c4.2-0.1,8.4,1.2,11.9,3.6
|
|
||||||
c0.3,0.2,0.3,0.5,0.2,0.8c0,0,0,0,0,0.1l-3.2,3.6c-0.2,0.3-0.6,0.3-0.9,0.1c-2.5-1.5-5.4-2.4-8.3-2.4c-3.1,0-4.8,1.3-4.8,3
|
|
||||||
s1.1,2.7,5.2,3.1l3.4,0.3c6.6,0.6,9.8,3.8,9.8,8.6c0,5.8-4.6,9.9-13.3,9.9C268,74,263.2,72.4,259.3,69.3z"/>
|
|
||||||
<path class="st11" d="M291.2,65.8c-0.8-2.3-1.2-4.7-1.1-7.2c-0.1-2.5,0.3-4.9,1-7.2c1.8-5.1,6.6-8.1,12.9-8.1c6.5,0,11.2,3.1,13,8.1
|
|
||||||
c0.7,2.1,1,4.1,1,8.8c0,0.3-0.3,0.6-0.6,0.6c0,0-0.1,0-0.1,0h-19.5c-0.2,0-0.4,0.1-0.4,0.3c0,0,0,0,0,0.1c0,0.8,0.2,1.5,0.5,2.2
|
|
||||||
c1,2.9,3.5,4.4,7.1,4.4c2.7,0.1,5.4-0.9,7.4-2.8c0.2-0.3,0.7-0.4,1-0.1c0,0,0,0,0,0l3.9,3.2c0.2,0.1,0.3,0.5,0.2,0.7
|
|
||||||
c0,0.1-0.1,0.1-0.1,0.1c-2.7,2.9-7.2,5-13,5C297.8,73.9,293,70.9,291.2,65.8z M310.4,52.8c-0.9-2.4-3.2-3.8-6.2-3.8
|
|
||||||
s-5.4,1.4-6.2,3.8c-0.3,0.8-0.4,1.6-0.4,2.5c0,0.2,0.1,0.3,0.3,0.4c0,0,0,0,0.1,0h12.4c0.2,0,0.4-0.1,0.4-0.3c0,0,0,0,0-0.1
|
|
||||||
C310.8,54.5,310.6,53.6,310.4,52.8L310.4,52.8z"/>
|
|
||||||
<path class="st11" d="M323.6,73.3c-0.3,0-0.6-0.2-0.7-0.5c0,0,0,0,0-0.1V44.6c0-0.3,0.3-0.6,0.6-0.6c0,0,0,0,0.1,0h6
|
|
||||||
c0.3,0,0.6,0.2,0.7,0.5c0,0,0,0,0,0.1v2.5h0.1c1.5-2.2,4.2-3.8,8.2-3.8c2.4,0,4.8,0.8,6.6,2.4c0.3,0.3,0.4,0.5,0.1,0.8l-3.5,4.1
|
|
||||||
c-0.2,0.3-0.6,0.4-0.9,0.2c0,0,0,0-0.1,0c-1.4-0.9-3-1.4-4.7-1.4c-4.1,0-6,2.7-6,7.4v15.9c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0-0.1,0
|
|
||||||
H323.6L323.6,73.3z"/>
|
|
||||||
<path class="st11" d="M346.5,68.5c-0.3-0.2-0.4-0.6-0.2-0.9c0,0,0,0,0,0l4.1-4.4c0.2-0.3,0.6-0.3,0.9-0.1c0,0,0,0,0,0
|
|
||||||
c3.5,2.7,7.7,4.2,12.1,4.4c5.3,0,8.4-2.5,8.4-6c0-3-2-4.9-8.1-5.7l-2.4-0.3c-8.6-1.1-13.5-4.9-13.5-11.8c0-7.5,5.9-12.4,15.1-12.4
|
|
||||||
c5.1-0.1,10.1,1.4,14.5,4.2c0.3,0.1,0.4,0.4,0.2,0.7c0,0.1-0.1,0.1-0.1,0.2l-3.1,4.5c-0.2,0.3-0.6,0.4-0.9,0.2
|
|
||||||
c-3.2-2.1-6.9-3.2-10.7-3.2c-4.5,0-7,2.3-7,5.5c0,2.9,2.2,4.8,8.2,5.6l2.4,0.3c8.6,1.1,13.3,4.9,13.3,12c0,7.3-5.7,12.8-16.8,12.8
|
|
||||||
C356.3,73.9,350,71.5,346.5,68.5z"/>
|
|
||||||
<path class="st11" d="M393.3,73.8c-6.4,0-8.8-2.9-8.8-8.6V49.8c0-0.2-0.1-0.3-0.3-0.4c0,0,0,0-0.1,0H382c-0.3,0-0.6-0.2-0.7-0.5
|
|
||||||
c0,0,0,0,0-0.1v-4.1c0-0.3,0.3-0.6,0.6-0.6c0,0,0,0,0.1,0h2.1c0.2,0,0.4-0.1,0.4-0.3c0,0,0,0,0-0.1v-8c0-0.3,0.3-0.6,0.6-0.6
|
|
||||||
c0,0,0,0,0.1,0h6c0.3,0,0.6,0.2,0.7,0.5c0,0,0,0,0,0.1v8c0,0.2,0.1,0.3,0.3,0.4c0,0,0,0,0.1,0h4.2c0.3,0,0.6,0.2,0.7,0.5
|
|
||||||
c0,0,0,0,0,0.1v4.1c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0-0.1,0h-4.2c-0.2,0-0.4,0.1-0.4,0.3c0,0,0,0,0,0.1V65c0,2.1,0.9,2.7,3,2.7h1.6
|
|
||||||
c0.3,0,0.6,0.2,0.7,0.5c0,0,0,0,0,0.1v4.9c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0-0.1,0L393.3,73.8L393.3,73.8z"/>
|
|
||||||
<path class="st11" d="M421.2,73.3c-0.3,0-0.6-0.2-0.7-0.5c0,0,0,0,0-0.1v-2.1h0c-1.5,2-4.5,3.4-8.9,3.4c-5.8,0-10.6-2.8-10.6-8.9
|
|
||||||
c0-6.4,4.9-9.3,12.7-9.3h6.4c0.2,0,0.4-0.1,0.4-0.3c0,0,0,0,0-0.1v-1.4c0-3.3-1.7-4.9-7-4.9c-2.6-0.1-5.1,0.6-7.2,2
|
|
||||||
c-0.3,0.2-0.7,0.2-0.9-0.1c0,0,0,0,0-0.1l-2.4-4c-0.2-0.2-0.1-0.6,0.1-0.8c0,0,0,0,0,0c2.6-1.7,6-2.9,11.2-2.9
|
|
||||||
c9.6,0,13.2,3,13.2,10.2v19.1c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0-0.1,0H421.2L421.2,73.3z M420.4,63.4v-2.2c0-0.2-0.1-0.3-0.3-0.4
|
|
||||||
c0,0,0,0-0.1,0h-5.2c-4.7,0-6.8,1.2-6.8,3.9c0,2.4,1.9,3.6,5.5,3.6C417.9,68.4,420.4,66.8,420.4,63.4L420.4,63.4z"/>
|
|
||||||
<path class="st11" d="M433.1,65.8c-0.7-2.3-1.1-4.8-1-7.2c-0.1-2.4,0.3-4.9,1-7.2c1.8-5.2,6.7-8.1,13.1-8.1c4.2-0.2,8.2,1.5,11,4.6
|
|
||||||
c0.2,0.2,0.2,0.6,0,0.8c0,0,0,0-0.1,0.1l-4.1,3.3c-0.3,0.2-0.7,0.2-0.9-0.1c0,0,0,0,0-0.1c-1.5-1.7-3.6-2.6-5.9-2.5
|
|
||||||
c-2.8,0-5,1.3-5.9,3.8c-0.5,1.8-0.8,3.6-0.7,5.4c-0.1,1.8,0.1,3.7,0.7,5.5c0.9,2.5,3.1,3.8,5.9,3.8c2.2,0.1,4.4-0.9,5.9-2.6
|
|
||||||
c0.2-0.3,0.6-0.3,0.9-0.1c0,0,0,0,0,0l4.1,3.3c0.3,0.2,0.3,0.5,0.1,0.8c0,0,0,0-0.1,0.1c-2.9,3-6.9,4.6-11,4.5
|
|
||||||
C439.8,73.9,435,71.1,433.1,65.8z"/>
|
|
||||||
<path class="st11" d="M482.8,73.3c-0.4,0-0.8-0.2-1-0.6l-8-12.3l-4.3,4.6v7.7c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0-0.1,0h-6
|
|
||||||
c-0.3,0-0.6-0.2-0.7-0.5c0,0,0,0,0-0.1V32.6c0-0.3,0.3-0.6,0.6-0.6c0,0,0,0,0.1,0h6c0.3,0,0.6,0.2,0.7,0.5c0,0,0,0,0,0.1v23.8
|
|
||||||
l10.8-11.8c0.3-0.4,0.8-0.6,1.2-0.6h6.7c0.2,0,0.4,0.1,0.4,0.3c0,0.1,0,0.3-0.1,0.3l-10.1,10.7L490,72.7c0.1,0.2,0.1,0.4,0,0.5
|
|
||||||
c-0.1,0.1-0.2,0.1-0.3,0.1H482.8L482.8,73.3z"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 720 KiB |
|
Before Width: | Height: | Size: 720 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 202 KiB |
|
Before Width: | Height: | Size: 379 KiB |
|
Before Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 433 KiB |
|
Before Width: | Height: | Size: 433 KiB |
|
Before Width: | Height: | Size: 433 KiB |
|
Before Width: | Height: | Size: 379 KiB |
|
Before Width: | Height: | Size: 49 KiB |
@ -1,138 +0,0 @@
|
|||||||
<mxfile host="65bd71144e">
|
|
||||||
<diagram id="meJA_rg5n3EOEVvTAqwo" name="Page-1">
|
|
||||||
<mxGraphModel dx="1679" dy="836" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="#4D4D4D" math="0" shadow="0">
|
|
||||||
<root>
|
|
||||||
<mxCell id="0"/>
|
|
||||||
<mxCell id="1" parent="0"/>
|
|
||||||
<mxCell id="41" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;" edge="1" parent="1" source="5" target="38">
|
|
||||||
<mxGeometry relative="1" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="42" value="1. force push" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;fontColor=#FFFFFF;" vertex="1" connectable="0" parent="41">
|
|
||||||
<mxGeometry x="-0.3753" y="2" relative="1" as="geometry">
|
|
||||||
<mxPoint x="10" y="12" as="offset"/>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="44" value="2. gh-pages deploy from branch" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;jumpStyle=none;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;labelBackgroundColor=none;" edge="1" parent="1" source="5" target="43">
|
|
||||||
<mxGeometry x="0.3208" y="-15" relative="1" as="geometry">
|
|
||||||
<mxPoint as="offset"/>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="5" value="vuepress-build<br>Workflow" style="rhombus;whiteSpace=wrap;html=1;fillColor=#a0522d;fontColor=#ffffff;strokeColor=#6D1F00;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="760" y="41" width="160" height="119" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="21" value="open PR" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;connectable=1;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;labelBackgroundColor=none;" edge="1" parent="1" target="17">
|
|
||||||
<mxGeometry x="0.0127" y="-13" relative="1" as="geometry">
|
|
||||||
<mxPoint x="200" y="100" as="sourcePoint"/>
|
|
||||||
<mxPoint as="offset"/>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="12" value="PR branch" style="swimlane;whiteSpace=wrap;html=1;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="40" y="40" width="160" height="113" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="14" value="Commit #1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#647687;fontColor=#ffffff;strokeColor=#314354;" vertex="1" parent="12">
|
|
||||||
<mxGeometry y="83" width="160" height="30" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="15" value="Commit #2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#647687;fontColor=#ffffff;strokeColor=#314354;" vertex="1" parent="12">
|
|
||||||
<mxGeometry y="53" width="160" height="30" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="16" value="Commit #3<br>" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#647687;fontColor=#ffffff;strokeColor=#314354;" vertex="1" parent="12">
|
|
||||||
<mxGeometry y="23" width="160" height="30" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="34" value="merge" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.404;entryDx=0;entryDy=0;entryPerimeter=0;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;labelBackgroundColor=none;" edge="1" parent="1" source="17" target="32">
|
|
||||||
<mxGeometry x="0.0005" y="-13" relative="1" as="geometry">
|
|
||||||
<mxPoint as="offset"/>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="17" value="Pullrequest-Review<br>Workflow" style="rhombus;whiteSpace=wrap;html=1;fillColor=#a0522d;fontColor=#ffffff;strokeColor=#6D1F00;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="279" y="40" width="160" height="120" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="26" value="review" style="edgeStyle=none;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;labelBackgroundColor=none;" edge="1" parent="1" target="17">
|
|
||||||
<mxGeometry x="0.0137" relative="1" as="geometry">
|
|
||||||
<mxPoint x="359.412429378531" y="230" as="sourcePoint"/>
|
|
||||||
<mxPoint x="360" y="170" as="targetPoint"/>
|
|
||||||
<mxPoint as="offset"/>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="23" value="Reviewer" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;fillColor=#eeeeee;strokeColor=#FFFFFF;fontColor=#FFFFFF;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="352" y="230" width="15" height="31" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="37" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;" edge="1" parent="1" target="5">
|
|
||||||
<mxGeometry relative="1" as="geometry">
|
|
||||||
<mxPoint x="680" y="101" as="sourcePoint"/>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="40" value="on merge" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;fontColor=#FFFFFF;" vertex="1" connectable="0" parent="37">
|
|
||||||
<mxGeometry x="-0.6632" relative="1" as="geometry">
|
|
||||||
<mxPoint x="24" y="12" as="offset"/>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="27" value="master branch" style="swimlane;whiteSpace=wrap;html=1;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="520" y="41" width="160" height="289" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="28" value="PR Merge #1" style="rounded=0;whiteSpace=wrap;html=1;fontColor=#ffffff;fillColor=#647687;strokeColor=#314354;" vertex="1" parent="27">
|
|
||||||
<mxGeometry y="201" width="160" height="89" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="31" value="PR Merge #2" style="rounded=0;whiteSpace=wrap;html=1;fontColor=#ffffff;fillColor=#647687;strokeColor=#314354;" vertex="1" parent="27">
|
|
||||||
<mxGeometry y="112" width="160" height="89" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="32" value="PR Merge #3" style="rounded=0;whiteSpace=wrap;html=1;fontColor=#ffffff;fillColor=#647687;strokeColor=#314354;" vertex="1" parent="27">
|
|
||||||
<mxGeometry y="23" width="160" height="89" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="35" value="" style="endArrow=classic;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;" edge="1" parent="1" target="31">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="480" y="198" as="sourcePoint"/>
|
|
||||||
<mxPoint x="691" y="221" as="targetPoint"/>
|
|
||||||
<Array as="points">
|
|
||||||
<mxPoint x="480" y="198"/>
|
|
||||||
</Array>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="36" value="" style="endArrow=classic;html=1;dashed=1;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;" edge="1" parent="1">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="480" y="287" as="sourcePoint"/>
|
|
||||||
<mxPoint x="521" y="287" as="targetPoint"/>
|
|
||||||
<Array as="points">
|
|
||||||
<mxPoint x="481" y="287"/>
|
|
||||||
</Array>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="45" style="edgeStyle=orthogonalEdgeStyle;jumpStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;fontColor=#FFFFFF;strokeColor=#FFFFFF;" edge="1" parent="1" source="38" target="43">
|
|
||||||
<mxGeometry relative="1" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="38" value="gh-pages branch" style="swimlane;whiteSpace=wrap;html=1;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="1000" y="41" width="200" height="120" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="39" value="latest built files<br>Commit #1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#647687;strokeColor=#314354;fontColor=#ffffff;" vertex="1" parent="38">
|
|
||||||
<mxGeometry y="23" width="200" height="97" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="43" value="github-pages infrastructrue<br>https://www.it4c.dev" style="shape=internalStorage;whiteSpace=wrap;html=1;backgroundOutline=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="1000" y="200" width="200" height="130" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="46" value="" style="endArrow=classic;html=1;dashed=1;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;" edge="1" parent="1">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="680" y="198" as="sourcePoint"/>
|
|
||||||
<mxPoint x="720" y="198" as="targetPoint"/>
|
|
||||||
<Array as="points">
|
|
||||||
<mxPoint x="720" y="198"/>
|
|
||||||
</Array>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="47" value="" style="endArrow=classic;html=1;dashed=1;fillColor=#f9f7ed;strokeColor=#FFFFFF;fontColor=#FFFFFF;" edge="1" parent="1">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="680" y="284" as="sourcePoint"/>
|
|
||||||
<mxPoint x="720" y="284" as="targetPoint"/>
|
|
||||||
<Array as="points">
|
|
||||||
<mxPoint x="720" y="284"/>
|
|
||||||
</Array>
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="49" value="" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;strokeColor=none;fontColor=#FFFFFF;fillColor=none;gradientColor=none;" vertex="1" parent="1">
|
|
||||||
<mxGeometry width="20" height="20" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="50" value="" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;strokeColor=none;fontColor=#FFFFFF;fillColor=none;gradientColor=none;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="1220" y="340" width="20" height="20" as="geometry"/>
|
|
||||||
</mxCell>
|
|
||||||
</root>
|
|
||||||
</mxGraphModel>
|
|
||||||
</diagram>
|
|
||||||
</mxfile>
|
|
||||||
|
Before Width: | Height: | Size: 63 KiB |
285
docs/index.md
@ -1,285 +0,0 @@
|
|||||||
# Ocelot.Social
|
|
||||||
|
|
||||||
[](https://github.com/Ocelot-Social-Community/Ocelot-Social/actions)
|
|
||||||
[](https://github.com/Ocelot-Social-Community/Ocelot-Social/actions)
|
|
||||||
[](https://github.com/Ocelot-Social-Community/Ocelot-Social/blob/LICENSE.md)
|
|
||||||
[](https://discord.gg/AJSX9DCSUA)
|
|
||||||
[](https://www.codetriage.com/ocelot-social-community/ocelot-social)
|
|
||||||
|
|
||||||
[ocelot.social](https://ocelot.social) is free and open source software program code to run social networks. Its development is supported by a community of programmers and interested network operators.
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://ocelot.social" target="_blank"><img src="~@images/assets/logo-squared.svg" alt="ocelot.social" width="40%" height="40%"></a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
Our goal is to enable people to participate fairly and equally in online social networks. The equality of opportunity applies both to the fundamental equality of all people and to the possibility of letting their diverse voices be heard.
|
|
||||||
|
|
||||||
We therefore consider it desirable that operators offer such networks so that people can choose where they want to be on the move.
|
|
||||||
|
|
||||||
At the same time, it should be possible in the future to link these networks with each other (ActivityPub, Fediverse), so that users can also connect with people from other networks - for example by making friends or following posts or other contributions.
|
|
||||||
|
|
||||||
In other words, we are interested in a network of networks and in keeping the data as close as possible to the user and the operator they trusts.
|
|
||||||
|
|
||||||
## Screenshots
|
|
||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/17728384/218597429-554e4082-3906-4721-8f68-0c13146fc218.png" alt="Post feed" title="Post feed" />
|
|
||||||
|
|
||||||
Check out more screenshots [here](/wiki/en:Screenshots).
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
Ocelot.social networks feature:
|
|
||||||
* <strong>user accounts</strong>
|
|
||||||
* <strong>user roles</strong>
|
|
||||||
* <strong>posts</strong> and <strong>comments</strong>
|
|
||||||
* <strong>groups</strong>
|
|
||||||
* <strong>maps</strong>
|
|
||||||
* <strong>search</strong>
|
|
||||||
* <strong>filters</strong>
|
|
||||||
* and more …
|
|
||||||
|
|
||||||
Check out the [full feature list](/wiki/en:FAQ#what-are-the-features).
|
|
||||||
|
|
||||||
## User Guide and Frequently Asked Questions
|
|
||||||
|
|
||||||
In the [wiki](/wiki) you can find more information.
|
|
||||||
|
|
||||||
* [User Guide](/wiki/en:User-Guide)
|
|
||||||
* [Frequently Asked Questions](/wiki/en:FAQ)
|
|
||||||
|
|
||||||
## Demo
|
|
||||||
|
|
||||||
Try out our live demo network, see [here](#live-demo-and-developer-logins).
|
|
||||||
|
|
||||||
## Help us
|
|
||||||
|
|
||||||
If you’re wondering how you could help, there are plenty of ways, e.g.:
|
|
||||||
|
|
||||||
* Spread the good word about ocelot.social to make it more popular:
|
|
||||||
* Add the link [ocelot.social](https://ocelot.social) to your website
|
|
||||||
* Give ocelot.social a Like at https://alternativeto.net/software/ocelot-social/
|
|
||||||
* Star our project on GitHub at https://github.com/Ocelot-Social-Community/Ocelot-Social/
|
|
||||||
* Promote it on your social networks
|
|
||||||
* Tell your friends about it by word-of-mouth
|
|
||||||
* Write a press article on ocelot.social or contact the editorial office of your local newspage or radio station
|
|
||||||
* Take a [good first issue](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or issues that need help. Make sure to read [CONTRIBUTING.md](/CONTRIBUTING.md) first though
|
|
||||||
* Testing and [reporting](/issues/new/choose) bugs
|
|
||||||
* Translating: Please [contact us](#contact)
|
|
||||||
* Reviewing and testing pull requests
|
|
||||||
|
|
||||||
## Donate
|
|
||||||
|
|
||||||
Your donation is very welcome and helps to enhance and improve the network. This software is mostly developed and maintained by the association [busFaktor() e.V.](https://www.busfaktor.org/en). Please support us with a [donation](https://www.busfaktor.org/en/donations) to busFaktor() e.V.. Thanks a lot! ❤️
|
|
||||||
|
|
||||||
## Contact
|
|
||||||
|
|
||||||
Are you interested in operating your own ocelot.social network or becoming a user? Please contact us here:
|
|
||||||
* [hello@ocelot.social](mailto:hello@ocelot.social)
|
|
||||||
* [Discord](https://discord.com/invite/DFSjPaX)
|
|
||||||
|
|
||||||
## For Developers and Contributors
|
|
||||||
|
|
||||||
### Introduction
|
|
||||||
|
|
||||||
Have a look into our short video:
|
|
||||||
[ocelot.social - GitHub - Developer Welcome - Tutorial (english)](https://www.youtube.com/watch?v=gZSL6KvBIiY&list=PLFMD5liPP01kbuReHxYXxv_1fI5rIgS1f&index=1)
|
|
||||||
|
|
||||||
### Directory Layout
|
|
||||||
|
|
||||||
There are three important directories:
|
|
||||||
|
|
||||||
* [Backend](./backend) runs on the server and is a middleware between database and frontend
|
|
||||||
* [Frontend](./webapp) is a server-side-rendered and client-side-rendered web frontend
|
|
||||||
* [Cypress](./cypress) contains end-to-end tests and executable feature specifications
|
|
||||||
|
|
||||||
In order to setup the application and start to develop features you have to
|
|
||||||
setup **frontend** and **backend**.
|
|
||||||
|
|
||||||
There are two approaches:
|
|
||||||
|
|
||||||
1. [Local](#local-installation) installation, which means you have to take care of dependencies yourself
|
|
||||||
2. **Or** Install everything through [Docker](#docker-installation) which takes care of dependencies for you
|
|
||||||
|
|
||||||
### Installation
|
|
||||||
|
|
||||||
#### Clone the Repository
|
|
||||||
|
|
||||||
Clone the repository, this will create a new folder called `Ocelot-Social`:
|
|
||||||
|
|
||||||
Using HTTPS:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ git clone https://github.com/Ocelot-Social-Community/Ocelot-Social.git
|
|
||||||
```
|
|
||||||
|
|
||||||
Using SSH:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ git clone git@github.com:Ocelot-Social-Community/Ocelot-Social.git
|
|
||||||
```
|
|
||||||
|
|
||||||
Change into the new folder.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ cd Ocelot-Social
|
|
||||||
```
|
|
||||||
|
|
||||||
### Live Demo And Developer Logins
|
|
||||||
|
|
||||||
**Try out our deployed [development environment](https://stage.ocelot.social).**
|
|
||||||
|
|
||||||
Visit our staging networks:
|
|
||||||
|
|
||||||
* central staging network: [stage.ocelot.social](https://stage.ocelot.social)
|
|
||||||
<!-- - rebranded staging network: [rebrand.ocelot.social](https://stage.ocelot.social). -->
|
|
||||||
|
|
||||||
#### Login
|
|
||||||
|
|
||||||
Logins for the live demos and developers (local developers after the following installations) in the browser:
|
|
||||||
|
|
||||||
| email | password | role |
|
|
||||||
| :--- | :--- | :--- |
|
|
||||||
| `user@example.org` | 1234 | user |
|
|
||||||
| `moderator@example.org` | 1234 | moderator |
|
|
||||||
| `admin@example.org` | 1234 | admin |
|
|
||||||
|
|
||||||
#### Docker Installation
|
|
||||||
|
|
||||||
Docker is a software development container tool that combines software and its dependencies into one standardized unit that contains everything needed to run it. This helps us to avoid problems with dependencies and makes installation easier.
|
|
||||||
|
|
||||||
##### General Installation of Docker
|
|
||||||
|
|
||||||
There are [several ways to install Docker CE](https://docs.docker.com/install/) on your computer or server.
|
|
||||||
|
|
||||||
* [install Docker Desktop on macOS](https://docs.docker.com/docker-for-mac/install/)
|
|
||||||
* [install Docker Desktop on Windows](https://docs.docker.com/docker-for-windows/install/)
|
|
||||||
* [install Docker CE on Linux](https://docs.docker.com/install/)
|
|
||||||
|
|
||||||
Check the correct Docker installation by checking the version before proceeding. E.g. we have the following versions:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ docker --version
|
|
||||||
Docker version 18.09.2
|
|
||||||
$ docker-compose --version
|
|
||||||
docker-compose version 1.23.2
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Start Ocelot-Social via Docker-Compose
|
|
||||||
|
|
||||||
Prepare ENVs once beforehand:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in folder webapp/
|
|
||||||
$ cp .env.template .env
|
|
||||||
|
|
||||||
# in folder backend/
|
|
||||||
$ cp .env.template .env
|
|
||||||
```
|
|
||||||
|
|
||||||
For Development:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ docker-compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
For Production:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ docker-compose -f docker-compose.yml up
|
|
||||||
```
|
|
||||||
|
|
||||||
This will start all required Docker containers.
|
|
||||||
Make sure your database is running on `http://localhost:7474/browser/`.
|
|
||||||
|
|
||||||
Prepare database once before you start by running the following command in a second terminal:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder while docker-compose is up
|
|
||||||
$ docker compose exec backend yarn run db:migrate init
|
|
||||||
$ docker compose exec backend yarn run db:migrate up
|
|
||||||
```
|
|
||||||
|
|
||||||
Then clear and seed database by running the following command as well in the second terminal:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder while docker-compose is up
|
|
||||||
$ docker-compose exec backend yarn run db:reset
|
|
||||||
$ docker-compose exec backend yarn run db:seed
|
|
||||||
```
|
|
||||||
|
|
||||||
For a closer description see [backend README.md](./backend/README.md).
|
|
||||||
For a full documentation see [SUMMARY](./SUMMARY.md).
|
|
||||||
|
|
||||||
#### Local Installation
|
|
||||||
|
|
||||||
For a full documentation see [SUMMARY](./SUMMARY.md).
|
|
||||||
|
|
||||||
### Contributing
|
|
||||||
|
|
||||||
Choose an issue (consider our label [good-first-issue](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)) and leave a comment there. We will then invite you to join our volunteers team.
|
|
||||||
To have the necessary permission to push directly to this repository, please accept our invitation to join our volunteers team, you will receive via the email, Github will send you, once invited. If we did not invite you yet, please request an invitation via Discord.
|
|
||||||
|
|
||||||
We are happy if you fork our repository, but we don’t recommend it for development. You do not need a fork.
|
|
||||||
|
|
||||||
Clone this repository locally as [described above](#clone-the-repository), create your branch named `<issue-number>-<description>`, add your code and push your branch to this repository. Then create a PR by comparing it to our `master`.
|
|
||||||
|
|
||||||
Please run the following commands before you push:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in folder backend/
|
|
||||||
$ yarn lint --fix
|
|
||||||
$ yarn test
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in folder webapp/
|
|
||||||
$ yarn lint --fix
|
|
||||||
$ yarn locales --fix
|
|
||||||
$ yarn test
|
|
||||||
```
|
|
||||||
|
|
||||||
Check out our [contribution guideline](./CONTRIBUTING.md), too!
|
|
||||||
|
|
||||||
#### Developer Chat
|
|
||||||
|
|
||||||
Join our friendly open-source community on [Discord](https://discord.gg/AJSX9DCSUA) :heart_eyes_cat:
|
|
||||||
Just introduce yourself at `#introduce-yourself` and mention a mentor or `@@Mentors` to get you onboard :neckbeard:
|
|
||||||
|
|
||||||
We give write permissions to every developer who asks for it. Just text us on
|
|
||||||
[Discord](https://discord.gg/AJSX9DCSUA).
|
|
||||||
|
|
||||||
### Deployment
|
|
||||||
|
|
||||||
Deployment methods can be found in the [Ocelot-Social-Deploy-Rebranding](https://github.com/Ocelot-Social-Community/Ocelot-Social-Deploy-Rebranding) repository.
|
|
||||||
|
|
||||||
The only deployment method in this repository for development purposes as described above is `docker-compose`.
|
|
||||||
|
|
||||||
### Technology Stack
|
|
||||||
|
|
||||||
* [VueJS](https://vuejs.org/)
|
|
||||||
* [NuxtJS](https://nuxtjs.org/)
|
|
||||||
* [GraphQL](https://graphql.org/)
|
|
||||||
* [NodeJS](https://nodejs.org/en/)
|
|
||||||
* [Neo4J](https://neo4j.com/)
|
|
||||||
|
|
||||||
#### For Testing
|
|
||||||
|
|
||||||
* [Cypress](https://docs.cypress.io/)
|
|
||||||
* [Storybook](https://storybook.js.org/)
|
|
||||||
* [Jest](https://jestjs.io/)
|
|
||||||
* [Vue Test Utils](https://vue-test-utils.vuejs.org/)
|
|
||||||
* [ESLint](https://eslint.org/)
|
|
||||||
|
|
||||||
### Attributions
|
|
||||||
|
|
||||||
Locale Icons made by [Freepik](http://www.freepik.com/) from [www.flaticon.com](https://www.flaticon.com/) is licensed by [CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/).
|
|
||||||
|
|
||||||
Browser compatibility testing with [BrowserStack](https://www.browserstack.com/).
|
|
||||||
|
|
||||||
<img alt="BrowserStack Logo" src="~@images/assets/browserstack-logo.svg" width="256">
|
|
||||||
|
|
||||||
### License
|
|
||||||
|
|
||||||
See the [LICENSE](LICENSE.md) file for license rights and limitations (MIT).
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
# LICENSE
|
|
||||||
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright \(c\) 2018-2021 [Ocelot.Social Community](https://github.com/Ocelot-Social-Community)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files \(the "Software"\), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
@ -1,241 +0,0 @@
|
|||||||
# Backend
|
|
||||||
|
|
||||||
## Installation with Docker
|
|
||||||
|
|
||||||
Run the following command to install everything through docker.
|
|
||||||
|
|
||||||
The installation takes a bit longer on the first pass or on rebuild ...
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ docker-compose up
|
|
||||||
# or
|
|
||||||
# rebuild the containers for a cleanup
|
|
||||||
$ docker-compose up --build
|
|
||||||
```
|
|
||||||
|
|
||||||
Wait a little until your backend is up and running at [http://localhost:4000/](http://localhost:4000/).
|
|
||||||
|
|
||||||
## Installation without Docker
|
|
||||||
|
|
||||||
For the local installation you need a recent version of
|
|
||||||
[Node](https://nodejs.org/en/) (>= `v16.19.0`). We are using
|
|
||||||
`v19.4.0` and therefore we recommend to use the same version
|
|
||||||
([see](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/4082)
|
|
||||||
some known problems with more recent node versions). You can use the
|
|
||||||
[node version manager](https://github.com/nvm-sh/nvm) `nvm` to switch
|
|
||||||
between different local Node versions:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# install Node
|
|
||||||
$ cd backend
|
|
||||||
$ nvm install v19.4.0
|
|
||||||
$ nvm use v19.4.0
|
|
||||||
```
|
|
||||||
|
|
||||||
Install node dependencies with [yarn](https://yarnpkg.com/en/):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ cd backend
|
|
||||||
$ yarn install
|
|
||||||
# or just
|
|
||||||
$ yarn
|
|
||||||
# or just later on to use version of ".nvmrc" file
|
|
||||||
$ nvm use && yarn
|
|
||||||
```
|
|
||||||
|
|
||||||
Copy Environment Variables:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend/
|
|
||||||
$ cp .env.template .env
|
|
||||||
```
|
|
||||||
|
|
||||||
Configure the new file according to your needs and your local setup. Make sure
|
|
||||||
a [local Neo4J](http://localhost:7474) instance is up and running.
|
|
||||||
|
|
||||||
Start the backend for development with:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend/
|
|
||||||
$ yarn run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
or start the backend in production environment with:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend/
|
|
||||||
$ yarn run start
|
|
||||||
```
|
|
||||||
|
|
||||||
For e-mail delivery, please configure at least `SMTP_HOST` and `SMTP_PORT` in
|
|
||||||
your `.env` configuration file.
|
|
||||||
|
|
||||||
Your backend is up and running at [http://localhost:4000/](http://localhost:4000/)
|
|
||||||
This will start the GraphQL service \(by default on localhost:4000\) where you
|
|
||||||
can issue GraphQL requests or access GraphQL Playground in the browser.
|
|
||||||
More details about our GraphQL playground and how to use it with ocelot.social can be found [here](./src/graphql/GraphQL-Playground.md).
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Database Indexes and Constraints
|
|
||||||
|
|
||||||
Database indexes and constraints need to be created and upgraded when the database and the backend are running:
|
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="Docker" %}
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder while docker-compose is running
|
|
||||||
$ docker exec backend yarn run db:migrate init
|
|
||||||
|
|
||||||
# only once: init admin user and create indexes and constraints in Neo4j database
|
|
||||||
# for development
|
|
||||||
$ docker compose exec backend yarn prod:migrate init
|
|
||||||
# in production mode use command
|
|
||||||
$ docker compose exec backend /bin/sh -c "yarn prod:migrate init"
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder with docker compose running
|
|
||||||
$ docker exec backend yarn run db:migrate up
|
|
||||||
```
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
{% tab title="Without Docker" %}
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in folder backend/ while database is running
|
|
||||||
# make sure your database is running on http://localhost:7474/browser/
|
|
||||||
yarn run db:migrate init
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend/ with database running (In docker or local)
|
|
||||||
yarn run db:migrate up
|
|
||||||
```
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
{% endtabs %}
|
|
||||||
|
|
||||||
#### Seed Database
|
|
||||||
|
|
||||||
If you want your backend to return anything else than an empty response, you
|
|
||||||
need to seed your database:
|
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="Docker" %}
|
|
||||||
|
|
||||||
In another terminal run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder while docker-compose is running
|
|
||||||
$ docker exec backend yarn run db:seed
|
|
||||||
```
|
|
||||||
|
|
||||||
To reset the database run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder while docker-compose is running
|
|
||||||
$ docker exec backend yarn run db:reset
|
|
||||||
# you could also wipe out your neo4j database and delete all volumes with:
|
|
||||||
$ docker-compose down -v
|
|
||||||
# if container is not running, run this command to set up your database indexes and constraints
|
|
||||||
$ docker exec backend yarn run db:migrate init
|
|
||||||
# And then upgrade the indexes and const
|
|
||||||
$ docker exec backend yarn run db:migrate up
|
|
||||||
```
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
{% tab title="Without Docker" %}
|
|
||||||
|
|
||||||
Run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend/ while database is running
|
|
||||||
$ yarn run db:seed
|
|
||||||
```
|
|
||||||
|
|
||||||
To reset the database run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend/ while database is running
|
|
||||||
$ yarn run db:reset
|
|
||||||
```
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
{% endtabs %}
|
|
||||||
|
|
||||||
### Data migrations
|
|
||||||
|
|
||||||
Although Neo4J is schema-less,you might find yourself in a situation in which
|
|
||||||
you have to migrate your data e.g. because your data modeling has changed.
|
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="Docker" %}
|
|
||||||
|
|
||||||
Generate a data migration file:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder while docker-compose is running
|
|
||||||
$ docker-compose exec backend yarn run db:migrate:create your_data_migration
|
|
||||||
# Edit the file in ./src/db/migrations/
|
|
||||||
```
|
|
||||||
|
|
||||||
To run the migration:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder while docker-compose is running
|
|
||||||
$ docker exec backend yarn run db:migrate up
|
|
||||||
```
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
{% tab title="Without Docker" %}
|
|
||||||
|
|
||||||
Generate a data migration file:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend/
|
|
||||||
$ yarn run db:migrate:create your_data_migration
|
|
||||||
# Edit the file in ./src/db/migrations/
|
|
||||||
```
|
|
||||||
|
|
||||||
To run the migration:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend/ while database is running
|
|
||||||
$ yarn run db:migrate up
|
|
||||||
```
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
{% endtabs %}
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
**Beware**: We have no multiple database setup at the moment. We clean the
|
|
||||||
database after each test, running the tests will wipe out all your data!
|
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="Docker" %}
|
|
||||||
|
|
||||||
Run the unit tests:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder while docker-compose is running
|
|
||||||
$ docker exec backend yarn run test
|
|
||||||
```
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="Without Docker" %}
|
|
||||||
|
|
||||||
Run the unit tests:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend/ while database is running
|
|
||||||
$ yarn run test
|
|
||||||
```
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
{% endtabs %}
|
|
||||||
@ -1,131 +0,0 @@
|
|||||||
# Neo4J
|
|
||||||
|
|
||||||
Human Connection is a social network. Using a graph based database which can
|
|
||||||
model nodes and edges natively - a network - feels like an obvious choice. We
|
|
||||||
decided to use [Neo4j](https://neo4j.com/), the currently most used graph
|
|
||||||
database available. The community edition of Neo4J is Free and Open Source and
|
|
||||||
we try our best to keep our application compatible with the community edition
|
|
||||||
only.
|
|
||||||
|
|
||||||
## Installation With Docker
|
|
||||||
|
|
||||||
Run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
You can access Neo4J through [http://localhost:7474/](http://localhost:7474/)
|
|
||||||
for an interactive cypher shell and a visualization of the graph.
|
|
||||||
|
|
||||||
|
|
||||||
## Installation Without Docker
|
|
||||||
|
|
||||||
Install the community edition of [Neo4j](https://neo4j.com/) along with the plugin
|
|
||||||
[Apoc](https://github.com/neo4j-contrib/neo4j-apoc-procedures) on your system.
|
|
||||||
|
|
||||||
To do so, go to [releases](https://neo4j.com/download-center/#releases), choose
|
|
||||||
"Community Server", download the installation files for you operation system
|
|
||||||
and unpack the files.
|
|
||||||
|
|
||||||
Download [Neo4j Apoc](https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases)
|
|
||||||
and drop the `.jar` file into the `plugins` folder of the just extracted Neo4j-Server.
|
|
||||||
|
|
||||||
Then make sure to allow Apoc procedures by adding the following line to your Neo4j configuration \(`conf/neo4j.conf`\):
|
|
||||||
|
|
||||||
```
|
|
||||||
dbms.security.procedures.unrestricted=apoc.*
|
|
||||||
```
|
|
||||||
|
|
||||||
### Alternatives
|
|
||||||
|
|
||||||
You can download [Neo4j Desktop](https://neo4j.com/download/) and run locally
|
|
||||||
for development, spin up a
|
|
||||||
[hosted Neo4j Sandbox instance](https://neo4j.com/download/), run Neo4j in one
|
|
||||||
of the [many cloud options](https://neo4j.com/developer/guide-cloud-deployment/),
|
|
||||||
[spin up Neo4j in a Docker container](https://neo4j.com/developer/docker/),
|
|
||||||
on Arch linux you can install [neo4j-community from AUR](https://aur.archlinux.org/packages/neo4j-community/)
|
|
||||||
or on Debian-based systems install [Neo4j from the Debian Repository](http://debian.neo4j.org/).
|
|
||||||
Just be sure to update the Neo4j connection string and credentials accordingly
|
|
||||||
in `backend/.env`.
|
|
||||||
|
|
||||||
Start Neo4J and confirm the database is running at [http://localhost:7474](http://localhost:7474).
|
|
||||||
|
|
||||||
## Commands
|
|
||||||
|
|
||||||
Here we describe some rarely used Cypher commands for Neo4j that are needed from time to time:
|
|
||||||
|
|
||||||
### Index And Constraint Commands
|
|
||||||
|
|
||||||
If indexes or constraints are missing or not set correctly, the browser search will not work or the database seed for development will not work.
|
|
||||||
|
|
||||||
The indexes and constraints of our database are set in `backend/src/db/migrate/store.js`.
|
|
||||||
This is where the magic happens.
|
|
||||||
|
|
||||||
It’s called by our `prod:migrate init` command.
|
|
||||||
This command initializes the Admin user and creates all necessary indexes and constraints in the Neo4j database.
|
|
||||||
|
|
||||||
***Calls in development***
|
|
||||||
|
|
||||||
Locally without Docker:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in backend folder
|
|
||||||
$ yarn prod:migrate init
|
|
||||||
```
|
|
||||||
|
|
||||||
Locally with Docker:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ docker compose exec backend yarn prod:migrate init
|
|
||||||
```
|
|
||||||
|
|
||||||
***Calls in production***
|
|
||||||
|
|
||||||
Locally with Docker:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in main folder
|
|
||||||
$ docker compose exec backend /bin/sh -c "yarn prod:migrate init"
|
|
||||||
```
|
|
||||||
|
|
||||||
On a server with Kubernetes cluster:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# tested for one backend replica
|
|
||||||
# !!! be aware of the kubectl context !!!
|
|
||||||
$ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "yarn prod:migrate init"
|
|
||||||
```
|
|
||||||
|
|
||||||
***Cypher commands to show indexes and constraints***
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in browser command line or cypher shell
|
|
||||||
|
|
||||||
# show all indexes and constraints
|
|
||||||
$ :schema
|
|
||||||
|
|
||||||
# show all indexes
|
|
||||||
$ CALL db.indexes();
|
|
||||||
|
|
||||||
# show all constraints
|
|
||||||
$ CALL db.constraints();
|
|
||||||
```
|
|
||||||
|
|
||||||
***Cypher commands to create and drop indexes and constraints***
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in browser command line or cypher shell
|
|
||||||
|
|
||||||
# create indexes
|
|
||||||
$ CALL db.index.fulltext.createNodeIndex("post_fulltext_search",["Post"],["title", "content"]);
|
|
||||||
$ CALL db.index.fulltext.createNodeIndex("user_fulltext_search",["User"],["name", "slug"]);
|
|
||||||
$ CALL db.index.fulltext.createNodeIndex("tag_fulltext_search",["Tag"],["id"]);
|
|
||||||
|
|
||||||
# drop an index
|
|
||||||
$ DROP CONSTRAINT ON ( image:Image ) ASSERT image.url IS UNIQUE
|
|
||||||
|
|
||||||
# drop all indexes and constraints
|
|
||||||
$ CALL apoc.schema.assert({},{},true) YIELD label, key RETURN * ;
|
|
||||||
```
|
|
||||||
@ -1,132 +0,0 @@
|
|||||||
# Webapp
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
For preparation we need Node and recommend to use [node version manager](https://github.com/nvm-sh/nvm) `nvm` to switch
|
|
||||||
between different local Node versions:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# install Node
|
|
||||||
$ cd webapp
|
|
||||||
$ nvm install v19.4.0
|
|
||||||
$ nvm use v19.4.0
|
|
||||||
```
|
|
||||||
|
|
||||||
Install node dependencies with [yarn](https://yarnpkg.com/en/):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# install all dependencies
|
|
||||||
$ cd webapp
|
|
||||||
$ yarn install
|
|
||||||
# or just
|
|
||||||
$ yarn
|
|
||||||
# or just later on to use version of ".nvmrc" file
|
|
||||||
$ nvm use && yarn
|
|
||||||
```
|
|
||||||
|
|
||||||
Copy:
|
|
||||||
|
|
||||||
```text
|
|
||||||
# in webapp
|
|
||||||
cp .env.template .env
|
|
||||||
```
|
|
||||||
|
|
||||||
Configure the files according to your needs and your local setup.
|
|
||||||
|
|
||||||
### Build for Development
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# serve with hot reload at localhost:3000
|
|
||||||
$ yarn dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Build for Production
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# build for production and launch server
|
|
||||||
$ yarn build
|
|
||||||
$ yarn start
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run tests
|
|
||||||
|
|
||||||
We ensure the quality of our frontend code by using
|
|
||||||
- [ESLint](https://eslint.org/) for checking our JavaScript code
|
|
||||||
- [Jest](https://jestjs.io/) and [Vue Test Utils](https://vue-test-utils.vuejs.org/) to unit test our components
|
|
||||||
- [Storybook](https://storybook.js.org/) to document and manually test our components in an isolated playground
|
|
||||||
|
|
||||||
For more information see our [frontend testing guide](testing.md). Use these commands to run the tests:
|
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="With Docker" %}
|
|
||||||
|
|
||||||
After starting the application following the above guidelines, open new terminal windows for each of these commands:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# run eslint
|
|
||||||
$ docker-compose exec webapp yarn lint
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# run unit tests
|
|
||||||
$ docker-compose exec webapp yarn test
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# start storybook
|
|
||||||
$ docker-compose exec webapp yarn storybook
|
|
||||||
```
|
|
||||||
|
|
||||||
You can then visit the Storybook playground on `http://localhost:3002`
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="Without Docker" %}
|
|
||||||
|
|
||||||
After starting the application following the above guidelines, open new terminal windows and navigate to the `/webapp` directory for each of these commands:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# run eslint in /webapp (use option --fix to normalize the files)
|
|
||||||
$ yarn lint
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# run unit tests in /webapp
|
|
||||||
$ yarn test
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# run locales in /webapp (use option --fix to sort the locales)
|
|
||||||
$ yarn locales
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# start storybook in /webapp
|
|
||||||
$ yarn storybook
|
|
||||||
```
|
|
||||||
|
|
||||||
You can then visit the Storybook playground on `http://localhost:3002`
|
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
{% endtabs %}
|
|
||||||
|
|
||||||
## Maintenance Mode
|
|
||||||
|
|
||||||
For installing and running the maintenance mode see [Maintenance Mode](./maintenance/README.md).
|
|
||||||
|
|
||||||
## Styleguide Migration
|
|
||||||
|
|
||||||
We are currently in the process of migrating our styleguide components and design tokens from the [Nitro Styleguide](https://github.com/Ocelot-Social-Community/HC-Styleguide-20201003) into the main [ocelot.social repository](https://github.com/Ocelot-Social-Community/Ocelot-Social) and refactoring our components in the process. During this migration, our new components will live in a `_new/` folder to separate them from the old, yet untouched components.
|
|
||||||
|
|
||||||
### Folder Structure
|
|
||||||
|
|
||||||
The folder structure we are following is [prescribed by Nuxt.js](https://nuxtjs.org/guide/directory-structure):
|
|
||||||
|
|
||||||
- **assets** contains icons, images and logos in `svg` format and all shared SCSS files such as `tokens`
|
|
||||||
- **components** separated into two sub-folders:
|
|
||||||
- **generic** are the generic building blocks of the app – small, reusable and usually not coupled to state
|
|
||||||
- **features** are composed of components but tied to a particular function of the app (e.g. `comment` or `post`)
|
|
||||||
- **layouts** can use components to create layout templates for pages
|
|
||||||
- **pages** are the entry points for all `routes` in the app and are composed of layouts, features and components
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
# Unit Testing
|
|
||||||
|
|
||||||
this is empty
|
|
||||||
@ -1,62 +0,0 @@
|
|||||||
# End-to-End Testing
|
|
||||||
|
|
||||||
## Setup with docker
|
|
||||||
|
|
||||||
Are you running everything through docker? You’re so lucky you don’t have to
|
|
||||||
setup anything!
|
|
||||||
|
|
||||||
Just:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ docker-compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
## Setup without docker
|
|
||||||
|
|
||||||
To start the services that are required for cypress testing manually. You basically need the whole setup to run:
|
|
||||||
|
|
||||||
- backend
|
|
||||||
- webapp
|
|
||||||
- neo4j
|
|
||||||
|
|
||||||
Navigate to the corresponding folders and start the services.
|
|
||||||
|
|
||||||
## Install cypress
|
|
||||||
|
|
||||||
Even if the required services for testing run via docker, depending on your
|
|
||||||
setup, the cypress tests themselves run on your host machine. So with our
|
|
||||||
without docker, you would have to install cypress and its dependencies first:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# in the root folder /
|
|
||||||
$ yarn install
|
|
||||||
```
|
|
||||||
|
|
||||||
### Open Interactive Test Console
|
|
||||||
|
|
||||||
The interactive cypress test console allows to run tests and have visual feedback on that. The interactive cypress environment also helps at debugging the tests, you can even time travel between individual steps and see the exact state of the app.
|
|
||||||
|
|
||||||
To use this feature run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ yarn cypress:open
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Run cypress
|
|
||||||
|
|
||||||
To run cypress without the user interface:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ yarn cypress:run
|
|
||||||
```
|
|
||||||
|
|
||||||
This is used to run cypress in CI or in console
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Write some Tests
|
|
||||||
|
|
||||||
Check out the Cypress documentation for further information on how to write tests:
|
|
||||||
[Write-a-simple-test](https://docs.cypress.io/guides/getting-started/writing-your-first-test.html#Write-a-simple-test)
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
# Testing Guide
|
|
||||||
|
|
||||||
## End-to-End Testing
|
|
||||||
|
|
||||||
To test all the pieces together, from the user perspective, we use integration tests. They also show if the the backend and the frontend are working as expected in conjunction and also if the browser likes our app.
|
|
||||||
|
|
||||||
[more...](cypress/README.md)
|
|
||||||
|
|
||||||
## Component Testing
|
|
||||||
|
|
||||||
Individual Vue Components should also be documented and tested properly. This guarantees that they are reusable and the api gets more solid in the process.
|
|
||||||
|
|
||||||
[more...](webapp/testing.md)
|
|
||||||
|
|
||||||
## Unit Testing
|
|
||||||
|
|
||||||
Especially the Backend relies on Unit Tests, as there are no Vue Components.
|
|
||||||
|
|
||||||
[more...](backend/testing.md)
|
|
||||||
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
# Component Testing
|
|
||||||
|
|
||||||
## Linting
|
|
||||||
|
|
||||||
We use [ESLint](https://eslint.org/) to make sure all developers follow certain code guidelines when writing JavaScript.
|
|
||||||
|
|
||||||
Most code editors offer an ESLint plugin which helps detect mistakes already while you are writing code. To run the linter manually before pushing up new code type `yarn lint` into your terminal. Most minor issues can be fixed automatically with the command `yarn lint --fix`.
|
|
||||||
|
|
||||||
## Unit tests
|
|
||||||
|
|
||||||
We write unit tests with the help of [Jest](https://jestjs.io/) and [Vue Test Utils](https://vue-test-utils.vuejs.org/) to make sure our components work in the way they should. In these tests we usually check that a certain input leads to the expected output. They are used to test _functionality_.
|
|
||||||
|
|
||||||
To run all tests use the command `yarn test` in the `/webapp` directory. Other useful commands are:
|
|
||||||
- `yarn test -t test-name` to run tests including `test-name` in their file or test names
|
|
||||||
- `yarn test -o` to run tests related to files that have been changed since the latest commit
|
|
||||||
- `yarn test path/to/component.spec.js` to run a single test file
|
|
||||||
|
|
||||||
## Documentation and manual testing
|
|
||||||
|
|
||||||
[Storybook](https://vue-test-utils.vuejs.org/) is a great tool that performs two important functions in our project:
|
|
||||||
|
|
||||||
### Component documentation
|
|
||||||
|
|
||||||
With Storybook our components can be documented in detail and offer a visual reference to other developers. When all components are properly documented, Storybook can be used as a big component library – where developers can browse through design tokens and components and immediately verify that the component offers the desired functionality.
|
|
||||||
|
|
||||||
### Manual testing in an isolated environment
|
|
||||||
|
|
||||||
When adding new components or changing existing ones, Storybook can be helpful not only to document the feature for future use, but also to test different use cases (e.g. by passing different types of `props`) in an isolated playground.
|
|
||||||
|
|
||||||
With the right addons, Storybook also gives immediate feedback on how well the component complies with accessibility guidelines.
|
|
||||||
|
|
||||||
------
|
|
||||||
|
|
||||||
To run Storybook, first start the app, then enter the following command in a new terminal window: `yarn storybook`. The output should look similar to this:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
The ocelot.social Storybook will then be available on `http://localhost:3002`.
|
|
||||||
20414
package-lock.json
generated
41
package.json
@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "ocelot.social",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "The ocelot.social website",
|
|
||||||
"main": "index.js",
|
|
||||||
"scripts": {
|
|
||||||
"build": "NODE_OPTIONS=--openssl-legacy-provider vuepress build docs",
|
|
||||||
"build-legacy": "vuepress build docs",
|
|
||||||
"dev": "NODE_OPTIONS=--openssl-legacy-provider vuepress dev docs",
|
|
||||||
"test": "textlint \"*.md\" \"docs/**/*.md\""
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/Ocelot-Social-Community/ocelot.social.git"
|
|
||||||
},
|
|
||||||
"author": "Ulf Gebhardt",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/Ocelot-Social-Community/ocelot.social/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/Ocelot-Social-Community/ocelot.social#readme",
|
|
||||||
"devDependencies": {
|
|
||||||
"@textlint-rule/textlint-rule-no-unmatched-pair": "^1.0.9",
|
|
||||||
"textlint": "^13.3.0",
|
|
||||||
"textlint-filter-rule-comments": "^1.2.2",
|
|
||||||
"textlint-rule-apostrophe": "^2.0.0",
|
|
||||||
"textlint-rule-common-misspellings": "^1.0.1",
|
|
||||||
"textlint-rule-doubled-spaces": "^1.0.1",
|
|
||||||
"textlint-rule-max-comma": "^2.0.2",
|
|
||||||
"textlint-rule-no-dead-link": "^5.1.2",
|
|
||||||
"textlint-rule-no-empty-element": "^0.3.1",
|
|
||||||
"textlint-rule-no-empty-section": "^1.1.0",
|
|
||||||
"textlint-rule-no-start-duplicated-conjunction": "^2.0.2",
|
|
||||||
"textlint-rule-no-todo": "^2.0.1",
|
|
||||||
"textlint-rule-no-zero-width-spaces": "^1.0.1",
|
|
||||||
"textlint-rule-period-in-list-item": "^1.0.1",
|
|
||||||
"textlint-rule-write-good": "^2.0.0",
|
|
||||||
"vuepress": "^1.9.8",
|
|
||||||
"vuepress-theme-book": "^0.0.9"
|
|
||||||
}
|
|
||||||
}
|
|
||||||