mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2025-12-13 07:45:56 +00:00
Merge branch 'master' into new-frontend
This commit is contained in:
commit
c19abed0a7
7
.gitignore
vendored
7
.gitignore
vendored
@ -15,8 +15,13 @@ cypress/videos
|
||||
cypress/screenshots/
|
||||
cypress.env.json
|
||||
|
||||
.vuepress/.cache/
|
||||
.vuepress/.temp/
|
||||
.vuepress/dist/
|
||||
|
||||
|
||||
!.gitkeep
|
||||
**/coverage
|
||||
|
||||
release/
|
||||
*~
|
||||
*~
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
import { defineUserConfig } from 'vuepress'
|
||||
import { viteBundler } from '@vuepress/bundler-vite'
|
||||
|
||||
import meta from './config/meta'
|
||||
import theme from './config/theme'
|
||||
import plugins from './config/plugins'
|
||||
|
||||
export default defineUserConfig({
|
||||
pagePatterns: ['**/*.md', '!.vuepress', '!node_modules', '!backend/node_modules', '!webapp/node_modules', '!deployment/src/old'],
|
||||
bundler: viteBundler(),
|
||||
...meta,
|
||||
theme,
|
||||
plugins,
|
||||
})
|
||||
|
||||
@ -1,18 +0,0 @@
|
||||
import { searchProPlugin } from 'vuepress-plugin-search-pro'
|
||||
|
||||
export default [
|
||||
searchProPlugin({
|
||||
indexContent: true,
|
||||
autoSuggestions: true,
|
||||
customFields: [
|
||||
{
|
||||
getter: (page) => page.frontmatter.category,
|
||||
formatter: "Category: $content",
|
||||
},
|
||||
{
|
||||
getter: (page) => page.frontmatter.tag,
|
||||
formatter: "Tag: $content",
|
||||
},
|
||||
],
|
||||
})
|
||||
]
|
||||
@ -27,6 +27,20 @@ export default hopeTheme({
|
||||
mdEnhance: {
|
||||
tabs: true,
|
||||
imgSize: true
|
||||
},
|
||||
searchPro: {
|
||||
indexContent: true,
|
||||
autoSuggestions: true,
|
||||
customFields: [
|
||||
{
|
||||
getter: (page) => page.frontmatter.category,
|
||||
formatter: "Category: $content",
|
||||
},
|
||||
{
|
||||
getter: (page) => page.frontmatter.tag,
|
||||
formatter: "Tag: $content",
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# 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. :-\)
|
||||
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
|
||||
|
||||
|
||||
15
README.md
15
README.md
@ -6,13 +6,12 @@
|
||||
[](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.
|
||||
[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.
|
||||
|
||||
<!-- markdownlint-disable MD033 -->
|
||||
<p align="center">
|
||||
<!-- <a href="https://ocelot.social" target="_blank"> -->
|
||||
<img src="https://raw.githubusercontent.com/Ocelot-Social-Community/Ocelot-Social/master/webapp/static/img/custom/logo-squared.svg" alt="ocelot.social" width="40%" height="40%">
|
||||
<!-- </a> -->
|
||||
<!-- <p align="center"> -->
|
||||
<p style="text-align: center;">
|
||||
<a href="https://ocelot.social" target="_blank"><img src="https://raw.githubusercontent.com/Ocelot-Social-Community/Ocelot-Social/master/webapp/static/img/custom/logo-squared.svg" alt="ocelot.social" width="40%" height="40%"></a>
|
||||
</p>
|
||||
<!-- markdownlint-enable MD033 -->
|
||||
|
||||
@ -69,7 +68,7 @@ Try out our live demo network, see [here](#live-demo-and-developer-logins).
|
||||
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.
|
||||
- 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.
|
||||
@ -140,11 +139,11 @@ $ cd Ocelot-Social
|
||||
|
||||
### Live Demo and Developer Logins
|
||||
|
||||
**Try out our deployed <!-- [ -->development environment<!--](https://stage.ocelot.social)-->.**
|
||||
**Try out our deployed [development environment](https://stage.ocelot.social).**
|
||||
|
||||
Visit our staging networks:
|
||||
|
||||
- central staging network: <!-- [ -->stage.ocelot.social<!-- ](https://stage.ocelot.social)-->
|
||||
- central staging network: [stage.ocelot.social](https://stage.ocelot.social)
|
||||
<!-- - rebranded staging network: [rebrand.ocelot.social](https://stage.ocelot.social). -->
|
||||
|
||||
#### Login
|
||||
|
||||
@ -39,6 +39,8 @@ module.exports = defineConfig({
|
||||
supportFile: "cypress/support/e2e.js",
|
||||
retries: 0,
|
||||
video: false,
|
||||
viewportHeight: 720,
|
||||
viewportWidth: 1290,
|
||||
setupNodeEvents,
|
||||
},
|
||||
env: parsed
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import { Then } from "@badeball/cypress-cucumber-preprocessor";
|
||||
import 'cypress-network-idle';
|
||||
|
||||
Then("I click the checkbox show donations progress bar and save", () => {
|
||||
cy.get("#showDonations").click()
|
||||
cy.get(".donations-info-button").click()
|
||||
cy.waitForNetworkIdle(2000)
|
||||
})
|
||||
|
||||
@ -9,20 +9,18 @@ This repository is an in use template to rebrand, configure, and deploy [ocelot.
|
||||
The forked original repository is [stage.ocelot.social](https://github.com/Ocelot-Social-Community/stage.ocelot.social).
|
||||
|
||||
<!-- markdownlint-disable MD033 -->
|
||||
<p align="center">
|
||||
<!-- <a href="https://ocelot.social" target="_blank"> -->
|
||||
<img src="../webapp/static/img/custom/logo-squared.svg" alt="ocelot.social" width="40%" height="40%">
|
||||
<!-- </a> -->
|
||||
<p style="text-align: center;">
|
||||
<a href="https://ocelot.social" target="_blank"><img src="https://raw.githubusercontent.com/Ocelot-Social-Community/Ocelot-Social/master/webapp/static/img/custom/logo-squared.svg" alt="ocelot.social" width="40%" height="40%"></a>
|
||||
</p>
|
||||
<!-- markdownlint-enable MD033 -->
|
||||
|
||||
## Live demo
|
||||
|
||||
__Try out our deployed <!-- [ -->development environment<!-- ](https://stage.ocelot.social)-->.__
|
||||
__Try out our deployed [development environment](https://stage.ocelot.social).__
|
||||
|
||||
Visit our staging networks:
|
||||
|
||||
- central staging network: <!-- [ -->stage.ocelot.social<!-- ](https://stage.ocelot.social)-->
|
||||
- central staging network: [stage.ocelot.social](https://stage.ocelot.social)
|
||||
<!-- - rebranded staging network: [rebrand.ocelot.social](https://stage.ocelot.social). -->
|
||||
|
||||
Logins:
|
||||
|
||||
@ -49,6 +49,49 @@ Skip `Patch & Minor Version Upgrades` for now.
|
||||
You don't need a 1-click app. Our helmet script will install the required NGINXs.
|
||||
Therefore, skip this step as well.
|
||||
|
||||
For a 1-click Kubernetes Dashboard or alternatives, follow the next steps.
|
||||
|
||||
## Install Kubernetes Dashboard
|
||||
|
||||
We recommend installing a Kubernetes Dashboard, as DigitalOcean no longer offers a pre-installed dashboard.
|
||||
|
||||
- 1-click-deployment of [Kubernetes Dashboard on DigitalOcean marketplace](https://marketplace.digitalocean.com/apps/kubernetes-dashboard)
|
||||
|
||||
There you will also find a section entitled `Getting Started`, which describes how you can log in from your local computer.
|
||||
|
||||
Very short description:
|
||||
|
||||
### In your DigitalOcean Account
|
||||
|
||||
For authentication, download the current cluster configuration file from DigitalOcean.
|
||||
|
||||
### In Terminal
|
||||
|
||||
Set the context of the cluster by command:
|
||||
|
||||
```bash
|
||||
$ kubectl config use-context <context-name>
|
||||
```
|
||||
|
||||
Port-forward the Kubernetes Dashboard to your local machine:
|
||||
|
||||
```bash
|
||||
# save pod name
|
||||
$ export POD_NAME=$(kubectl get pods -n kubernetes-dashboard -l "app.kubernetes.io/name=kubernetes-dashboard,app.kubernetes.io/instance=kubernetes-dashboard" -o jsonpath="{.items[0].metadata.name}")
|
||||
# forward port
|
||||
$ kubectl -n kubernetes-dashboard port-forward $POD_NAME 8443:8443
|
||||
```
|
||||
|
||||
### Log-In to Kubernetes Dashboard
|
||||
|
||||
Access the URL in your local web browser at `https://127.0.0.1:8443/`, and log in using your Kubernetes cluster credentials – downloaded config file. You may encounter a certificate warning, so make sure to override it.
|
||||
|
||||
## Alternatives to Kubernetes Dashboard
|
||||
|
||||
DigitalOcean has a website about Kubernetes Dashboard and alternatives:
|
||||
|
||||
- <https://www.digitalocean.com/community/conceptual-articles/kubernetes-visualization-tools?mkt_tok=MTEzLURUTi0yNjYAAAGQ0YS-wbZaWn5th-m86-fM7vgiLvxNipWpAsUrgd2z4YgiMB0aRgCIDYEiC0Y2c0H9tBsICZQ5ORKgssOgeSjOKSEfN3i7xUpzqXbdZiYxNL2Q>
|
||||
|
||||
## DNS Configuration
|
||||
|
||||
There are the following two ways to set up the DNS.
|
||||
|
||||
2112
package-lock.json
generated
2112
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
11
package.json
11
package.json
@ -43,7 +43,7 @@
|
||||
"auto-changelog": "^2.3.0",
|
||||
"bcryptjs": "^2.4.3",
|
||||
"cross-env": "^7.0.3",
|
||||
"cypress": "^13.6.3",
|
||||
"cypress": "^13.6.4",
|
||||
"cypress-network-idle": "^1.14.2",
|
||||
"date-fns": "^2.25.0",
|
||||
"dotenv": "^16.3.1",
|
||||
@ -52,7 +52,7 @@
|
||||
"import": "^0.0.6",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"mock-socket": "^9.0.3",
|
||||
"multiple-cucumber-html-reporter": "^3.6.0",
|
||||
"multiple-cucumber-html-reporter": "^3.6.1",
|
||||
"neo4j-driver": "^4.3.4",
|
||||
"neode": "^0.4.8",
|
||||
"rosie": "^2.1.0",
|
||||
@ -60,9 +60,10 @@
|
||||
"wait-on": "^7.2.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"vuepress": "^2.0.0-rc.0",
|
||||
"vuepress-plugin-search-pro": "^2.0.0-rc.6",
|
||||
"vuepress-theme-hope": "^2.0.0-rc.11"
|
||||
"@vuepress/bundler-vite": "^2.0.0-rc.2",
|
||||
"vuepress": "^2.0.0-rc.2",
|
||||
"vuepress-plugin-search-pro": "^2.0.0-rc.15",
|
||||
"vuepress-theme-hope": "^2.0.0-rc.15"
|
||||
},
|
||||
"resolutions": {
|
||||
"set-value": "^2.0.1",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<ds-text class="date-time-range" align="left" color="soft" :size="size">
|
||||
<div>
|
||||
<div class="date-time-row">
|
||||
<div>
|
||||
<base-icon name="calendar" data-test="calendar" />
|
||||
{{ getStartDateString }}
|
||||
@ -14,8 +14,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="!isSameDayLocal">
|
||||
—
|
||||
<div>
|
||||
<base-icon name="arrow-down" />
|
||||
<div class="ds-flex date-time-row">
|
||||
<div>
|
||||
<base-icon name="calendar" data-test="calendar" />
|
||||
{{ getEndDateString }}
|
||||
@ -69,11 +69,7 @@ export default {
|
||||
return !this.endDateAsDate || isSameYear(this.endDateAsDate, this.startDateAsDate)
|
||||
},
|
||||
getStartDateString() {
|
||||
let startDateFormat = this.$t('components.dateTimeRange.yearMonthDay')
|
||||
if (!this.isSameDayLocal && this.isSameYearLocal) {
|
||||
startDateFormat = this.$t('components.dateTimeRange.monthDay')
|
||||
}
|
||||
return format(this.startDateAsDate, startDateFormat)
|
||||
return format(this.startDateAsDate, this.$t('components.dateTimeRange.yearMonthDay'))
|
||||
},
|
||||
getStartTimeString() {
|
||||
return format(new Date(this.startDate), this.$t('components.dateTimeRange.hourMinute'))
|
||||
@ -95,7 +91,12 @@ export default {
|
||||
<style lang="scss">
|
||||
.date-time-range {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
|
||||
.date-time-row {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
</template>
|
||||
<client-only>
|
||||
<div class="post-user-row">
|
||||
<user-teaser :user="post.author" :group="post.group" :date-time="post.createdAt" />
|
||||
<user-teaser :user="post.author" :group="post.group" />
|
||||
<hc-ribbon
|
||||
:class="[isPinned ? '--pinned' : '', post.image ? 'post-ribbon-w-img' : 'post-ribbon']"
|
||||
:text="ribbonText"
|
||||
@ -25,25 +25,27 @@
|
||||
</div>
|
||||
</client-only>
|
||||
<h2 class="title hyphenate-text">{{ post.title }}</h2>
|
||||
<ds-space
|
||||
v-if="post && post.postType[0] === 'Event'"
|
||||
margin-bottom="small"
|
||||
style="padding: 5px"
|
||||
>
|
||||
<location-teaser
|
||||
class="event-info"
|
||||
size="small"
|
||||
:venue="post.eventVenue"
|
||||
:locationName="post.eventLocationName"
|
||||
:isOnline="post.eventIsOnline"
|
||||
/>
|
||||
<date-time-range
|
||||
class="event-info"
|
||||
size="small"
|
||||
:startDate="post.eventStart"
|
||||
:endDate="post.eventEnd"
|
||||
/>
|
||||
</ds-space>
|
||||
<client-only>
|
||||
<ds-space
|
||||
v-if="post && post.postType[0] === 'Event'"
|
||||
margin-bottom="small"
|
||||
style="padding: 5px"
|
||||
>
|
||||
<location-teaser
|
||||
class="event-info"
|
||||
size="base"
|
||||
:venue="post.eventVenue"
|
||||
:locationName="post.eventLocationName"
|
||||
:isOnline="post.eventIsOnline"
|
||||
/>
|
||||
<date-time-range
|
||||
class="event-info"
|
||||
size="base"
|
||||
:startDate="post.eventStart"
|
||||
:endDate="post.eventEnd"
|
||||
/>
|
||||
</ds-space>
|
||||
</client-only>
|
||||
<!-- TODO: replace editor content with tiptap render view -->
|
||||
<!-- eslint-disable-next-line vue/no-v-html -->
|
||||
<div class="content hyphenate-text" v-html="excerpt" />
|
||||
@ -98,6 +100,14 @@
|
||||
/>
|
||||
</client-only>
|
||||
</footer>
|
||||
<client-only>
|
||||
<div class="date-row" v-if="post.createdAt">
|
||||
<span class="text">
|
||||
<relative-date-time :date-time="post.createdAt" />
|
||||
<slot name="dateTime"></slot>
|
||||
</span>
|
||||
</div>
|
||||
</client-only>
|
||||
</base-card>
|
||||
</nuxt-link>
|
||||
</template>
|
||||
@ -109,6 +119,7 @@ import CounterIcon from '~/components/_new/generic/CounterIcon/CounterIcon'
|
||||
import DateTimeRange from '~/components/DateTimeRange/DateTimeRange'
|
||||
import HcRibbon from '~/components/Ribbon'
|
||||
import LocationTeaser from '~/components/LocationTeaser/LocationTeaser'
|
||||
import RelativeDateTime from '~/components/RelativeDateTime'
|
||||
import UserTeaser from '~/components/UserTeaser/UserTeaser'
|
||||
import { mapGetters } from 'vuex'
|
||||
import PostMutations from '~/graphql/PostMutations'
|
||||
@ -123,6 +134,7 @@ export default {
|
||||
DateTimeRange,
|
||||
HcRibbon,
|
||||
LocationTeaser,
|
||||
RelativeDateTime,
|
||||
UserTeaser,
|
||||
},
|
||||
props: {
|
||||
@ -251,6 +263,7 @@ export default {
|
||||
flex-direction: column;
|
||||
overflow: visible;
|
||||
height: 100%;
|
||||
padding-bottom: $space-x-small;
|
||||
|
||||
> .hero-image {
|
||||
border-top-left-radius: 5px;
|
||||
@ -266,12 +279,6 @@ export default {
|
||||
margin-bottom: $space-small;
|
||||
}
|
||||
|
||||
& .event-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
> .footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
@ -301,5 +308,21 @@ export default {
|
||||
.user-teaser {
|
||||
margin-bottom: $space-small;
|
||||
}
|
||||
> .date-row {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
margin-top: $space-small;
|
||||
> .text {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
color: $text-color-soft;
|
||||
font-size: $font-size-small;
|
||||
|
||||
> .ds-text {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -14,12 +14,12 @@
|
||||
<nuxt-link v-if="linkToProfile" :to="userLink">
|
||||
<span class="text">
|
||||
<span class="slug">{{ userSlug }}</span>
|
||||
<span v-if="!userOnly" class="name">{{ userName }}</span>
|
||||
<span class="name">{{ userName }}</span>
|
||||
</span>
|
||||
</nuxt-link>
|
||||
<span v-else class="text">
|
||||
<span class="slug">{{ userSlug }}</span>
|
||||
<span v-if="!userOnly" class="name">{{ userName }}</span>
|
||||
<span class="name">{{ userName }}</span>
|
||||
</span>
|
||||
<span v-if="wide"> </span>
|
||||
<span v-if="group">
|
||||
@ -34,12 +34,11 @@
|
||||
</nuxt-link>
|
||||
</span>
|
||||
</div>
|
||||
<span v-if="!userOnly" class="text">
|
||||
<span v-if="!userOnly && dateTime" class="text">
|
||||
<base-icon name="clock" />
|
||||
<relative-date-time :date-time="dateTime" />
|
||||
<slot name="dateTime"></slot>
|
||||
</span>
|
||||
<span v-else class="text">{{ userName }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -22,8 +22,7 @@ const ORGANIZATION = defaultPageParamsPages.ORGANIZATION.overwrite({
|
||||
const DONATE = defaultPageParamsPages.DONATE.overwrite({
|
||||
// if defined it's dominating
|
||||
externalLink: {
|
||||
// we use 'ocelot-social.herokuapp.com' at the moment, because redirections of 'ocelot.social' subpages are not working correctly
|
||||
url: 'https://ocelot-social.herokuapp.com/donations',
|
||||
url: 'https://busfaktor.org/en/spenden',
|
||||
target: '_blank',
|
||||
},
|
||||
|
||||
@ -39,8 +38,7 @@ const DONATE = defaultPageParamsPages.DONATE.overwrite({
|
||||
})
|
||||
const IMPRINT = defaultPageParamsPages.IMPRINT.overwrite({
|
||||
externalLink: {
|
||||
// we use 'ocelot-social.herokuapp.com' at the moment, because redirections of 'ocelot.social' subpages are not working correctly
|
||||
url: 'https://ocelot-social.herokuapp.com/imprint',
|
||||
url: 'http://ocelot.social/en/impressum',
|
||||
target: '_blank',
|
||||
},
|
||||
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
<client-only>
|
||||
<group-content-menu
|
||||
v-if="isGroupOwner"
|
||||
class="group-content-menu"
|
||||
class="group-profile-content-menu"
|
||||
:usage="'groupProfile'"
|
||||
:group="group || {}"
|
||||
placement="bottom-end"
|
||||
@ -639,8 +639,8 @@ export default {
|
||||
margin: auto;
|
||||
margin-top: -60px;
|
||||
}
|
||||
.page-name-group-id-slug {
|
||||
.ds-flex-item:first-child .group-content-menu {
|
||||
.group-profile {
|
||||
.ds-flex-item:first-child .group-profile-content-menu {
|
||||
position: absolute;
|
||||
top: $space-x-small;
|
||||
right: $space-x-small;
|
||||
|
||||
@ -405,12 +405,6 @@ export default {
|
||||
filter: blur($blur-radius);
|
||||
}
|
||||
|
||||
& .event-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
.blur-toggle {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user