aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/boot/routes.js2
-rw-r--r--src/components/about/about.js13
-rw-r--r--src/components/about/about.vue12
-rw-r--r--src/components/registration/registration.vue2
-rw-r--r--src/components/side_drawer/side_drawer.vue5
-rw-r--r--src/components/terms_of_service_panel/terms_of_service_panel.js9
-rw-r--r--src/components/terms_of_service_panel/terms_of_service_panel.vue18
-rw-r--r--src/components/user_profile/user_profile.js6
-rw-r--r--src/components/user_profile/user_profile.vue2
-rw-r--r--src/components/who_to_follow_panel/who_to_follow_panel.js6
-rw-r--r--src/components/who_to_follow_panel/who_to_follow_panel.vue20
-rw-r--r--src/i18n/de.json175
-rw-r--r--src/i18n/en.json1
13 files changed, 250 insertions, 21 deletions
diff --git a/src/boot/routes.js b/src/boot/routes.js
index e892839c..05513794 100644
--- a/src/boot/routes.js
+++ b/src/boot/routes.js
@@ -16,6 +16,7 @@ import Notifications from 'components/notifications/notifications.vue'
import UserPanel from 'components/user_panel/user_panel.vue'
import LoginForm from 'components/login_form/login_form.vue'
import ChatPanel from 'components/chat_panel/chat_panel.vue'
+import About from 'components/about/about.vue'
export default (store) => {
return [
@@ -46,6 +47,7 @@ export default (store) => {
{ name: 'chat', path: '/chat', component: ChatPanel, props: () => ({ floating: false }) },
{ name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) },
{ name: 'user-search', path: '/user-search', component: UserSearch, props: (route) => ({ query: route.query.query }) },
+ { name: 'about', path: '/about', component: About },
{ name: 'user-profile', path: '/(users/)?:name', component: UserProfile }
]
}
diff --git a/src/components/about/about.js b/src/components/about/about.js
new file mode 100644
index 00000000..b4433b4e
--- /dev/null
+++ b/src/components/about/about.js
@@ -0,0 +1,13 @@
+import InstanceSpecificPanel from '../instance_specific_panel/instance_specific_panel.vue'
+import FeaturesPanel from '../features_panel/features_panel.vue'
+import TermsOfServicePanel from '../terms_of_service_panel/terms_of_service_panel.vue'
+
+const About = {
+ components: {
+ InstanceSpecificPanel,
+ FeaturesPanel,
+ TermsOfServicePanel
+ }
+}
+
+export default About
diff --git a/src/components/about/about.vue b/src/components/about/about.vue
new file mode 100644
index 00000000..bf87e0b8
--- /dev/null
+++ b/src/components/about/about.vue
@@ -0,0 +1,12 @@
+<template>
+ <div class="sidebar">
+ <instance-specific-panel></instance-specific-panel>
+ <features-panel></features-panel>
+ <terms-of-service-panel></terms-of-service-panel>
+ </div>
+</template>
+
+<script src="./about.js" ></script>
+
+<style lang="scss">
+</style>
diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue
index 1455354e..25c1a9d0 100644
--- a/src/components/registration/registration.vue
+++ b/src/components/registration/registration.vue
@@ -76,7 +76,7 @@
</div>
<div class="form-group" id="captcha-group" v-if="captcha.type != 'none'">
- <label class='form--label' for='captcha-label'>$t('captcha')</label>
+ <label class='form--label' for='captcha-label'>{{$t('captcha')}}</label>
<template v-if="captcha.type == 'kocaptcha'">
<img v-bind:src="captcha.url" v-on:click="setCaptcha">
diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue
index f5ccba67..7c792deb 100644
--- a/src/components/side_drawer/side_drawer.vue
+++ b/src/components/side_drawer/side_drawer.vue
@@ -71,6 +71,11 @@
{{ $t("settings.settings") }}
</router-link>
</li>
+ <li @click="toggleDrawer">
+ <router-link :to="{ name: 'about'}">
+ {{ $t("nav.about") }}
+ </router-link>
+ </li>
<li v-if="currentUser" @click="toggleDrawer">
<a @click="doLogout" href="#">
{{ $t("login.logout") }}
diff --git a/src/components/terms_of_service_panel/terms_of_service_panel.js b/src/components/terms_of_service_panel/terms_of_service_panel.js
new file mode 100644
index 00000000..4276f8f7
--- /dev/null
+++ b/src/components/terms_of_service_panel/terms_of_service_panel.js
@@ -0,0 +1,9 @@
+const TermsOfServicePanel = {
+ computed: {
+ content () {
+ return this.$store.state.instance.tos
+ }
+ }
+}
+
+export default TermsOfServicePanel
diff --git a/src/components/terms_of_service_panel/terms_of_service_panel.vue b/src/components/terms_of_service_panel/terms_of_service_panel.vue
new file mode 100644
index 00000000..eb0f2527
--- /dev/null
+++ b/src/components/terms_of_service_panel/terms_of_service_panel.vue
@@ -0,0 +1,18 @@
+<template>
+ <div>
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <div v-html="content" class="tos-content">
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script src="./terms_of_service_panel.js" ></script>
+
+<style lang="scss">
+.tos-content {
+ margin: 1em
+}
+</style>
diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js
index 2ca09817..bde20707 100644
--- a/src/components/user_profile/user_profile.js
+++ b/src/components/user_profile/user_profile.js
@@ -21,7 +21,7 @@ const UserProfile = {
return this.$route.params.id || this.user.id
},
userName () {
- return this.$route.params.name
+ return this.$route.params.name || this.user.screen_name
},
friends () {
return this.user.friends
@@ -68,7 +68,7 @@ const UserProfile = {
}
this.$store.dispatch('stopFetching', 'user')
this.$store.commit('clearTimeline', { timeline: 'user' })
- this.$store.dispatch('startFetching', ['user', this.userName])
+ this.$store.dispatch('startFetching', ['user', this.fetchBy])
},
userId () {
if (!this.isExternal) {
@@ -76,7 +76,7 @@ const UserProfile = {
}
this.$store.dispatch('stopFetching', 'user')
this.$store.commit('clearTimeline', { timeline: 'user' })
- this.$store.dispatch('startFetching', ['user', this.userId])
+ this.$store.dispatch('startFetching', ['user', this.fetchBy])
},
user () {
if (this.user.id && !this.user.followers) {
diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue
index a46befa5..50619026 100644
--- a/src/components/user_profile/user_profile.vue
+++ b/src/components/user_profile/user_profile.vue
@@ -3,7 +3,7 @@
<div v-if="user.id" class="user-profile panel panel-default">
<user-card-content :user="user" :switcher="true" :selected="timeline.viewing"></user-card-content>
<tab-switcher>
- <Timeline :label="$t('user_card.statuses')" :embedded="true" :title="$t('user_profile.timeline_title')" :timeline="timeline" :timeline-name="'user'" :user-id="userId"/>
+ <Timeline :label="$t('user_card.statuses')" :embedded="true" :title="$t('user_profile.timeline_title')" :timeline="timeline" :timeline-name="'user'" :user-id="fetchBy"/>
<div :label="$t('user_card.followees')">
<div v-if="friends">
<user-card v-for="friend in friends" :key="friend.id" :user="friend" :showFollows="true"></user-card>
diff --git a/src/components/who_to_follow_panel/who_to_follow_panel.js b/src/components/who_to_follow_panel/who_to_follow_panel.js
index eaeb527a..fddc7c7d 100644
--- a/src/components/who_to_follow_panel/who_to_follow_panel.js
+++ b/src/components/who_to_follow_panel/who_to_follow_panel.js
@@ -1,10 +1,12 @@
import apiService from '../../services/api/api.service.js'
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
+import _ from 'lodash'
function showWhoToFollow (panel, reply) {
+ _.shuffle(reply)
+
panel.usersToFollow.forEach((toFollow, index) => {
- let randIndex = Math.floor(Math.random() * reply.length)
- let user = reply[randIndex]
+ let user = reply[index]
let img = user.avatar || '/images/avi.png'
let name = user.acct
diff --git a/src/components/who_to_follow_panel/who_to_follow_panel.vue b/src/components/who_to_follow_panel/who_to_follow_panel.vue
index ad6a028e..272c41d3 100644
--- a/src/components/who_to_follow_panel/who_to_follow_panel.vue
+++ b/src/components/who_to_follow_panel/who_to_follow_panel.vue
@@ -7,15 +7,13 @@
</div>
</div>
<div class="panel-body who-to-follow">
- <p>
- <span v-for="user in usersToFollow">
- <img v-bind:src="user.img" />
- <router-link v-bind:to="userProfileLink(user.id, user.name)">
- {{user.name}}
- </router-link><br />
- </span>
- <img v-bind:src="$store.state.instance.logo"> <a v-bind:href="moreUrl" target="_blank">{{$t('who_to_follow.more')}}</a>
- </p>
+ <span v-for="user in usersToFollow">
+ <img v-bind:src="user.img" />
+ <router-link v-bind:to="userProfileLink(user.id, user.name)">
+ {{user.name}}
+ </router-link><br />
+ </span>
+ <img v-bind:src="$store.state.instance.logo"> <a v-bind:href="moreUrl" target="_blank">{{$t('who_to_follow.more')}}</a>
</div>
</div>
</div>
@@ -31,7 +29,9 @@
width: 32px;
height: 32px;
}
- .who-to-follow p {
+ .who-to-follow {
+ padding: 0.5em 1em 0.5em 1em;
+ margin: 0px;
line-height: 40px;
white-space: nowrap;
overflow: hidden;
diff --git a/src/i18n/de.json b/src/i18n/de.json
index ff6db67f..c87371e6 100644
--- a/src/i18n/de.json
+++ b/src/i18n/de.json
@@ -6,7 +6,7 @@
"chat": "Chat",
"gopher": "Gopher",
"media_proxy": "Media Proxy",
- "scope_options": "Scope options",
+ "scope_options": "Reichweitenoptionen",
"text_limit": "Textlimit",
"title": "Features",
"who_to_follow": "Who to follow"
@@ -29,12 +29,16 @@
"username": "Benutzername"
},
"nav": {
+ "back": "Zurück",
"chat": "Lokaler Chat",
"friend_requests": "Followanfragen",
"mentions": "Erwähnungen",
- "public_tl": "Lokale Zeitleiste",
+ "dms": "Direktnachrichten",
+ "public_tl": "Öffentliche Zeitleiste",
"timeline": "Zeitleiste",
- "twkn": "Das gesamte bekannte Netzwerk"
+ "twkn": "Das gesamte bekannte Netzwerk",
+ "user_search": "Benutzersuche",
+ "preferences": "Voreinstellungen"
},
"notifications": {
"broken_favorite": "Unbekannte Nachricht, suche danach...",
@@ -46,6 +50,7 @@
"repeated_you": "wiederholte deine Nachricht"
},
"post_status": {
+ "new_status": "Neuen Status veröffentlichen",
"account_not_locked_warning": "Dein Profil ist nicht {0}. Wer dir folgen will, kann das jederzeit tun und dann auch deine privaten Beiträge sehen.",
"account_not_locked_warning_link": "gesperrt",
"attachments_sensitive": "Anhänge als heikel markieren",
@@ -69,7 +74,17 @@
"fullname": "Angezeigter Name",
"password_confirm": "Passwort bestätigen",
"registration": "Registrierung",
- "token": "Einladungsschlüssel"
+ "token": "Einladungsschlüssel",
+ "captcha": "CAPTCHA",
+ "new_captcha": "Zum Erstellen eines neuen Captcha auf das Bild klicken.",
+ "validations": {
+ "username_required": "darf nicht leer sein",
+ "fullname_required": "darf nicht leer sein",
+ "email_required": "darf nicht leer sein",
+ "password_required": "darf nicht leer sein",
+ "password_confirmation_required": "darf nicht leer sein",
+ "password_confirmation_match": "sollte mit dem Passwort identisch sein."
+ }
},
"settings": {
"attachmentRadius": "Anhänge",
@@ -89,6 +104,7 @@
"change_password_error": "Es gab ein Problem bei der Änderung des Passworts.",
"changed_password": "Passwort erfolgreich geändert!",
"collapse_subject": "Beiträge mit Betreff einklappen",
+ "composing": "Verfassen",
"confirm_new_password": "Neues Passwort bestätigen",
"current_avatar": "Dein derzeitiger Avatar",
"current_password": "Aktuelles Passwort",
@@ -112,12 +128,17 @@
"general": "Allgemein",
"hide_attachments_in_convo": "Anhänge in Unterhaltungen ausblenden",
"hide_attachments_in_tl": "Anhänge in der Zeitleiste ausblenden",
+ "hide_isp": "Instanz-spezifisches Panel ausblenden",
+ "preload_images": "Bilder vorausladen",
"hide_post_stats": "Beitragsstatistiken verbergen (z.B. die Anzahl der Favoriten)",
"hide_user_stats": "Benutzerstatistiken verbergen (z.B. die Anzahl der Follower)",
"import_followers_from_a_csv_file": "Importiere Follower, denen du folgen möchtest, aus einer CSV-Datei",
"import_theme": "Farbschema laden",
"inputRadius": "Eingabefelder",
+ "checkboxRadius": "Auswahlfelder",
"instance_default": "(Standard: {value})",
+ "instance_default_simple": "(Standard)",
+ "interface": "Oberfläche",
"interfaceLanguage": "Sprache der Oberfläche",
"invalid_theme_imported": "Die ausgewählte Datei ist kein unterstütztes Pleroma-Theme. Keine Änderungen wurden vorgenommen.",
"limited_availability": "In deinem Browser nicht verfügbar",
@@ -134,6 +155,7 @@
"notification_visibility_mentions": "Erwähnungen",
"notification_visibility_repeats": "Wiederholungen",
"no_rich_text_description": "Rich-Text Formatierungen von allen Beiträgen entfernen",
+ "hide_network_description": "Zeige nicht, wem ich folge und wer mir folgt",
"nsfw_clickthrough": "Aktiviere ausblendbares Overlay für Anhänge, die als NSFW markiert sind",
"panelRadius": "Panel",
"pause_on_unfocused": "Streaming pausieren, wenn das Tab nicht fokussiert ist",
@@ -150,20 +172,139 @@
"saving_err": "Fehler beim Speichern der Einstellungen",
"saving_ok": "Einstellungen gespeichert",
"security_tab": "Sicherheit",
+ "scope_copy": "Reichweite beim Antworten übernehmen (Direktnachrichten werden immer kopiert)",
"set_new_avatar": "Setze einen neuen Avatar",
"set_new_profile_background": "Setze einen neuen Hintergrund für dein Profil",
"set_new_profile_banner": "Setze einen neuen Banner für dein Profil",
"settings": "Einstellungen",
+ "subject_input_always_show": "Betreff-Feld immer anzeigen",
+ "subject_line_behavior": "Betreff beim Antworten kopieren",
+ "subject_line_email": "Wie Email: \"re: Betreff\"",
+ "subject_line_mastodon": "Wie Mastodon: unverändert kopieren",
+ "subject_line_noop": "Nicht kopieren",
"stop_gifs": "Play-on-hover GIFs",
"streaming": "Aktiviere automatisches Laden (Streaming) von neuen Beiträgen",
"text": "Text",
"theme": "Farbschema",
"theme_help": "Benutze HTML-Farbcodes (#rrggbb) um dein Farbschema anzupassen",
+ "theme_help_v2_1": "Du kannst auch die Farben und die Deckkraft bestimmter Komponenten überschreiben, indem du das Kontrollkästchen umschaltest. Verwende die Schaltfläche \"Alle löschen\", um alle Überschreibungen zurückzusetzen.",
+ "theme_help_v2_2": "Unter einigen Einträgen befinden sich Symbole für Hintergrund-/Textkontrastindikatoren, für detaillierte Informationen fahre mit der Maus darüber. Bitte beachte, dass bei der Verwendung von Transparenz Kontrastindikatoren den schlechtest möglichen Fall darstellen.",
"tooltipRadius": "Tooltips/Warnungen",
"user_settings": "Benutzereinstellungen",
"values": {
"false": "nein",
"true": "Ja"
+ },
+ "notifications": "Benachrichtigungen",
+ "enable_web_push_notifications": "Web-Pushbenachrichtigungen aktivieren",
+ "style": {
+ "switcher": {
+ "keep_color": "Farben beibehalten",
+ "keep_shadows": "Schatten beibehalten",
+ "keep_opacity": "Deckkraft beibehalten",
+ "keep_roundness": "Abrundungen beibehalten",
+ "keep_fonts": "Schriften beibehalten",
+ "save_load_hint": "Die \"Beibehalten\"-Optionen behalten die aktuell eingestellten Optionen beim Auswählen oder Laden von Designs bei, sie speichern diese Optionen auch beim Exportieren eines Designs. Wenn alle Kontrollkästchen deaktiviert sind, wird beim Exportieren des Designs alles gespeichert.",
+ "reset": "Zurücksetzen",
+ "clear_all": "Alles leeren",
+ "clear_opacity": "Deckkraft leeren"
+ },
+ "common": {
+ "color": "Farbe",
+ "opacity": "Deckkraft",
+ "contrast": {
+ "hint": "Das Kontrastverhältnis ist {ratio}, es {level} {context}",
+ "level": {
+ "aa": "entspricht Level AA Richtlinie (minimum)",
+ "aaa": "entspricht Level AAA Richtlinie (empfohlen)",
+ "bad": "entspricht keiner Richtlinien zur Barrierefreiheit"
+ },
+ "context": {
+ "18pt": "für großen (18pt+) Text",
+ "text": "für Text"
+ }
+ }
+ },
+ "common_colors": {
+ "_tab_label": "Allgemein",
+ "main": "Allgemeine Farben",
+ "foreground_hint": "Siehe Reiter \"Erweitert\" für eine detailliertere Einstellungen",
+ "rgbo": "Symbole, Betonungen, Kennzeichnungen"
+ },
+ "advanced_colors": {
+ "_tab_label": "Erweitert",
+ "alert": "Warnhinweis-Hintergrund",
+ "alert_error": "Fehler",
+ "badge": "Kennzeichnungs-Hintergrund",
+ "badge_notification": "Benachrichtigung",
+ "panel_header": "Panel-Kopf",
+ "top_bar": "Obere Leiste",
+ "borders": "Rahmen",
+ "buttons": "Schaltflächen",
+ "inputs": "Eingabefelder",
+ "faint_text": "Verblasster Text"
+ },
+ "radii": {
+ "_tab_label": "Abrundungen"
+ },
+ "shadows": {
+ "_tab_label": "Schatten und Beleuchtung",
+ "component": "Komponente",
+ "override": "Überschreiben",
+ "shadow_id": "Schatten #{value}",
+ "blur": "Unschärfe",
+ "spread": "Streuung",
+ "inset": "Einsatz",
+ "hint": "Für Schatten kannst du auch --variable als Farbwert verwenden, um CSS3-Variablen zu verwenden. Bitte beachte, dass die Einstellung der Deckkraft in diesem Fall nicht funktioniert.",
+ "filter_hint": {
+ "always_drop_shadow": "Achtung, dieser Schatten verwendet immer {0}, wenn der Browser dies unterstützt.",
+ "drop_shadow_syntax": "{0} unterstützt Parameter {1} und Schlüsselwort {2} nicht.",
+ "avatar_inset": "Bitte beachte, dass die Kombination von eingesetzten und nicht eingesetzten Schatten auf Avataren zu unerwarteten Ergebnissen bei transparenten Avataren führen kann.",
+ "spread_zero": "Schatten mit einer Streuung > 0 erscheinen so, als ob sie auf Null gesetzt wären.",
+ "inset_classic": "Eingesetzte Schatten werden mit {0} verwendet"
+ },
+ "components": {
+ "panel": "Panel",
+ "panelHeader": "Panel-Kopf",
+ "topBar": "Obere Leiste",
+ "avatar": "Benutzer-Avatar (in der Profilansicht)",
+ "avatarStatus": "Benutzer-Avatar (in der Beitragsanzeige)",
+ "popup": "Dialogfenster und Hinweistexte",
+ "button": "Schaltfläche",
+ "buttonHover": "Schaltfläche (hover)",
+ "buttonPressed": "Schaltfläche (gedrückt)",
+ "buttonPressedHover": "Schaltfläche (gedrückt+hover)",
+ "input": "Input field"
+ }
+ },
+ "fonts": {
+ "_tab_label": "Schriften",
+ "help": "Wähl die Schriftart, die für Elemente der Benutzeroberfläche verwendet werden soll. Für \" Benutzerdefiniert\" musst du den genauen Schriftnamen eingeben, wie er im System angezeigt wird.",
+ "components": {
+ "interface": "Oberfläche",
+ "input": "Eingabefelder",
+ "post": "Beitragstext",
+ "postCode": "Dicktengleicher Text in einem Beitrag (Rich-Text)"
+ },
+ "family": "Schriftname",
+ "size": "Größe (in px)",
+ "weight": "Gewicht (Dicke)",
+ "custom": "Benutzerdefiniert"
+ },
+ "preview": {
+ "header": "Vorschau",
+ "content": "Inhalt",
+ "error": "Beispielfehler",
+ "button": "Schaltfläche",
+ "text": "Ein Haufen mehr von {0} und {1}",
+ "mono": "Inhalt",
+ "input": "Sitze gerade im Hofbräuhaus.",
+ "faint_link": "Hilfreiche Anleitung",
+ "fine_print": "Lies unser {0}, um nichts Nützliches zu lernen!",
+ "header_faint": "Das ist in Ordnung",
+ "checkbox": "Ich habe die Allgemeinen Geschäftsbedingungen überflogen",
+ "link": "ein netter kleiner Link"
+ }
}
},
"timeline": {
@@ -182,10 +323,15 @@
"blocked": "Blockiert!",
"deny": "Ablehnen",
"follow": "Folgen",
+ "follow_sent": "Anfrage gesendet!",
+ "follow_progress": "Anfragen…",
+ "follow_again": "Anfrage erneut senden?",
+ "follow_unfollow": "Folgen beenden",
"followees": "Folgt",
"followers": "Followers",
"following": "Folgst du!",
"follows_you": "Folgt dir!",
+ "its_you": "Das bist du!",
"mute": "Stummschalten",
"muted": "Stummgeschaltet",
"per_day": "pro Tag",
@@ -198,5 +344,26 @@
"who_to_follow": {
"more": "Mehr",
"who_to_follow": "Wem soll ich folgen"
+ },
+ "tool_tip": {
+ "media_upload": "Medien hochladen",
+ "repeat": "Wiederholen",
+ "reply": "Antworten",
+ "favorite": "Favorisieren",
+ "user_settings": "Benutzereinstellungen"
+ },
+ "upload":{
+ "error": {
+ "base": "Hochladen fehlgeschlagen.",
+ "file_too_big": "Datei ist zu groß [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
+ "default": "Bitte versuche es später erneut"
+ },
+ "file_size_units": {
+ "B": "B",
+ "KiB": "KiB",
+ "MiB": "MiB",
+ "GiB": "GiB",
+ "TiB": "TiB"
+ }
}
}
diff --git a/src/i18n/en.json b/src/i18n/en.json
index eec101f7..8a6d1310 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -29,6 +29,7 @@
"username": "Username"
},
"nav": {
+ "about": "About",
"back": "Back",
"chat": "Local Chat",
"friend_requests": "Follow Requests",