Compare commits
35 commits
main
...
oberlausit
Author | SHA1 | Date | |
---|---|---|---|
778a69cd | 483dbcc581 | ||
778a69cd | 9b58e93522 | ||
778a69cd | 4bfad95885 | ||
778a69cd | acd733bffa | ||
778a69cd | bb4c85f603 | ||
778a69cd | f514ddd726 | ||
778a69cd | f6a1b2822d | ||
778a69cd | 9e82a9d9af | ||
jona | 053e0010a0 | ||
jona | 187b3a5064 | ||
778a69cd | a129d71b29 | ||
summersamara | 595a3dca8b | ||
778a69cd | 70c38863a9 | ||
778a69cd | 2f7b1898de | ||
778a69cd | 60fa49a7b1 | ||
778a69cd | aaee131f1d | ||
778a69cd | 13306dc1bc | ||
778a69cd | 8289eea9c8 | ||
778a69cd | f1304b7df8 | ||
778a69cd | ce6ffc4e66 | ||
19561da63d | |||
03b2e1f634 | |||
8e5093ab41 | |||
750072b3b1 | |||
3aa10b77b3 | |||
778a69cd | a2d12990a4 | ||
778a69cd | 45f030f227 | ||
778a69cd | f7749a1e2b | ||
778a69cd | 3bf5e7a95f | ||
778a69cd | dbd91b1a21 | ||
778a69cd | d1228ca43f | ||
778a69cd | 62afefa47e | ||
778a69cd | e1c75ceecd | ||
778a69cd | 0f6296d164 | ||
778a69cd | 158d36d6ec |
|
@ -1,4 +1,4 @@
|
||||||
FROM elixir:alpine
|
FROM elixir:1.13.4-alpine
|
||||||
|
|
||||||
RUN apk add --no-cache inotify-tools postgresql-client yarn file make gcc libc-dev argon2 imagemagick cmake build-base libwebp-tools bash ncurses git python3
|
RUN apk add --no-cache inotify-tools postgresql-client yarn file make gcc libc-dev argon2 imagemagick cmake build-base libwebp-tools bash ncurses git python3
|
||||||
|
|
||||||
|
|
27
flake.lock
Normal file
27
flake.lock
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1691368598,
|
||||||
|
"narHash": "sha256-ia7li22keBBbj02tEdqjVeLtc7ZlSBuhUk+7XTUFr14=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "5a8e9243812ba528000995b294292d3b5e120947",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
27
flake.nix
Normal file
27
flake.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
description = "A very basic flake";
|
||||||
|
|
||||||
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs }: {
|
||||||
|
|
||||||
|
packages.x86_64-linux.hello = nixpkgs.legacyPackages.x86_64-linux.hello;
|
||||||
|
|
||||||
|
packages.x86_64-linux.default = self.packages.x86_64-linux.hello;
|
||||||
|
|
||||||
|
devShells.x86_64-linux.default = let
|
||||||
|
pkgs = import nixpkgs { system = "x86_64-linux"; };
|
||||||
|
in pkgs.mkShell {
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
elixir
|
||||||
|
cmake
|
||||||
|
imagemagick
|
||||||
|
(yarn.override {
|
||||||
|
nodejs = nodejs-18_x;
|
||||||
|
})
|
||||||
|
nodejs-18_x
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
|
@ -70,7 +70,7 @@ import { Route } from "vue-router";
|
||||||
},
|
},
|
||||||
metaInfo() {
|
metaInfo() {
|
||||||
return {
|
return {
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -2,29 +2,6 @@
|
||||||
<div class="container section" id="error-wrapper">
|
<div class="container section" id="error-wrapper">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<section>
|
<section>
|
||||||
<div class="picture-wrapper">
|
|
||||||
<picture>
|
|
||||||
<source
|
|
||||||
srcset="
|
|
||||||
/img/pics/error-480w.webp 1x,
|
|
||||||
/img/pics/error-1024w.webp 2x
|
|
||||||
"
|
|
||||||
type="image/webp"
|
|
||||||
/>
|
|
||||||
<source
|
|
||||||
srcset="/img/pics/error-480w.jpg 1x, /img/pics/error-1024w.jpg 2x"
|
|
||||||
type="image/jpeg"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<img
|
|
||||||
:src="`/img/pics/error-480w.jpg`"
|
|
||||||
alt=""
|
|
||||||
width="480"
|
|
||||||
height="312"
|
|
||||||
loading="lazy"
|
|
||||||
/>
|
|
||||||
</picture>
|
|
||||||
</div>
|
|
||||||
<b-message type="is-danger" class="is-size-5">
|
<b-message type="is-danger" class="is-size-5">
|
||||||
<h1>
|
<h1>
|
||||||
{{
|
{{
|
||||||
|
@ -197,7 +174,7 @@ import RouteName from "@/router/name";
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
title: this.$t("Error") as string,
|
title: this.$t("Error") as string,
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
>
|
>
|
||||||
<div class="datetime-container-header" />
|
<div class="datetime-container-header" />
|
||||||
<div class="datetime-container-content">
|
<div class="datetime-container-content">
|
||||||
|
<time :datetime="dateObj.toISOString()" class="wkday">{{ wkday }}</time>
|
||||||
<time :datetime="dateObj.toISOString()" class="day">{{ day }}</time>
|
<time :datetime="dateObj.toISOString()" class="day">{{ day }}</time>
|
||||||
<time :datetime="dateObj.toISOString()" class="month">{{ month }}</time>
|
<time :datetime="dateObj.toISOString()" class="month">{{ month }}</time>
|
||||||
</div>
|
</div>
|
||||||
|
@ -39,6 +40,10 @@ export default class DateCalendarIcon extends Vue {
|
||||||
return new Date(this.$props.date);
|
return new Date(this.$props.date);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get wkday(): string {
|
||||||
|
return this.dateObj.toLocaleString(undefined, { weekday: "short" });
|
||||||
|
}
|
||||||
|
|
||||||
get month(): string {
|
get month(): string {
|
||||||
return this.dateObj.toLocaleString(undefined, { month: "short" });
|
return this.dateObj.toLocaleString(undefined, { month: "short" });
|
||||||
}
|
}
|
||||||
|
@ -62,17 +67,17 @@ div.datetime-container {
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
width: calc(40px * var(--small));
|
width: calc(55px * var(--small));
|
||||||
box-shadow: 0 0 12px rgba(0, 0, 0, 0.2);
|
box-shadow: 0 0 12px rgba(0, 0, 0, 0.2);
|
||||||
height: calc(40px * var(--small));
|
height: calc(55px * var(--small));
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
|
||||||
.datetime-container-header {
|
.datetime-container-header {
|
||||||
height: calc(10px * var(--small));
|
height: calc(12px * var(--small));
|
||||||
background: #f3425f;
|
background: #f3425f;
|
||||||
}
|
}
|
||||||
.datetime-container-content {
|
.datetime-container-content {
|
||||||
height: calc(30px * var(--small));
|
height: calc(43px * var(--small));
|
||||||
}
|
}
|
||||||
|
|
||||||
time {
|
time {
|
||||||
|
@ -80,6 +85,13 @@ div.datetime-container {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: $violet-3;
|
color: $violet-3;
|
||||||
|
|
||||||
|
&.wkday {
|
||||||
|
padding: 2px 0;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 12px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
&.month {
|
&.month {
|
||||||
padding: 2px 0;
|
padding: 2px 0;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
|
|
|
@ -125,7 +125,14 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="content has-text-grey-dark has-text-centered">
|
<div v-else class="content has-text-grey-dark has-text-centered">
|
||||||
<p>{{ $t("Your profile will be shown as contact.") }}</p>
|
<p>
|
||||||
|
{{ $t("Your profile will be shown as contact.") }}
|
||||||
|
{{
|
||||||
|
$t(
|
||||||
|
"To create an event for a group you have to be at least a moderator in that group."
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,22 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<footer class="footer" ref="footer">
|
<footer class="footer" ref="footer">
|
||||||
<picture>
|
|
||||||
<source
|
|
||||||
:srcset="`/img/pics/footer_${random}-1024w.webp 1x, /img/pics/footer_${random}-1920w.webp 2x`"
|
|
||||||
type="image/webp"
|
|
||||||
/>
|
|
||||||
<source
|
|
||||||
:srcset="`/img/pics/footer_${random}-1024w.jpg 1x, /img/pics/footer_${random}-1920w.jpg 2x`"
|
|
||||||
type="image/jpeg"
|
|
||||||
/>
|
|
||||||
<img
|
|
||||||
:src="`/img/pics/footer_${random}-1024w.jpg`"
|
|
||||||
alt=""
|
|
||||||
width="5234"
|
|
||||||
height="2189"
|
|
||||||
loading="lazy"
|
|
||||||
/>
|
|
||||||
</picture>
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<b-select
|
<b-select
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -16,7 +16,7 @@
|
||||||
</template>
|
</template>
|
||||||
<template slot="start">
|
<template slot="start">
|
||||||
<b-navbar-item tag="router-link" :to="{ name: RouteName.SEARCH }">{{
|
<b-navbar-item tag="router-link" :to="{ name: RouteName.SEARCH }">{{
|
||||||
$t("Explore")
|
$t("Filter")
|
||||||
}}</b-navbar-item>
|
}}</b-navbar-item>
|
||||||
<b-navbar-item
|
<b-navbar-item
|
||||||
v-if="currentActor.id && currentUser.isLoggedIn"
|
v-if="currentActor.id && currentUser.isLoggedIn"
|
||||||
|
@ -332,7 +332,7 @@ nav {
|
||||||
}
|
}
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
height: 1.75rem;
|
height: 2.75rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -388,6 +388,9 @@
|
||||||
"From the {startDate} to the {endDate}": "Vom {startDate} bis zum {endDate}",
|
"From the {startDate} to the {endDate}": "Vom {startDate} bis zum {endDate}",
|
||||||
"From yourself": "Von Ihnen selbst",
|
"From yourself": "Von Ihnen selbst",
|
||||||
"Fully accessible with a wheelchair": "Komplett barrierefrei für Rollstühle",
|
"Fully accessible with a wheelchair": "Komplett barrierefrei für Rollstühle",
|
||||||
|
"Smoke free": "Rauchfrei",
|
||||||
|
"Whether smoking is prohibited during the event": "Während der Veranstaltung wird nicht geraucht",
|
||||||
|
"Smoking allowed": "Rauchen gestattet",
|
||||||
"Gather ⋅ Organize ⋅ Mobilize": "Treffen ⋅ Organisieren ⋅ Mobilisieren",
|
"Gather ⋅ Organize ⋅ Mobilize": "Treffen ⋅ Organisieren ⋅ Mobilisieren",
|
||||||
"General": "Allgemein",
|
"General": "Allgemein",
|
||||||
"General information": "Allgemeine Informationen",
|
"General information": "Allgemeine Informationen",
|
||||||
|
@ -1191,6 +1194,7 @@
|
||||||
"Your participation will be validated once you click the confirmation link into the email.": "Ihre Teilnahme wird bestätigt, sobald Sie den Bestätigungslink in der E-Mail anklicken.",
|
"Your participation will be validated once you click the confirmation link into the email.": "Ihre Teilnahme wird bestätigt, sobald Sie den Bestätigungslink in der E-Mail anklicken.",
|
||||||
"Your position was not available.": "Deine Position ist nicht verfügbar.",
|
"Your position was not available.": "Deine Position ist nicht verfügbar.",
|
||||||
"Your profile will be shown as contact.": "Dein Profil wird als Kontakt angezeigt.",
|
"Your profile will be shown as contact.": "Dein Profil wird als Kontakt angezeigt.",
|
||||||
|
"To create an event for a group you have to be at least a moderator in that group.": "Um eine Veranstaltung für eine Gruppe zu erstellen, musst du mindestens Moderator in dieser Gruppe sein.",
|
||||||
"Your timezone is currently set to {timezone}.": "Ihre Zeitzone ist aktuell {timezone}.",
|
"Your timezone is currently set to {timezone}.": "Ihre Zeitzone ist aktuell {timezone}.",
|
||||||
"Your timezone was detected as {timezone}.": "Ihre Zeitzone wurde erkannt als {timezone}.",
|
"Your timezone was detected as {timezone}.": "Ihre Zeitzone wurde erkannt als {timezone}.",
|
||||||
"Your timezone {timezone} isn't supported.": "Ihre Zeitzone {timezone} wird nicht unterstützt.",
|
"Your timezone {timezone} isn't supported.": "Ihre Zeitzone {timezone} wird nicht unterstützt.",
|
||||||
|
|
|
@ -689,6 +689,7 @@
|
||||||
"Pick a profile or a group": "Pick a profile or a group",
|
"Pick a profile or a group": "Pick a profile or a group",
|
||||||
"Add a contact": "Add a contact",
|
"Add a contact": "Add a contact",
|
||||||
"Your profile will be shown as contact.": "Your profile will be shown as contact.",
|
"Your profile will be shown as contact.": "Your profile will be shown as contact.",
|
||||||
|
"To create an event for a group you have to be at least a moderator in that group.": "To create an event for a group you have to be at least a moderator in that group.",
|
||||||
"Pick": "Pick",
|
"Pick": "Pick",
|
||||||
"The event will show as attributed to your personal profile.": "The event will show as attributed to your personal profile.",
|
"The event will show as attributed to your personal profile.": "The event will show as attributed to your personal profile.",
|
||||||
"The event will show as attributed to this group.": "The event will show as attributed to this group.",
|
"The event will show as attributed to this group.": "The event will show as attributed to this group.",
|
||||||
|
@ -1066,6 +1067,9 @@
|
||||||
"Not accessible with a wheelchair": "Not accessible with a wheelchair",
|
"Not accessible with a wheelchair": "Not accessible with a wheelchair",
|
||||||
"Partially accessible with a wheelchair": "Partially accessible with a wheelchair",
|
"Partially accessible with a wheelchair": "Partially accessible with a wheelchair",
|
||||||
"Fully accessible with a wheelchair": "Fully accessible with a wheelchair",
|
"Fully accessible with a wheelchair": "Fully accessible with a wheelchair",
|
||||||
|
"Smoke free": "Smoke free",
|
||||||
|
"Whether smoking is prohibited during the event": "Whether smoking is prohibited during the event",
|
||||||
|
"Smoking allowed": "Smoking allowed",
|
||||||
"YouTube replay": "YouTube replay",
|
"YouTube replay": "YouTube replay",
|
||||||
"The URL where the event live can be watched again after it has ended": "The URL where the event live can be watched again after it has ended",
|
"The URL where the event live can be watched again after it has ended": "The URL where the event live can be watched again after it has ended",
|
||||||
"Twitch replay": "Twitch replay",
|
"Twitch replay": "Twitch replay",
|
||||||
|
@ -1331,4 +1335,4 @@
|
||||||
"Activate notifications": "Activate notifications",
|
"Activate notifications": "Activate notifications",
|
||||||
"Deactivate notifications": "Deactivate notifications",
|
"Deactivate notifications": "Deactivate notifications",
|
||||||
"Membership requests will be approved by a group moderator": "Membership requests will be approved by a group moderator"
|
"Membership requests will be approved by a group moderator": "Membership requests will be approved by a group moderator"
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,22 @@ export const eventMetaDataList: IEventMetadataDescription[] = [
|
||||||
},
|
},
|
||||||
category: EventMetadataCategories.ACCESSIBILITY,
|
category: EventMetadataCategories.ACCESSIBILITY,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
icon: "smoking-off",
|
||||||
|
key: "mz:accessibility:smokeFree",
|
||||||
|
label: i18n.t("Smoke free") as string,
|
||||||
|
description: i18n.t(
|
||||||
|
"Whether smoking is prohibited during the event"
|
||||||
|
) as string,
|
||||||
|
value: "false",
|
||||||
|
type: EventMetadataType.BOOLEAN,
|
||||||
|
keyType: EventMetadataKeyType.PLAIN,
|
||||||
|
choices: {
|
||||||
|
true: i18n.t("Smoke free") as string,
|
||||||
|
false: i18n.t("Smoking allowed") as string,
|
||||||
|
},
|
||||||
|
category: EventMetadataCategories.ACCESSIBILITY,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
icon: "youtube",
|
icon: "youtube",
|
||||||
key: "mz:replay:youtube:url",
|
key: "mz:replay:youtube:url",
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
@import "~bulma/sass/utilities/derived-variables.sass";
|
@import "~bulma/sass/utilities/derived-variables.sass";
|
||||||
|
|
||||||
$bleuvert: #1e7d97;
|
$bleuvert: #1e7d97;
|
||||||
$jaune: #ffd599;
|
$potsdamnred: #e08c96;
|
||||||
$violet: #424056;
|
$violet: #424056;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,7 +44,7 @@ $yellow-4: #f7ba30;
|
||||||
|
|
||||||
$primary: $bleuvert;
|
$primary: $bleuvert;
|
||||||
$primary-invert: findColorInvert($primary);
|
$primary-invert: findColorInvert($primary);
|
||||||
$secondary: $jaune;
|
$secondary: $potsdamnred;
|
||||||
$secondary-invert: findColorInvert($secondary);
|
$secondary-invert: findColorInvert($secondary);
|
||||||
|
|
||||||
$background-color: $violet-2;
|
$background-color: $violet-2;
|
||||||
|
|
|
@ -134,7 +134,6 @@
|
||||||
!$apollo.loading
|
!$apollo.loading
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="img-container" :class="{ webp: supportsWebPFormat }" />
|
|
||||||
<div class="content has-text-centered">
|
<div class="content has-text-centered">
|
||||||
<p>
|
<p>
|
||||||
{{
|
{{
|
||||||
|
|
|
@ -46,7 +46,6 @@
|
||||||
>
|
>
|
||||||
<div class="columns is-vertical is-centered">
|
<div class="columns is-vertical is-centered">
|
||||||
<div class="column is-three-quarters">
|
<div class="column is-three-quarters">
|
||||||
<div class="img-container" :class="{ webp: supportsWebPFormat }" />
|
|
||||||
<div class="content has-text-centered">
|
<div class="content has-text-centered">
|
||||||
<p>
|
<p>
|
||||||
{{ $t("You are not part of any group.") }}
|
{{ $t("You are not part of any group.") }}
|
||||||
|
@ -110,7 +109,7 @@ import RouteName from "../../router/name";
|
||||||
metaInfo() {
|
metaInfo() {
|
||||||
return {
|
return {
|
||||||
title: this.$t("My groups") as string,
|
title: this.$t("My groups") as string,
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -215,7 +215,7 @@ export type ActivityFilter = ActivityType | ActivityAuthorFilter | null;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
group: this.group?.name,
|
group: this.group?.name,
|
||||||
}) as string,
|
}) as string,
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -11,14 +11,6 @@
|
||||||
<h1 class="title">
|
<h1 class="title">
|
||||||
{{ config.slogan || $t("Gather ⋅ Organize ⋅ Mobilize") }}
|
{{ config.slogan || $t("Gather ⋅ Organize ⋅ Mobilize") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
|
||||||
v-html="
|
|
||||||
$t('Join <b>{instance}</b>, a Mobilizon instance', {
|
|
||||||
instance: config.name,
|
|
||||||
})
|
|
||||||
"
|
|
||||||
/>
|
|
||||||
<p class="instance-description">{{ config.description }}</p>
|
|
||||||
<!-- We don't invite to find other instances yet -->
|
<!-- We don't invite to find other instances yet -->
|
||||||
<!-- <p v-if="!config.registrationsOpen">
|
<!-- <p v-if="!config.registrationsOpen">
|
||||||
{{ $t("This instance isn't opened to registrations, but you can register on other instances.") }}
|
{{ $t("This instance isn't opened to registrations, but you can register on other instances.") }}
|
||||||
|
@ -51,18 +43,26 @@
|
||||||
>
|
>
|
||||||
<section class="events-recent">
|
<section class="events-recent">
|
||||||
<h2 class="title">
|
<h2 class="title">
|
||||||
{{ $t("Last published events") }}
|
{{ $t("Upcoming events") }}
|
||||||
</h2>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
<i18n tag="span" path="On {instance} and other federated instances">
|
<i18n tag="span" path="On {instance} and other federated instances">
|
||||||
<b slot="instance">{{ config.name }}</b>
|
<b slot="instance">{{ config.name }}</b>
|
||||||
</i18n>
|
</i18n>
|
||||||
</p>
|
</p>
|
||||||
<div v-if="this.events.total > 0">
|
<div v-if="events.elements.length > 0">
|
||||||
<multi-card :events="events.elements.slice(0, 6)" />
|
<multi-card class="my-4" :events="events.elements" />
|
||||||
|
<div class="pagination" v-if="events.total > EVENT_PAGE_LIMIT">
|
||||||
|
<b-pagination
|
||||||
|
:total="events.total"
|
||||||
|
v-model="featuredEventPage"
|
||||||
|
:per-page="EVENT_PAGE_LIMIT"
|
||||||
|
>
|
||||||
|
</b-pagination>
|
||||||
|
</div>
|
||||||
<span class="view-all">
|
<span class="view-all">
|
||||||
<router-link :to="{ name: RouteName.SEARCH }"
|
<router-link :to="{ name: RouteName.SEARCH }"
|
||||||
>{{ $t("View everything") }} >></router-link
|
>{{ $t("Filter") }} >></router-link
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -72,61 +72,6 @@
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
<div id="picture" v-if="config && (!currentUser.id || !currentActor.id)">
|
<div id="picture" v-if="config && (!currentUser.id || !currentActor.id)">
|
||||||
<div class="picture-container">
|
|
||||||
<picture>
|
|
||||||
<source
|
|
||||||
media="(max-width: 799px)"
|
|
||||||
srcset="/img/pics/homepage-480w.webp"
|
|
||||||
type="image/webp"
|
|
||||||
/>
|
|
||||||
<source
|
|
||||||
media="(max-width: 799px)"
|
|
||||||
srcset="/img/pics/homepage-480w.jpg"
|
|
||||||
type="image/jpeg"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<source
|
|
||||||
media="(max-width: 1024px)"
|
|
||||||
srcset="/img/pics/homepage-1024w.webp"
|
|
||||||
type="image/webp"
|
|
||||||
/>
|
|
||||||
<source
|
|
||||||
media="(max-width: 1024px)"
|
|
||||||
srcset="/img/pics/homepage-1024w.jpg"
|
|
||||||
type="image/jpeg"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<source
|
|
||||||
media="(max-width: 1920px)"
|
|
||||||
srcset="/img/pics/homepage-1920w.webp"
|
|
||||||
type="image/webp"
|
|
||||||
/>
|
|
||||||
<source
|
|
||||||
media="(max-width: 1920px)"
|
|
||||||
srcset="/img/pics/homepage-1920w.jpg"
|
|
||||||
type="image/jpeg"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<source
|
|
||||||
media="(min-width: 1921px)"
|
|
||||||
srcset="/img/pics/homepage.webp"
|
|
||||||
type="image/webp"
|
|
||||||
/>
|
|
||||||
<source
|
|
||||||
media="(min-width: 1921px)"
|
|
||||||
srcset="/img/pics/homepage.jpg"
|
|
||||||
type="image/jpeg"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<img
|
|
||||||
src="/img/pics/homepage-1024w.jpg"
|
|
||||||
width="3840"
|
|
||||||
height="2719"
|
|
||||||
alt=""
|
|
||||||
loading="lazy"
|
|
||||||
/>
|
|
||||||
</picture>
|
|
||||||
</div>
|
|
||||||
<div class="container section">
|
<div class="container section">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
|
@ -289,7 +234,7 @@
|
||||||
/>
|
/>
|
||||||
<section class="events-recent">
|
<section class="events-recent">
|
||||||
<h2 class="title">
|
<h2 class="title">
|
||||||
{{ $t("Last published events") }}
|
{{ $t("Upcoming events") }}
|
||||||
</h2>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
<i18n tag="span" path="On {instance} and other federated instances">
|
<i18n tag="span" path="On {instance} and other federated instances">
|
||||||
|
@ -298,10 +243,10 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div v-if="events.total > 0">
|
<div v-if="events.total > 0">
|
||||||
<multi-card :events="events.elements.slice(0, 8)" />
|
<multi-card :events="events.elements" />
|
||||||
<span class="view-all">
|
<span class="view-all">
|
||||||
<router-link :to="{ name: RouteName.SEARCH }"
|
<router-link :to="{ name: RouteName.SEARCH }"
|
||||||
>{{ $t("View everything") }} >></router-link
|
>{{ $t("Filter") }} >></router-link
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -345,13 +290,16 @@ import { IConfig } from "../types/config.model";
|
||||||
import { IFollowedGroupEvent } from "../types/followedGroupEvent.model";
|
import { IFollowedGroupEvent } from "../types/followedGroupEvent.model";
|
||||||
import Subtitle from "../components/Utils/Subtitle.vue";
|
import Subtitle from "../components/Utils/Subtitle.vue";
|
||||||
|
|
||||||
|
const EVENT_PAGE_LIMIT = 99;
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
apollo: {
|
apollo: {
|
||||||
events: {
|
events: {
|
||||||
query: FETCH_EVENTS,
|
query: FETCH_EVENTS,
|
||||||
variables: {
|
variables: {
|
||||||
orderBy: EventSortField.INSERTED_AT,
|
orderBy: EventSortField.BEGINS_ON,
|
||||||
direction: SortDirection.DESC,
|
direction: SortDirection.ASC,
|
||||||
|
limit: EVENT_PAGE_LIMIT,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
currentActor: {
|
currentActor: {
|
||||||
|
@ -409,7 +357,7 @@ import Subtitle from "../components/Utils/Subtitle.vue";
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
title: this.instanceName,
|
title: this.instanceName,
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -728,9 +676,6 @@ section.hero {
|
||||||
.container.section {
|
.container.section {
|
||||||
background: $white;
|
background: $white;
|
||||||
|
|
||||||
@include tablet {
|
|
||||||
margin-top: -4rem;
|
|
||||||
}
|
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
|
|
|
@ -323,7 +323,7 @@ import { ApolloCache, FetchResult } from "@apollo/client/core";
|
||||||
metaInfo() {
|
metaInfo() {
|
||||||
return {
|
return {
|
||||||
title: this.$t("Report") as string,
|
title: this.$t("Report") as string,
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -2,24 +2,6 @@
|
||||||
<section class="section container has-text-centered not-found">
|
<section class="section container has-text-centered not-found">
|
||||||
<div class="columns is-vertical is-centered">
|
<div class="columns is-vertical is-centered">
|
||||||
<div class="column is-half">
|
<div class="column is-half">
|
||||||
<picture>
|
|
||||||
<source
|
|
||||||
srcset="/img/pics/error-480w.webp 1x, /img/pics/error-1024w.webp 2x"
|
|
||||||
type="image/webp"
|
|
||||||
/>
|
|
||||||
<source
|
|
||||||
srcset="/img/pics/error-480w.jpg 1x, /img/pics/error-1024w.jpg 2x"
|
|
||||||
type="image/jpeg"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<img
|
|
||||||
:src="`/img/pics/error-480w.jpg`"
|
|
||||||
alt=""
|
|
||||||
width="2616"
|
|
||||||
height="1698"
|
|
||||||
loading="lazy"
|
|
||||||
/>
|
|
||||||
</picture>
|
|
||||||
<h1 class="title">
|
<h1 class="title">
|
||||||
{{ $t("The page you're looking for doesn't exist.") }}
|
{{ $t("The page you're looking for doesn't exist.") }}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
|
@ -189,7 +189,7 @@ import PostMixin from "../../mixins/post";
|
||||||
? (this.$t("Edit post") as string)
|
? (this.$t("Edit post") as string)
|
||||||
: (this.$t("Add a new post") as string),
|
: (this.$t("Add a new post") as string),
|
||||||
// all titles will be injected into this template
|
// all titles will be injected into this template
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -284,7 +284,9 @@ import PostMixin from "../../mixins/post";
|
||||||
// all titles will be injected into this template
|
// all titles will be injected into this template
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
titleTemplate: this.post ? "%s | Mobilizon" : "Mobilizon",
|
titleTemplate: this.post
|
||||||
|
? "%s | oberlausitz.vonunten.org"
|
||||||
|
: "oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="section container">
|
<div class="section container">
|
||||||
<h1 class="title">{{ $t("Explore") }}</h1>
|
<!-- <h1 class="title">{{ $t("Explore") }}</h1> -->
|
||||||
<section v-if="tag">
|
<section v-if="tag">
|
||||||
<i18n path="Events tagged with {tag}">
|
<i18n path="Events tagged with {tag}">
|
||||||
<b-tag slot="tag" type="is-light">{{ $t("#{tag}", { tag }) }}</b-tag>
|
<b-tag slot="tag" type="is-light">{{ $t("#{tag}", { tag }) }}</b-tag>
|
||||||
|
@ -125,7 +125,7 @@
|
||||||
v-if="!canSearchEvents && !canSearchGroups"
|
v-if="!canSearchEvents && !canSearchGroups"
|
||||||
>
|
>
|
||||||
<b-loading :active.sync="$apollo.loading"></b-loading>
|
<b-loading :active.sync="$apollo.loading"></b-loading>
|
||||||
<h2 class="title">{{ $t("Featured events") }}</h2>
|
<!-- <h2 class="title">{{ $t("Featured events") }}</h2> -->
|
||||||
<div v-if="events.elements.length > 0">
|
<div v-if="events.elements.length > 0">
|
||||||
<multi-card class="my-4" :events="events.elements" />
|
<multi-card class="my-4" :events="events.elements" />
|
||||||
<div class="pagination" v-if="events.total > EVENT_PAGE_LIMIT">
|
<div class="pagination" v-if="events.total > EVENT_PAGE_LIMIT">
|
||||||
|
@ -255,9 +255,9 @@ interface ISearchTimeOption {
|
||||||
end?: Date | null;
|
end?: Date | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EVENT_PAGE_LIMIT = 12;
|
const EVENT_PAGE_LIMIT = 99;
|
||||||
|
|
||||||
const GROUP_PAGE_LIMIT = 12;
|
const GROUP_PAGE_LIMIT = 99;
|
||||||
|
|
||||||
const DEFAULT_RADIUS = 25; // value to set if radius is null but location set
|
const DEFAULT_RADIUS = 25; // value to set if radius is null but location set
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ const GEOHASH_DEPTH = 9; // put enough accuracy, radius will be used anyway
|
||||||
metaInfo() {
|
metaInfo() {
|
||||||
return {
|
return {
|
||||||
title: this.$t("Explore events") as string,
|
title: this.$t("Explore events") as string,
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -167,7 +167,7 @@ import AuthProviders from "../../components/User/AuthProviders.vue";
|
||||||
metaInfo() {
|
metaInfo() {
|
||||||
return {
|
return {
|
||||||
title: this.$t("Login on Mobilizon!") as string,
|
title: this.$t("Login on Mobilizon!") as string,
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
meta: [{ name: "robots", content: "noindex" }],
|
meta: [{ name: "robots", content: "noindex" }],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
|
@ -212,7 +212,7 @@ type credentials = { email: string; password: string; locale: string };
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
title: this.title,
|
title: this.title,
|
||||||
titleTemplate: "%s | Mobilizon",
|
titleTemplate: "%s | oberlausitz.vonunten.org",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
apollo: {
|
apollo: {
|
||||||
|
|
|
@ -89,6 +89,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do
|
||||||
name: Config.instance_name(),
|
name: Config.instance_name(),
|
||||||
registrations_open: Config.instance_registrations_open?(),
|
registrations_open: Config.instance_registrations_open?(),
|
||||||
registrations_allowlist: Config.instance_registrations_allowlist?(),
|
registrations_allowlist: Config.instance_registrations_allowlist?(),
|
||||||
|
instance_homepage_sorting: Config.instance_homepage_sorting(),
|
||||||
contact: Config.contact(),
|
contact: Config.contact(),
|
||||||
demo_mode: Config.instance_demo_mode?(),
|
demo_mode: Config.instance_demo_mode?(),
|
||||||
description: Config.instance_description(),
|
description: Config.instance_description(),
|
||||||
|
|
|
@ -114,6 +114,11 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||||
field(:instance_long_description, :string, description: "The instance's long description")
|
field(:instance_long_description, :string, description: "The instance's long description")
|
||||||
field(:instance_slogan, :string, description: "The instance's slogan")
|
field(:instance_slogan, :string, description: "The instance's slogan")
|
||||||
field(:contact, :string, description: "The instance's contact details")
|
field(:contact, :string, description: "The instance's contact details")
|
||||||
|
|
||||||
|
field(:instance_homepage_sorting, :instance_homepage_sorting,
|
||||||
|
description: "The instance's homepage sorting"
|
||||||
|
)
|
||||||
|
|
||||||
field(:instance_terms, :string, description: "The instance's terms body text")
|
field(:instance_terms, :string, description: "The instance's terms body text")
|
||||||
field(:instance_terms_type, :instance_terms_type, description: "The instance's terms type")
|
field(:instance_terms_type, :instance_terms_type, description: "The instance's terms type")
|
||||||
field(:instance_terms_url, :string, description: "The instance's terms URL")
|
field(:instance_terms_url, :string, description: "The instance's terms URL")
|
||||||
|
@ -139,6 +144,12 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||||
value(:custom, as: "CUSTOM", description: "Custom terms text")
|
value(:custom, as: "CUSTOM", description: "Custom terms text")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@desc "The acceptable values for the instance's homepage type"
|
||||||
|
enum :instance_homepage_sorting do
|
||||||
|
value(:default, as: "DEFAULT", description: "Sort by recently created")
|
||||||
|
value(:upcoming, as: "UPCOMING", description: "Sort by upcoming")
|
||||||
|
end
|
||||||
|
|
||||||
@desc """
|
@desc """
|
||||||
The acceptable values for the instance privacy policy type
|
The acceptable values for the instance privacy policy type
|
||||||
"""
|
"""
|
||||||
|
@ -386,6 +397,11 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
|
||||||
arg(:instance_long_description, :string, description: "The instance's long description")
|
arg(:instance_long_description, :string, description: "The instance's long description")
|
||||||
arg(:instance_slogan, :string, description: "The instance's slogan")
|
arg(:instance_slogan, :string, description: "The instance's slogan")
|
||||||
arg(:contact, :string, description: "The instance's contact details")
|
arg(:contact, :string, description: "The instance's contact details")
|
||||||
|
|
||||||
|
arg(:instance_homepage_sorting, :instance_homepage_sorting,
|
||||||
|
description: "The instance's homepage sorting"
|
||||||
|
)
|
||||||
|
|
||||||
arg(:instance_terms, :string, description: "The instance's terms body text")
|
arg(:instance_terms, :string, description: "The instance's terms body text")
|
||||||
arg(:instance_terms_type, :instance_terms_type, description: "The instance's terms type")
|
arg(:instance_terms_type, :instance_terms_type, description: "The instance's terms type")
|
||||||
arg(:instance_terms_url, :string, description: "The instance's terms URL")
|
arg(:instance_terms_url, :string, description: "The instance's terms URL")
|
||||||
|
|
|
@ -48,6 +48,10 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
|
||||||
field(:version, :string, description: "The instance's version")
|
field(:version, :string, description: "The instance's version")
|
||||||
field(:federating, :boolean, description: "Whether this instance is federation")
|
field(:federating, :boolean, description: "Whether this instance is federation")
|
||||||
|
|
||||||
|
field(:instance_homepage_sorting, :instance_homepage_sorting,
|
||||||
|
description: "The instance's homepage sorting"
|
||||||
|
)
|
||||||
|
|
||||||
field(:terms, :terms, description: "The instance's terms") do
|
field(:terms, :terms, description: "The instance's terms") do
|
||||||
arg(:locale, :string,
|
arg(:locale, :string,
|
||||||
default_value: "en",
|
default_value: "en",
|
||||||
|
|
|
@ -19,6 +19,7 @@ defmodule Mobilizon.Config do
|
||||||
registration_email_denylist: list(String.t()),
|
registration_email_denylist: list(String.t()),
|
||||||
demo: boolean(),
|
demo: boolean(),
|
||||||
repository: String.t(),
|
repository: String.t(),
|
||||||
|
version: String.t(),
|
||||||
email_from: String.t(),
|
email_from: String.t(),
|
||||||
email_reply_to: String.t(),
|
email_reply_to: String.t(),
|
||||||
federating: boolean(),
|
federating: boolean(),
|
||||||
|
@ -62,6 +63,11 @@ defmodule Mobilizon.Config do
|
||||||
Mobilizon.Admin.get_admin_setting_value("instance", "contact")
|
Mobilizon.Admin.get_admin_setting_value("instance", "contact")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec instance_homepage_sorting :: String.t()
|
||||||
|
def instance_homepage_sorting do
|
||||||
|
Mobilizon.Admin.get_admin_setting_value("instance", "instance_homepage_sorting", "DEFAULT")
|
||||||
|
end
|
||||||
|
|
||||||
@spec instance_terms(String.t()) :: String.t()
|
@spec instance_terms(String.t()) :: String.t()
|
||||||
def instance_terms(locale \\ "en") do
|
def instance_terms(locale \\ "en") do
|
||||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_terms", generate_terms(locale))
|
Mobilizon.Admin.get_admin_setting_value("instance", "instance_terms", generate_terms(locale))
|
||||||
|
@ -102,9 +108,7 @@ defmodule Mobilizon.Config do
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec instance_version :: String.t()
|
@spec instance_version :: String.t()
|
||||||
def instance_version do
|
def instance_version, do: instance_config()[:version]
|
||||||
GitStatus.commit()
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec instance_hostname :: String.t()
|
@spec instance_hostname :: String.t()
|
||||||
def instance_hostname, do: instance_config()[:hostname]
|
def instance_hostname, do: instance_config()[:hostname]
|
||||||
|
@ -407,6 +411,7 @@ defmodule Mobilizon.Config do
|
||||||
instance_slogan: instance_slogan(),
|
instance_slogan: instance_slogan(),
|
||||||
registrations_open: instance_registrations_open?(),
|
registrations_open: instance_registrations_open?(),
|
||||||
contact: contact(),
|
contact: contact(),
|
||||||
|
instance_homepage_sorting: instance_homepage_sorting(),
|
||||||
instance_terms: instance_terms(),
|
instance_terms: instance_terms(),
|
||||||
instance_terms_type: instance_terms_type(),
|
instance_terms_type: instance_terms_type(),
|
||||||
instance_terms_url: instance_terms_url(),
|
instance_terms_url: instance_terms_url(),
|
||||||
|
|
|
@ -12,126 +12,82 @@ defmodule Mobilizon.Events.Categories do
|
||||||
defp build_in_categories do
|
defp build_in_categories do
|
||||||
[
|
[
|
||||||
%{
|
%{
|
||||||
id: :arts,
|
id: :ausflug,
|
||||||
label: gettext("Arts")
|
label: gettext("Ausflug")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :book_clubs,
|
id: :ausstellung,
|
||||||
label: gettext("Book clubs")
|
label: gettext("Ausstellung")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :business,
|
id: :demonstration,
|
||||||
label: gettext("Business")
|
label: gettext("Demonstration")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :causes,
|
id: :einweihung,
|
||||||
label: gettext("Causes")
|
label: gettext("Einweihung")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :comedy,
|
id: :filmvorfuehrung,
|
||||||
label: gettext("Comedy")
|
label: gettext("Filmvorführung")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :crafts,
|
id: :fussball,
|
||||||
label: gettext("Crafts")
|
label: gettext("Fußball")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :food_drink,
|
id: :gedenken,
|
||||||
label: gettext("Food & Drink")
|
label: gettext("Gedenken")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :health,
|
id: :infostand,
|
||||||
label: gettext("Health")
|
label: gettext("Infostand")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :music,
|
id: :kuenstlerisches,
|
||||||
label: gettext("Music")
|
label: gettext("Künstlerisches")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :auto_boat_air,
|
id: :kneipe,
|
||||||
label: gettext("Auto, boat and air")
|
label: gettext("Kneipe")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :community,
|
id: :konzert,
|
||||||
label: gettext("Community")
|
label: gettext("Konzert")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :family_education,
|
id: :kuefa,
|
||||||
label: gettext("Family & Education")
|
label: gettext("KüFa")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :fashion_beauty,
|
id: :lesung,
|
||||||
label: gettext("Fashion & Beauty")
|
label: gettext("Lesung")
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :film_media,
|
|
||||||
label: gettext("Film & Media")
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :games,
|
|
||||||
label: gettext("Games")
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :language_culture,
|
|
||||||
label: gettext("Language & Culture")
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :learning,
|
|
||||||
label: gettext("Learning")
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :lgbtq,
|
|
||||||
label: gettext("LGBTQ")
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :movements_politics,
|
|
||||||
label: gettext("Movements and politics")
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :networking,
|
|
||||||
label: gettext("Networking")
|
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :party,
|
id: :party,
|
||||||
label: gettext("Party")
|
label: gettext("Party")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :performing_visual_arts,
|
id: :sport,
|
||||||
label: gettext("Performing & Visual Arts")
|
label: gettext("Sport")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :pets,
|
id: :theater,
|
||||||
label: gettext("Pets")
|
label: gettext("Theater")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :photography,
|
id: :verhandlung,
|
||||||
label: gettext("Photography")
|
label: gettext("Verhandlung")
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
id: :outdoors_adventure,
|
id: :workshop,
|
||||||
label: gettext("Outdoors & Adventure")
|
label: gettext("Workshop")
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :spirituality_religion_beliefs,
|
|
||||||
label: gettext("Spirituality, Religion & Beliefs")
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :science_tech,
|
|
||||||
label: gettext("Science & Tech")
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :sports,
|
|
||||||
label: gettext("Sports")
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :theatre,
|
|
||||||
label: gettext("Theatre")
|
|
||||||
},
|
},
|
||||||
# Legacy default value
|
# Legacy default value
|
||||||
%{
|
%{
|
||||||
id: :meeting,
|
id: :meeting,
|
||||||
label: gettext("Meeting")
|
label: gettext("Infoveranstaltung")
|
||||||
}
|
},
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1663,7 +1663,7 @@ defmodule Mobilizon.Events do
|
||||||
@spec filter_future_events(Ecto.Queryable.t(), boolean) :: Ecto.Query.t()
|
@spec filter_future_events(Ecto.Queryable.t(), boolean) :: Ecto.Query.t()
|
||||||
defp filter_future_events(query, true) do
|
defp filter_future_events(query, true) do
|
||||||
from(q in query,
|
from(q in query,
|
||||||
where: q.begins_on > ^DateTime.utc_now()
|
where: coalesce(q.ends_on, q.begins_on) > ^DateTime.utc_now()
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do
|
||||||
formatted_description = description(event, locale)
|
formatted_description = description(event, locale)
|
||||||
|
|
||||||
tags = [
|
tags = [
|
||||||
Tag.content_tag(:title, event.title <> " - Mobilizon"),
|
Tag.content_tag(:title, event.title <> " - oberlausitz.vonunten.org"),
|
||||||
Tag.tag(:meta, name: "description", content: process_description(event.description, locale)),
|
Tag.tag(:meta, name: "description", content: process_description(event.description, locale)),
|
||||||
Tag.tag(:meta, property: "og:title", content: event.title),
|
Tag.tag(:meta, property: "og:title", content: event.title),
|
||||||
Tag.tag(:meta, property: "og:url", content: event.url),
|
Tag.tag(:meta, property: "og:url", content: event.url),
|
||||||
|
|
|
@ -7,4 +7,4 @@
|
||||||
<%= if @follower.type == :Application do %><%= gettext "Note: %{name} following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too.", name: Mobilizon.Actors.Actor.display_name_and_username(@follower) %><% end %>
|
<%= if @follower.type == :Application do %><%= gettext "Note: %{name} following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too.", name: Mobilizon.Actors.Actor.display_name_and_username(@follower) %><% end %>
|
||||||
|
|
||||||
<%= if @follower.type == :Application do %><%= gettext "To accept this invitation, head over to the instance's admin settings." %><% else %><%= gettext "To accept this invitation, head over to the profile's admin page." %><% end %>
|
<%= if @follower.type == :Application do %><%= gettext "To accept this invitation, head over to the instance's admin settings." %><% else %><%= gettext "To accept this invitation, head over to the profile's admin page." %><% end %>
|
||||||
<%= if @follower.type == :Application do %><%= "#{Mobilizon.Web.Endpoint.url()}/settings/admin/relays/followers" %><% else %><%= "#{Mobilizon.Web.Endpoint.url()}/settings/admin/profiles/#{@follower.id}" %><% end %>
|
<%= if @follower.type == :Application do %><%= "#{Mobilizon.Web.Endpoint.url()}/settings/admin/instances/%{name}" %><% else %><%= "#{Mobilizon.Web.Endpoint.url()}/settings/admin/profiles/#{@follower.id}" %><% end %>
|
||||||
|
|
|
@ -2368,11 +2368,6 @@ msgstr "Networking"
|
||||||
msgid "Outdoors & Adventure"
|
msgid "Outdoors & Adventure"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/mobilizon/events/categories.ex:96
|
|
||||||
msgid "Party"
|
|
||||||
msgstr "Party"
|
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/mobilizon/events/categories.ex:100
|
#: lib/mobilizon/events/categories.ex:100
|
||||||
msgid "Performing & Visual Arts"
|
msgid "Performing & Visual Arts"
|
||||||
|
@ -2398,16 +2393,63 @@ msgstr "Wissenschaft & Technologie"
|
||||||
msgid "Spirituality, Religion & Beliefs"
|
msgid "Spirituality, Religion & Beliefs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
msgid "Ausflug"
|
||||||
#: lib/mobilizon/events/categories.ex:124
|
msgstr "Ausflug"
|
||||||
msgid "Sports"
|
|
||||||
|
msgid "Ausstellung"
|
||||||
|
msgstr "Ausstellung"
|
||||||
|
|
||||||
|
msgid "Demonstration"
|
||||||
|
msgstr "Demonstration"
|
||||||
|
|
||||||
|
msgid "Einweihung"
|
||||||
|
msgstr "Einweihung"
|
||||||
|
|
||||||
|
msgid "Filmvorführung"
|
||||||
|
msgstr "Filmvorführung"
|
||||||
|
|
||||||
|
msgid "Fußball"
|
||||||
|
msgstr "Fußball"
|
||||||
|
|
||||||
|
msgid "Gedenken"
|
||||||
|
msgstr "Gedenken"
|
||||||
|
|
||||||
|
msgid "Infostand"
|
||||||
|
msgstr "Infostand"
|
||||||
|
|
||||||
|
msgid "Infoveranstaltung"
|
||||||
|
msgstr "Infoveranstaltung"
|
||||||
|
|
||||||
|
msgid "Künstlerisches"
|
||||||
|
msgstr "Künstlerisches"
|
||||||
|
|
||||||
|
msgid "Kneipe"
|
||||||
|
msgstr "Kneipe"
|
||||||
|
|
||||||
|
msgid "Konzert"
|
||||||
|
msgstr "Konzert"
|
||||||
|
|
||||||
|
msgid "KüFa"
|
||||||
|
msgstr "KüFa"
|
||||||
|
|
||||||
|
msgid "Lesung"
|
||||||
|
msgstr "Lesung"
|
||||||
|
|
||||||
|
msgid "Party"
|
||||||
|
msgstr "Party"
|
||||||
|
|
||||||
|
msgid "Sport"
|
||||||
msgstr "Sport"
|
msgstr "Sport"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
msgid "Theater"
|
||||||
#: lib/mobilizon/events/categories.ex:128
|
|
||||||
msgid "Theatre"
|
|
||||||
msgstr "Theater"
|
msgstr "Theater"
|
||||||
|
|
||||||
|
msgid "Verhandlung"
|
||||||
|
msgstr "Verhandlung"
|
||||||
|
|
||||||
|
msgid "Workshop"
|
||||||
|
msgstr "Workshop"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/web/templates/email/participation/event_card.text.eex:9
|
#: lib/web/templates/email/participation/event_card.text.eex:9
|
||||||
msgid "Read more: %{url}"
|
msgid "Read more: %{url}"
|
||||||
|
|
|
@ -1990,11 +1990,6 @@ msgstr ""
|
||||||
msgid "Outdoors & Adventure"
|
msgid "Outdoors & Adventure"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
#: lib/mobilizon/events/categories.ex:96
|
|
||||||
msgid "Party"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
#: lib/mobilizon/events/categories.ex:100
|
#: lib/mobilizon/events/categories.ex:100
|
||||||
msgid "Performing & Visual Arts"
|
msgid "Performing & Visual Arts"
|
||||||
|
@ -2020,15 +2015,62 @@ msgstr ""
|
||||||
msgid "Spirituality, Religion & Beliefs"
|
msgid "Spirituality, Religion & Beliefs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
msgid "Ausflug"
|
||||||
#: lib/mobilizon/events/categories.ex:124
|
msgstr "Excursion"
|
||||||
msgid "Sports"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format
|
msgid "Ausstellung"
|
||||||
#: lib/mobilizon/events/categories.ex:128
|
msgstr "Exhibition"
|
||||||
msgid "Theatre"
|
|
||||||
msgstr ""
|
msgid "Demonstration"
|
||||||
|
msgstr "Demonstration"
|
||||||
|
|
||||||
|
msgid "Einweihung"
|
||||||
|
msgstr "Inauguration"
|
||||||
|
|
||||||
|
msgid "Filmvorführung"
|
||||||
|
msgstr "Film screening"
|
||||||
|
|
||||||
|
msgid "Fußball"
|
||||||
|
msgstr "Football"
|
||||||
|
|
||||||
|
msgid "Gedenken"
|
||||||
|
msgstr "Remembrance"
|
||||||
|
|
||||||
|
msgid "Infostand"
|
||||||
|
msgstr "Infostand"
|
||||||
|
|
||||||
|
msgid "Infoveranstaltung"
|
||||||
|
msgstr "Info event"
|
||||||
|
|
||||||
|
msgid "Künstlerisches"
|
||||||
|
msgstr "Art related"
|
||||||
|
|
||||||
|
msgid "Kneipe"
|
||||||
|
msgstr "Bar"
|
||||||
|
|
||||||
|
msgid "Konzert"
|
||||||
|
msgstr "Concert"
|
||||||
|
|
||||||
|
msgid "KüFa"
|
||||||
|
msgstr "Kitchen for all"
|
||||||
|
|
||||||
|
msgid "Lesung"
|
||||||
|
msgstr "Reading"
|
||||||
|
|
||||||
|
msgid "Party"
|
||||||
|
msgstr "Party"
|
||||||
|
|
||||||
|
msgid "Sport"
|
||||||
|
msgstr "Sport"
|
||||||
|
|
||||||
|
msgid "Theater"
|
||||||
|
msgstr "Theater"
|
||||||
|
|
||||||
|
msgid "Verhandlung"
|
||||||
|
msgstr "Trial"
|
||||||
|
|
||||||
|
msgid "Workshop"
|
||||||
|
msgstr "Workshop"
|
||||||
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
#: lib/web/templates/email/participation/event_card.text.eex:9
|
#: lib/web/templates/email/participation/event_card.text.eex:9
|
||||||
|
|
|
@ -223,6 +223,9 @@ type Config {
|
||||||
"Whether this instance is federation"
|
"Whether this instance is federation"
|
||||||
federating: Boolean
|
federating: Boolean
|
||||||
|
|
||||||
|
"The instance's homepage sorting"
|
||||||
|
instanceHomepageSorting: InstanceHomepageSorting
|
||||||
|
|
||||||
"The instance's terms"
|
"The instance's terms"
|
||||||
terms(
|
terms(
|
||||||
"The user's locale. The terms will be translated in their language, if available."
|
"The user's locale. The terms will be translated in their language, if available."
|
||||||
|
@ -269,6 +272,15 @@ type Tag {
|
||||||
related: [Tag]
|
related: [Tag]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"The acceptable values for the instance's homepage type"
|
||||||
|
enum InstanceHomepageSorting {
|
||||||
|
"Sort by recently created"
|
||||||
|
DEFAULT
|
||||||
|
|
||||||
|
"Sort by upcoming"
|
||||||
|
UPCOMING
|
||||||
|
}
|
||||||
|
|
||||||
"Instance map routing configuration"
|
"Instance map routing configuration"
|
||||||
type Routing {
|
type Routing {
|
||||||
"The instance's routing type"
|
"The instance's routing type"
|
||||||
|
@ -1941,6 +1953,9 @@ type RootMutationType {
|
||||||
"The instance's contact details"
|
"The instance's contact details"
|
||||||
contact: String
|
contact: String
|
||||||
|
|
||||||
|
"The instance's homepage sorting"
|
||||||
|
instanceHomepageSorting: InstanceHomepageSorting
|
||||||
|
|
||||||
"The instance's terms body text"
|
"The instance's terms body text"
|
||||||
instanceTerms: String
|
instanceTerms: String
|
||||||
|
|
||||||
|
@ -3805,6 +3820,9 @@ type AdminSettings {
|
||||||
"The instance's contact details"
|
"The instance's contact details"
|
||||||
contact: String
|
contact: String
|
||||||
|
|
||||||
|
"The instance's homepage sorting"
|
||||||
|
instanceHomepageSorting: InstanceHomepageSorting
|
||||||
|
|
||||||
"The instance's terms body text"
|
"The instance's terms body text"
|
||||||
instanceTerms: String
|
instanceTerms: String
|
||||||
|
|
||||||
|
|
|
@ -337,6 +337,7 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
|
||||||
instanceDescription
|
instanceDescription
|
||||||
instanceLongDescription
|
instanceLongDescription
|
||||||
contact
|
contact
|
||||||
|
instanceHomepageSorting
|
||||||
instanceTerms
|
instanceTerms
|
||||||
instanceTermsType
|
instanceTermsType
|
||||||
instanceTermsUrl
|
instanceTermsUrl
|
||||||
|
@ -419,6 +420,7 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
|
||||||
$instanceDescription: String
|
$instanceDescription: String
|
||||||
$instanceLongDescription: String
|
$instanceLongDescription: String
|
||||||
$contact: String
|
$contact: String
|
||||||
|
$instanceHomepageSorting: InstanceHomepageSorting
|
||||||
$instanceTerms: String
|
$instanceTerms: String
|
||||||
$instanceTermsType: InstanceTermsType
|
$instanceTermsType: InstanceTermsType
|
||||||
$instanceTermsUrl: String
|
$instanceTermsUrl: String
|
||||||
|
@ -433,6 +435,7 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
|
||||||
instanceDescription: $instanceDescription
|
instanceDescription: $instanceDescription
|
||||||
instanceLongDescription: $instanceLongDescription
|
instanceLongDescription: $instanceLongDescription
|
||||||
contact: $contact
|
contact: $contact
|
||||||
|
instanceHomepageSorting: $instanceHomepageSorting
|
||||||
instanceTerms: $instanceTerms
|
instanceTerms: $instanceTerms
|
||||||
instanceTermsType: $instanceTermsType
|
instanceTermsType: $instanceTermsType
|
||||||
instanceTermsUrl: $instanceTermsUrl
|
instanceTermsUrl: $instanceTermsUrl
|
||||||
|
|
|
@ -51,7 +51,7 @@ defmodule Mobilizon.Service.MetadataTest do
|
||||||
|
|
||||||
tags_output = event |> Metadata.build_tags() |> Metadata.Utils.stringify_tags()
|
tags_output = event |> Metadata.build_tags() |> Metadata.Utils.stringify_tags()
|
||||||
{:ok, document} = Floki.parse_fragment(tags_output)
|
{:ok, document} = Floki.parse_fragment(tags_output)
|
||||||
assert "#{event.title} - Mobilizon" == document |> Floki.find("title") |> Floki.text()
|
assert "#{event.title} - oberlausitz.vonunten.org" == document |> Floki.find("title") |> Floki.text()
|
||||||
|
|
||||||
assert @truncated_description ==
|
assert @truncated_description ==
|
||||||
document
|
document
|
||||||
|
|
Loading…
Reference in a new issue