Initial work
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
1b1ded1a83
commit
32a63a693d
|
@ -16,6 +16,8 @@
|
||||||
"@absinthe/socket-apollo-link": "^0.2.1",
|
"@absinthe/socket-apollo-link": "^0.2.1",
|
||||||
"@apollo/client": "^3.3.16",
|
"@apollo/client": "^3.3.16",
|
||||||
"@mdi/font": "^6.1.95",
|
"@mdi/font": "^6.1.95",
|
||||||
|
"@oruga-ui/oruga-next": "^0.4.7",
|
||||||
|
"@oruga-ui/theme-bulma": "^0.1.3",
|
||||||
"@tiptap/core": "^2.0.0-beta.41",
|
"@tiptap/core": "^2.0.0-beta.41",
|
||||||
"@tiptap/extension-blockquote": "^2.0.0-beta.6",
|
"@tiptap/extension-blockquote": "^2.0.0-beta.6",
|
||||||
"@tiptap/extension-bubble-menu": "^2.0.0-beta.9",
|
"@tiptap/extension-bubble-menu": "^2.0.0-beta.9",
|
||||||
|
@ -28,14 +30,14 @@
|
||||||
"@tiptap/extension-ordered-list": "^2.0.0-beta.6",
|
"@tiptap/extension-ordered-list": "^2.0.0-beta.6",
|
||||||
"@tiptap/extension-underline": "^2.0.0-beta.7",
|
"@tiptap/extension-underline": "^2.0.0-beta.7",
|
||||||
"@tiptap/starter-kit": "^2.0.0-beta.37",
|
"@tiptap/starter-kit": "^2.0.0-beta.37",
|
||||||
"@tiptap/vue-2": "^2.0.0-beta.21",
|
"@tiptap/vue-3": "^2.0.0-beta.81",
|
||||||
"@vue/compat": "^3.1.0",
|
"@vue-a11y/announcer": "^3.1.5",
|
||||||
"@vue-a11y/announcer": "^2.1.0",
|
"@vue-a11y/skip-to": "^3.0.3",
|
||||||
"@vue-a11y/skip-to": "^2.1.2",
|
"@vue-leaflet/vue-leaflet": "^0.6.1",
|
||||||
"@vue/apollo-option": "4.0.0-alpha.11",
|
"@vue/apollo-composable": "^4.0.0-alpha.15",
|
||||||
|
"@vue/apollo-option": "^4.0.0-alpha.15",
|
||||||
"apollo-absinthe-upload-link": "^1.5.0",
|
"apollo-absinthe-upload-link": "^1.5.0",
|
||||||
"blurhash": "^1.1.3",
|
"blurhash": "^1.1.3",
|
||||||
"buefy": "^0.9.0",
|
|
||||||
"bulma-divider": "^0.2.0",
|
"bulma-divider": "^0.2.0",
|
||||||
"core-js": "^3.6.4",
|
"core-js": "^3.6.4",
|
||||||
"date-fns": "^2.16.0",
|
"date-fns": "^2.16.0",
|
||||||
|
@ -54,15 +56,14 @@
|
||||||
"sanitize-html": "^2.5.3",
|
"sanitize-html": "^2.5.3",
|
||||||
"tippy.js": "^6.2.3",
|
"tippy.js": "^6.2.3",
|
||||||
"unfetch": "^4.2.0",
|
"unfetch": "^4.2.0",
|
||||||
"v-tooltip": "^2.1.3",
|
"v-tooltip": "^4.0.0-beta.2",
|
||||||
"vue": "^3.1.0",
|
"vue": "^3.1.0",
|
||||||
"vue-class-component": "^7.2.3",
|
"vue-class-component": "8.0.0-rc.1",
|
||||||
"vue-i18n": "^8.14.0",
|
"vue-i18n": "^9.0.0",
|
||||||
"vue-meta": "^2.3.1",
|
"vue-meta": "^3.0.0-alpha.9",
|
||||||
"vue-property-decorator": "^9.0.0",
|
"vue-property-decorator": "^10.0.0-rc.3",
|
||||||
"vue-router": "^3.1.6",
|
"vue-router": "^4.0.0",
|
||||||
"vue-scrollto": "^2.17.1",
|
"vue-scrollto": "^2.17.1",
|
||||||
"vue2-leaflet": "^2.0.3",
|
|
||||||
"vuedraggable": "^2.24.3"
|
"vuedraggable": "^2.24.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -79,19 +80,19 @@
|
||||||
"@types/sanitize-html": "^2.5.0",
|
"@types/sanitize-html": "^2.5.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.3.0",
|
"@typescript-eslint/eslint-plugin": "^5.3.0",
|
||||||
"@typescript-eslint/parser": "^5.3.0",
|
"@typescript-eslint/parser": "^5.3.0",
|
||||||
"@vue/cli-plugin-babel": "~5.0.0-rc.0",
|
"@vue/cli-plugin-babel": "~5.0.0-rc.1",
|
||||||
"@vue/cli-plugin-e2e-cypress": "~5.0.0-rc.0",
|
"@vue/cli-plugin-e2e-cypress": "~5.0.0-rc.1",
|
||||||
"@vue/cli-plugin-eslint": "~5.0.0-rc.0",
|
"@vue/cli-plugin-eslint": "~5.0.0-rc.1",
|
||||||
"@vue/cli-plugin-pwa": "~5.0.0-rc.0",
|
"@vue/cli-plugin-pwa": "~5.0.0-rc.1",
|
||||||
"@vue/cli-plugin-router": "~5.0.0-rc.0",
|
"@vue/cli-plugin-router": "~5.0.0-rc.1",
|
||||||
"@vue/cli-plugin-typescript": "~5.0.0-rc.0",
|
"@vue/cli-plugin-typescript": "~5.0.0-rc.1",
|
||||||
"@vue/cli-plugin-unit-jest": "~5.0.0-rc.0",
|
"@vue/cli-plugin-unit-jest": "~5.0.0-rc.1",
|
||||||
"@vue/cli-service": "~5.0.0-rc.0",
|
"@vue/cli-service": "~5.0.0-rc.1",
|
||||||
"@vue/compiler-sfc": "^3.1.0",
|
"@vue/compiler-sfc": "^3.1.0",
|
||||||
"@vue/eslint-config-typescript": "^9.0.0",
|
"@vue/eslint-config-typescript": "^9.0.0",
|
||||||
"@vue/test-utils": "^1.1.0",
|
"@vue/test-utils": "^2.0.0-rc.16",
|
||||||
"@vue/vue2-jest": "^27.0.0-alpha.3",
|
"@vue/vue3-jest": "^27.0.0-alpha.3",
|
||||||
"@vue/vue3-jest": "^27.0.0-alpha.1",
|
"babel-core": "^7.0.0-bridge.0",
|
||||||
"cypress": "^8.3.0",
|
"cypress": "^8.3.0",
|
||||||
"eslint": "^8.2.0",
|
"eslint": "^8.2.0",
|
||||||
"eslint-config-prettier": "^8.3.0",
|
"eslint-config-prettier": "^8.3.0",
|
||||||
|
|
192
js/src/App.vue
192
js/src/App.vue
|
@ -4,7 +4,7 @@
|
||||||
<VueSkipTo to="#main" :label="$t('Skip to main content')" />
|
<VueSkipTo to="#main" :label="$t('Skip to main content')" />
|
||||||
<NavBar />
|
<NavBar />
|
||||||
<div v-if="config && config.demoMode">
|
<div v-if="config && config.demoMode">
|
||||||
<b-message
|
<o-message
|
||||||
class="container"
|
class="container"
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
:title="$t('Warning').toLocaleUpperCase()"
|
:title="$t('Warning').toLocaleUpperCase()"
|
||||||
|
@ -20,13 +20,13 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
</b-message>
|
</o-message>
|
||||||
</div>
|
</div>
|
||||||
<error v-if="error" :error="error" />
|
<error v-if="error" :error="error" />
|
||||||
|
|
||||||
<main id="main" v-else>
|
<main id="main" v-else>
|
||||||
<transition name="fade" mode="out-in">
|
<transition name="fade" mode="out-in">
|
||||||
<router-view ref="routerView" />
|
<!-- <router-view ref="routerView" /> -->
|
||||||
</transition>
|
</transition>
|
||||||
</main>
|
</main>
|
||||||
<mobilizon-footer />
|
<mobilizon-footer />
|
||||||
|
@ -34,7 +34,6 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Component, Ref, Vue, Watch } from "vue-property-decorator";
|
|
||||||
import NavBar from "./components/NavBar.vue";
|
import NavBar from "./components/NavBar.vue";
|
||||||
import {
|
import {
|
||||||
AUTH_ACCESS_TOKEN,
|
AUTH_ACCESS_TOKEN,
|
||||||
|
@ -47,81 +46,110 @@ import {
|
||||||
UPDATE_CURRENT_USER_CLIENT,
|
UPDATE_CURRENT_USER_CLIENT,
|
||||||
} from "./graphql/user";
|
} from "./graphql/user";
|
||||||
import Footer from "./components/Footer.vue";
|
import Footer from "./components/Footer.vue";
|
||||||
import Logo from "./components/Logo.vue";
|
|
||||||
import { initializeCurrentActor } from "./utils/auth";
|
import { initializeCurrentActor } from "./utils/auth";
|
||||||
import { CONFIG } from "./graphql/config";
|
import { CONFIG } from "./graphql/config";
|
||||||
import { IConfig } from "./types/config.model";
|
import { IConfig } from "./types/config.model";
|
||||||
import { ICurrentUser } from "./types/current-user.model";
|
import { ICurrentUser } from "./types/current-user.model";
|
||||||
import jwt_decode, { JwtPayload } from "jwt-decode";
|
import jwt_decode, { JwtPayload } from "jwt-decode";
|
||||||
import { refreshAccessToken } from "./apollo/utils";
|
import { refreshAccessToken } from "./apollo/utils";
|
||||||
import { Route } from "vue-router";
|
import { defineComponent, ref } from "vue";
|
||||||
|
import { useMutation, useQuery, useResult } from "@vue/apollo-composable";
|
||||||
|
import { RouterView } from "vue-router";
|
||||||
|
import { useAnnouncer } from "@vue-a11y/announcer";
|
||||||
|
import { useMeta } from "vue-meta";
|
||||||
|
|
||||||
@Component({
|
export default defineComponent({
|
||||||
apollo: {
|
name: "App",
|
||||||
currentUser: CURRENT_USER_CLIENT,
|
setup() {
|
||||||
config: CONFIG,
|
const { result: configResult } = useQuery(CONFIG);
|
||||||
|
const config = useResult<{ config: IConfig }>(configResult);
|
||||||
|
|
||||||
|
const { result } = useQuery(CURRENT_USER_CLIENT);
|
||||||
|
const currentUser = useResult<{ currentUser: ICurrentUser }>(result);
|
||||||
|
|
||||||
|
const { mutate: updateUserClient } = useMutation(
|
||||||
|
UPDATE_CURRENT_USER_CLIENT
|
||||||
|
);
|
||||||
|
|
||||||
|
const interval: number | undefined = 0;
|
||||||
|
const routerView = ref<InstanceType<typeof RouterView> | null>(null);
|
||||||
|
|
||||||
|
useMeta({ titleTemplate: "%s | Mobilizon" });
|
||||||
|
|
||||||
|
return {
|
||||||
|
config,
|
||||||
|
currentUser,
|
||||||
|
updateUserClient,
|
||||||
|
online: false,
|
||||||
|
interval,
|
||||||
|
routerView,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
Logo,
|
|
||||||
NavBar,
|
NavBar,
|
||||||
error: () =>
|
error: () =>
|
||||||
import(/* webpackChunkName: "editor" */ "./components/Error.vue"),
|
import(/* webpackChunkName: "editor" */ "./components/Error.vue"),
|
||||||
"mobilizon-footer": Footer,
|
"mobilizon-footer": Footer,
|
||||||
},
|
},
|
||||||
metaInfo() {
|
|
||||||
return {
|
|
||||||
titleTemplate: "%s | Mobilizon",
|
|
||||||
};
|
|
||||||
},
|
|
||||||
})
|
|
||||||
export default class App extends Vue {
|
|
||||||
config!: IConfig;
|
|
||||||
|
|
||||||
currentUser!: ICurrentUser;
|
|
||||||
|
|
||||||
error: Error | null = null;
|
|
||||||
|
|
||||||
online = true;
|
|
||||||
|
|
||||||
interval: number | undefined = undefined;
|
|
||||||
|
|
||||||
@Ref("routerView") routerView!: Vue;
|
|
||||||
|
|
||||||
async created(): Promise<void> {
|
async created(): Promise<void> {
|
||||||
if (await this.initializeCurrentUser()) {
|
if (await this.initializeCurrentUser()) {
|
||||||
await initializeCurrentActor(this.$apollo.provider.defaultClient);
|
await initializeCurrentActor(this.$apollo.provider.defaultClient);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
methods: {
|
||||||
errorCaptured(error: Error): void {
|
async initializeCurrentUser(): Promise<boolean> {
|
||||||
this.error = error;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async initializeCurrentUser() {
|
|
||||||
const userId = localStorage.getItem(AUTH_USER_ID);
|
const userId = localStorage.getItem(AUTH_USER_ID);
|
||||||
const userEmail = localStorage.getItem(AUTH_USER_EMAIL);
|
const userEmail = localStorage.getItem(AUTH_USER_EMAIL);
|
||||||
const accessToken = localStorage.getItem(AUTH_ACCESS_TOKEN);
|
const accessToken = localStorage.getItem(AUTH_ACCESS_TOKEN);
|
||||||
const role = localStorage.getItem(AUTH_USER_ROLE);
|
const role = localStorage.getItem(AUTH_USER_ROLE);
|
||||||
|
|
||||||
if (userId && userEmail && accessToken && role) {
|
if (userId && userEmail && accessToken && role) {
|
||||||
return this.$apollo.mutate({
|
this.updateUserClient({
|
||||||
mutation: UPDATE_CURRENT_USER_CLIENT,
|
|
||||||
variables: {
|
|
||||||
id: userId,
|
id: userId,
|
||||||
email: userEmail,
|
email: userEmail,
|
||||||
isLoggedIn: true,
|
isLoggedIn: true,
|
||||||
role,
|
role,
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
},
|
||||||
|
async refreshApp(registration: ServiceWorkerRegistration): Promise<any> {
|
||||||
|
const worker = registration.waiting;
|
||||||
|
if (!worker) {
|
||||||
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
console.debug("Doing worker.skipWaiting().");
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const channel = new MessageChannel();
|
||||||
|
|
||||||
|
channel.port1.onmessage = (event) => {
|
||||||
|
console.debug("Done worker.skipWaiting().");
|
||||||
|
if (event.data.error) {
|
||||||
|
reject(event.data);
|
||||||
|
} else {
|
||||||
|
resolve(event.data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
console.debug("calling skip waiting");
|
||||||
|
worker?.postMessage({ type: "skip-waiting" }, [channel.port2]);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
showOfflineNetworkWarnin(): void {
|
||||||
|
// this.$notifier.error(this.$t("You are offline") as string);
|
||||||
|
},
|
||||||
|
extractPageTitleFromRoute(route: any): string {
|
||||||
|
if (route.meta?.announcer?.message) {
|
||||||
|
return route.meta?.announcer?.message();
|
||||||
|
}
|
||||||
|
return document.title;
|
||||||
|
},
|
||||||
|
},
|
||||||
mounted(): void {
|
mounted(): void {
|
||||||
this.online = window.navigator.onLine;
|
this.online = window.navigator.onLine;
|
||||||
window.addEventListener("offline", () => {
|
window.addEventListener("offline", () => {
|
||||||
this.online = false;
|
this.online = false;
|
||||||
this.showOfflineNetworkWarning();
|
// this.showOfflineNetworkWarning();
|
||||||
console.debug("offline");
|
console.debug("offline");
|
||||||
});
|
});
|
||||||
window.addEventListener("online", () => {
|
window.addEventListener("online", () => {
|
||||||
|
@ -129,7 +157,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({
|
this.$oruga.snackbar.open({
|
||||||
queue: false,
|
queue: false,
|
||||||
indefinite: true,
|
indefinite: true,
|
||||||
type: "is-secondary",
|
type: "is-secondary",
|
||||||
|
@ -168,76 +196,40 @@ export default class App extends Vue {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 60000);
|
}, 60000);
|
||||||
}
|
},
|
||||||
|
|
||||||
private async refreshApp(
|
|
||||||
registration: ServiceWorkerRegistration
|
|
||||||
): Promise<any> {
|
|
||||||
const worker = registration.waiting;
|
|
||||||
if (!worker) {
|
|
||||||
return Promise.resolve();
|
|
||||||
}
|
|
||||||
console.debug("Doing worker.skipWaiting().");
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const channel = new MessageChannel();
|
|
||||||
|
|
||||||
channel.port1.onmessage = (event) => {
|
|
||||||
console.debug("Done worker.skipWaiting().");
|
|
||||||
if (event.data.error) {
|
|
||||||
reject(event.data);
|
|
||||||
} else {
|
|
||||||
resolve(event.data);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
console.debug("calling skip waiting");
|
|
||||||
worker?.postMessage({ type: "skip-waiting" }, [channel.port2]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
showOfflineNetworkWarning(): void {
|
|
||||||
this.$notifier.error(this.$t("You are offline") as string);
|
|
||||||
}
|
|
||||||
|
|
||||||
unmounted(): void {
|
unmounted(): void {
|
||||||
clearInterval(this.interval);
|
clearInterval(this.interval);
|
||||||
this.interval = undefined;
|
this.interval = 0;
|
||||||
}
|
},
|
||||||
|
async beforeRouteUpdate(to) {
|
||||||
@Watch("$route", { immediate: true })
|
const pageTitle = this.extractPageTitleFromRoute(to);
|
||||||
updateAnnouncement(route: Route): void {
|
|
||||||
const pageTitle = this.extractPageTitleFromRoute(route);
|
|
||||||
if (pageTitle) {
|
if (pageTitle) {
|
||||||
this.$announcer.polite(
|
const { polite } = useAnnouncer();
|
||||||
|
polite(
|
||||||
this.$t("Navigated to {pageTitle}", {
|
this.$t("Navigated to {pageTitle}", {
|
||||||
pageTitle,
|
pageTitle,
|
||||||
}) as string
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// Set the focus to the router view
|
// Set the focus to the router view
|
||||||
// https://marcus.io/blog/accessible-routing-vuejs
|
// https://marcus.io/blog/accessible-routing-vuejs
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const focusTarget = this.routerView?.$el as HTMLElement;
|
console.log(this.routerView);
|
||||||
if (focusTarget) {
|
// const focusTarget = this.routerView?.$el as HTMLElement;
|
||||||
// Make focustarget programmatically focussable
|
// if (focusTarget) {
|
||||||
focusTarget.setAttribute("tabindex", "-1");
|
// // Make focustarget programmatically focussable
|
||||||
|
// focusTarget.setAttribute("tabindex", "-1");
|
||||||
|
|
||||||
// Focus element
|
// // Focus element
|
||||||
focusTarget.focus();
|
// focusTarget.focus();
|
||||||
|
|
||||||
// Remove tabindex from focustarget.
|
// // Remove tabindex from focustarget.
|
||||||
// Reason: https://axesslab.com/skip-links/#update-3-a-comment-from-gov-uk
|
// // Reason: https://axesslab.com/skip-links/#update-3-a-comment-from-gov-uk
|
||||||
focusTarget.removeAttribute("tabindex");
|
// focusTarget.removeAttribute("tabindex");
|
||||||
}
|
// }
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
},
|
||||||
|
});
|
||||||
extractPageTitleFromRoute(route: Route): string {
|
|
||||||
if (route.meta?.announcer?.message) {
|
|
||||||
return route.meta?.announcer?.message();
|
|
||||||
}
|
|
||||||
return document.title;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<b-autocomplete
|
<o-autocomplete
|
||||||
:data="baseData"
|
:data="baseData"
|
||||||
:placeholder="$t('Actor')"
|
:placeholder="$t('Actor')"
|
||||||
v-model="name"
|
v-model="name"
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
v-if="props.option.avatar"
|
v-if="props.option.avatar"
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
<b-icon v-else icon="account-circle" />
|
<o-icon v-else icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
<span v-if="props.option.name">
|
<span v-if="props.option.name">
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
Thats it! No more movies found.
|
Thats it! No more movies found.
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</b-autocomplete>
|
</o-autocomplete>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Component, Model, Vue, Watch } from "vue-property-decorator";
|
import { Component, Model, Vue, Watch } from "vue-property-decorator";
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<figure class="image is-32x32" v-if="actor.avatar">
|
<figure class="image is-32x32" v-if="actor.avatar">
|
||||||
<img class="is-rounded" :src="actor.avatar.url" alt="" />
|
<img class="is-rounded" :src="actor.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-medium" icon="account-circle" />
|
<o-icon v-else size="is-medium" icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<figure class="image is-24x24" v-if="actor.avatar">
|
<figure class="image is-24x24" v-if="actor.avatar">
|
||||||
<img class="is-rounded" :src="actor.avatar.url" alt="" />
|
<img class="is-rounded" :src="actor.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-medium" icon="account-circle" />
|
<o-icon v-else size="is-medium" icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="actor-name">
|
<div class="actor-name">
|
||||||
|
|
|
@ -1,37 +1,40 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="activity-item">
|
<div class="activity-item">
|
||||||
<b-icon :icon="'chat'" :type="iconColor" />
|
<o-icon :icon="'chat'" :type="iconColor" />
|
||||||
<div class="subject">
|
<div class="subject">
|
||||||
<i18n :path="translation" tag="p">
|
<i18n-t :path="translation" tag="p">
|
||||||
|
<template #discussion v-if="activity.object">
|
||||||
<router-link
|
<router-link
|
||||||
v-if="activity.object"
|
|
||||||
slot="discussion"
|
|
||||||
:to="{
|
:to="{
|
||||||
name: RouteName.DISCUSSION,
|
name: RouteName.DISCUSSION,
|
||||||
params: { slug: subjectParams.discussion_slug },
|
params: { slug: subjectParams.discussion_slug },
|
||||||
}"
|
}"
|
||||||
>{{ subjectParams.discussion_title }}</router-link
|
>{{ subjectParams.discussion_title }}</router-link
|
||||||
>
|
>
|
||||||
<b v-else slot="discussion">{{ subjectParams.discussion_title }}</b>
|
</template>
|
||||||
<router-link
|
<template v-else #discussion>
|
||||||
|
<b>{{ subjectParams.discussion_title }}</b>
|
||||||
|
</template>
|
||||||
|
<template
|
||||||
v-if="activity.object && subjectParams.old_discussion_title"
|
v-if="activity.object && subjectParams.old_discussion_title"
|
||||||
slot="old_discussion"
|
#old_discussion
|
||||||
|
>
|
||||||
|
<router-link
|
||||||
:to="{
|
:to="{
|
||||||
name: RouteName.DISCUSSION,
|
name: RouteName.DISCUSSION,
|
||||||
params: { slug: subjectParams.discussion_slug },
|
params: { slug: subjectParams.discussion_slug },
|
||||||
}"
|
}"
|
||||||
>{{ subjectParams.old_discussion_title }}</router-link
|
>{{ subjectParams.old_discussion_title }}</router-link
|
||||||
>
|
>
|
||||||
<b
|
</template>
|
||||||
|
<template
|
||||||
|
#old_discussion
|
||||||
v-else-if="subjectParams.old_discussion_title"
|
v-else-if="subjectParams.old_discussion_title"
|
||||||
slot="old_discussion"
|
|
||||||
>{{ subjectParams.old_discussion_title }}</b
|
|
||||||
>
|
|
||||||
<popover-actor-card
|
|
||||||
:actor="activity.author"
|
|
||||||
:inline="true"
|
|
||||||
slot="profile"
|
|
||||||
>
|
>
|
||||||
|
<b>{{ subjectParams.old_discussion_title }}</b>
|
||||||
|
</template>
|
||||||
|
<template #profile>
|
||||||
|
<popover-actor-card :actor="activity.author" :inline="true">
|
||||||
<b>
|
<b>
|
||||||
{{
|
{{
|
||||||
$t("@{username}", {
|
$t("@{username}", {
|
||||||
|
@ -39,7 +42,8 @@
|
||||||
})
|
})
|
||||||
}}</b
|
}}</b
|
||||||
></popover-actor-card
|
></popover-actor-card
|
||||||
></i18n
|
>
|
||||||
|
</template></i18n-t
|
||||||
>
|
>
|
||||||
<small class="has-text-grey-dark activity-date">{{
|
<small class="has-text-grey-dark activity-date">{{
|
||||||
activity.insertedAt | formatTimeString
|
activity.insertedAt | formatTimeString
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="activity-item">
|
<div class="activity-item">
|
||||||
<b-icon :icon="'calendar'" :type="iconColor" />
|
<o-icon :icon="'calendar'" :type="iconColor" />
|
||||||
<div class="subject">
|
<div class="subject">
|
||||||
<i18n :path="translation" tag="p">
|
<i18n :path="translation" tag="p">
|
||||||
<router-link
|
<router-link
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="activity-item">
|
<div class="activity-item">
|
||||||
<b-icon :icon="'cog'" :type="iconColor" />
|
<o-icon :icon="'cog'" :type="iconColor" />
|
||||||
<div class="subject">
|
<div class="subject">
|
||||||
<i18n :path="translation" tag="p">
|
<i18n :path="translation" tag="p">
|
||||||
<router-link
|
<router-link
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="activity-item">
|
<div class="activity-item">
|
||||||
<b-icon :icon="icon" :type="iconColor" />
|
<o-icon :icon="icon" :type="iconColor" />
|
||||||
<div class="subject">
|
<div class="subject">
|
||||||
<i18n :path="translation" tag="p">
|
<i18n :path="translation" tag="p">
|
||||||
<popover-actor-card
|
<popover-actor-card
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="activity-item">
|
<div class="activity-item">
|
||||||
<b-icon :icon="'bullhorn'" :type="iconColor" />
|
<o-icon :icon="'bullhorn'" :type="iconColor" />
|
||||||
<div class="subject">
|
<div class="subject">
|
||||||
<i18n :path="translation" tag="p">
|
<i18n :path="translation" tag="p">
|
||||||
<router-link
|
<router-link
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="activity-item">
|
<div class="activity-item">
|
||||||
<b-icon :icon="'link'" :type="iconColor" />
|
<o-icon :icon="'link'" :type="iconColor" />
|
||||||
<div class="subject">
|
<div class="subject">
|
||||||
<i18n :path="translation" tag="p">
|
<i18n :path="translation" tag="p">
|
||||||
<router-link v-if="activity.object" slot="resource" :to="path">{{
|
<router-link v-if="activity.object" slot="resource" :to="path">{{
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="activity-item">
|
<div class="activity-item">
|
||||||
<span>
|
<span>
|
||||||
<b-skeleton circle width="32px" height="32px"></b-skeleton>
|
<o-skeleton circle width="32px" height="32px"></o-skeleton>
|
||||||
</span>
|
</span>
|
||||||
<div class="subject">
|
<div class="subject">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<p>
|
<p>
|
||||||
<b-skeleton active></b-skeleton>
|
<o-skeleton active></o-skeleton>
|
||||||
<b-skeleton active class="datetime"></b-skeleton>
|
<o-skeleton active class="datetime"></o-skeleton>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<address dir="auto">
|
<address dir="auto">
|
||||||
<b-icon
|
<o-icon
|
||||||
v-if="showIcon"
|
v-if="showIcon"
|
||||||
:icon="address.poiInfos.poiIcon.icon"
|
:icon="address.poiInfos.poiIcon.icon"
|
||||||
size="is-medium"
|
size="is-medium"
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
: physicalAddress.description
|
: physicalAddress.description
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-icon icon="map-marker" />
|
<o-icon icon="map-marker" />
|
||||||
<span v-if="isDescriptionDifferentFromLocality">
|
<span v-if="isDescriptionDifferentFromLocality">
|
||||||
{{ physicalAddress.description }},
|
{{ physicalAddress.description }},
|
||||||
{{ physicalAddress.locality }}
|
{{ physicalAddress.locality }}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<b-table
|
<o-table
|
||||||
v-show="relayFollowers.elements.length > 0"
|
v-show="relayFollowers.elements.length > 0"
|
||||||
:data="relayFollowers.elements"
|
:data="relayFollowers.elements"
|
||||||
:loading="$apollo.queries.relayFollowers.loading"
|
:loading="$apollo.queries.relayFollowers.loading"
|
||||||
|
@ -21,26 +21,26 @@
|
||||||
checkable
|
checkable
|
||||||
checkbox-position="left"
|
checkbox-position="left"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="actor.id"
|
field="actor.id"
|
||||||
label="ID"
|
label="ID"
|
||||||
width="40"
|
width="40"
|
||||||
numeric
|
numeric
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
>{{ props.row.actor.id }}</b-table-column
|
>{{ props.row.actor.id }}</o-table-column
|
||||||
>
|
>
|
||||||
|
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="actor.type"
|
field="actor.type"
|
||||||
:label="$t('Type')"
|
:label="$t('Type')"
|
||||||
width="80"
|
width="80"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
>
|
>
|
||||||
<b-icon icon="lan" v-if="RelayMixin.isInstance(props.row.actor)" />
|
<o-icon icon="lan" v-if="RelayMixin.isInstance(props.row.actor)" />
|
||||||
<b-icon icon="account-circle" v-else />
|
<o-icon icon="account-circle" v-else />
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
|
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="approved"
|
field="approved"
|
||||||
:label="$t('Status')"
|
:label="$t('Status')"
|
||||||
width="100"
|
width="100"
|
||||||
|
@ -52,9 +52,9 @@
|
||||||
:class="`tag ${props.row.approved ? 'is-success' : 'is-danger'}`"
|
:class="`tag ${props.row.approved ? 'is-success' : 'is-danger'}`"
|
||||||
>{{ props.row.approved ? $t("Accepted") : $t("Pending") }}</span
|
>{{ props.row.approved ? $t("Accepted") : $t("Pending") }}</span
|
||||||
>
|
>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
|
|
||||||
<b-table-column field="actor.domain" :label="$t('Domain')" sortable>
|
<o-table-column field="actor.domain" :label="$t('Domain')" sortable>
|
||||||
<template v-slot:default="props">
|
<template v-slot:default="props">
|
||||||
<a
|
<a
|
||||||
@click="toggle(props.row)"
|
@click="toggle(props.row)"
|
||||||
|
@ -65,9 +65,9 @@
|
||||||
`${props.row.actor.preferredUsername}@${props.row.actor.domain}`
|
`${props.row.actor.preferredUsername}@${props.row.actor.domain}`
|
||||||
}}</a>
|
}}</a>
|
||||||
</template>
|
</template>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
|
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="targetActor.updatedAt"
|
field="targetActor.updatedAt"
|
||||||
:label="$t('Date')"
|
:label="$t('Date')"
|
||||||
sortable
|
sortable
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
locale: $dateFnsLocale,
|
locale: $dateFnsLocale,
|
||||||
})
|
})
|
||||||
}}</span
|
}}</span
|
||||||
></b-table-column
|
></o-table-column
|
||||||
>
|
>
|
||||||
|
|
||||||
<template #detail="props">
|
<template #detail="props">
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
|
|
||||||
<template slot="bottom-left" v-if="checkedRows.length > 0">
|
<template slot="bottom-left" v-if="checkedRows.length > 0">
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
@click="acceptRelays"
|
@click="acceptRelays"
|
||||||
type="is-success"
|
type="is-success"
|
||||||
v-if="checkedRowsHaveAtLeastOneToApprove"
|
v-if="checkedRowsHaveAtLeastOneToApprove"
|
||||||
|
@ -109,8 +109,8 @@
|
||||||
{ number: checkedRows.length }
|
{ number: checkedRows.length }
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-button>
|
</o-button>
|
||||||
<b-button @click="rejectRelays" type="is-danger">
|
<o-button @click="rejectRelays" type="is-danger">
|
||||||
{{
|
{{
|
||||||
$tc(
|
$tc(
|
||||||
"No instance to reject|Reject instance|Reject {number} instances",
|
"No instance to reject|Reject instance|Reject {number} instances",
|
||||||
|
@ -118,13 +118,13 @@
|
||||||
{ number: checkedRows.length }
|
{ number: checkedRows.length }
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
<b-message type="is-danger" v-if="relayFollowers.elements.length === 0">{{
|
<o-message type="is-danger" v-if="relayFollowers.elements.length === 0">{{
|
||||||
$t("No instance follows your instance yet.")
|
$t("No instance follows your instance yet.")
|
||||||
}}</b-message>
|
}}</o-message>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<form @submit="followRelay">
|
<form @submit="followRelay">
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Add an instance')"
|
:label="$t('Add an instance')"
|
||||||
custom-class="add-relay"
|
custom-class="add-relay"
|
||||||
horizontal
|
horizontal
|
||||||
>
|
>
|
||||||
<b-field grouped expanded size="is-large">
|
<o-field grouped expanded size="is-large">
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<b-input
|
<o-input
|
||||||
v-model="newRelayAddress"
|
v-model="newRelayAddress"
|
||||||
:placeholder="$t('Ex: mobilizon.fr')"
|
:placeholder="$t('Ex: mobilizon.fr')"
|
||||||
/>
|
/>
|
||||||
</p>
|
</p>
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<b-button type="is-primary" native-type="submit">{{
|
<o-button type="is-primary" native-type="submit">{{
|
||||||
$t("Add an instance")
|
$t("Add an instance")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
</b-field>
|
</o-field>
|
||||||
</form>
|
</form>
|
||||||
<b-table
|
<o-table
|
||||||
v-show="relayFollowings.elements.length > 0"
|
v-show="relayFollowings.elements.length > 0"
|
||||||
:data="relayFollowings.elements"
|
:data="relayFollowings.elements"
|
||||||
:loading="$apollo.queries.relayFollowings.loading"
|
:loading="$apollo.queries.relayFollowings.loading"
|
||||||
|
@ -43,29 +43,29 @@
|
||||||
checkable
|
checkable
|
||||||
checkbox-position="left"
|
checkbox-position="left"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="targetActor.id"
|
field="targetActor.id"
|
||||||
label="ID"
|
label="ID"
|
||||||
width="40"
|
width="40"
|
||||||
numeric
|
numeric
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
>{{ props.row.targetActor.id }}</b-table-column
|
>{{ props.row.targetActor.id }}</o-table-column
|
||||||
>
|
>
|
||||||
|
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="targetActor.type"
|
field="targetActor.type"
|
||||||
:label="$t('Type')"
|
:label="$t('Type')"
|
||||||
width="80"
|
width="80"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
>
|
>
|
||||||
<b-icon
|
<o-icon
|
||||||
icon="lan"
|
icon="lan"
|
||||||
v-if="RelayMixin.isInstance(props.row.targetActor)"
|
v-if="RelayMixin.isInstance(props.row.targetActor)"
|
||||||
/>
|
/>
|
||||||
<b-icon icon="account-circle" v-else />
|
<o-icon icon="account-circle" v-else />
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
|
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="approved"
|
field="approved"
|
||||||
:label="$t('Status')"
|
:label="$t('Status')"
|
||||||
width="100"
|
width="100"
|
||||||
|
@ -77,9 +77,9 @@
|
||||||
:class="`tag ${props.row.approved ? 'is-success' : 'is-danger'}`"
|
:class="`tag ${props.row.approved ? 'is-success' : 'is-danger'}`"
|
||||||
>{{ props.row.approved ? $t("Accepted") : $t("Pending") }}</span
|
>{{ props.row.approved ? $t("Accepted") : $t("Pending") }}</span
|
||||||
>
|
>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
|
|
||||||
<b-table-column field="targetActor.domain" :label="$t('Domain')" sortable>
|
<o-table-column field="targetActor.domain" :label="$t('Domain')" sortable>
|
||||||
<template v-slot:default="props">
|
<template v-slot:default="props">
|
||||||
<a
|
<a
|
||||||
@click="toggle(props.row)"
|
@click="toggle(props.row)"
|
||||||
|
@ -90,9 +90,9 @@
|
||||||
`${props.row.targetActor.preferredUsername}@${props.row.targetActor.domain}`
|
`${props.row.targetActor.preferredUsername}@${props.row.targetActor.domain}`
|
||||||
}}</a>
|
}}</a>
|
||||||
</template>
|
</template>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
|
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="targetActor.updatedAt"
|
field="targetActor.updatedAt"
|
||||||
:label="$t('Date')"
|
:label="$t('Date')"
|
||||||
sortable
|
sortable
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
locale: $dateFnsLocale,
|
locale: $dateFnsLocale,
|
||||||
})
|
})
|
||||||
}}</span
|
}}</span
|
||||||
></b-table-column
|
></o-table-column
|
||||||
>
|
>
|
||||||
|
|
||||||
<template #detail="props">
|
<template #detail="props">
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template slot="bottom-left" v-if="checkedRows.length > 0">
|
<template slot="bottom-left" v-if="checkedRows.length > 0">
|
||||||
<b-button @click="removeRelays" type="is-danger">
|
<o-button @click="removeRelays" type="is-danger">
|
||||||
{{
|
{{
|
||||||
$tc(
|
$tc(
|
||||||
"No instance to remove|Remove instance|Remove {number} instances",
|
"No instance to remove|Remove instance|Remove {number} instances",
|
||||||
|
@ -129,12 +129,12 @@
|
||||||
{ number: checkedRows.length }
|
{ number: checkedRows.length }
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-button>
|
</o-button>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
<b-message type="is-danger" v-if="relayFollowings.total === 0">{{
|
<o-message type="is-danger" v-if="relayFollowings.total === 0">{{
|
||||||
$t("You don't follow any instances yet.")
|
$t("You don't follow any instances yet.")
|
||||||
}}</b-message>
|
}}</o-message>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
>
|
>
|
||||||
<img class="is-rounded" :src="comment.actor.avatar.url" alt="" />
|
<img class="is-rounded" :src="comment.actor.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon class="media-left" v-else icon="account-circle" />
|
<o-icon class="media-left" v-else icon="account-circle" />
|
||||||
</popover-actor-card>
|
</popover-actor-card>
|
||||||
<div v-else class="media-left">
|
<div v-else class="media-left">
|
||||||
<figure
|
<figure
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
>
|
>
|
||||||
<img class="is-rounded" :src="comment.actor.avatar.url" alt="" />
|
<img class="is-rounded" :src="comment.actor.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else icon="account-circle" />
|
<o-icon v-else icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
@ -54,11 +54,11 @@
|
||||||
v-if="comment.actor.id === currentActor.id"
|
v-if="comment.actor.id === currentActor.id"
|
||||||
@click="deleteComment"
|
@click="deleteComment"
|
||||||
>
|
>
|
||||||
<b-icon icon="delete" size="is-small" aria-hidden="true" />
|
<o-icon icon="delete" size="is-small" aria-hidden="true" />
|
||||||
<span class="visually-hidden">{{ $t("Delete") }}</span>
|
<span class="visually-hidden">{{ $t("Delete") }}</span>
|
||||||
</button>
|
</button>
|
||||||
<button @click="reportModal()">
|
<button @click="reportModal()">
|
||||||
<b-icon icon="alert" size="is-small" />
|
<o-icon icon="alert" size="is-small" />
|
||||||
<span class="visually-hidden">{{ $t("Report") }}</span>
|
<span class="visually-hidden">{{ $t("Report") }}</span>
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
<div v-else>{{ $t("[This comment has been deleted]") }}</div>
|
<div v-else>{{ $t("[This comment has been deleted]") }}</div>
|
||||||
<div class="load-replies" v-if="comment.totalReplies">
|
<div class="load-replies" v-if="comment.totalReplies">
|
||||||
<p v-if="!showReplies" @click="fetchReplies">
|
<p v-if="!showReplies" @click="fetchReplies">
|
||||||
<b-icon icon="chevron-down" class="reply-btn" />
|
<o-icon icon="chevron-down" class="reply-btn" />
|
||||||
<span class="reply-btn">{{
|
<span class="reply-btn">{{
|
||||||
$tc("View a reply", comment.totalReplies, {
|
$tc("View a reply", comment.totalReplies, {
|
||||||
totalReplies: comment.totalReplies,
|
totalReplies: comment.totalReplies,
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
v-else-if="comment.totalReplies && showReplies"
|
v-else-if="comment.totalReplies && showReplies"
|
||||||
@click="showReplies = false"
|
@click="showReplies = false"
|
||||||
>
|
>
|
||||||
<b-icon icon="chevron-up" class="reply-btn" />
|
<o-icon icon="chevron-up" class="reply-btn" />
|
||||||
<span class="reply-btn">{{ $t("Hide replies") }}</span>
|
<span class="reply-btn">{{ $t("Hide replies") }}</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
@click="createReplyToComment()"
|
@click="createReplyToComment()"
|
||||||
>
|
>
|
||||||
<span class="icon is-small">
|
<span class="icon is-small">
|
||||||
<b-icon icon="reply" />
|
<o-icon icon="reply" />
|
||||||
</span>
|
</span>
|
||||||
<span>{{ $t("Reply") }}</span>
|
<span>{{ $t("Reply") }}</span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
<img :src="currentActor.avatar.url" alt="" />
|
<img :src="currentActor.avatar.url" alt="" />
|
||||||
</p>
|
</p>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else
|
v-else
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
@ -144,11 +144,11 @@
|
||||||
mode="comment"
|
mode="comment"
|
||||||
:aria-label="$t('Comment body')"
|
:aria-label="$t('Comment body')"
|
||||||
/>
|
/>
|
||||||
<b-button
|
<o-button
|
||||||
:disabled="newComment.text.trim().length === 0"
|
:disabled="newComment.text.trim().length === 0"
|
||||||
native-type="submit"
|
native-type="submit"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Post a reply") }}</b-button
|
>{{ $t("Post a reply") }}</o-button
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -508,7 +508,7 @@ article {
|
||||||
transition-property: opacity, transform;
|
transition-property: opacity, transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
.comment-replies-enter {
|
.comment-replies-enter-from {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: translateX(50px) scaleY(0.5);
|
transform: translateX(50px) scaleY(0.5);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
@submit.prevent="createCommentForEvent(newComment)"
|
@submit.prevent="createCommentForEvent(newComment)"
|
||||||
@keyup.ctrl.enter="createCommentForEvent(newComment)"
|
@keyup.ctrl.enter="createCommentForEvent(newComment)"
|
||||||
>
|
>
|
||||||
<b-notification
|
<o-notification
|
||||||
v-if="isEventOrganiser && !areCommentsClosed"
|
v-if="isEventOrganiser && !areCommentsClosed"
|
||||||
:closable="false"
|
:closable="false"
|
||||||
>{{ $t("Comments are closed for everybody else.") }}</b-notification
|
>{{ $t("Comments are closed for everybody else.") }}</o-notification
|
||||||
>
|
>
|
||||||
<article class="media">
|
<article class="media">
|
||||||
<figure class="media-left" v-if="newComment.actor">
|
<figure class="media-left" v-if="newComment.actor">
|
||||||
|
@ -31,28 +31,28 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="field notify-participants" v-if="isEventOrganiser">
|
<div class="field notify-participants" v-if="isEventOrganiser">
|
||||||
<b-switch
|
<o-switch
|
||||||
aria-labelledby="notify-participants-toggle"
|
aria-labelledby="notify-participants-toggle"
|
||||||
v-model="newComment.isAnnouncement"
|
v-model="newComment.isAnnouncement"
|
||||||
>{{ $t("Notify participants") }}</b-switch
|
>{{ $t("Notify participants") }}</o-switch
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="send-comment">
|
<div class="send-comment">
|
||||||
<b-button
|
<o-button
|
||||||
native-type="submit"
|
native-type="submit"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
class="comment-button-submit"
|
class="comment-button-submit"
|
||||||
icon-left="send"
|
icon-left="send"
|
||||||
>{{ $t("Send") }}</b-button
|
>{{ $t("Send") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</form>
|
</form>
|
||||||
<b-notification v-else-if="isConnected" :closable="false">{{
|
<o-notification v-else-if="isConnected" :closable="false">{{
|
||||||
$t("The organiser has chosen to close comments.")
|
$t("The organiser has chosen to close comments.")
|
||||||
}}</b-notification>
|
}}</o-notification>
|
||||||
<p
|
<p
|
||||||
v-if="$apollo.queries.comments.loading"
|
v-if="$apollo.queries.comments.loading"
|
||||||
class="loading has-text-centered"
|
class="loading has-text-centered"
|
||||||
|
@ -425,7 +425,7 @@ ul.comment-list li {
|
||||||
transition-property: opacity, transform;
|
transition-property: opacity, transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
.comment-list-enter {
|
.comment-list-enter-from {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: translateX(50px) scaleY(0.5);
|
transform: translateX(50px) scaleY(0.5);
|
||||||
}
|
}
|
||||||
|
@ -451,7 +451,7 @@ ul.comment-list li {
|
||||||
/* transition: opacity .5s;*/
|
/* transition: opacity .5s;*/
|
||||||
/*}*/
|
/*}*/
|
||||||
|
|
||||||
/*.comment-empty-list-enter {*/
|
/*.comment-empty-list-enter-from {*/
|
||||||
/* opacity: 0;*/
|
/* opacity: 0;*/
|
||||||
/*}*/
|
/*}*/
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
>
|
>
|
||||||
<img class="is-rounded" :src="comment.actor.avatar.url" alt="" />
|
<img class="is-rounded" :src="comment.actor.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-circle" />
|
<o-icon v-else size="is-large" icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="meta" dir="auto">
|
<div class="meta" dir="auto">
|
||||||
|
@ -29,30 +29,30 @@
|
||||||
comment.actor.id === currentActor.id
|
comment.actor.id === currentActor.id
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-dropdown aria-role="list">
|
<o-dropdown aria-role="list">
|
||||||
<b-icon slot="trigger" role="button" icon="dots-horizontal" />
|
<o-icon slot="trigger" role="button" icon="dots-horizontal" />
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
v-if="comment.actor.id === currentActor.id"
|
v-if="comment.actor.id === currentActor.id"
|
||||||
@click="toggleEditMode"
|
@click="toggleEditMode"
|
||||||
aria-role="menuitem"
|
aria-role="menuitem"
|
||||||
>
|
>
|
||||||
<b-icon icon="pencil"></b-icon>
|
<o-icon icon="pencil"></o-icon>
|
||||||
{{ $t("Edit") }}
|
{{ $t("Edit") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
v-if="comment.actor.id === currentActor.id"
|
v-if="comment.actor.id === currentActor.id"
|
||||||
@click="$emit('delete-comment', comment)"
|
@click="$emit('delete-comment', comment)"
|
||||||
aria-role="menuitem"
|
aria-role="menuitem"
|
||||||
>
|
>
|
||||||
<b-icon icon="delete"></b-icon>
|
<o-icon icon="delete"></o-icon>
|
||||||
{{ $t("Delete") }}
|
{{ $t("Delete") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<!-- <b-dropdown-item aria-role="listitem" @click="isReportModalActive = true">
|
<!-- <o-dropdown-item aria-role="listitem" @click="isReportModalActive = true">
|
||||||
<b-icon icon="flag" />
|
<o-icon icon="flag" />
|
||||||
{{ $t("Report") }}
|
{{ $t("Report") }}
|
||||||
</b-dropdown-item> -->
|
</o-dropdown-item> -->
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
</span>
|
</span>
|
||||||
<div class="post-infos">
|
<div class="post-infos">
|
||||||
<span :title="comment.insertedAt | formatDateTimeString">
|
<span :title="comment.insertedAt | formatDateTimeString">
|
||||||
|
@ -94,15 +94,15 @@
|
||||||
<form v-else class="edition" @submit.prevent="updateComment">
|
<form v-else class="edition" @submit.prevent="updateComment">
|
||||||
<editor v-model="updatedComment" :aria-label="$t('Comment body')" />
|
<editor v-model="updatedComment" :aria-label="$t('Comment body')" />
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
native-type="submit"
|
native-type="submit"
|
||||||
:disabled="['<p></p>', '', comment.text].includes(updatedComment)"
|
:disabled="['<p></p>', '', comment.text].includes(updatedComment)"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Update") }}</b-button
|
>{{ $t("Update") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button native-type="button" @click="toggleEditMode">{{
|
<o-button native-type="button" @click="toggleEditMode">{{
|
||||||
$t("Cancel")
|
$t("Cancel")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
alt
|
alt
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-medium" icon="account-circle" />
|
<o-icon v-else size="is-medium" icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="title-info-wrapper">
|
<div class="title-info-wrapper">
|
||||||
<div class="title-and-date">
|
<div class="title-and-date">
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Bold')"
|
:title="$t('Bold')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-bold" />
|
<o-icon icon="format-bold" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Italic')"
|
:title="$t('Italic')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-italic" />
|
<o-icon icon="format-italic" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Underline')"
|
:title="$t('Underline')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-underline" />
|
<o-icon icon="format-underline" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Heading Level 1')"
|
:title="$t('Heading Level 1')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-header-1" />
|
<o-icon icon="format-header-1" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Heading Level 2')"
|
:title="$t('Heading Level 2')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-header-2" />
|
<o-icon icon="format-header-2" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Heading Level 3')"
|
:title="$t('Heading Level 3')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-header-3" />
|
<o-icon icon="format-header-3" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Add link')"
|
:title="$t('Add link')"
|
||||||
>
|
>
|
||||||
<b-icon icon="link" />
|
<o-icon icon="link" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -91,7 +91,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Remove link')"
|
:title="$t('Remove link')"
|
||||||
>
|
>
|
||||||
<b-icon icon="link-off" />
|
<o-icon icon="link-off" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -101,7 +101,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Add picture')"
|
:title="$t('Add picture')"
|
||||||
>
|
>
|
||||||
<b-icon icon="image" />
|
<o-icon icon="image" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -112,7 +112,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Bullet list')"
|
:title="$t('Bullet list')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-list-bulleted" />
|
<o-icon icon="format-list-bulleted" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Ordered list')"
|
:title="$t('Ordered list')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-list-numbered" />
|
<o-icon icon="format-list-numbered" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -134,7 +134,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Quote')"
|
:title="$t('Quote')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-quote-close" />
|
<o-icon icon="format-quote-close" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Undo')"
|
:title="$t('Undo')"
|
||||||
>
|
>
|
||||||
<b-icon icon="undo" />
|
<o-icon icon="undo" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -154,7 +154,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Redo')"
|
:title="$t('Redo')"
|
||||||
>
|
>
|
||||||
<b-icon icon="redo" />
|
<o-icon icon="redo" />
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Bold')"
|
:title="$t('Bold')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-bold" />
|
<o-icon icon="format-bold" />
|
||||||
<span class="visually-hidden">{{ $t("Bold") }}</span>
|
<span class="visually-hidden">{{ $t("Bold") }}</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@
|
||||||
type="button"
|
type="button"
|
||||||
:title="$t('Italic')"
|
:title="$t('Italic')"
|
||||||
>
|
>
|
||||||
<b-icon icon="format-italic" />
|
<o-icon icon="format-italic" />
|
||||||
<span class="visually-hidden">{{ $t("Italic") }}</span>
|
<span class="visually-hidden">{{ $t("Italic") }}</span>
|
||||||
</button>
|
</button>
|
||||||
</bubble-menu>
|
</bubble-menu>
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
/>
|
/>
|
||||||
</picture>
|
</picture>
|
||||||
</div>
|
</div>
|
||||||
<b-message type="is-danger" class="is-size-5">
|
<o-message type="is-danger" class="is-size-5">
|
||||||
<h1>
|
<h1>
|
||||||
{{
|
{{
|
||||||
$t(
|
$t(
|
||||||
|
@ -33,21 +33,23 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</h1>
|
</h1>
|
||||||
</b-message>
|
</o-message>
|
||||||
</section>
|
</section>
|
||||||
<b-loading v-if="$apollo.loading" :active.sync="$apollo.loading" />
|
<o-loading v-if="$apollo.loading" :active.sync="$apollo.loading" />
|
||||||
<section v-else>
|
<section v-else>
|
||||||
<h2 class="is-size-5">{{ $t("What can I do to help?") }}</h2>
|
<h2 class="is-size-5">{{ $t("What can I do to help?") }}</h2>
|
||||||
<p class="content">
|
<p class="content">
|
||||||
<i18n
|
<i18n-t
|
||||||
tag="span"
|
tag="span"
|
||||||
path="{instanceName} is an instance of {mobilizon_link}, a free software built with the community."
|
path="{instanceName} is an instance of {mobilizon_link}, a free software built with the community."
|
||||||
>
|
>
|
||||||
<b slot="instanceName">{{ config.name }}</b>
|
<template #instanceName>
|
||||||
<a slot="mobilizon_link" href="https://joinmobilizon.org">{{
|
<b>{{ config.name }}</b>
|
||||||
$t("Mobilizon")
|
</template>
|
||||||
}}</a>
|
<template #mobilizon_link>
|
||||||
</i18n>
|
<a href="https://joinmobilizon.org">{{ $t("Mobilizon") }}</a>
|
||||||
|
</template>
|
||||||
|
</i18n-t>
|
||||||
{{
|
{{
|
||||||
$t(
|
$t(
|
||||||
"We improve this software thanks to your feedback. To let us know about this issue, two possibilities (both unfortunately require user account creation):"
|
"We improve this software thanks to your feedback. To let us know about this issue, two possibilities (both unfortunately require user account creation):"
|
||||||
|
@ -97,18 +99,18 @@
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
:label="tooltipConfig.label"
|
:label="tooltipConfig.label"
|
||||||
:type="tooltipConfig.type"
|
:type="tooltipConfig.type"
|
||||||
:active="copied !== false"
|
:active="copied !== false"
|
||||||
always
|
always
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
@click="copyErrorToClipboard"
|
@click="copyErrorToClipboard"
|
||||||
@keyup.enter="copyErrorToClipboard"
|
@keyup.enter="copyErrorToClipboard"
|
||||||
>{{ $t("Copy details to clipboard") }}</b-button
|
>{{ $t("Copy details to clipboard") }}</o-button
|
||||||
>
|
>
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="address-autocomplete">
|
<div class="address-autocomplete">
|
||||||
<b-field expanded>
|
<o-field expanded>
|
||||||
<b-autocomplete
|
<o-autocomplete
|
||||||
:data="addressData"
|
:data="addressData"
|
||||||
v-model="queryText"
|
v-model="queryText"
|
||||||
:placeholder="$t('e.g. 10 Rue Jangot')"
|
:placeholder="$t('e.g. 10 Rue Jangot')"
|
||||||
|
@ -15,31 +15,31 @@
|
||||||
dir="auto"
|
dir="auto"
|
||||||
>
|
>
|
||||||
<template #default="{ option }">
|
<template #default="{ option }">
|
||||||
<b-icon :icon="option.poiInfos.poiIcon.icon" />
|
<o-icon :icon="option.poiInfos.poiIcon.icon" />
|
||||||
<b>{{ option.poiInfos.name }}</b
|
<b>{{ option.poiInfos.name }}</b
|
||||||
><br />
|
><br />
|
||||||
<small>{{ option.poiInfos.alternativeName }}</small>
|
<small>{{ option.poiInfos.alternativeName }}</small>
|
||||||
</template>
|
</template>
|
||||||
</b-autocomplete>
|
</o-autocomplete>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field
|
<o-field
|
||||||
v-if="canDoGeoLocation"
|
v-if="canDoGeoLocation"
|
||||||
:message="fieldErrors"
|
:message="fieldErrors"
|
||||||
:type="{ 'is-danger': fieldErrors.length }"
|
:type="{ 'is-danger': fieldErrors.length }"
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-text"
|
type="is-text"
|
||||||
v-if="!gettingLocation"
|
v-if="!gettingLocation"
|
||||||
icon-right="target"
|
icon-right="target"
|
||||||
@click="locateMe"
|
@click="locateMe"
|
||||||
@keyup.enter="locateMe"
|
@keyup.enter="locateMe"
|
||||||
>{{ $t("Use my location") }}</b-button
|
>{{ $t("Use my location") }}</o-button
|
||||||
>
|
>
|
||||||
<span v-else>{{ $t("Getting location") }}</span>
|
<span v-else>{{ $t("Getting location") }}</span>
|
||||||
</b-field>
|
</o-field>
|
||||||
<!--
|
<!--
|
||||||
<div v-if="selected && selected.geom" class="control">
|
<div v-if="selected && selected.geom" class="control">
|
||||||
<b-checkbox @input="togglemap" />
|
<o-checkbox @input="togglemap" />
|
||||||
<label class="label">{{ $t("Show map") }}</label>
|
<label class="label">{{ $t("Show map") }}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -13,18 +13,18 @@
|
||||||
class="tag-container"
|
class="tag-container"
|
||||||
v-if="event.tags || event.status !== EventStatus.CONFIRMED"
|
v-if="event.tags || event.status !== EventStatus.CONFIRMED"
|
||||||
>
|
>
|
||||||
<b-tag type="is-info" v-if="event.status === EventStatus.TENTATIVE">
|
<o-tag type="is-info" v-if="event.status === EventStatus.TENTATIVE">
|
||||||
{{ $t("Tentative") }}
|
{{ $t("Tentative") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag type="is-danger" v-if="event.status === EventStatus.CANCELLED">
|
<o-tag type="is-danger" v-if="event.status === EventStatus.CANCELLED">
|
||||||
{{ $t("Cancelled") }}
|
{{ $t("Cancelled") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: RouteName.TAG, params: { tag: tag.title } }"
|
:to="{ name: RouteName.TAG, params: { tag: tag.title } }"
|
||||||
v-for="tag in (event.tags || []).slice(0, 3)"
|
v-for="tag in (event.tags || []).slice(0, 3)"
|
||||||
:key="tag.slug"
|
:key="tag.slug"
|
||||||
>
|
>
|
||||||
<b-tag type="is-light" dir="auto">{{ tag.title }}</b-tag>
|
<o-tag type="is-light" dir="auto">{{ tag.title }}</o-tag>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
</figure>
|
</figure>
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else icon="account-circle" />
|
<o-icon v-else icon="account-circle" />
|
||||||
<span class="organizer-name">
|
<span class="organizer-name">
|
||||||
{{ organizerDisplayName(event) }}
|
{{ organizerDisplayName(event) }}
|
||||||
</span>
|
</span>
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
dir="auto"
|
dir="auto"
|
||||||
v-else-if="event.options && event.options.isOnline"
|
v-else-if="event.options && event.options.isOnline"
|
||||||
>
|
>
|
||||||
<b-icon icon="video" />
|
<o-icon icon="video" />
|
||||||
<span>{{ $t("Online") }}</span>
|
<span>{{ $t("Online") }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -23,13 +23,13 @@
|
||||||
formatDateTimeString(beginsOn, timezoneToShow, showStartTime)
|
formatDateTimeString(beginsOn, timezoneToShow, showStartTime)
|
||||||
}}</span>
|
}}</span>
|
||||||
<br />
|
<br />
|
||||||
<b-switch
|
<o-switch
|
||||||
size="is-small"
|
size="is-small"
|
||||||
v-model="showLocalTimezone"
|
v-model="showLocalTimezone"
|
||||||
v-if="differentFromUserTimezone"
|
v-if="differentFromUserTimezone"
|
||||||
>
|
>
|
||||||
{{ singleTimeZone }}
|
{{ singleTimeZone }}
|
||||||
</b-switch>
|
</o-switch>
|
||||||
</p>
|
</p>
|
||||||
<p v-else-if="isSameDay() && showStartTime && showEndTime">
|
<p v-else-if="isSameDay() && showStartTime && showEndTime">
|
||||||
<span>{{
|
<span>{{
|
||||||
|
@ -40,13 +40,13 @@
|
||||||
})
|
})
|
||||||
}}</span>
|
}}</span>
|
||||||
<br />
|
<br />
|
||||||
<b-switch
|
<o-switch
|
||||||
size="is-small"
|
size="is-small"
|
||||||
v-model="showLocalTimezone"
|
v-model="showLocalTimezone"
|
||||||
v-if="differentFromUserTimezone"
|
v-if="differentFromUserTimezone"
|
||||||
>
|
>
|
||||||
{{ singleTimeZone }}
|
{{ singleTimeZone }}
|
||||||
</b-switch>
|
</o-switch>
|
||||||
</p>
|
</p>
|
||||||
<p v-else-if="isSameDay() && showStartTime && !showEndTime">
|
<p v-else-if="isSameDay() && showStartTime && !showEndTime">
|
||||||
{{
|
{{
|
||||||
|
@ -74,13 +74,13 @@
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
<br />
|
<br />
|
||||||
<b-switch
|
<o-switch
|
||||||
size="is-small"
|
size="is-small"
|
||||||
v-model="showLocalTimezone"
|
v-model="showLocalTimezone"
|
||||||
v-if="differentFromUserTimezone"
|
v-if="differentFromUserTimezone"
|
||||||
>
|
>
|
||||||
{{ multipleTimeZones }}
|
{{ multipleTimeZones }}
|
||||||
</b-switch>
|
</o-switch>
|
||||||
</p>
|
</p>
|
||||||
<p v-else-if="endsOn && showStartTime">
|
<p v-else-if="endsOn && showStartTime">
|
||||||
<span>
|
<span>
|
||||||
|
@ -93,13 +93,13 @@
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
<br />
|
<br />
|
||||||
<b-switch
|
<o-switch
|
||||||
size="is-small"
|
size="is-small"
|
||||||
v-model="showLocalTimezone"
|
v-model="showLocalTimezone"
|
||||||
v-if="differentFromUserTimezone"
|
v-if="differentFromUserTimezone"
|
||||||
>
|
>
|
||||||
{{ singleTimeZone }}
|
{{ singleTimeZone }}
|
||||||
</b-switch>
|
</o-switch>
|
||||||
</p>
|
</p>
|
||||||
<p v-else-if="endsOn">
|
<p v-else-if="endsOn">
|
||||||
{{
|
{{
|
||||||
|
|
|
@ -33,15 +33,15 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<span class="column is-narrow">
|
<span class="column is-narrow">
|
||||||
<b-icon
|
<o-icon
|
||||||
icon="earth"
|
icon="earth"
|
||||||
v-if="event.visibility === EventVisibility.PUBLIC"
|
v-if="event.visibility === EventVisibility.PUBLIC"
|
||||||
/>
|
/>
|
||||||
<b-icon
|
<o-icon
|
||||||
icon="link"
|
icon="link"
|
||||||
v-if="event.visibility === EventVisibility.UNLISTED"
|
v-if="event.visibility === EventVisibility.UNLISTED"
|
||||||
/>
|
/>
|
||||||
<b-icon
|
<o-icon
|
||||||
icon="lock"
|
icon="lock"
|
||||||
v-if="event.visibility === EventVisibility.PRIVATE"
|
v-if="event.visibility === EventVisibility.PRIVATE"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
height="32"
|
height="32"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
<b-icon v-else-if="icon" :icon="icon" size="is-medium" />
|
<o-icon v-else-if="icon" :icon="icon" size="is-medium" />
|
||||||
<div class="content-wrapper" :class="{ 'padding-left': icon }">
|
<div class="content-wrapper" :class="{ 'padding-left': icon }">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<b-icon v-else-if="metadataItem.icon" :icon="metadataItem.icon" />
|
<o-icon v-else-if="metadataItem.icon" :icon="metadataItem.icon" />
|
||||||
<b-icon v-else icon="help-circle" />
|
<o-icon v-else icon="help-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
<b>{{ metadataItem.title || metadataItem.label }}</b>
|
<b>{{ metadataItem.title || metadataItem.label }}</b>
|
||||||
|
@ -28,19 +28,19 @@
|
||||||
metadataItem.choices
|
metadataItem.choices
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-field v-for="(value, key) in metadataItem.choices" :key="key">
|
<o-field v-for="(value, key) in metadataItem.choices" :key="key">
|
||||||
<b-radio v-model="metadataItemValue" :native-value="key">{{
|
<o-radio v-model="metadataItemValue" :native-value="key">{{
|
||||||
value
|
value
|
||||||
}}</b-radio>
|
}}</o-radio>
|
||||||
</b-field>
|
</o-field>
|
||||||
</div>
|
</div>
|
||||||
<b-field
|
<o-field
|
||||||
v-else-if="
|
v-else-if="
|
||||||
metadataItem.type === EventMetadataType.STRING &&
|
metadataItem.type === EventMetadataType.STRING &&
|
||||||
metadataItem.keyType == EventMetadataKeyType.URL
|
metadataItem.keyType == EventMetadataKeyType.URL
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
@blur="validatePattern"
|
@blur="validatePattern"
|
||||||
ref="urlInput"
|
ref="urlInput"
|
||||||
type="url"
|
type="url"
|
||||||
|
@ -52,27 +52,27 @@
|
||||||
v-model="metadataItemValue"
|
v-model="metadataItemValue"
|
||||||
:placeholder="metadataItem.placeholder"
|
:placeholder="metadataItem.placeholder"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field v-else-if="metadataItem.type === EventMetadataType.STRING">
|
<o-field v-else-if="metadataItem.type === EventMetadataType.STRING">
|
||||||
<b-input
|
<o-input
|
||||||
v-model="metadataItemValue"
|
v-model="metadataItemValue"
|
||||||
:placeholder="metadataItem.placeholder"
|
:placeholder="metadataItem.placeholder"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field v-else-if="metadataItem.type === EventMetadataType.INTEGER">
|
<o-field v-else-if="metadataItem.type === EventMetadataType.INTEGER">
|
||||||
<b-numberinput v-model="metadataItemValue" />
|
<o-numberinput v-model="metadataItemValue" />
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field v-else-if="metadataItem.type === EventMetadataType.BOOLEAN">
|
<o-field v-else-if="metadataItem.type === EventMetadataType.BOOLEAN">
|
||||||
<b-checkbox v-model="metadataItemValue">
|
<o-checkbox v-model="metadataItemValue">
|
||||||
{{
|
{{
|
||||||
metadataItemValue === "true"
|
metadataItemValue === "true"
|
||||||
? metadataItem.choices["true"]
|
? metadataItem.choices["true"]
|
||||||
: metadataItem.choices["false"]
|
: metadataItem.choices["false"]
|
||||||
}}
|
}}
|
||||||
</b-checkbox>
|
</o-checkbox>
|
||||||
</b-field>
|
</o-field>
|
||||||
</div>
|
</div>
|
||||||
<b-button
|
<o-button
|
||||||
icon-left="close"
|
icon-left="close"
|
||||||
@click="$emit('removeItem', metadataItem.key)"
|
@click="$emit('removeItem', metadataItem.key)"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -9,12 +9,12 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<b-field
|
<o-field
|
||||||
grouped
|
grouped
|
||||||
:label="$t('Find or add an element')"
|
:label="$t('Find or add an element')"
|
||||||
label-for="event-metadata-autocomplete"
|
label-for="event-metadata-autocomplete"
|
||||||
>
|
>
|
||||||
<b-autocomplete
|
<o-autocomplete
|
||||||
expanded
|
expanded
|
||||||
v-model="search"
|
v-model="search"
|
||||||
ref="autocomplete"
|
ref="autocomplete"
|
||||||
|
@ -40,8 +40,8 @@
|
||||||
height="24"
|
height="24"
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
<b-icon v-else-if="props.option.icon" :icon="props.option.icon" />
|
<o-icon v-else-if="props.option.icon" :icon="props.option.icon" />
|
||||||
<b-icon v-else icon="help-circle" />
|
<o-icon v-else icon="help-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
<b>{{ props.option.label }}</b>
|
<b>{{ props.option.label }}</b>
|
||||||
|
@ -55,14 +55,14 @@
|
||||||
<template #empty>{{
|
<template #empty>{{
|
||||||
$t("No results for {search}", { search })
|
$t("No results for {search}", { search })
|
||||||
}}</template>
|
}}</template>
|
||||||
</b-autocomplete>
|
</o-autocomplete>
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<b-button @click="showNewElementModal = true">
|
<o-button @click="showNewElementModal = true">
|
||||||
{{ $t("Add new…") }}
|
{{ $t("Add new…") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-modal
|
<o-modal
|
||||||
has-modal-card
|
has-modal-card
|
||||||
v-model="showNewElementModal"
|
v-model="showNewElementModal"
|
||||||
:close-button-aria-label="$t('Close')"
|
:close-button-aria-label="$t('Close')"
|
||||||
|
@ -77,19 +77,19 @@
|
||||||
</header>
|
</header>
|
||||||
<div class="modal-card-body">
|
<div class="modal-card-body">
|
||||||
<form @submit="addNewElement">
|
<form @submit="addNewElement">
|
||||||
<b-field :label="$t('Element title')">
|
<o-field :label="$t('Element title')">
|
||||||
<b-input v-model="newElement.title" />
|
<o-input v-model="newElement.title" />
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field :label="$t('Element value')">
|
<o-field :label="$t('Element value')">
|
||||||
<b-input v-model="newElement.value" />
|
<o-input v-model="newElement.value" />
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-button type="is-primary" native-type="submit">{{
|
<o-button type="is-primary" native-type="submit">{{
|
||||||
$t("Add")
|
$t("Add")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -9,14 +9,14 @@
|
||||||
<span v-if="!physicalAddress">{{ $t("No address defined") }}</span>
|
<span v-if="!physicalAddress">{{ $t("No address defined") }}</span>
|
||||||
<div class="address" v-if="physicalAddress">
|
<div class="address" v-if="physicalAddress">
|
||||||
<address-info :address="physicalAddress" />
|
<address-info :address="physicalAddress" />
|
||||||
<b-button
|
<o-button
|
||||||
type="is-text"
|
type="is-text"
|
||||||
class="map-show-button"
|
class="map-show-button"
|
||||||
@click="$emit('showMapModal', true)"
|
@click="$emit('showMapModal', true)"
|
||||||
v-if="physicalAddress.geom"
|
v-if="physicalAddress.geom"
|
||||||
>
|
>
|
||||||
{{ $t("Show map") }}
|
{{ $t("Show map") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</event-metadata-block>
|
</event-metadata-block>
|
||||||
|
|
|
@ -18,12 +18,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="title-info-wrapper has-text-grey-dark">
|
<div class="title-info-wrapper has-text-grey-dark">
|
||||||
<h3 class="event-minimalist-title" :lang="event.language" dir="auto">
|
<h3 class="event-minimalist-title" :lang="event.language" dir="auto">
|
||||||
<b-tag
|
<o-tag
|
||||||
class="mr-2"
|
class="mr-2"
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
size="is-medium"
|
size="is-medium"
|
||||||
v-if="event.draft"
|
v-if="event.draft"
|
||||||
>{{ $t("Draft") }}</b-tag
|
>{{ $t("Draft") }}</o-tag
|
||||||
>
|
>
|
||||||
{{ event.title }}
|
{{ event.title }}
|
||||||
</h3>
|
</h3>
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
class="event-subtitle"
|
class="event-subtitle"
|
||||||
v-else-if="event.options && event.options.isOnline"
|
v-else-if="event.options && event.options.isOnline"
|
||||||
>
|
>
|
||||||
<b-icon icon="video" />
|
<o-icon icon="video" />
|
||||||
<span>{{ $t("Online") }}</span>
|
<span>{{ $t("Online") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="event-subtitle event-organizer" v-if="showOrganizer">
|
<div class="event-subtitle event-organizer" v-if="showOrganizer">
|
||||||
|
@ -46,13 +46,13 @@
|
||||||
>
|
>
|
||||||
<img class="is-rounded" :src="organizer(event).avatar.url" alt="" />
|
<img class="is-rounded" :src="organizer(event).avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else icon="account-circle" />
|
<o-icon v-else icon="account-circle" />
|
||||||
<span class="organizer-name">
|
<span class="organizer-name">
|
||||||
{{ organizerDisplayName(event) }}
|
{{ organizerDisplayName(event) }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<p class="participant-metadata">
|
<p class="participant-metadata">
|
||||||
<b-icon icon="account-multiple" />
|
<o-icon icon="account-multiple" />
|
||||||
<span v-if="event.options.maximumAttendeeCapacity !== 0">
|
<span v-if="event.options.maximumAttendeeCapacity !== 0">
|
||||||
{{
|
{{
|
||||||
$tc(
|
$tc(
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
<span v-if="event.participantStats.notApproved > 0">
|
<span v-if="event.participantStats.notApproved > 0">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-text"
|
type="is-text"
|
||||||
@click="
|
@click="
|
||||||
gotToWithCheck(participation, {
|
gotToWithCheck(participation, {
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-button>
|
</o-button>
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
width="24"
|
width="24"
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else icon="account-circle" />
|
<o-icon v-else icon="account-circle" />
|
||||||
{{ displayNameAndUsername(participation.actor) }}
|
{{ displayNameAndUsername(participation.actor) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="list-card">
|
<div class="list-card">
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
participation.event.options.isOnline
|
participation.event.options.isOnline
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-icon icon="video" />
|
<o-icon icon="video" />
|
||||||
<span>{{ $t("Online") }}</span>
|
<span>{{ $t("Online") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="event-subtitle event-organizer">
|
<div class="event-subtitle event-organizer">
|
||||||
|
@ -85,13 +85,13 @@
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else icon="account-circle" />
|
<o-icon v-else icon="account-circle" />
|
||||||
<span class="organizer-name">
|
<span class="organizer-name">
|
||||||
{{ organizerDisplayName(participation.event) }}
|
{{ organizerDisplayName(participation.event) }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="event-subtitle event-participants">
|
<div class="event-subtitle event-participants">
|
||||||
<b-icon
|
<o-icon
|
||||||
:class="{ 'has-text-danger': lastSeatsLeft }"
|
:class="{ 'has-text-danger': lastSeatsLeft }"
|
||||||
icon="account-group"
|
icon="account-group"
|
||||||
/>
|
/>
|
||||||
|
@ -138,7 +138,7 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
<b-button
|
<o-button
|
||||||
v-if="participation.event.participantStats.notApproved > 0"
|
v-if="participation.event.participantStats.notApproved > 0"
|
||||||
type="is-text"
|
type="is-text"
|
||||||
@click="
|
@click="
|
||||||
|
@ -158,17 +158,17 @@
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-button>
|
</o-button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<b-dropdown aria-role="list" position="is-bottom-left">
|
<o-dropdown aria-role="list" position="is-bottom-left">
|
||||||
<b-button slot="trigger" role="button" icon-right="dots-horizontal">
|
<o-button slot="trigger" role="button" icon-right="dots-horizontal">
|
||||||
{{ $t("Actions") }}
|
{{ $t("Actions") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
v-if="
|
v-if="
|
||||||
![
|
![
|
||||||
ParticipantRole.PARTICIPANT,
|
ParticipantRole.PARTICIPANT,
|
||||||
|
@ -183,11 +183,11 @@
|
||||||
})
|
})
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-icon icon="pencil" />
|
<o-icon icon="pencil" />
|
||||||
{{ $t("Edit") }}
|
{{ $t("Edit") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
v-if="participation.role === ParticipantRole.CREATOR"
|
v-if="participation.role === ParticipantRole.CREATOR"
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
@click="
|
@click="
|
||||||
|
@ -197,11 +197,11 @@
|
||||||
})
|
})
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-icon icon="content-duplicate" />
|
<o-icon icon="content-duplicate" />
|
||||||
{{ $t("Duplicate") }}
|
{{ $t("Duplicate") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
v-if="
|
v-if="
|
||||||
![
|
![
|
||||||
ParticipantRole.PARTICIPANT,
|
ParticipantRole.PARTICIPANT,
|
||||||
|
@ -211,11 +211,11 @@
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
@click="openDeleteEventModalWrapper"
|
@click="openDeleteEventModalWrapper"
|
||||||
>
|
>
|
||||||
<b-icon icon="delete" />
|
<o-icon icon="delete" />
|
||||||
{{ $t("Delete") }}
|
{{ $t("Delete") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
v-if="
|
v-if="
|
||||||
![
|
![
|
||||||
ParticipantRole.PARTICIPANT,
|
ParticipantRole.PARTICIPANT,
|
||||||
|
@ -230,22 +230,22 @@
|
||||||
})
|
})
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-icon icon="account-multiple-plus" />
|
<o-icon icon="account-multiple-plus" />
|
||||||
{{ $t("Manage participations") }}
|
{{ $t("Manage participations") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
|
|
||||||
<b-dropdown-item aria-role="listitem" has-link>
|
<o-dropdown-item aria-role="listitem" has-link>
|
||||||
<router-link
|
<router-link
|
||||||
:to="{
|
:to="{
|
||||||
name: RouteName.EVENT,
|
name: RouteName.EVENT,
|
||||||
params: { uuid: participation.event.uuid },
|
params: { uuid: participation.event.uuid },
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<b-icon icon="view-compact" />
|
<o-icon icon="view-compact" />
|
||||||
{{ $t("View event page") }}
|
{{ $t("View event page") }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="address-autocomplete columns is-desktop">
|
<div class="address-autocomplete columns is-desktop">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<b-field
|
<o-field
|
||||||
:label-for="id"
|
:label-for="id"
|
||||||
expanded
|
expanded
|
||||||
:message="fieldErrors"
|
:message="fieldErrors"
|
||||||
|
@ -16,13 +16,13 @@
|
||||||
>
|
>
|
||||||
</template>
|
</template>
|
||||||
<p class="control" v-if="canShowLocateMeButton && !gettingLocation">
|
<p class="control" v-if="canShowLocateMeButton && !gettingLocation">
|
||||||
<b-button
|
<o-button
|
||||||
icon-right="map-marker"
|
icon-right="map-marker"
|
||||||
@click="locateMe"
|
@click="locateMe"
|
||||||
:title="$t('Use my location')"
|
:title="$t('Use my location')"
|
||||||
/>
|
/>
|
||||||
</p>
|
</p>
|
||||||
<b-autocomplete
|
<o-autocomplete
|
||||||
:data="addressData"
|
:data="addressData"
|
||||||
v-model="queryText"
|
v-model="queryText"
|
||||||
:placeholder="$t('e.g. 10 Rue Jangot')"
|
:placeholder="$t('e.g. 10 Rue Jangot')"
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
dir="auto"
|
dir="auto"
|
||||||
>
|
>
|
||||||
<template #default="{ option }">
|
<template #default="{ option }">
|
||||||
<b-icon :icon="option.poiInfos.poiIcon.icon" />
|
<o-icon :icon="option.poiInfos.poiIcon.icon" />
|
||||||
<b>{{ option.poiInfos.name }}</b
|
<b>{{ option.poiInfos.name }}</b
|
||||||
><br />
|
><br />
|
||||||
<small>{{ option.poiInfos.alternativeName }}</small>
|
<small>{{ option.poiInfos.alternativeName }}</small>
|
||||||
|
@ -62,15 +62,15 @@
|
||||||
<!-- </p>-->
|
<!-- </p>-->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</b-autocomplete>
|
</o-autocomplete>
|
||||||
<b-button
|
<o-button
|
||||||
:disabled="!queryText"
|
:disabled="!queryText"
|
||||||
@click="resetAddress"
|
@click="resetAddress"
|
||||||
class="reset-area"
|
class="reset-area"
|
||||||
icon-left="close"
|
icon-left="close"
|
||||||
:title="$t('Clear address field')"
|
:title="$t('Clear address field')"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<div
|
<div
|
||||||
class="card"
|
class="card"
|
||||||
v-if="!hideSelected && (selected.originId || selected.url)"
|
v-if="!hideSelected && (selected.originId || selected.url)"
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="list is-hoverable">
|
<div class="list is-hoverable">
|
||||||
<b-input
|
<o-input
|
||||||
dir="auto"
|
dir="auto"
|
||||||
:placeholder="$t('Filter by profile or group name')"
|
:placeholder="$t('Filter by profile or group name')"
|
||||||
v-model="actorFilter"
|
v-model="actorFilter"
|
||||||
/>
|
/>
|
||||||
<b-radio-button
|
<o-radio-button
|
||||||
v-model="selectedActor"
|
v-model="selectedActor"
|
||||||
:native-value="availableActor"
|
:native-value="availableActor"
|
||||||
class="list-item"
|
class="list-item"
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else
|
v-else
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
<small>{{ `@${availableActor.preferredUsername}` }}</small>
|
<small>{{ `@${availableActor.preferredUsername}` }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</b-radio-button>
|
</o-radio-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
:alt="selectedActor.avatar.alt || ''"
|
:alt="selectedActor.avatar.alt || ''"
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-circle" />
|
<o-icon v-else size="is-large" icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content" v-if="selectedActor.name">
|
<div class="media-content" v-if="selectedActor.name">
|
||||||
<p class="is-4">{{ selectedActor.name }}</p>
|
<p class="is-4">{{ selectedActor.name }}</p>
|
||||||
|
@ -27,9 +27,9 @@
|
||||||
<div class="media-content" v-else>
|
<div class="media-content" v-else>
|
||||||
{{ `@${selectedActor.preferredUsername}` }}
|
{{ `@${selectedActor.preferredUsername}` }}
|
||||||
</div>
|
</div>
|
||||||
<b-button type="is-text" @click="isComponentModalActive = true">
|
<o-button type="is-text" @click="isComponentModalActive = true">
|
||||||
{{ $t("Change") }}
|
{{ $t("Change") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- If we have a current actor -->
|
<!-- If we have a current actor -->
|
||||||
|
@ -44,9 +44,9 @@
|
||||||
:src="selectedActor.avatar.url"
|
:src="selectedActor.avatar.url"
|
||||||
:alt="selectedActor.avatar.alt"
|
:alt="selectedActor.avatar.alt"
|
||||||
/>
|
/>
|
||||||
<b-icon v-else size="is-large" icon="account-circle" />
|
<o-icon v-else size="is-large" icon="account-circle" />
|
||||||
</span>
|
</span>
|
||||||
<b-modal
|
<o-modal
|
||||||
:active.sync="isComponentModalActive"
|
:active.sync="isComponentModalActive"
|
||||||
has-modal-card
|
has-modal-card
|
||||||
:close-button-aria-label="$t('Close')"
|
:close-button-aria-label="$t('Close')"
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<div class="column contact-picker">
|
<div class="column contact-picker">
|
||||||
<div v-if="isSelectedActorAGroup && actorMembers.length > 0">
|
<div v-if="isSelectedActorAGroup && actorMembers.length > 0">
|
||||||
<p>{{ $t("Add a contact") }}</p>
|
<p>{{ $t("Add a contact") }}</p>
|
||||||
<b-input
|
<o-input
|
||||||
:placeholder="$t('Filter by name')"
|
:placeholder="$t('Filter by name')"
|
||||||
v-model="contactFilter"
|
v-model="contactFilter"
|
||||||
dir="auto"
|
dir="auto"
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
v-for="actor in filteredActorMembers"
|
v-for="actor in filteredActorMembers"
|
||||||
:key="actor.id"
|
:key="actor.id"
|
||||||
>
|
>
|
||||||
<b-checkbox v-model="actualContacts" :native-value="actor.id">
|
<o-checkbox v-model="actualContacts" :native-value="actor.id">
|
||||||
<div class="media">
|
<div class="media">
|
||||||
<div class="media-left">
|
<div class="media-left">
|
||||||
<figure class="image is-48x48" v-if="actor.avatar">
|
<figure class="image is-48x48" v-if="actor.avatar">
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
:alt="actor.avatar.alt"
|
:alt="actor.avatar.alt"
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-circle" />
|
<o-icon v-else size="is-large" icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content" v-if="actor.name">
|
<div class="media-content" v-if="actor.name">
|
||||||
<p class="is-4">{{ actor.name }}</p>
|
<p class="is-4">{{ actor.name }}</p>
|
||||||
|
@ -99,7 +99,7 @@
|
||||||
{{ `@${usernameWithDomain(actor)}` }}
|
{{ `@${usernameWithDomain(actor)}` }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</b-checkbox>
|
</o-checkbox>
|
||||||
</p>
|
</p>
|
||||||
</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">
|
||||||
|
@ -114,7 +114,7 @@
|
||||||
</button>
|
</button>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -25,63 +25,63 @@ A button to set your participation
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="participation-button">
|
<div class="participation-button">
|
||||||
<b-dropdown
|
<o-dropdown
|
||||||
aria-role="list"
|
aria-role="list"
|
||||||
position="is-bottom-left"
|
position="is-bottom-left"
|
||||||
v-if="participation && participation.role === ParticipantRole.PARTICIPANT"
|
v-if="participation && participation.role === ParticipantRole.PARTICIPANT"
|
||||||
>
|
>
|
||||||
<template #trigger="{ active }">
|
<template #trigger="{ active }">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-success"
|
type="is-success"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
icon-left="check"
|
icon-left="check"
|
||||||
:icon-right="active ? 'menu-up' : 'menu-down'"
|
:icon-right="active ? 'menu-up' : 'menu-down'"
|
||||||
>
|
>
|
||||||
{{ $t("I participate") }}
|
{{ $t("I participate") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
:value="false"
|
:value="false"
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
@click="confirmLeave"
|
@click="confirmLeave"
|
||||||
@keyup.enter="confirmLeave"
|
@keyup.enter="confirmLeave"
|
||||||
class="has-text-danger"
|
class="has-text-danger"
|
||||||
>{{ $t("Cancel my participation…") }}</b-dropdown-item
|
>{{ $t("Cancel my participation…") }}</o-dropdown-item
|
||||||
>
|
>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-else-if="
|
v-else-if="
|
||||||
participation && participation.role === ParticipantRole.NOT_APPROVED
|
participation && participation.role === ParticipantRole.NOT_APPROVED
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-dropdown
|
<o-dropdown
|
||||||
aria-role="list"
|
aria-role="list"
|
||||||
position="is-bottom-left"
|
position="is-bottom-left"
|
||||||
class="dropdown-disabled"
|
class="dropdown-disabled"
|
||||||
>
|
>
|
||||||
<button class="button is-success is-large" type="button" slot="trigger">
|
<button class="button is-success is-large" type="button" slot="trigger">
|
||||||
<b-icon icon="timer-sand-empty" />
|
<o-icon icon="timer-sand-empty" />
|
||||||
<template>
|
<template>
|
||||||
<span>{{ $t("I participate") }}</span>
|
<span>{{ $t("I participate") }}</span>
|
||||||
</template>
|
</template>
|
||||||
<b-icon icon="menu-down" />
|
<o-icon icon="menu-down" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<!-- <b-dropdown-item :value="false" aria-role="listitem">-->
|
<!-- <o-dropdown-item :value="false" aria-role="listitem">-->
|
||||||
<!-- {{ $t('Change my identity…')}}-->
|
<!-- {{ $t('Change my identity…')}}-->
|
||||||
<!-- </b-dropdown-item>-->
|
<!-- </o-dropdown-item>-->
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
:value="false"
|
:value="false"
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
@click="confirmLeave"
|
@click="confirmLeave"
|
||||||
@keyup.enter="confirmLeave"
|
@keyup.enter="confirmLeave"
|
||||||
class="has-text-danger"
|
class="has-text-danger"
|
||||||
>{{ $t("Cancel my participation request…") }}</b-dropdown-item
|
>{{ $t("Cancel my participation request…") }}</o-dropdown-item
|
||||||
>
|
>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
<small>{{ $t("Participation requested!") }}</small>
|
<small>{{ $t("Participation requested!") }}</small>
|
||||||
<br />
|
<br />
|
||||||
<small>{{ $t("Waiting for organization team approval.") }}</small>
|
<small>{{ $t("Waiting for organization team approval.") }}</small>
|
||||||
|
@ -101,22 +101,22 @@ A button to set your participation
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<b-dropdown
|
<o-dropdown
|
||||||
aria-role="list"
|
aria-role="list"
|
||||||
position="is-bottom-left"
|
position="is-bottom-left"
|
||||||
v-else-if="!participation && currentActor.id"
|
v-else-if="!participation && currentActor.id"
|
||||||
>
|
>
|
||||||
<template #trigger="{ active }">
|
<template #trigger="{ active }">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
:icon-right="active ? 'menu-up' : 'menu-down'"
|
:icon-right="active ? 'menu-up' : 'menu-down'"
|
||||||
>
|
>
|
||||||
{{ $t("Participate") }}
|
{{ $t("Participate") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
:value="true"
|
:value="true"
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
@click="joinEvent(currentActor)"
|
@click="joinEvent(currentActor)"
|
||||||
|
@ -139,18 +139,18 @@ A button to set your participation
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
:value="false"
|
:value="false"
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
@click="joinModal"
|
@click="joinModal"
|
||||||
@keyup.enter="joinModal"
|
@keyup.enter="joinModal"
|
||||||
v-if="identities.length > 1"
|
v-if="identities.length > 1"
|
||||||
>{{ $t("with another identity…") }}</b-dropdown-item
|
>{{ $t("with another identity…") }}</o-dropdown-item
|
||||||
>
|
>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
<b-button
|
<o-button
|
||||||
rel="nofollow"
|
rel="nofollow"
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{
|
:to="{
|
||||||
|
@ -161,9 +161,9 @@ A button to set your participation
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
native-type="button"
|
native-type="button"
|
||||||
>{{ $t("Participate") }}</b-button
|
>{{ $t("Participate") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
rel="nofollow"
|
rel="nofollow"
|
||||||
:to="{
|
:to="{
|
||||||
|
@ -174,7 +174,7 @@ A button to set your participation
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
native-type="button"
|
native-type="button"
|
||||||
>{{ $t("Participate") }}</b-button
|
>{{ $t("Participate") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<section class="modal-card-body is-flex" v-if="event">
|
<section class="modal-card-body is-flex" v-if="event">
|
||||||
<div class="container has-text-centered">
|
<div class="container has-text-centered">
|
||||||
<b-notification
|
<o-notification
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
v-if="event.visibility !== EventVisibility.PUBLIC"
|
v-if="event.visibility !== EventVisibility.PUBLIC"
|
||||||
:closable="false"
|
:closable="false"
|
||||||
|
@ -16,33 +16,33 @@
|
||||||
"This event is accessible only through it's link. Be careful where you post this link."
|
"This event is accessible only through it's link. Be careful where you post this link."
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-notification>
|
</o-notification>
|
||||||
<b-notification
|
<o-notification
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-if="event.status === EventStatus.CANCELLED"
|
v-if="event.status === EventStatus.CANCELLED"
|
||||||
:closable="false"
|
:closable="false"
|
||||||
>
|
>
|
||||||
{{ $t("This event has been cancelled.") }}
|
{{ $t("This event has been cancelled.") }}
|
||||||
</b-notification>
|
</o-notification>
|
||||||
<small class="maximumNumberOfPlacesWarning" v-if="!eventCapacityOK">
|
<small class="maximumNumberOfPlacesWarning" v-if="!eventCapacityOK">
|
||||||
{{ $t("All the places have already been taken") }}
|
{{ $t("All the places have already been taken") }}
|
||||||
</small>
|
</small>
|
||||||
<b-field :label="$t('Event URL')" label-for="event-url-text">
|
<o-field :label="$t('Event URL')" label-for="event-url-text">
|
||||||
<b-input
|
<o-input
|
||||||
id="event-url-text"
|
id="event-url-text"
|
||||||
ref="eventURLInput"
|
ref="eventURLInput"
|
||||||
:value="event.url"
|
:value="event.url"
|
||||||
expanded
|
expanded
|
||||||
/>
|
/>
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
:label="$t('URL copied to clipboard')"
|
:label="$t('URL copied to clipboard')"
|
||||||
:active="showCopiedTooltip"
|
:active="showCopiedTooltip"
|
||||||
always
|
always
|
||||||
type="is-success"
|
type="is-success"
|
||||||
position="is-left"
|
position="is-left"
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
icon-right="content-paste"
|
icon-right="content-paste"
|
||||||
native-type="button"
|
native-type="button"
|
||||||
|
@ -50,16 +50,16 @@
|
||||||
@keyup.enter="copyURL"
|
@keyup.enter="copyURL"
|
||||||
:title="$t('Copy URL to clipboard')"
|
:title="$t('Copy URL to clipboard')"
|
||||||
/>
|
/>
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
<div>
|
<div>
|
||||||
<a
|
<a
|
||||||
:href="twitterShareUrl"
|
:href="twitterShareUrl"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="Twitter"
|
title="Twitter"
|
||||||
><b-icon icon="twitter" size="is-large" type="is-primary"
|
><o-icon icon="twitter" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="mastodonShareUrl"
|
:href="mastodonShareUrl"
|
||||||
|
@ -75,14 +75,14 @@
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="Facebook"
|
title="Facebook"
|
||||||
><b-icon icon="facebook" size="is-large" type="is-primary"
|
><o-icon icon="facebook" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="whatsAppShareUrl"
|
:href="whatsAppShareUrl"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="WhatsApp"
|
title="WhatsApp"
|
||||||
><b-icon icon="whatsapp" size="is-large" type="is-primary"
|
><o-icon icon="whatsapp" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="telegramShareUrl"
|
:href="telegramShareUrl"
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="LinkedIn"
|
title="LinkedIn"
|
||||||
><b-icon icon="linkedin" size="is-large" type="is-primary"
|
><o-icon icon="linkedin" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="diasporaShareUrl"
|
:href="diasporaShareUrl"
|
||||||
|
@ -114,7 +114,7 @@
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="Email"
|
title="Email"
|
||||||
><b-icon icon="email" size="is-large" type="is-primary"
|
><o-icon icon="email" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
<template>
|
<template>
|
||||||
<b-field :label-for="id">
|
<o-field :label-for="id">
|
||||||
<template slot="label">
|
<template slot="label">
|
||||||
{{ $t("Add some tags") }}
|
{{ $t("Add some tags") }}
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
type="is-dark"
|
type="is-dark"
|
||||||
:label="
|
:label="
|
||||||
$t('You can add tags by hitting the Enter key or by adding a comma')
|
$t('You can add tags by hitting the Enter key or by adding a comma')
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-icon size="is-small" icon="help-circle-outline"></b-icon>
|
<o-icon size="is-small" icon="help-circle-outline"></o-icon>
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
</template>
|
</template>
|
||||||
<b-taginput
|
<o-taginput
|
||||||
v-model="tagsStrings"
|
v-model="tagsStrings"
|
||||||
:data="filteredTags"
|
:data="filteredTags"
|
||||||
autocomplete
|
autocomplete
|
||||||
|
@ -25,8 +25,8 @@
|
||||||
:id="id"
|
:id="id"
|
||||||
dir="auto"
|
dir="auto"
|
||||||
>
|
>
|
||||||
</b-taginput>
|
</o-taginput>
|
||||||
</b-field>
|
</o-field>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Component, Prop, Vue } from "vue-property-decorator";
|
import { Component, Prop, Vue } from "vue-property-decorator";
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
</picture>
|
</picture>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<b-select
|
<o-select
|
||||||
:aria-label="$t('Language')"
|
:aria-label="$t('Language')"
|
||||||
v-if="$i18n"
|
v-if="$i18n"
|
||||||
v-model="locale"
|
v-model="locale"
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
>
|
>
|
||||||
{{ language }}
|
{{ language }}
|
||||||
</option>
|
</option>
|
||||||
</b-select>
|
</o-select>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<router-link :to="{ name: RouteName.ABOUT }">{{
|
<router-link :to="{ name: RouteName.ABOUT }">{{
|
||||||
|
@ -59,21 +59,24 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="content has-text-centered">
|
<div class="content has-text-centered">
|
||||||
<i18n
|
<i18n-t
|
||||||
tag="span"
|
tag="span"
|
||||||
path="Powered by {mobilizon}. © 2018 - {date} The Mobilizon Contributors - Made with the financial support of {contributors}."
|
path="Powered by {mobilizon}. © 2018 - {date} The Mobilizon Contributors - Made with the financial support of {contributors}."
|
||||||
>
|
>
|
||||||
<a rel="external" slot="mobilizon" href="https://joinmobilizon.org">{{
|
<template #mobilizon>
|
||||||
|
<a rel="external" href="https://joinmobilizon.org">{{
|
||||||
$t("Mobilizon")
|
$t("Mobilizon")
|
||||||
}}</a>
|
}}</a>
|
||||||
<span slot="date">{{ new Date().getFullYear() }}</span>
|
</template>
|
||||||
<a
|
<template #date>
|
||||||
rel="external"
|
<span>{{ new Date().getFullYear() }}</span>
|
||||||
href="https://joinmobilizon.org/hall-of-fame"
|
</template>
|
||||||
slot="contributors"
|
<template #contributors>
|
||||||
>{{ $t("more than 1360 contributors") }}</a
|
<a rel="external" href="https://joinmobilizon.org/hall-of-fame">{{
|
||||||
>
|
$t("more than 1360 contributors")
|
||||||
</i18n>
|
}}</a>
|
||||||
|
</template>
|
||||||
|
</i18n-t>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
<figure class="image is-48x48" v-if="group.avatar">
|
<figure class="image is-48x48" v-if="group.avatar">
|
||||||
<img class="is-rounded" :src="group.avatar.url" alt="" />
|
<img class="is-rounded" :src="group.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-group" />
|
<o-icon v-else size="is-large" icon="account-group" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
<h3 class="is-size-5 group-title" dir="auto">
|
<h3 class="is-size-5 group-title" dir="auto">
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
:physicalAddress="group.physicalAddress"
|
:physicalAddress="group.physicalAddress"
|
||||||
/>
|
/>
|
||||||
<p class="has-text-grey-dark">
|
<p class="has-text-grey-dark">
|
||||||
<b-icon icon="account" />
|
<o-icon icon="account" />
|
||||||
{{
|
{{
|
||||||
$tc(
|
$tc(
|
||||||
"{count} members or followers",
|
"{count} members or followers",
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<figure class="image is-24x24" v-if="member.actor.avatar">
|
<figure class="image is-24x24" v-if="member.actor.avatar">
|
||||||
<img class="is-rounded" :src="member.actor.avatar.url" alt="" />
|
<img class="is-rounded" :src="member.actor.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else icon="account-circle" />
|
<o-icon v-else icon="account-circle" />
|
||||||
{{ displayNameAndUsername(member.actor) }}
|
{{ displayNameAndUsername(member.actor) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="card-content" dir="auto">
|
<div class="card-content" dir="auto">
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
<figure class="image is-48x48" v-if="member.parent.avatar">
|
<figure class="image is-48x48" v-if="member.parent.avatar">
|
||||||
<img class="is-rounded" :src="member.parent.avatar.url" alt="" />
|
<img class="is-rounded" :src="member.parent.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-group" />
|
<o-icon v-else size="is-large" icon="account-group" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content" dir="auto">
|
<div class="media-content" dir="auto">
|
||||||
<router-link
|
<router-link
|
||||||
|
@ -28,18 +28,18 @@
|
||||||
<h2>{{ member.parent.name }}</h2>
|
<h2>{{ member.parent.name }}</h2>
|
||||||
<p class="is-6 has-text-grey-dark">
|
<p class="is-6 has-text-grey-dark">
|
||||||
<span>{{ `@${usernameWithDomain(member.parent)}` }}</span>
|
<span>{{ `@${usernameWithDomain(member.parent)}` }}</span>
|
||||||
<b-taglist>
|
<o-taglist>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-info"
|
type="is-info"
|
||||||
v-if="member.role === MemberRole.ADMINISTRATOR"
|
v-if="member.role === MemberRole.ADMINISTRATOR"
|
||||||
>{{ $t("Administrator") }}</b-tag
|
>{{ $t("Administrator") }}</o-tag
|
||||||
>
|
>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-info"
|
type="is-info"
|
||||||
v-else-if="member.role === MemberRole.MODERATOR"
|
v-else-if="member.role === MemberRole.MODERATOR"
|
||||||
>{{ $t("Moderator") }}</b-tag
|
>{{ $t("Moderator") }}</o-tag
|
||||||
>
|
>
|
||||||
</b-taglist>
|
</o-taglist>
|
||||||
</p>
|
</p>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
|
@ -49,14 +49,14 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<b-dropdown aria-role="list" position="is-bottom-left">
|
<o-dropdown aria-role="list" position="is-bottom-left">
|
||||||
<b-icon icon="dots-horizontal" slot="trigger" />
|
<o-icon icon="dots-horizontal" slot="trigger" />
|
||||||
|
|
||||||
<b-dropdown-item aria-role="listitem" @click="$emit('leave')">
|
<o-dropdown-item aria-role="listitem" @click="$emit('leave')">
|
||||||
<b-icon icon="exit-to-app" />
|
<o-icon icon="exit-to-app" />
|
||||||
{{ $t("Leave") }}
|
{{ $t("Leave") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<section>
|
<section>
|
||||||
<div class="group-section-title" :class="{ privateSection }">
|
<div class="group-section-title" :class="{ privateSection }">
|
||||||
<h2>
|
<h2>
|
||||||
<b-icon :icon="icon" />
|
<o-icon :icon="icon" />
|
||||||
<span>{{ title }}</span>
|
<span>{{ title }}</span>
|
||||||
</h2>
|
</h2>
|
||||||
<router-link :to="route">{{ $t("View all") }}</router-link>
|
<router-link :to="route">{{ $t("View all") }}</router-link>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<figure class="image is-48x48" v-if="member.parent.avatar">
|
<figure class="image is-48x48" v-if="member.parent.avatar">
|
||||||
<img class="is-rounded" :src="member.parent.avatar.url" alt="" />
|
<img class="is-rounded" :src="member.parent.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-group" />
|
<o-icon v-else size="is-large" icon="account-group" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
<div class="level">
|
<div class="level">
|
||||||
|
@ -45,20 +45,20 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="level-right">
|
<div class="level-right">
|
||||||
<div class="level-item">
|
<div class="level-item">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-success"
|
type="is-success"
|
||||||
@click="$emit('accept', member.id)"
|
@click="$emit('accept', member.id)"
|
||||||
>
|
>
|
||||||
{{ $t("Accept") }}
|
{{ $t("Accept") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="level-item">
|
<div class="level-item">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
@click="$emit('reject', member.id)"
|
@click="$emit('reject', member.id)"
|
||||||
>
|
>
|
||||||
{{ $t("Decline") }}
|
{{ $t("Decline") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<section class="modal-card-body is-flex" v-if="group">
|
<section class="modal-card-body is-flex" v-if="group">
|
||||||
<div class="container has-text-centered">
|
<div class="container has-text-centered">
|
||||||
<b-notification
|
<o-notification
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
v-if="group.visibility !== GroupVisibility.PUBLIC"
|
v-if="group.visibility !== GroupVisibility.PUBLIC"
|
||||||
:closable="false"
|
:closable="false"
|
||||||
|
@ -16,23 +16,23 @@
|
||||||
"This group is accessible only through it's link. Be careful where you post this link."
|
"This group is accessible only through it's link. Be careful where you post this link."
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-notification>
|
</o-notification>
|
||||||
<b-field :label="$t('Group URL')" label-for="group-url-text">
|
<o-field :label="$t('Group URL')" label-for="group-url-text">
|
||||||
<b-input
|
<o-input
|
||||||
id="group-url-text"
|
id="group-url-text"
|
||||||
ref="groupURLInput"
|
ref="groupURLInput"
|
||||||
:value="group.url"
|
:value="group.url"
|
||||||
expanded
|
expanded
|
||||||
/>
|
/>
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
:label="$t('URL copied to clipboard')"
|
:label="$t('URL copied to clipboard')"
|
||||||
:active="showCopiedTooltip"
|
:active="showCopiedTooltip"
|
||||||
always
|
always
|
||||||
type="is-success"
|
type="is-success"
|
||||||
position="is-left"
|
position="is-left"
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
icon-right="content-paste"
|
icon-right="content-paste"
|
||||||
native-type="button"
|
native-type="button"
|
||||||
|
@ -40,16 +40,16 @@
|
||||||
@keyup.enter="copyURL"
|
@keyup.enter="copyURL"
|
||||||
:title="$t('Copy URL to clipboard')"
|
:title="$t('Copy URL to clipboard')"
|
||||||
/>
|
/>
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
<div>
|
<div>
|
||||||
<a
|
<a
|
||||||
:href="twitterShareUrl"
|
:href="twitterShareUrl"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="Twitter"
|
title="Twitter"
|
||||||
><b-icon icon="twitter" size="is-large" type="is-primary"
|
><o-icon icon="twitter" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="mastodonShareUrl"
|
:href="mastodonShareUrl"
|
||||||
|
@ -65,21 +65,21 @@
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="Facebook"
|
title="Facebook"
|
||||||
><b-icon icon="facebook" size="is-large" type="is-primary"
|
><o-icon icon="facebook" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="linkedInShareUrl"
|
:href="linkedInShareUrl"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="LinkedIn"
|
title="LinkedIn"
|
||||||
><b-icon icon="linkedin" size="is-large" type="is-primary"
|
><o-icon icon="linkedin" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="whatsAppShareUrl"
|
:href="whatsAppShareUrl"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="WhatsApp"
|
title="WhatsApp"
|
||||||
><b-icon icon="whatsapp" size="is-large" type="is-primary"
|
><o-icon icon="whatsapp" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="telegramShareUrl"
|
:href="telegramShareUrl"
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="Email"
|
title="Email"
|
||||||
><b-icon icon="email" size="is-large" type="is-primary"
|
><o-icon icon="email" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
<template>
|
<template>
|
||||||
<b-navbar
|
<o-navbar
|
||||||
id="navbar"
|
id="navbar"
|
||||||
type="is-secondary"
|
type="is-secondary"
|
||||||
wrapper-class="container"
|
wrapper-class="container"
|
||||||
:active.sync="mobileNavbarActive"
|
:active.sync="mobileNavbarActive"
|
||||||
>
|
>
|
||||||
<template slot="brand">
|
<template #brand>
|
||||||
<b-navbar-item
|
<o-navbar-item
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{ name: RouteName.HOME }"
|
:to="{ name: RouteName.HOME }"
|
||||||
:aria-label="$t('Home')"
|
:aria-label="$t('Home')"
|
||||||
>
|
>
|
||||||
<logo />
|
<logo />
|
||||||
</b-navbar-item>
|
</o-navbar-item>
|
||||||
</template>
|
</template>
|
||||||
<template slot="start">
|
<template #start>
|
||||||
<b-navbar-item tag="router-link" :to="{ name: RouteName.SEARCH }">{{
|
<o-navbar-item tag="router-link" :to="{ name: RouteName.SEARCH }">{{
|
||||||
$t("Explore")
|
$t("Explore")
|
||||||
}}</b-navbar-item>
|
}}</o-navbar-item>
|
||||||
<b-navbar-item
|
<o-navbar-item
|
||||||
v-if="currentActor.id && currentUser.isLoggedIn"
|
v-if="currentActor.id && currentUser.isLoggedIn"
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{ name: RouteName.MY_EVENTS }"
|
:to="{ name: RouteName.MY_EVENTS }"
|
||||||
>{{ $t("My events") }}</b-navbar-item
|
>{{ $t("My events") }}</o-navbar-item
|
||||||
>
|
>
|
||||||
<b-navbar-item
|
<o-navbar-item
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{ name: RouteName.MY_GROUPS }"
|
:to="{ name: RouteName.MY_GROUPS }"
|
||||||
v-if="
|
v-if="
|
||||||
|
@ -33,9 +33,9 @@
|
||||||
currentActor.id &&
|
currentActor.id &&
|
||||||
currentUser.isLoggedIn
|
currentUser.isLoggedIn
|
||||||
"
|
"
|
||||||
>{{ $t("My groups") }}</b-navbar-item
|
>{{ $t("My groups") }}</o-navbar-item
|
||||||
>
|
>
|
||||||
<b-navbar-item
|
<o-navbar-item
|
||||||
tag="span"
|
tag="span"
|
||||||
v-if="
|
v-if="
|
||||||
config &&
|
config &&
|
||||||
|
@ -44,15 +44,15 @@
|
||||||
currentUser.isLoggedIn
|
currentUser.isLoggedIn
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
v-if="!hideCreateEventsButton"
|
v-if="!hideCreateEventsButton"
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{ name: RouteName.CREATE_EVENT }"
|
:to="{ name: RouteName.CREATE_EVENT }"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Create") }}</b-button
|
>{{ $t("Create") }}</o-button
|
||||||
>
|
>
|
||||||
</b-navbar-item>
|
</o-navbar-item>
|
||||||
<b-navbar-item
|
<o-navbar-item
|
||||||
v-if="config && config.features.koenaConnect"
|
v-if="config && config.features.koenaConnect"
|
||||||
class="koena"
|
class="koena"
|
||||||
tag="a"
|
tag="a"
|
||||||
|
@ -66,14 +66,14 @@
|
||||||
width="150"
|
width="150"
|
||||||
alt="Contact accessibilité"
|
alt="Contact accessibilité"
|
||||||
/>
|
/>
|
||||||
</b-navbar-item>
|
</o-navbar-item>
|
||||||
</template>
|
</template>
|
||||||
<template slot="end">
|
<template #end>
|
||||||
<b-navbar-item tag="div">
|
<o-navbar-item tag="div">
|
||||||
<search-field @navbar-search="mobileNavbarActive = false" />
|
<search-field @navbar-search="mobileNavbarActive = false" />
|
||||||
</b-navbar-item>
|
</o-navbar-item>
|
||||||
|
|
||||||
<b-navbar-dropdown
|
<o-navbar-dropdown
|
||||||
v-if="currentActor.id && currentUser.isLoggedIn"
|
v-if="currentActor.id && currentUser.isLoggedIn"
|
||||||
right
|
right
|
||||||
collapsible
|
collapsible
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
tag="span"
|
tag="span"
|
||||||
@keyup.enter="toggleMenu"
|
@keyup.enter="toggleMenu"
|
||||||
>
|
>
|
||||||
<template slot="label" v-if="currentActor">
|
<template #label v-if="currentActor">
|
||||||
<div class="identity-wrapper">
|
<div class="identity-wrapper">
|
||||||
<div>
|
<div>
|
||||||
<figure class="image is-32x32" v-if="currentActor.avatar">
|
<figure class="image is-32x32" v-if="currentActor.avatar">
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
:src="currentActor.avatar.url"
|
:src="currentActor.avatar.url"
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else icon="account-circle" />
|
<o-icon v-else icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content is-hidden-desktop">
|
<div class="media-content is-hidden-desktop">
|
||||||
<span>{{ displayName(currentActor) }}</span>
|
<span>{{ displayName(currentActor) }}</span>
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
|
|
||||||
<!-- No identities dropdown if no identities -->
|
<!-- No identities dropdown if no identities -->
|
||||||
<span v-if="identities.length <= 1" />
|
<span v-if="identities.length <= 1" />
|
||||||
<b-navbar-item
|
<o-navbar-item
|
||||||
tag="span"
|
tag="span"
|
||||||
v-for="identity in identities"
|
v-for="identity in identities"
|
||||||
v-else
|
v-else
|
||||||
|
@ -125,7 +125,7 @@
|
||||||
alt
|
alt
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-medium" icon="account-circle" />
|
<o-icon v-else size="is-medium" icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
|
@ -137,31 +137,31 @@
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<hr class="navbar-divider" role="presentation" />
|
<hr class="navbar-divider" role="presentation" />
|
||||||
</b-navbar-item>
|
</o-navbar-item>
|
||||||
|
|
||||||
<b-navbar-item
|
<o-navbar-item
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{ name: RouteName.UPDATE_IDENTITY }"
|
:to="{ name: RouteName.UPDATE_IDENTITY }"
|
||||||
>{{ $t("My account") }}</b-navbar-item
|
>{{ $t("My account") }}</o-navbar-item
|
||||||
>
|
>
|
||||||
<b-navbar-item
|
<o-navbar-item
|
||||||
v-if="currentUser.role === ICurrentUserRole.ADMINISTRATOR"
|
v-if="currentUser.role === ICurrentUserRole.ADMINISTRATOR"
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{ name: RouteName.ADMIN_DASHBOARD }"
|
:to="{ name: RouteName.ADMIN_DASHBOARD }"
|
||||||
>{{ $t("Administration") }}</b-navbar-item
|
>{{ $t("Administration") }}</o-navbar-item
|
||||||
>
|
>
|
||||||
|
|
||||||
<b-navbar-item
|
<o-navbar-item
|
||||||
tag="span"
|
tag="span"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
@click="logout"
|
@click="logout"
|
||||||
@keyup.enter="logout"
|
@keyup.enter="logout"
|
||||||
>
|
>
|
||||||
<span>{{ $t("Log out") }}</span>
|
<span>{{ $t("Log out") }}</span>
|
||||||
</b-navbar-item>
|
</o-navbar-item>
|
||||||
</b-navbar-dropdown>
|
</o-navbar-dropdown>
|
||||||
|
|
||||||
<b-navbar-item v-else tag="div">
|
<o-navbar-item v-else tag="div">
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<router-link
|
<router-link
|
||||||
class="button is-primary"
|
class="button is-primary"
|
||||||
|
@ -177,17 +177,15 @@
|
||||||
>{{ $t("Log in") }}</router-link
|
>{{ $t("Log in") }}</router-link
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</b-navbar-item>
|
</o-navbar-item>
|
||||||
</template>
|
</template>
|
||||||
</b-navbar>
|
</o-navbar>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Component, Ref, Vue, Watch } from "vue-property-decorator";
|
|
||||||
import Logo from "@/components/Logo.vue";
|
import Logo from "@/components/Logo.vue";
|
||||||
import { GraphQLError } from "graphql";
|
import { GraphQLError } from "graphql";
|
||||||
import { loadLanguageAsync } from "@/utils/i18n";
|
import { loadLanguageAsync } from "@/utils/i18n";
|
||||||
import { ICurrentUserRole } from "@/types/enums";
|
|
||||||
import { CURRENT_USER_CLIENT, USER_SETTINGS } from "../graphql/user";
|
import { CURRENT_USER_CLIENT, USER_SETTINGS } from "../graphql/user";
|
||||||
import { changeIdentity, logout } from "../utils/auth";
|
import { changeIdentity, logout } from "../utils/auth";
|
||||||
import {
|
import {
|
||||||
|
@ -195,72 +193,99 @@ import {
|
||||||
IDENTITIES,
|
IDENTITIES,
|
||||||
UPDATE_DEFAULT_ACTOR,
|
UPDATE_DEFAULT_ACTOR,
|
||||||
} from "../graphql/actor";
|
} from "../graphql/actor";
|
||||||
import { displayName, IPerson, Person } from "../types/actor";
|
import { IPerson, Person } from "../types/actor";
|
||||||
import { CONFIG } from "../graphql/config";
|
import { CONFIG } from "../graphql/config";
|
||||||
import { IConfig } from "../types/config.model";
|
import { IConfig } from "../types/config.model";
|
||||||
import { ICurrentUser, IUser } from "../types/current-user.model";
|
import { ICurrentUser, IUser } from "../types/current-user.model";
|
||||||
import SearchField from "./SearchField.vue";
|
import SearchField from "./SearchField.vue";
|
||||||
import RouteName from "../router/name";
|
import RouteName from "../router/name";
|
||||||
|
import { defineComponent } from "vue-demi";
|
||||||
|
import { useQuery, useResult } from "@vue/apollo-composable";
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
@Component({
|
export default defineComponent({
|
||||||
apollo: {
|
name: "NavBar",
|
||||||
currentUser: CURRENT_USER_CLIENT,
|
setup() {
|
||||||
currentActor: CURRENT_ACTOR_CLIENT,
|
const { result: resultCurrentUser } = useQuery(CURRENT_USER_CLIENT);
|
||||||
identities: {
|
const currentUser =
|
||||||
query: IDENTITIES,
|
useResult<{ currentUser: ICurrentUser }>(resultCurrentUser);
|
||||||
update: ({ identities }) =>
|
|
||||||
identities
|
const { result: resultCurrentActor } = useQuery(CURRENT_ACTOR_CLIENT);
|
||||||
? identities.map((identity: IPerson) => new Person(identity))
|
const currentActor =
|
||||||
: [],
|
useResult<{ currentUser: IPerson }>(resultCurrentActor);
|
||||||
skip() {
|
|
||||||
return this.currentUser.isLoggedIn === false;
|
const { result: configResult } = useQuery(CONFIG);
|
||||||
},
|
const config = useResult<{ config: IConfig }>(configResult);
|
||||||
error({ graphQLErrors }) {
|
|
||||||
this.handleErrors(graphQLErrors);
|
const { result: loggedUserResult } = useQuery(USER_SETTINGS);
|
||||||
},
|
const loggedUser = useResult<{ config: IUser }>(loggedUserResult);
|
||||||
},
|
|
||||||
config: CONFIG,
|
const { result: identitiesResult } = useQuery(IDENTITIES);
|
||||||
loggedUser: {
|
const identities = useResult<{ identities: IPerson[] }, [], Person[]>(
|
||||||
query: USER_SETTINGS,
|
identitiesResult,
|
||||||
skip() {
|
[],
|
||||||
return !this.currentUser || this.currentUser.isLoggedIn === false;
|
(data) => data.identities.map((identity: IPerson) => new Person(identity))
|
||||||
},
|
);
|
||||||
},
|
|
||||||
|
const mobileNavbarActive = false;
|
||||||
|
|
||||||
|
const userDropDown = ref(null) as any;
|
||||||
|
|
||||||
|
return {
|
||||||
|
currentUser,
|
||||||
|
currentActor,
|
||||||
|
config,
|
||||||
|
loggedUser,
|
||||||
|
identities,
|
||||||
|
mobileNavbarActive,
|
||||||
|
userDropDown,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
Logo,
|
Logo,
|
||||||
SearchField,
|
SearchField,
|
||||||
},
|
},
|
||||||
})
|
methods: {
|
||||||
export default class NavBar extends Vue {
|
|
||||||
currentActor!: IPerson;
|
|
||||||
|
|
||||||
config!: IConfig;
|
|
||||||
|
|
||||||
currentUser!: ICurrentUser;
|
|
||||||
|
|
||||||
loggedUser!: IUser;
|
|
||||||
|
|
||||||
ICurrentUserRole = ICurrentUserRole;
|
|
||||||
|
|
||||||
identities: IPerson[] = [];
|
|
||||||
|
|
||||||
RouteName = RouteName;
|
|
||||||
|
|
||||||
mobileNavbarActive = false;
|
|
||||||
|
|
||||||
displayName = displayName;
|
|
||||||
|
|
||||||
@Ref("user-dropdown") userDropDown!: any;
|
|
||||||
|
|
||||||
toggleMenu(): void {
|
toggleMenu(): void {
|
||||||
console.debug("called toggleMenu");
|
console.debug("called toggleMenu");
|
||||||
|
if (this.userDropDown) {
|
||||||
this.userDropDown.showMenu();
|
this.userDropDown.showMenu();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
async handleErrors(errors: GraphQLError[]): Promise<void> {
|
||||||
|
if (
|
||||||
|
errors.length > 0 &&
|
||||||
|
errors[0].message ===
|
||||||
|
"You need to be logged-in to view your list of identities"
|
||||||
|
) {
|
||||||
|
await this.logout();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async logout(): Promise<void> {
|
||||||
|
await logout(this.$apollo.provider.defaultClient);
|
||||||
|
this.$oruga.notification.open({
|
||||||
|
message: this.$t("You have been disconnected") as string,
|
||||||
|
type: "is-success",
|
||||||
|
position: "is-bottom-right",
|
||||||
|
duration: 5000,
|
||||||
|
});
|
||||||
|
|
||||||
@Watch("currentActor")
|
if (this.$route.name === RouteName.HOME) return;
|
||||||
async initializeListOfIdentities(): Promise<void> {
|
await this.$router.push({ name: RouteName.HOME });
|
||||||
if (!this.currentUser.isLoggedIn) return;
|
},
|
||||||
|
async setIdentity(identity: IPerson): Promise<void> {
|
||||||
|
await this.$apollo.mutate({
|
||||||
|
mutation: UPDATE_DEFAULT_ACTOR,
|
||||||
|
variables: {
|
||||||
|
preferredUsername: identity.preferredUsername,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return changeIdentity(this.$apollo.provider.defaultClient, identity);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
async currentActor(): Promise<void> {
|
||||||
|
if (!this.currentUser?.isLoggedIn) return;
|
||||||
const { data } = await this.$apollo.query<{ identities: IPerson[] }>({
|
const { data } = await this.$apollo.query<{ identities: IPerson[] }>({
|
||||||
query: IDENTITIES,
|
query: IDENTITIES,
|
||||||
});
|
});
|
||||||
|
@ -285,53 +310,20 @@ export default class NavBar extends Vue {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
loggedUser(): void {
|
||||||
@Watch("loggedUser")
|
|
||||||
setSavedLanguage(): void {
|
|
||||||
if (this.loggedUser?.locale) {
|
if (this.loggedUser?.locale) {
|
||||||
console.debug("Setting locale from navbar");
|
console.debug("Setting locale from navbar");
|
||||||
loadLanguageAsync(this.loggedUser.locale);
|
loadLanguageAsync(this.loggedUser.locale);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
async handleErrors(errors: GraphQLError[]): Promise<void> {
|
|
||||||
if (
|
|
||||||
errors.length > 0 &&
|
|
||||||
errors[0].message ===
|
|
||||||
"You need to be logged-in to view your list of identities"
|
|
||||||
) {
|
|
||||||
await this.logout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async logout(): Promise<void> {
|
|
||||||
await logout(this.$apollo.provider.defaultClient);
|
|
||||||
this.$buefy.notification.open({
|
|
||||||
message: this.$t("You have been disconnected") as string,
|
|
||||||
type: "is-success",
|
|
||||||
position: "is-bottom-right",
|
|
||||||
duration: 5000,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (this.$route.name === RouteName.HOME) return;
|
|
||||||
await this.$router.push({ name: RouteName.HOME });
|
|
||||||
}
|
|
||||||
|
|
||||||
async setIdentity(identity: IPerson): Promise<void> {
|
|
||||||
await this.$apollo.mutate({
|
|
||||||
mutation: UPDATE_DEFAULT_ACTOR,
|
|
||||||
variables: {
|
|
||||||
preferredUsername: identity.preferredUsername,
|
|
||||||
},
|
},
|
||||||
});
|
},
|
||||||
return changeIdentity(this.$apollo.provider.defaultClient, identity);
|
computed: {
|
||||||
}
|
hideCreateEventsButton(): boolean {
|
||||||
|
|
||||||
get hideCreateEventsButton(): boolean {
|
|
||||||
return !!this.config?.restrictions?.onlyGroupsCanCreateEvents;
|
return !!this.config?.restrictions?.onlyGroupsCanCreateEvents;
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@use "@/styles/_mixins" as *;
|
@use "@/styles/_mixins" as *;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
</h1>
|
</h1>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div v-if="failed && participation === undefined">
|
<div v-if="failed && participation === undefined">
|
||||||
<b-message
|
<o-message
|
||||||
:title="$t('Error while validating participation request')"
|
:title="$t('Error while validating participation request')"
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
>
|
>
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
"Either the participation request has already been validated, either the validation token is incorrect."
|
"Either the participation request has already been validated, either the validation token is incorrect."
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-message>
|
</o-message>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<h1 class="title">
|
<h1 class="title">
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<div v-if="failed">
|
<div v-if="failed">
|
||||||
<b-message
|
<o-message
|
||||||
:title="
|
:title="
|
||||||
$t(
|
$t(
|
||||||
'Error while updating participation status inside this browser'
|
'Error while updating participation status inside this browser'
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
"We couldn't save your participation inside this browser. Not to worry, you have successfully confirmed your participation, we just couldn't save it's status in this browser because of a technical issue."
|
"We couldn't save your participation inside this browser. Not to worry, you have successfully confirmed your participation, we just couldn't save it's status in this browser because of a technical issue."
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-message>
|
</o-message>
|
||||||
</div>
|
</div>
|
||||||
<div class="columns has-text-centered">
|
<div class="columns has-text-centered">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
|
|
|
@ -16,22 +16,22 @@
|
||||||
"
|
"
|
||||||
@confirm-leave="$emit('confirm-leave')"
|
@confirm-leave="$emit('confirm-leave')"
|
||||||
/>
|
/>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-text"
|
type="is-text"
|
||||||
v-if="!actorIsParticipant && anonymousParticipation !== null"
|
v-if="!actorIsParticipant && anonymousParticipation !== null"
|
||||||
@click="$emit('cancel-anonymous-participation')"
|
@click="$emit('cancel-anonymous-participation')"
|
||||||
>{{ $t("Cancel anonymous participation") }}</b-button
|
>{{ $t("Cancel anonymous participation") }}</o-button
|
||||||
>
|
>
|
||||||
<small v-if="!actorIsParticipant && anonymousParticipation">
|
<small v-if="!actorIsParticipant && anonymousParticipation">
|
||||||
{{ $t("You are participating in this event anonymously") }}
|
{{ $t("You are participating in this event anonymously") }}
|
||||||
<b-tooltip :label="$t('Click for more information')">
|
<o-tooltip :label="$t('Click for more information')">
|
||||||
<span
|
<span
|
||||||
class="is-clickable"
|
class="is-clickable"
|
||||||
@click="isAnonymousParticipationModalOpen = true"
|
@click="isAnonymousParticipationModalOpen = true"
|
||||||
>
|
>
|
||||||
<b-icon size="is-small" icon="information-outline" />
|
<o-icon size="is-small" icon="information-outline" />
|
||||||
</span>
|
</span>
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
</small>
|
</small>
|
||||||
<small
|
<small
|
||||||
v-else-if="!actorIsParticipant && anonymousParticipation === false"
|
v-else-if="!actorIsParticipant && anonymousParticipation === false"
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
"You are participating in this event anonymously but didn't confirm participation"
|
"You are participating in this event anonymously but didn't confirm participation"
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
:label="
|
:label="
|
||||||
$t(
|
$t(
|
||||||
'This information is saved only on your computer. Click for details'
|
'This information is saved only on your computer. Click for details'
|
||||||
|
@ -49,9 +49,9 @@
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<router-link :to="{ name: RouteName.TERMS }">
|
<router-link :to="{ name: RouteName.TERMS }">
|
||||||
<b-icon size="is-small" icon="help-circle-outline" />
|
<o-icon size="is-small" icon="help-circle-outline" />
|
||||||
</router-link>
|
</router-link>
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
|
@ -59,10 +59,10 @@
|
||||||
<template>
|
<template>
|
||||||
<span>{{ $t("Event already passed") }}</span>
|
<span>{{ $t("Event already passed") }}</span>
|
||||||
</template>
|
</template>
|
||||||
<b-icon icon="menu-down" />
|
<o-icon icon="menu-down" />
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<b-modal
|
<o-modal
|
||||||
:active.sync="isAnonymousParticipationModalOpen"
|
:active.sync="isAnonymousParticipationModalOpen"
|
||||||
has-modal-card
|
has-modal-card
|
||||||
:close-button-aria-label="$t('Close')"
|
:close-button-aria-label="$t('Close')"
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section class="modal-card-body">
|
<section class="modal-card-body">
|
||||||
<b-notification
|
<o-notification
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
:closable="false"
|
:closable="false"
|
||||||
v-if="event.joinOptions === EventJoinOptions.RESTRICTED"
|
v-if="event.joinOptions === EventJoinOptions.RESTRICTED"
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
"As the event organizer has chosen to manually validate participation requests, your participation will be really confirmed only once you receive an email stating it's being accepted."
|
"As the event organizer has chosen to manually validate participation requests, your participation will be really confirmed only once you receive an email stating it's being accepted."
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-notification>
|
</o-notification>
|
||||||
<p>
|
<p>
|
||||||
{{
|
{{
|
||||||
$t(
|
$t(
|
||||||
|
@ -102,19 +102,19 @@
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<div class="buttons" v-if="isSecureContext">
|
<div class="buttons" v-if="isSecureContext">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-danger is-outlined"
|
type="is-danger is-outlined"
|
||||||
@click="clearEventParticipationData"
|
@click="clearEventParticipationData"
|
||||||
>
|
>
|
||||||
{{ $t("Clear participation data for this event") }}
|
{{ $t("Clear participation data for this event") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
<b-button type="is-danger" @click="clearAllParticipationData">
|
<o-button type="is-danger" @click="clearAllParticipationData">
|
||||||
{{ $t("Clear participation data for all events") }}
|
{{ $t("Clear participation data for all events") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -10,22 +10,22 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<b-message type="is-info">
|
<o-message type="is-info">
|
||||||
{{
|
{{
|
||||||
$t(
|
$t(
|
||||||
"Your email will only be used to confirm that you're a real person and send you eventual updates for this event. It will NOT be transmitted to other instances or to the event organizer."
|
"Your email will only be used to confirm that you're a real person and send you eventual updates for this event. It will NOT be transmitted to other instances or to the event organizer."
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-message>
|
</o-message>
|
||||||
<b-message type="is-danger" v-if="error">{{ error }}</b-message>
|
<o-message type="is-danger" v-if="error">{{ error }}</o-message>
|
||||||
<b-field :label="$t('Email address')">
|
<o-field :label="$t('Email address')">
|
||||||
<b-input
|
<o-input
|
||||||
type="email"
|
type="email"
|
||||||
v-model="anonymousParticipation.email"
|
v-model="anonymousParticipation.email"
|
||||||
:placeholder="$t('Your email')"
|
:placeholder="$t('Your email')"
|
||||||
required
|
required
|
||||||
></b-input>
|
></o-input>
|
||||||
</b-field>
|
</o-field>
|
||||||
<p v-if="event.joinOptions === EventJoinOptions.RESTRICTED">
|
<p v-if="event.joinOptions === EventJoinOptions.RESTRICTED">
|
||||||
{{
|
{{
|
||||||
$t(
|
$t(
|
||||||
|
@ -40,16 +40,16 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<b-field :label="$t('Message')">
|
<o-field :label="$t('Message')">
|
||||||
<b-input
|
<o-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
v-model="anonymousParticipation.message"
|
v-model="anonymousParticipation.message"
|
||||||
minlength="10"
|
minlength="10"
|
||||||
:required="event.joinOptions === EventJoinOptions.RESTRICTED"
|
:required="event.joinOptions === EventJoinOptions.RESTRICTED"
|
||||||
></b-input>
|
></o-input>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-checkbox v-model="anonymousParticipation.saveParticipation">
|
<o-checkbox v-model="anonymousParticipation.saveParticipation">
|
||||||
<b>{{ $t("Remember my participation in this browser") }}</b>
|
<b>{{ $t("Remember my participation in this browser") }}</b>
|
||||||
<p>
|
<p>
|
||||||
{{
|
{{
|
||||||
|
@ -58,21 +58,21 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
</b-checkbox>
|
</o-checkbox>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-button
|
<o-button
|
||||||
:disabled="sendingForm"
|
:disabled="sendingForm"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
native-type="submit"
|
native-type="submit"
|
||||||
>{{ $t("Send email") }}</b-button
|
>{{ $t("Send email") }}</o-button
|
||||||
>
|
>
|
||||||
<div class="has-text-centered">
|
<div class="has-text-centered">
|
||||||
<b-button
|
<o-button
|
||||||
native-type="button"
|
native-type="button"
|
||||||
tag="a"
|
tag="a"
|
||||||
type="is-text"
|
type="is-text"
|
||||||
@click="$router.go(-1)"
|
@click="$router.go(-1)"
|
||||||
>{{ $t("Back to previous page") }}</b-button
|
>{{ $t("Back to previous page") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -99,7 +99,7 @@
|
||||||
)
|
)
|
||||||
}}</span>
|
}}</span>
|
||||||
</p>
|
</p>
|
||||||
<b-message type="is-warning" v-if="error">{{ error }}</b-message>
|
<o-message type="is-warning" v-if="error">{{ error }}</o-message>
|
||||||
<p class="content">
|
<p class="content">
|
||||||
<i18n path="You may now close this window, or {return_to_event}.">
|
<i18n path="You may now close this window, or {return_to_event}.">
|
||||||
<router-link
|
<router-link
|
||||||
|
@ -112,7 +112,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<b-message type="is-danger" v-else-if="!$apollo.loading"
|
<o-message type="is-danger" v-else-if="!$apollo.loading"
|
||||||
>{{
|
>{{
|
||||||
$t(
|
$t(
|
||||||
"Unable to load event for participation. The error details are provided below:"
|
"Unable to load event for participation. The error details are provided below:"
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
<details>
|
<details>
|
||||||
<pre>{{ error }}</pre>
|
<pre>{{ error }}</pre>
|
||||||
</details>
|
</details>
|
||||||
</b-message>
|
</o-message>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -17,9 +17,9 @@
|
||||||
alt="Profile illustration"
|
alt="Profile illustration"
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-button type="is-primary">{{
|
<o-button type="is-primary">{{
|
||||||
$t("I have a Mobilizon account")
|
$t("I have a Mobilizon account")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</router-link>
|
</router-link>
|
||||||
<p>
|
<p>
|
||||||
<small>
|
<small>
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</small>
|
</small>
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
type="is-dark"
|
type="is-dark"
|
||||||
:label="
|
:label="
|
||||||
$t(
|
$t(
|
||||||
|
@ -40,8 +40,8 @@
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-icon size="is-small" icon="help-circle-outline" />
|
<o-icon size="is-small" icon="help-circle-outline" />
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<vertical-divider
|
<vertical-divider
|
||||||
|
@ -65,9 +65,9 @@
|
||||||
alt="Privacy illustration"
|
alt="Privacy illustration"
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-button type="is-primary">{{
|
<o-button type="is-primary">{{
|
||||||
$t("I don't have a Mobilizon account")
|
$t("I don't have a Mobilizon account")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</router-link>
|
</router-link>
|
||||||
<a :href="`${event.url}/participate/without-account`" v-else>
|
<a :href="`${event.url}/participate/without-account`" v-else>
|
||||||
<figure class="image is-128x128">
|
<figure class="image is-128x128">
|
||||||
|
@ -76,9 +76,9 @@
|
||||||
alt="Privacy illustration"
|
alt="Privacy illustration"
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-button type="is-primary">{{
|
<o-button type="is-primary">{{
|
||||||
$t("I don't have a Mobilizon account")
|
$t("I don't have a Mobilizon account")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</a>
|
</a>
|
||||||
<p>
|
<p>
|
||||||
<small>{{ $t("Participate using your email address") }}</small>
|
<small>{{ $t("Participate using your email address") }}</small>
|
||||||
|
@ -90,9 +90,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="has-text-centered">
|
<div class="has-text-centered">
|
||||||
<b-button tag="a" type="is-text" @click="$router.go(-1)">{{
|
<o-button tag="a" type="is-text" @click="$router.go(-1)">{{
|
||||||
$t("Back to previous page")
|
$t("Back to previous page")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -30,22 +30,22 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<b-field class="file is-primary">
|
<o-field class="file is-primary">
|
||||||
<b-upload @input="onFileChanged" :accept="accept" class="file-label">
|
<o-upload @input="onFileChanged" :accept="accept" class="file-label">
|
||||||
<span class="file-cta">
|
<span class="file-cta">
|
||||||
<b-icon class="file-icon" icon="upload" />
|
<o-icon class="file-icon" icon="upload" />
|
||||||
<span>{{ $t("Click to upload") }}</span>
|
<span>{{ $t("Click to upload") }}</span>
|
||||||
</span>
|
</span>
|
||||||
</b-upload>
|
</o-upload>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-text"
|
type="is-text"
|
||||||
v-if="imageSrc"
|
v-if="imageSrc"
|
||||||
@click="removeOrClearPicture"
|
@click="removeOrClearPicture"
|
||||||
@keyup.enter="removeOrClearPicture"
|
@keyup.enter="removeOrClearPicture"
|
||||||
>
|
>
|
||||||
{{ $t("Clear") }}
|
{{ $t("Clear") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
{{ post.title }}
|
{{ post.title }}
|
||||||
</h3>
|
</h3>
|
||||||
<p class="post-publication-date">
|
<p class="post-publication-date">
|
||||||
<b-icon icon="clock" />
|
<o-icon icon="clock" />
|
||||||
<span dir="auto" class="has-text-grey-dark" v-if="isBeforeLastWeek">{{
|
<span dir="auto" class="has-text-grey-dark" v-if="isBeforeLastWeek">{{
|
||||||
publishedAt | formatDateTimeString(undefined, false, "short")
|
publishedAt | formatDateTimeString(undefined, false, "short")
|
||||||
}}</span>
|
}}</span>
|
||||||
|
@ -25,12 +25,12 @@
|
||||||
})
|
})
|
||||||
}}</span>
|
}}</span>
|
||||||
</p>
|
</p>
|
||||||
<b-taglist v-if="post.tags.length > 0" style="display: inline">
|
<o-taglist v-if="post.tags.length > 0" style="display: inline">
|
||||||
<b-icon icon="tag" />
|
<o-icon icon="tag" />
|
||||||
<b-tag v-for="tag in post.tags" :key="tag.slug">{{ tag.title }}</b-tag>
|
<o-tag v-for="tag in post.tags" :key="tag.slug">{{ tag.title }}</o-tag>
|
||||||
</b-taglist>
|
</o-taglist>
|
||||||
<p class="post-publisher has-text-grey-dark" v-if="isCurrentActorMember">
|
<p class="post-publisher has-text-grey-dark" v-if="isCurrentActorMember">
|
||||||
<b-icon icon="account-edit" />
|
<o-icon icon="account-edit" />
|
||||||
<i18n path="Published by {name}">
|
<i18n path="Published by {name}">
|
||||||
<b class="has-text-weight-medium" slot="name">{{
|
<b class="has-text-weight-medium" slot="name">{{
|
||||||
displayName(post.author)
|
displayName(post.author)
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<section class="modal-card-body is-flex" v-if="post">
|
<section class="modal-card-body is-flex" v-if="post">
|
||||||
<div class="container has-text-centered">
|
<div class="container has-text-centered">
|
||||||
<b-notification
|
<o-notification
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
v-if="post.visibility !== PostVisibility.PUBLIC"
|
v-if="post.visibility !== PostVisibility.PUBLIC"
|
||||||
:closable="false"
|
:closable="false"
|
||||||
|
@ -16,23 +16,23 @@
|
||||||
"This post is accessible only through it's link. Be careful where you post this link."
|
"This post is accessible only through it's link. Be careful where you post this link."
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-notification>
|
</o-notification>
|
||||||
<b-field :label="$t('Post URL')" label-for="post-url-text">
|
<o-field :label="$t('Post URL')" label-for="post-url-text">
|
||||||
<b-input
|
<o-input
|
||||||
id="post-url-text"
|
id="post-url-text"
|
||||||
ref="postURLInput"
|
ref="postURLInput"
|
||||||
:value="postURL"
|
:value="postURL"
|
||||||
expanded
|
expanded
|
||||||
/>
|
/>
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
:label="$t('URL copied to clipboard')"
|
:label="$t('URL copied to clipboard')"
|
||||||
:active="showCopiedTooltip"
|
:active="showCopiedTooltip"
|
||||||
always
|
always
|
||||||
type="is-success"
|
type="is-success"
|
||||||
position="is-left"
|
position="is-left"
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
icon-right="content-paste"
|
icon-right="content-paste"
|
||||||
native-type="button"
|
native-type="button"
|
||||||
|
@ -40,16 +40,16 @@
|
||||||
@keyup.enter="copyURL"
|
@keyup.enter="copyURL"
|
||||||
:title="$t('Copy URL to clipboard')"
|
:title="$t('Copy URL to clipboard')"
|
||||||
/>
|
/>
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
<div>
|
<div>
|
||||||
<a
|
<a
|
||||||
:href="twitterShareUrl"
|
:href="twitterShareUrl"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="Twitter"
|
title="Twitter"
|
||||||
><b-icon icon="twitter" size="is-large" type="is-primary"
|
><o-icon icon="twitter" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="mastodonShareUrl"
|
:href="mastodonShareUrl"
|
||||||
|
@ -65,14 +65,14 @@
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="Facebook"
|
title="Facebook"
|
||||||
><b-icon icon="facebook" size="is-large" type="is-primary"
|
><o-icon icon="facebook" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="whatsAppShareUrl"
|
:href="whatsAppShareUrl"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="WhatsApp"
|
title="WhatsApp"
|
||||||
><b-icon icon="whatsapp" size="is-large" type="is-primary"
|
><o-icon icon="whatsapp" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="telegramShareUrl"
|
:href="telegramShareUrl"
|
||||||
|
@ -88,7 +88,7 @@
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="LinkedIn"
|
title="LinkedIn"
|
||||||
><b-icon icon="linkedin" size="is-large" type="is-primary"
|
><o-icon icon="linkedin" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
<a
|
<a
|
||||||
:href="diasporaShareUrl"
|
:href="diasporaShareUrl"
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="nofollow noopener"
|
rel="nofollow noopener"
|
||||||
title="Email"
|
title="Email"
|
||||||
><b-icon icon="email" size="is-large" type="is-primary"
|
><o-icon icon="email" size="is-large" type="is-primary"
|
||||||
/></a>
|
/></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<figure class="image is-48x48" v-if="report.reported.avatar">
|
<figure class="image is-48x48" v-if="report.reported.avatar">
|
||||||
<img alt="" :src="report.reported.avatar.url" />
|
<img alt="" :src="report.reported.avatar.url" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-circle" />
|
<o-icon v-else size="is-large" icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
<p class="title is-4">{{ report.reported.name }}</p>
|
<p class="title is-4">{{ report.reported.name }}</p>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
>
|
>
|
||||||
<div class="media">
|
<div class="media">
|
||||||
<div class="media-left">
|
<div class="media-left">
|
||||||
<b-icon icon="alert" type="is-warning" size="is-large" />
|
<o-icon icon="alert" type="is-warning" size="is-large" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
<div class="box" v-if="comment">
|
<div class="box" v-if="comment">
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
<figure class="image is-48x48" v-if="comment.actor.avatar">
|
<figure class="image is-48x48" v-if="comment.actor.avatar">
|
||||||
<img :src="comment.actor.avatar.url" alt="" />
|
<img :src="comment.actor.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else
|
v-else
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
@ -45,16 +45,16 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Additional comments')"
|
:label="$t('Additional comments')"
|
||||||
label-for="additonal-comments"
|
label-for="additonal-comments"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
v-model="content"
|
v-model="content"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
id="additonal-comments"
|
id="additonal-comments"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="control" v-if="outsideDomain">
|
<div class="control" v-if="outsideDomain">
|
||||||
|
@ -65,9 +65,9 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<b-switch v-model="forward">{{
|
<o-switch v-model="forward">{{
|
||||||
$t("Transfer to {outsideDomain}", { outsideDomain })
|
$t("Transfer to {outsideDomain}", { outsideDomain })
|
||||||
}}</b-switch>
|
}}</o-switch>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<div class="preview">
|
<div class="preview">
|
||||||
<b-icon icon="folder" size="is-large" />
|
<o-icon icon="folder" size="is-large" />
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<h3>{{ resource.title }}</h3>
|
<h3>{{ resource.title }}</h3>
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
<template>
|
<template>
|
||||||
<b-dropdown aria-role="list" position="is-bottom-left">
|
<o-dropdown aria-role="list" position="is-bottom-left">
|
||||||
<b-icon icon="dots-horizontal" slot="trigger" />
|
<o-icon icon="dots-horizontal" slot="trigger" />
|
||||||
|
|
||||||
<b-dropdown-item aria-role="listitem" @click="$emit('rename')">
|
<o-dropdown-item aria-role="listitem" @click="$emit('rename')">
|
||||||
<b-icon icon="pencil" />
|
<o-icon icon="pencil" />
|
||||||
{{ $t("Rename") }}
|
{{ $t("Rename") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item aria-role="listitem" @click="$emit('move')">
|
<o-dropdown-item aria-role="listitem" @click="$emit('move')">
|
||||||
<b-icon icon="folder-move" />
|
<o-icon icon="folder-move" />
|
||||||
{{ $t("Move") }}
|
{{ $t("Move") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item aria-role="listitem" @click="$emit('delete')">
|
<o-dropdown-item aria-role="listitem" @click="$emit('delete')">
|
||||||
<b-icon icon="delete" />
|
<o-icon icon="delete" />
|
||||||
{{ $t("Delete") }}
|
{{ $t("Delete") }}
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Component, Vue } from "vue-property-decorator";
|
import { Component, Vue } from "vue-property-decorator";
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
Object.keys(mapServiceTypeToIcon).includes(resource.type)
|
Object.keys(mapServiceTypeToIcon).includes(resource.type)
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-icon :icon="mapServiceTypeToIcon[resource.type]" size="is-large" />
|
<o-icon :icon="mapServiceTypeToIcon[resource.type]" size="is-large" />
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="preview-image"
|
class="preview-image"
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
:style="`background-image: url(${resource.metadata.imageRemoteUrl})`"
|
:style="`background-image: url(${resource.metadata.imageRemoteUrl})`"
|
||||||
/>
|
/>
|
||||||
<div class="preview-type" v-else>
|
<div class="preview-type" v-else>
|
||||||
<b-icon icon="link" size="is-large" />
|
<o-icon icon="link" size="is-large" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
v-if="resource.parent"
|
v-if="resource.parent"
|
||||||
>
|
>
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<b-icon icon="chevron-up" size="is-small" />
|
<o-icon icon="chevron-up" size="is-small" />
|
||||||
</span>
|
</span>
|
||||||
{{ $t("Parent folder") }}
|
{{ $t("Parent folder") }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
v-else-if="resource.path.length > 1"
|
v-else-if="resource.path.length > 1"
|
||||||
>
|
>
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<b-icon icon="chevron-up" size="is-small" />
|
<o-icon icon="chevron-up" size="is-small" />
|
||||||
</span>
|
</span>
|
||||||
{{ $t("Parent folder") }}
|
{{ $t("Parent folder") }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -38,12 +38,12 @@
|
||||||
@click="goDown(element)"
|
@click="goDown(element)"
|
||||||
>
|
>
|
||||||
<span class="panel-icon">
|
<span class="panel-icon">
|
||||||
<b-icon
|
<o-icon
|
||||||
icon="folder"
|
icon="folder"
|
||||||
size="is-small"
|
size="is-small"
|
||||||
v-if="element.type === 'folder'"
|
v-if="element.type === 'folder'"
|
||||||
/>
|
/>
|
||||||
<b-icon icon="link" size="is-small" v-else />
|
<o-icon icon="link" size="is-small" v-else />
|
||||||
</span>
|
</span>
|
||||||
{{ element.title }}
|
{{ element.title }}
|
||||||
<span v-if="element.id === initialResource.id">
|
<span v-if="element.id === initialResource.id">
|
||||||
|
@ -58,7 +58,7 @@
|
||||||
>
|
>
|
||||||
{{ $t("No resources in this folder") }}
|
{{ $t("No resources in this folder") }}
|
||||||
</p>
|
</p>
|
||||||
<b-pagination
|
<o-pagination
|
||||||
v-if="resource.children && resource.children.total > RESOURCES_PER_PAGE"
|
v-if="resource.children && resource.children.total > RESOURCES_PER_PAGE"
|
||||||
:total="resource.children.total"
|
:total="resource.children.total"
|
||||||
v-model="page"
|
v-model="page"
|
||||||
|
@ -71,10 +71,10 @@
|
||||||
/>
|
/>
|
||||||
</article>
|
</article>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button type="is-text" @click="$emit('close-move-modal')">{{
|
<o-button type="is-text" @click="$emit('close-move-modal')">{{
|
||||||
$t("Cancel")
|
$t("Cancel")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
@click="updateResource"
|
@click="updateResource"
|
||||||
:disabled="moveDisabled"
|
:disabled="moveDisabled"
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
</template>
|
</template>
|
||||||
<template v-else
|
<template v-else
|
||||||
>{{ $t("Move resource to {folder}", { folder: resource.title }) }}
|
>{{ $t("Move resource to {folder}", { folder: resource.title }) }}
|
||||||
</template></b-button
|
</template></o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<label for="navSearchField">
|
<label for="navSearchField">
|
||||||
<span class="visually-hidden">{{ defaultPlaceHolder }}</span>
|
<span class="visually-hidden">{{ defaultPlaceHolder }}</span>
|
||||||
<b-input
|
<o-input
|
||||||
custom-class="searchField"
|
custom-class="searchField"
|
||||||
id="navSearchField"
|
id="navSearchField"
|
||||||
icon="magnify"
|
icon="magnify"
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<b-checkbox
|
<o-checkbox
|
||||||
v-model="notificationOnDay"
|
v-model="notificationOnDay"
|
||||||
@input="updateSetting({ notificationOnDay })"
|
@input="updateSetting({ notificationOnDay })"
|
||||||
>
|
>
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
</b-checkbox>
|
</o-checkbox>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
{{
|
{{
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<div class="has-text-centered">
|
<div class="has-text-centered">
|
||||||
<b-select
|
<o-select
|
||||||
:loading="!config || !loggedUser"
|
:loading="!config || !loggedUser"
|
||||||
v-model="locale"
|
v-model="locale"
|
||||||
:placeholder="$t('Select a language')"
|
:placeholder="$t('Select a language')"
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
<option v-for="(language, lang) in langs" :value="lang" :key="lang">
|
<option v-for="(language, lang) in langs" :value="lang" :key="lang">
|
||||||
{{ language }}
|
{{ language }}
|
||||||
</option>
|
</option>
|
||||||
</b-select>
|
</o-select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -39,12 +39,12 @@
|
||||||
timezone,
|
timezone,
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
<b-message
|
<o-message
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-if="!$apollo.loading && !supportedTimezone"
|
v-if="!$apollo.loading && !supportedTimezone"
|
||||||
>
|
>
|
||||||
{{ $t("Your timezone {timezone} isn't supported.", { timezone }) }}
|
{{ $t("Your timezone {timezone} isn't supported.", { timezone }) }}
|
||||||
</b-message>
|
</o-message>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="card" v-if="todo">
|
<div class="card" v-if="todo">
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<b-checkbox v-model="status" />
|
<o-checkbox v-model="status" />
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: RouteName.TODO, params: { todoId: todo.id } }"
|
:to="{ name: RouteName.TODO, params: { todoId: todo.id } }"
|
||||||
>{{ todo.title }}</router-link
|
>{{ todo.title }}</router-link
|
||||||
>
|
>
|
||||||
<span class="details has-text-grey">
|
<span class="details has-text-grey">
|
||||||
<span v-if="todo.dueDate" class="due_date">
|
<span v-if="todo.dueDate" class="due_date">
|
||||||
<b-icon icon="calendar" />
|
<o-icon icon="calendar" />
|
||||||
{{ todo.dueDate | formatDateString }}
|
{{ todo.dueDate | formatDateString }}
|
||||||
</span>
|
</span>
|
||||||
<span v-if="todo.assignedTo" class="assigned_to">
|
<span v-if="todo.assignedTo" class="assigned_to">
|
||||||
<b-icon icon="account" />
|
<o-icon icon="account" />
|
||||||
{{ `@${todo.assignedTo.preferredUsername}` }}
|
{{ `@${todo.assignedTo.preferredUsername}` }}
|
||||||
<span v-if="todo.assignedTo.domain">{{
|
<span v-if="todo.assignedTo.domain">{{
|
||||||
`@${todo.assignedTo.domain}`
|
`@${todo.assignedTo.domain}`
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="card" v-if="todo">
|
<div class="card" v-if="todo">
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<b-field :label="$t('Status')">
|
<o-field :label="$t('Status')">
|
||||||
<b-checkbox size="is-large" v-model="status" />
|
<o-checkbox size="is-large" v-model="status" />
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field :label="$t('Title')">
|
<o-field :label="$t('Title')">
|
||||||
<b-input v-model="title" />
|
<o-input v-model="title" />
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field :label="$t('Assigned to')">
|
<o-field :label="$t('Assigned to')">
|
||||||
<actor-auto-complete v-model="assignedTo" />
|
<actor-auto-complete v-model="assignedTo" />
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field :label="$t('Due on')">
|
<o-field :label="$t('Due on')">
|
||||||
<b-datepicker v-model="dueDate" />
|
<o-datepicker v-model="dueDate" />
|
||||||
</b-field>
|
</o-field>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
v-if="isProviderSelected && oauthProvider.label === null"
|
v-if="isProviderSelected && oauthProvider.label === null"
|
||||||
:href="`/auth/${oauthProvider.id}`"
|
:href="`/auth/${oauthProvider.id}`"
|
||||||
>
|
>
|
||||||
<b-icon :icon="oauthProvider.id" />
|
<o-icon :icon="oauthProvider.id" />
|
||||||
<span>{{ SELECTED_PROVIDERS[oauthProvider.id] }}</span></a
|
<span>{{ SELECTED_PROVIDERS[oauthProvider.id] }}</span></a
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
:href="`/auth/${oauthProvider.id}`"
|
:href="`/auth/${oauthProvider.id}`"
|
||||||
v-else-if="isProviderSelected"
|
v-else-if="isProviderSelected"
|
||||||
>
|
>
|
||||||
<b-icon icon="lock" />
|
<o-icon icon="lock" />
|
||||||
<span>{{ oauthProvider.label }}</span>
|
<span>{{ oauthProvider.label }}</span>
|
||||||
</a>
|
</a>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="empty-content" :class="{ inline }" role="note">
|
<div class="empty-content" :class="{ inline }" role="note">
|
||||||
<b-icon :icon="icon" size="is-large" />
|
<o-icon :icon="icon" size="is-large" />
|
||||||
<h2 class="empty-content__title">
|
<h2 class="empty-content__title">
|
||||||
<!-- @slot Mandatory title -->
|
<!-- @slot Mandatory title -->
|
||||||
<slot />
|
<slot />
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="columns is-vcentered">
|
<div class="columns is-vcentered">
|
||||||
<div class="column has-text-centered">
|
<div class="column has-text-centered">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
size="is-medium"
|
size="is-medium"
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
redirect: pathAfterLogin,
|
redirect: pathAfterLogin,
|
||||||
},
|
},
|
||||||
}"
|
}"
|
||||||
>{{ $t("Login on {instance}", { instance: host }) }}</b-button
|
>{{ $t("Login on {instance}", { instance: host }) }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<vertical-divider :content="$t('Or')" />
|
<vertical-divider :content="$t('Or')" />
|
||||||
|
@ -26,29 +26,29 @@
|
||||||
<p>{{ $t("Other software may also support this.") }}</p>
|
<p>{{ $t("Other software may also support this.") }}</p>
|
||||||
<p>{{ sentence }}</p>
|
<p>{{ sentence }}</p>
|
||||||
<form @submit.prevent="redirectToInstance">
|
<form @submit.prevent="redirectToInstance">
|
||||||
<b-field :label="$t('Your federated identity')">
|
<o-field :label="$t('Your federated identity')">
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-input
|
<o-input
|
||||||
expanded
|
expanded
|
||||||
autocapitalize="none"
|
autocapitalize="none"
|
||||||
autocorrect="off"
|
autocorrect="off"
|
||||||
v-model="remoteActorAddress"
|
v-model="remoteActorAddress"
|
||||||
:placeholder="$t('profile@instance')"
|
:placeholder="$t('profile@instance')"
|
||||||
></b-input>
|
></o-input>
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<button class="button is-primary" type="submit">
|
<button class="button is-primary" type="submit">
|
||||||
{{ $t("Go") }}
|
{{ $t("Go") }}
|
||||||
</button>
|
</button>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
</b-field>
|
</o-field>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="has-text-centered">
|
<div class="has-text-centered">
|
||||||
<b-button tag="a" type="is-text" @click="$router.go(-1)">{{
|
<o-button tag="a" type="is-text" @click="$router.go(-1)">{{
|
||||||
$t("Back to previous page")
|
$t("Back to previous page")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
import Vue from "vue";
|
import Vue, { createApp, provide } from "vue";
|
||||||
import Buefy from "buefy";
|
|
||||||
import Component from "vue-class-component";
|
|
||||||
import VueScrollTo from "vue-scrollto";
|
import VueScrollTo from "vue-scrollto";
|
||||||
import VueMeta from "vue-meta";
|
import { createMetaManager, plugin as metaPlugin } from "vue-meta";
|
||||||
import VTooltip from "v-tooltip";
|
import VTooltipPlugin from "v-tooltip";
|
||||||
import VueAnnouncer from "@vue-a11y/announcer";
|
import VueAnnouncer from "@vue-a11y/announcer";
|
||||||
import VueSkipTo from "@vue-a11y/skip-to";
|
import VueSkipTo from "@vue-a11y/skip-to";
|
||||||
import App from "./App.vue";
|
import App from "./App.vue";
|
||||||
|
@ -11,34 +9,36 @@ import router from "./router";
|
||||||
import { NotifierPlugin } from "./plugins/notifier";
|
import { NotifierPlugin } from "./plugins/notifier";
|
||||||
import filters from "./filters";
|
import filters from "./filters";
|
||||||
import { i18n } from "./utils/i18n";
|
import { i18n } from "./utils/i18n";
|
||||||
import apolloProvider from "./vue-apollo";
|
import apolloProvider, { apolloClient } from "./vue-apollo";
|
||||||
|
import Oruga from "@oruga-ui/oruga-next";
|
||||||
import "./registerServiceWorker";
|
import "./registerServiceWorker";
|
||||||
|
import { bulmaConfig } from "@oruga-ui/theme-bulma";
|
||||||
|
import { DefaultApolloClient } from "@vue/apollo-composable";
|
||||||
|
import VueI18n from "vue-i18n";
|
||||||
|
|
||||||
Vue.config.productionTip = false;
|
|
||||||
|
|
||||||
Vue.use(Buefy);
|
|
||||||
Vue.use(NotifierPlugin);
|
|
||||||
Vue.use(filters);
|
Vue.use(filters);
|
||||||
Vue.use(VueMeta);
|
const metaManager = createMetaManager();
|
||||||
Vue.use(VueScrollTo);
|
|
||||||
Vue.use(VTooltip);
|
|
||||||
Vue.use(VueAnnouncer);
|
|
||||||
Vue.use(VueSkipTo);
|
|
||||||
|
|
||||||
// Register the router hooks with their names
|
const app = createApp({
|
||||||
Component.registerHooks([
|
setup() {
|
||||||
"beforeRouteEnter",
|
const { t } = VueI18n.useI18n();
|
||||||
"beforeRouteLeave",
|
provide(DefaultApolloClient, apolloClient);
|
||||||
"beforeRouteUpdate", // for vue-router 2.2+
|
return { $t: t };
|
||||||
]);
|
},
|
||||||
|
...App,
|
||||||
/* eslint-disable no-new */
|
|
||||||
new Vue({
|
|
||||||
router,
|
|
||||||
apolloProvider,
|
|
||||||
el: "#app",
|
|
||||||
template: "<App/>",
|
|
||||||
components: { App },
|
|
||||||
render: (h) => h(App),
|
|
||||||
i18n,
|
|
||||||
});
|
});
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore
|
||||||
|
router.app = app;
|
||||||
|
app
|
||||||
|
.use(router)
|
||||||
|
.use(apolloProvider)
|
||||||
|
.use(Oruga, bulmaConfig)
|
||||||
|
.use(i18n)
|
||||||
|
.use(NotifierPlugin)
|
||||||
|
.use(VueAnnouncer)
|
||||||
|
.use(VueSkipTo)
|
||||||
|
.use(VTooltipPlugin)
|
||||||
|
.use(VueScrollTo)
|
||||||
|
.use(metaPlugin)
|
||||||
|
.mount("#app");
|
||||||
|
|
|
@ -1,39 +1,22 @@
|
||||||
/* eslint-disable no-shadow */
|
/* eslint-disable no-shadow */
|
||||||
import VueInstance from "vue";
|
import VueInstance from "vue";
|
||||||
import { ColorModifiers } from "buefy/types/helpers.d";
|
import { ColorModifiers } from "buefy/types/helpers.d";
|
||||||
import { Route, RawLocation } from "vue-router";
|
import { App } from "vue";
|
||||||
|
|
||||||
declare module "vue/types/vue" {
|
declare module "vue" {
|
||||||
interface Vue {
|
interface Vue {
|
||||||
$notifier: {
|
$notifier: {
|
||||||
success: (message: string) => void;
|
success: (message: string) => void;
|
||||||
error: (message: string) => void;
|
error: (message: string) => void;
|
||||||
info: (message: string) => void;
|
info: (message: string) => void;
|
||||||
};
|
};
|
||||||
beforeRouteEnter?(
|
|
||||||
to: Route,
|
|
||||||
from: Route,
|
|
||||||
next: (to?: RawLocation | false | ((vm: VueInstance) => void)) => void
|
|
||||||
): void;
|
|
||||||
|
|
||||||
beforeRouteLeave?(
|
|
||||||
to: Route,
|
|
||||||
from: Route,
|
|
||||||
next: (to?: RawLocation | false | ((vm: VueInstance) => void)) => void
|
|
||||||
): void;
|
|
||||||
|
|
||||||
beforeRouteUpdate?(
|
|
||||||
to: Route,
|
|
||||||
from: Route,
|
|
||||||
next: (to?: RawLocation | false | ((vm: VueInstance) => void)) => void
|
|
||||||
): void;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Notifier {
|
export class Notifier {
|
||||||
private readonly vue: typeof VueInstance;
|
private readonly vue: typeof VueInstance;
|
||||||
|
|
||||||
constructor(vue: typeof VueInstance) {
|
constructor(vue: App) {
|
||||||
this.vue = vue;
|
this.vue = vue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +33,7 @@ export class Notifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
private notification(message: string, type: ColorModifiers) {
|
private notification(message: string, type: ColorModifiers) {
|
||||||
this.vue.prototype.$buefy.notification.open({
|
this.vue.config.globalProperties.$buefy.notification.open({
|
||||||
message,
|
message,
|
||||||
duration: 5000,
|
duration: 5000,
|
||||||
position: "is-bottom-right",
|
position: "is-bottom-right",
|
||||||
|
@ -61,6 +44,8 @@ export class Notifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
export function NotifierPlugin(vue: typeof VueInstance): void {
|
export const NotifierPlugin = {
|
||||||
vue.prototype.$notifier = new Notifier(vue);
|
install(app: App) {
|
||||||
}
|
app.config.globalProperties.$notifier = new Notifier(app);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
import Vue from "vue";
|
import {
|
||||||
import Router, { Route } from "vue-router";
|
createRouter,
|
||||||
|
createWebHistory,
|
||||||
|
RouteLocationNormalized,
|
||||||
|
RouteLocationNormalizedLoaded,
|
||||||
|
} from "vue-router";
|
||||||
import VueScrollTo from "vue-scrollto";
|
import VueScrollTo from "vue-scrollto";
|
||||||
import { PositionResult } from "vue-router/types/router.d";
|
import { PositionResult } from "vue-router/types/router.d";
|
||||||
import { ImportedComponent } from "vue/types/options";
|
import { ImportedComponent } from "vue/types/options";
|
||||||
|
@ -15,25 +19,23 @@ import { userRoutes } from "./user";
|
||||||
import RouteName from "./name";
|
import RouteName from "./name";
|
||||||
import { AVAILABLE_LANGUAGES, i18n } from "@/utils/i18n";
|
import { AVAILABLE_LANGUAGES, i18n } from "@/utils/i18n";
|
||||||
|
|
||||||
Vue.use(Router);
|
|
||||||
|
|
||||||
function scrollBehavior(
|
function scrollBehavior(
|
||||||
to: Route,
|
to: RouteLocationNormalized,
|
||||||
from: Route,
|
from: RouteLocationNormalizedLoaded,
|
||||||
savedPosition: any
|
savedPosition: any
|
||||||
): PositionResult | undefined | null {
|
): any {
|
||||||
if (to.hash) {
|
if (to.hash) {
|
||||||
VueScrollTo.scrollTo(to.hash, 700);
|
VueScrollTo.scrollTo(to.hash, 700);
|
||||||
return {
|
return {
|
||||||
selector: to.hash,
|
selector: to.hash,
|
||||||
offset: { x: 0, y: 10 },
|
offset: { left: 0, top: 10 },
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (savedPosition) {
|
if (savedPosition) {
|
||||||
return savedPosition;
|
return savedPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
return { x: 0, y: 0 };
|
return { left: 0, top: 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
export const routes = [
|
export const routes = [
|
||||||
|
@ -200,10 +202,9 @@ routes.push({
|
||||||
redirect: { name: RouteName.PAGE_NOT_FOUND },
|
redirect: { name: RouteName.PAGE_NOT_FOUND },
|
||||||
});
|
});
|
||||||
|
|
||||||
const router = new Router({
|
const router = createRouter({
|
||||||
scrollBehavior,
|
scrollBehavior,
|
||||||
mode: "history",
|
history: createWebHistory("/"),
|
||||||
base: "/",
|
|
||||||
routes,
|
routes,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import Oruga from "@oruga-ui/oruga-next";
|
||||||
|
|
||||||
declare module "vue" {
|
declare module "vue" {
|
||||||
import { CompatVue } from "@vue/runtime-dom";
|
import { CompatVue } from "@vue/runtime-dom";
|
||||||
const Vue: CompatVue;
|
const Vue: CompatVue;
|
||||||
|
@ -5,9 +7,24 @@ declare module "vue" {
|
||||||
export * from "@vue/runtime-dom";
|
export * from "@vue/runtime-dom";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// declare module "*.vue" {
|
||||||
|
// import type { DefineComponent } from "vue";
|
||||||
|
// const component: DefineComponent<{}, {}, any>;
|
||||||
|
// export default component;
|
||||||
|
// }
|
||||||
|
|
||||||
|
declare module "@vue/runtime-core" {
|
||||||
|
export interface ComponentCustomProperties {
|
||||||
|
$oruga: typeof Oruga;
|
||||||
|
$notifier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
declare module "*.svg" {
|
declare module "*.svg" {
|
||||||
import Vue, { VueConstructor } from "vue";
|
import Vue, { VueConstructor } from "vue";
|
||||||
|
|
||||||
const content: VueConstructor<Vue>;
|
const content: VueConstructor<Vue>;
|
||||||
export default content;
|
export default content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare module "@oruga-ui/theme-bulma";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Vue from "vue";
|
import Vue from "vue";
|
||||||
import VueI18n from "vue-i18n";
|
import { createI18n } from "vue-i18n";
|
||||||
import { DateFnsPlugin } from "@/plugins/dateFns";
|
import { DateFnsPlugin } from "@/plugins/dateFns";
|
||||||
import en from "../i18n/en_US.json";
|
import en from "../i18n/en_US.json";
|
||||||
import langs from "../i18n/langs.json";
|
import langs from "../i18n/langs.json";
|
||||||
|
@ -39,9 +39,7 @@ export const locale =
|
||||||
|
|
||||||
console.debug("chosen locale", locale);
|
console.debug("chosen locale", locale);
|
||||||
|
|
||||||
Vue.use(VueI18n);
|
export const i18n = createI18n({
|
||||||
|
|
||||||
export const i18n = new VueI18n({
|
|
||||||
locale: DEFAULT_LOCALE, // set locale
|
locale: DEFAULT_LOCALE, // set locale
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
@ -49,6 +47,7 @@ export const i18n = new VueI18n({
|
||||||
fallbackLocale: DEFAULT_LOCALE,
|
fallbackLocale: DEFAULT_LOCALE,
|
||||||
formatFallbackMessages: true,
|
formatFallbackMessages: true,
|
||||||
pluralizationRules,
|
pluralizationRules,
|
||||||
|
legacy: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
console.debug("set VueI18n with default locale", DEFAULT_LOCALE);
|
console.debug("set VueI18n with default locale", DEFAULT_LOCALE);
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
@import "~bulma/sass/utilities/functions.sass";
|
@import "~bulma/sass/utilities/_all";
|
||||||
@import "~bulma/sass/utilities/initial-variables.sass";
|
|
||||||
@import "~bulma/sass/utilities/derived-variables.sass";
|
|
||||||
|
|
||||||
$bleuvert: #1e7d97;
|
$bleuvert: #1e7d97;
|
||||||
$jaune: #ffd599;
|
$jaune: #ffd599;
|
||||||
|
@ -139,3 +137,6 @@ $subtitle-sup-size: 15px;
|
||||||
$breadcrumb-item-color: $primary;
|
$breadcrumb-item-color: $primary;
|
||||||
$checkbox-background-color: #fff;
|
$checkbox-background-color: #fff;
|
||||||
$title-color: $violet-3;
|
$title-color: $violet-3;
|
||||||
|
|
||||||
|
@import "~bulma/bulma";
|
||||||
|
@import "~@oruga-ui/theme-bulma/dist/scss/bulma";
|
||||||
|
|
|
@ -52,13 +52,13 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<b-button
|
<o-button
|
||||||
icon-left="open-in-new"
|
icon-left="open-in-new"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
tag="a"
|
tag="a"
|
||||||
href="https://joinmobilizon.org"
|
href="https://joinmobilizon.org"
|
||||||
>{{ $t("Learn more") }}</b-button
|
>{{ $t("Learn more") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -72,22 +72,22 @@
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column" v-if="config && config.registrationsOpen">
|
<div class="column" v-if="config && config.registrationsOpen">
|
||||||
<h2 class="title">{{ $t("Register on this instance") }}</h2>
|
<h2 class="title">{{ $t("Register on this instance") }}</h2>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-secondary"
|
type="is-secondary"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{ name: RouteName.REGISTER }"
|
:to="{ name: RouteName.REGISTER }"
|
||||||
>{{ $t("Create an account") }}</b-button
|
>{{ $t("Create an account") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<h2 class="title">{{ $t("Find another instance") }}</h2>
|
<h2 class="title">{{ $t("Find another instance") }}</h2>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-secondary"
|
type="is-secondary"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
tag="a"
|
tag="a"
|
||||||
href="https://mobilizon.org"
|
href="https://mobilizon.org"
|
||||||
>{{ $t("Pick an instance") }}</b-button
|
>{{ $t("Pick an instance") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -79,22 +79,22 @@
|
||||||
<tr class="instance-feeds">
|
<tr class="instance-feeds">
|
||||||
<td>{{ $t("Instance feeds") }}</td>
|
<td>{{ $t("Instance feeds") }}</td>
|
||||||
<td v-if="config.instanceFeeds.enabled" class="buttons">
|
<td v-if="config.instanceFeeds.enabled" class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
tag="a"
|
tag="a"
|
||||||
size="is-small"
|
size="is-small"
|
||||||
icon-left="rss"
|
icon-left="rss"
|
||||||
href="/feed/instance/atom"
|
href="/feed/instance/atom"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>{{ $t("RSS/Atom Feed") }}</b-button
|
>{{ $t("RSS/Atom Feed") }}</o-button
|
||||||
>
|
>
|
||||||
|
|
||||||
<b-button
|
<o-button
|
||||||
tag="a"
|
tag="a"
|
||||||
size="is-small"
|
size="is-small"
|
||||||
icon-left="calendar-sync"
|
icon-left="calendar-sync"
|
||||||
href="/feed/instance/ics"
|
href="/feed/instance/ics"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>{{ $t("ICS/WebCal Feed") }}</b-button
|
>{{ $t("ICS/WebCal Feed") }}</o-button
|
||||||
>
|
>
|
||||||
</td>
|
</td>
|
||||||
<td v-else>{{ $t("Disabled") }}</td>
|
<td v-else>{{ $t("Disabled") }}</td>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
:src="identity.avatar.url"
|
:src="identity.avatar.url"
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else
|
v-else
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-circle" />
|
<o-icon v-else size="is-large" icon="account-circle" />
|
||||||
</div>
|
</div>
|
||||||
<div class="media-content" v-if="currentIdentity.name">
|
<div class="media-content" v-if="currentIdentity.name">
|
||||||
<p class="is-4">{{ currentIdentity.name }}</p>
|
<p class="is-4">{{ currentIdentity.name }}</p>
|
||||||
|
@ -30,28 +30,28 @@
|
||||||
<div class="media-content" v-else>
|
<div class="media-content" v-else>
|
||||||
{{ `@${currentIdentity.preferredUsername}` }}
|
{{ `@${currentIdentity.preferredUsername}` }}
|
||||||
</div>
|
</div>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-text"
|
type="is-text"
|
||||||
v-if="identities.length > 1"
|
v-if="identities.length > 1"
|
||||||
@click="activateModal"
|
@click="activateModal"
|
||||||
>
|
>
|
||||||
{{ $t("Change") }}
|
{{ $t("Change") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span v-else-if="currentIdentity" class="block" @click="activateModal">
|
<span v-else-if="currentIdentity" class="block" @click="activateModal">
|
||||||
<figure class="image is-48x48" v-if="currentIdentity.avatar">
|
<figure class="image is-48x48" v-if="currentIdentity.avatar">
|
||||||
<img class="is-rounded" :src="currentIdentity.avatar.url" alt="" />
|
<img class="is-rounded" :src="currentIdentity.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-circle" />
|
<o-icon v-else size="is-large" icon="account-circle" />
|
||||||
</span>
|
</span>
|
||||||
<b-modal
|
<o-modal
|
||||||
v-model="isComponentModalActive"
|
v-model="isComponentModalActive"
|
||||||
has-modal-card
|
has-modal-card
|
||||||
:close-button-aria-label="$t('Close')"
|
:close-button-aria-label="$t('Close')"
|
||||||
>
|
>
|
||||||
<identity-picker v-model="currentIdentity" />
|
<identity-picker v-model="currentIdentity" />
|
||||||
</b-modal>
|
</o-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
|
|
@ -22,25 +22,25 @@
|
||||||
<vue-simple-markdown :source="person.summary"></vue-simple-markdown>
|
<vue-simple-markdown :source="person.summary"></vue-simple-markdown>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<b-dropdown hoverable has-link aria-role="list">
|
<o-dropdown hoverable has-link aria-role="list">
|
||||||
<button class="button is-primary" slot="trigger">
|
<button class="button is-primary" slot="trigger">
|
||||||
{{ $t("Public feeds") }}
|
{{ $t("Public feeds") }}
|
||||||
<b-icon icon="menu-down"></b-icon>
|
<o-icon icon="menu-down"></o-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<b-dropdown-item aria-role="listitem">
|
<o-dropdown-item aria-role="listitem">
|
||||||
<a :href="feedUrls('atom', true)">
|
<a :href="feedUrls('atom', true)">
|
||||||
{{ $t("Public RSS/Atom Feed") }}
|
{{ $t("Public RSS/Atom Feed") }}
|
||||||
</a>
|
</a>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item aria-role="listitem">
|
<o-dropdown-item aria-role="listitem">
|
||||||
<a :href="feedUrls('ics', true)">
|
<a :href="feedUrls('ics', true)">
|
||||||
{{ $t("Public iCal Feed") }}
|
{{ $t("Public iCal Feed") }}
|
||||||
</a>
|
</a>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
|
|
||||||
<b-dropdown
|
<o-dropdown
|
||||||
hoverable
|
hoverable
|
||||||
has-link
|
has-link
|
||||||
aria-role="list"
|
aria-role="list"
|
||||||
|
@ -48,20 +48,20 @@
|
||||||
>
|
>
|
||||||
<button class="button is-info" slot="trigger">
|
<button class="button is-info" slot="trigger">
|
||||||
{{ $t("Private feeds") }}
|
{{ $t("Private feeds") }}
|
||||||
<b-icon icon="menu-down"></b-icon>
|
<o-icon icon="menu-down"></o-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<b-dropdown-item aria-role="listitem">
|
<o-dropdown-item aria-role="listitem">
|
||||||
<a :href="feedUrls('atom', false)">
|
<a :href="feedUrls('atom', false)">
|
||||||
{{ $t("RSS/Atom Feed") }}
|
{{ $t("RSS/Atom Feed") }}
|
||||||
</a>
|
</a>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item aria-role="listitem">
|
<o-dropdown-item aria-role="listitem">
|
||||||
<a :href="feedUrls('ics', false)">
|
<a :href="feedUrls('ics', false)">
|
||||||
{{ $t("iCal Feed") }}
|
{{ $t("iCal Feed") }}
|
||||||
</a>
|
</a>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
<a
|
<a
|
||||||
class="button"
|
class="button"
|
||||||
v-if="currentActor.id === person.id"
|
v-if="currentActor.id === person.id"
|
||||||
|
|
|
@ -16,28 +16,28 @@
|
||||||
{{ $t("Now, create your first profile:") }}
|
{{ $t("Now, create your first profile:") }}
|
||||||
</p>
|
</p>
|
||||||
<form v-if="!validationSent" @submit.prevent="submit">
|
<form v-if="!validationSent" @submit.prevent="submit">
|
||||||
<b-field :label="$t('Displayed nickname')">
|
<o-field :label="$t('Displayed nickname')">
|
||||||
<b-input
|
<o-input
|
||||||
aria-required="true"
|
aria-required="true"
|
||||||
required
|
required
|
||||||
v-model="identity.name"
|
v-model="identity.name"
|
||||||
@input="autoUpdateUsername($event)"
|
@input="autoUpdateUsername($event)"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Username')"
|
:label="$t('Username')"
|
||||||
:type="errors.preferred_username ? 'is-danger' : null"
|
:type="errors.preferred_username ? 'is-danger' : null"
|
||||||
:message="errors.preferred_username"
|
:message="errors.preferred_username"
|
||||||
>
|
>
|
||||||
<b-field
|
<o-field
|
||||||
:message="
|
:message="
|
||||||
$t(
|
$t(
|
||||||
'Only alphanumeric lowercased characters and underscores are supported.'
|
'Only alphanumeric lowercased characters and underscores are supported.'
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
aria-required="true"
|
aria-required="true"
|
||||||
required
|
required
|
||||||
expanded
|
expanded
|
||||||
|
@ -53,8 +53,8 @@
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<span class="button is-static">@{{ host }}</span>
|
<span class="button is-static">@{{ host }}</span>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
</b-field>
|
</o-field>
|
||||||
<p class="description">
|
<p class="description">
|
||||||
{{
|
{{
|
||||||
$t(
|
$t(
|
||||||
|
@ -63,14 +63,14 @@
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<b-field :label="$t('Short bio')">
|
<o-field :label="$t('Short bio')">
|
||||||
<b-input
|
<o-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
maxlength="100"
|
maxlength="100"
|
||||||
rows="2"
|
rows="2"
|
||||||
v-model="identity.summary"
|
v-model="identity.summary"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<p class="content">
|
<p class="content">
|
||||||
{{
|
{{
|
||||||
|
@ -81,18 +81,18 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="control has-text-centered">
|
<p class="control has-text-centered">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
native-type="submit"
|
native-type="submit"
|
||||||
:disabled="sendingValidation"
|
:disabled="sendingValidation"
|
||||||
>{{ $t("Create my profile") }}</b-button
|
>{{ $t("Create my profile") }}</o-button
|
||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div v-if="validationSent && !userAlreadyActivated">
|
<div v-if="validationSent && !userAlreadyActivated">
|
||||||
<b-message type="is-success" :closable="false">
|
<o-message type="is-success" :closable="false">
|
||||||
<h2 class="title">
|
<h2 class="title">
|
||||||
{{
|
{{
|
||||||
$t("Your account is nearly ready, {username}", {
|
$t("Your account is nearly ready, {username}", {
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
</b-message>
|
</o-message>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -231,7 +231,7 @@ export default class Register extends mixins(identityEditionMixin) {
|
||||||
transition: opacity 1s ease;
|
transition: opacity 1s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar-enter,
|
.avatar-enter-from,
|
||||||
.avatar-leave-to {
|
.avatar-leave-to {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,12 +36,12 @@
|
||||||
class="picture-upload"
|
class="picture-upload"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<b-field
|
<o-field
|
||||||
horizontal
|
horizontal
|
||||||
:label="$t('Display name')"
|
:label="$t('Display name')"
|
||||||
label-for="identity-display-name"
|
label-for="identity-display-name"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
aria-required="true"
|
aria-required="true"
|
||||||
required
|
required
|
||||||
v-model="identity.name"
|
v-model="identity.name"
|
||||||
|
@ -49,9 +49,9 @@
|
||||||
id="identity-display-name"
|
id="identity-display-name"
|
||||||
dir="auto"
|
dir="auto"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<b-field
|
<o-field
|
||||||
horizontal
|
horizontal
|
||||||
custom-class="username-field"
|
custom-class="username-field"
|
||||||
expanded
|
expanded
|
||||||
|
@ -59,8 +59,8 @@
|
||||||
label-for="identity-username"
|
label-for="identity-username"
|
||||||
:message="message"
|
:message="message"
|
||||||
>
|
>
|
||||||
<b-field expanded>
|
<o-field expanded>
|
||||||
<b-input
|
<o-input
|
||||||
aria-required="true"
|
aria-required="true"
|
||||||
required
|
required
|
||||||
v-model="identity.preferredUsername"
|
v-model="identity.preferredUsername"
|
||||||
|
@ -74,50 +74,50 @@
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<span class="button is-static">@{{ getInstanceHost }}</span>
|
<span class="button is-static">@{{ getInstanceHost }}</span>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<b-field
|
<o-field
|
||||||
horizontal
|
horizontal
|
||||||
:label="$t('Description')"
|
:label="$t('Description')"
|
||||||
label-for="identity-summary"
|
label-for="identity-summary"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
dir="auto"
|
dir="auto"
|
||||||
aria-required="false"
|
aria-required="false"
|
||||||
v-model="identity.summary"
|
v-model="identity.summary"
|
||||||
id="identity-summary"
|
id="identity-summary"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<b-notification
|
<o-notification
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
has-icon
|
has-icon
|
||||||
aria-close-label="Close notification"
|
aria-close-label="Close notification"
|
||||||
role="alert"
|
role="alert"
|
||||||
:key="error"
|
:key="error"
|
||||||
v-for="error in errors"
|
v-for="error in errors"
|
||||||
>{{ error }}</b-notification
|
>{{ error }}</o-notification
|
||||||
>
|
>
|
||||||
|
|
||||||
<b-field class="submit">
|
<o-field class="submit">
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<button type="button" class="button is-primary" @click="submit()">
|
<button type="button" class="button is-primary" @click="submit()">
|
||||||
{{ $t("Save") }}
|
{{ $t("Save") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<b-field class="delete-identity">
|
<o-field class="delete-identity">
|
||||||
<b-button
|
<o-button
|
||||||
v-if="isUpdate"
|
v-if="isUpdate"
|
||||||
@click="openDeleteIdentityConfirmation()"
|
@click="openDeleteIdentityConfirmation()"
|
||||||
type="is-text"
|
type="is-text"
|
||||||
>
|
>
|
||||||
{{ $t("Delete this identity") }}
|
{{ $t("Delete this identity") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<section v-if="isUpdate">
|
<section v-if="isUpdate">
|
||||||
<div class="setting-title">
|
<div class="setting-title">
|
||||||
|
@ -136,14 +136,14 @@
|
||||||
v-for="feedToken in identity.feedTokens"
|
v-for="feedToken in identity.feedTokens"
|
||||||
:key="feedToken.token"
|
:key="feedToken.token"
|
||||||
>
|
>
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
:label="$t('URL copied to clipboard')"
|
:label="$t('URL copied to clipboard')"
|
||||||
:active="showCopiedTooltip.atom"
|
:active="showCopiedTooltip.atom"
|
||||||
always
|
always
|
||||||
type="is-success"
|
type="is-success"
|
||||||
position="is-left"
|
position="is-left"
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
tag="a"
|
tag="a"
|
||||||
icon-left="rss"
|
icon-left="rss"
|
||||||
@click="
|
@click="
|
||||||
|
@ -151,17 +151,17 @@
|
||||||
"
|
"
|
||||||
:href="tokenToURL(feedToken.token, 'atom')"
|
:href="tokenToURL(feedToken.token, 'atom')"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>{{ $t("RSS/Atom Feed") }}</b-button
|
>{{ $t("RSS/Atom Feed") }}</o-button
|
||||||
>
|
>
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
:label="$t('URL copied to clipboard')"
|
:label="$t('URL copied to clipboard')"
|
||||||
:active="showCopiedTooltip.ics"
|
:active="showCopiedTooltip.ics"
|
||||||
always
|
always
|
||||||
type="is-success"
|
type="is-success"
|
||||||
position="is-left"
|
position="is-left"
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
tag="a"
|
tag="a"
|
||||||
@click="
|
@click="
|
||||||
(e) => copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics')
|
(e) => copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics')
|
||||||
|
@ -169,23 +169,23 @@
|
||||||
icon-left="calendar-sync"
|
icon-left="calendar-sync"
|
||||||
:href="tokenToURL(feedToken.token, 'ics')"
|
:href="tokenToURL(feedToken.token, 'ics')"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>{{ $t("ICS/WebCal Feed") }}</b-button
|
>{{ $t("ICS/WebCal Feed") }}</o-button
|
||||||
>
|
>
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
<b-button
|
<o-button
|
||||||
icon-left="refresh"
|
icon-left="refresh"
|
||||||
type="is-text"
|
type="is-text"
|
||||||
@click="openRegenerateFeedTokensConfirmation"
|
@click="openRegenerateFeedTokensConfirmation"
|
||||||
>{{ $t("Regenerate new links") }}</b-button
|
>{{ $t("Regenerate new links") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<b-button
|
<o-button
|
||||||
icon-left="refresh"
|
icon-left="refresh"
|
||||||
type="is-text"
|
type="is-text"
|
||||||
@click="generateFeedTokens"
|
@click="generateFeedTokens"
|
||||||
>{{ $t("Create new links") }}</b-button
|
>{{ $t("Create new links") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -64,24 +64,24 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
@click="confirmSuspendProfile"
|
@click="confirmSuspendProfile"
|
||||||
v-if="!group.suspended"
|
v-if="!group.suspended"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Suspend") }}</b-button
|
>{{ $t("Suspend") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
@click="unsuspendProfile"
|
@click="unsuspendProfile"
|
||||||
v-if="group.suspended"
|
v-if="group.suspended"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Unsuspend") }}</b-button
|
>{{ $t("Unsuspend") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
@click="refreshProfile"
|
@click="refreshProfile"
|
||||||
v-if="group.domain"
|
v-if="group.domain"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
outlined
|
outlined
|
||||||
>{{ $t("Refresh profile") }}</b-button
|
>{{ $t("Refresh profile") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<section>
|
<section>
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
</h2>
|
</h2>
|
||||||
<b-table
|
<o-table
|
||||||
:data="group.members.elements"
|
:data="group.members.elements"
|
||||||
:loading="$apollo.queries.group.loading"
|
:loading="$apollo.queries.group.loading"
|
||||||
paginated
|
paginated
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
:per-page="EVENTS_PER_PAGE"
|
:per-page="EVENTS_PER_PAGE"
|
||||||
@page-change="onMembersPageChange"
|
@page-change="onMembersPageChange"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="actor.preferredUsername"
|
field="actor.preferredUsername"
|
||||||
:label="$t('Member')"
|
:label="$t('Member')"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else
|
v-else
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
@ -143,55 +143,55 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="role" :label="$t('Role')" v-slot="props">
|
<o-table-column field="role" :label="$t('Role')" v-slot="props">
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
v-if="props.row.role === MemberRole.ADMINISTRATOR"
|
v-if="props.row.role === MemberRole.ADMINISTRATOR"
|
||||||
>
|
>
|
||||||
{{ $t("Administrator") }}
|
{{ $t("Administrator") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
v-else-if="props.row.role === MemberRole.MODERATOR"
|
v-else-if="props.row.role === MemberRole.MODERATOR"
|
||||||
>
|
>
|
||||||
{{ $t("Moderator") }}
|
{{ $t("Moderator") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag v-else-if="props.row.role === MemberRole.MEMBER">
|
<o-tag v-else-if="props.row.role === MemberRole.MEMBER">
|
||||||
{{ $t("Member") }}
|
{{ $t("Member") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
v-else-if="props.row.role === MemberRole.NOT_APPROVED"
|
v-else-if="props.row.role === MemberRole.NOT_APPROVED"
|
||||||
>
|
>
|
||||||
{{ $t("Not approved") }}
|
{{ $t("Not approved") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-else-if="props.row.role === MemberRole.REJECTED"
|
v-else-if="props.row.role === MemberRole.REJECTED"
|
||||||
>
|
>
|
||||||
{{ $t("Rejected") }}
|
{{ $t("Rejected") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-else-if="props.row.role === MemberRole.INVITED"
|
v-else-if="props.row.role === MemberRole.INVITED"
|
||||||
>
|
>
|
||||||
{{ $t("Invited") }}
|
{{ $t("Invited") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
<o-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
||||||
<span class="has-text-centered">
|
<span class="has-text-centered">
|
||||||
{{ props.row.insertedAt | formatDateString }}<br />{{
|
{{ props.row.insertedAt | formatDateString }}<br />{{
|
||||||
props.row.insertedAt | formatTimeString
|
props.row.insertedAt | formatTimeString
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="account-group" :inline="true">
|
<empty-content icon="account-group" :inline="true">
|
||||||
{{ $t("No members found") }}
|
{{ $t("No members found") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h2 class="subtitle">
|
<h2 class="subtitle">
|
||||||
|
@ -201,7 +201,7 @@
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
</h2>
|
</h2>
|
||||||
<b-table
|
<o-table
|
||||||
:data="group.organizedEvents.elements"
|
:data="group.organizedEvents.elements"
|
||||||
:loading="$apollo.queries.group.loading"
|
:loading="$apollo.queries.group.loading"
|
||||||
paginated
|
paginated
|
||||||
|
@ -215,29 +215,29 @@
|
||||||
:per-page="EVENTS_PER_PAGE"
|
:per-page="EVENTS_PER_PAGE"
|
||||||
@page-change="onOrganizedEventsPageChange"
|
@page-change="onOrganizedEventsPageChange"
|
||||||
>
|
>
|
||||||
<b-table-column field="title" :label="$t('Title')" v-slot="props">
|
<o-table-column field="title" :label="$t('Title')" v-slot="props">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: RouteName.EVENT, params: { uuid: props.row.uuid } }"
|
:to="{ name: RouteName.EVENT, params: { uuid: props.row.uuid } }"
|
||||||
>
|
>
|
||||||
{{ props.row.title }}
|
{{ props.row.title }}
|
||||||
<b-tag type="is-info" v-if="props.row.draft">{{
|
<o-tag type="is-info" v-if="props.row.draft">{{
|
||||||
$t("Draft")
|
$t("Draft")
|
||||||
}}</b-tag>
|
}}</o-tag>
|
||||||
</router-link>
|
</router-link>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="beginsOn"
|
field="beginsOn"
|
||||||
:label="$t('Begins on')"
|
:label="$t('Begins on')"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
>
|
>
|
||||||
{{ props.row.beginsOn | formatDateTimeString }}
|
{{ props.row.beginsOn | formatDateTimeString }}
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="account-group" :inline="true">
|
<empty-content icon="account-group" :inline="true">
|
||||||
{{ $t("No organized events found") }}
|
{{ $t("No organized events found") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h2 class="subtitle">
|
<h2 class="subtitle">
|
||||||
|
@ -247,7 +247,7 @@
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
</h2>
|
</h2>
|
||||||
<b-table
|
<o-table
|
||||||
:data="group.posts.elements"
|
:data="group.posts.elements"
|
||||||
:loading="$apollo.queries.group.loading"
|
:loading="$apollo.queries.group.loading"
|
||||||
paginated
|
paginated
|
||||||
|
@ -261,29 +261,29 @@
|
||||||
:per-page="POSTS_PER_PAGE"
|
:per-page="POSTS_PER_PAGE"
|
||||||
@page-change="onPostsPageChange"
|
@page-change="onPostsPageChange"
|
||||||
>
|
>
|
||||||
<b-table-column field="title" :label="$t('Title')" v-slot="props">
|
<o-table-column field="title" :label="$t('Title')" v-slot="props">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: RouteName.POST, params: { slug: props.row.slug } }"
|
:to="{ name: RouteName.POST, params: { slug: props.row.slug } }"
|
||||||
>
|
>
|
||||||
{{ props.row.title }}
|
{{ props.row.title }}
|
||||||
<b-tag type="is-info" v-if="props.row.draft">{{
|
<o-tag type="is-info" v-if="props.row.draft">{{
|
||||||
$t("Draft")
|
$t("Draft")
|
||||||
}}</b-tag>
|
}}</o-tag>
|
||||||
</router-link>
|
</router-link>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="publishAt"
|
field="publishAt"
|
||||||
:label="$t('Publication date')"
|
:label="$t('Publication date')"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
>
|
>
|
||||||
{{ props.row.publishAt | formatDateTimeString }}
|
{{ props.row.publishAt | formatDateTimeString }}
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="bullhorn" :inline="true">
|
<empty-content icon="bullhorn" :inline="true">
|
||||||
{{ $t("No posts found") }}
|
{{ $t("No posts found") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -48,17 +48,17 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
@click="suspendProfile"
|
@click="suspendProfile"
|
||||||
v-if="person.domain && !person.suspended"
|
v-if="person.domain && !person.suspended"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Suspend") }}</b-button
|
>{{ $t("Suspend") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
@click="unsuspendProfile"
|
@click="unsuspendProfile"
|
||||||
v-if="person.domain && person.suspended"
|
v-if="person.domain && person.suspended"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Unsuspend") }}</b-button
|
>{{ $t("Unsuspend") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<section>
|
<section>
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
</h2>
|
</h2>
|
||||||
<b-table
|
<o-table
|
||||||
:data="person.organizedEvents.elements"
|
:data="person.organizedEvents.elements"
|
||||||
:loading="$apollo.queries.person.loading"
|
:loading="$apollo.queries.person.loading"
|
||||||
paginated
|
paginated
|
||||||
|
@ -83,26 +83,26 @@
|
||||||
:per-page="EVENTS_PER_PAGE"
|
:per-page="EVENTS_PER_PAGE"
|
||||||
@page-change="onOrganizedEventsPageChange"
|
@page-change="onOrganizedEventsPageChange"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="beginsOn"
|
field="beginsOn"
|
||||||
:label="$t('Begins on')"
|
:label="$t('Begins on')"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
>
|
>
|
||||||
{{ props.row.beginsOn | formatDateTimeString }}
|
{{ props.row.beginsOn | formatDateTimeString }}
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="title" :label="$t('Title')" v-slot="props">
|
<o-table-column field="title" :label="$t('Title')" v-slot="props">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: RouteName.EVENT, params: { uuid: props.row.uuid } }"
|
:to="{ name: RouteName.EVENT, params: { uuid: props.row.uuid } }"
|
||||||
>
|
>
|
||||||
{{ props.row.title }}
|
{{ props.row.title }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="account-group" :inline="true">
|
<empty-content icon="account-group" :inline="true">
|
||||||
{{ $t("No organized events listed") }}
|
{{ $t("No organized events listed") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h2 class="subtitle">
|
<h2 class="subtitle">
|
||||||
|
@ -112,7 +112,7 @@
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
</h2>
|
</h2>
|
||||||
<b-table
|
<o-table
|
||||||
:data="
|
:data="
|
||||||
person.participations.elements.map(
|
person.participations.elements.map(
|
||||||
(participation) => participation.event
|
(participation) => participation.event
|
||||||
|
@ -130,26 +130,26 @@
|
||||||
:per-page="EVENTS_PER_PAGE"
|
:per-page="EVENTS_PER_PAGE"
|
||||||
@page-change="onParticipationsPageChange"
|
@page-change="onParticipationsPageChange"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="beginsOn"
|
field="beginsOn"
|
||||||
:label="$t('Begins on')"
|
:label="$t('Begins on')"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
>
|
>
|
||||||
{{ props.row.beginsOn | formatDateTimeString }}
|
{{ props.row.beginsOn | formatDateTimeString }}
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="title" :label="$t('Title')" v-slot="props">
|
<o-table-column field="title" :label="$t('Title')" v-slot="props">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: RouteName.EVENT, params: { uuid: props.row.uuid } }"
|
:to="{ name: RouteName.EVENT, params: { uuid: props.row.uuid } }"
|
||||||
>
|
>
|
||||||
{{ props.row.title }}
|
{{ props.row.title }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="account-group" :inline="true">
|
<empty-content icon="account-group" :inline="true">
|
||||||
{{ $t("No participations listed") }}
|
{{ $t("No participations listed") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h2 class="subtitle">
|
<h2 class="subtitle">
|
||||||
|
@ -159,7 +159,7 @@
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
</h2>
|
</h2>
|
||||||
<b-table
|
<o-table
|
||||||
:data="person.memberships.elements"
|
:data="person.memberships.elements"
|
||||||
:loading="$apollo.loading"
|
:loading="$apollo.loading"
|
||||||
paginated
|
paginated
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
:per-page="EVENTS_PER_PAGE"
|
:per-page="EVENTS_PER_PAGE"
|
||||||
@page-change="onMembershipsPageChange"
|
@page-change="onMembershipsPageChange"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="parent.preferredUsername"
|
field="parent.preferredUsername"
|
||||||
:label="$t('Group')"
|
:label="$t('Group')"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
|
@ -189,7 +189,7 @@
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else
|
v-else
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
@ -207,55 +207,55 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="role" :label="$t('Role')" v-slot="props">
|
<o-table-column field="role" :label="$t('Role')" v-slot="props">
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
v-if="props.row.role === MemberRole.ADMINISTRATOR"
|
v-if="props.row.role === MemberRole.ADMINISTRATOR"
|
||||||
>
|
>
|
||||||
{{ $t("Administrator") }}
|
{{ $t("Administrator") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
v-else-if="props.row.role === MemberRole.MODERATOR"
|
v-else-if="props.row.role === MemberRole.MODERATOR"
|
||||||
>
|
>
|
||||||
{{ $t("Moderator") }}
|
{{ $t("Moderator") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag v-else-if="props.row.role === MemberRole.MEMBER">
|
<o-tag v-else-if="props.row.role === MemberRole.MEMBER">
|
||||||
{{ $t("Member") }}
|
{{ $t("Member") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
v-else-if="props.row.role === MemberRole.NOT_APPROVED"
|
v-else-if="props.row.role === MemberRole.NOT_APPROVED"
|
||||||
>
|
>
|
||||||
{{ $t("Not approved") }}
|
{{ $t("Not approved") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-else-if="props.row.role === MemberRole.REJECTED"
|
v-else-if="props.row.role === MemberRole.REJECTED"
|
||||||
>
|
>
|
||||||
{{ $t("Rejected") }}
|
{{ $t("Rejected") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-else-if="props.row.role === MemberRole.INVITED"
|
v-else-if="props.row.role === MemberRole.INVITED"
|
||||||
>
|
>
|
||||||
{{ $t("Invited") }}
|
{{ $t("Invited") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
<o-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
||||||
<span class="has-text-centered">
|
<span class="has-text-centered">
|
||||||
{{ props.row.insertedAt | formatDateString }}<br />{{
|
{{ props.row.insertedAt | formatDateString }}<br />{{
|
||||||
props.row.insertedAt | formatTimeString
|
props.row.insertedAt | formatTimeString
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="account-group" :inline="true">
|
<empty-content icon="account-group" :inline="true">
|
||||||
{{ $t("No memberships found") }}
|
{{ $t("No memberships found") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -61,11 +61,11 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
@click="deleteAccount"
|
@click="deleteAccount"
|
||||||
v-if="!user.disabled"
|
v-if="!user.disabled"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Suspend") }}</b-button
|
>{{ $t("Suspend") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -34,10 +34,10 @@
|
||||||
:to="{ name: RouteName.RELAY_FOLLOWINGS }"
|
:to="{ name: RouteName.RELAY_FOLLOWINGS }"
|
||||||
>
|
>
|
||||||
<a>
|
<a>
|
||||||
<b-icon icon="inbox-arrow-down"></b-icon>
|
<o-icon icon="inbox-arrow-down"></o-icon>
|
||||||
<span>
|
<span>
|
||||||
{{ $t("Followings") }}
|
{{ $t("Followings") }}
|
||||||
<b-tag rounded>{{ relayFollowings.total }}</b-tag>
|
<o-tag rounded>{{ relayFollowings.total }}</o-tag>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
@ -47,10 +47,10 @@
|
||||||
:to="{ name: RouteName.RELAY_FOLLOWERS }"
|
:to="{ name: RouteName.RELAY_FOLLOWERS }"
|
||||||
>
|
>
|
||||||
<a>
|
<a>
|
||||||
<b-icon icon="inbox-arrow-up"></b-icon>
|
<o-icon icon="inbox-arrow-up"></o-icon>
|
||||||
<span>
|
<span>
|
||||||
{{ $t("Followers") }}
|
{{ $t("Followers") }}
|
||||||
<b-tag rounded>{{ relayFollowers.total }}</b-tag>
|
<o-tag rounded>{{ relayFollowers.total }}</o-tag>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|
|
@ -22,9 +22,9 @@
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="groups">
|
<div v-if="groups">
|
||||||
<b-switch v-model="local">{{ $t("Local") }}</b-switch>
|
<o-switch v-model="local">{{ $t("Local") }}</o-switch>
|
||||||
<b-switch v-model="suspended">{{ $t("Suspended") }}</b-switch>
|
<o-switch v-model="suspended">{{ $t("Suspended") }}</o-switch>
|
||||||
<b-table
|
<o-table
|
||||||
:data="groups.elements"
|
:data="groups.elements"
|
||||||
:loading="$apollo.queries.groups.loading"
|
:loading="$apollo.queries.groups.loading"
|
||||||
paginated
|
paginated
|
||||||
|
@ -41,13 +41,13 @@
|
||||||
@page-change="onPageChange"
|
@page-change="onPageChange"
|
||||||
@filters-change="onFiltersChange"
|
@filters-change="onFiltersChange"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="preferredUsername"
|
field="preferredUsername"
|
||||||
:label="$t('Username')"
|
:label="$t('Username')"
|
||||||
searchable
|
searchable
|
||||||
>
|
>
|
||||||
<template #searchable="props">
|
<template #searchable="props">
|
||||||
<b-input
|
<o-input
|
||||||
:aria-label="$t('Filter')"
|
:aria-label="$t('Filter')"
|
||||||
v-model="props.filters.preferredUsername"
|
v-model="props.filters.preferredUsername"
|
||||||
:placeholder="$t('Filter')"
|
:placeholder="$t('Filter')"
|
||||||
|
@ -81,11 +81,11 @@
|
||||||
</article>
|
</article>
|
||||||
</router-link>
|
</router-link>
|
||||||
</template>
|
</template>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
|
|
||||||
<b-table-column field="domain" :label="$t('Domain')" searchable>
|
<o-table-column field="domain" :label="$t('Domain')" searchable>
|
||||||
<template #searchable="props">
|
<template #searchable="props">
|
||||||
<b-input
|
<o-input
|
||||||
:aria-label="$t('Filter')"
|
:aria-label="$t('Filter')"
|
||||||
v-model="props.filters.domain"
|
v-model="props.filters.domain"
|
||||||
:placeholder="$t('Filter')"
|
:placeholder="$t('Filter')"
|
||||||
|
@ -95,13 +95,13 @@
|
||||||
<template v-slot:default="props">
|
<template v-slot:default="props">
|
||||||
{{ props.row.domain }}
|
{{ props.row.domain }}
|
||||||
</template>
|
</template>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="account-group" :inline="true">
|
<empty-content icon="account-group" :inline="true">
|
||||||
{{ $t("No group matches the filters") }}
|
{{ $t("No group matches the filters") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -15,9 +15,9 @@
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<div v-if="persons">
|
<div v-if="persons">
|
||||||
<b-switch v-model="local">{{ $t("Local") }}</b-switch>
|
<o-switch v-model="local">{{ $t("Local") }}</o-switch>
|
||||||
<b-switch v-model="suspended">{{ $t("Suspended") }}</b-switch>
|
<o-switch v-model="suspended">{{ $t("Suspended") }}</o-switch>
|
||||||
<b-table
|
<o-table
|
||||||
:data="persons.elements"
|
:data="persons.elements"
|
||||||
:loading="$apollo.queries.persons.loading"
|
:loading="$apollo.queries.persons.loading"
|
||||||
paginated
|
paginated
|
||||||
|
@ -34,13 +34,13 @@
|
||||||
@page-change="onPageChange"
|
@page-change="onPageChange"
|
||||||
@filters-change="onFiltersChange"
|
@filters-change="onFiltersChange"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="preferredUsername"
|
field="preferredUsername"
|
||||||
:label="$t('Username')"
|
:label="$t('Username')"
|
||||||
searchable
|
searchable
|
||||||
>
|
>
|
||||||
<template #searchable="props">
|
<template #searchable="props">
|
||||||
<b-input
|
<o-input
|
||||||
v-model="props.filters.preferredUsername"
|
v-model="props.filters.preferredUsername"
|
||||||
:aria-label="$t('Filter')"
|
:aria-label="$t('Filter')"
|
||||||
:placeholder="$t('Filter')"
|
:placeholder="$t('Filter')"
|
||||||
|
@ -74,11 +74,11 @@
|
||||||
</article>
|
</article>
|
||||||
</router-link>
|
</router-link>
|
||||||
</template>
|
</template>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
|
|
||||||
<b-table-column field="domain" :label="$t('Domain')" searchable>
|
<o-table-column field="domain" :label="$t('Domain')" searchable>
|
||||||
<template #searchable="props">
|
<template #searchable="props">
|
||||||
<b-input
|
<o-input
|
||||||
v-model="props.filters.domain"
|
v-model="props.filters.domain"
|
||||||
:aria-label="$t('Filter')"
|
:aria-label="$t('Filter')"
|
||||||
:placeholder="$t('Filter')"
|
:placeholder="$t('Filter')"
|
||||||
|
@ -88,13 +88,13 @@
|
||||||
<template v-slot:default="props">
|
<template v-slot:default="props">
|
||||||
{{ props.row.domain }}
|
{{ props.row.domain }}
|
||||||
</template>
|
</template>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="account" :inline="true">
|
<empty-content icon="account" :inline="true">
|
||||||
{{ $t("No profile matches the filters") }}
|
{{ $t("No profile matches the filters") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
</nav>
|
</nav>
|
||||||
<section v-if="settingsToWrite">
|
<section v-if="settingsToWrite">
|
||||||
<form @submit.prevent="updateSettings">
|
<form @submit.prevent="updateSettings">
|
||||||
<b-field :label="$t('Instance Name')" label-for="instance-name">
|
<o-field :label="$t('Instance Name')" label-for="instance-name">
|
||||||
<b-input v-model="settingsToWrite.instanceName" id="instance-name" />
|
<o-input v-model="settingsToWrite.instanceName" id="instance-name" />
|
||||||
</b-field>
|
</o-field>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label has-help" for="instance-description">{{
|
<label class="label has-help" for="instance-description">{{
|
||||||
$t("Instance Short Description")
|
$t("Instance Short Description")
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</small>
|
</small>
|
||||||
<b-input
|
<o-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
v-model="settingsToWrite.instanceDescription"
|
v-model="settingsToWrite.instanceDescription"
|
||||||
rows="2"
|
rows="2"
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</small>
|
</small>
|
||||||
<b-input
|
<o-input
|
||||||
v-model="settingsToWrite.instanceSlogan"
|
v-model="settingsToWrite.instanceSlogan"
|
||||||
:placeholder="$t('Gather ⋅ Organize ⋅ Mobilize')"
|
:placeholder="$t('Gather ⋅ Organize ⋅ Mobilize')"
|
||||||
id="instance-slogan"
|
id="instance-slogan"
|
||||||
|
@ -61,16 +61,16 @@
|
||||||
<small>
|
<small>
|
||||||
{{ $t("Can be an email or a link, or just plain text.") }}
|
{{ $t("Can be an email or a link, or just plain text.") }}
|
||||||
</small>
|
</small>
|
||||||
<b-input v-model="settingsToWrite.contact" id="instance-contact" />
|
<o-input v-model="settingsToWrite.contact" id="instance-contact" />
|
||||||
</div>
|
</div>
|
||||||
<b-field :label="$t('Allow registrations')">
|
<o-field :label="$t('Allow registrations')">
|
||||||
<b-switch v-model="settingsToWrite.registrationsOpen">
|
<o-switch v-model="settingsToWrite.registrationsOpen">
|
||||||
<p class="content" v-if="settingsToWrite.registrationsOpen">
|
<p class="content" v-if="settingsToWrite.registrationsOpen">
|
||||||
{{ $t("Registration is allowed, anyone can register.") }}
|
{{ $t("Registration is allowed, anyone can register.") }}
|
||||||
</p>
|
</p>
|
||||||
<p class="content" v-else>{{ $t("Registration is closed.") }}</p>
|
<p class="content" v-else>{{ $t("Registration is closed.") }}</p>
|
||||||
</b-switch>
|
</o-switch>
|
||||||
</b-field>
|
</o-field>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label has-help" for="instance-languages">{{
|
<label class="label has-help" for="instance-languages">{{
|
||||||
$t("Instance languages")
|
$t("Instance languages")
|
||||||
|
@ -78,7 +78,7 @@
|
||||||
<small>
|
<small>
|
||||||
{{ $t("Main languages you/your moderators speak") }}
|
{{ $t("Main languages you/your moderators speak") }}
|
||||||
</small>
|
</small>
|
||||||
<b-taginput
|
<o-taginput
|
||||||
v-model="instanceLanguages"
|
v-model="instanceLanguages"
|
||||||
:data="filteredLanguages"
|
:data="filteredLanguages"
|
||||||
autocomplete
|
autocomplete
|
||||||
|
@ -90,7 +90,7 @@
|
||||||
id="instance-languages"
|
id="instance-languages"
|
||||||
>
|
>
|
||||||
<template slot="empty">{{ $t("No languages found") }}</template>
|
<template slot="empty">{{ $t("No languages found") }}</template>
|
||||||
</b-taginput>
|
</o-taginput>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label has-help" for="instance-long-description">{{
|
<label class="label has-help" for="instance-long-description">{{
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</small>
|
</small>
|
||||||
<b-input
|
<o-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
v-model="settingsToWrite.instanceLongDescription"
|
v-model="settingsToWrite.instanceLongDescription"
|
||||||
rows="4"
|
rows="4"
|
||||||
|
@ -121,43 +121,43 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</small>
|
</small>
|
||||||
<b-input
|
<o-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
v-model="settingsToWrite.instanceRules"
|
v-model="settingsToWrite.instanceRules"
|
||||||
id="instance-rules"
|
id="instance-rules"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<b-field :label="$t('Instance Terms Source')">
|
<o-field :label="$t('Instance Terms Source')">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column is-one-third-desktop">
|
<div class="column is-one-third-desktop">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>
|
<legend>
|
||||||
{{ $t("Choose the source of the instance's Terms") }}
|
{{ $t("Choose the source of the instance's Terms") }}
|
||||||
</legend>
|
</legend>
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="settingsToWrite.instanceTermsType"
|
v-model="settingsToWrite.instanceTermsType"
|
||||||
name="instanceTermsType"
|
name="instanceTermsType"
|
||||||
:native-value="InstanceTermsType.DEFAULT"
|
:native-value="InstanceTermsType.DEFAULT"
|
||||||
>{{ $t("Default Mobilizon terms") }}</b-radio
|
>{{ $t("Default Mobilizon terms") }}</o-radio
|
||||||
>
|
>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="settingsToWrite.instanceTermsType"
|
v-model="settingsToWrite.instanceTermsType"
|
||||||
name="instanceTermsType"
|
name="instanceTermsType"
|
||||||
:native-value="InstanceTermsType.URL"
|
:native-value="InstanceTermsType.URL"
|
||||||
>{{ $t("Custom URL") }}</b-radio
|
>{{ $t("Custom URL") }}</o-radio
|
||||||
>
|
>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="settingsToWrite.instanceTermsType"
|
v-model="settingsToWrite.instanceTermsType"
|
||||||
name="instanceTermsType"
|
name="instanceTermsType"
|
||||||
:native-value="InstanceTermsType.CUSTOM"
|
:native-value="InstanceTermsType.CUSTOM"
|
||||||
>{{ $t("Custom text") }}</b-radio
|
>{{ $t("Custom text") }}</o-radio
|
||||||
>
|
>
|
||||||
</b-field>
|
</o-field>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
|
@ -223,60 +223,60 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Instance Terms URL')"
|
:label="$t('Instance Terms URL')"
|
||||||
label-for="instanceTermsUrl"
|
label-for="instanceTermsUrl"
|
||||||
v-if="settingsToWrite.instanceTermsType === InstanceTermsType.URL"
|
v-if="settingsToWrite.instanceTermsType === InstanceTermsType.URL"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
type="URL"
|
type="URL"
|
||||||
v-model="settingsToWrite.instanceTermsUrl"
|
v-model="settingsToWrite.instanceTermsUrl"
|
||||||
id="instanceTermsUrl"
|
id="instanceTermsUrl"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Instance Terms')"
|
:label="$t('Instance Terms')"
|
||||||
label-for="instanceTerms"
|
label-for="instanceTerms"
|
||||||
v-if="settingsToWrite.instanceTermsType === InstanceTermsType.CUSTOM"
|
v-if="settingsToWrite.instanceTermsType === InstanceTermsType.CUSTOM"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
v-model="settingsToWrite.instanceTerms"
|
v-model="settingsToWrite.instanceTerms"
|
||||||
id="instanceTerms"
|
id="instanceTerms"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field :label="$t('Instance Privacy Policy Source')">
|
<o-field :label="$t('Instance Privacy Policy Source')">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column is-one-third-desktop">
|
<div class="column is-one-third-desktop">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>
|
<legend>
|
||||||
{{ $t("Choose the source of the instance's Privacy Policy") }}
|
{{ $t("Choose the source of the instance's Privacy Policy") }}
|
||||||
</legend>
|
</legend>
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="settingsToWrite.instancePrivacyPolicyType"
|
v-model="settingsToWrite.instancePrivacyPolicyType"
|
||||||
name="instancePrivacyType"
|
name="instancePrivacyType"
|
||||||
:native-value="InstancePrivacyType.DEFAULT"
|
:native-value="InstancePrivacyType.DEFAULT"
|
||||||
>{{ $t("Default Mobilizon privacy policy") }}</b-radio
|
>{{ $t("Default Mobilizon privacy policy") }}</o-radio
|
||||||
>
|
>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="settingsToWrite.instancePrivacyPolicyType"
|
v-model="settingsToWrite.instancePrivacyPolicyType"
|
||||||
name="instancePrivacyType"
|
name="instancePrivacyType"
|
||||||
:native-value="InstancePrivacyType.URL"
|
:native-value="InstancePrivacyType.URL"
|
||||||
>{{ $t("Custom URL") }}</b-radio
|
>{{ $t("Custom URL") }}</o-radio
|
||||||
>
|
>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="settingsToWrite.instancePrivacyPolicyType"
|
v-model="settingsToWrite.instancePrivacyPolicyType"
|
||||||
name="instancePrivacyType"
|
name="instancePrivacyType"
|
||||||
:native-value="InstancePrivacyType.CUSTOM"
|
:native-value="InstancePrivacyType.CUSTOM"
|
||||||
>{{ $t("Custom text") }}</b-radio
|
>{{ $t("Custom text") }}</o-radio
|
||||||
>
|
>
|
||||||
</b-field>
|
</o-field>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
|
@ -339,8 +339,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Instance Privacy Policy URL')"
|
:label="$t('Instance Privacy Policy URL')"
|
||||||
label-for="instancePrivacyPolicyUrl"
|
label-for="instancePrivacyPolicyUrl"
|
||||||
v-if="
|
v-if="
|
||||||
|
@ -348,13 +348,13 @@
|
||||||
InstancePrivacyType.URL
|
InstancePrivacyType.URL
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
type="URL"
|
type="URL"
|
||||||
v-model="settingsToWrite.instancePrivacyPolicyUrl"
|
v-model="settingsToWrite.instancePrivacyPolicyUrl"
|
||||||
id="instancePrivacyPolicyUrl"
|
id="instancePrivacyPolicyUrl"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Instance Privacy Policy')"
|
:label="$t('Instance Privacy Policy')"
|
||||||
label-for="instancePrivacyPolicy"
|
label-for="instancePrivacyPolicy"
|
||||||
v-if="
|
v-if="
|
||||||
|
@ -362,15 +362,15 @@
|
||||||
InstancePrivacyType.CUSTOM
|
InstancePrivacyType.CUSTOM
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
v-model="settingsToWrite.instancePrivacyPolicy"
|
v-model="settingsToWrite.instancePrivacyPolicy"
|
||||||
id="instancePrivacyPolicy"
|
id="instancePrivacyPolicy"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-button native-type="submit" type="is-primary">{{
|
<o-button native-type="submit" type="is-primary">{{
|
||||||
$t("Save")
|
$t("Save")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<div v-if="users">
|
<div v-if="users">
|
||||||
<b-table
|
<o-table
|
||||||
:data="users.elements"
|
:data="users.elements"
|
||||||
:loading="$apollo.queries.users.loading"
|
:loading="$apollo.queries.users.loading"
|
||||||
paginated
|
paginated
|
||||||
|
@ -34,12 +34,12 @@
|
||||||
@page-change="onPageChange"
|
@page-change="onPageChange"
|
||||||
@filters-change="onFiltersChange"
|
@filters-change="onFiltersChange"
|
||||||
>
|
>
|
||||||
<b-table-column field="id" width="40" numeric v-slot="props">
|
<o-table-column field="id" width="40" numeric v-slot="props">
|
||||||
{{ props.row.id }}
|
{{ props.row.id }}
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="email" :label="$t('Email')" searchable>
|
<o-table-column field="email" :label="$t('Email')" searchable>
|
||||||
<template #searchable="props">
|
<template #searchable="props">
|
||||||
<b-input
|
<o-input
|
||||||
v-model="props.filters.email"
|
v-model="props.filters.email"
|
||||||
:aria-label="$t('Filter')"
|
:aria-label="$t('Filter')"
|
||||||
:placeholder="$t('Filter')"
|
:placeholder="$t('Filter')"
|
||||||
|
@ -58,8 +58,8 @@
|
||||||
{{ props.row.email }}
|
{{ props.row.email }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</template>
|
</template>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="confirmedAt"
|
field="confirmedAt"
|
||||||
:label="$t('Confirmed at')"
|
:label="$t('Confirmed at')"
|
||||||
:centered="true"
|
:centered="true"
|
||||||
|
@ -71,15 +71,15 @@
|
||||||
<template v-else>
|
<template v-else>
|
||||||
{{ $t("Not confirmed") }}
|
{{ $t("Not confirmed") }}
|
||||||
</template>
|
</template>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="locale"
|
field="locale"
|
||||||
:label="$t('Language')"
|
:label="$t('Language')"
|
||||||
:centered="true"
|
:centered="true"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
>
|
>
|
||||||
{{ getLanguageNameForCode(props.row.locale) }}
|
{{ getLanguageNameForCode(props.row.locale) }}
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
|
|
||||||
<template #detail="props">
|
<template #detail="props">
|
||||||
<router-link
|
<router-link
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
<p class="image is-32x32" v-if="actor.avatar">
|
<p class="image is-32x32" v-if="actor.avatar">
|
||||||
<img :src="actor.avatar.url" />
|
<img :src="actor.avatar.url" />
|
||||||
</p>
|
</p>
|
||||||
<b-icon v-else size="is-medium" icon="account-circle" />
|
<o-icon v-else size="is-medium" icon="account-circle" />
|
||||||
</figure>
|
</figure>
|
||||||
<div class="media-content">
|
<div class="media-content">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
</article>
|
</article>
|
||||||
</router-link>
|
</router-link>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -35,28 +35,28 @@
|
||||||
>
|
>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<b-skeleton v-else-if="$apollo.loading" :animated="animated"></b-skeleton>
|
<o-skeleton v-else-if="$apollo.loading" :animated="animated"></o-skeleton>
|
||||||
</nav>
|
</nav>
|
||||||
<h1 class="title">{{ $t("Create a discussion") }}</h1>
|
<h1 class="title">{{ $t("Create a discussion") }}</h1>
|
||||||
|
|
||||||
<form @submit.prevent="createDiscussion">
|
<form @submit.prevent="createDiscussion">
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Title')"
|
:label="$t('Title')"
|
||||||
label-for="discussion-title"
|
label-for="discussion-title"
|
||||||
:message="errors.title"
|
:message="errors.title"
|
||||||
:type="errors.title ? 'is-danger' : undefined"
|
:type="errors.title ? 'is-danger' : undefined"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
aria-required="true"
|
aria-required="true"
|
||||||
required
|
required
|
||||||
v-model="discussion.title"
|
v-model="discussion.title"
|
||||||
id="discussion-title"
|
id="discussion-title"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<b-field :label="$t('Text')">
|
<o-field :label="$t('Text')">
|
||||||
<editor v-model="discussion.text" :aria-label="$t('Comment body')" />
|
<editor v-model="discussion.text" :aria-label="$t('Comment body')" />
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<button class="button is-primary" type="submit">
|
<button class="button is-primary" type="submit">
|
||||||
{{ $t("Create the discussion") }}
|
{{ $t("Create the discussion") }}
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
}"
|
}"
|
||||||
>{{ discussion.actor.name }}</router-link
|
>{{ discussion.actor.name }}</router-link
|
||||||
>
|
>
|
||||||
<b-skeleton v-else-if="$apollo.loading" animated />
|
<o-skeleton v-else-if="$apollo.loading" animated />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<router-link
|
<router-link
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
}"
|
}"
|
||||||
>{{ $t("Discussions") }}</router-link
|
>{{ $t("Discussions") }}</router-link
|
||||||
>
|
>
|
||||||
<b-skeleton animated v-else-if="$apollo.loading" />
|
<o-skeleton animated v-else-if="$apollo.loading" />
|
||||||
</li>
|
</li>
|
||||||
<li class="is-active">
|
<li class="is-active">
|
||||||
<router-link
|
<router-link
|
||||||
|
@ -41,15 +41,15 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<b-message v-if="error" type="is-danger">
|
<o-message v-if="error" type="is-danger">
|
||||||
{{ error }}
|
{{ error }}
|
||||||
</b-message>
|
</o-message>
|
||||||
<section>
|
<section>
|
||||||
<div class="discussion-title" dir="auto">
|
<div class="discussion-title" dir="auto">
|
||||||
<h1 class="title" v-if="discussion.title && !editTitleMode">
|
<h1 class="title" v-if="discussion.title && !editTitleMode">
|
||||||
{{ discussion.title }}
|
{{ discussion.title }}
|
||||||
</h1>
|
</h1>
|
||||||
<b-button
|
<o-button
|
||||||
icon-right="pencil"
|
icon-right="pencil"
|
||||||
size="is-small"
|
size="is-small"
|
||||||
:title="$t('Update discussion title')"
|
:title="$t('Update discussion title')"
|
||||||
|
@ -66,8 +66,8 @@
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
</b-button>
|
</o-button>
|
||||||
<b-skeleton
|
<o-skeleton
|
||||||
v-else-if="!editTitleMode && $apollo.loading"
|
v-else-if="!editTitleMode && $apollo.loading"
|
||||||
height="50px"
|
height="50px"
|
||||||
animated
|
animated
|
||||||
|
@ -77,21 +77,21 @@
|
||||||
@submit.prevent="updateDiscussion"
|
@submit.prevent="updateDiscussion"
|
||||||
class="title-edit"
|
class="title-edit"
|
||||||
>
|
>
|
||||||
<b-field :label="$t('Title')" label-for="discussion-title">
|
<o-field :label="$t('Title')" label-for="discussion-title">
|
||||||
<b-input
|
<o-input
|
||||||
:value="discussion.title"
|
:value="discussion.title"
|
||||||
v-model="newTitle"
|
v-model="newTitle"
|
||||||
id="discussion-title"
|
id="discussion-title"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
native-type="submit"
|
native-type="submit"
|
||||||
icon-right="check"
|
icon-right="check"
|
||||||
:title="$t('Update discussion title')"
|
:title="$t('Update discussion title')"
|
||||||
/>
|
/>
|
||||||
<b-button
|
<o-button
|
||||||
@click="
|
@click="
|
||||||
() => {
|
() => {
|
||||||
editTitleMode = false;
|
editTitleMode = false;
|
||||||
|
@ -101,12 +101,12 @@
|
||||||
icon-right="close"
|
icon-right="close"
|
||||||
:title="$t('Cancel discussion title edition')"
|
:title="$t('Cancel discussion title edition')"
|
||||||
/>
|
/>
|
||||||
<b-button
|
<o-button
|
||||||
@click="openDeleteDiscussionConfirmation"
|
@click="openDeleteDiscussionConfirmation"
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
native-type="button"
|
native-type="button"
|
||||||
icon-left="delete"
|
icon-left="delete"
|
||||||
>{{ $t("Delete conversation") }}</b-button
|
>{{ $t("Delete conversation") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -118,20 +118,20 @@
|
||||||
@update-comment="updateComment"
|
@update-comment="updateComment"
|
||||||
@delete-comment="deleteComment"
|
@delete-comment="deleteComment"
|
||||||
/>
|
/>
|
||||||
<b-button
|
<o-button
|
||||||
v-if="discussion.comments.elements.length < discussion.comments.total"
|
v-if="discussion.comments.elements.length < discussion.comments.total"
|
||||||
@click="loadMoreComments"
|
@click="loadMoreComments"
|
||||||
>{{ $t("Fetch more") }}</b-button
|
>{{ $t("Fetch more") }}</o-button
|
||||||
>
|
>
|
||||||
<form @submit.prevent="reply" v-if="!error">
|
<form @submit.prevent="reply" v-if="!error">
|
||||||
<b-field :label="$t('Text')">
|
<o-field :label="$t('Text')">
|
||||||
<editor v-model="newComment" :aria-label="$t('Comment body')" />
|
<editor v-model="newComment" :aria-label="$t('Comment body')" />
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-button
|
<o-button
|
||||||
native-type="submit"
|
native-type="submit"
|
||||||
:disabled="['<p></p>', ''].includes(newComment)"
|
:disabled="['<p></p>', ''].includes(newComment)"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Reply") }}</b-button
|
>{{ $t("Reply") }}</o-button
|
||||||
>
|
>
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -35,13 +35,13 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<b-button
|
<o-button
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{
|
:to="{
|
||||||
name: RouteName.CREATE_DISCUSSION,
|
name: RouteName.CREATE_DISCUSSION,
|
||||||
params: { preferredUsername },
|
params: { preferredUsername },
|
||||||
}"
|
}"
|
||||||
>{{ $t("New discussion") }}</b-button
|
>{{ $t("New discussion") }}</o-button
|
||||||
>
|
>
|
||||||
<div v-if="group.discussions.elements.length > 0">
|
<div v-if="group.discussions.elements.length > 0">
|
||||||
<discussion-list-item
|
<discussion-list-item
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
v-for="discussion in group.discussions.elements"
|
v-for="discussion in group.discussions.elements"
|
||||||
:key="discussion.id"
|
:key="discussion.id"
|
||||||
/>
|
/>
|
||||||
<b-pagination
|
<o-pagination
|
||||||
class="discussion-pagination"
|
class="discussion-pagination"
|
||||||
:total="group.discussions.total"
|
:total="group.discussions.total"
|
||||||
v-model="page"
|
v-model="page"
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
:aria-page-label="$t('Page')"
|
:aria-page-label="$t('Page')"
|
||||||
:aria-current-label="$t('Current page')"
|
:aria-current-label="$t('Current page')"
|
||||||
>
|
>
|
||||||
</b-pagination>
|
</o-pagination>
|
||||||
</div>
|
</div>
|
||||||
<empty-content v-else icon="chat">
|
<empty-content v-else icon="chat">
|
||||||
{{ $t("There's no discussions yet") }}
|
{{ $t("There's no discussions yet") }}
|
||||||
|
|
|
@ -16,13 +16,13 @@
|
||||||
:defaultImage="event.picture"
|
:defaultImage="event.picture"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Title')"
|
:label="$t('Title')"
|
||||||
label-for="title"
|
label-for="title"
|
||||||
:type="checkTitleLength[0]"
|
:type="checkTitleLength[0]"
|
||||||
:message="checkTitleLength[1]"
|
:message="checkTitleLength[1]"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
size="is-large"
|
size="is-large"
|
||||||
aria-required="true"
|
aria-required="true"
|
||||||
required
|
required
|
||||||
|
@ -30,17 +30,17 @@
|
||||||
id="title"
|
id="title"
|
||||||
dir="auto"
|
dir="auto"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<tag-input v-model="event.tags" />
|
<tag-input v-model="event.tags" />
|
||||||
|
|
||||||
<b-field
|
<o-field
|
||||||
horizontal
|
horizontal
|
||||||
:label="$t('Starts on…')"
|
:label="$t('Starts on…')"
|
||||||
class="begins-on-field"
|
class="begins-on-field"
|
||||||
label-for="begins-on-field"
|
label-for="begins-on-field"
|
||||||
>
|
>
|
||||||
<b-datetimepicker
|
<o-datetimepicker
|
||||||
class="datepicker starts-on"
|
class="datepicker starts-on"
|
||||||
:placeholder="$t('Type or select a date…')"
|
:placeholder="$t('Type or select a date…')"
|
||||||
icon="calendar-today"
|
icon="calendar-today"
|
||||||
|
@ -55,11 +55,11 @@
|
||||||
'aria-previous-label': $t('Previous month'),
|
'aria-previous-label': $t('Previous month'),
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
</b-datetimepicker>
|
</o-datetimepicker>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<b-field horizontal :label="$t('Ends on…')" label-for="ends-on-field">
|
<o-field horizontal :label="$t('Ends on…')" label-for="ends-on-field">
|
||||||
<b-datetimepicker
|
<o-datetimepicker
|
||||||
class="datepicker ends-on"
|
class="datepicker ends-on"
|
||||||
:placeholder="$t('Type or select a date…')"
|
:placeholder="$t('Type or select a date…')"
|
||||||
icon="calendar-today"
|
icon="calendar-today"
|
||||||
|
@ -75,12 +75,12 @@
|
||||||
'aria-previous-label': $t('Previous month'),
|
'aria-previous-label': $t('Previous month'),
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
</b-datetimepicker>
|
</o-datetimepicker>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<b-button type="is-text" @click="dateSettingsIsOpen = true">
|
<o-button type="is-text" @click="dateSettingsIsOpen = true">
|
||||||
{{ $t("Date parameters") }}
|
{{ $t("Date parameters") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
|
|
||||||
<div class="address">
|
<div class="address">
|
||||||
<full-address-auto-complete
|
<full-address-auto-complete
|
||||||
|
@ -88,9 +88,9 @@
|
||||||
:user-timezone="userActualTimezone"
|
:user-timezone="userActualTimezone"
|
||||||
:disabled="isOnline"
|
:disabled="isOnline"
|
||||||
/>
|
/>
|
||||||
<b-switch class="is-online" v-model="isOnline">{{
|
<o-switch class="is-online" v-model="isOnline">{{
|
||||||
$t("The event is fully online")
|
$t("The event is fully online")
|
||||||
}}</b-switch>
|
}}</o-switch>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
|
@ -101,25 +101,25 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<b-field :label="$t('Website / URL')" label-for="website-url">
|
<o-field :label="$t('Website / URL')" label-for="website-url">
|
||||||
<b-input
|
<o-input
|
||||||
icon="link"
|
icon="link"
|
||||||
type="url"
|
type="url"
|
||||||
v-model="event.onlineAddress"
|
v-model="event.onlineAddress"
|
||||||
placeholder="URL"
|
placeholder="URL"
|
||||||
id="website-url"
|
id="website-url"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<subtitle>{{ $t("Organizers") }}</subtitle>
|
<subtitle>{{ $t("Organizers") }}</subtitle>
|
||||||
|
|
||||||
<div v-if="config && config.features.groups && organizerActor.id">
|
<div v-if="config && config.features.groups && organizerActor.id">
|
||||||
<b-field>
|
<o-field>
|
||||||
<organizer-picker-wrapper
|
<organizer-picker-wrapper
|
||||||
v-model="organizerActor"
|
v-model="organizerActor"
|
||||||
:contacts.sync="event.contacts"
|
:contacts.sync="event.contacts"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<p v-if="!attributedToAGroup && organizerActorEqualToCurrentActor">
|
<p v-if="!attributedToAGroup && organizerActorEqualToCurrentActor">
|
||||||
{{
|
{{
|
||||||
$t("The event will show as attributed to your personal profile.")
|
$t("The event will show as attributed to your personal profile.")
|
||||||
|
@ -173,28 +173,28 @@
|
||||||
}}
|
}}
|
||||||
</legend>
|
</legend>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="event.visibility"
|
v-model="event.visibility"
|
||||||
name="eventVisibility"
|
name="eventVisibility"
|
||||||
:native-value="EventVisibility.PUBLIC"
|
:native-value="EventVisibility.PUBLIC"
|
||||||
>{{ $t("Visible everywhere on the web (public)") }}</b-radio
|
>{{ $t("Visible everywhere on the web (public)") }}</o-radio
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="event.visibility"
|
v-model="event.visibility"
|
||||||
name="eventVisibility"
|
name="eventVisibility"
|
||||||
:native-value="EventVisibility.UNLISTED"
|
:native-value="EventVisibility.UNLISTED"
|
||||||
>{{ $t("Only accessible through link (private)") }}</b-radio
|
>{{ $t("Only accessible through link (private)") }}</o-radio
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<!-- <div class="field">
|
<!-- <div class="field">
|
||||||
<b-radio v-model="event.visibility"
|
<o-radio v-model="event.visibility"
|
||||||
name="eventVisibility"
|
name="eventVisibility"
|
||||||
:native-value="EventVisibility.PRIVATE">
|
:native-value="EventVisibility.PRIVATE">
|
||||||
{{ $t('Page limited to my group (asks for auth)') }}
|
{{ $t('Page limited to my group (asks for auth)') }}
|
||||||
</b-radio>
|
</o-radio>
|
||||||
</div>-->
|
</div>-->
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
@ -202,7 +202,7 @@
|
||||||
v-if="config && config.anonymous.participation.allowed"
|
v-if="config && config.anonymous.participation.allowed"
|
||||||
>
|
>
|
||||||
<label class="label">{{ $t("Anonymous participations") }}</label>
|
<label class="label">{{ $t("Anonymous participations") }}</label>
|
||||||
<b-switch v-model="eventOptions.anonymousParticipation">
|
<o-switch v-model="eventOptions.anonymousParticipation">
|
||||||
{{
|
{{
|
||||||
$t("I want to allow people to participate without an account.")
|
$t("I want to allow people to participate without an account.")
|
||||||
}}
|
}}
|
||||||
|
@ -219,26 +219,26 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</small>
|
</small>
|
||||||
</b-switch>
|
</o-switch>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label">{{ $t("Participation approval") }}</label>
|
<label class="label">{{ $t("Participation approval") }}</label>
|
||||||
<b-switch v-model="needsApproval">{{
|
<o-switch v-model="needsApproval">{{
|
||||||
$t("I want to approve every participation request")
|
$t("I want to approve every participation request")
|
||||||
}}</b-switch>
|
}}</o-switch>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label">{{ $t("Number of places") }}</label>
|
<label class="label">{{ $t("Number of places") }}</label>
|
||||||
<b-switch v-model="limitedPlaces">{{
|
<o-switch v-model="limitedPlaces">{{
|
||||||
$t("Limited number of places")
|
$t("Limited number of places")
|
||||||
}}</b-switch>
|
}}</o-switch>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="box" v-if="limitedPlaces">
|
<div class="box" v-if="limitedPlaces">
|
||||||
<b-field :label="$t('Number of places')" label-for="number-of-places">
|
<o-field :label="$t('Number of places')" label-for="number-of-places">
|
||||||
<b-numberinput
|
<o-numberinput
|
||||||
controls-position="compact"
|
controls-position="compact"
|
||||||
:aria-minus-label="$t('Decrease')"
|
:aria-minus-label="$t('Decrease')"
|
||||||
:aria-plus-label="$t('Increase')"
|
:aria-plus-label="$t('Increase')"
|
||||||
|
@ -246,19 +246,19 @@
|
||||||
v-model="eventOptions.maximumAttendeeCapacity"
|
v-model="eventOptions.maximumAttendeeCapacity"
|
||||||
id="number-of-places"
|
id="number-of-places"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<!--
|
<!--
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-switch v-model="eventOptions.showRemainingAttendeeCapacity">
|
<o-switch v-model="eventOptions.showRemainingAttendeeCapacity">
|
||||||
{{ $t('Show remaining number of places') }}
|
{{ $t('Show remaining number of places') }}
|
||||||
</b-switch>
|
</o-switch>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-switch v-model="eventOptions.showParticipationPrice">
|
<o-switch v-model="eventOptions.showParticipationPrice">
|
||||||
{{ $t('Display participation price') }}
|
{{ $t('Display participation price') }}
|
||||||
</b-switch>
|
</o-switch>
|
||||||
</b-field>-->
|
</o-field>-->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<subtitle>{{ $t("Public comment moderation") }}</subtitle>
|
<subtitle>{{ $t("Public comment moderation") }}</subtitle>
|
||||||
|
@ -266,28 +266,28 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{{ $t("Who can post a comment?") }}</legend>
|
<legend>{{ $t("Who can post a comment?") }}</legend>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="eventOptions.commentModeration"
|
v-model="eventOptions.commentModeration"
|
||||||
name="commentModeration"
|
name="commentModeration"
|
||||||
:native-value="CommentModeration.ALLOW_ALL"
|
:native-value="CommentModeration.ALLOW_ALL"
|
||||||
>{{ $t("Allow all comments from users with accounts") }}</b-radio
|
>{{ $t("Allow all comments from users with accounts") }}</o-radio
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <div class="field">-->
|
<!-- <div class="field">-->
|
||||||
<!-- <b-radio v-model="eventOptions.commentModeration"-->
|
<!-- <o-radio v-model="eventOptions.commentModeration"-->
|
||||||
<!-- name="commentModeration"-->
|
<!-- name="commentModeration"-->
|
||||||
<!-- :native-value="CommentModeration.MODERATED">-->
|
<!-- :native-value="CommentModeration.MODERATED">-->
|
||||||
<!-- {{ $t('Moderated comments (shown after approval)') }}-->
|
<!-- {{ $t('Moderated comments (shown after approval)') }}-->
|
||||||
<!-- </b-radio>-->
|
<!-- </o-radio>-->
|
||||||
<!-- </div>-->
|
<!-- </div>-->
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<b-radio
|
<o-radio
|
||||||
v-model="eventOptions.commentModeration"
|
v-model="eventOptions.commentModeration"
|
||||||
name="commentModeration"
|
name="commentModeration"
|
||||||
:native-value="CommentModeration.CLOSED"
|
:native-value="CommentModeration.CLOSED"
|
||||||
>{{ $t("Close comments for all (except for admins)") }}</b-radio
|
>{{ $t("Close comments for all (except for admins)") }}</o-radio
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
@ -302,44 +302,44 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</legend>
|
</legend>
|
||||||
<b-field class="event__status__field">
|
<o-field class="event__status__field">
|
||||||
<b-radio-button
|
<o-radio-button
|
||||||
v-model="event.status"
|
v-model="event.status"
|
||||||
name="status"
|
name="status"
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
:native-value="EventStatus.TENTATIVE"
|
:native-value="EventStatus.TENTATIVE"
|
||||||
>
|
>
|
||||||
<b-icon icon="calendar-question" />
|
<o-icon icon="calendar-question" />
|
||||||
{{ $t("Tentative: Will be confirmed later") }}
|
{{ $t("Tentative: Will be confirmed later") }}
|
||||||
</b-radio-button>
|
</o-radio-button>
|
||||||
<b-radio-button
|
<o-radio-button
|
||||||
v-model="event.status"
|
v-model="event.status"
|
||||||
name="status"
|
name="status"
|
||||||
type="is-success"
|
type="is-success"
|
||||||
:native-value="EventStatus.CONFIRMED"
|
:native-value="EventStatus.CONFIRMED"
|
||||||
>
|
>
|
||||||
<b-icon icon="calendar-check" />
|
<o-icon icon="calendar-check" />
|
||||||
{{ $t("Confirmed: Will happen") }}
|
{{ $t("Confirmed: Will happen") }}
|
||||||
</b-radio-button>
|
</o-radio-button>
|
||||||
<b-radio-button
|
<o-radio-button
|
||||||
v-model="event.status"
|
v-model="event.status"
|
||||||
name="status"
|
name="status"
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
:native-value="EventStatus.CANCELLED"
|
:native-value="EventStatus.CANCELLED"
|
||||||
>
|
>
|
||||||
<b-icon icon="calendar-remove" />
|
<o-icon icon="calendar-remove" />
|
||||||
{{ $t("Cancelled: Won't happen") }}
|
{{ $t("Cancelled: Won't happen") }}
|
||||||
</b-radio-button>
|
</o-radio-button>
|
||||||
</b-field>
|
</o-field>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="container section" v-else>
|
<div class="container section" v-else>
|
||||||
<b-message type="is-danger">
|
<o-message type="is-danger">
|
||||||
{{ $t("Only group moderators can create, edit and delete events.") }}
|
{{ $t("Only group moderators can create, edit and delete events.") }}
|
||||||
</b-message>
|
</o-message>
|
||||||
</div>
|
</div>
|
||||||
<b-modal
|
<o-modal
|
||||||
v-model="dateSettingsIsOpen"
|
v-model="dateSettingsIsOpen"
|
||||||
has-modal-card
|
has-modal-card
|
||||||
trap-focus
|
trap-focus
|
||||||
|
@ -358,8 +358,8 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<b-field :label="$t('Timezone')" label-for="timezone" expanded>
|
<o-field :label="$t('Timezone')" label-for="timezone" expanded>
|
||||||
<b-select
|
<o-select
|
||||||
:placeholder="$t('Select a timezone')"
|
:placeholder="$t('Select a timezone')"
|
||||||
:loading="!config"
|
:loading="!config"
|
||||||
v-model="timezone"
|
v-model="timezone"
|
||||||
|
@ -378,25 +378,25 @@
|
||||||
{{ sanitizeTimezone(timezone) }}
|
{{ sanitizeTimezone(timezone) }}
|
||||||
</option>
|
</option>
|
||||||
</optgroup>
|
</optgroup>
|
||||||
</b-select>
|
</o-select>
|
||||||
<b-button
|
<o-button
|
||||||
:disabled="!timezone"
|
:disabled="!timezone"
|
||||||
@click="timezone = null"
|
@click="timezone = null"
|
||||||
class="reset-area"
|
class="reset-area"
|
||||||
icon-left="close"
|
icon-left="close"
|
||||||
:title="$t('Clear timezone field')"
|
:title="$t('Clear timezone field')"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field :label="$t('Event page settings')">
|
<o-field :label="$t('Event page settings')">
|
||||||
<b-switch v-model="eventOptions.showStartTime">{{
|
<o-switch v-model="eventOptions.showStartTime">{{
|
||||||
$t("Show the time when the event begins")
|
$t("Show the time when the event begins")
|
||||||
}}</b-switch>
|
}}</o-switch>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-switch v-model="eventOptions.showEndTime">{{
|
<o-switch v-model="eventOptions.showEndTime">{{
|
||||||
$t("Show the time when the event ends")
|
$t("Show the time when the event ends")
|
||||||
}}</b-switch>
|
}}</o-switch>
|
||||||
</b-field>
|
</o-field>
|
||||||
</section>
|
</section>
|
||||||
<footer class="modal-card-foot">
|
<footer class="modal-card-foot">
|
||||||
<button
|
<button
|
||||||
|
@ -409,7 +409,7 @@
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
<span ref="bottomObserver" />
|
<span ref="bottomObserver" />
|
||||||
<nav
|
<nav
|
||||||
role="navigation"
|
role="navigation"
|
||||||
|
@ -427,22 +427,22 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="navbar-end">
|
<div class="navbar-end">
|
||||||
<span class="navbar-item">
|
<span class="navbar-item">
|
||||||
<b-button type="is-text" @click="confirmGoBack">{{
|
<o-button type="is-text" @click="confirmGoBack">{{
|
||||||
$t("Cancel")
|
$t("Cancel")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</span>
|
</span>
|
||||||
<!-- If an event has been published we can't make it draft anymore -->
|
<!-- If an event has been published we can't make it draft anymore -->
|
||||||
<span class="navbar-item" v-if="event.draft === true">
|
<span class="navbar-item" v-if="event.draft === true">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
outlined
|
outlined
|
||||||
@click="createOrUpdateDraft"
|
@click="createOrUpdateDraft"
|
||||||
:disabled="saving"
|
:disabled="saving"
|
||||||
>{{ $t("Save draft") }}</b-button
|
>{{ $t("Save draft") }}</o-button
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
<span class="navbar-item">
|
<span class="navbar-item">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
:disabled="saving"
|
:disabled="saving"
|
||||||
@click="createOrUpdatePublish"
|
@click="createOrUpdatePublish"
|
||||||
|
@ -455,7 +455,7 @@
|
||||||
$t("Publish")
|
$t("Publish")
|
||||||
}}</span>
|
}}</span>
|
||||||
<span v-else>{{ $t("Update my event") }}</span>
|
<span v-else>{{ $t("Update my event") }}</span>
|
||||||
</b-button>
|
</o-button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<b-loading :active.sync="$apollo.queries.event.loading" />
|
<o-loading :active.sync="$apollo.queries.event.loading" />
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<event-banner :picture="event.picture" />
|
<event-banner :picture="event.picture" />
|
||||||
<div class="intro-wrapper">
|
<div class="intro-wrapper">
|
||||||
|
@ -57,22 +57,22 @@
|
||||||
<tag>{{ tag.title }}</tag>
|
<tag>{{ tag.title }}</tag>
|
||||||
</router-link>
|
</router-link>
|
||||||
</p>
|
</p>
|
||||||
<b-tag type="is-warning" size="is-medium" v-if="event.draft"
|
<o-tag type="is-warning" size="is-medium" v-if="event.draft"
|
||||||
>{{ $t("Draft") }}
|
>{{ $t("Draft") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<span
|
<span
|
||||||
class="event-status"
|
class="event-status"
|
||||||
v-if="event.status !== EventStatus.CONFIRMED"
|
v-if="event.status !== EventStatus.CONFIRMED"
|
||||||
>
|
>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
v-if="event.status === EventStatus.TENTATIVE"
|
v-if="event.status === EventStatus.TENTATIVE"
|
||||||
>{{ $t("Event to be confirmed") }}</b-tag
|
>{{ $t("Event to be confirmed") }}</o-tag
|
||||||
>
|
>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-if="event.status === EventStatus.CANCELLED"
|
v-if="event.status === EventStatus.CANCELLED"
|
||||||
>{{ $t("Event cancelled") }}</b-tag
|
>{{ $t("Event cancelled") }}</o-tag
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -91,11 +91,11 @@
|
||||||
<template v-if="!event.draft">
|
<template v-if="!event.draft">
|
||||||
<p v-if="event.visibility === EventVisibility.PUBLIC">
|
<p v-if="event.visibility === EventVisibility.PUBLIC">
|
||||||
{{ $t("Public event") }}
|
{{ $t("Public event") }}
|
||||||
<b-icon icon="earth" />
|
<o-icon icon="earth" />
|
||||||
</p>
|
</p>
|
||||||
<p v-if="event.visibility === EventVisibility.UNLISTED">
|
<p v-if="event.visibility === EventVisibility.UNLISTED">
|
||||||
{{ $t("Private event") }}
|
{{ $t("Private event") }}
|
||||||
<b-icon icon="link" />
|
<o-icon icon="link" />
|
||||||
</p>
|
</p>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="!event.local && organizer.domain">
|
<template v-if="!event.local && organizer.domain">
|
||||||
|
@ -168,7 +168,7 @@
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
type="is-dark"
|
type="is-dark"
|
||||||
v-if="!event.local"
|
v-if="!event.local"
|
||||||
:label="
|
:label="
|
||||||
|
@ -177,19 +177,19 @@
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-icon size="is-small" icon="help-circle-outline" />
|
<o-icon size="is-small" icon="help-circle-outline" />
|
||||||
</b-tooltip>
|
</o-tooltip>
|
||||||
<b-icon icon="ticket-confirmation-outline" />
|
<o-icon icon="ticket-confirmation-outline" />
|
||||||
</p>
|
</p>
|
||||||
<b-dropdown position="is-bottom-left" aria-role="list">
|
<o-dropdown position="is-bottom-left" aria-role="list">
|
||||||
<b-button
|
<o-button
|
||||||
slot="trigger"
|
slot="trigger"
|
||||||
role="button"
|
role="button"
|
||||||
icon-right="dots-horizontal"
|
icon-right="dots-horizontal"
|
||||||
>
|
>
|
||||||
{{ $t("Actions") }}
|
{{ $t("Actions") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
has-link
|
has-link
|
||||||
v-if="canManageEvent || event.draft"
|
v-if="canManageEvent || event.draft"
|
||||||
|
@ -201,10 +201,10 @@
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
{{ $t("Edit") }}
|
{{ $t("Edit") }}
|
||||||
<b-icon icon="pencil" />
|
<o-icon icon="pencil" />
|
||||||
</router-link>
|
</router-link>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
has-link
|
has-link
|
||||||
v-if="canManageEvent || event.draft"
|
v-if="canManageEvent || event.draft"
|
||||||
|
@ -216,18 +216,18 @@
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
{{ $t("Duplicate") }}
|
{{ $t("Duplicate") }}
|
||||||
<b-icon icon="content-duplicate" />
|
<o-icon icon="content-duplicate" />
|
||||||
</router-link>
|
</router-link>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
v-if="canManageEvent || event.draft"
|
v-if="canManageEvent || event.draft"
|
||||||
@click="openDeleteEventModalWrapper"
|
@click="openDeleteEventModalWrapper"
|
||||||
@keyup.enter="openDeleteEventModalWrapper"
|
@keyup.enter="openDeleteEventModalWrapper"
|
||||||
>
|
>
|
||||||
{{ $t("Delete") }}
|
{{ $t("Delete") }}
|
||||||
<b-icon icon="delete" />
|
<o-icon icon="delete" />
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
|
|
||||||
<hr
|
<hr
|
||||||
role="presentation"
|
role="presentation"
|
||||||
|
@ -235,7 +235,7 @@
|
||||||
aria-role="menuitem"
|
aria-role="menuitem"
|
||||||
v-if="canManageEvent || event.draft"
|
v-if="canManageEvent || event.draft"
|
||||||
/>
|
/>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
v-if="!event.draft"
|
v-if="!event.draft"
|
||||||
@click="triggerShare()"
|
@click="triggerShare()"
|
||||||
|
@ -243,10 +243,10 @@
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
{{ $t("Share this event") }}
|
{{ $t("Share this event") }}
|
||||||
<b-icon icon="share" />
|
<o-icon icon="share" />
|
||||||
</span>
|
</span>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
@click="downloadIcsEvent()"
|
@click="downloadIcsEvent()"
|
||||||
@keyup.enter="downloadIcsEvent()"
|
@keyup.enter="downloadIcsEvent()"
|
||||||
|
@ -254,10 +254,10 @@
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
{{ $t("Add to my calendar") }}
|
{{ $t("Add to my calendar") }}
|
||||||
<b-icon icon="calendar-plus" />
|
<o-icon icon="calendar-plus" />
|
||||||
</span>
|
</span>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
aria-role="listitem"
|
aria-role="listitem"
|
||||||
v-if="ableToReport"
|
v-if="ableToReport"
|
||||||
@click="isReportModalActive = true"
|
@click="isReportModalActive = true"
|
||||||
|
@ -265,10 +265,10 @@
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
{{ $t("Report") }}
|
{{ $t("Report") }}
|
||||||
<b-icon icon="flag" />
|
<o-icon icon="flag" />
|
||||||
</span>
|
</span>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -327,7 +327,7 @@
|
||||||
</h3>
|
</h3>
|
||||||
<multi-card :events="event.relatedEvents" />
|
<multi-card :events="event.relatedEvents" />
|
||||||
</section>
|
</section>
|
||||||
<b-modal
|
<o-modal
|
||||||
:active.sync="isReportModalActive"
|
:active.sync="isReportModalActive"
|
||||||
has-modal-card
|
has-modal-card
|
||||||
ref="reportModal"
|
ref="reportModal"
|
||||||
|
@ -339,16 +339,16 @@
|
||||||
:outside-domain="organizerDomain"
|
:outside-domain="organizerDomain"
|
||||||
@close="$refs.reportModal.close()"
|
@close="$refs.reportModal.close()"
|
||||||
/>
|
/>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
<b-modal
|
<o-modal
|
||||||
:close-button-aria-label="$t('Close')"
|
:close-button-aria-label="$t('Close')"
|
||||||
:active.sync="isShareModalActive"
|
:active.sync="isShareModalActive"
|
||||||
has-modal-card
|
has-modal-card
|
||||||
ref="shareModal"
|
ref="shareModal"
|
||||||
>
|
>
|
||||||
<share-event-modal :event="event" :eventCapacityOK="eventCapacityOK" />
|
<share-event-modal :event="event" :eventCapacityOK="eventCapacityOK" />
|
||||||
</b-modal>
|
</o-modal>
|
||||||
<b-modal
|
<o-modal
|
||||||
:active.sync="isJoinModalActive"
|
:active.sync="isJoinModalActive"
|
||||||
has-modal-card
|
has-modal-card
|
||||||
ref="participationModal"
|
ref="participationModal"
|
||||||
|
@ -384,8 +384,8 @@
|
||||||
</footer>
|
</footer>
|
||||||
</template>
|
</template>
|
||||||
</identity-picker>
|
</identity-picker>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
<b-modal
|
<o-modal
|
||||||
:active.sync="isJoinConfirmationModalActive"
|
:active.sync="isJoinConfirmationModalActive"
|
||||||
has-modal-card
|
has-modal-card
|
||||||
ref="joinConfirmationModal"
|
ref="joinConfirmationModal"
|
||||||
|
@ -411,32 +411,32 @@
|
||||||
joinEvent(actorForConfirmation, messageForConfirmation)
|
joinEvent(actorForConfirmation, messageForConfirmation)
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-field :label="$t('Message')">
|
<o-field :label="$t('Message')">
|
||||||
<b-input
|
<o-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
size="is-medium"
|
size="is-medium"
|
||||||
v-model="messageForConfirmation"
|
v-model="messageForConfirmation"
|
||||||
minlength="10"
|
minlength="10"
|
||||||
></b-input>
|
></o-input>
|
||||||
</b-field>
|
</o-field>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
native-type="button"
|
native-type="button"
|
||||||
class="button"
|
class="button"
|
||||||
ref="cancelButton"
|
ref="cancelButton"
|
||||||
@click="isJoinConfirmationModalActive = false"
|
@click="isJoinConfirmationModalActive = false"
|
||||||
@keyup.enter="isJoinConfirmationModalActive = false"
|
@keyup.enter="isJoinConfirmationModalActive = false"
|
||||||
>{{ $t("Cancel") }}
|
>{{ $t("Cancel") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
<b-button type="is-primary" native-type="submit">
|
<o-button type="is-primary" native-type="submit">
|
||||||
{{ $t("Confirm my participation") }}
|
{{ $t("Confirm my participation") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
<b-modal
|
<o-modal
|
||||||
:close-button-aria-label="$t('Close')"
|
:close-button-aria-label="$t('Close')"
|
||||||
class="map-modal"
|
class="map-modal"
|
||||||
v-if="event.physicalAddress && event.physicalAddress.geom"
|
v-if="event.physicalAddress && event.physicalAddress.geom"
|
||||||
|
@ -452,7 +452,7 @@
|
||||||
@close="props.close"
|
@close="props.close"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1146,7 +1146,7 @@ export default class Event extends EventMixin {
|
||||||
transition: opacity 0.5s;
|
transition: opacity 0.5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fade-enter,
|
.fade-enter-from,
|
||||||
.fade-leave-to {
|
.fade-leave-to {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<section class="container">
|
<section class="container">
|
||||||
<h1>{{ $t("Event list") }}</h1>
|
<h1>{{ $t("Event list") }}</h1>
|
||||||
<b-loading :active.sync="$apollo.loading"></b-loading>
|
<o-loading :active.sync="$apollo.loading"></o-loading>
|
||||||
<div v-if="events.length > 0" class="columns is-multiline">
|
<div v-if="events.length > 0" class="columns is-multiline">
|
||||||
<EventCard
|
<EventCard
|
||||||
v-for="event in events"
|
v-for="event in events"
|
||||||
|
@ -10,10 +10,10 @@
|
||||||
class="column is-one-quarter-desktop is-half-mobile"
|
class="column is-one-quarter-desktop is-half-mobile"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<b-message
|
<o-message
|
||||||
v-if-else="events.length === 0 && $apollo.loading === false"
|
v-if-else="events.length === 0 && $apollo.loading === false"
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
>{{ $t("No events found") }}</b-message
|
>{{ $t("No events found") }}</o-message
|
||||||
>
|
>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -46,17 +46,17 @@
|
||||||
class="button is-primary"
|
class="button is-primary"
|
||||||
>{{ $t("+ Create an event") }}</router-link
|
>{{ $t("+ Create an event") }}</router-link
|
||||||
>
|
>
|
||||||
<b-loading :active.sync="$apollo.loading"></b-loading>
|
<o-loading :active.sync="$apollo.loading"></o-loading>
|
||||||
<section v-if="group">
|
<section v-if="group">
|
||||||
<subtitle>
|
<subtitle>
|
||||||
{{ showPassedEvents ? $t("Past events") : $t("Upcoming events") }}
|
{{ showPassedEvents ? $t("Past events") : $t("Upcoming events") }}
|
||||||
</subtitle>
|
</subtitle>
|
||||||
<b-switch v-model="showPassedEvents">{{ $t("Past events") }}</b-switch>
|
<o-switch v-model="showPassedEvents">{{ $t("Past events") }}</o-switch>
|
||||||
<grouped-multi-event-minimalist-card
|
<grouped-multi-event-minimalist-card
|
||||||
:events="group.organizedEvents.elements"
|
:events="group.organizedEvents.elements"
|
||||||
:isCurrentActorMember="isCurrentActorMember"
|
:isCurrentActorMember="isCurrentActorMember"
|
||||||
/>
|
/>
|
||||||
<b-message
|
<o-message
|
||||||
v-if="
|
v-if="
|
||||||
group.organizedEvents.elements.length === 0 &&
|
group.organizedEvents.elements.length === 0 &&
|
||||||
$apollo.loading === false
|
$apollo.loading === false
|
||||||
|
@ -64,8 +64,8 @@
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
>
|
>
|
||||||
{{ $t("No events found") }}
|
{{ $t("No events found") }}
|
||||||
</b-message>
|
</o-message>
|
||||||
<b-pagination
|
<o-pagination
|
||||||
:total="group.organizedEvents.total"
|
:total="group.organizedEvents.total"
|
||||||
v-model="eventsPage"
|
v-model="eventsPage"
|
||||||
:per-page="EVENTS_PAGE_LIMIT"
|
:per-page="EVENTS_PAGE_LIMIT"
|
||||||
|
@ -74,7 +74,7 @@
|
||||||
:aria-page-label="$t('Page')"
|
:aria-page-label="$t('Page')"
|
||||||
:aria-current-label="$t('Current page')"
|
:aria-current-label="$t('Current page')"
|
||||||
>
|
>
|
||||||
</b-pagination>
|
</o-pagination>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -17,28 +17,28 @@
|
||||||
>{{ $t("Create event") }}</router-link
|
>{{ $t("Create event") }}</router-link
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<b-loading :active.sync="$apollo.loading"></b-loading>
|
<o-loading :active.sync="$apollo.loading"></o-loading>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<div class="event-filter">
|
<div class="event-filter">
|
||||||
<b-field grouped group-multiline>
|
<o-field grouped group-multiline>
|
||||||
<b-field>
|
<o-field>
|
||||||
<b-switch v-model="showUpcoming">{{
|
<o-switch v-model="showUpcoming">{{
|
||||||
showUpcoming ? $t("Upcoming events") : $t("Past events")
|
showUpcoming ? $t("Upcoming events") : $t("Past events")
|
||||||
}}</b-switch>
|
}}</o-switch>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field v-if="showUpcoming">
|
<o-field v-if="showUpcoming">
|
||||||
<b-checkbox v-model="showDrafts">{{ $t("Drafts") }}</b-checkbox>
|
<o-checkbox v-model="showDrafts">{{ $t("Drafts") }}</o-checkbox>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field v-if="showUpcoming">
|
<o-field v-if="showUpcoming">
|
||||||
<b-checkbox v-model="showAttending">{{
|
<o-checkbox v-model="showAttending">{{
|
||||||
$t("Attending")
|
$t("Attending")
|
||||||
}}</b-checkbox>
|
}}</o-checkbox>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-field v-if="showUpcoming">
|
<o-field v-if="showUpcoming">
|
||||||
<b-checkbox v-model="showMyGroups">{{
|
<o-checkbox v-model="showMyGroups">{{
|
||||||
$t("From my groups")
|
$t("From my groups")
|
||||||
}}</b-checkbox>
|
}}</o-checkbox>
|
||||||
</b-field>
|
</o-field>
|
||||||
<p v-if="!showUpcoming">
|
<p v-if="!showUpcoming">
|
||||||
{{
|
{{
|
||||||
$tc(
|
$tc(
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</p>
|
</p>
|
||||||
<b-field
|
<o-field
|
||||||
class="date-filter"
|
class="date-filter"
|
||||||
expanded
|
expanded
|
||||||
:label="
|
:label="
|
||||||
|
@ -59,15 +59,15 @@
|
||||||
: $t('Showing events before')
|
: $t('Showing events before')
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-datepicker v-model="dateFilter" />
|
<o-datepicker v-model="dateFilter" />
|
||||||
<b-button
|
<o-button
|
||||||
@click="dateFilter = new Date()"
|
@click="dateFilter = new Date()"
|
||||||
class="reset-area"
|
class="reset-area"
|
||||||
icon-left="close"
|
icon-left="close"
|
||||||
:title="$t('Clear date filter field')"
|
:title="$t('Clear date filter field')"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
</b-field>
|
</o-field>
|
||||||
</div>
|
</div>
|
||||||
<div class="my-events">
|
<div class="my-events">
|
||||||
<section
|
<section
|
||||||
|
@ -108,7 +108,7 @@
|
||||||
</div>
|
</div>
|
||||||
</transition-group>
|
</transition-group>
|
||||||
<div class="columns is-centered">
|
<div class="columns is-centered">
|
||||||
<b-button
|
<o-button
|
||||||
class="column is-narrow"
|
class="column is-narrow"
|
||||||
v-if="
|
v-if="
|
||||||
hasMoreFutureParticipations &&
|
hasMoreFutureParticipations &&
|
||||||
|
@ -118,7 +118,7 @@
|
||||||
@click="loadMoreFutureParticipations"
|
@click="loadMoreFutureParticipations"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Load more") }}</b-button
|
>{{ $t("Load more") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
@ -172,7 +172,7 @@
|
||||||
</div>
|
</div>
|
||||||
</transition-group>
|
</transition-group>
|
||||||
<div class="columns is-centered">
|
<div class="columns is-centered">
|
||||||
<b-button
|
<o-button
|
||||||
class="column is-narrow"
|
class="column is-narrow"
|
||||||
v-if="
|
v-if="
|
||||||
hasMorePastParticipations &&
|
hasMorePastParticipations &&
|
||||||
|
@ -181,7 +181,7 @@
|
||||||
@click="loadMorePastParticipations"
|
@click="loadMorePastParticipations"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Load more") }}</b-button
|
>{{ $t("Load more") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -31,8 +31,8 @@
|
||||||
<div class="level">
|
<div class="level">
|
||||||
<div class="level-left">
|
<div class="level-left">
|
||||||
<div class="level-item">
|
<div class="level-item">
|
||||||
<b-field :label="$t('Status')" horizontal label-for="role-select">
|
<o-field :label="$t('Status')" horizontal label-for="role-select">
|
||||||
<b-select v-model="role" id="role-select">
|
<o-select v-model="role" id="role-select">
|
||||||
<option :value="null">
|
<option :value="null">
|
||||||
{{ $t("Everything") }}
|
{{ $t("Everything") }}
|
||||||
</option>
|
</option>
|
||||||
|
@ -48,20 +48,20 @@
|
||||||
<option :value="ParticipantRole.REJECTED">
|
<option :value="ParticipantRole.REJECTED">
|
||||||
{{ $t("Rejected") }}
|
{{ $t("Rejected") }}
|
||||||
</option>
|
</option>
|
||||||
</b-select>
|
</o-select>
|
||||||
</b-field>
|
</o-field>
|
||||||
</div>
|
</div>
|
||||||
<div class="level-item" v-if="exportFormats.length > 0">
|
<div class="level-item" v-if="exportFormats.length > 0">
|
||||||
<b-dropdown aria-role="list">
|
<o-dropdown aria-role="list">
|
||||||
<template #trigger="{ active }">
|
<template #trigger="{ active }">
|
||||||
<b-button
|
<o-button
|
||||||
:label="$t('Export')"
|
:label="$t('Export')"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
:icon-right="active ? 'menu-up' : 'menu-down'"
|
:icon-right="active ? 'menu-up' : 'menu-down'"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
has-link
|
has-link
|
||||||
v-for="format in exportFormats"
|
v-for="format in exportFormats"
|
||||||
:key="format"
|
:key="format"
|
||||||
|
@ -70,15 +70,15 @@
|
||||||
@keyup.enter="exportParticipants(format)"
|
@keyup.enter="exportParticipants(format)"
|
||||||
>
|
>
|
||||||
<button class="dropdown-button">
|
<button class="dropdown-button">
|
||||||
<b-icon :icon="formatToIcon(format)"></b-icon>
|
<o-icon :icon="formatToIcon(format)"></o-icon>
|
||||||
{{ format }}
|
{{ format }}
|
||||||
</button>
|
</button>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<b-table
|
<o-table
|
||||||
:data="event.participants.elements"
|
:data="event.participants.elements"
|
||||||
ref="queueTable"
|
ref="queueTable"
|
||||||
detailed
|
detailed
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
@page-change="(newPage) => (page = newPage)"
|
@page-change="(newPage) => (page = newPage)"
|
||||||
@sort="(field, order) => $emit('sort', field, order)"
|
@sort="(field, order) => $emit('sort', field, order)"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="actor.preferredUsername"
|
field="actor.preferredUsername"
|
||||||
:label="$t('Participant')"
|
:label="$t('Participant')"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
|
@ -116,13 +116,13 @@
|
||||||
>
|
>
|
||||||
<img class="is-rounded" :src="props.row.actor.avatar.url" alt="" />
|
<img class="is-rounded" :src="props.row.actor.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else-if="props.row.actor.preferredUsername === 'anonymous'"
|
v-else-if="props.row.actor.preferredUsername === 'anonymous'"
|
||||||
size="is-large"
|
size="is-large"
|
||||||
icon="incognito"
|
icon="incognito"
|
||||||
/>
|
/>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else
|
v-else
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
@ -145,34 +145,34 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="role" :label="$t('Role')" v-slot="props">
|
<o-table-column field="role" :label="$t('Role')" v-slot="props">
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
v-if="props.row.role === ParticipantRole.CREATOR"
|
v-if="props.row.role === ParticipantRole.CREATOR"
|
||||||
>
|
>
|
||||||
{{ $t("Organizer") }}
|
{{ $t("Organizer") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag v-else-if="props.row.role === ParticipantRole.PARTICIPANT">
|
<o-tag v-else-if="props.row.role === ParticipantRole.PARTICIPANT">
|
||||||
{{ $t("Participant") }}
|
{{ $t("Participant") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag v-else-if="props.row.role === ParticipantRole.NOT_CONFIRMED">
|
<o-tag v-else-if="props.row.role === ParticipantRole.NOT_CONFIRMED">
|
||||||
{{ $t("Not confirmed") }}
|
{{ $t("Not confirmed") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
v-else-if="props.row.role === ParticipantRole.NOT_APPROVED"
|
v-else-if="props.row.role === ParticipantRole.NOT_APPROVED"
|
||||||
>
|
>
|
||||||
{{ $t("Not approved") }}
|
{{ $t("Not approved") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-else-if="props.row.role === ParticipantRole.REJECTED"
|
v-else-if="props.row.role === ParticipantRole.REJECTED"
|
||||||
>
|
>
|
||||||
{{ $t("Rejected") }}
|
{{ $t("Rejected") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="metadata.message"
|
field="metadata.message"
|
||||||
class="column-message"
|
class="column-message"
|
||||||
:label="$t('Message')"
|
:label="$t('Message')"
|
||||||
|
@ -206,14 +206,14 @@
|
||||||
<p v-else class="has-text-grey-dark">
|
<p v-else class="has-text-grey-dark">
|
||||||
{{ $t("No message") }}
|
{{ $t("No message") }}
|
||||||
</p>
|
</p>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
<o-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
||||||
<span class="has-text-centered">
|
<span class="has-text-centered">
|
||||||
{{ props.row.insertedAt | formatDateString }}<br />{{
|
{{ props.row.insertedAt | formatDateString }}<br />{{
|
||||||
props.row.insertedAt | formatTimeString
|
props.row.insertedAt | formatTimeString
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template #detail="props">
|
<template #detail="props">
|
||||||
<article v-html="nl2br(props.row.metadata.message)" />
|
<article v-html="nl2br(props.row.metadata.message)" />
|
||||||
</template>
|
</template>
|
||||||
|
@ -226,7 +226,7 @@
|
||||||
</template>
|
</template>
|
||||||
<template slot="bottom-left">
|
<template slot="bottom-left">
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
@click="acceptParticipants(checkedRows)"
|
@click="acceptParticipants(checkedRows)"
|
||||||
type="is-success"
|
type="is-success"
|
||||||
:disabled="!canAcceptParticipants"
|
:disabled="!canAcceptParticipants"
|
||||||
|
@ -238,8 +238,8 @@
|
||||||
{ number: checkedRows.length }
|
{ number: checkedRows.length }
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-button>
|
</o-button>
|
||||||
<b-button
|
<o-button
|
||||||
@click="refuseParticipants(checkedRows)"
|
@click="refuseParticipants(checkedRows)"
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
:disabled="!canRefuseParticipants"
|
:disabled="!canRefuseParticipants"
|
||||||
|
@ -251,10 +251,10 @@
|
||||||
{ number: checkedRows.length }
|
{ number: checkedRows.length }
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -2,33 +2,33 @@
|
||||||
<section class="section container">
|
<section class="section container">
|
||||||
<h1 class="title">{{ $t("Create a new group") }}</h1>
|
<h1 class="title">{{ $t("Create a new group") }}</h1>
|
||||||
|
|
||||||
<b-message type="is-danger" v-for="(value, index) in errors" :key="index">
|
<o-message type="is-danger" v-for="(value, index) in errors" :key="index">
|
||||||
{{ value }}
|
{{ value }}
|
||||||
</b-message>
|
</o-message>
|
||||||
|
|
||||||
<form @submit.prevent="createGroup">
|
<form @submit.prevent="createGroup">
|
||||||
<b-field :label="$t('Group display name')" label-for="group-display-name">
|
<o-field :label="$t('Group display name')" label-for="group-display-name">
|
||||||
<b-input
|
<o-input
|
||||||
aria-required="true"
|
aria-required="true"
|
||||||
required
|
required
|
||||||
v-model="group.name"
|
v-model="group.name"
|
||||||
id="group-display-name"
|
id="group-display-name"
|
||||||
/>
|
/>
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="label" for="group-preferred-username">{{
|
<label class="label" for="group-preferred-username">{{
|
||||||
$t("Federated Group Name")
|
$t("Federated Group Name")
|
||||||
}}</label>
|
}}</label>
|
||||||
<div class="field-body">
|
<div class="field-body">
|
||||||
<b-field
|
<o-field
|
||||||
:message="
|
:message="
|
||||||
$t(
|
$t(
|
||||||
'Only alphanumeric lowercased characters and underscores are supported.'
|
'Only alphanumeric lowercased characters and underscores are supported.'
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<b-input
|
<o-input
|
||||||
ref="preferredUsernameInput"
|
ref="preferredUsernameInput"
|
||||||
aria-required="true"
|
aria-required="true"
|
||||||
required
|
required
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<span class="button is-static">@{{ host }}</span>
|
<span class="button is-static">@{{ host }}</span>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
</div>
|
</div>
|
||||||
<p
|
<p
|
||||||
v-html="
|
v-html="
|
||||||
|
@ -60,9 +60,9 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<b-field :label="$t('Description')" label-for="group-summary">
|
<o-field :label="$t('Description')" label-for="group-summary">
|
||||||
<b-input v-model="group.summary" type="textarea" id="group-summary" />
|
<o-input v-model="group.summary" type="textarea" id="group-summary" />
|
||||||
</b-field>
|
</o-field>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<b>{{ $t("Avatar") }}</b>
|
<b>{{ $t("Avatar") }}</b>
|
||||||
|
|
|
@ -18,11 +18,11 @@
|
||||||
}"
|
}"
|
||||||
>{{ group.name }}</router-link
|
>{{ group.name }}</router-link
|
||||||
>
|
>
|
||||||
<b-skeleton v-else :animated="true"></b-skeleton>
|
<o-skeleton v-else :animated="true"></o-skeleton>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<b-loading :active.sync="$apollo.loading"></b-loading>
|
<o-loading :active.sync="$apollo.loading"></o-loading>
|
||||||
<header class="block-container presentation" v-if="group">
|
<header class="block-container presentation" v-if="group">
|
||||||
<div class="banner-container">
|
<div class="banner-container">
|
||||||
<lazy-image-wrapper :picture="group.banner" />
|
<lazy-image-wrapper :picture="group.banner" />
|
||||||
|
@ -32,18 +32,18 @@
|
||||||
<figure class="image is-128x128" v-if="group.avatar">
|
<figure class="image is-128x128" v-if="group.avatar">
|
||||||
<img class="is-rounded" :src="group.avatar.url" alt="" />
|
<img class="is-rounded" :src="group.avatar.url" alt="" />
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon v-else size="is-large" icon="account-group" />
|
<o-icon v-else size="is-large" icon="account-group" />
|
||||||
</div>
|
</div>
|
||||||
<div class="title-container">
|
<div class="title-container">
|
||||||
<h1 v-if="group.name">{{ group.name }}</h1>
|
<h1 v-if="group.name">{{ group.name }}</h1>
|
||||||
<b-skeleton v-else :animated="true" />
|
<o-skeleton v-else :animated="true" />
|
||||||
<small
|
<small
|
||||||
dir="ltr"
|
dir="ltr"
|
||||||
class="has-text-grey-dark"
|
class="has-text-grey-dark"
|
||||||
v-if="group.preferredUsername"
|
v-if="group.preferredUsername"
|
||||||
>@{{ usernameWithDomain(group) }}</small
|
>@{{ usernameWithDomain(group) }}</small
|
||||||
>
|
>
|
||||||
<b-skeleton v-else :animated="true" />
|
<o-skeleton v-else :animated="true" />
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
<div class="group-metadata">
|
<div class="group-metadata">
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
v-if="member.actor.avatar"
|
v-if="member.actor.avatar"
|
||||||
alt
|
alt
|
||||||
/>
|
/>
|
||||||
<b-icon v-else size="is-medium" icon="account-circle" />
|
<o-icon v-else size="is-medium" icon="account-circle" />
|
||||||
</figure>
|
</figure>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
outlined
|
outlined
|
||||||
icon-left="timeline-text"
|
icon-left="timeline-text"
|
||||||
v-if="isCurrentActorAGroupMember && !previewPublic"
|
v-if="isCurrentActorAGroupMember && !previewPublic"
|
||||||
|
@ -98,9 +98,9 @@
|
||||||
name: RouteName.TIMELINE,
|
name: RouteName.TIMELINE,
|
||||||
params: { preferredUsername: usernameWithDomain(group) },
|
params: { preferredUsername: usernameWithDomain(group) },
|
||||||
}"
|
}"
|
||||||
>{{ $t("Activity") }}</b-button
|
>{{ $t("Activity") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
outlined
|
outlined
|
||||||
icon-left="cog"
|
icon-left="cog"
|
||||||
v-if="isCurrentActorAGroupAdmin && !previewPublic"
|
v-if="isCurrentActorAGroupAdmin && !previewPublic"
|
||||||
|
@ -109,9 +109,9 @@
|
||||||
name: RouteName.GROUP_PUBLIC_SETTINGS,
|
name: RouteName.GROUP_PUBLIC_SETTINGS,
|
||||||
params: { preferredUsername: usernameWithDomain(group) },
|
params: { preferredUsername: usernameWithDomain(group) },
|
||||||
}"
|
}"
|
||||||
>{{ $t("Group settings") }}</b-button
|
>{{ $t("Group settings") }}</o-button
|
||||||
>
|
>
|
||||||
<b-tooltip
|
<o-tooltip
|
||||||
v-if="
|
v-if="
|
||||||
(!isCurrentActorAGroupMember || previewPublic) &&
|
(!isCurrentActorAGroupMember || previewPublic) &&
|
||||||
group.openness === Openness.INVITE_ONLY
|
group.openness === Openness.INVITE_ONLY
|
||||||
|
@ -119,11 +119,11 @@
|
||||||
:label="$t('This group is invite-only')"
|
:label="$t('This group is invite-only')"
|
||||||
position="is-bottom"
|
position="is-bottom"
|
||||||
>
|
>
|
||||||
<b-button disabled type="is-primary">{{
|
<o-button disabled type="is-primary">{{
|
||||||
$t("Join group")
|
$t("Join group")
|
||||||
}}</b-button></b-tooltip
|
}}</o-button></o-tooltip
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
v-else-if="
|
v-else-if="
|
||||||
((!isCurrentActorAGroupMember &&
|
((!isCurrentActorAGroupMember &&
|
||||||
!isCurrentActorAPendingGroupMember) ||
|
!isCurrentActorAPendingGroupMember) ||
|
||||||
|
@ -134,17 +134,17 @@
|
||||||
@keyup.enter="joinGroup"
|
@keyup.enter="joinGroup"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
:disabled="previewPublic"
|
:disabled="previewPublic"
|
||||||
>{{ $t("Join group") }}</b-button
|
>{{ $t("Join group") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
outlined
|
outlined
|
||||||
v-else-if="isCurrentActorAPendingGroupMember"
|
v-else-if="isCurrentActorAPendingGroupMember"
|
||||||
@click="leaveGroup"
|
@click="leaveGroup"
|
||||||
@keyup.enter="leaveGroup"
|
@keyup.enter="leaveGroup"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Cancel membership request") }}</b-button
|
>{{ $t("Cancel membership request") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{
|
:to="{
|
||||||
name: RouteName.GROUP_JOIN,
|
name: RouteName.GROUP_JOIN,
|
||||||
|
@ -153,9 +153,9 @@
|
||||||
v-else-if="!isCurrentActorAGroupMember || previewPublic"
|
v-else-if="!isCurrentActorAGroupMember || previewPublic"
|
||||||
:disabled="previewPublic"
|
:disabled="previewPublic"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Join group") }}</b-button
|
>{{ $t("Join group") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
v-if="
|
v-if="
|
||||||
((!isCurrentActorFollowing && !isCurrentActorAGroupMember) ||
|
((!isCurrentActorFollowing && !isCurrentActorAGroupMember) ||
|
||||||
previewPublic) &&
|
previewPublic) &&
|
||||||
|
@ -166,9 +166,9 @@
|
||||||
@keyup.enter="followGroup"
|
@keyup.enter="followGroup"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
:disabled="isCurrentActorPendingFollow"
|
:disabled="isCurrentActorPendingFollow"
|
||||||
>{{ $t("Follow") }}</b-button
|
>{{ $t("Follow") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
tag="router-link"
|
tag="router-link"
|
||||||
:to="{
|
:to="{
|
||||||
name: RouteName.GROUP_FOLLOW,
|
name: RouteName.GROUP_FOLLOW,
|
||||||
|
@ -181,24 +181,24 @@
|
||||||
"
|
"
|
||||||
:disabled="previewPublic"
|
:disabled="previewPublic"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Follow") }}</b-button
|
>{{ $t("Follow") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
outlined
|
outlined
|
||||||
v-if="isCurrentActorPendingFollow && currentActor.id"
|
v-if="isCurrentActorPendingFollow && currentActor.id"
|
||||||
@click="unFollowGroup"
|
@click="unFollowGroup"
|
||||||
@keyup.enter="unFollowGroup"
|
@keyup.enter="unFollowGroup"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
>{{ $t("Cancel follow request") }}</b-button
|
>{{ $t("Cancel follow request") }}</o-button
|
||||||
><b-button
|
><o-button
|
||||||
v-if="
|
v-if="
|
||||||
isCurrentActorFollowing && !previewPublic && currentActor.id
|
isCurrentActorFollowing && !previewPublic && currentActor.id
|
||||||
"
|
"
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
@click="unFollowGroup"
|
@click="unFollowGroup"
|
||||||
>{{ $t("Unfollow") }}</b-button
|
>{{ $t("Unfollow") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
v-if="isCurrentActorFollowing"
|
v-if="isCurrentActorFollowing"
|
||||||
@click="toggleFollowNotify"
|
@click="toggleFollowNotify"
|
||||||
@keyup.enter="toggleFollowNotify"
|
@keyup.enter="toggleFollowNotify"
|
||||||
|
@ -207,8 +207,8 @@
|
||||||
? 'bell-outline'
|
? 'bell-outline'
|
||||||
: 'bell-off-outline'
|
: 'bell-off-outline'
|
||||||
"
|
"
|
||||||
></b-button>
|
></o-button>
|
||||||
<b-button
|
<o-button
|
||||||
outlined
|
outlined
|
||||||
icon-left="share"
|
icon-left="share"
|
||||||
@click="triggerShare()"
|
@click="triggerShare()"
|
||||||
|
@ -216,95 +216,95 @@
|
||||||
v-if="!isCurrentActorAGroupMember || previewPublic"
|
v-if="!isCurrentActorAGroupMember || previewPublic"
|
||||||
>
|
>
|
||||||
{{ $t("Share") }}
|
{{ $t("Share") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
<b-dropdown
|
<o-dropdown
|
||||||
class="menu-dropdown"
|
class="menu-dropdown"
|
||||||
position="is-bottom-left"
|
position="is-bottom-left"
|
||||||
aria-role="menu"
|
aria-role="menu"
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
slot="trigger"
|
slot="trigger"
|
||||||
outlined
|
outlined
|
||||||
role="button"
|
role="button"
|
||||||
icon-left="dots-horizontal"
|
icon-left="dots-horizontal"
|
||||||
:aria-label="$t('Other actions')"
|
:aria-label="$t('Other actions')"
|
||||||
/>
|
/>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
aria-role="menuitem"
|
aria-role="menuitem"
|
||||||
v-if="isCurrentActorAGroupMember || previewPublic"
|
v-if="isCurrentActorAGroupMember || previewPublic"
|
||||||
>
|
>
|
||||||
<b-switch v-model="previewPublic">{{
|
<o-switch v-model="previewPublic">{{
|
||||||
$t("Public preview")
|
$t("Public preview")
|
||||||
}}</b-switch>
|
}}</o-switch>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
v-if="!previewPublic && isCurrentActorAGroupMember"
|
v-if="!previewPublic && isCurrentActorAGroupMember"
|
||||||
aria-role="menuitem"
|
aria-role="menuitem"
|
||||||
@click="triggerShare()"
|
@click="triggerShare()"
|
||||||
@keyup.enter="triggerShare()"
|
@keyup.enter="triggerShare()"
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
<b-icon icon="share" />
|
<o-icon icon="share" />
|
||||||
{{ $t("Share") }}
|
{{ $t("Share") }}
|
||||||
</span>
|
</span>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<hr
|
<hr
|
||||||
role="presentation"
|
role="presentation"
|
||||||
class="dropdown-divider"
|
class="dropdown-divider"
|
||||||
v-if="isCurrentActorAGroupMember"
|
v-if="isCurrentActorAGroupMember"
|
||||||
/>
|
/>
|
||||||
<b-dropdown-item has-link aria-role="menuitem">
|
<o-dropdown-item has-link aria-role="menuitem">
|
||||||
<a
|
<a
|
||||||
:href="`@${preferredUsername}/feed/atom`"
|
:href="`@${preferredUsername}/feed/atom`"
|
||||||
:title="$t('Atom feed for events and posts')"
|
:title="$t('Atom feed for events and posts')"
|
||||||
>
|
>
|
||||||
<b-icon icon="rss" />
|
<o-icon icon="rss" />
|
||||||
{{ $t("RSS/Atom Feed") }}
|
{{ $t("RSS/Atom Feed") }}
|
||||||
</a>
|
</a>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item has-link aria-role="menuitem">
|
<o-dropdown-item has-link aria-role="menuitem">
|
||||||
<a
|
<a
|
||||||
:href="`@${preferredUsername}/feed/ics`"
|
:href="`@${preferredUsername}/feed/ics`"
|
||||||
:title="$t('ICS feed for events')"
|
:title="$t('ICS feed for events')"
|
||||||
>
|
>
|
||||||
<b-icon icon="calendar-sync" />
|
<o-icon icon="calendar-sync" />
|
||||||
{{ $t("ICS/WebCal Feed") }}
|
{{ $t("ICS/WebCal Feed") }}
|
||||||
</a>
|
</a>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<hr role="presentation" class="dropdown-divider" />
|
<hr role="presentation" class="dropdown-divider" />
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
v-if="ableToReport"
|
v-if="ableToReport"
|
||||||
aria-role="menuitem"
|
aria-role="menuitem"
|
||||||
@click="isReportModalActive = true"
|
@click="isReportModalActive = true"
|
||||||
@keyup.enter="isReportModalActive = true"
|
@keyup.enter="isReportModalActive = true"
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
<b-icon icon="flag" />
|
<o-icon icon="flag" />
|
||||||
{{ $t("Report") }}
|
{{ $t("Report") }}
|
||||||
</span>
|
</span>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
<b-dropdown-item
|
<o-dropdown-item
|
||||||
aria-role="menuitem"
|
aria-role="menuitem"
|
||||||
v-if="isCurrentActorAGroupMember && !previewPublic"
|
v-if="isCurrentActorAGroupMember && !previewPublic"
|
||||||
@click="openLeaveGroupModal"
|
@click="openLeaveGroupModal"
|
||||||
@keyup.enter="openLeaveGroupModal"
|
@keyup.enter="openLeaveGroupModal"
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
<b-icon icon="exit-to-app" />
|
<o-icon icon="exit-to-app" />
|
||||||
{{ $t("Leave") }}
|
{{ $t("Leave") }}
|
||||||
</span>
|
</span>
|
||||||
</b-dropdown-item>
|
</o-dropdown-item>
|
||||||
</b-dropdown>
|
</o-dropdown>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<invitations
|
<invitations
|
||||||
v-if="isCurrentActorAnInvitedGroupMember"
|
v-if="isCurrentActorAnInvitedGroupMember"
|
||||||
:invitations="[groupMember]"
|
:invitations="[groupMember]"
|
||||||
/>
|
/>
|
||||||
<b-message v-if="isCurrentActorARejectedGroupMember" type="is-danger">
|
<o-message v-if="isCurrentActorARejectedGroupMember" type="is-danger">
|
||||||
{{ $t("You have been removed from this group's members.") }}
|
{{ $t("You have been removed from this group's members.") }}
|
||||||
</b-message>
|
</o-message>
|
||||||
<b-message
|
<o-message
|
||||||
v-if="
|
v-if="
|
||||||
isCurrentActorAGroupMember &&
|
isCurrentActorAGroupMember &&
|
||||||
isCurrentActorARecentMember &&
|
isCurrentActorARecentMember &&
|
||||||
|
@ -317,8 +317,8 @@
|
||||||
"Since you are a new member, private content can take a few minutes to appear."
|
"Since you are a new member, private content can take a few minutes to appear."
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</b-message>
|
</o-message>
|
||||||
<b-message
|
<o-message
|
||||||
v-if="
|
v-if="
|
||||||
!isCurrentActorAGroupMember &&
|
!isCurrentActorAGroupMember &&
|
||||||
!isCurrentActorAPendingGroupMember &&
|
!isCurrentActorAPendingGroupMember &&
|
||||||
|
@ -339,7 +339,7 @@
|
||||||
$t("access to the group's private content as well")
|
$t("access to the group's private content as well")
|
||||||
}}</b>
|
}}</b>
|
||||||
</i18n>
|
</i18n>
|
||||||
</b-message>
|
</o-message>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
</div>
|
</div>
|
||||||
|
@ -452,7 +452,7 @@
|
||||||
<empty-content v-else-if="group" icon="calendar" :inline="true">
|
<empty-content v-else-if="group" icon="calendar" :inline="true">
|
||||||
{{ $t("No public upcoming events") }}
|
{{ $t("No public upcoming events") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
<b-skeleton animated v-else></b-skeleton>
|
<o-skeleton animated v-else></o-skeleton>
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:create>
|
<template v-slot:create>
|
||||||
<router-link
|
<router-link
|
||||||
|
@ -500,13 +500,13 @@
|
||||||
</group-section>
|
</group-section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<b-message v-else-if="!group && $apollo.loading === false" type="is-danger">
|
<o-message v-else-if="!group && $apollo.loading === false" type="is-danger">
|
||||||
{{ $t("No group found") }}
|
{{ $t("No group found") }}
|
||||||
</b-message>
|
</o-message>
|
||||||
<div v-else-if="group" class="public-container">
|
<div v-else-if="group" class="public-container">
|
||||||
<aside class="group-metadata">
|
<aside class="group-metadata">
|
||||||
<div class="sticky">
|
<div class="sticky">
|
||||||
<b-message v-if="group.domain && !isCurrentActorAGroupMember">
|
<o-message v-if="group.domain && !isCurrentActorAGroupMember">
|
||||||
{{
|
{{
|
||||||
$t(
|
$t(
|
||||||
"This profile is from another instance, the informations shown here may be incomplete."
|
"This profile is from another instance, the informations shown here may be incomplete."
|
||||||
|
@ -515,7 +515,7 @@
|
||||||
<a :href="group.url" rel="noopener noreferrer external">{{
|
<a :href="group.url" rel="noopener noreferrer external">{{
|
||||||
$t("View full profile")
|
$t("View full profile")
|
||||||
}}</a>
|
}}</a>
|
||||||
</b-message>
|
</o-message>
|
||||||
<event-metadata-block :title="$t('Members')" icon="account-group">
|
<event-metadata-block :title="$t('Members')" icon="account-group">
|
||||||
{{
|
{{
|
||||||
$tc("{count} members", group.members.total, {
|
$tc("{count} members", group.members.total, {
|
||||||
|
@ -548,7 +548,7 @@
|
||||||
</p>
|
</p>
|
||||||
</address>
|
</address>
|
||||||
</div>
|
</div>
|
||||||
<b-button
|
<o-button
|
||||||
class="map-show-button"
|
class="map-show-button"
|
||||||
type="is-text"
|
type="is-text"
|
||||||
@click="showMap = !showMap"
|
@click="showMap = !showMap"
|
||||||
|
@ -556,7 +556,7 @@
|
||||||
v-if="physicalAddress.geom"
|
v-if="physicalAddress.geom"
|
||||||
>
|
>
|
||||||
{{ $t("Show map") }}
|
{{ $t("Show map") }}
|
||||||
</b-button>
|
</o-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</event-metadata-block>
|
</event-metadata-block>
|
||||||
|
@ -602,7 +602,7 @@
|
||||||
</i18n>
|
</i18n>
|
||||||
</template>
|
</template>
|
||||||
</empty-content>
|
</empty-content>
|
||||||
<b-skeleton animated v-else-if="$apollo.loading"></b-skeleton>
|
<o-skeleton animated v-else-if="$apollo.loading"></o-skeleton>
|
||||||
<router-link
|
<router-link
|
||||||
v-if="organizedEvents.total > 0"
|
v-if="organizedEvents.total > 0"
|
||||||
:to="{
|
:to="{
|
||||||
|
@ -633,7 +633,7 @@
|
||||||
<empty-content v-else-if="group" icon="bullhorn" :inline="true">
|
<empty-content v-else-if="group" icon="bullhorn" :inline="true">
|
||||||
{{ $t("No posts yet") }}
|
{{ $t("No posts yet") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
<b-skeleton animated v-else-if="$apollo.loading"></b-skeleton>
|
<o-skeleton animated v-else-if="$apollo.loading"></o-skeleton>
|
||||||
<router-link
|
<router-link
|
||||||
v-if="posts.total > 0"
|
v-if="posts.total > 0"
|
||||||
:to="{
|
:to="{
|
||||||
|
@ -644,7 +644,7 @@
|
||||||
>
|
>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
<b-modal
|
<o-modal
|
||||||
v-if="physicalAddress && physicalAddress.geom"
|
v-if="physicalAddress && physicalAddress.geom"
|
||||||
:active.sync="showMap"
|
:active.sync="showMap"
|
||||||
:close-button-aria-label="$t('Close')"
|
:close-button-aria-label="$t('Close')"
|
||||||
|
@ -658,9 +658,9 @@
|
||||||
}"
|
}"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
</div>
|
</div>
|
||||||
<b-modal
|
<o-modal
|
||||||
:close-button-aria-label="$t('Close')"
|
:close-button-aria-label="$t('Close')"
|
||||||
:active.sync="isReportModalActive"
|
:active.sync="isReportModalActive"
|
||||||
has-modal-card
|
has-modal-card
|
||||||
|
@ -673,8 +673,8 @@
|
||||||
:outside-domain="group.domain"
|
:outside-domain="group.domain"
|
||||||
@close="$refs.reportModal.close()"
|
@close="$refs.reportModal.close()"
|
||||||
/>
|
/>
|
||||||
</b-modal>
|
</o-modal>
|
||||||
<b-modal
|
<o-modal
|
||||||
:close-button-aria-label="$t('Close')"
|
:close-button-aria-label="$t('Close')"
|
||||||
v-if="group"
|
v-if="group"
|
||||||
:active.sync="isShareModalActive"
|
:active.sync="isShareModalActive"
|
||||||
|
@ -682,7 +682,7 @@
|
||||||
ref="shareModal"
|
ref="shareModal"
|
||||||
>
|
>
|
||||||
<share-group-modal :group="group" />
|
<share-group-modal :group="group" />
|
||||||
</b-modal>
|
</o-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -31,16 +31,16 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<b-loading :active="$apollo.loading" />
|
<o-loading :active="$apollo.loading" />
|
||||||
<section
|
<section
|
||||||
class="container section"
|
class="container section"
|
||||||
v-if="group && isCurrentActorAGroupAdmin && followers"
|
v-if="group && isCurrentActorAGroupAdmin && followers"
|
||||||
>
|
>
|
||||||
<h1>{{ $t("Group Followers") }} ({{ followers.total }})</h1>
|
<h1>{{ $t("Group Followers") }} ({{ followers.total }})</h1>
|
||||||
<b-field :label="$t('Status')" horizontal>
|
<o-field :label="$t('Status')" horizontal>
|
||||||
<b-switch v-model="pending">{{ $t("Pending") }}</b-switch>
|
<o-switch v-model="pending">{{ $t("Pending") }}</o-switch>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-table
|
<o-table
|
||||||
:data="followers.elements"
|
:data="followers.elements"
|
||||||
ref="queueTable"
|
ref="queueTable"
|
||||||
:loading="this.$apollo.loading"
|
:loading="this.$apollo.loading"
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
@page-change="triggerLoadMoreFollowersPageChange"
|
@page-change="triggerLoadMoreFollowersPageChange"
|
||||||
@sort="(field, order) => $emit('sort', field, order)"
|
@sort="(field, order) => $emit('sort', field, order)"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="actor.preferredUsername"
|
field="actor.preferredUsername"
|
||||||
:label="$t('Follower')"
|
:label="$t('Follower')"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else
|
v-else
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
@ -94,41 +94,41 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
<o-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
||||||
<span class="has-text-centered">
|
<span class="has-text-centered">
|
||||||
{{ props.row.insertedAt | formatDateString }}<br />{{
|
{{ props.row.insertedAt | formatDateString }}<br />{{
|
||||||
props.row.insertedAt | formatTimeString
|
props.row.insertedAt | formatTimeString
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="actions" :label="$t('Actions')" v-slot="props">
|
<o-table-column field="actions" :label="$t('Actions')" v-slot="props">
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<b-button
|
<o-button
|
||||||
v-if="!props.row.approved"
|
v-if="!props.row.approved"
|
||||||
@click="updateFollower(props.row, true)"
|
@click="updateFollower(props.row, true)"
|
||||||
icon-left="check"
|
icon-left="check"
|
||||||
type="is-success"
|
type="is-success"
|
||||||
>{{ $t("Accept") }}</b-button
|
>{{ $t("Accept") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
@click="updateFollower(props.row, false)"
|
@click="updateFollower(props.row, false)"
|
||||||
icon-left="close"
|
icon-left="close"
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
>{{ $t("Reject") }}</b-button
|
>{{ $t("Reject") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="account" inline>
|
<empty-content icon="account" inline>
|
||||||
{{ $t("No follower matches the filters") }}
|
{{ $t("No follower matches the filters") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</section>
|
</section>
|
||||||
<b-message v-else-if="!$apollo.loading && group">
|
<o-message v-else-if="!$apollo.loading && group">
|
||||||
{{ $t("You are not an administrator for this group.") }}
|
{{ $t("You are not an administrator for this group.") }}
|
||||||
</b-message>
|
</o-message>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -31,19 +31,19 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<b-loading :active="$apollo.loading" />
|
<o-loading :active="$apollo.loading" />
|
||||||
<section
|
<section
|
||||||
class="container section"
|
class="container section"
|
||||||
v-if="group && isCurrentActorAGroupAdmin"
|
v-if="group && isCurrentActorAGroupAdmin"
|
||||||
>
|
>
|
||||||
<form @submit.prevent="inviteMember">
|
<form @submit.prevent="inviteMember">
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Invite a new member')"
|
:label="$t('Invite a new member')"
|
||||||
custom-class="add-relay"
|
custom-class="add-relay"
|
||||||
label-for="new-member-field"
|
label-for="new-member-field"
|
||||||
horizontal
|
horizontal
|
||||||
>
|
>
|
||||||
<b-field
|
<o-field
|
||||||
grouped
|
grouped
|
||||||
expanded
|
expanded
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
@ -51,27 +51,27 @@
|
||||||
:message="inviteError"
|
:message="inviteError"
|
||||||
>
|
>
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<b-input
|
<o-input
|
||||||
id="new-member-field"
|
id="new-member-field"
|
||||||
v-model="newMemberUsername"
|
v-model="newMemberUsername"
|
||||||
:placeholder="$t('Ex: someone@mobilizon.org')"
|
:placeholder="$t('Ex: someone@mobilizon.org')"
|
||||||
/>
|
/>
|
||||||
</p>
|
</p>
|
||||||
<p class="control">
|
<p class="control">
|
||||||
<b-button type="is-primary" native-type="submit">{{
|
<o-button type="is-primary" native-type="submit">{{
|
||||||
$t("Invite member")
|
$t("Invite member")
|
||||||
}}</b-button>
|
}}</o-button>
|
||||||
</p>
|
</p>
|
||||||
</b-field>
|
</o-field>
|
||||||
</b-field>
|
</o-field>
|
||||||
</form>
|
</form>
|
||||||
<h1>{{ $t("Group Members") }} ({{ group.members.total }})</h1>
|
<h1>{{ $t("Group Members") }} ({{ group.members.total }})</h1>
|
||||||
<b-field
|
<o-field
|
||||||
:label="$t('Status')"
|
:label="$t('Status')"
|
||||||
horizontal
|
horizontal
|
||||||
label-for="group-members-status-filter"
|
label-for="group-members-status-filter"
|
||||||
>
|
>
|
||||||
<b-select v-model="roles" id="group-members-status-filter">
|
<o-select v-model="roles" id="group-members-status-filter">
|
||||||
<option value="">
|
<option value="">
|
||||||
{{ $t("Everything") }}
|
{{ $t("Everything") }}
|
||||||
</option>
|
</option>
|
||||||
|
@ -93,9 +93,9 @@
|
||||||
<option :value="MemberRole.REJECTED">
|
<option :value="MemberRole.REJECTED">
|
||||||
{{ $t("Rejected") }}
|
{{ $t("Rejected") }}
|
||||||
</option>
|
</option>
|
||||||
</b-select>
|
</o-select>
|
||||||
</b-field>
|
</o-field>
|
||||||
<b-table
|
<o-table
|
||||||
v-if="members"
|
v-if="members"
|
||||||
:data="members.elements"
|
:data="members.elements"
|
||||||
ref="queueTable"
|
ref="queueTable"
|
||||||
|
@ -116,7 +116,7 @@
|
||||||
@page-change="triggerLoadMoreMemberPageChange"
|
@page-change="triggerLoadMoreMemberPageChange"
|
||||||
@sort="(field, order) => $emit('sort', field, order)"
|
@sort="(field, order) => $emit('sort', field, order)"
|
||||||
>
|
>
|
||||||
<b-table-column
|
<o-table-column
|
||||||
field="actor.preferredUsername"
|
field="actor.preferredUsername"
|
||||||
:label="$t('Member')"
|
:label="$t('Member')"
|
||||||
v-slot="props"
|
v-slot="props"
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
:alt="props.row.actor.avatar.alt || ''"
|
:alt="props.row.actor.avatar.alt || ''"
|
||||||
/>
|
/>
|
||||||
</figure>
|
</figure>
|
||||||
<b-icon
|
<o-icon
|
||||||
class="media-left"
|
class="media-left"
|
||||||
v-else
|
v-else
|
||||||
size="is-large"
|
size="is-large"
|
||||||
|
@ -150,66 +150,66 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="role" :label="$t('Role')" v-slot="props">
|
<o-table-column field="role" :label="$t('Role')" v-slot="props">
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
v-if="props.row.role === MemberRole.ADMINISTRATOR"
|
v-if="props.row.role === MemberRole.ADMINISTRATOR"
|
||||||
>
|
>
|
||||||
{{ $t("Administrator") }}
|
{{ $t("Administrator") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-primary"
|
type="is-primary"
|
||||||
v-else-if="props.row.role === MemberRole.MODERATOR"
|
v-else-if="props.row.role === MemberRole.MODERATOR"
|
||||||
>
|
>
|
||||||
{{ $t("Moderator") }}
|
{{ $t("Moderator") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag v-else-if="props.row.role === MemberRole.MEMBER">
|
<o-tag v-else-if="props.row.role === MemberRole.MEMBER">
|
||||||
{{ $t("Member") }}
|
{{ $t("Member") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
v-else-if="props.row.role === MemberRole.NOT_APPROVED"
|
v-else-if="props.row.role === MemberRole.NOT_APPROVED"
|
||||||
>
|
>
|
||||||
{{ $t("Not approved") }}
|
{{ $t("Not approved") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-else-if="props.row.role === MemberRole.REJECTED"
|
v-else-if="props.row.role === MemberRole.REJECTED"
|
||||||
>
|
>
|
||||||
{{ $t("Rejected") }}
|
{{ $t("Rejected") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
<b-tag
|
<o-tag
|
||||||
type="is-warning"
|
type="is-warning"
|
||||||
v-else-if="props.row.role === MemberRole.INVITED"
|
v-else-if="props.row.role === MemberRole.INVITED"
|
||||||
>
|
>
|
||||||
{{ $t("Invited") }}
|
{{ $t("Invited") }}
|
||||||
</b-tag>
|
</o-tag>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
<o-table-column field="insertedAt" :label="$t('Date')" v-slot="props">
|
||||||
<span class="has-text-centered">
|
<span class="has-text-centered">
|
||||||
{{ props.row.insertedAt | formatDateString }}<br />{{
|
{{ props.row.insertedAt | formatDateString }}<br />{{
|
||||||
props.row.insertedAt | formatTimeString
|
props.row.insertedAt | formatTimeString
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<b-table-column field="actions" :label="$t('Actions')" v-slot="props">
|
<o-table-column field="actions" :label="$t('Actions')" v-slot="props">
|
||||||
<div class="buttons" v-if="props.row.actor.id !== currentActor.id">
|
<div class="buttons" v-if="props.row.actor.id !== currentActor.id">
|
||||||
<b-button
|
<o-button
|
||||||
type="is-success"
|
type="is-success"
|
||||||
v-if="props.row.role === MemberRole.NOT_APPROVED"
|
v-if="props.row.role === MemberRole.NOT_APPROVED"
|
||||||
@click="approveMember(props.row)"
|
@click="approveMember(props.row)"
|
||||||
icon-left="check"
|
icon-left="check"
|
||||||
>{{ $t("Approve member") }}</b-button
|
>{{ $t("Approve member") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
v-if="props.row.role === MemberRole.NOT_APPROVED"
|
v-if="props.row.role === MemberRole.NOT_APPROVED"
|
||||||
@click="rejectMember(props.row)"
|
@click="rejectMember(props.row)"
|
||||||
icon-left="exit-to-app"
|
icon-left="exit-to-app"
|
||||||
>{{ $t("Reject member") }}</b-button
|
>{{ $t("Reject member") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
v-if="
|
v-if="
|
||||||
[MemberRole.MEMBER, MemberRole.MODERATOR].includes(
|
[MemberRole.MEMBER, MemberRole.MODERATOR].includes(
|
||||||
props.row.role
|
props.row.role
|
||||||
|
@ -217,9 +217,9 @@
|
||||||
"
|
"
|
||||||
@click="promoteMember(props.row)"
|
@click="promoteMember(props.row)"
|
||||||
icon-left="chevron-double-up"
|
icon-left="chevron-double-up"
|
||||||
>{{ $t("Promote") }}</b-button
|
>{{ $t("Promote") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
v-if="
|
v-if="
|
||||||
[MemberRole.ADMINISTRATOR, MemberRole.MODERATOR].includes(
|
[MemberRole.ADMINISTRATOR, MemberRole.MODERATOR].includes(
|
||||||
props.row.role
|
props.row.role
|
||||||
|
@ -227,27 +227,27 @@
|
||||||
"
|
"
|
||||||
@click="demoteMember(props.row)"
|
@click="demoteMember(props.row)"
|
||||||
icon-left="chevron-double-down"
|
icon-left="chevron-double-down"
|
||||||
>{{ $t("Demote") }}</b-button
|
>{{ $t("Demote") }}</o-button
|
||||||
>
|
>
|
||||||
<b-button
|
<o-button
|
||||||
v-if="props.row.role === MemberRole.MEMBER"
|
v-if="props.row.role === MemberRole.MEMBER"
|
||||||
@click="removeMember(props.row)"
|
@click="removeMember(props.row)"
|
||||||
type="is-danger"
|
type="is-danger"
|
||||||
icon-left="exit-to-app"
|
icon-left="exit-to-app"
|
||||||
>{{ $t("Remove") }}</b-button
|
>{{ $t("Remove") }}</o-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</b-table-column>
|
</o-table-column>
|
||||||
<template slot="empty">
|
<template slot="empty">
|
||||||
<empty-content icon="account" inline>
|
<empty-content icon="account" inline>
|
||||||
{{ $t("No member matches the filters") }}
|
{{ $t("No member matches the filters") }}
|
||||||
</empty-content>
|
</empty-content>
|
||||||
</template>
|
</template>
|
||||||
</b-table>
|
</o-table>
|
||||||
</section>
|
</section>
|
||||||
<b-message v-else-if="!$apollo.loading && group">
|
<o-message v-else-if="!$apollo.loading && group">
|
||||||
{{ $t("You are not an administrator for this group.") }}
|
{{ $t("You are not an administrator for this group.") }}
|
||||||
</b-message>
|
</o-message>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue