forked from potsda.mn/mobilizon
Compare commits
37 commits
main
...
test.rotes
Author | SHA1 | Date | |
---|---|---|---|
summersamara | 44f32494b8 | ||
summersamara | 6b2d6783bc | ||
778a69cd | e8909780eb | ||
jona | 2509e224b9 | ||
jona | 7f3e47c9dc | ||
778a69cd | 828a8b66f7 | ||
778a69cd | 8288c235d0 | ||
778a69cd | e3b349b117 | ||
778a69cd | a4ba88d3e2 | ||
778a69cd | 4a04548c1c | ||
778a69cd | c806a7b3c7 | ||
778a69cd | 1019a46d16 | ||
778a69cd | e19a511d5b | ||
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": 1662116689,
|
||||||
|
"narHash": "sha256-UB5H2/AjhY5OgooCXeLxYpW9w/wYIwOWRDu+VdPo858=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "da141d2fef4636aca767188e7a9f6e89e65264ce",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "da141d2fef4636aca767188e7a9f6e89e65264ce",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
26
flake.nix
Normal file
26
flake.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
description = "A very basic flake";
|
||||||
|
|
||||||
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/da141d2fef4636aca767188e7a9f6e89e65264ce";
|
||||||
|
|
||||||
|
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 = pkgs.nodejs-16_x;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
|
@ -129,14 +129,7 @@ export default class App extends Vue {
|
||||||
console.debug("online");
|
console.debug("online");
|
||||||
});
|
});
|
||||||
document.addEventListener("refreshApp", (event: Event) => {
|
document.addEventListener("refreshApp", (event: Event) => {
|
||||||
this.$buefy.snackbar.open({
|
const refreshAppEvent = async () => {
|
||||||
queue: false,
|
|
||||||
indefinite: true,
|
|
||||||
type: "is-secondary",
|
|
||||||
actionText: this.$t("Update app") as string,
|
|
||||||
cancelText: this.$t("Ignore") as string,
|
|
||||||
message: this.$t("A new version is available.") as string,
|
|
||||||
onAction: async () => {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const detail = event.detail;
|
const detail = event.detail;
|
||||||
|
@ -146,14 +139,10 @@ export default class App extends Vue {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
this.$notifier.error(
|
|
||||||
this.$t(
|
|
||||||
"An error has occured while refreshing the page."
|
|
||||||
) as string
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
};
|
||||||
});
|
|
||||||
|
refreshAppEvent();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.interval = setInterval(async () => {
|
this.interval = setInterval(async () => {
|
||||||
|
|
|
@ -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>
|
||||||
{{
|
{{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -1066,6 +1066,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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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.") }}
|
||||||
|
|
|
@ -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 = 42;
|
||||||
|
|
||||||
@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: {
|
||||||
|
@ -446,6 +394,8 @@ export default class Home extends Vue {
|
||||||
total: 0,
|
total: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EVENT_PAGE_LIMIT = EVENT_PAGE_LIMIT;
|
||||||
|
|
||||||
// get displayed_name() {
|
// get displayed_name() {
|
||||||
// return this.loggedPerson && this.loggedPerson.name === null
|
// return this.loggedPerson && this.loggedPerson.name === null
|
||||||
// ? this.loggedPerson.preferredUsername
|
// ? this.loggedPerson.preferredUsername
|
||||||
|
@ -728,9 +678,6 @@ section.hero {
|
||||||
.container.section {
|
.container.section {
|
||||||
background: $white;
|
background: $white;
|
||||||
|
|
||||||
@include tablet {
|
|
||||||
margin-top: -4rem;
|
|
||||||
}
|
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 = 42;
|
||||||
|
|
||||||
const GROUP_PAGE_LIMIT = 12;
|
const GROUP_PAGE_LIMIT = 42;
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
|
|
@ -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(),
|
||||||
|
@ -102,9 +103,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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue