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
|
||||
|
||||
|
|
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,31 +129,20 @@ export default class App extends Vue {
|
|||
console.debug("online");
|
||||
});
|
||||
document.addEventListener("refreshApp", (event: Event) => {
|
||||
this.$buefy.snackbar.open({
|
||||
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
|
||||
// @ts-ignore
|
||||
const detail = event.detail;
|
||||
const registration = detail as ServiceWorkerRegistration;
|
||||
try {
|
||||
await this.refreshApp(registration);
|
||||
window.location.reload();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
this.$notifier.error(
|
||||
this.$t(
|
||||
"An error has occured while refreshing the page."
|
||||
) as string
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
const refreshAppEvent = async () => {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const detail = event.detail;
|
||||
const registration = detail as ServiceWorkerRegistration;
|
||||
try {
|
||||
await this.refreshApp(registration);
|
||||
window.location.reload();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
};
|
||||
|
||||
refreshAppEvent();
|
||||
});
|
||||
|
||||
this.interval = setInterval(async () => {
|
||||
|
|
|
@ -2,29 +2,6 @@
|
|||
<div class="container section" id="error-wrapper">
|
||||
<div class="column">
|
||||
<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">
|
||||
<h1>
|
||||
{{
|
||||
|
|
|
@ -1,22 +1,5 @@
|
|||
<template>
|
||||
<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>
|
||||
<li>
|
||||
<b-select
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
</template>
|
||||
<template slot="start">
|
||||
<b-navbar-item tag="router-link" :to="{ name: RouteName.SEARCH }">{{
|
||||
$t("Explore")
|
||||
$t("Filter")
|
||||
}}</b-navbar-item>
|
||||
<b-navbar-item
|
||||
v-if="currentActor.id && currentUser.isLoggedIn"
|
||||
|
|
|
@ -388,6 +388,9 @@
|
|||
"From the {startDate} to the {endDate}": "Vom {startDate} bis zum {endDate}",
|
||||
"From yourself": "Von Ihnen selbst",
|
||||
"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",
|
||||
"General": "Allgemein",
|
||||
"General information": "Allgemeine Informationen",
|
||||
|
|
|
@ -1066,6 +1066,9 @@
|
|||
"Not accessible with a wheelchair": "Not accessible with a wheelchair",
|
||||
"Partially accessible with a wheelchair": "Partially 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",
|
||||
"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",
|
||||
|
@ -1331,4 +1334,4 @@
|
|||
"Activate notifications": "Activate notifications",
|
||||
"Deactivate notifications": "Deactivate notifications",
|
||||
"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,
|
||||
},
|
||||
{
|
||||
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",
|
||||
key: "mz:replay:youtube:url",
|
||||
|
|
|
@ -134,7 +134,6 @@
|
|||
!$apollo.loading
|
||||
"
|
||||
>
|
||||
<div class="img-container" :class="{ webp: supportsWebPFormat }" />
|
||||
<div class="content has-text-centered">
|
||||
<p>
|
||||
{{
|
||||
|
|
|
@ -46,7 +46,6 @@
|
|||
>
|
||||
<div class="columns is-vertical is-centered">
|
||||
<div class="column is-three-quarters">
|
||||
<div class="img-container" :class="{ webp: supportsWebPFormat }" />
|
||||
<div class="content has-text-centered">
|
||||
<p>
|
||||
{{ $t("You are not part of any group.") }}
|
||||
|
|
|
@ -11,14 +11,6 @@
|
|||
<h1 class="title">
|
||||
{{ config.slogan || $t("Gather ⋅ Organize ⋅ Mobilize") }}
|
||||
</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 -->
|
||||
<!-- <p v-if="!config.registrationsOpen">
|
||||
{{ $t("This instance isn't opened to registrations, but you can register on other instances.") }}
|
||||
|
@ -51,18 +43,26 @@
|
|||
>
|
||||
<section class="events-recent">
|
||||
<h2 class="title">
|
||||
{{ $t("Last published events") }}
|
||||
{{ $t("Upcoming events") }}
|
||||
</h2>
|
||||
<p>
|
||||
<i18n tag="span" path="On {instance} and other federated instances">
|
||||
<b slot="instance">{{ config.name }}</b>
|
||||
</i18n>
|
||||
</p>
|
||||
<div v-if="this.events.total > 0">
|
||||
<multi-card :events="events.elements.slice(0, 6)" />
|
||||
<div v-if="events.elements.length > 0">
|
||||
<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">
|
||||
<router-link :to="{ name: RouteName.SEARCH }"
|
||||
>{{ $t("View everything") }} >></router-link
|
||||
>{{ $t("Filter") }} >></router-link
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -72,61 +72,6 @@
|
|||
</section>
|
||||
</div>
|
||||
<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="columns">
|
||||
<div class="column">
|
||||
|
@ -289,7 +234,7 @@
|
|||
/>
|
||||
<section class="events-recent">
|
||||
<h2 class="title">
|
||||
{{ $t("Last published events") }}
|
||||
{{ $t("Upcoming events") }}
|
||||
</h2>
|
||||
<p>
|
||||
<i18n tag="span" path="On {instance} and other federated instances">
|
||||
|
@ -298,10 +243,10 @@
|
|||
</p>
|
||||
|
||||
<div v-if="events.total > 0">
|
||||
<multi-card :events="events.elements.slice(0, 8)" />
|
||||
<multi-card :events="events.elements" />
|
||||
<span class="view-all">
|
||||
<router-link :to="{ name: RouteName.SEARCH }"
|
||||
>{{ $t("View everything") }} >></router-link
|
||||
>{{ $t("Filter") }} >></router-link
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -345,13 +290,16 @@ import { IConfig } from "../types/config.model";
|
|||
import { IFollowedGroupEvent } from "../types/followedGroupEvent.model";
|
||||
import Subtitle from "../components/Utils/Subtitle.vue";
|
||||
|
||||
const EVENT_PAGE_LIMIT = 42;
|
||||
|
||||
@Component({
|
||||
apollo: {
|
||||
events: {
|
||||
query: FETCH_EVENTS,
|
||||
variables: {
|
||||
orderBy: EventSortField.INSERTED_AT,
|
||||
direction: SortDirection.DESC,
|
||||
orderBy: EventSortField.BEGINS_ON,
|
||||
direction: SortDirection.ASC,
|
||||
limit: EVENT_PAGE_LIMIT,
|
||||
},
|
||||
},
|
||||
currentActor: {
|
||||
|
@ -446,6 +394,8 @@ export default class Home extends Vue {
|
|||
total: 0,
|
||||
};
|
||||
|
||||
EVENT_PAGE_LIMIT = EVENT_PAGE_LIMIT;
|
||||
|
||||
// get displayed_name() {
|
||||
// return this.loggedPerson && this.loggedPerson.name === null
|
||||
// ? this.loggedPerson.preferredUsername
|
||||
|
@ -728,9 +678,6 @@ section.hero {
|
|||
.container.section {
|
||||
background: $white;
|
||||
|
||||
@include tablet {
|
||||
margin-top: -4rem;
|
||||
}
|
||||
z-index: 10;
|
||||
|
||||
.title {
|
||||
|
|
|
@ -2,24 +2,6 @@
|
|||
<section class="section container has-text-centered not-found">
|
||||
<div class="columns is-vertical is-centered">
|
||||
<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">
|
||||
{{ $t("The page you're looking for doesn't exist.") }}
|
||||
</h1>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div class="section container">
|
||||
<h1 class="title">{{ $t("Explore") }}</h1>
|
||||
<!-- <h1 class="title">{{ $t("Explore") }}</h1> -->
|
||||
<section v-if="tag">
|
||||
<i18n path="Events tagged with {tag}">
|
||||
<b-tag slot="tag" type="is-light">{{ $t("#{tag}", { tag }) }}</b-tag>
|
||||
|
@ -125,7 +125,7 @@
|
|||
v-if="!canSearchEvents && !canSearchGroups"
|
||||
>
|
||||
<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">
|
||||
<multi-card class="my-4" :events="events.elements" />
|
||||
<div class="pagination" v-if="events.total > EVENT_PAGE_LIMIT">
|
||||
|
@ -255,9 +255,9 @@ interface ISearchTimeOption {
|
|||
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
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ defmodule Mobilizon.Config do
|
|||
registration_email_denylist: list(String.t()),
|
||||
demo: boolean(),
|
||||
repository: String.t(),
|
||||
version: String.t(),
|
||||
email_from: String.t(),
|
||||
email_reply_to: String.t(),
|
||||
federating: boolean(),
|
||||
|
@ -102,9 +103,7 @@ defmodule Mobilizon.Config do
|
|||
end
|
||||
|
||||
@spec instance_version :: String.t()
|
||||
def instance_version do
|
||||
GitStatus.commit()
|
||||
end
|
||||
def instance_version, do: instance_config()[:version]
|
||||
|
||||
@spec instance_hostname :: String.t()
|
||||
def instance_hostname, do: instance_config()[:hostname]
|
||||
|
|
|
@ -12,126 +12,82 @@ defmodule Mobilizon.Events.Categories do
|
|||
defp build_in_categories do
|
||||
[
|
||||
%{
|
||||
id: :arts,
|
||||
label: gettext("Arts")
|
||||
id: :ausflug,
|
||||
label: gettext("Ausflug")
|
||||
},
|
||||
%{
|
||||
id: :book_clubs,
|
||||
label: gettext("Book clubs")
|
||||
id: :ausstellung,
|
||||
label: gettext("Ausstellung")
|
||||
},
|
||||
%{
|
||||
id: :business,
|
||||
label: gettext("Business")
|
||||
id: :demonstration,
|
||||
label: gettext("Demonstration")
|
||||
},
|
||||
%{
|
||||
id: :causes,
|
||||
label: gettext("Causes")
|
||||
id: :einweihung,
|
||||
label: gettext("Einweihung")
|
||||
},
|
||||
%{
|
||||
id: :comedy,
|
||||
label: gettext("Comedy")
|
||||
id: :filmvorfuehrung,
|
||||
label: gettext("Filmvorführung")
|
||||
},
|
||||
%{
|
||||
id: :crafts,
|
||||
label: gettext("Crafts")
|
||||
id: :fussball,
|
||||
label: gettext("Fußball")
|
||||
},
|
||||
%{
|
||||
id: :food_drink,
|
||||
label: gettext("Food & Drink")
|
||||
id: :gedenken,
|
||||
label: gettext("Gedenken")
|
||||
},
|
||||
%{
|
||||
id: :health,
|
||||
label: gettext("Health")
|
||||
id: :infostand,
|
||||
label: gettext("Infostand")
|
||||
},
|
||||
%{
|
||||
id: :music,
|
||||
label: gettext("Music")
|
||||
id: :kuenstlerisches,
|
||||
label: gettext("Künstlerisches")
|
||||
},
|
||||
%{
|
||||
id: :auto_boat_air,
|
||||
label: gettext("Auto, boat and air")
|
||||
id: :kneipe,
|
||||
label: gettext("Kneipe")
|
||||
},
|
||||
%{
|
||||
id: :community,
|
||||
label: gettext("Community")
|
||||
id: :konzert,
|
||||
label: gettext("Konzert")
|
||||
},
|
||||
%{
|
||||
id: :family_education,
|
||||
label: gettext("Family & Education")
|
||||
id: :kuefa,
|
||||
label: gettext("KüFa")
|
||||
},
|
||||
%{
|
||||
id: :fashion_beauty,
|
||||
label: gettext("Fashion & Beauty")
|
||||
},
|
||||
%{
|
||||
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: :lesung,
|
||||
label: gettext("Lesung")
|
||||
},
|
||||
%{
|
||||
id: :party,
|
||||
label: gettext("Party")
|
||||
},
|
||||
%{
|
||||
id: :performing_visual_arts,
|
||||
label: gettext("Performing & Visual Arts")
|
||||
id: :sport,
|
||||
label: gettext("Sport")
|
||||
},
|
||||
%{
|
||||
id: :pets,
|
||||
label: gettext("Pets")
|
||||
id: :theater,
|
||||
label: gettext("Theater")
|
||||
},
|
||||
%{
|
||||
id: :photography,
|
||||
label: gettext("Photography")
|
||||
id: :verhandlung,
|
||||
label: gettext("Verhandlung")
|
||||
},
|
||||
%{
|
||||
id: :outdoors_adventure,
|
||||
label: gettext("Outdoors & Adventure")
|
||||
},
|
||||
%{
|
||||
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")
|
||||
id: :workshop,
|
||||
label: gettext("Workshop")
|
||||
},
|
||||
# Legacy default value
|
||||
%{
|
||||
id: :meeting,
|
||||
label: gettext("Meeting")
|
||||
}
|
||||
label: gettext("Infoveranstaltung")
|
||||
},
|
||||
]
|
||||
end
|
||||
|
||||
|
|
|
@ -1663,7 +1663,7 @@ defmodule Mobilizon.Events do
|
|||
@spec filter_future_events(Ecto.Queryable.t(), boolean) :: Ecto.Query.t()
|
||||
defp filter_future_events(query, true) do
|
||||
from(q in query,
|
||||
where: q.begins_on > ^DateTime.utc_now()
|
||||
where: coalesce(q.ends_on, q.begins_on) > ^DateTime.utc_now()
|
||||
)
|
||||
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 "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"
|
||||
msgstr ""
|
||||
|
||||
#, elixir-autogen, elixir-format
|
||||
#: lib/mobilizon/events/categories.ex:96
|
||||
msgid "Party"
|
||||
msgstr "Party"
|
||||
|
||||
#, elixir-autogen, elixir-format
|
||||
#: lib/mobilizon/events/categories.ex:100
|
||||
msgid "Performing & Visual Arts"
|
||||
|
@ -2398,16 +2393,63 @@ msgstr "Wissenschaft & Technologie"
|
|||
msgid "Spirituality, Religion & Beliefs"
|
||||
msgstr ""
|
||||
|
||||
#, elixir-autogen, elixir-format
|
||||
#: lib/mobilizon/events/categories.ex:124
|
||||
msgid "Sports"
|
||||
msgid "Ausflug"
|
||||
msgstr "Ausflug"
|
||||
|
||||
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"
|
||||
|
||||
#, elixir-autogen, elixir-format
|
||||
#: lib/mobilizon/events/categories.ex:128
|
||||
msgid "Theatre"
|
||||
msgid "Theater"
|
||||
msgstr "Theater"
|
||||
|
||||
msgid "Verhandlung"
|
||||
msgstr "Verhandlung"
|
||||
|
||||
msgid "Workshop"
|
||||
msgstr "Workshop"
|
||||
|
||||
#, elixir-autogen, elixir-format
|
||||
#: lib/web/templates/email/participation/event_card.text.eex:9
|
||||
msgid "Read more: %{url}"
|
||||
|
|
|
@ -1990,11 +1990,6 @@ msgstr ""
|
|||
msgid "Outdoors & Adventure"
|
||||
msgstr ""
|
||||
|
||||
#, elixir-autogen, elixir-format
|
||||
#: lib/mobilizon/events/categories.ex:96
|
||||
msgid "Party"
|
||||
msgstr ""
|
||||
|
||||
#, elixir-autogen, elixir-format
|
||||
#: lib/mobilizon/events/categories.ex:100
|
||||
msgid "Performing & Visual Arts"
|
||||
|
@ -2020,15 +2015,62 @@ msgstr ""
|
|||
msgid "Spirituality, Religion & Beliefs"
|
||||
msgstr ""
|
||||
|
||||
#, elixir-autogen, elixir-format
|
||||
#: lib/mobilizon/events/categories.ex:124
|
||||
msgid "Sports"
|
||||
msgstr ""
|
||||
msgid "Ausflug"
|
||||
msgstr "Excursion"
|
||||
|
||||
#, elixir-autogen, elixir-format
|
||||
#: lib/mobilizon/events/categories.ex:128
|
||||
msgid "Theatre"
|
||||
msgstr ""
|
||||
msgid "Ausstellung"
|
||||
msgstr "Exhibition"
|
||||
|
||||
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
|
||||
#: lib/web/templates/email/participation/event_card.text.eex:9
|
||||
|
|
Loading…
Reference in a new issue