Page MenuHomePhorge

No OneTemporary

Size
48 KB
Referenced Files
None
Subscribers
None
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index b3bb82909f..b88937bbcc 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -1,46 +1,50 @@
import StyleSwitcher from '../style_switcher/style_switcher.vue'
import { filter, trim } from 'lodash'
const settings = {
data () {
return {
hideAttachmentsLocal: this.$store.state.config.hideAttachments,
hideAttachmentsInConvLocal: this.$store.state.config.hideAttachmentsInConv,
hideNsfwLocal: this.$store.state.config.hideNsfw,
muteWordsString: this.$store.state.config.muteWords.join('\n'),
autoLoadLocal: this.$store.state.config.autoLoad,
+ streamingLocal: this.$store.state.config.streaming,
hoverPreviewLocal: this.$store.state.config.hoverPreview
}
},
components: {
StyleSwitcher
},
computed: {
user () {
return this.$store.state.users.currentUser
}
},
watch: {
hideAttachmentsLocal (value) {
this.$store.dispatch('setOption', { name: 'hideAttachments', value })
},
hideAttachmentsInConvLocal (value) {
this.$store.dispatch('setOption', { name: 'hideAttachmentsInConv', value })
},
hideNsfwLocal (value) {
this.$store.dispatch('setOption', { name: 'hideNsfw', value })
},
autoLoadLocal (value) {
this.$store.dispatch('setOption', { name: 'autoLoad', value })
},
+ streamingLocal (value) {
+ this.$store.dispatch('setOption', { name: 'streaming', value })
+ },
hoverPreviewLocal (value) {
this.$store.dispatch('setOption', { name: 'hoverPreview', value })
},
muteWordsString (value) {
value = filter(value.split('\n'), (word) => trim(word).length > 0)
this.$store.dispatch('setOption', { name: 'muteWords', value })
}
}
}
export default settings
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index 5978e4ed54..6a311d5594 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -1,77 +1,81 @@
<template>
<div class="settings panel panel-default base00-background">
<div class="panel-heading base01-background base04">
{{$t('settings.settings')}}
</div>
<div class="panel-body">
<div class="setting-item">
<h2>{{$t('settings.theme')}}</h2>
<style-switcher></style-switcher>
</div>
<div class="setting-item">
<h2>{{$t('settings.filtering')}}</h2>
<p>{{$t('settings.filtering_explanation')}}</p>
<textarea id="muteWords" v-model="muteWordsString"></textarea>
</div>
<div class="setting-item">
<h2>{{$t('settings.attachments')}}</h2>
<ul class="setting-list">
<li>
<input type="checkbox" id="hideAttachments" v-model="hideAttachmentsLocal">
<label for="hideAttachments">{{$t('settings.hide_attachments_in_tl')}}</label>
</li>
<li>
<input type="checkbox" id="hideAttachmentsInConv" v-model="hideAttachmentsInConvLocal">
<label for="hideAttachmentsInConv">{{$t('settings.hide_attachments_in_convo')}}</label>
</li>
<li>
<input type="checkbox" id="hideNsfw" v-model="hideNsfwLocal">
<label for="hideNsfw">{{$t('settings.nsfw_clickthrough')}}</label>
</li>
<li>
<input type="checkbox" id="autoLoad" v-model="autoLoadLocal">
<label for="autoLoad">{{$t('settings.autoload')}}</label>
</li>
+ <li>
+ <input type="checkbox" id="streaming" v-model="streamingLocal">
+ <label for="streaming">{{$t('settings.streaming')}}</label>
+ </li>
<li>
<input type="checkbox" id="hoverPreview" v-model="hoverPreviewLocal">
<label for="hoverPreview">{{$t('settings.reply_link_preview')}}</label>
</li>
</ul>
</div>
</div>
</div>
</template>
<script src="./settings.js">
</script>
<style lang="scss">
.setting-item {
margin: 1em 1em 1.4em;
textarea {
width: 100%;
height: 100px;
}
.old-avatar {
width: 128px;
border-radius: 5px;
}
.new-avatar {
object-fit: cover;
width: 128px;
height: 128px;
border-radius: 5px;
}
.btn {
margin-top: 1em;
min-height: 28px;
width: 10em;
}
}
.setting-list {
list-style-type: none;
}
</style>
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index cc315a9043..33851b6cb1 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -1,352 +1,366 @@
<template>
<div class="status-el base00-background" v-if="compact">
<div @click.prevent="linkClicked" class="status-content" v-html="status.statusnet_html"></div>
<div v-if="loggedIn">
<div class='status-actions'>
<div>
<a href="#" v-on:click.prevent="toggleReplying">
<i class="fa icon-reply" :class="{'icon-reply-active': replying}"></i>
</a>
</div>
<retweet-button :status=status></retweet-button>
<favorite-button :status=status></favorite-button>
</div>
</div>
<post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying" v-if="replying"/>
</div>
- <div class="status-el base00-background base03-border" v-else-if="!status.deleted" v-bind:class="[{ 'base01-background': isFocused }, { 'status-conversation': inConversation }]" >
+ <div class="status-el base00-background base03-border status-fadein" v-else-if="!status.deleted" v-bind:class="[{ 'base01-background': isFocused }, { 'status-conversation': inConversation }]" >
<template v-if="muted">
<div class="media status container muted">
<small><router-link :to="{ name: 'user-profile', params: { id: status.user.id } }">{{status.user.screen_name}}</router-link></small>
<small class="muteWords">{{muteWordHits.join(', ')}}</small>
<a href="#" class="unmute" @click.prevent="toggleMute"><i class="fa icon-eye-off"></i></a>
</div>
</template>
<template v-if="!muted">
<div v-if="retweet" class="media container retweet-info">
<div class="media-left">
<i class='fa icon-retweet retweeted'></i>
</div>
<div class="media-body">
Repeated by <a :href="statusoid.user.statusnet_profile_url" style="font-weight: bold;" :title="'@'+statusoid.user.screen_name">{{retweeter}}</a>
</div>
</div>
<div class="media status container">
<div class="media-left">
<a :href="status.user.statusnet_profile_url">
<img @click.prevent="toggleUserExpanded" :class="{retweeted: retweet}" class='avatar' :src="status.user.profile_image_url_original">
<img v-if="retweet" class='avatar-retweeter' :src="statusoid.user.profile_image_url_original"></img>
</a>
</div>
<div class="media-body">
<div class="base05 base05=border usercard" v-if="userExpanded">
<user-card-content :user="status.user" :switcher="false"></user-card-content>
</div>
<div class="user-content">
<div class="media-heading">
<div class="name-and-links">
<h4 class="user-name">{{status.user.name}}</h4>
<div class="links">
<h4>
<small><router-link :to="{ name: 'user-profile', params: { id: status.user.id } }">{{status.user.screen_name}}</router-link></small>
<small v-if="status.in_reply_to_screen_name"> &gt;
<router-link :to="{ name: 'user-profile', params: { id: status.in_reply_to_user_id } }">
{{status.in_reply_to_screen_name}}
</router-link>
</small>
<template v-if="isReply && !expandable">
<small>
<a href="#" @click.prevent="gotoOriginal(status.in_reply_to_status_id)"><i class="icon-reply" @mouseenter="replyEnter(status.in_reply_to_status_id, $event)" @mouseout="replyLeave()"></i></a>
</small>
</template>
-
<small>
<router-link :to="{ name: 'conversation', params: { id: status.id } }">
<timeago :since="status.created_at" :auto-update="60"></timeago>
</router-link>
</small>
</h4>
</div>
<h4 class="replies" v-if="inConversation">
<small v-if="replies.length">Replies:</small>
<small v-for="reply in replies">
<a href="#" @click.prevent="gotoOriginal(reply.id)" @mouseenter="replyEnter(reply.id, $event)" @mouseout="replyLeave()">{{reply.name}}&nbsp;</a>
</small>
</h4>
</div>
<div class="heading-icons">
<a href="#" @click.prevent="toggleMute" v-if="unmuted"><i class="fa icon-eye-off"></i></a>
<a :href="status.external_url" target="_blank" v-if="!status.is_local" class="source_url"><i class="fa icon-binoculars"></i></a>
<template v-if="expandable">
<a href="#" @click.prevent="toggleExpanded" class="expand"><i class="fa icon-plus-squared"></i></a>
</template>
</div>
</div>
<div @click.prevent="linkClicked" class="status-content" v-html="status.statusnet_html"></div>
<div v-if='status.attachments' class='attachments'>
<attachment v-if="!hideAttachments" :status-id="status.id" :nsfw="status.nsfw" :attachment="attachment" v-for="attachment in status.attachments">
</attachment>
</div>
</div>
<div v-if="loggedIn">
<div class='status-actions'>
<div>
<a href="#" v-on:click.prevent="toggleReplying">
<i class="fa icon-reply" :class="{'icon-reply-active': replying}"></i>
</a>
</div>
<retweet-button :status=status></retweet-button>
<favorite-button :status=status></favorite-button>
<delete-button :status=status></delete-button>
</div>
</div>
</div>
</div>
<div class="status base00-background container" v-if="replying">
<div class="reply-left"/>
<post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying"/>
</div>
</template>
</div>
</template>
<script src="./status.js" ></script>
<style lang="scss">
@import '../../_variables.scss';
status-text-container {
display: block;
}
.status-el {
hyphens: auto;
overflow-wrap: break-word;
word-wrap: break-word;
word-break: break-word;
border-left-width: 0px;
line-height: 18px;
.notify {
.avatar {
border-width: 3px;
border-style: solid;
}
}
.media-body {
flex: 1;
padding-left: 0.5em;
}
.user-content {
min-height: 52px;
padding-top: 1px;
}
.media-heading {
display: flex;
min-height: 1.4em;
margin-bottom: 0.3em;
small {
font-weight: lighter;
}
h4 {
margin-right: 0.4em;
}
.name-and-links {
flex: 1 0;
display: flex;
flex-wrap: wrap;
}
.replies {
flex-basis: 100%;
}
}
.source_url {
}
.expand {
margin-right: -0.3em;
}
a {
display: inline-block;
word-break: break-all;
}
.status-content {
margin: 3px 15px 4px 0;
img, video {
max-width: 100%;
max-height: 400px;
}
blockquote {
margin: 0.2em 0 0.2em 2em;
font-style: italic;
}
}
p {
margin: 0;
margin-top: 0.2em;
margin-bottom: 0.5em;
}
.media-left {
margin: 0.2em 0.3em 0 0;
img {
float: right;
border-radius: 5px;
}
}
.retweet-info {
padding: 0.7em 0 0 0.6em;
.media-left {
display: flex;
i {
align-self: center;
text-align: right;
flex: 1;
padding-right: 0.3em;
}
}
}
}
+ .status-fadein {
+ animation-duration: 0.5s;
+ animation-name: fadein;
+ }
+
+ @keyframes fadein {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+ }
+
.greentext {
color: green;
}
.status-conversation {
border-left-style: solid;
}
.status-actions {
padding-top: 0.15em;
width: 100%;
display: flex;
div, favorite-button {
max-width: 6em;
flex: 1;
}
}
.icon-reply:hover {
color: $blue;
}
.icon-reply-active {
color: $blue;
}
.status .avatar {
width: 48px;
height: 48px;
&.retweeted {
width: 40px;
height: 40px;
margin-right: 8px;
margin-bottom: 8px;
}
}
.status img.avatar-retweeter {
width: 24px;
height: 24px;
position: absolute;
margin-left: 24px;
margin-top: 24px;
}
.status.compact .avatar {
width: 32px;
}
.status {
padding: 0.4em 0.7em 0.45em 0.7em;
border-bottom: 1px solid;
border-bottom-color: inherit;
border-left: 4px rgba(255, 48, 16, 0.65);
border-left-style: inherit;
}
.muted {
padding: 0.1em 0.4em 0.1em 0.8em;
button {
margin-left: auto;
}
.muteWords {
margin-left: 10px;
}
}
a.unmute {
display: block;
margin-left: auto;
}
.usercard {
border-style: solid;
border-width: 1px;
border-radius: 10px;
margin-bottom: 1em;
margin-top: 0.2em;
}
.reply-left {
flex: 0;
min-width: 48px;
}
.reply-body {
flex: 1;
}
@media all and (max-width: 960px) {
.status-el {
.name-and-links {
margin-left: -0.25em;
}
}
.status {
max-width: 100%;
}
.status .avatar {
width: 40px;
height: 40px;
&.retweeted {
width: 34px;
height: 34px;
margin-right: 8px;
margin-bottom: 8px;
}
}
.status img.avatar-retweeter {
width: 22px;
height: 22px;
position: absolute;
margin-left: 18px;
margin-top: 18px;
}
}
</style>
diff --git a/src/components/timeline/timeline.js b/src/components/timeline/timeline.js
index 6968bc6fec..613b8a34a9 100644
--- a/src/components/timeline/timeline.js
+++ b/src/components/timeline/timeline.js
@@ -1,96 +1,120 @@
import Status from '../status/status.vue'
import timelineFetcher from '../../services/timeline_fetcher/timeline_fetcher.service.js'
import StatusOrConversation from '../status_or_conversation/status_or_conversation.vue'
import UserCard from '../user_card/user_card.vue'
const Timeline = {
props: [
'timeline',
'timelineName',
'title',
'userId',
'tag'
],
+ data () {
+ return {
+ paused: false
+ }
+ },
computed: {
timelineError () { return this.$store.state.statuses.error },
followers () {
return this.timeline.followers
},
friends () {
return this.timeline.friends
},
viewing () {
return this.timeline.viewing
+ },
+ newStatusCount () {
+ return this.timeline.newStatusCount
}
},
components: {
Status,
StatusOrConversation,
UserCard
},
created () {
const store = this.$store
const credentials = store.state.users.currentUser.credentials
const showImmediately = this.timeline.visibleStatuses.length === 0
window.addEventListener('scroll', this.scrollLoad)
timelineFetcher.fetchAndUpdate({
store,
credentials,
timeline: this.timelineName,
showImmediately,
userId: this.userId,
tag: this.tag
})
// don't fetch followers for public, friend, twkn
if (this.timelineName === 'user') {
this.fetchFriends()
this.fetchFollowers()
}
},
destroyed () {
window.removeEventListener('scroll', this.scrollLoad)
},
methods: {
showNewStatuses () {
this.$store.commit('showNewStatuses', { timeline: this.timelineName })
+ this.paused = false
},
fetchOlderStatuses () {
const store = this.$store
const credentials = store.state.users.currentUser.credentials
store.commit('setLoading', { timeline: this.timelineName, value: true })
timelineFetcher.fetchAndUpdate({
store,
credentials,
timeline: this.timelineName,
older: true,
showImmediately: true,
userId: this.userId,
tag: this.tag
}).then(() => store.commit('setLoading', { timeline: this.timelineName, value: false }))
},
fetchFollowers () {
const id = this.userId
this.$store.state.api.backendInteractor.fetchFollowers({ id })
.then((followers) => this.$store.dispatch('addFollowers', { followers }))
},
fetchFriends () {
const id = this.userId
this.$store.state.api.backendInteractor.fetchFriends({ id })
.then((friends) => this.$store.dispatch('addFriends', { friends }))
},
scrollLoad (e) {
let height = Math.max(document.body.offsetHeight, document.body.scrollHeight)
if (this.timeline.loading === false &&
this.$store.state.config.autoLoad &&
this.$el.offsetHeight > 0 &&
(window.innerHeight + window.pageYOffset) >= (height - 750)) {
this.fetchOlderStatuses()
}
}
+ },
+ watch: {
+ newStatusCount (count) {
+ if (!this.$store.state.config.streaming) {
+ return
+ }
+ if (count > 0) {
+ // only 'stream' them when you're scrolled to the top
+ if (window.pageYOffset < 15 && !this.paused) {
+ this.showNewStatuses()
+ } else {
+ this.paused = true
+ }
+ }
+ }
}
}
export default Timeline
diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index b9a4f756ee..cedb7fd706 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -1,932 +1,934 @@
const de = {
nav: {
timeline: 'Zeitleiste',
mentions: 'Erwähnungen',
public_tl: 'Lokale Zeitleiste',
twkn: 'Das gesamte Netzwerk'
},
user_card: {
follows_you: 'Folgt dir!',
following: 'Folgst du!',
follow: 'Folgen',
statuses: 'Beiträge',
mute: 'Stummschalten',
muted: 'Stummgeschaltet',
followers: 'Folgende',
followees: 'Folgt',
per_day: 'pro Tag'
},
timeline: {
show_new: 'Zeige Neuere',
error_fetching: 'Error beim Laden',
up_to_date: 'Aktuell',
load_older: 'Lade ältere Beiträge'
},
settings: {
user_settings: 'Benutzereinstellungen',
name_bio: 'Name & Bio',
name: 'Name',
bio: 'Bio',
avatar: 'Avatar',
current_avatar: 'Dein derzeitiger Avatar',
set_new_avatar: 'Setze neuen Avatar',
profile_banner: 'Profil Banner',
current_profile_banner: 'Dein derzeitiger Profil Banner',
set_new_profile_banner: 'Setze neuen Profil Banner',
profile_background: 'Profil Hintergrund',
set_new_profile_background: 'Setze neuen Profil Hintergrund',
settings: 'Einstellungen',
theme: 'Theme',
filtering: 'Filter',
filtering_explanation: 'Alle Beiträge die diese Wörter enthalten werden ausgeblendet. Ein Wort pro Zeile.',
attachments: 'Anhänge',
hide_attachments_in_tl: 'Anhänge in der Timeline ausblenden',
hide_attachments_in_convo: 'Anhänge in Unterhaltungen ausblenden',
nsfw_clickthrough: 'Aktiviere ausblendbares Overlay für als NSFW markierte Anhänge',
autoload: 'Aktiviere automatisches Laden von Beiträgen beim scrollen',
reply_link_preview: 'Aktiviere reply-link Vorschau bei Maus-Hover'
},
notifications: {
notifications: 'Benachrichtigungen',
read: 'Gelesen!',
followed_you: 'folgt dir'
},
general: {
submit: 'Absenden'
}
}
const fi = {
nav: {
timeline: 'Aikajana',
mentions: 'Maininnat',
public_tl: 'Julkinen Aikajana',
twkn: 'Koko Tunnettu Verkosto'
},
user_card: {
follows_you: 'Seuraa sinua!',
following: 'Seuraat!',
follow: 'Seuraa',
statuses: 'Viestit',
mute: 'Hiljennä',
muted: 'Hiljennetty',
followers: 'Seuraajat',
followees: 'Seuraa',
per_day: 'päivässä'
},
timeline: {
show_new: 'Näytä uudet',
error_fetching: 'Virhe ladatessa viestejä',
up_to_date: 'Ajantasalla',
load_older: 'Lataa vanhempia viestejä',
conversation: 'Keskustelu'
},
settings: {
user_settings: 'Käyttäjän asetukset',
name_bio: 'Nimi ja kuvaus',
name: 'Nimi',
bio: 'Kuvaus',
avatar: 'Profiilikuva',
current_avatar: 'Nykyinen profiilikuvasi',
set_new_avatar: 'Aseta uusi profiilikuva',
profile_banner: 'Juliste',
current_profile_banner: 'Nykyinen julisteesi',
set_new_profile_banner: 'Aseta uusi juliste',
profile_background: 'Taustakuva',
set_new_profile_background: 'Aseta uusi taustakuva',
settings: 'Asetukset',
theme: 'Teema',
filtering: 'Suodatus',
filtering_explanation: 'Kaikki viestit, jotka sisältävät näitä sanoja, suodatetaan. Yksi sana per rivi.',
attachments: 'Liitteet',
hide_attachments_in_tl: 'Piilota liitteet aikajanalla',
hide_attachments_in_convo: 'Piilota liitteet keskusteluissa',
nsfw_clickthrough: 'Piilota NSFW liitteet klikkauksen taakse.',
autoload: 'Lataa vanhempia viestejä automaattisesti ruudun pohjalla',
+ streaming: 'Näytä uudet viestit automaattisesti ollessasi ruudun huipulla',
reply_link_preview: 'Keskusteluiden vastauslinkkien esikatselu'
},
notifications: {
notifications: 'Ilmoitukset',
read: 'Lue!',
followed_you: 'seuraa sinua'
},
login: {
login: 'Kirjaudu sisään',
username: 'Käyttäjänimi',
password: 'Salasana',
register: 'Rekisteröidy',
logout: 'Kirjaudu ulos'
},
registration: {
registration: 'Rekisteröityminen',
fullname: 'Koko nimi',
email: 'Sähköposti',
bio: 'Kuvaus',
password_confirm: 'Salasanan vahvistaminen'
},
post_status: {
posting: 'Lähetetään',
default: 'Tulin juuri saunasta.'
},
finder: {
find_user: 'Hae käyttäjä',
error_fetching_user: 'Virhe hakiessa käyttäjää'
},
general: {
submit: 'Lähetä'
}
}
const en = {
nav: {
timeline: 'Timeline',
mentions: 'Mentions',
public_tl: 'Public Timeline',
twkn: 'The Whole Known Network'
},
user_card: {
follows_you: 'Follows you!',
following: 'Following!',
follow: 'Follow',
blocked: 'Blocked!',
block: 'Block',
statuses: 'Statuses',
mute: 'Mute',
muted: 'Muted',
followers: 'Followers',
followees: 'Following',
per_day: 'per day'
},
timeline: {
show_new: 'Show new',
error_fetching: 'Error fetching updates',
up_to_date: 'Up-to-date',
load_older: 'Load older statuses',
conversation: 'Conversation'
},
settings: {
user_settings: 'User Settings',
name_bio: 'Name & Bio',
name: 'Name',
bio: 'Bio',
avatar: 'Avatar',
current_avatar: 'Your current avatar',
set_new_avatar: 'Set new avatar',
profile_banner: 'Profile Banner',
current_profile_banner: 'Your current profile banner',
set_new_profile_banner: 'Set new profile banner',
profile_background: 'Profile Background',
set_new_profile_background: 'Set new profile background',
settings: 'Settings',
theme: 'Theme',
filtering: 'Filtering',
filtering_explanation: 'All statuses containing these words will be muted, one per line',
attachments: 'Attachments',
hide_attachments_in_tl: 'Hide attachments in timeline',
hide_attachments_in_convo: 'Hide attachments in conversations',
nsfw_clickthrough: 'Enable clickthrough NSFW attachment hiding',
autoload: 'Enable automatic loading when scrolled to the bottom',
+ streaming: 'Enable automatic streaming of new posts when scrolled to the top',
reply_link_preview: 'Enable reply-link preview on mouse hover'
},
notifications: {
notifications: 'Notifications',
read: 'Read!',
followed_you: 'followed you'
},
login: {
login: 'Log in',
username: 'Username',
password: 'Password',
register: 'Register',
logout: 'Log out'
},
registration: {
registration: 'Registration',
fullname: 'Display name',
email: 'Email',
bio: 'Bio',
password_confirm: 'Password confirmation'
},
post_status: {
posting: 'Posting',
default: 'Just landed in L.A.'
},
finder: {
find_user: 'Find user',
error_fetching_user: 'Error fetching user'
},
general: {
submit: 'Submit'
}
}
const et = {
nav: {
timeline: 'Ajajoon',
mentions: 'Mainimised',
public_tl: 'Avalik Ajajoon',
twkn: 'Kogu Teadaolev Võrgustik'
},
user_card: {
follows_you: 'Jälgib sind!',
following: 'Jälgin!',
follow: 'Jälgi',
blocked: 'Blokeeritud!',
block: 'Blokeeri',
statuses: 'Staatuseid',
mute: 'Vaigista',
muted: 'Vaigistatud',
followers: 'Jälgijaid',
followees: 'Jälgitavaid',
per_day: 'päevas'
},
timeline: {
show_new: 'Näita uusi',
error_fetching: 'Viga uuenduste laadimisel',
up_to_date: 'Uuendatud',
load_older: 'Kuva vanemaid staatuseid',
conversation: 'Vestlus'
},
settings: {
user_settings: 'Kasutaja sätted',
name_bio: 'Nimi ja Bio',
name: 'Nimi',
bio: 'Bio',
avatar: 'Profiilipilt',
current_avatar: 'Sinu praegune profiilipilt',
set_new_avatar: 'Vali uus profiilipilt',
profile_banner: 'Profiilibänner',
current_profile_banner: 'Praegune profiilibänner',
set_new_profile_banner: 'Vali uus profiilibänner',
profile_background: 'Profiilitaust',
set_new_profile_background: 'Vali uus profiilitaust',
settings: 'Sätted',
theme: 'Teema',
filtering: 'Sisu filtreerimine',
filtering_explanation: 'Kõiki staatuseid, mis sisaldavad neid sõnu, ei kuvata. Üks sõna reale.',
attachments: 'Manused',
hide_attachments_in_tl: 'Peida manused ajajoonel',
hide_attachments_in_convo: 'Peida manused vastlustes',
nsfw_clickthrough: 'Peida tööks-mittesobivad(NSFW) manuste hiireklõpsu taha',
autoload: 'Luba ajajoone automaatne uuendamine kui ajajoon on põhja keritud',
reply_link_preview: 'Luba algpostituse kuvamine vastustes'
},
notifications: {
notifications: 'Teavitused',
read: 'Loe!',
followed_you: 'alustas sinu jälgimist'
},
login: {
login: 'Logi sisse',
username: 'Kasutajanimi',
password: 'Parool',
register: 'Registreeru',
logout: 'Logi välja'
},
registration: {
registration: 'Registreerimine',
fullname: 'Kuvatav nimi',
email: 'E-post',
bio: 'Bio',
password_confirm: 'Parooli kinnitamine'
},
post_status: {
posting: 'Postitan',
default: 'Just sõitsin elektrirongiga Tallinnast Pääskülla.'
},
finder: {
find_user: 'Otsi kasutajaid',
error_fetching_user: 'Viga kasutaja leidmisel'
},
general: {
submit: 'Postita'
}
}
const hu = {
nav: {
timeline: 'Idővonal',
mentions: 'Említéseim',
public_tl: 'Publikus Idővonal',
twkn: 'Az Egész Ismert Hálózat'
},
user_card: {
follows_you: 'Követ téged!',
following: 'Követve!',
follow: 'Követ',
blocked: 'Letiltva!',
block: 'Letilt',
statuses: 'Állapotok',
mute: 'Némít',
muted: 'Némított',
followers: 'Követők',
followees: 'Követettek',
per_day: 'naponta'
},
timeline: {
show_new: 'Újak mutatása',
error_fetching: 'Hiba a frissítések beszerzésénél',
up_to_date: 'Naprakész',
load_older: 'Régebbi állapotok betöltése',
conversation: 'Társalgás'
},
settings: {
user_settings: 'Felhasználói beállítások',
name_bio: 'Név és Bio',
name: 'Név',
bio: 'Bio',
avatar: 'Avatár',
current_avatar: 'Jelenlegi avatár',
set_new_avatar: 'Új avatár',
profile_banner: 'Profil Banner',
current_profile_banner: 'Jelenlegi profil banner',
set_new_profile_banner: 'Új profil banner',
profile_background: 'Profil háttérkép',
set_new_profile_background: 'Új profil háttér beállítása',
settings: 'Beállítások',
theme: 'Téma',
filtering: 'Szűrés',
filtering_explanation: 'Minden tartalom mely ezen szavakat tartalmazza némítva lesz, soronként egy',
attachments: 'Csatolmányok',
hide_attachments_in_tl: 'Csatolmányok elrejtése az idővonalon',
hide_attachments_in_convo: 'Csatolmányok elrejtése a társalgásokban',
nsfw_clickthrough: 'NSFW átkattintási tartalom elrejtésének engedélyezése',
autoload: 'Autoatikus betöltés engedélyezése lap aljára görgetéskor',
reply_link_preview: 'Válasz-link előzetes mutatása egér rátételkor'
},
notifications: {
notifications: 'Értesítések',
read: 'Olvasva!',
followed_you: 'követ téged'
},
login: {
login: 'Bejelentkezés',
username: 'Felhasználó név',
password: 'Jelszó',
register: 'Feliratkozás',
logout: 'Kijelentkezés'
},
registration: {
registration: 'Feliratkozás',
fullname: 'Teljes név',
email: 'Email',
bio: 'Bio',
password_confirm: 'Jelszó megerősítése'
},
post_status: {
posting: 'Küldés folyamatban',
default: 'Most érkeztem L.A.-be'
},
finder: {
find_user: 'Felhasználó keresése',
error_fetching_user: 'Hiba felhasználó beszerzésével'
},
general: {
submit: 'Elküld'
}
}
const ro = {
nav: {
timeline: 'Cronologie',
mentions: 'Menționări',
public_tl: 'Cronologie Publică',
twkn: 'Toată Reșeaua Cunoscută'
},
user_card: {
follows_you: 'Te urmărește!',
following: 'Urmărit!',
follow: 'Urmărește',
blocked: 'Blocat!',
block: 'Blochează',
statuses: 'Stări',
mute: 'Pune pe mut',
muted: 'Pus pe mut',
followers: 'Următori',
followees: 'Urmărește',
per_day: 'pe zi'
},
timeline: {
show_new: 'Arată cele noi',
error_fetching: 'Erare la preluarea actualizărilor',
up_to_date: 'La zi',
load_older: 'Încarcă stări mai vechi',
conversation: 'Conversație'
},
settings: {
user_settings: 'Setările utilizatorului',
name_bio: 'Nume și Bio',
name: 'Nume',
bio: 'Bio',
avatar: 'Avatar',
current_avatar: 'Avatarul curent',
set_new_avatar: 'Setează avatar nou',
profile_banner: 'Banner de profil',
current_profile_banner: 'Bannerul curent al profilului',
set_new_profile_banner: 'Setează banner nou la profil',
profile_background: 'Fundalul de profil',
set_new_profile_background: 'Setează fundal nou',
settings: 'Setări',
theme: 'Temă',
filtering: 'Filtru',
filtering_explanation: 'Toate stările care conțin aceste cuvinte vor fi puse pe mut, una pe linie',
attachments: 'Atașamente',
hide_attachments_in_tl: 'Ascunde atașamentele în cronologie',
hide_attachments_in_convo: 'Ascunde atașamentele în conversații',
nsfw_clickthrough: 'Permite ascunderea al atașamentelor NSFW',
autoload: 'Permite încărcarea automată când scrolat la capăt',
reply_link_preview: 'Permite previzualizarea linkului de răspuns la planarea de mouse'
},
notifications: {
notifications: 'Notificări',
read: 'Citit!',
followed_you: 'te-a urmărit'
},
login: {
login: 'Loghează',
username: 'Nume utilizator',
password: 'Parolă',
register: 'Înregistrare',
logout: 'Deloghează'
},
registration: {
registration: 'Îregistrare',
fullname: 'Numele întreg',
email: 'Email',
bio: 'Bio',
password_confirm: 'Cofirmă parola'
},
post_status: {
posting: 'Postează',
default: 'Nu de mult am aterizat în L.A.'
},
finder: {
find_user: 'Găsește utilizator',
error_fetching_user: 'Eroare la preluarea utilizatorului'
},
general: {
submit: 'trimite'
}
}
const ja = {
nav: {
timeline: 'タイムライン',
mentions: '通知',
public_tl: '公開タイムライン',
twkn: '接続しているすべてのネットワーク'
},
user_card: {
follows_you: 'フォローされました!',
following: 'フォロー中!',
follow: 'フォロー',
statuses: 'ステータス',
mute: 'ミュート',
muted: 'ミュート済み',
followers: 'フォロワー',
followees: 'フォロー',
per_day: '/日'
},
timeline: {
show_new: '新しいものを表示',
error_fetching: '更新の取得中にエラーが発生しました',
up_to_date: '最新',
load_older: '古いステータスを読み込む'
},
settings: {
user_settings: 'ユーザー設定',
name_bio: '名前 & プロフィール',
name: '名前',
bio: 'プロフィール',
avatar: 'アバター',
current_avatar: 'あなたの現在のアバター',
set_new_avatar: '新しいアバターを設定する',
profile_banner: 'プロフィールバナー',
current_profile_banner: '現在のプロフィールバナー',
set_new_profile_banner: '新しいプロフィールバナーを設定する',
profile_background: 'プロフィールの背景',
set_new_profile_background: '新しいプロフィールの背景を設定する',
settings: '設定',
theme: 'テーマ',
filtering: 'フィルタリング',
filtering_explanation: 'これらの単語を含むすべてのものはミュートされます、1行に1つのワードを入力してください',
attachments: '添付ファイル',
hide_attachments_in_tl: 'タイムラインの添付ファイルを隠す',
hide_attachments_in_convo: '会話の中の添付ファイルを隠す',
nsfw_clickthrough: 'NSFWファイルの非表示を有効にする',
autoload: '下にスクロールした時に自動で読み込むようにする',
reply_link_preview: 'マウスカーソルを重ねたときに返信リンクプレビューを表示するようにする'
},
notifications: {
notifications: '通知',
read: '読んだ!',
followed_you: 'フォローされました'
},
login: {
login: 'ログイン',
username: 'ユーザーネーム',
password: 'パスワード',
register: '登録',
logout: 'ログアウト'
},
registration: {
registration: '登録',
fullname: '表示名',
email: 'Eメール',
bio: 'プロフィール',
password_confirm: 'パスワードの確認'
},
post_status: {
posting: '投稿',
default: 'ちょうど羽田に着陸しました'
},
finder: {
find_user: 'ユーザー検索',
error_fetching_user: 'ユーザー検索でエラーが発生しました'
},
general: {
submit: '送信'
}
}
const fr = {
nav: {
timeline: 'Journal',
mentions: 'Notifications',
public_tl: 'Statuts Locaux',
twkn: 'Le Réseau Tout Entier'
},
user_card: {
follows_you: 'Vous Suit!',
following: 'Suivis!',
follow: 'Suivi',
statuses: 'Statuts',
mute: 'En Sourdine',
muted: 'Mis En Sourdine',
followers: 'Vous Suivent',
followees: 'Suivis',
per_day: 'par jour'
},
timeline: {
show_new: 'Afficher plus',
error_fetching: 'Erreur en cherchant des mises à jours',
up_to_date: 'A jour',
load_older: 'Afficher plus'
},
settings: {
user_settings: 'Paramètres Utilisateur',
name_bio: 'Nom & Bio',
name: 'Nom',
bio: 'Bio',
avatar: 'Avatar',
current_avatar: 'Votre avatar',
set_new_avatar: 'Changer d\'avatar',
profile_banner: 'Couverture du Profil',
current_profile_banner: 'Couverture du Profil',
set_new_profile_banner: 'Nouvelle couverture',
profile_background: 'Image de fond',
set_new_profile_background: 'Nouvelle image de fond',
settings: 'Paramètres',
theme: 'Thème',
filtering: 'Filtre',
filtering_explanation: 'Tout les statuts contenant ces mots vont être mis sous silence, un mot par ligne.',
attachments: 'Pièces jointes',
hide_attachments_in_tl: 'Cacher les pièces jointes dans le journal',
hide_attachments_in_convo: 'Cacher les pièces jointes dans les conversations',
nsfw_clickthrough: 'Activer le clic pour afficher les images taggées NSFW',
autoload: 'Activer le chargement automatique une fois le bas de la page atteint',
reply_link_preview: 'Activer un preview sur passage de la souris'
},
notifications: {
notifications: 'Notfications',
read: 'Lu!',
followed_you: 'vous a suivi'
},
general: {
submit: 'Envoyer'
}
}
const it = {
nav: {
timeline: 'Sequenza temporale',
mentions: 'Menzioni',
public_tl: 'Sequenza temporale pubblica',
twkn: 'L\'intiera rete conosciuta'
},
user_card: {
follows_you: 'Ti segue!',
following: 'Lo stai seguendo!',
follow: 'Segui',
statuses: 'Messaggi',
mute: 'Ammutolisci',
muted: 'Ammutoliti',
followers: 'Chi ti segue',
followees: 'Chi stai seguendo',
per_day: 'al giorno'
},
timeline: {
show_new: 'Mostra nuovi',
error_fetching: 'Errori nel prelievo aggiornamenti',
up_to_date: 'Aggiornato',
load_older: 'Carica messaggi più vecchi'
},
settings: {
user_settings: 'Configurazione dell\'utente',
name_bio: 'Nome & Introduzione',
name: 'Nome',
bio: 'Introduzione',
avatar: 'Avatar',
current_avatar: 'Il tuo attuale avatar',
set_new_avatar: 'Scegli un nuovo avatar',
profile_banner: 'Sfondo del tuo profilo',
current_profile_banner: 'Sfondo attuale',
set_new_profile_banner: 'Scegli un nuovo sfondo per il tuo profilo',
profile_background: 'Sfondo della tua pagina',
set_new_profile_background: 'Scegli un nuovo sfondo per la tua pagina',
settings: 'Settaggi',
theme: 'Tema',
filtering: 'Filtri',
filtering_explanation: 'Filtra via le notifiche che contengono le seguenti parole (inserisci rigo per rigo le parole di innesco)',
attachments: 'Allegati',
hide_attachments_in_tl: 'Nascondi gli allegati presenti nella sequenza temporale',
hide_attachments_in_convo: 'Nascondi gli allegati presenti nelle conversazioni',
nsfw_clickthrough: 'Abilita la trasparenza degli allegati NSFW',
autoload: 'Abilita caricamento automatico quando si raggiunge il fondo schermo',
reply_link_preview: 'Ability il reply-link preview al passaggio del mouse'
},
notifications: {
notifications: 'Notifiche',
read: 'Leggi!',
followed_you: 'ti ha seguito'
},
general: {
submit: 'Invia'
}
}
const pl = {
nav: {
timeline: 'Oś czasu',
mentions: 'Wzmianki',
public_tl: 'Publiczna oś czasu',
twkn: 'Cała znana sieć'
},
user_card: {
follows_you: 'Obserwuje cię!',
following: 'Obserwowany!',
follow: 'Obserwuj',
blocked: 'Zablokowany!',
block: 'Zablokuj',
statuses: 'Statusy',
mute: 'Wycisz',
muted: 'Wyciszony',
followers: 'Obserwujący',
followees: 'Obserwowani',
per_day: 'dziennie'
},
timeline: {
show_new: 'Pokaż nowe',
error_fetching: 'Błąd pobierania',
up_to_date: 'Na bieżąco',
load_older: 'Załaduj starsze statusy',
conversation: 'Rozmowa'
},
settings: {
user_settings: 'Ustawienia użytkownika',
name_bio: 'Imię i bio',
name: 'Imię',
bio: 'Bio',
avatar: 'Awatar',
current_avatar: 'Twój obecny awatar',
set_new_avatar: 'Ustaw nowy awatar',
profile_banner: 'Banner profilui',
current_profile_banner: 'Twój obecny banner profilu',
set_new_profile_banner: 'Ustaw nowy banner profilu',
profile_background: 'Tło profilu',
set_new_profile_background: 'Ustaw nowe tło profilu',
settings: 'Ustawienia',
theme: 'Motyw',
filtering: 'Filtrowanie',
filtering_explanation: 'Wszystkie statusy zawierające te słowa będą wyciszone. Jedno słowo na linijkę',
attachments: 'Załączniki',
hide_attachments_in_tl: 'Ukryj załączniki w osi czasu',
hide_attachments_in_convo: 'Ukryj załączniki w rozmowach',
nsfw_clickthrough: 'Włącz domyślne ukrywanie załączników o treści nieprzyzwoitej (NSFW)',
autoload: 'Włącz automatyczne ładowanie po przewinięciu do końca strony',
reply_link_preview: 'Włącz dymek z podglądem postu po najechaniu na znak odpowiedzi'
},
notifications: {
notifications: 'Powiadomienia',
read: 'Przeczytane!',
followed_you: 'obserwuje cię'
},
login: {
login: 'Zaloguj',
username: 'Użytkownik',
password: 'Hasło',
register: 'Zarejestruj',
logout: 'Wyloguj'
},
registration: {
registration: 'Rejestracja',
fullname: 'Wyświetlane imię',
email: 'Email',
bio: 'Bio',
password_confirm: 'Potwierdzenie hasła'
},
post_status: {
posting: 'Wysyłanie',
default: 'Właśnie wróciłem z kościoła'
},
finder: {
find_user: 'Znajdź użytkownika',
error_fetching_user: 'Błąd przy pobieraniu profilu'
},
general: {
submit: 'Wyślij'
}
}
const es = {
nav: {
timeline: 'Línea Temporal',
mentions: 'Menciones',
public_tl: 'Línea Temporal Pública',
twkn: 'Toda La Red Conocida'
},
user_card: {
follows_you: '¡Te sigue!',
following: '¡Siguiendo!',
follow: 'Seguir',
blocked: '¡Bloqueado!',
block: 'Bloquear',
statuses: 'Estados',
mute: 'Silenciar',
muted: 'Silenciado',
followers: 'Seguidores',
followees: 'Siguiendo',
per_day: 'por día'
},
timeline: {
show_new: 'Mostrar lo nuevo',
error_fetching: 'Error al cargar las actualizaciones',
up_to_date: 'Actualizado',
load_older: 'Cargar actualizaciones anteriores',
conversation: 'Conversación'
},
settings: {
user_settings: 'Ajustes de Usuario',
name_bio: 'Nombre y Biografía',
name: 'Nombre',
bio: 'Biografía',
avatar: 'Avatar',
current_avatar: 'Tu avatar actual',
set_new_avatar: 'Cambiar avatar',
profile_banner: 'Cabecera del perfil',
current_profile_banner: 'Cabecera actual',
set_new_profile_banner: 'Cambiar cabecera',
profile_background: 'Fondo del Perfil',
set_new_profile_background: 'Cambiar fondo del perfil',
settings: 'Ajustes',
theme: 'Tema',
filtering: 'Filtros',
filtering_explanation: 'Todos los estados que contengan estas palabras serán silenciados, una por línea',
attachments: 'Adjuntos',
hide_attachments_in_tl: 'Ocultar adjuntos en la línea temporal',
hide_attachments_in_convo: 'Ocultar adjuntos en las conversaciones',
nsfw_clickthrough: 'Activar el clic para ocultar los adjuntos NSFW',
autoload: 'Activar carga automática al llegar al final de la página',
reply_link_preview: 'Activar la previsualización del enlace de responder al pasar el ratón por encima'
},
notifications: {
notifications: 'Notificaciones',
read: '¡Leído!',
followed_you: 'empezó a seguirte'
},
login: {
login: 'Identificación',
username: 'Usuario',
password: 'Contraseña',
register: 'Registrar',
logout: 'Salir'
},
registration: {
registration: 'Registro',
fullname: 'Nombre a mostrar',
email: 'Correo electrónico',
bio: 'Biografía',
password_confirm: 'Confirmación de contraseña'
},
post_status: {
posting: 'Publicando',
default: 'Acabo de aterrizar en L.A.'
},
finder: {
find_user: 'Encontrar usuario',
error_fetching_user: 'Error al buscar usuario'
},
general: {
submit: 'Enviar'
}
}
const pt = {
nav: {
timeline: 'Linha do tempo',
mentions: 'Menções',
public_tl: 'Linha do tempo pública',
twkn: 'Toda a rede conhecida'
},
user_card: {
follows_you: 'Segue você!',
following: 'Seguindo!',
follow: 'Seguir',
blocked: 'Bloqueado!',
block: 'Bloquear',
statuses: 'Postagens',
mute: 'Mutar',
muted: 'Mudo',
followers: 'Seguidores',
followees: 'Seguindo',
per_day: 'por dia'
},
timeline: {
show_new: 'Mostrar novas',
error_fetching: 'Erro buscando atualizações',
up_to_date: 'Atualizado',
load_older: 'Carregar postagens antigas',
conversation: 'Conversa'
},
settings: {
user_settings: 'Configurações de Usuário',
name_bio: 'Nome & Biografia',
name: 'Nome',
bio: 'Biografia',
avatar: 'Avatar',
current_avatar: 'Seu avatar atual',
set_new_avatar: 'Mudar avatar',
profile_banner: 'Capa de perfil',
current_profile_banner: 'Sua capa de perfil atual',
set_new_profile_banner: 'Mudar capa de perfil',
profile_background: 'Plano de fundo de perfil',
set_new_profile_background: 'Mudar o plano de fundo de perfil',
settings: 'Configurações',
theme: 'Tema',
filtering: 'Filtragem',
filtering_explanation: 'Todas as postagens contendo estas palavras serão silenciadas, uma por linha.',
attachments: 'Anexos',
hide_attachments_in_tl: 'Ocultar anexos na linha do tempo.',
hide_attachments_in_convo: 'Ocultar anexos em conversas',
nsfw_clickthrough: 'Habilitar clique para ocultar anexos NSFW',
autoload: 'Habilitar carregamento automático quando a rolagem chegar ao fim.',
reply_link_preview: 'Habilitar a pré-visualização de link de respostas ao passar o mouse.'
},
notifications: {
notifications: 'Notificações',
read: 'Ler!',
followed_you: 'seguiu você'
},
login: {
login: 'Entrar',
username: 'Usuário',
password: 'Senha',
register: 'Registrar',
logout: 'Sair'
},
registration: {
registration: 'Registro',
fullname: 'Nome para exibição',
email: 'Correio eletônico',
bio: 'Biografia',
password_confirm: 'Confirmação de senha'
},
post_status: {
posting: 'Publicando',
default: 'Acabo de aterrizar em L.A.'
},
finder: {
find_user: 'Buscar usuário',
error_fetching_user: 'Erro procurando usuário'
},
general: {
submit: 'Enviar'
}
}
const messages = {
de,
fi,
en,
et,
hu,
ro,
ja,
fr,
it,
pl,
es,
pt
}
export default messages
diff --git a/src/modules/config.js b/src/modules/config.js
index f7d6e9c845..ac17747e8a 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -1,40 +1,41 @@
import { set } from 'vue'
import StyleSetter from '../services/style_setter/style_setter.js'
const defaultState = {
name: 'Pleroma FE',
colors: {},
hideAttachments: false,
hideAttachmentsInConv: false,
hideNsfw: true,
autoLoad: true,
+ streaming: false,
hoverPreview: true,
muteWords: []
}
const config = {
state: defaultState,
mutations: {
setOption (state, { name, value }) {
set(state, name, value)
}
},
actions: {
setPageTitle ({state}, option = '') {
document.title = `${option} ${state.name}`
},
setOption ({ commit, dispatch }, { name, value }) {
commit('setOption', {name, value})
switch (name) {
case 'name':
dispatch('setPageTitle')
break
case 'theme':
const fullPath = `/static/css/${value}`
StyleSetter.setStyle(fullPath, commit)
}
}
}
}
export default config

File Metadata

Mime Type
text/x-diff
Expires
Sat, Aug 8, 4:06 PM (1 d, 21 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1723687
Default Alt Text
(48 KB)

Event Timeline