From 2d914c331eea5f5b9036e10ef3d937628891b9e1 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Wed, 2 Sep 2020 20:40:47 +0300
Subject: replace setInterval for timelne, notifications and follow requests
---
src/modules/api.js | 2 +-
src/services/fetcher/fetcher.js | 23 ++++++++++++++++++++++
.../follow_request_fetcher.service.js | 4 ++--
.../notifications_fetcher.service.js | 7 ++++---
.../timeline_fetcher/timeline_fetcher.service.js | 7 ++++---
5 files changed, 34 insertions(+), 9 deletions(-)
create mode 100644 src/services/fetcher/fetcher.js
(limited to 'src')
diff --git a/src/modules/api.js b/src/modules/api.js
index 5e213f0d..7ddd8dde 100644
--- a/src/modules/api.js
+++ b/src/modules/api.js
@@ -20,7 +20,7 @@ const api = {
state.fetchers[fetcherName] = fetcher
},
removeFetcher (state, { fetcherName, fetcher }) {
- window.clearInterval(fetcher)
+ state.fetchers[fetcherName]()
delete state.fetchers[fetcherName]
},
setWsToken (state, token) {
diff --git a/src/services/fetcher/fetcher.js b/src/services/fetcher/fetcher.js
new file mode 100644
index 00000000..1d9239cc
--- /dev/null
+++ b/src/services/fetcher/fetcher.js
@@ -0,0 +1,23 @@
+
+export const makeFetcher = (call, interval) => {
+ let stopped = false
+ let timeout = null
+ let func = () => {}
+
+ func = () => {
+ call().finally(() => {
+ console.log('callbacks')
+ if (stopped) return
+ timeout = window.setTimeout(func, interval)
+ })
+ }
+
+ const stopFetcher = () => {
+ stopped = true
+ window.cancelTimeout(timeout)
+ }
+
+ func()
+
+ return stopFetcher
+}
diff --git a/src/services/follow_request_fetcher/follow_request_fetcher.service.js b/src/services/follow_request_fetcher/follow_request_fetcher.service.js
index 93fac9bc..8d1aba7b 100644
--- a/src/services/follow_request_fetcher/follow_request_fetcher.service.js
+++ b/src/services/follow_request_fetcher/follow_request_fetcher.service.js
@@ -1,4 +1,5 @@
import apiService from '../api/api.service.js'
+import { makeFetcher } from '../fetcher/fetcher.js'
const fetchAndUpdate = ({ store, credentials }) => {
return apiService.fetchFollowRequests({ credentials })
@@ -10,9 +11,8 @@ const fetchAndUpdate = ({ store, credentials }) => {
}
const startFetching = ({ credentials, store }) => {
- fetchAndUpdate({ credentials, store })
const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })
- return setInterval(boundFetchAndUpdate, 10000)
+ return makeFetcher(boundFetchAndUpdate, 10000)
}
const followRequestFetcher = {
diff --git a/src/services/notifications_fetcher/notifications_fetcher.service.js b/src/services/notifications_fetcher/notifications_fetcher.service.js
index 80be02ca..2a3a17be 100644
--- a/src/services/notifications_fetcher/notifications_fetcher.service.js
+++ b/src/services/notifications_fetcher/notifications_fetcher.service.js
@@ -1,4 +1,5 @@
import apiService from '../api/api.service.js'
+import makeFetcher from '../fetcher/fetcher.js'
const update = ({ store, notifications, older }) => {
store.dispatch('setNotificationsError', { value: false })
@@ -39,6 +40,7 @@ const fetchAndUpdate = ({ store, credentials, older = false }) => {
args['since'] = Math.max(...readNotifsIds)
fetchNotifications({ store, args, older })
}
+
return result
}
}
@@ -53,13 +55,12 @@ const fetchNotifications = ({ store, args, older }) => {
}
const startFetching = ({ credentials, store }) => {
- fetchAndUpdate({ credentials, store })
- const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })
// Initially there's set flag to silence all desktop notifications so
// that there won't spam of them when user just opened up the FE we
// reset that flag after a while to show new notifications once again.
setTimeout(() => store.dispatch('setNotificationsSilence', false), 10000)
- return setInterval(boundFetchAndUpdate, 10000)
+ const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store, refetch: true })
+ return makeFetcher(boundFetchAndUpdate, 10000)
}
const notificationsFetcher = {
diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js
index d0cddf84..8bbec2c7 100644
--- a/src/services/timeline_fetcher/timeline_fetcher.service.js
+++ b/src/services/timeline_fetcher/timeline_fetcher.service.js
@@ -1,6 +1,7 @@
import { camelCase } from 'lodash'
import apiService from '../api/api.service.js'
+import { makeFetcher } from '../fetcher/fetcher.js'
const update = ({ store, statuses, timeline, showImmediately, userId, pagination }) => {
const ccTimeline = camelCase(timeline)
@@ -70,9 +71,9 @@ const startFetching = ({ timeline = 'friends', credentials, store, userId = fals
const timelineData = rootState.statuses.timelines[camelCase(timeline)]
const showImmediately = timelineData.visibleStatuses.length === 0
timelineData.userId = userId
- fetchAndUpdate({ timeline, credentials, store, showImmediately, userId, tag })
- const boundFetchAndUpdate = () => fetchAndUpdate({ timeline, credentials, store, userId, tag })
- return setInterval(boundFetchAndUpdate, 10000)
+ const boundFetchAndUpdate = () =>
+ fetchAndUpdate({ timeline, credentials, store, showImmediately, userId, tag })
+ return makeFetcher(boundFetchAndUpdate, 10000)
}
const timelineFetcher = {
fetchAndUpdate,
--
cgit v1.2.3-70-g09d2
From 1b6eee049700f6fbb0c2e43877ead3ef4cf3041b Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Wed, 2 Sep 2020 21:01:31 +0300
Subject: change chats to use custom makeFetcher
---
src/components/chat/chat.js | 5 +++--
src/modules/chats.js | 11 +++++------
src/services/fetcher/fetcher.js | 3 +--
.../notifications_fetcher/notifications_fetcher.service.js | 2 +-
4 files changed, 10 insertions(+), 11 deletions(-)
(limited to 'src')
diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js
index 9c4e5b05..2062643d 100644
--- a/src/components/chat/chat.js
+++ b/src/components/chat/chat.js
@@ -5,6 +5,7 @@ import ChatMessage from '../chat_message/chat_message.vue'
import PostStatusForm from '../post_status_form/post_status_form.vue'
import ChatTitle from '../chat_title/chat_title.vue'
import chatService from '../../services/chat_service/chat_service.js'
+import { makeFetcher } from '../../services/fetcher/fetcher.js'
import { getScrollPosition, getNewTopPosition, isBottomedOut, scrollableContainerHeight } from './chat_layout_utils.js'
const BOTTOMED_OUT_OFFSET = 10
@@ -246,7 +247,7 @@ const Chat = {
const fetchOlderMessages = !!maxId
const sinceId = fetchLatest && chatMessageService.lastMessage && chatMessageService.lastMessage.id
- this.backendInteractor.chatMessages({ id: chatId, maxId, sinceId })
+ return this.backendInteractor.chatMessages({ id: chatId, maxId, sinceId })
.then((messages) => {
// Clear the current chat in case we're recovering from a ws connection loss.
if (isFirstFetch) {
@@ -287,7 +288,7 @@ const Chat = {
},
doStartFetching () {
this.$store.dispatch('startFetchingCurrentChat', {
- fetcher: () => setInterval(() => this.fetchChat({ fetchLatest: true }), 5000)
+ fetcher: () => makeFetcher(() => this.fetchChat({ fetchLatest: true }), 5000)
})
this.fetchChat({ isFirstFetch: true })
},
diff --git a/src/modules/chats.js b/src/modules/chats.js
index c7609018..45e4bdcc 100644
--- a/src/modules/chats.js
+++ b/src/modules/chats.js
@@ -3,6 +3,7 @@ import { find, omitBy, orderBy, sumBy } from 'lodash'
import chatService from '../services/chat_service/chat_service.js'
import { parseChat, parseChatMessage } from '../services/entity_normalizer/entity_normalizer.service.js'
import { maybeShowChatNotification } from '../services/chat_utils/chat_utils.js'
+import { makeFetcher } from '../services/fetcher/fetcher.js'
const emptyChatList = () => ({
data: [],
@@ -42,12 +43,10 @@ const chats = {
actions: {
// Chat list
startFetchingChats ({ dispatch, commit }) {
- const fetcher = () => {
- dispatch('fetchChats', { latest: true })
- }
+ const fetcher = () => dispatch('fetchChats', { latest: true })
fetcher()
commit('setChatListFetcher', {
- fetcher: () => setInterval(() => { fetcher() }, 5000)
+ fetcher: () => makeFetcher(fetcher, 5000)
})
},
stopFetchingChats ({ commit }) {
@@ -113,14 +112,14 @@ const chats = {
setChatListFetcher (state, { commit, fetcher }) {
const prevFetcher = state.chatListFetcher
if (prevFetcher) {
- clearInterval(prevFetcher)
+ prevFetcher()
}
state.chatListFetcher = fetcher && fetcher()
},
setCurrentChatFetcher (state, { fetcher }) {
const prevFetcher = state.fetcher
if (prevFetcher) {
- clearInterval(prevFetcher)
+ prevFetcher()
}
state.fetcher = fetcher && fetcher()
},
diff --git a/src/services/fetcher/fetcher.js b/src/services/fetcher/fetcher.js
index 1d9239cc..95b8c9d3 100644
--- a/src/services/fetcher/fetcher.js
+++ b/src/services/fetcher/fetcher.js
@@ -6,7 +6,6 @@ export const makeFetcher = (call, interval) => {
func = () => {
call().finally(() => {
- console.log('callbacks')
if (stopped) return
timeout = window.setTimeout(func, interval)
})
@@ -14,7 +13,7 @@ export const makeFetcher = (call, interval) => {
const stopFetcher = () => {
stopped = true
- window.cancelTimeout(timeout)
+ window.clearTimeout(timeout)
}
func()
diff --git a/src/services/notifications_fetcher/notifications_fetcher.service.js b/src/services/notifications_fetcher/notifications_fetcher.service.js
index 2a3a17be..c69d5b17 100644
--- a/src/services/notifications_fetcher/notifications_fetcher.service.js
+++ b/src/services/notifications_fetcher/notifications_fetcher.service.js
@@ -1,5 +1,5 @@
import apiService from '../api/api.service.js'
-import makeFetcher from '../fetcher/fetcher.js'
+import { makeFetcher } from '../fetcher/fetcher.js'
const update = ({ store, notifications, older }) => {
store.dispatch('setNotificationsError', { value: false })
--
cgit v1.2.3-70-g09d2
From d939f2ffbcb632361a0362f0f2049f99160dee64 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Wed, 2 Sep 2020 21:08:06 +0300
Subject: document makeFetcher a bit
---
src/services/fetcher/fetcher.js | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/services/fetcher/fetcher.js b/src/services/fetcher/fetcher.js
index 95b8c9d3..5a6ed4b8 100644
--- a/src/services/fetcher/fetcher.js
+++ b/src/services/fetcher/fetcher.js
@@ -1,11 +1,17 @@
-export const makeFetcher = (call, interval) => {
+// makeFetcher - replacement for setInterval for fetching, starts counting
+// the interval only after a request is done instead of immediately.
+// promiseCall is a function that returns a promise, it's called when created
+// and after every interval.
+// interval is the interval delay in ms.
+
+export const makeFetcher = (promiseCall, interval) => {
let stopped = false
let timeout = null
let func = () => {}
func = () => {
- call().finally(() => {
+ promiseCall().finally(() => {
if (stopped) return
timeout = window.setTimeout(func, interval)
})
--
cgit v1.2.3-70-g09d2
From 5b403ba7d13eaf851ae43e814c583ceb018e2d20 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Wed, 2 Sep 2020 22:12:50 +0300
Subject: fix timeline showimmediately being set wrongly
---
src/services/fetcher/fetcher.js | 8 ++++----
.../follow_request_fetcher/follow_request_fetcher.service.js | 1 +
.../notifications_fetcher/notifications_fetcher.service.js | 3 ++-
src/services/timeline_fetcher/timeline_fetcher.service.js | 3 ++-
4 files changed, 9 insertions(+), 6 deletions(-)
(limited to 'src')
diff --git a/src/services/fetcher/fetcher.js b/src/services/fetcher/fetcher.js
index 5a6ed4b8..aae1c2cc 100644
--- a/src/services/fetcher/fetcher.js
+++ b/src/services/fetcher/fetcher.js
@@ -1,9 +1,9 @@
// makeFetcher - replacement for setInterval for fetching, starts counting
// the interval only after a request is done instead of immediately.
-// promiseCall is a function that returns a promise, it's called when created
-// and after every interval.
-// interval is the interval delay in ms.
+// - promiseCall is a function that returns a promise, it's called the first
+// time after the first interval.
+// - interval is the interval delay in ms.
export const makeFetcher = (promiseCall, interval) => {
let stopped = false
@@ -22,7 +22,7 @@ export const makeFetcher = (promiseCall, interval) => {
window.clearTimeout(timeout)
}
- func()
+ timeout = window.setTimeout(func, interval)
return stopFetcher
}
diff --git a/src/services/follow_request_fetcher/follow_request_fetcher.service.js b/src/services/follow_request_fetcher/follow_request_fetcher.service.js
index 8d1aba7b..bec434aa 100644
--- a/src/services/follow_request_fetcher/follow_request_fetcher.service.js
+++ b/src/services/follow_request_fetcher/follow_request_fetcher.service.js
@@ -12,6 +12,7 @@ const fetchAndUpdate = ({ store, credentials }) => {
const startFetching = ({ credentials, store }) => {
const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })
+ boundFetchAndUpdate()
return makeFetcher(boundFetchAndUpdate, 10000)
}
diff --git a/src/services/notifications_fetcher/notifications_fetcher.service.js b/src/services/notifications_fetcher/notifications_fetcher.service.js
index c69d5b17..90988fc4 100644
--- a/src/services/notifications_fetcher/notifications_fetcher.service.js
+++ b/src/services/notifications_fetcher/notifications_fetcher.service.js
@@ -59,7 +59,8 @@ const startFetching = ({ credentials, store }) => {
// that there won't spam of them when user just opened up the FE we
// reset that flag after a while to show new notifications once again.
setTimeout(() => store.dispatch('setNotificationsSilence', false), 10000)
- const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store, refetch: true })
+ const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })
+ boundFetchAndUpdate()
return makeFetcher(boundFetchAndUpdate, 10000)
}
diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js
index 8bbec2c7..9f585f68 100644
--- a/src/services/timeline_fetcher/timeline_fetcher.service.js
+++ b/src/services/timeline_fetcher/timeline_fetcher.service.js
@@ -71,8 +71,9 @@ const startFetching = ({ timeline = 'friends', credentials, store, userId = fals
const timelineData = rootState.statuses.timelines[camelCase(timeline)]
const showImmediately = timelineData.visibleStatuses.length === 0
timelineData.userId = userId
+ fetchAndUpdate({ timeline, credentials, store, showImmediately, userId, tag })
const boundFetchAndUpdate = () =>
- fetchAndUpdate({ timeline, credentials, store, showImmediately, userId, tag })
+ fetchAndUpdate({ timeline, credentials, store, userId, tag })
return makeFetcher(boundFetchAndUpdate, 10000)
}
const timelineFetcher = {
--
cgit v1.2.3-70-g09d2
From 3fb35e8123d3a8cd151571b315b7ec4d7e0875c7 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Fri, 4 Sep 2020 11:19:53 +0300
Subject: rename to promiseInterval
---
src/components/chat/chat.js | 4 ++--
src/modules/api.js | 2 +-
src/modules/chats.js | 4 ++--
src/services/fetcher/fetcher.js | 28 ----------------------
.../follow_request_fetcher.service.js | 4 ++--
.../notifications_fetcher.service.js | 4 ++--
src/services/promise_interval/promise_interval.js | 28 ++++++++++++++++++++++
.../timeline_fetcher/timeline_fetcher.service.js | 4 ++--
8 files changed, 39 insertions(+), 39 deletions(-)
delete mode 100644 src/services/fetcher/fetcher.js
create mode 100644 src/services/promise_interval/promise_interval.js
(limited to 'src')
diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js
index 2062643d..15123885 100644
--- a/src/components/chat/chat.js
+++ b/src/components/chat/chat.js
@@ -5,7 +5,7 @@ import ChatMessage from '../chat_message/chat_message.vue'
import PostStatusForm from '../post_status_form/post_status_form.vue'
import ChatTitle from '../chat_title/chat_title.vue'
import chatService from '../../services/chat_service/chat_service.js'
-import { makeFetcher } from '../../services/fetcher/fetcher.js'
+import { promiseInterval } from '../../services/promise_interval/promise_interval.js'
import { getScrollPosition, getNewTopPosition, isBottomedOut, scrollableContainerHeight } from './chat_layout_utils.js'
const BOTTOMED_OUT_OFFSET = 10
@@ -288,7 +288,7 @@ const Chat = {
},
doStartFetching () {
this.$store.dispatch('startFetchingCurrentChat', {
- fetcher: () => makeFetcher(() => this.fetchChat({ fetchLatest: true }), 5000)
+ fetcher: () => promiseInterval(() => this.fetchChat({ fetchLatest: true }), 5000)
})
this.fetchChat({ isFirstFetch: true })
},
diff --git a/src/modules/api.js b/src/modules/api.js
index 7ddd8dde..73511442 100644
--- a/src/modules/api.js
+++ b/src/modules/api.js
@@ -20,7 +20,7 @@ const api = {
state.fetchers[fetcherName] = fetcher
},
removeFetcher (state, { fetcherName, fetcher }) {
- state.fetchers[fetcherName]()
+ state.fetchers[fetcherName].stop()
delete state.fetchers[fetcherName]
},
setWsToken (state, token) {
diff --git a/src/modules/chats.js b/src/modules/chats.js
index 45e4bdcc..60273a44 100644
--- a/src/modules/chats.js
+++ b/src/modules/chats.js
@@ -3,7 +3,7 @@ import { find, omitBy, orderBy, sumBy } from 'lodash'
import chatService from '../services/chat_service/chat_service.js'
import { parseChat, parseChatMessage } from '../services/entity_normalizer/entity_normalizer.service.js'
import { maybeShowChatNotification } from '../services/chat_utils/chat_utils.js'
-import { makeFetcher } from '../services/fetcher/fetcher.js'
+import { promiseInterval } from '../services/promise_interval/promise_interval.js'
const emptyChatList = () => ({
data: [],
@@ -46,7 +46,7 @@ const chats = {
const fetcher = () => dispatch('fetchChats', { latest: true })
fetcher()
commit('setChatListFetcher', {
- fetcher: () => makeFetcher(fetcher, 5000)
+ fetcher: () => promiseInterval(fetcher, 5000)
})
},
stopFetchingChats ({ commit }) {
diff --git a/src/services/fetcher/fetcher.js b/src/services/fetcher/fetcher.js
deleted file mode 100644
index aae1c2cc..00000000
--- a/src/services/fetcher/fetcher.js
+++ /dev/null
@@ -1,28 +0,0 @@
-
-// makeFetcher - replacement for setInterval for fetching, starts counting
-// the interval only after a request is done instead of immediately.
-// - promiseCall is a function that returns a promise, it's called the first
-// time after the first interval.
-// - interval is the interval delay in ms.
-
-export const makeFetcher = (promiseCall, interval) => {
- let stopped = false
- let timeout = null
- let func = () => {}
-
- func = () => {
- promiseCall().finally(() => {
- if (stopped) return
- timeout = window.setTimeout(func, interval)
- })
- }
-
- const stopFetcher = () => {
- stopped = true
- window.clearTimeout(timeout)
- }
-
- timeout = window.setTimeout(func, interval)
-
- return stopFetcher
-}
diff --git a/src/services/follow_request_fetcher/follow_request_fetcher.service.js b/src/services/follow_request_fetcher/follow_request_fetcher.service.js
index bec434aa..74af4081 100644
--- a/src/services/follow_request_fetcher/follow_request_fetcher.service.js
+++ b/src/services/follow_request_fetcher/follow_request_fetcher.service.js
@@ -1,5 +1,5 @@
import apiService from '../api/api.service.js'
-import { makeFetcher } from '../fetcher/fetcher.js'
+import { promiseInterval } from '../promise_interval/promise_interval.js'
const fetchAndUpdate = ({ store, credentials }) => {
return apiService.fetchFollowRequests({ credentials })
@@ -13,7 +13,7 @@ const fetchAndUpdate = ({ store, credentials }) => {
const startFetching = ({ credentials, store }) => {
const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })
boundFetchAndUpdate()
- return makeFetcher(boundFetchAndUpdate, 10000)
+ return promiseInterval(boundFetchAndUpdate, 10000)
}
const followRequestFetcher = {
diff --git a/src/services/notifications_fetcher/notifications_fetcher.service.js b/src/services/notifications_fetcher/notifications_fetcher.service.js
index 90988fc4..c908b644 100644
--- a/src/services/notifications_fetcher/notifications_fetcher.service.js
+++ b/src/services/notifications_fetcher/notifications_fetcher.service.js
@@ -1,5 +1,5 @@
import apiService from '../api/api.service.js'
-import { makeFetcher } from '../fetcher/fetcher.js'
+import { promiseInterval } from '../promise_interval/promise_interval.js'
const update = ({ store, notifications, older }) => {
store.dispatch('setNotificationsError', { value: false })
@@ -61,7 +61,7 @@ const startFetching = ({ credentials, store }) => {
setTimeout(() => store.dispatch('setNotificationsSilence', false), 10000)
const boundFetchAndUpdate = () => fetchAndUpdate({ credentials, store })
boundFetchAndUpdate()
- return makeFetcher(boundFetchAndUpdate, 10000)
+ return promiseInterval(boundFetchAndUpdate, 10000)
}
const notificationsFetcher = {
diff --git a/src/services/promise_interval/promise_interval.js b/src/services/promise_interval/promise_interval.js
new file mode 100644
index 00000000..ee46a236
--- /dev/null
+++ b/src/services/promise_interval/promise_interval.js
@@ -0,0 +1,28 @@
+
+// promiseInterval - replacement for setInterval for promises, starts counting
+// the interval only after a promise is done instead of immediately.
+// - promiseCall is a function that returns a promise, it's called the first
+// time after the first interval.
+// - interval is the interval delay in ms.
+
+export const promiseInterval = (promiseCall, interval) => {
+ let stopped = false
+ let timeout = null
+ let func = () => {}
+
+ func = () => {
+ promiseCall().finally(() => {
+ if (stopped) return
+ timeout = window.setTimeout(func, interval)
+ })
+ }
+
+ const stopFetcher = () => {
+ stopped = true
+ window.clearTimeout(timeout)
+ }
+
+ timeout = window.setTimeout(func, interval)
+
+ return { stop: stopFetcher }
+}
diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js
index 9f585f68..72ea4890 100644
--- a/src/services/timeline_fetcher/timeline_fetcher.service.js
+++ b/src/services/timeline_fetcher/timeline_fetcher.service.js
@@ -1,7 +1,7 @@
import { camelCase } from 'lodash'
import apiService from '../api/api.service.js'
-import { makeFetcher } from '../fetcher/fetcher.js'
+import { promiseInterval } from '../promise_interval/promise_interval.js'
const update = ({ store, statuses, timeline, showImmediately, userId, pagination }) => {
const ccTimeline = camelCase(timeline)
@@ -74,7 +74,7 @@ const startFetching = ({ timeline = 'friends', credentials, store, userId = fals
fetchAndUpdate({ timeline, credentials, store, showImmediately, userId, tag })
const boundFetchAndUpdate = () =>
fetchAndUpdate({ timeline, credentials, store, userId, tag })
- return makeFetcher(boundFetchAndUpdate, 10000)
+ return promiseInterval(boundFetchAndUpdate, 10000)
}
const timelineFetcher = {
fetchAndUpdate,
--
cgit v1.2.3-70-g09d2
From c89ac79140e059f89d4da88ce49c9bb24db4cc20 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Fri, 4 Sep 2020 11:22:14 +0300
Subject: fix chat fetcher stops, change fetcher code
---
src/modules/chats.js | 4 ++--
src/services/promise_interval/promise_interval.js | 3 +--
2 files changed, 3 insertions(+), 4 deletions(-)
(limited to 'src')
diff --git a/src/modules/chats.js b/src/modules/chats.js
index 60273a44..8e2fabb6 100644
--- a/src/modules/chats.js
+++ b/src/modules/chats.js
@@ -112,14 +112,14 @@ const chats = {
setChatListFetcher (state, { commit, fetcher }) {
const prevFetcher = state.chatListFetcher
if (prevFetcher) {
- prevFetcher()
+ prevFetcher.stop()
}
state.chatListFetcher = fetcher && fetcher()
},
setCurrentChatFetcher (state, { fetcher }) {
const prevFetcher = state.fetcher
if (prevFetcher) {
- prevFetcher()
+ prevFetcher.stop()
}
state.fetcher = fetcher && fetcher()
},
diff --git a/src/services/promise_interval/promise_interval.js b/src/services/promise_interval/promise_interval.js
index ee46a236..cf17970d 100644
--- a/src/services/promise_interval/promise_interval.js
+++ b/src/services/promise_interval/promise_interval.js
@@ -8,9 +8,8 @@
export const promiseInterval = (promiseCall, interval) => {
let stopped = false
let timeout = null
- let func = () => {}
- func = () => {
+ const func = () => {
promiseCall().finally(() => {
if (stopped) return
timeout = window.setTimeout(func, interval)
--
cgit v1.2.3-70-g09d2
From 40ca0b394ea066dea95c672eb0a42a35c9e65317 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Sun, 6 Sep 2020 15:28:09 +0300
Subject: add basic deletes support that works with masto WS
---
src/components/status/status.js | 2 +-
src/components/status/status.scss | 11 +++++++++++
src/components/status/status.vue | 26 ++++++++++++++++++++++++++
src/components/user_avatar/user_avatar.vue | 11 +++++++++++
src/i18n/en.json | 3 ++-
src/modules/api.js | 2 ++
src/modules/statuses.js | 4 ++++
7 files changed, 57 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/components/status/status.js b/src/components/status/status.js
index d263da68..5a6110c1 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -157,7 +157,7 @@ const Status = {
return this.mergedConfig.hideFilteredStatuses
},
hideStatus () {
- return this.deleted || (this.muted && this.hideFilteredStatuses)
+ return (this.muted && this.hideFilteredStatuses)
},
isFocused () {
// retweet or root of an expanded conversation
diff --git a/src/components/status/status.scss b/src/components/status/status.scss
index 8d292d3f..02ce3ffa 100644
--- a/src/components/status/status.scss
+++ b/src/components/status/status.scss
@@ -25,6 +25,17 @@ $status-margin: 0.75em;
--icon: var(--selectedPostIcon, $fallback--icon);
}
+ .deleted {
+ padding: $status-margin;
+ color: $fallback--faint;
+ color: var(--faint, $fallback--faint);
+ display: flex;
+ .deleted-text {
+ margin: 0.5em 0;
+ align-items: center;
+ }
+ }
+
.status-container {
display: flex;
padding: $status-margin;
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index 282ad37d..d7dfc0ab 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -95,6 +95,7 @@
+
+
+
+
+
+
+ {{ $t('status.status_deleted') }}
+
+
+
+
+
+
-
-
-
+
Date: Mon, 7 Sep 2020 10:39:30 +0300
Subject: change i18n phrasing
---
src/i18n/en.json | 2 +-
src/i18n/fi.json | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 850dc4cc..adf171e8 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -660,7 +660,7 @@
"hide_full_subject": "Hide full subject",
"show_content": "Show content",
"hide_content": "Hide content",
- "status_deleted": "The post was deleted"
+ "status_deleted": "This post was deleted"
},
"user_card": {
"approve": "Approve",
diff --git a/src/i18n/fi.json b/src/i18n/fi.json
index 3832dcaa..2524f278 100644
--- a/src/i18n/fi.json
+++ b/src/i18n/fi.json
@@ -578,7 +578,8 @@
"show_full_subject": "Näytä koko otsikko",
"hide_full_subject": "Piilota koko otsikko",
"show_content": "Näytä sisältö",
- "hide_content": "Piilota sisältö"
+ "hide_content": "Piilota sisältö",
+ "status_deleted": "Poistettu viesti"
},
"user_card": {
"approve": "Hyväksy",
--
cgit v1.2.3-70-g09d2
From 1ec9cde9638b3fb285185072532547b4a4d32158 Mon Sep 17 00:00:00 2001
From: Shpuld Shpludson
Date: Tue, 8 Sep 2020 06:31:02 +0000
Subject: Apply 1 suggestion(s) to 1 file(s)
---
src/components/status/status.scss | 1 +
1 file changed, 1 insertion(+)
(limited to 'src')
diff --git a/src/components/status/status.scss b/src/components/status/status.scss
index 02ce3ffa..2717c0ba 100644
--- a/src/components/status/status.scss
+++ b/src/components/status/status.scss
@@ -30,6 +30,7 @@ $status-margin: 0.75em;
color: $fallback--faint;
color: var(--faint, $fallback--faint);
display: flex;
+
.deleted-text {
margin: 0.5em 0;
align-items: center;
--
cgit v1.2.3-70-g09d2
From fa9176651952468ee996abe0e67d62d9a72d5a69 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Tue, 8 Sep 2020 09:32:43 +0300
Subject: rename to gravestone
---
src/components/status/status.scss | 2 +-
src/components/status/status.vue | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/components/status/status.scss b/src/components/status/status.scss
index 2717c0ba..bd23157f 100644
--- a/src/components/status/status.scss
+++ b/src/components/status/status.scss
@@ -25,7 +25,7 @@ $status-margin: 0.75em;
--icon: var(--selectedPostIcon, $fallback--icon);
}
- .deleted {
+ .gravestone {
padding: $status-margin;
color: $fallback--faint;
color: var(--faint, $fallback--faint);
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index cb81b14e..75142250 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -349,7 +349,7 @@
@@ -359,6 +359,7 @@
{{ $t('status.status_deleted') }}
Date: Mon, 7 Sep 2020 14:27:37 +0300
Subject: added import/export mutes
---
local.json | 4 ----
.../settings_modal/tabs/data_import_export_tab.js | 28 ++++++++++++++++------
.../settings_modal/tabs/data_import_export_tab.vue | 17 +++++++++++++
src/i18n/en.json | 6 +++++
src/services/api/api.service.js | 13 ++++++++++
5 files changed, 57 insertions(+), 11 deletions(-)
delete mode 100644 local.json
(limited to 'src')
diff --git a/local.json b/local.json
deleted file mode 100644
index e9f4df0b..00000000
--- a/local.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "target": "https://aqueous-sea-10253.herokuapp.com/",
- "staticConfigPreference": false
-}
diff --git a/src/components/settings_modal/tabs/data_import_export_tab.js b/src/components/settings_modal/tabs/data_import_export_tab.js
index 168f89e1..f4b736d2 100644
--- a/src/components/settings_modal/tabs/data_import_export_tab.js
+++ b/src/components/settings_modal/tabs/data_import_export_tab.js
@@ -1,6 +1,7 @@
import Importer from 'src/components/importer/importer.vue'
import Exporter from 'src/components/exporter/exporter.vue'
import Checkbox from 'src/components/checkbox/checkbox.vue'
+import { mapState } from 'vuex'
const DataImportExportTab = {
data () {
@@ -18,21 +19,26 @@ const DataImportExportTab = {
Checkbox
},
computed: {
- user () {
- return this.$store.state.users.currentUser
- }
+ ...mapState({
+ backendInteractor: (state) => state.api.backendInteractor,
+ user: (state) => state.users.currentUser
+ })
},
methods: {
getFollowsContent () {
- return this.$store.state.api.backendInteractor.exportFriends({ id: this.$store.state.users.currentUser.id })
+ return this.backendInteractor.exportFriends({ id: this.user.id })
.then(this.generateExportableUsersContent)
},
getBlocksContent () {
- return this.$store.state.api.backendInteractor.fetchBlocks()
+ return this.backendInteractor.fetchBlocks()
+ .then(this.generateExportableUsersContent)
+ },
+ getMutesContent () {
+ return this.backendInteractor.fetchMutes()
.then(this.generateExportableUsersContent)
},
importFollows (file) {
- return this.$store.state.api.backendInteractor.importFollows({ file })
+ return this.backendInteractor.importFollows({ file })
.then((status) => {
if (!status) {
throw new Error('failed')
@@ -40,7 +46,15 @@ const DataImportExportTab = {
})
},
importBlocks (file) {
- return this.$store.state.api.backendInteractor.importBlocks({ file })
+ return this.backendInteractor.importBlocks({ file })
+ .then((status) => {
+ if (!status) {
+ throw new Error('failed')
+ }
+ })
+ },
+ importMutes (file) {
+ return this.backendInteractor.importMutes({ file })
.then((status) => {
if (!status) {
throw new Error('failed')
diff --git a/src/components/settings_modal/tabs/data_import_export_tab.vue b/src/components/settings_modal/tabs/data_import_export_tab.vue
index b5d0f5ed..a406077d 100644
--- a/src/components/settings_modal/tabs/data_import_export_tab.vue
+++ b/src/components/settings_modal/tabs/data_import_export_tab.vue
@@ -36,6 +36,23 @@
:export-button-label="$t('settings.block_export_button')"
/>
+
+
{{ $t('settings.mute_import') }}
+
{{ $t('settings.import_mutes_from_a_csv_file') }}
+
+
+
+
{{ $t('settings.mute_export') }}
+
+
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 8540f551..cf0a7e7c 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -276,6 +276,12 @@
"block_import": "Block import",
"block_import_error": "Error importing blocks",
"blocks_imported": "Blocks imported! Processing them will take a while.",
+ "mute_export": "Mute export",
+ "mute_export_button": "Export your mutes to a csv file",
+ "mute_import": "Mute import",
+ "mute_import_error": "Error importing mutes",
+ "mutes_imported": "Mutes imported! Processing them will take a while.",
+ "import_mutes_from_a_csv_file": "Import mutes from a csv file",
"blocks_tab": "Blocks",
"bot": "This is a bot account",
"btnRadius": "Buttons",
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index da519001..34f86f93 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -3,6 +3,7 @@ import { parseStatus, parseUser, parseNotification, parseAttachment, parseChat,
import { RegistrationError, StatusCodeError } from '../errors/errors'
/* eslint-env browser */
+const MUTES_IMPORT_URL = '/api/pleroma/mutes_import'
const BLOCKS_IMPORT_URL = '/api/pleroma/blocks_import'
const FOLLOW_IMPORT_URL = '/api/pleroma/follow_import'
const DELETE_ACCOUNT_URL = '/api/pleroma/delete_account'
@@ -710,6 +711,17 @@ const setMediaDescription = ({ id, description, credentials }) => {
}).then((data) => parseAttachment(data))
}
+const importMutes = ({ file, credentials }) => {
+ const formData = new FormData()
+ formData.append('list', file)
+ return fetch(MUTES_IMPORT_URL, {
+ body: formData,
+ method: 'POST',
+ headers: authHeaders(credentials)
+ })
+ .then((response) => response.ok)
+}
+
const importBlocks = ({ file, credentials }) => {
const formData = new FormData()
formData.append('list', file)
@@ -1280,6 +1292,7 @@ const apiService = {
getCaptcha,
updateProfileImages,
updateProfile,
+ importMutes,
importBlocks,
importFollows,
deleteAccount,
--
cgit v1.2.3-70-g09d2
From 70a5619496db1620fcc6d0127449ffb498a3dae4 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Fri, 18 Sep 2020 11:07:38 +0200
Subject: [fix] case in/sensitive emoji search
---
src/components/emoji_picker/emoji_picker.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js
index 0f397b59..5c09f6ca 100644
--- a/src/components/emoji_picker/emoji_picker.js
+++ b/src/components/emoji_picker/emoji_picker.js
@@ -8,7 +8,10 @@ const LOAD_EMOJI_BY = 60
const LOAD_EMOJI_MARGIN = 64
const filterByKeyword = (list, keyword = '') => {
- return list.filter(x => x.displayText.includes(keyword))
+ const keywordLowercase = keyword.toLowerCase()
+ return list.filter(emoji =>
+ emoji.displayText.toLowerCase().includes(keywordLowercase)
+ )
}
const EmojiPicker = {
--
cgit v1.2.3-70-g09d2
From f9977dbb3c9b316521b6be40ddd1a34411f2d835 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Sat, 19 Sep 2020 21:28:03 +0200
Subject: fix excessive underline in sidebar
---
src/App.scss | 1 +
src/components/nav_panel/nav_panel.vue | 10 +++++-----
src/components/timeline_menu/timeline_menu.vue | 6 +-----
3 files changed, 7 insertions(+), 10 deletions(-)
(limited to 'src')
diff --git a/src/App.scss b/src/App.scss
index e2e2d079..8b1bbd2d 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -809,6 +809,7 @@ nav {
.button-icon {
font-size: 1.2em;
+ margin-right: 0.5em;
}
@keyframes shakeError {
diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue
index f8459fd1..080e547f 100644
--- a/src/components/nav_panel/nav_panel.vue
+++ b/src/components/nav_panel/nav_panel.vue
@@ -7,12 +7,12 @@
:to="{ name: timelinesRoute }"
:class="onTimelineRoute && 'router-link-active'"
>
- {{ $t("nav.timelines") }}
+ {{ $t("nav.timelines") }}
- {{ $t("nav.interactions") }}
+ {{ $t("nav.interactions") }}
@@ -23,12 +23,12 @@
>
{{ unreadChatCount }}
- {{ $t("nav.chats") }}
+ {{ $t("nav.chats") }}
- {{ $t("nav.friend_requests") }}
+ {{ $t("nav.friend_requests") }}
- {{ $t("nav.about") }}
+ {{ $t("nav.about") }}
diff --git a/src/components/timeline_menu/timeline_menu.vue b/src/components/timeline_menu/timeline_menu.vue
index be512d60..3c029093 100644
--- a/src/components/timeline_menu/timeline_menu.vue
+++ b/src/components/timeline_menu/timeline_menu.vue
@@ -64,7 +64,7 @@
.timeline-menu-popover-wrap {
overflow: hidden;
// Match panel heading padding to line up menu with bottom of heading
- margin-top: 0.6rem;
+ margin-top: 0.6rem 0.65em;
padding: 0 15px 15px 15px;
}
.timeline-menu-popover {
@@ -138,10 +138,6 @@
&:last-child {
border: none;
}
-
- i {
- margin: 0 0.5em;
- }
}
a {
--
cgit v1.2.3-70-g09d2
From 20362546d10287cbba8150424e5e073c39219757 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Sat, 19 Sep 2020 21:50:56 +0200
Subject: fix/overflow-for-chat-unread
---
src/App.scss | 3 +++
1 file changed, 3 insertions(+)
(limited to 'src')
diff --git a/src/App.scss b/src/App.scss
index e2e2d079..88e5df86 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -941,6 +941,9 @@ nav {
min-height: 1.3rem;
max-height: 1.3rem;
line-height: 1.3rem;
+ max-width: 10em;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.chat-layout {
--
cgit v1.2.3-70-g09d2
From fee654f1eee276a1d30c8fcb2699e567fc281967 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Mon, 21 Sep 2020 17:29:36 +0200
Subject: feat/reorder-emojis-by-position-of-keyword
---
src/components/emoji_picker/emoji_picker.js | 13 ++++++++++---
src/components/react_button/react_button.js | 11 ++++++++---
2 files changed, 18 insertions(+), 6 deletions(-)
(limited to 'src')
diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js
index 5c09f6ca..713ecd8b 100644
--- a/src/components/emoji_picker/emoji_picker.js
+++ b/src/components/emoji_picker/emoji_picker.js
@@ -8,10 +8,17 @@ const LOAD_EMOJI_BY = 60
const LOAD_EMOJI_MARGIN = 64
const filterByKeyword = (list, keyword = '') => {
+ if (keyword === '') return list
+
const keywordLowercase = keyword.toLowerCase()
- return list.filter(emoji =>
- emoji.displayText.toLowerCase().includes(keywordLowercase)
- )
+ const orderedEmojiList = []
+ for (const emoji of list) {
+ const indexOfKeyword = emoji.displayText.toLowerCase().indexOf( keywordLowercase )
+ if ( indexOfKeyword > -1 ) {
+ orderedEmojiList.splice(indexOfKeyword, 0, emoji)
+ }
+ }
+ return orderedEmojiList
}
const EmojiPicker = {
diff --git a/src/components/react_button/react_button.js b/src/components/react_button/react_button.js
index abcf0455..473a2506 100644
--- a/src/components/react_button/react_button.js
+++ b/src/components/react_button/react_button.js
@@ -29,9 +29,14 @@ const ReactButton = {
emojis () {
if (this.filterWord !== '') {
const filterWordLowercase = this.filterWord.toLowerCase()
- return this.$store.state.instance.emoji.filter(emoji =>
- emoji.displayText.toLowerCase().includes(filterWordLowercase)
- )
+ const orderedEmojiList = []
+ for (const emoji of this.$store.state.instance.emoji) {
+ const indexOfFilterWord = emoji.displayText.toLowerCase().indexOf( filterWordLowercase )
+ if ( indexOfFilterWord > -1 ) {
+ orderedEmojiList.splice(indexOfFilterWord, 0, emoji)
+ }
+ }
+ return orderedEmojiList
}
return this.$store.state.instance.emoji || []
},
--
cgit v1.2.3-70-g09d2
From f1e1f20a8d89abf7920997c12d5c7b48cdb2d628 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Mon, 21 Sep 2020 17:42:17 +0200
Subject: fix 8x spaces inside this paren
---
src/components/emoji_picker/emoji_picker.js | 4 ++--
src/components/react_button/react_button.js | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
(limited to 'src')
diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js
index 713ecd8b..28ab0376 100644
--- a/src/components/emoji_picker/emoji_picker.js
+++ b/src/components/emoji_picker/emoji_picker.js
@@ -13,8 +13,8 @@ const filterByKeyword = (list, keyword = '') => {
const keywordLowercase = keyword.toLowerCase()
const orderedEmojiList = []
for (const emoji of list) {
- const indexOfKeyword = emoji.displayText.toLowerCase().indexOf( keywordLowercase )
- if ( indexOfKeyword > -1 ) {
+ const indexOfKeyword = emoji.displayText.toLowerCase().indexOf(keywordLowercase)
+ if (indexOfKeyword > -1) {
orderedEmojiList.splice(indexOfKeyword, 0, emoji)
}
}
diff --git a/src/components/react_button/react_button.js b/src/components/react_button/react_button.js
index 473a2506..28ce884a 100644
--- a/src/components/react_button/react_button.js
+++ b/src/components/react_button/react_button.js
@@ -31,8 +31,8 @@ const ReactButton = {
const filterWordLowercase = this.filterWord.toLowerCase()
const orderedEmojiList = []
for (const emoji of this.$store.state.instance.emoji) {
- const indexOfFilterWord = emoji.displayText.toLowerCase().indexOf( filterWordLowercase )
- if ( indexOfFilterWord > -1 ) {
+ const indexOfFilterWord = emoji.displayText.toLowerCase().indexOf(filterWordLowercase)
+ if (indexOfFilterWord > -1) {
orderedEmojiList.splice(indexOfFilterWord, 0, emoji)
}
}
--
cgit v1.2.3-70-g09d2
From cff202241b6eff8f6b381866e00a0392080d05a2 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Mon, 21 Sep 2020 18:10:55 +0200
Subject: improved algorithm, possibly speed too
---
src/components/emoji_picker/emoji_picker.js | 9 ++++++---
src/components/react_button/react_button.js | 9 ++++++---
2 files changed, 12 insertions(+), 6 deletions(-)
(limited to 'src')
diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js
index 28ab0376..29c559df 100644
--- a/src/components/emoji_picker/emoji_picker.js
+++ b/src/components/emoji_picker/emoji_picker.js
@@ -11,14 +11,17 @@ const filterByKeyword = (list, keyword = '') => {
if (keyword === '') return list
const keywordLowercase = keyword.toLowerCase()
- const orderedEmojiList = []
+ let orderedEmojiList = []
for (const emoji of list) {
const indexOfKeyword = emoji.displayText.toLowerCase().indexOf(keywordLowercase)
if (indexOfKeyword > -1) {
- orderedEmojiList.splice(indexOfKeyword, 0, emoji)
+ if (!Array.isArray(orderedEmojiList[keywordLowercase])) {
+ orderedEmojiList[keywordLowercase] = []
+ }
+ orderedEmojiList[keywordLowercase].push(emoji)
}
}
- return orderedEmojiList
+ return orderedEmojiList.flat()
}
const EmojiPicker = {
diff --git a/src/components/react_button/react_button.js b/src/components/react_button/react_button.js
index 28ce884a..16014405 100644
--- a/src/components/react_button/react_button.js
+++ b/src/components/react_button/react_button.js
@@ -29,14 +29,17 @@ const ReactButton = {
emojis () {
if (this.filterWord !== '') {
const filterWordLowercase = this.filterWord.toLowerCase()
- const orderedEmojiList = []
+ let orderedEmojiList = []
for (const emoji of this.$store.state.instance.emoji) {
const indexOfFilterWord = emoji.displayText.toLowerCase().indexOf(filterWordLowercase)
if (indexOfFilterWord > -1) {
- orderedEmojiList.splice(indexOfFilterWord, 0, emoji)
+ if (!Array.isArray(orderedEmojiList[indexOfFilterWord])) {
+ orderedEmojiList[indexOfFilterWord] = []
+ }
+ orderedEmojiList[indexOfFilterWord].push(emoji)
}
}
- return orderedEmojiList
+ return orderedEmojiList.flat()
}
return this.$store.state.instance.emoji || []
},
--
cgit v1.2.3-70-g09d2
From bb59b8ee56f8c5c89720c9a42037a730caba4d11 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Mon, 21 Sep 2020 18:13:31 +0200
Subject: fixed copy-pasting leftovers
---
src/components/emoji_picker/emoji_picker.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
(limited to 'src')
diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js
index 29c559df..3ad80df3 100644
--- a/src/components/emoji_picker/emoji_picker.js
+++ b/src/components/emoji_picker/emoji_picker.js
@@ -15,10 +15,10 @@ const filterByKeyword = (list, keyword = '') => {
for (const emoji of list) {
const indexOfKeyword = emoji.displayText.toLowerCase().indexOf(keywordLowercase)
if (indexOfKeyword > -1) {
- if (!Array.isArray(orderedEmojiList[keywordLowercase])) {
- orderedEmojiList[keywordLowercase] = []
+ if (!Array.isArray(orderedEmojiList[indexOfKeyword])) {
+ orderedEmojiList[indexOfKeyword] = []
}
- orderedEmojiList[keywordLowercase].push(emoji)
+ orderedEmojiList[indexOfKeyword].push(emoji)
}
}
return orderedEmojiList.flat()
--
cgit v1.2.3-70-g09d2
From 3dacef944cf6980dc3a3c1843d5b3f94b851240a Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Thu, 24 Sep 2020 12:05:51 +0200
Subject: remove bio-table's max-width
---
src/components/user_profile/user_profile.vue | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue
index c7c67c0a..b26499b4 100644
--- a/src/components/user_profile/user_profile.vue
+++ b/src/components/user_profile/user_profile.vue
@@ -156,8 +156,7 @@
.user-profile-field {
display: flex;
- margin: 0.25em auto;
- max-width: 32em;
+ margin: 0.25em;
border: 1px solid var(--border, $fallback--border);
border-radius: $fallback--inputRadius;
border-radius: var(--inputRadius, $fallback--inputRadius);
--
cgit v1.2.3-70-g09d2
From f174f289a93e6bef1182a2face00bb809da49d18 Mon Sep 17 00:00:00 2001
From: Shpuld Shpludson
Date: Tue, 29 Sep 2020 10:18:37 +0000
Subject: Timeline virtual scrolling
---
CHANGELOG.md | 3 +
src/components/attachment/attachment.vue | 4 ++
src/components/conversation/conversation.js | 20 ++++++-
src/components/conversation/conversation.vue | 11 +++-
src/components/react_button/react_button.js | 5 +-
src/components/retweet_button/retweet_button.js | 5 +-
src/components/settings_modal/tabs/general_tab.vue | 5 ++
src/components/status/status.js | 31 ++++++++---
src/components/status/status.scss | 5 ++
src/components/status/status.vue | 7 ++-
src/components/status_content/status_content.vue | 2 +
src/components/still-image/still-image.js | 10 ++--
src/components/timeline/timeline.js | 64 +++++++++++++++++++++-
src/components/timeline/timeline.vue | 6 +-
.../video_attachment/video_attachment.js | 47 +++++++++++-----
.../video_attachment/video_attachment.vue | 3 +-
src/i18n/en.json | 1 +
src/modules/config.js | 3 +-
src/modules/instance.js | 1 +
src/modules/statuses.js | 6 ++
src/services/api/api.service.js | 2 +
21 files changed, 203 insertions(+), 38 deletions(-)
(limited to 'src')
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 18dafa8e..eebc7115 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
+### Added
+- New option to optimize timeline rendering to make the site more responsive (enabled by default)
+
## [Unreleased patch]
### Changed
diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue
index 63e0ceba..7fabc963 100644
--- a/src/components/attachment/attachment.vue
+++ b/src/components/attachment/attachment.vue
@@ -80,6 +80,8 @@
class="video"
:attachment="attachment"
:controls="allowPlay"
+ @play="$emit('play')"
+ @pause="$emit('pause')"
/>
@@ -18,6 +20,7 @@
+
@@ -53,8 +60,8 @@
.conversation-status {
border-color: $fallback--border;
border-color: var(--border, $fallback--border);
- border-left: 4px solid $fallback--cRed;
- border-left: 4px solid var(--cRed, $fallback--cRed);
+ border-left-color: $fallback--cRed;
+ border-left-color: var(--cRed, $fallback--cRed);
}
.conversation-status:last-child {
diff --git a/src/components/react_button/react_button.js b/src/components/react_button/react_button.js
index abcf0455..11627e9c 100644
--- a/src/components/react_button/react_button.js
+++ b/src/components/react_button/react_button.js
@@ -1,5 +1,4 @@
import Popover from '../popover/popover.vue'
-import { mapGetters } from 'vuex'
const ReactButton = {
props: ['status'],
@@ -35,7 +34,9 @@ const ReactButton = {
}
return this.$store.state.instance.emoji || []
},
- ...mapGetters(['mergedConfig'])
+ mergedConfig () {
+ return this.$store.getters.mergedConfig
+ }
}
}
diff --git a/src/components/retweet_button/retweet_button.js b/src/components/retweet_button/retweet_button.js
index d9a0f92e..5a41f22d 100644
--- a/src/components/retweet_button/retweet_button.js
+++ b/src/components/retweet_button/retweet_button.js
@@ -1,4 +1,3 @@
-import { mapGetters } from 'vuex'
const RetweetButton = {
props: ['status', 'loggedIn', 'visibility'],
@@ -28,7 +27,9 @@ const RetweetButton = {
'animate-spin': this.animated
}
},
- ...mapGetters(['mergedConfig'])
+ mergedConfig () {
+ return this.$store.getters.mergedConfig
+ }
}
}
diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue
index 7f06d0bd..13482de7 100644
--- a/src/components/settings_modal/tabs/general_tab.vue
+++ b/src/components/settings_modal/tabs/general_tab.vue
@@ -58,6 +58,11 @@
{{ $t('settings.emoji_reactions_on_timeline') }}
+
+
+ {{ $t('settings.virtual_scrolling') }}
+
+
diff --git a/src/components/status/status.js b/src/components/status/status.js
index d263da68..cd6e2f72 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -15,7 +15,6 @@ import generateProfileLink from 'src/services/user_profile_link_generator/user_p
import { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'
import { muteWordHits } from '../../services/status_parser/status_parser.js'
import { unescape, uniqBy } from 'lodash'
-import { mapGetters, mapState } from 'vuex'
const Status = {
name: 'Status',
@@ -54,6 +53,8 @@ const Status = {
replying: false,
unmuted: false,
userExpanded: false,
+ mediaPlaying: [],
+ suspendable: true,
error: null
}
},
@@ -157,7 +158,7 @@ const Status = {
return this.mergedConfig.hideFilteredStatuses
},
hideStatus () {
- return this.deleted || (this.muted && this.hideFilteredStatuses)
+ return this.deleted || (this.muted && this.hideFilteredStatuses) || this.virtualHidden
},
isFocused () {
// retweet or root of an expanded conversation
@@ -207,11 +208,18 @@ const Status = {
hidePostStats () {
return this.mergedConfig.hidePostStats
},
- ...mapGetters(['mergedConfig']),
- ...mapState({
- betterShadow: state => state.interface.browserSupport.cssFilter,
- currentUser: state => state.users.currentUser
- })
+ currentUser () {
+ return this.$store.state.users.currentUser
+ },
+ betterShadow () {
+ return this.$store.state.interface.browserSupport.cssFilter
+ },
+ mergedConfig () {
+ return this.$store.getters.mergedConfig
+ },
+ isSuspendable () {
+ return !this.replying && this.mediaPlaying.length === 0
+ }
},
methods: {
visibilityIcon (visibility) {
@@ -251,6 +259,12 @@ const Status = {
},
generateUserProfileLink (id, name) {
return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames)
+ },
+ addMediaPlaying (id) {
+ this.mediaPlaying.push(id)
+ },
+ removeMediaPlaying (id) {
+ this.mediaPlaying = this.mediaPlaying.filter(mediaId => mediaId !== id)
}
},
watch: {
@@ -280,6 +294,9 @@ const Status = {
if (this.isFocused && this.statusFromGlobalRepository.favoritedBy && this.statusFromGlobalRepository.favoritedBy.length !== num) {
this.$store.dispatch('fetchFavs', this.status.id)
}
+ },
+ 'isSuspendable': function (val) {
+ this.suspendable = val
}
},
filters: {
diff --git a/src/components/status/status.scss b/src/components/status/status.scss
index 8d292d3f..c92d870b 100644
--- a/src/components/status/status.scss
+++ b/src/components/status/status.scss
@@ -25,6 +25,11 @@ $status-margin: 0.75em;
--icon: var(--selectedPostIcon, $fallback--icon);
}
+ &.-conversation {
+ border-left-width: 4px;
+ border-left-style: solid;
+ }
+
.status-container {
display: flex;
padding: $status-margin;
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index 282ad37d..aa67e433 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -16,7 +16,7 @@
/>
-
+
+
@@ -354,6 +357,7 @@
@onSuccess="clearError"
/>
+
+
diff --git a/src/components/status_content/status_content.vue b/src/components/status_content/status_content.vue
index 76fe3278..f7fb5ee2 100644
--- a/src/components/status_content/status_content.vue
+++ b/src/components/status_content/status_content.vue
@@ -107,6 +107,8 @@
:attachment="attachment"
:allow-play="true"
:set-media="setMedia()"
+ @play="$emit('mediaplay', attachment.id)"
+ @pause="$emit('mediapause', attachment.id)"
/>
_.id)
+ },
+ virtualScrollingEnabled () {
+ return this.$store.getters.mergedConfig.virtualScrolling
}
},
created () {
@@ -85,7 +96,7 @@ const Timeline = {
const credentials = store.state.users.currentUser.credentials
const showImmediately = this.timeline.visibleStatuses.length === 0
- window.addEventListener('scroll', this.scrollLoad)
+ window.addEventListener('scroll', this.handleScroll)
if (store.state.api.fetchers[this.timelineName]) { return false }
@@ -104,9 +115,10 @@ const Timeline = {
this.unfocused = document.hidden
}
window.addEventListener('keydown', this.handleShortKey)
+ setTimeout(this.determineVisibleStatuses, 250)
},
destroyed () {
- window.removeEventListener('scroll', this.scrollLoad)
+ window.removeEventListener('scroll', this.handleScroll)
window.removeEventListener('keydown', this.handleShortKey)
if (typeof document.hidden !== 'undefined') document.removeEventListener('visibilitychange', this.handleVisibilityChange, false)
this.$store.commit('setLoading', { timeline: this.timelineName, value: false })
@@ -146,6 +158,48 @@ const Timeline = {
}
})
}, 1000, this),
+ determineVisibleStatuses () {
+ if (!this.$refs.timeline) return
+ if (!this.virtualScrollingEnabled) return
+
+ const statuses = this.$refs.timeline.children
+ const cappedScrollIndex = Math.max(0, Math.min(this.virtualScrollIndex, statuses.length - 1))
+
+ if (statuses.length === 0) return
+
+ const height = Math.max(document.body.offsetHeight, window.pageYOffset)
+
+ const centerOfScreen = window.pageYOffset + (window.innerHeight * 0.5)
+
+ // Start from approximating the index of some visible status by using the
+ // the center of the screen on the timeline.
+ let approxIndex = Math.floor(statuses.length * (centerOfScreen / height))
+ let err = statuses[approxIndex].getBoundingClientRect().y
+
+ // if we have a previous scroll index that can be used, test if it's
+ // closer than the previous approximation, use it if so
+
+ const virtualScrollIndexY = statuses[cappedScrollIndex].getBoundingClientRect().y
+ if (Math.abs(err) > virtualScrollIndexY) {
+ approxIndex = cappedScrollIndex
+ err = virtualScrollIndexY
+ }
+
+ // if the status is too far from viewport, check the next/previous ones if
+ // they happen to be better
+ while (err < -20 && approxIndex < statuses.length - 1) {
+ err += statuses[approxIndex].offsetHeight
+ approxIndex++
+ }
+ while (err > window.innerHeight + 100 && approxIndex > 0) {
+ approxIndex--
+ err -= statuses[approxIndex].offsetHeight
+ }
+
+ // this status is now the center point for virtual scrolling and visible
+ // statuses will be nearby statuses before and after it
+ this.virtualScrollIndex = approxIndex
+ },
scrollLoad (e) {
const bodyBRect = document.body.getBoundingClientRect()
const height = Math.max(bodyBRect.height, -(bodyBRect.y))
@@ -155,6 +209,10 @@ const Timeline = {
this.fetchOlderStatuses()
}
},
+ handleScroll: throttle(function (e) {
+ this.determineVisibleStatuses()
+ this.scrollLoad(e)
+ }, 200),
handleVisibilityChange () {
this.unfocused = document.hidden
}
diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue
index 2ff933e9..c1e2f44b 100644
--- a/src/components/timeline/timeline.vue
+++ b/src/components/timeline/timeline.vue
@@ -32,7 +32,10 @@
-
+
diff --git a/src/components/video_attachment/video_attachment.js b/src/components/video_attachment/video_attachment.js
index f0ca7e89..107b8985 100644
--- a/src/components/video_attachment/video_attachment.js
+++ b/src/components/video_attachment/video_attachment.js
@@ -3,27 +3,48 @@ const VideoAttachment = {
props: ['attachment', 'controls'],
data () {
return {
- loopVideo: this.$store.getters.mergedConfig.loopVideo
+ blocksSuspend: false,
+ // Start from true because removing "loop" property seems buggy in Vue
+ hasAudio: true
+ }
+ },
+ computed: {
+ loopVideo () {
+ if (this.$store.getters.mergedConfig.loopVideoSilentOnly) {
+ return !this.hasAudio
+ }
+ return this.$store.getters.mergedConfig.loopVideo
}
},
methods: {
- onVideoDataLoad (e) {
+ onPlaying (e) {
+ this.setHasAudio(e)
+ if (this.loopVideo) {
+ this.$emit('play', { looping: true })
+ return
+ }
+ this.$emit('play')
+ },
+ onPaused (e) {
+ this.$emit('pause')
+ },
+ setHasAudio (e) {
const target = e.srcElement || e.target
+ // If hasAudio is false, we've already marked this video to not have audio,
+ // a video can't gain audio out of nowhere so don't bother checking again.
+ if (!this.hasAudio) return
if (typeof target.webkitAudioDecodedByteCount !== 'undefined') {
// non-zero if video has audio track
- if (target.webkitAudioDecodedByteCount > 0) {
- this.loopVideo = this.loopVideo && !this.$store.getters.mergedConfig.loopVideoSilentOnly
- }
- } else if (typeof target.mozHasAudio !== 'undefined') {
+ if (target.webkitAudioDecodedByteCount > 0) return
+ }
+ if (typeof target.mozHasAudio !== 'undefined') {
// true if video has audio track
- if (target.mozHasAudio) {
- this.loopVideo = this.loopVideo && !this.$store.getters.mergedConfig.loopVideoSilentOnly
- }
- } else if (typeof target.audioTracks !== 'undefined') {
- if (target.audioTracks.length > 0) {
- this.loopVideo = this.loopVideo && !this.$store.getters.mergedConfig.loopVideoSilentOnly
- }
+ if (target.mozHasAudio) return
+ }
+ if (typeof target.audioTracks !== 'undefined') {
+ if (target.audioTracks.length > 0) return
}
+ this.hasAudio = false
}
}
}
diff --git a/src/components/video_attachment/video_attachment.vue b/src/components/video_attachment/video_attachment.vue
index 1ffed4e0..a4bf01e8 100644
--- a/src/components/video_attachment/video_attachment.vue
+++ b/src/components/video_attachment/video_attachment.vue
@@ -7,7 +7,8 @@
:alt="attachment.description"
:title="attachment.description"
playsinline
- @loadeddata="onVideoDataLoad"
+ @playing="onPlaying"
+ @pause="onPaused"
/>
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 8540f551..8d831e3d 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -430,6 +430,7 @@
"false": "no",
"true": "yes"
},
+ "virtual_scrolling": "Optimize timeline rendering",
"fun": "Fun",
"greentext": "Meme arrows",
"notifications": "Notifications",
diff --git a/src/modules/config.js b/src/modules/config.js
index 409d77a4..444b8ec7 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -65,7 +65,8 @@ export const defaultState = {
useContainFit: false,
greentext: undefined, // instance default
hidePostStats: undefined, // instance default
- hideUserStats: undefined // instance default
+ hideUserStats: undefined, // instance default
+ virtualScrolling: undefined // instance default
}
// caching the instance default properties
diff --git a/src/modules/instance.js b/src/modules/instance.js
index 3fe3bbf3..b3cbffc6 100644
--- a/src/modules/instance.js
+++ b/src/modules/instance.js
@@ -41,6 +41,7 @@ const defaultState = {
sidebarRight: false,
subjectLineBehavior: 'email',
theme: 'pleroma-dark',
+ virtualScrolling: true,
// Nasty stuff
customEmoji: [],
diff --git a/src/modules/statuses.js b/src/modules/statuses.js
index e108b2a7..155cc4b9 100644
--- a/src/modules/statuses.js
+++ b/src/modules/statuses.js
@@ -568,6 +568,9 @@ export const mutations = {
updateStatusWithPoll (state, { id, poll }) {
const status = state.allStatusesObject[id]
status.poll = poll
+ },
+ setVirtualHeight (state, { statusId, height }) {
+ state.allStatusesObject[statusId].virtualHeight = height
}
}
@@ -753,6 +756,9 @@ const statuses = {
store.commit('addNewStatuses', { statuses: data.statuses })
return data
})
+ },
+ setVirtualHeight ({ commit }, { statusId, height }) {
+ commit('setVirtualHeight', { statusId, height })
}
},
mutations
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index da519001..d1842e17 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -539,8 +539,10 @@ const fetchTimeline = ({
const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')
url += `?${queryString}`
+
let status = ''
let statusText = ''
+
let pagination = {}
return fetch(url, { headers: authHeaders(credentials) })
.then((data) => {
--
cgit v1.2.3-70-g09d2
From 1675f1a133934956a39ca4ade99b809789bb84a2 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Tue, 29 Sep 2020 13:13:42 +0200
Subject: scoped back margin-right on icons
---
src/App.scss | 1 -
src/components/nav_panel/nav_panel.vue | 4 ++++
src/components/timeline_menu/timeline_menu.vue | 4 ++++
3 files changed, 8 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/App.scss b/src/App.scss
index 8b1bbd2d..e2e2d079 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -809,7 +809,6 @@ nav {
.button-icon {
font-size: 1.2em;
- margin-right: 0.5em;
}
@keyframes shakeError {
diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue
index 080e547f..4f944c95 100644
--- a/src/components/nav_panel/nav_panel.vue
+++ b/src/components/nav_panel/nav_panel.vue
@@ -125,6 +125,10 @@
}
}
+.nav-panel .button-icon {
+ margin-right: 0.5em;
+}
+
.nav-panel .button-icon:before {
width: 1.1em;
}
diff --git a/src/components/timeline_menu/timeline_menu.vue b/src/components/timeline_menu/timeline_menu.vue
index 3c029093..481b1d09 100644
--- a/src/components/timeline_menu/timeline_menu.vue
+++ b/src/components/timeline_menu/timeline_menu.vue
@@ -170,6 +170,10 @@
text-decoration: underline;
}
}
+
+ i {
+ margin: 0 0.5em;
+ }
}
}
--
cgit v1.2.3-70-g09d2
From c17012cfe19ecab7efc27a54c90c4369c36de343 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Tue, 29 Sep 2020 13:20:16 +0200
Subject: fix appended 0.65em on wrong line
---
src/components/timeline_menu/timeline_menu.vue | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
(limited to 'src')
diff --git a/src/components/timeline_menu/timeline_menu.vue b/src/components/timeline_menu/timeline_menu.vue
index 481b1d09..b7e5f2da 100644
--- a/src/components/timeline_menu/timeline_menu.vue
+++ b/src/components/timeline_menu/timeline_menu.vue
@@ -64,7 +64,7 @@
.timeline-menu-popover-wrap {
overflow: hidden;
// Match panel heading padding to line up menu with bottom of heading
- margin-top: 0.6rem 0.65em;
+ margin-top: 0.6rem;
padding: 0 15px 15px 15px;
}
.timeline-menu-popover {
@@ -142,7 +142,7 @@
a {
display: block;
- padding: 0.6em 0;
+ padding: 0.6em 0.65em;
&:hover {
background-color: $fallback--lightBg;
@@ -172,7 +172,7 @@
}
i {
- margin: 0 0.5em;
+ margin-right: 0.5em;
}
}
}
--
cgit v1.2.3-70-g09d2
From 414558665f8370390cf4c6dc3c79745217d8d522 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Thu, 1 Oct 2020 16:01:57 +0300
Subject: lint fix
---
src/components/status/status.scss | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
(limited to 'src')
diff --git a/src/components/status/status.scss b/src/components/status/status.scss
index ecca288f..66a91c1e 100644
--- a/src/components/status/status.scss
+++ b/src/components/status/status.scss
@@ -25,6 +25,11 @@ $status-margin: 0.75em;
--icon: var(--selectedPostIcon, $fallback--icon);
}
+ &.-conversation {
+ border-left-width: 4px;
+ border-left-style: solid;
+ }
+
.gravestone {
padding: $status-margin;
color: $fallback--faint;
@@ -36,11 +41,6 @@ $status-margin: 0.75em;
align-items: center;
}
}
-
- &.-conversation {
- border-left-width: 4px;
- border-left-style: solid;
- }
.status-container {
display: flex;
--
cgit v1.2.3-70-g09d2
From 3f119c6875e7c713b71ed6ca9793609ff866f776 Mon Sep 17 00:00:00 2001
From: titizen
Date: Wed, 9 Sep 2020 20:39:40 +0000
Subject: Translated using Weblate (Catalan)
Currently translated at 48.7% (323 of 662 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ca/
---
src/i18n/ca.json | 190 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 180 insertions(+), 10 deletions(-)
(limited to 'src')
diff --git a/src/i18n/ca.json b/src/i18n/ca.json
index f2bcdd06..b15b69f7 100644
--- a/src/i18n/ca.json
+++ b/src/i18n/ca.json
@@ -9,7 +9,8 @@
"scope_options": "Opcions d'abast i visibilitat",
"text_limit": "Límit de text",
"title": "Funcionalitats",
- "who_to_follow": "A qui seguir"
+ "who_to_follow": "A qui seguir",
+ "pleroma_chat_messages": "Xat de Pleroma"
},
"finder": {
"error_fetching_user": "No s'ha pogut carregar l'usuari/a",
@@ -17,7 +18,21 @@
},
"general": {
"apply": "Aplica",
- "submit": "Desa"
+ "submit": "Desa",
+ "close": "Tanca",
+ "verify": "Verifica",
+ "confirm": "Confirma",
+ "enable": "Habilita",
+ "disable": "Deshabilitar",
+ "cancel": "Cancel·la",
+ "show_less": "Mostra menys",
+ "show_more": "Mostra més",
+ "optional": "opcional",
+ "retry": "Prova de nou",
+ "error_retry": "Si us plau, prova de nou",
+ "generic_error": "Hi ha hagut un error",
+ "loading": "Carregant…",
+ "more": "Més"
},
"login": {
"login": "Inicia sessió",
@@ -25,7 +40,12 @@
"password": "Contrasenya",
"placeholder": "p.ex.: Maria",
"register": "Registra't",
- "username": "Nom d'usuari/a"
+ "username": "Nom d'usuari/a",
+ "recovery_code": "Codi de recuperació",
+ "enter_recovery_code": "Posa un codi de recuperació",
+ "authentication_code": "Codi d'autenticació",
+ "hint": "Entra per participar a la conversa",
+ "description": "Entra amb OAuth"
},
"nav": {
"chat": "Xat local públic",
@@ -33,7 +53,16 @@
"mentions": "Mencions",
"public_tl": "Flux públic del node",
"timeline": "Flux personal",
- "twkn": "Flux de la xarxa coneguda"
+ "twkn": "Flux de la xarxa coneguda",
+ "chats": "Xats",
+ "timelines": "Línies de temps",
+ "preferences": "Preferències",
+ "who_to_follow": "A qui seguir",
+ "search": "Cerca",
+ "dms": "Missatges directes",
+ "interactions": "Interaccions",
+ "back": "Enrere",
+ "administration": "Administració"
},
"notifications": {
"broken_favorite": "No es coneix aquest estat. S'està cercant.",
@@ -42,14 +71,19 @@
"load_older": "Carrega més notificacions",
"notifications": "Notificacions",
"read": "Read!",
- "repeated_you": "ha repetit el teu estat"
+ "repeated_you": "ha repetit el teu estat",
+ "migrated_to": "migrat a",
+ "no_more_notifications": "No més notificacions",
+ "follow_request": "et vol seguir"
},
"post_status": {
"account_not_locked_warning": "El teu compte no està {0}. Qualsevol persona pot seguir-te per llegir les teves entrades reservades només a seguidores.",
"account_not_locked_warning_link": "bloquejat",
"attachments_sensitive": "Marca l'adjunt com a delicat",
"content_type": {
- "text/plain": "Text pla"
+ "text/plain": "Text pla",
+ "text/markdown": "Markdown",
+ "text/html": "HTML"
},
"content_warning": "Assumpte (opcional)",
"default": "Em sento…",
@@ -60,7 +94,13 @@
"private": "Només seguidors/es - Publica només per comptes que et segueixin",
"public": "Pública - Publica als fluxos públics",
"unlisted": "Silenciosa - No la mostris en fluxos públics"
- }
+ },
+ "scope_notice": {
+ "private": "Aquesta entrada serà visible només per a qui et segueixi",
+ "public": "Aquesta entrada serà visible per a tothom"
+ },
+ "preview_empty": "Buida",
+ "preview": "Vista prèvia"
},
"registration": {
"bio": "Presentació",
@@ -68,7 +108,17 @@
"fullname": "Nom per mostrar",
"password_confirm": "Confirma la contrasenya",
"registration": "Registra't",
- "token": "Codi d'invitació"
+ "token": "Codi d'invitació",
+ "validations": {
+ "password_confirmation_match": "hauria de ser la mateixa que la contrasenya",
+ "password_confirmation_required": "no es pot deixar en blanc",
+ "password_required": "no es pot deixar en blanc",
+ "email_required": "no es pot deixar en blanc",
+ "fullname_required": "no es pot deixar en blanc",
+ "username_required": "no es pot deixar en blanc"
+ },
+ "fullname_placeholder": "p. ex. Lain Iwakura",
+ "username_placeholder": "p. ex. lain"
},
"settings": {
"attachmentRadius": "Adjunts",
@@ -94,7 +144,7 @@
"data_import_export_tab": "Importa o exporta dades",
"default_vis": "Abast per defecte de les entrades",
"delete_account": "Esborra el compte",
- "delete_account_description": "Esborra permanentment el teu compte i tots els missatges",
+ "delete_account_description": "Esborra permanentment les teves dades i desactiva el teu compte.",
"delete_account_error": "No s'ha pogut esborrar el compte. Si continua el problema, contacta amb l'administració del node.",
"delete_account_instructions": "Confirma que vols esborrar el compte escrivint la teva contrasenya aquí sota.",
"export_theme": "Desa el tema",
@@ -164,7 +214,57 @@
"values": {
"false": "no",
"true": "sí"
- }
+ },
+ "show_moderator_badge": "Mostra una insígnia de Moderació en el meu perfil",
+ "show_admin_badge": "Mostra una insígnia d'Administració en el meu perfil",
+ "hide_followers_description": "No mostris qui m'està seguint",
+ "hide_follows_description": "No mostris a qui segueixo",
+ "notification_visibility_emoji_reactions": "Reaccions",
+ "new_email": "Nou correu electrònic",
+ "profile_fields": {
+ "value": "Contingut",
+ "name": "Etiqueta",
+ "add_field": "Afegeix un camp",
+ "label": "Metadades del perfil"
+ },
+ "mutes_tab": "Silenciaments",
+ "interface": "Interfície",
+ "instance_default_simple": "(per defecte)",
+ "checkboxRadius": "Caselles",
+ "import_blocks_from_a_csv_file": "Importa bloquejos des d'un arxiu csv",
+ "hide_post_stats": "Amaga les estadístiques de les entrades (p. ex. el nombre de favorits)",
+ "use_one_click_nsfw": "Obre els adjunts NSFW amb només un clic",
+ "hide_muted_posts": "Amaga les entrades de comptes silenciats",
+ "avatar_size_instruction": "La mida mínima recomanada per la imatge de l'avatar és de 150x150 píxels.",
+ "domain_mutes": "Dominis",
+ "discoverable": "Permet la descoberta d'aquest compte en resultats de cerques i altres serveis",
+ "mutes_and_blocks": "Silenciaments i bloquejos",
+ "composing": "Composant",
+ "chatMessageRadius": "Missatge de xat",
+ "changed_email": "Correu electrònic canviat amb èxit!",
+ "change_email_error": "Hi ha hagut un problema al canviar el teu correu electrònic.",
+ "change_email": "Canvia el correu electrònic",
+ "bot": "Aquest és un compte automatitzat",
+ "blocks_tab": "Bloquejos",
+ "blocks_imported": "Bloquejos importats! Processar-los pot trigar una mica.",
+ "block_import_error": "Error al importar bloquejos",
+ "block_import": "Importa bloquejos",
+ "block_export_button": "Exporta els teus bloquejos a un arxiu csv",
+ "block_export": "Exporta bloquejos",
+ "allow_following_move": "Permet el seguiment automàtic quan un compte a qui seguim es mou",
+ "mfa": {
+ "scan": {
+ "secret_code": "Clau"
+ },
+ "authentication_methods": "Mètodes d'autenticació",
+ "waiting_a_recovery_codes": "Rebent còpies de seguretat dels codis…",
+ "recovery_codes": "Codis de recuperació.",
+ "warning_of_generate_new_codes": "Quan generes nous codis de recuperació, els antics ja no funcionaran més.",
+ "generate_new_recovery_codes": "Genera nous codis de recuperació"
+ },
+ "enter_current_password_to_confirm": "Posar la contrasenya actual per confirmar la teva identitat",
+ "security": "Seguretat",
+ "app_name": "Nom de l'aplicació"
},
"time": {
"day": "{0} dia",
@@ -232,5 +332,75 @@
"who_to_follow": {
"more": "More",
"who_to_follow": "A qui seguir"
+ },
+ "selectable_list": {
+ "select_all": "Selecciona-ho tot"
+ },
+ "remote_user_resolver": {
+ "error": "No trobat.",
+ "searching_for": "Cercant per"
+ },
+ "interactions": {
+ "load_older": "Carrega antigues interaccions",
+ "favs_repeats": "Repeticions i favorits"
+ },
+ "emoji": {
+ "stickers": "Adhesius"
+ },
+ "polls": {
+ "expired": "L'enquesta va acabar fa {0}",
+ "expires_in": "L'enquesta acaba en {0}",
+ "multiple_choices": "Múltiples opcions",
+ "single_choice": "Una sola opció",
+ "type": "Tipus d'enquesta",
+ "vote": "Vota",
+ "votes": "vots",
+ "option": "Opció",
+ "add_option": "Afegeix opció",
+ "add_poll": "Afegeix enquesta"
+ },
+ "media_modal": {
+ "next": "Següent",
+ "previous": "Anterior"
+ },
+ "importer": {
+ "error": "Ha succeït un error mentre s'importava aquest arxiu.",
+ "success": "Importat amb èxit."
+ },
+ "image_cropper": {
+ "cancel": "Cancel·la",
+ "save_without_cropping": "Desa sense retallar",
+ "save": "Desa",
+ "crop_picture": "Retalla la imatge"
+ },
+ "exporter": {
+ "processing": "Processant, aviat se't preguntarà per descarregar el teu arxiu",
+ "export": "Exporta"
+ },
+ "domain_mute_card": {
+ "mute_progress": "Silenciant…",
+ "mute": "Silencia"
+ },
+ "about": {
+ "staff": "Equip responsable",
+ "mrf": {
+ "simple": {
+ "quarantine_desc": "Aquesta instància només enviarà entrades públiques a les següents instàncies:",
+ "quarantine": "Quarantena",
+ "reject_desc": "Aquesta instància no acceptarà missatges de les següents instàncies:",
+ "reject": "Rebutja",
+ "accept_desc": "Aquesta instància només accepta missatges de les següents instàncies:",
+ "accept": "Accepta",
+ "simple_policies": "Polítiques específiques de la instància"
+ },
+ "mrf_policies_desc": "Les polítiques MRF controlen el comportament federat de la instància. Les següents polítiques estan habilitades:",
+ "mrf_policies": "Polítiques MRF habilitades",
+ "keyword": {
+ "replace": "Reemplaça",
+ "reject": "Rebutja",
+ "keyword_policies": "Polítiques de paraules clau"
+ },
+ "federation": "Federació"
+ }
}
}
--
cgit v1.2.3-70-g09d2
From aca8570b86ad2e96a30e97aefd94895e75c2c98c Mon Sep 17 00:00:00 2001
From: snow
Date: Sat, 19 Sep 2020 15:56:25 +0000
Subject: Added translation using Weblate (Chinese (Traditional))
---
src/i18n/zh_Hant.json | 1 +
1 file changed, 1 insertion(+)
create mode 100644 src/i18n/zh_Hant.json
(limited to 'src')
diff --git a/src/i18n/zh_Hant.json b/src/i18n/zh_Hant.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/src/i18n/zh_Hant.json
@@ -0,0 +1 @@
+{}
--
cgit v1.2.3-70-g09d2
From ad6b7148d4989060e45158abdca44493e4e9b44f Mon Sep 17 00:00:00 2001
From: snow
Date: Sat, 19 Sep 2020 16:28:37 +0000
Subject: Translated using Weblate (Chinese (Simplified))
Currently translated at 83.2% (550 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
---
src/i18n/zh.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index 8c693f4d..fca206e1 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -11,7 +11,7 @@
"gopher": "Gopher",
"media_proxy": "媒体代理",
"scope_options": "可见范围设置",
- "text_limit": "文本长度限制",
+ "text_limit": "文字數量限制",
"title": "功能",
"who_to_follow": "推荐关注"
},
--
cgit v1.2.3-70-g09d2
From 32ddb387360f84c134b3a5527fdfcd8db97d697d Mon Sep 17 00:00:00 2001
From: snow
Date: Sat, 19 Sep 2020 15:57:50 +0000
Subject: Translated using Weblate (Chinese (Traditional))
Currently translated at 18.9% (125 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
---
src/i18n/zh_Hant.json | 167 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 166 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/zh_Hant.json b/src/i18n/zh_Hant.json
index 0967ef42..d6ea9047 100644
--- a/src/i18n/zh_Hant.json
+++ b/src/i18n/zh_Hant.json
@@ -1 +1,166 @@
-{}
+{
+ "emoji": {
+ "unicode": "統一碼繪文字",
+ "custom": "自定義繪文字",
+ "add_emoji": "插入繪文字",
+ "search_emoji": "搜索繪文字",
+ "keep_open": "選擇器保持打開",
+ "emoji": "繪文字",
+ "stickers": "貼紙"
+ },
+ "polls": {
+ "not_enough_options": "投票的選項太少",
+ "expired": "投票 {0} 前已結束",
+ "expires_in": "投票於 {0} 內結束",
+ "expiry": "投票期限",
+ "multiple_choices": "多選",
+ "single_choice": "單選",
+ "type": "問卷類型",
+ "vote": "投票",
+ "votes": "票",
+ "option": "選項",
+ "add_option": "增加選項",
+ "add_poll": "增加投票"
+ },
+ "notifications": {
+ "reacted_with": "和 {0} 互動過",
+ "migrated_to": "遷移到",
+ "no_more_notifications": "沒有更多的通知",
+ "repeated_you": "轉發了你的狀態",
+ "read": "已閱!",
+ "notifications": "通知",
+ "load_older": "載入更早的通知",
+ "follow_request": "想要關注你",
+ "followed_you": "關注了你",
+ "favorited_you": "喜歡了你的狀態",
+ "broken_favorite": "未知的狀態,正在搜索中…"
+ },
+ "nav": {
+ "chats": "聊天",
+ "timelines": "時間線",
+ "preferences": "偏好設置",
+ "who_to_follow": "推薦關注",
+ "search": "搜索",
+ "user_search": "用戶搜索",
+ "bookmarks": "書籤",
+ "twkn": "已知網絡",
+ "timeline": "時間線",
+ "public_tl": "公共時間線",
+ "dms": "私信",
+ "interactions": "互動",
+ "mentions": "提及",
+ "friend_requests": "關注請求",
+ "back": "後退",
+ "administration": "管理",
+ "about": "關於"
+ },
+ "media_modal": {
+ "next": "往後",
+ "previous": "往前"
+ },
+ "login": {
+ "heading": {
+ "recovery": "雙重因素恢復",
+ "totp": "雙重因素驗證"
+ },
+ "recovery_code": "恢復碼",
+ "enter_two_factor_code": "輸入一個雙重因素驗證碼",
+ "enter_recovery_code": "輸入一個恢復碼",
+ "authentication_code": "驗證碼",
+ "hint": "登錄後加入討論",
+ "username": "用戶名",
+ "register": "註冊",
+ "placeholder": "例:鈴音",
+ "password": "密碼",
+ "logout": "登出",
+ "description": "用 OAuth 登入",
+ "login": "登入"
+ },
+ "importer": {
+ "error": "導入此文件時出現一個錯誤。",
+ "success": "導入成功。",
+ "submit": "提交"
+ },
+ "image_cropper": {
+ "cancel": "取消",
+ "save_without_cropping": "保存不裁剪",
+ "save": "保存",
+ "crop_picture": "裁剪圖片"
+ },
+ "general": {
+ "peek": "窺視",
+ "close": "關閉",
+ "verify": "驗證",
+ "confirm": "確認",
+ "enable": "啟用",
+ "disable": "禁用",
+ "cancel": "取消",
+ "dismiss": "忽略",
+ "show_less": "收起",
+ "show_more": "展開",
+ "optional": "可選",
+ "retry": "再試",
+ "error_retry": "請再試",
+ "generic_error": "發生一個錯誤",
+ "loading": "載入中…",
+ "more": "更多",
+ "submit": "提交",
+ "apply": "應用"
+ },
+ "finder": {
+ "find_user": "尋找用戶",
+ "error_fetching_user": "獲取用戶時發生錯誤"
+ },
+ "features_panel": {
+ "who_to_follow": "推薦關注",
+ "title": "特色",
+ "text_limit": "文字數量限制",
+ "scope_options": "可見範圍設置",
+ "media_proxy": "媒體代理",
+ "pleroma_chat_messages": "Pleroma 聊天",
+ "chat": "聊天"
+ },
+ "exporter": {
+ "processing": "正在處理,稍後會提示您下載文件",
+ "export": "導出"
+ },
+ "domain_mute_card": {
+ "unmute_progress": "取消靜音中…",
+ "unmute": "取消靜音",
+ "mute_progress": "靜音中…",
+ "mute": "靜音"
+ },
+ "shoutbox": {
+ "title": "留言板"
+ },
+ "about": {
+ "staff": "職員",
+ "mrf": {
+ "simple": {
+ "media_nsfw_desc": "這個實例強迫以下實例的帖子媒體設定為敏感:",
+ "media_nsfw": "媒體強制設定為敏感",
+ "media_removal_desc": "這個實例移除以下實例的帖子媒體:",
+ "media_removal": "移除媒體",
+ "ftl_removal_desc": "這個實例在所有已知網絡中移除下列實例:",
+ "ftl_removal": "從所有已知網路中移除",
+ "quarantine_desc": "本實例只會把公開帖子發送到下列實例:",
+ "quarantine": "隔離",
+ "reject_desc": "本實例不會接收來自下列實例的消息:",
+ "reject": "拒絕",
+ "accept_desc": "本實例只接收來自下列實例的消息:",
+ "simple_policies": "站規",
+ "accept": "接受"
+ },
+ "mrf_policies_desc": "MRF 策略會影響本實例的互通行為。以下策略已啟用:",
+ "keyword": {
+ "ftl_removal": "從“所有已知網絡”時間軸中刪除",
+ "replace": "取代",
+ "reject": "拒絕",
+ "is_replaced_by": "→",
+ "keyword_policies": "關鍵字政策"
+ },
+ "mrf_policies": "已啟用的MRF政策",
+ "federation": "聯邦"
+ }
+ }
+}
--
cgit v1.2.3-70-g09d2
From 887ff4dec3e9d8a2cabb8e02374a275e5af23d27 Mon Sep 17 00:00:00 2001
From: Kana
Date: Sun, 20 Sep 2020 00:38:06 +0000
Subject: Translated using Weblate (Chinese (Simplified))
Currently translated at 90.0% (595 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
---
src/i18n/zh.json | 73 +++++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 62 insertions(+), 11 deletions(-)
(limited to 'src')
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index fca206e1..1deeed35 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -13,7 +13,8 @@
"scope_options": "可见范围设置",
"text_limit": "文字數量限制",
"title": "功能",
- "who_to_follow": "推荐关注"
+ "who_to_follow": "推荐关注",
+ "pleroma_chat_messages": "Pleroma 聊天"
},
"finder": {
"error_fetching_user": "获取用户时发生错误",
@@ -32,7 +33,12 @@
"enable": "启用",
"confirm": "确认",
"verify": "验证",
- "dismiss": "忽略"
+ "dismiss": "忽略",
+ "peek": "窥探",
+ "close": "关闭",
+ "retry": "重试",
+ "error_retry": "请重试",
+ "loading": "载入中…"
},
"image_cropper": {
"crop_picture": "裁剪图片",
@@ -77,12 +83,15 @@
"dms": "私信",
"public_tl": "公共时间线",
"timeline": "时间线",
- "twkn": "所有已知网络",
+ "twkn": "已知网络",
"user_search": "用户搜索",
"search": "搜索",
"who_to_follow": "推荐关注",
"preferences": "偏好设置",
- "administration": "管理员"
+ "administration": "管理员",
+ "chats": "聊天",
+ "timelines": "时间线",
+ "bookmarks": "书签"
},
"notifications": {
"broken_favorite": "未知的状态,正在搜索中…",
@@ -146,7 +155,10 @@
"private": "仅关注者 - 只有关注了你的人能看到",
"public": "公共 - 发送到公共时间轴",
"unlisted": "不公开 - 不会发送到公共时间轴"
- }
+ },
+ "preview_empty": "空的",
+ "preview": "预览",
+ "media_description": "媒体描述"
},
"registration": {
"bio": "简介",
@@ -350,7 +362,10 @@
"clear_opacity": "清除透明度",
"load_theme": "加载主题",
"help": {
- "upgraded_from_v2": "PleromaFE 已升级,主题会和你记忆中的不太一样。"
+ "upgraded_from_v2": "PleromaFE 已升级,主题会和你记忆中的不太一样。",
+ "older_version_imported": "您导入的文件来自旧版本的 FE。",
+ "future_version_imported": "您导入的文件来自更高版本的 FE。",
+ "v2_imported": "您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。"
},
"use_source": "新版本",
"use_snapshot": "老版本",
@@ -470,7 +485,29 @@
"notification_visibility_emoji_reactions": "互动",
"notification_visibility_moves": "用户迁移",
"new_email": "新邮箱",
- "emoji_reactions_on_timeline": "在时间线上显示表情符号互动"
+ "emoji_reactions_on_timeline": "在时间线上显示表情符号互动",
+ "notification_setting_hide_notification_contents": "隐藏推送通知中的发送者与内容信息",
+ "notification_setting_block_from_strangers": "屏蔽来自你没有关注的用户的通知",
+ "type_domains_to_mute": "搜索需要隐藏的域名",
+ "useStreamingApi": "实时接收发布以及通知",
+ "user_mutes": "用户",
+ "reset_background_confirm": "您确定要重置个人资料背景图吗?",
+ "reset_banner_confirm": "您确定要重置横幅图片吗?",
+ "reset_avatar_confirm": "您确定要重置头像吗?",
+ "reset_profile_banner": "重置横幅图片",
+ "reset_profile_background": "重置个人资料背景图",
+ "reset_avatar": "重置头像",
+ "hide_followers_count_description": "不显示关注者数量",
+ "profile_fields": {
+ "value": "内容",
+ "name": "标签",
+ "add_field": "添加字段"
+ },
+ "accent": "强调色",
+ "pad_emoji": "从表情符号选择器插入表情符号时,在表情两侧插入空格",
+ "discoverable": "允许通过搜索检索等服务找到此账号",
+ "mutes_and_blocks": "隐藏与屏蔽",
+ "bot": "这是一个机器人账号"
},
"time": {
"day": "{0} 天",
@@ -628,7 +665,7 @@
},
"search": {
"people": "人",
- "hashtags": "Hashtags",
+ "hashtags": "话题标签",
"person_talking": "{count} 人正在讨论",
"people_talking": "{count} 人正在讨论",
"no_results": "没有搜索结果"
@@ -655,7 +692,9 @@
"custom": "自定义表情符号",
"add_emoji": "插入表情符号",
"search_emoji": "搜索表情符号",
- "emoji": "表情符号"
+ "emoji": "表情符号",
+ "load_all": "加载所有表情符号(共 {emojiAmount} 个)",
+ "load_all_hint": "最先加载的 {saneAmount} 表情符号,加载全部表情符号可能会带来性能问题。"
},
"about": {
"mrf": {
@@ -667,7 +706,12 @@
"accept_desc": "本实例只接收来自下列实例的消息:",
"simple_policies": "站规",
"accept": "接受",
- "media_removal": "移除媒体"
+ "media_removal": "移除媒体",
+ "media_nsfw_desc": "本实例将来自以下实例的媒体强制设置为敏感内容:",
+ "media_nsfw": "强制设置媒体为敏感内容",
+ "media_removal_desc": "本实例移除了来自以下实例的媒体内容:",
+ "ftl_removal_desc": "该实例在从“全部已知网络”时间线上移除了:",
+ "ftl_removal": "从“全部已知网络”时间线上移除"
},
"mrf_policies_desc": "MRF 策略会影响本实例的互通行为。以下策略已启用:",
"mrf_policies": "已启动 MRF 策略",
@@ -679,12 +723,19 @@
"reject": "拒绝"
},
"federation": "联邦"
- }
+ },
+ "staff": "管理人员"
},
"domain_mute_card": {
"unmute_progress": "正在取消隐藏…",
"unmute": "取消隐藏",
"mute_progress": "隐藏中…",
"mute": "隐藏"
+ },
+ "errors": {
+ "storage_unavailable": "Pleroma 无法访问浏览器储存。您的登陆以及本地设置将不会被保存,您也可能遇到未知问题。请尝试启用 cookies。"
+ },
+ "shoutbox": {
+ "title": "留言板"
}
}
--
cgit v1.2.3-70-g09d2
From c55e09a513c403b980b941f24ad66a0cbd6d2e06 Mon Sep 17 00:00:00 2001
From: Snow
Date: Sun, 20 Sep 2020 00:50:22 +0000
Subject: Translated using Weblate (Chinese (Traditional))
Currently translated at 67.1% (444 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
---
src/i18n/zh_Hant.json | 412 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 409 insertions(+), 3 deletions(-)
(limited to 'src')
diff --git a/src/i18n/zh_Hant.json b/src/i18n/zh_Hant.json
index d6ea9047..21c1e538 100644
--- a/src/i18n/zh_Hant.json
+++ b/src/i18n/zh_Hant.json
@@ -6,7 +6,9 @@
"search_emoji": "搜索繪文字",
"keep_open": "選擇器保持打開",
"emoji": "繪文字",
- "stickers": "貼紙"
+ "stickers": "貼紙",
+ "load_all": "加載所有繪文字(共 {emojiAmount} 個)",
+ "load_all_hint": "最先加載的 {saneAmount} ,加載全部繪文字可能會帶來性能問題。"
},
"polls": {
"not_enough_options": "投票的選項太少",
@@ -118,7 +120,8 @@
"scope_options": "可見範圍設置",
"media_proxy": "媒體代理",
"pleroma_chat_messages": "Pleroma 聊天",
- "chat": "聊天"
+ "chat": "聊天",
+ "gopher": "Gopher"
},
"exporter": {
"processing": "正在處理,稍後會提示您下載文件",
@@ -153,7 +156,7 @@
},
"mrf_policies_desc": "MRF 策略會影響本實例的互通行為。以下策略已啟用:",
"keyword": {
- "ftl_removal": "從“所有已知網絡”時間軸中刪除",
+ "ftl_removal": "從“全部已知網絡”時間線上移除",
"replace": "取代",
"reject": "拒絕",
"is_replaced_by": "→",
@@ -162,5 +165,408 @@
"mrf_policies": "已啟用的MRF政策",
"federation": "聯邦"
}
+ },
+ "settings": {
+ "style": {
+ "common": {
+ "color": "顏色",
+ "contrast": {
+ "context": {
+ "18pt": "大字文本 (18pt+)"
+ },
+ "level": {
+ "aaa": "符合 AAA 等級準則(推薦)",
+ "aa": "符合 AA 等級準則(最低)"
+ },
+ "hint": "對比度是 {ratio}, 它 {level} {context}"
+ },
+ "opacity": "透明度"
+ },
+ "advanced_colors": {
+ "faint_text": "灰度文字",
+ "alert_error": "錯誤"
+ },
+ "preview": {
+ "header_faint": "這很正常"
+ },
+ "shadows": {
+ "override": "覆寫"
+ },
+ "switcher": {
+ "use_snapshot": "舊版",
+ "load_theme": "載入主題",
+ "keep_color": "保留顏色",
+ "keep_shadows": "保留陰影",
+ "keep_opacity": "保留透明度",
+ "keep_roundness": "保留圓角"
+ },
+ "fonts": {
+ "components": {
+ "interface": "界面"
+ }
+ }
+ },
+ "notification_setting_block_from_strangers": "屏蔽來自你沒有關注的用戶的通知",
+ "user_mutes": "用户",
+ "hide_followers_count_description": "不顯示關注者數量",
+ "no_rich_text_description": "不顯示富文本格式",
+ "notification_visibility_moves": "用戶遷移",
+ "notification_visibility_repeats": "轉發",
+ "notification_visibility_mentions": "提及",
+ "notification_visibility_likes": "點贊",
+ "interfaceLanguage": "界面語言",
+ "instance_default": "(默認:{value})",
+ "inputRadius": "輸入框",
+ "import_theme": "導入預置主題",
+ "import_followers_from_a_csv_file": "從 csv 文件中導入關注",
+ "import_blocks_from_a_csv_file": "從 csv 文件中導入封鎖黑名單名單",
+ "hide_filtered_statuses": "隱藏過濾的狀態",
+ "lock_account_description": "你需要手動審核關注請求",
+ "loop_video": "循環視頻",
+ "loop_video_silent_only": "只循環沒有聲音的視頻(例如:Mastodon 裡的“GIF”)",
+ "mutes_tab": "靜音",
+ "play_videos_in_modal": "在彈出框內播放視頻",
+ "profile_fields": {
+ "add_field": "添加字段",
+ "name": "標籤",
+ "value": "內容"
+ },
+ "use_contain_fit": "生成縮略圖時不要裁剪附件",
+ "notification_visibility": "要顯示的通知類型",
+ "notification_visibility_follows": "關注",
+ "new_email": "新電郵",
+ "subject_line_mastodon": "比如mastodon: copy as is",
+ "reset_background_confirm": "您確定要重置個人資料背景圖嗎?",
+ "reset_banner_confirm": "您確定要重置橫幅圖片嗎?",
+ "reset_avatar_confirm": "您確定要重置頭像嗎?",
+ "reset_profile_banner": "重置橫幅圖片",
+ "reset_profile_background": "重置個人資料背景圖",
+ "reset_avatar": "重置頭像",
+ "discoverable": "允許通過搜索檢索等服務找到此賬號",
+ "delete_account_error": "刪除賬戶時發生錯誤,如果一直刪除不了,請聯繫實例管理員。",
+ "composing": "正在書寫",
+ "chatMessageRadius": "聊天訊息",
+ "mfa": {
+ "confirm_and_enable": "確認並啟用OTP",
+ "setup_otp": "設置OTP",
+ "otp": "OTP",
+ "wait_pre_setup_otp": "預設OTP",
+ "verify": {
+ "desc": "要啟用雙因素驗證,請把你的雙因素驗證 app 裡的數字輸入:"
+ },
+ "scan": {
+ "secret_code": "密鑰",
+ "desc": "使用你的雙因素驗證 app,掃瞄這個二維碼,或者輸入這些文字密鑰:",
+ "title": "掃瞄"
+ },
+ "authentication_methods": "身份驗證方法",
+ "recovery_codes_warning": "抄寫這些號碼,或者保存在安全的地方。這些號碼不會再次顯示。如果你無法訪問你的 2FA app,也丟失了你的恢復碼,你的賬號就再也無法登錄了。",
+ "waiting_a_recovery_codes": "正在接收備份碼…",
+ "recovery_codes": "恢復碼。",
+ "warning_of_generate_new_codes": "當你生成新的恢復碼時,你的舊恢復碼就失效了。",
+ "generate_new_recovery_codes": "生成新的恢復碼",
+ "title": "雙因素驗證"
+ },
+ "new_password": "新密碼",
+ "name_bio": "名字及簡介",
+ "name": "名字",
+ "domain_mutes": "域名",
+ "delete_account_instructions": "在下面輸入密碼,以確認刪除帳戶。",
+ "delete_account_description": "永久刪除你的帳號和所有數據。",
+ "delete_account": "刪除帳戶",
+ "default_vis": "默認可見性範圍",
+ "data_import_export_tab": "數據導入/導出",
+ "mutes_and_blocks": "靜音與封鎖",
+ "current_password": "當前密碼",
+ "confirm_new_password": "確認新密碼",
+ "collapse_subject": "摺疊帶標題的內容",
+ "checkboxRadius": "複選框",
+ "instance_default_simple": "(默認)",
+ "interface": "界面",
+ "invalid_theme_imported": "您所選擇的主題文件不被 Pleroma 支持,因此主題未被修改。",
+ "limited_availability": "在您的瀏覽器中無法使用",
+ "links": "鏈接",
+ "changed_password": "成功修改了密碼!",
+ "change_password_error": "修改密碼的時候出了點問題。",
+ "change_password": "修改密碼",
+ "changed_email": "郵箱修改成功!",
+ "bot": "這是一個機器人賬號",
+ "change_email": "修改電子郵箱",
+ "cRed": "紅色(取消)",
+ "cOrange": "橙色(收藏)",
+ "cGreen": "綠色(轉發)",
+ "cBlue": "藍色(回覆,關注)",
+ "btnRadius": "按鈕",
+ "notification_visibility_emoji_reactions": "互動",
+ "no_blocks": "沒有封鎖",
+ "no_mutes": "沒有靜音",
+ "hide_follows_description": "不要顯示我所關注的人",
+ "hide_followers_description": "不要顯示關注我的人",
+ "hide_follows_count_description": "不顯示關注數",
+ "nsfw_clickthrough": "將敏感附件隱藏,點擊才能打開",
+ "valid_until": "有效期至",
+ "panelRadius": "面板",
+ "pause_on_unfocused": "在離開頁面時暫停時間線推送",
+ "notifications": "通知",
+ "notification_setting_filters": "過濾器",
+ "notification_setting_privacy": "隱私",
+ "notification_mutes": "要停止收到某個指定的用戶的通知,請使用靜音功能。",
+ "notification_blocks": "封鎖一個用戶會停掉所有他的通知,等同於取消關注。",
+ "enable_web_push_notifications": "啟用 web 推送通知",
+ "presets": "預置",
+ "profile_background": "個人背景圖",
+ "profile_banner": "橫幅圖片",
+ "profile_tab": "個人資料",
+ "radii_help": "設置界面邊緣的圓角 (單位:像素)",
+ "reply_visibility_all": "顯示所有回覆",
+ "autohide_floating_post_button": "自動隱藏新帖子的按鈕(移動設備)",
+ "saving_err": "保存設置時發生錯誤",
+ "saving_ok": "設置已保存",
+ "search_user_to_block": "搜索你想屏蔽的用戶",
+ "search_user_to_mute": "搜索你想要隱藏的用戶",
+ "security_tab": "安全",
+ "set_new_avatar": "設置新頭像",
+ "set_new_profile_background": "設置新的個人背景",
+ "set_new_profile_banner": "設置新的個人橫幅",
+ "settings": "設置",
+ "subject_input_always_show": "總是顯示主題框",
+ "subject_line_behavior": "回覆時複製主題",
+ "subject_line_email": "比如電郵: \"re: 主題\"",
+ "subject_line_noop": "不要複製",
+ "post_status_content_type": "發帖內容類型",
+ "stop_gifs": "鼠標懸停時播放GIF",
+ "streaming": "開啟滾動到頂部時的自動推送",
+ "text": "文本",
+ "theme": "主題",
+ "theme_help": "使用十六進制代碼(#rrggbb)來設置主題顏色。",
+ "theme_help_v2_1": "你也可以通過切換複選框來覆蓋某些組件的顏色和透明。使用“清除所有”來清楚所有覆蓋設置。",
+ "theme_help_v2_2": "某些條目下的圖標是背景或文本對比指示器,鼠標懸停可以獲取詳細信息。請記住,使用透明度來顯示最差的情況。",
+ "tooltipRadius": "提醒",
+ "upload_a_photo": "上傳照片",
+ "user_settings": "用戶設置",
+ "values": {
+ "false": "否",
+ "true": "是"
+ },
+ "avatar_size_instruction": "推薦的頭像圖片最小的尺寸是 150x150 像素。",
+ "emoji_reactions_on_timeline": "在時間線上顯示繪文字互動",
+ "export_theme": "導出預置主題",
+ "filtering": "過濾",
+ "filtering_explanation": "所有包含以下詞彙的內容都會被隱藏,一行一個",
+ "follow_export": "導出關注",
+ "follow_export_button": "將關注導出成 csv 文件",
+ "follow_import": "導入關注",
+ "follow_import_error": "導入關注時錯誤",
+ "follows_imported": "關注已導入!尚需要一些時間來處理。",
+ "hide_attachments_in_convo": "在對話中隱藏附件",
+ "hide_attachments_in_tl": "在時間線上隱藏附件",
+ "hide_muted_posts": "不顯示被靜音的用戶的帖子",
+ "max_thumbnails": "最多每個帖子所能顯示的縮略圖數量",
+ "hide_isp": "隱藏指定實例的面板",
+ "preload_images": "預載圖片",
+ "use_one_click_nsfw": "點擊一次以打開工作場所不適宜的附件",
+ "hide_post_stats": "隱藏帖子的統計數據(例如:收藏的次數)",
+ "hide_user_stats": "隱藏用戶的統計數據(例如:關注者的數量)",
+ "general": "通用",
+ "foreground": "前景",
+ "blocks_tab": "封鎖",
+ "blocks_imported": "封鎖黑名單導入成功!需要一點時間來處理。",
+ "block_import_error": "導入封鎖黑名單出錯",
+ "block_import": "封鎖黑名單導入",
+ "block_export_button": "導出你的封鎖黑名單到一個 csv 文件",
+ "block_export": "封鎖黑名單導出",
+ "bio": "簡介",
+ "background": "背景",
+ "avatarRadius": "頭像",
+ "avatarAltRadius": "頭像(通知)",
+ "avatar": "頭像",
+ "attachments": "附件",
+ "attachmentRadius": "附件",
+ "allow_following_move": "正在關注的賬號遷移時自動重新關注",
+ "enter_current_password_to_confirm": "輸入你當前密碼來確認你的身份",
+ "security": "安全",
+ "app_name": "App 名稱",
+ "change_email_error": "修改你的電子郵箱時發生錯誤。",
+ "type_domains_to_mute": "搜索需要隱藏的域名"
+ },
+ "chats": {
+ "more": "更多",
+ "delete_confirm": "您確實要刪除此消息嗎?",
+ "error_loading_chat": "加載聊天時出了點問題。",
+ "error_sending_message": "發送消息時出了點問題。",
+ "empty_chat_list_placeholder": "您還沒有任何聊天記錄。 開始新的聊天!",
+ "new": "新聊天",
+ "empty_message_error": "無法發布空消息"
+ },
+ "file_type": {
+ "audio": "音頻",
+ "video": "視頻",
+ "image": "图片",
+ "file": "檔案"
+ },
+ "display_date": {
+ "today": "今天"
+ },
+ "status": {
+ "mute_conversation": "靜音對話",
+ "replies_list": "回覆:",
+ "reply_to": "回覆",
+ "pin": "在個人資料置頂",
+ "unpin": "取消在個人資料置頂"
+ },
+ "time": {
+ "hours": "{0} 小時",
+ "days_short": "{0}天",
+ "day_short": "{0}天",
+ "days": "{0} 天",
+ "hour": "{0} 小时",
+ "hour_short": "{0}h",
+ "hours_short": "{0}h",
+ "years_short": "{0} y",
+ "now": "剛剛"
+ },
+ "post_status": {
+ "media_description_error": "無法更新媒體,請重試",
+ "media_description": "媒體描述",
+ "scope": {
+ "unlisted": "不公開 - 不會發送到公共時間軸",
+ "public": "公共 - 發送到公共時間軸",
+ "private": "僅關注者 - 只有關注了你的人能看到",
+ "direct": "私信 - 只發送給被提及的用戶"
+ },
+ "scope_notice": {
+ "unlisted": "本條內容既不在公共時間線,也不會在所有已知網絡上可見",
+ "private": "關注你的人才能看到本條內容",
+ "public": "本條帖子可以被所有人看到"
+ },
+ "preview_empty": "空的",
+ "preview": "預覽",
+ "posting": "正在發送",
+ "direct_warning_to_first_only": "本條內容只有被在消息開始處提及的用戶能夠看到。",
+ "direct_warning_to_all": "本條內容只有被提及的用戶能夠看到。",
+ "account_not_locked_warning": "你的帳號沒有 {0}。任何人都可以關注你並瀏覽你的上鎖內容。",
+ "new_status": "發佈新狀態",
+ "content_warning": "主題(可選)",
+ "content_type": {
+ "text/bbcode": "BBCode",
+ "text/markdown": "Markdown",
+ "text/html": "HTML",
+ "text/plain": "純文本"
+ },
+ "attachments_sensitive": "標記附件為敏感內容",
+ "account_not_locked_warning_link": "上鎖",
+ "default": "剛剛抵達洛杉磯。"
+ },
+ "errors": {
+ "storage_unavailable": "Pleroma無法訪問瀏覽器存儲。您的登錄名或本地設置將不會保存,您可能會遇到意外問題。嘗試啟用Cookie。"
+ },
+ "timeline": {
+ "error_fetching": "獲取更新時發生錯誤",
+ "conversation": "對話"
+ },
+ "interactions": {
+ "load_older": "載入更早的互動",
+ "moves": "用戶遷移",
+ "follows": "新的關注者",
+ "favs_repeats": "轉發和收藏"
+ },
+ "selectable_list": {
+ "select_all": "選擇全部"
+ },
+ "remote_user_resolver": {
+ "error": "未找到。",
+ "searching_for": "搜索",
+ "remote_user_resolver": "遠程用戶解析器"
+ },
+ "registration": {
+ "validations": {
+ "password_confirmation_match": "不能和密碼一樣",
+ "password_confirmation_required": "不能留空",
+ "password_required": "不能留空",
+ "email_required": "不能留空",
+ "fullname_required": "不能留空",
+ "username_required": "不能留空"
+ },
+ "fullname": "顯示名稱",
+ "bio_placeholder": "例如:\n你好,我是玲音。\n我是一個住在日本郊區的動畫少女。你可能在 Wired 見過我。",
+ "fullname_placeholder": "例如:岩倉玲音",
+ "username_placeholder": "例如:玲音",
+ "new_captcha": "點擊圖片獲取新的驗證碼",
+ "captcha": "CAPTCHA",
+ "token": "邀請碼",
+ "registration": "註冊",
+ "password_confirm": "確認密碼",
+ "email": "電子郵箱",
+ "bio": "簡介"
+ },
+ "user_card": {
+ "its_you": "就是你!!",
+ "media": "媒體",
+ "per_day": "每天",
+ "remote_follow": "跨站關注",
+ "subscribe": "訂閱",
+ "mute_progress": "靜音中…",
+ "admin_menu": {
+ "delete_account": "刪除賬號",
+ "delete_user": "刪除用戶",
+ "delete_user_confirmation": "你確認嗎?此操作無法撤銷。"
+ }
+ },
+ "user_profile": {
+ "timeline_title": "用戶時間線",
+ "profile_does_not_exist": "抱歉,此個人資料不存在。",
+ "profile_loading_error": "抱歉,載入個人資料時出錯。"
+ },
+ "user_reporting": {
+ "title": "報告 {0}",
+ "add_comment_description": "此報告會發送給你的實例管理員。你可以在下面提供更多詳細信息解釋報告的緣由:",
+ "forward_to": "轉發 {0}",
+ "submit": "提交",
+ "generic_error": "當處理你的請求時,發生了一個錯誤。"
+ },
+ "who_to_follow": {
+ "more": "更多",
+ "who_to_follow": "推薦關注"
+ },
+ "tool_tip": {
+ "media_upload": "上傳多媒體",
+ "repeat": "轉發",
+ "favorite": "喜歡",
+ "add_reaction": "添加互動",
+ "reply": "回覆",
+ "user_settings": "用戶設置",
+ "accept_follow_request": "接受關注請求",
+ "reject_follow_request": "拒絕關注請求"
+ },
+ "upload": {
+ "file_size_units": {
+ "B": "B",
+ "KiB": "KiB",
+ "TiB": "TiB",
+ "MiB": "MiB",
+ "GiB": "GiB"
+ },
+ "error": {
+ "base": "上傳失敗。",
+ "file_too_big": "文件太大[{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]",
+ "default": "稍後再試"
+ }
+ },
+ "search": {
+ "people": "人",
+ "hashtags": "標籤",
+ "person_talking": "{count} 人正在討論",
+ "people_talking": "{count} 人正在討論",
+ "no_results": "沒有搜索結果"
+ },
+ "password_reset": {
+ "forgot_password": "忘記密碼了?",
+ "password_reset": "重置密碼",
+ "instruction": "輸入你的電郵地址或者用戶名,我們將發送一個鏈接到你的郵箱,用於重置密碼。",
+ "placeholder": "你的電郵地址或者用戶名",
+ "check_email": "檢查你的郵箱,會有一個鏈接用於重置密碼。",
+ "return_home": "回到首頁",
+ "too_many_requests": "你觸發了嘗試的限制,請稍後再試。",
+ "password_reset_disabled": "密碼重置已經被禁用。請聯繫你的實例管理員。"
}
}
--
cgit v1.2.3-70-g09d2
From beec425cce09313b35a81dbf94587ce647616287 Mon Sep 17 00:00:00 2001
From: Kana
Date: Sun, 20 Sep 2020 12:00:04 +0000
Subject: Translated using Weblate (Chinese (Simplified))
Currently translated at 90.4% (598 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
---
src/i18n/zh.json | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
(limited to 'src')
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index 1deeed35..74ba29f0 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -158,7 +158,9 @@
},
"preview_empty": "空的",
"preview": "预览",
- "media_description": "媒体描述"
+ "media_description": "媒体描述",
+ "media_description_error": "更新媒体失败,请重试",
+ "empty_status_error": "不能发布没有内容、没有附件的状态"
},
"registration": {
"bio": "简介",
@@ -501,13 +503,17 @@
"profile_fields": {
"value": "内容",
"name": "标签",
- "add_field": "添加字段"
+ "add_field": "添加字段",
+ "label": "个人资料元数据"
},
"accent": "强调色",
"pad_emoji": "从表情符号选择器插入表情符号时,在表情两侧插入空格",
"discoverable": "允许通过搜索检索等服务找到此账号",
"mutes_and_blocks": "隐藏与屏蔽",
- "bot": "这是一个机器人账号"
+ "bot": "这是一个机器人账号",
+ "fun": "幽默",
+ "useStreamingApiWarning": "(不推荐,试验性,已知会跳过消息)",
+ "chatMessageRadius": "聊天消息"
},
"time": {
"day": "{0} 天",
@@ -733,7 +739,7 @@
"mute": "隐藏"
},
"errors": {
- "storage_unavailable": "Pleroma 无法访问浏览器储存。您的登陆以及本地设置将不会被保存,您也可能遇到未知问题。请尝试启用 cookies。"
+ "storage_unavailable": "Pleroma 无法访问浏览器储存。您的登陆名以及本地设置将不会被保存,您可能遇到意外问题。请尝试启用 cookies。"
},
"shoutbox": {
"title": "留言板"
--
cgit v1.2.3-70-g09d2
From 970bfa2bdd2d28eb9a1536350ac100a97d40eb79 Mon Sep 17 00:00:00 2001
From: Kana
Date: Sun, 20 Sep 2020 12:10:50 +0000
Subject: Translated using Weblate (Chinese (Simplified))
Currently translated at 97.7% (646 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
---
src/i18n/zh.json | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 68 insertions(+), 7 deletions(-)
(limited to 'src')
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index 74ba29f0..c11dbae2 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -367,7 +367,14 @@
"upgraded_from_v2": "PleromaFE 已升级,主题会和你记忆中的不太一样。",
"older_version_imported": "您导入的文件来自旧版本的 FE。",
"future_version_imported": "您导入的文件来自更高版本的 FE。",
- "v2_imported": "您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。"
+ "v2_imported": "您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。",
+ "snapshot_source_mismatch": "版本冲突:很有可能是 FE 版本回滚后再次升级了,如果您使用旧版本的 FE 更改了主题那么您可能需要使用旧版本,否则请使用新版本。",
+ "migration_napshot_gone": "不知出于何种原因,主题快照缺失了,一些地方可能与您印象中的不符。",
+ "migration_snapshot_ok": "为保万无一失,加载了主题快照。您可以试着加载主题数据。",
+ "fe_downgraded": "PleromaFE 的版本回滚了。",
+ "fe_upgraded": "PleromaFE 的主题引擎随着版本更新升级了。",
+ "snapshot_missing": "在文件中没有主题快照,所以网站外观可能会与原来预想的不同。",
+ "snapshot_present": "已加载了主题快照,因此所有的值被覆盖了。你可以改为加载主题的实际数据。"
},
"use_source": "新版本",
"use_snapshot": "老版本",
@@ -406,7 +413,23 @@
"borders": "边框",
"buttons": "按钮",
"inputs": "输入框",
- "faint_text": "灰度文字"
+ "faint_text": "灰度文字",
+ "chat": {
+ "border": "边框",
+ "outgoing": "发出的",
+ "incoming": "收到的"
+ },
+ "disabled": "禁用的",
+ "pressed": "按下的",
+ "highlight": "强调元素",
+ "selectedMenu": "选中的菜单项",
+ "selectedPost": "选中的发布内容",
+ "icons": "图标",
+ "poll": "投票统计图",
+ "popover": "提示框,菜单,弹出框",
+ "post": "发布内容/用户简介",
+ "alert_neutral": "中性",
+ "alert_warning": "警告"
},
"radii": {
"_tab_label": "圆角"
@@ -513,7 +536,8 @@
"bot": "这是一个机器人账号",
"fun": "幽默",
"useStreamingApiWarning": "(不推荐,试验性,已知会跳过消息)",
- "chatMessageRadius": "聊天消息"
+ "chatMessageRadius": "聊天消息",
+ "greentext": "玩梗箭头"
},
"time": {
"day": "{0} 天",
@@ -572,7 +596,16 @@
"reply_to": "回复",
"replies_list": "回复:",
"mute_conversation": "隐藏对话",
- "unmute_conversation": "对话取消隐藏"
+ "unmute_conversation": "对话取消隐藏",
+ "hide_content": "隐藏内容",
+ "show_content": "显示内容",
+ "hide_full_subject": "隐藏此部分标题",
+ "show_full_subject": "显示全部标题",
+ "thread_muted": "此系列消息已被隐藏",
+ "copy_link": "复制状态链接",
+ "status_unavailable": "状态不可取得",
+ "unbookmark": "取消书签",
+ "bookmark": "书签"
},
"user_card": {
"approve": "允许",
@@ -626,7 +659,9 @@
},
"hidden": "已隐藏",
"show_repeats": "显示转发",
- "hide_repeats": "隐藏转发"
+ "hide_repeats": "隐藏转发",
+ "message": "消息",
+ "mention": "提及"
},
"user_profile": {
"timeline_title": "用户时间线",
@@ -653,7 +688,9 @@
"favorite": "收藏",
"user_settings": "用户设置",
"reject_follow_request": "拒绝关注请求",
- "add_reaction": "添加互动"
+ "add_reaction": "添加互动",
+ "bookmark": "书签",
+ "accept_follow_request": "接受关注请求"
},
"upload": {
"error": {
@@ -684,7 +721,9 @@
"check_email": "检查你的邮箱,会有一个链接用于重置密码。",
"return_home": "回到首页",
"too_many_requests": "你触发了尝试的限制,请稍后再试。",
- "password_reset_disabled": "密码重置已经被禁用。请联系你的实例管理员。"
+ "password_reset_disabled": "密码重置已经被禁用。请联系你的实例管理员。",
+ "password_reset_required_but_mailer_is_disabled": "您必须重置密码,但是密码重置被禁用了。请联系您所在实例的管理员。",
+ "password_reset_required": "您必须重置密码才能登陆。"
},
"remote_user_resolver": {
"error": "未找到。",
@@ -743,5 +782,27 @@
},
"shoutbox": {
"title": "留言板"
+ },
+ "display_date": {
+ "today": "今天"
+ },
+ "file_type": {
+ "file": "文件",
+ "image": "图片",
+ "video": "视频",
+ "audio": "音频"
+ },
+ "chats": {
+ "empty_chat_list_placeholder": "您还没有任何聊天记录。开始聊天吧!",
+ "error_sending_message": "发送消息时出了点问题。",
+ "error_loading_chat": "加载聊天时出了点问题。",
+ "delete_confirm": "您确实要删除此消息吗?",
+ "more": "更多",
+ "empty_message_error": "无法发布空消息",
+ "new": "新聊天",
+ "chats": "聊天",
+ "delete": "删除",
+ "message_user": "发消息给 {nickname}",
+ "you": "你:"
}
}
--
cgit v1.2.3-70-g09d2
From b3e1cb81a3128835f9da85d7df4a9d5c8337d352 Mon Sep 17 00:00:00 2001
From: Snow
Date: Mon, 21 Sep 2020 07:05:18 +0000
Subject: Translated using Weblate (Chinese (Traditional))
Currently translated at 72.1% (477 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
---
src/i18n/zh_Hant.json | 47 ++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 42 insertions(+), 5 deletions(-)
(limited to 'src')
diff --git a/src/i18n/zh_Hant.json b/src/i18n/zh_Hant.json
index 21c1e538..0cd79973 100644
--- a/src/i18n/zh_Hant.json
+++ b/src/i18n/zh_Hant.json
@@ -172,11 +172,13 @@
"color": "顏色",
"contrast": {
"context": {
- "18pt": "大字文本 (18pt+)"
+ "18pt": "大字文本 (18pt+)",
+ "text": "文本"
},
"level": {
"aaa": "符合 AAA 等級準則(推薦)",
- "aa": "符合 AA 等級準則(最低)"
+ "aa": "符合 AA 等級準則(最低)",
+ "bad": "不符合任何輔助功能指南"
},
"hint": "對比度是 {ratio}, 它 {level} {context}"
},
@@ -184,7 +186,11 @@
},
"advanced_colors": {
"faint_text": "灰度文字",
- "alert_error": "錯誤"
+ "alert_error": "錯誤",
+ "badge_notification": "通知",
+ "alert": "提醒或警告背景色",
+ "_tab_label": "高级",
+ "alert_warning": "警告"
},
"preview": {
"header_faint": "這很正常"
@@ -198,12 +204,33 @@
"keep_color": "保留顏色",
"keep_shadows": "保留陰影",
"keep_opacity": "保留透明度",
- "keep_roundness": "保留圓角"
+ "keep_roundness": "保留圓角",
+ "help": {
+ "migration_napshot_gone": "不知出於何種原因,主題快照缺失了,一些地方可能與您印象中的不符。",
+ "snapshot_source_mismatch": "版本衝突:很有可能是 FE 版本回滾後再次升級了,如果您使用舊版本的 FE 更改了主題那麼您可能需要使用舊版本,否則請使用新版本。",
+ "future_version_imported": "您導入的文件來自更高版本的 FE。",
+ "older_version_imported": "您導入的文件來自舊版本的 FE。",
+ "snapshot_missing": "在文件中沒有主題快照,所以網站外觀可能會與原來預想的不同。",
+ "fe_upgraded": "PleromaFE 的主題引擎隨著版本更新升級了。",
+ "fe_downgraded": "PleromaFE 的版本回滾了。",
+ "upgraded_from_v2": "PleromaFE 已升級,主題會和你記憶中的不太一樣。"
+ },
+ "use_source": "新版本",
+ "keep_as_is": "保持原狀",
+ "clear_opacity": "清除透明度",
+ "clear_all": "清除全部",
+ "reset": "重置",
+ "keep_fonts": "保留字體"
},
"fonts": {
"components": {
"interface": "界面"
}
+ },
+ "common_colors": {
+ "foreground_hint": "點擊”高級“ 標籤進行細緻的控制",
+ "main": "常用顏色",
+ "_tab_label": "共同"
}
},
"notification_setting_block_from_strangers": "屏蔽來自你沒有關注的用戶的通知",
@@ -387,7 +414,17 @@
"security": "安全",
"app_name": "App 名稱",
"change_email_error": "修改你的電子郵箱時發生錯誤。",
- "type_domains_to_mute": "搜索需要隱藏的域名"
+ "type_domains_to_mute": "搜索需要隱藏的域名",
+ "pad_emoji": "從表情符號選擇器插入表情符號時,在表情兩側插入空格",
+ "useStreamingApi": "實時接收發佈以及通知",
+ "minimal_scopes_mode": "最小發文範圍",
+ "scope_copy": "回覆時的複製範圍(私信是總是複製的)",
+ "reply_visibility_self": "只顯示發送給我的回覆",
+ "reply_visibility_following": "只顯示發送給我的回覆/發送給我關注的用戶的回覆",
+ "replies_in_timeline": "時間線中的回覆",
+ "revoke_token": "撤消",
+ "show_admin_badge": "顯示管理徽章",
+ "accent": "強調色"
},
"chats": {
"more": "更多",
--
cgit v1.2.3-70-g09d2
From 14a2328b85700095e4d92bad45dece35cb7668ef Mon Sep 17 00:00:00 2001
From: Snow
Date: Wed, 23 Sep 2020 02:57:14 +0000
Subject: Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (661 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
---
src/i18n/zh_Hant.json | 248 ++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 221 insertions(+), 27 deletions(-)
(limited to 'src')
diff --git a/src/i18n/zh_Hant.json b/src/i18n/zh_Hant.json
index 0cd79973..9306b21a 100644
--- a/src/i18n/zh_Hant.json
+++ b/src/i18n/zh_Hant.json
@@ -28,13 +28,13 @@
"reacted_with": "和 {0} 互動過",
"migrated_to": "遷移到",
"no_more_notifications": "沒有更多的通知",
- "repeated_you": "轉發了你的狀態",
+ "repeated_you": "轉發了你的發文",
"read": "已閱!",
"notifications": "通知",
"load_older": "載入更早的通知",
"follow_request": "想要關注你",
"followed_you": "關注了你",
- "favorited_you": "喜歡了你的狀態",
+ "favorited_you": "喜歡了你的發文",
"broken_favorite": "未知的狀態,正在搜索中…"
},
"nav": {
@@ -146,7 +146,7 @@
"media_removal": "移除媒體",
"ftl_removal_desc": "這個實例在所有已知網絡中移除下列實例:",
"ftl_removal": "從所有已知網路中移除",
- "quarantine_desc": "本實例只會把公開帖子發送到下列實例:",
+ "quarantine_desc": "本實例只會把公開發文發送到下列實例:",
"quarantine": "隔離",
"reject_desc": "本實例不會接收來自下列實例的消息:",
"reject": "拒絕",
@@ -190,13 +190,75 @@
"badge_notification": "通知",
"alert": "提醒或警告背景色",
"_tab_label": "高级",
- "alert_warning": "警告"
+ "alert_warning": "警告",
+ "alert_neutral": "中性",
+ "post": "帖子/用戶簡介",
+ "badge": "徽章背景",
+ "popover": "提示框,菜單,彈出框",
+ "panel_header": "面板標題",
+ "top_bar": "頂欄",
+ "borders": "邊框",
+ "buttons": "按鈕",
+ "inputs": "輸入框",
+ "underlay": "底襯",
+ "poll": "投票統計圖",
+ "icons": "圖標",
+ "highlight": "強調元素",
+ "pressed": "按下",
+ "selectedPost": "選中的帖子",
+ "selectedMenu": "選中的菜單項",
+ "disabled": "關閉",
+ "toggled": "切換",
+ "tabs": "標籤",
+ "chat": {
+ "incoming": "收到",
+ "outgoing": "發出",
+ "border": "邊框"
+ }
},
"preview": {
- "header_faint": "這很正常"
+ "header_faint": "這很正常",
+ "header": "預覽",
+ "content": "內容",
+ "error": "例子錯誤",
+ "button": "按鈕",
+ "text": "有堆 {0} 和 {1}",
+ "mono": "內容",
+ "input": "剛剛抵達洛杉磯.",
+ "faint_link": "有用的手冊",
+ "fine_print": "閱讀我們的 {0} ,然而什麼有用的也學不到!",
+ "checkbox": "我已經瀏覽了條款及細則",
+ "link": "一個很好的小鏈接"
},
"shadows": {
- "override": "覆寫"
+ "override": "覆寫",
+ "_tab_label": "陰影和燈光",
+ "component": "組件",
+ "shadow_id": "陰影 #{value}",
+ "blur": "模糊",
+ "spread": "擴散",
+ "inset": "插圖",
+ "hintV3": "對於陰影,您還可以使用{0}表示法來使用其他顏色插槽。",
+ "filter_hint": {
+ "always_drop_shadow": "警告,此陰影設置會總是使用 {0} ,如果瀏覽器支持的話。",
+ "drop_shadow_syntax": "{0} 不支持參數 {1} 和關鍵詞 {2} 。",
+ "avatar_inset": "請注意組合兩個內部和非內部的陰影到頭像上,在透明頭像上可能會有意料之外的效果。",
+ "spread_zero": "陰影的擴散 > 0 會同設置成零一樣",
+ "inset_classic": "插入內部的陰影會使用 {0}"
+ },
+ "components": {
+ "panel": "面板",
+ "panelHeader": "面板標題",
+ "topBar": "頂欄",
+ "avatar": "用戶頭像(在個人資料欄)",
+ "avatarStatus": "用戶頭像(在帖子顯示欄)",
+ "popup": "彈窗和工具提示",
+ "button": "按鈕",
+ "buttonHover": "按鈕(懸停)",
+ "buttonPressed": "按鈕(按下)",
+ "buttonPressedHover": "按鈕(按下和懸停)",
+ "input": "輸入框"
+ }
},
"switcher": {
"use_snapshot": "舊版",
@@ -213,24 +275,41 @@
"snapshot_missing": "在文件中沒有主題快照,所以網站外觀可能會與原來預想的不同。",
"fe_upgraded": "PleromaFE 的主題引擎隨著版本更新升級了。",
"fe_downgraded": "PleromaFE 的版本回滾了。",
- "upgraded_from_v2": "PleromaFE 已升級,主題會和你記憶中的不太一樣。"
+ "upgraded_from_v2": "PleromaFE 已升級,主題會和你記憶中的不太一樣。",
+ "v2_imported": "您導入的文件是舊版 FE 的。我們儘可能保持兼容性,但還是可能出現不一致的情況。",
+ "snapshot_present": "載入快照已加載,因此所有值均被覆蓋。 您可以改為載入主題實際數據。",
+ "migration_snapshot_ok": "為保萬無一失,載入了主題快照。您可以試著載入主題數據。"
},
"use_source": "新版本",
"keep_as_is": "保持原狀",
"clear_opacity": "清除透明度",
"clear_all": "清除全部",
"reset": "重置",
- "keep_fonts": "保留字體"
+ "keep_fonts": "保留字體",
+ "save_load_hint": "\"保留\" 選項在選擇或載入主題時保留當前設置的選項,在導出主題時還會存儲上述選項。當所有複選框未設置時,導出主題將保存所有內容。"
},
"fonts": {
"components": {
- "interface": "界面"
- }
+ "interface": "界面",
+ "input": "輸入框",
+ "post": "發帖文字",
+ "postCode": "帖子中使用等間距文字(富文本)"
+ },
+ "_tab_label": "字體",
+ "help": "給用戶界面的元素選擇字體。選擇 “自選”的你必須輸入確切的字體名稱。",
+ "family": "字體名稱",
+ "size": "大小 (像素)",
+ "weight": "字重 (粗體))",
+ "custom": "自選"
},
"common_colors": {
"foreground_hint": "點擊”高級“ 標籤進行細緻的控制",
"main": "常用顏色",
- "_tab_label": "共同"
+ "_tab_label": "共同",
+ "rgbo": "圖標,強調,徽章"
+ },
+ "radii": {
+ "_tab_label": "圓角"
}
},
"notification_setting_block_from_strangers": "屏蔽來自你沒有關注的用戶的通知",
@@ -247,7 +326,7 @@
"import_theme": "導入預置主題",
"import_followers_from_a_csv_file": "從 csv 文件中導入關注",
"import_blocks_from_a_csv_file": "從 csv 文件中導入封鎖黑名單名單",
- "hide_filtered_statuses": "隱藏過濾的狀態",
+ "hide_filtered_statuses": "隱藏過濾的發文",
"lock_account_description": "你需要手動審核關注請求",
"loop_video": "循環視頻",
"loop_video_silent_only": "只循環沒有聲音的視頻(例如:Mastodon 裡的“GIF”)",
@@ -256,7 +335,8 @@
"profile_fields": {
"add_field": "添加字段",
"name": "標籤",
- "value": "內容"
+ "value": "內容",
+ "label": "個人資料元數據"
},
"use_contain_fit": "生成縮略圖時不要裁剪附件",
"notification_visibility": "要顯示的通知類型",
@@ -360,7 +440,7 @@
"subject_line_behavior": "回覆時複製主題",
"subject_line_email": "比如電郵: \"re: 主題\"",
"subject_line_noop": "不要複製",
- "post_status_content_type": "發帖內容類型",
+ "post_status_content_type": "發文內容類型",
"stop_gifs": "鼠標懸停時播放GIF",
"streaming": "開啟滾動到頂部時的自動推送",
"text": "文本",
@@ -415,7 +495,7 @@
"app_name": "App 名稱",
"change_email_error": "修改你的電子郵箱時發生錯誤。",
"type_domains_to_mute": "搜索需要隱藏的域名",
- "pad_emoji": "從表情符號選擇器插入表情符號時,在表情兩側插入空格",
+ "pad_emoji": "從繪文字選擇器插入繪文字時,在繪文字兩側插入空格",
"useStreamingApi": "實時接收發佈以及通知",
"minimal_scopes_mode": "最小發文範圍",
"scope_copy": "回覆時的複製範圍(私信是總是複製的)",
@@ -424,7 +504,20 @@
"replies_in_timeline": "時間線中的回覆",
"revoke_token": "撤消",
"show_admin_badge": "顯示管理徽章",
- "accent": "強調色"
+ "accent": "強調色",
+ "greentext": "前文箭頭",
+ "show_moderator_badge": "顯示主持人徽章",
+ "oauth_tokens": "OAuth代幣",
+ "token": "代幣",
+ "refresh_token": "刷新代幣",
+ "useStreamingApiWarning": "(不推薦使用,實驗性的,已知跳過文章)",
+ "fun": "有趣",
+ "notification_setting_hide_notification_contents": "隱藏推送通知中的發送者與內容信息",
+ "version": {
+ "title": "版本",
+ "backend_version": "後端版本",
+ "frontend_version": "前端版本"
+ }
},
"chats": {
"more": "更多",
@@ -433,7 +526,11 @@
"error_sending_message": "發送消息時出了點問題。",
"empty_chat_list_placeholder": "您還沒有任何聊天記錄。 開始新的聊天!",
"new": "新聊天",
- "empty_message_error": "無法發布空消息"
+ "empty_message_error": "無法發布空消息",
+ "you": "你:",
+ "message_user": "發消息給 {nickname}",
+ "delete": "刪除",
+ "chats": "聊天"
},
"file_type": {
"audio": "音頻",
@@ -449,7 +546,23 @@
"replies_list": "回覆:",
"reply_to": "回覆",
"pin": "在個人資料置頂",
- "unpin": "取消在個人資料置頂"
+ "unpin": "取消在個人資料置頂",
+ "favorites": "喜歡",
+ "repeats": "轉發",
+ "delete": "刪除發文",
+ "pinned": "置頂",
+ "bookmark": "書籤",
+ "unbookmark": "取消書籤",
+ "delete_confirm": "你真的想要刪除這條發文嗎?",
+ "unmute_conversation": "對話取消靜音",
+ "status_unavailable": "發文不可取得",
+ "copy_link": "複製發文鏈接",
+ "thread_muted": "静音線程",
+ "show_full_subject": "顯示完整標題",
+ "thread_muted_and_words": ",有这些字:",
+ "hide_full_subject": "隱藏完整標題",
+ "show_content": "顯示內容",
+ "hide_content": "隱藏內容"
},
"time": {
"hours": "{0} 小時",
@@ -460,7 +573,30 @@
"hour_short": "{0}h",
"hours_short": "{0}h",
"years_short": "{0} y",
- "now": "剛剛"
+ "now": "剛剛",
+ "day": "{0} 天",
+ "in_future": "還有 {0}",
+ "in_past": "{0} 之前",
+ "minute": "{0} 分鐘",
+ "minute_short": "{0} 分",
+ "minutes_short": "{0} 分",
+ "minutes": "{0} 分鐘",
+ "month": "{0} 月",
+ "months": "{0} 月",
+ "month_short": "{0} 月",
+ "months_short": "{0} 月",
+ "now_short": "剛剛",
+ "second": "{0} 秒",
+ "seconds": "{0} 秒",
+ "second_short": "{0} 秒",
+ "seconds_short": "{0} 秒",
+ "week": "{0}周",
+ "weeks": "{0}周",
+ "week_short": "{0}周",
+ "weeks_short": "{0}周",
+ "year": "{0} 年",
+ "years": "{0} 年",
+ "year_short": "{0}年"
},
"post_status": {
"media_description_error": "無法更新媒體,請重試",
@@ -482,7 +618,7 @@
"direct_warning_to_first_only": "本條內容只有被在消息開始處提及的用戶能夠看到。",
"direct_warning_to_all": "本條內容只有被提及的用戶能夠看到。",
"account_not_locked_warning": "你的帳號沒有 {0}。任何人都可以關注你並瀏覽你的上鎖內容。",
- "new_status": "發佈新狀態",
+ "new_status": "發佈新發文",
"content_warning": "主題(可選)",
"content_type": {
"text/bbcode": "BBCode",
@@ -492,14 +628,24 @@
},
"attachments_sensitive": "標記附件為敏感內容",
"account_not_locked_warning_link": "上鎖",
- "default": "剛剛抵達洛杉磯。"
+ "default": "剛剛抵達洛杉磯。",
+ "empty_status_error": "無法發佈沒有附件的空發文"
},
"errors": {
"storage_unavailable": "Pleroma無法訪問瀏覽器存儲。您的登錄名或本地設置將不會保存,您可能會遇到意外問題。嘗試啟用Cookie。"
},
"timeline": {
"error_fetching": "獲取更新時發生錯誤",
- "conversation": "對話"
+ "conversation": "對話",
+ "no_retweet_hint": "這條內容僅關注者可見,或者是私信,因此不能轉發",
+ "collapse": "摺疊",
+ "load_older": "載入更早的發文",
+ "repeated": "已轉發",
+ "show_new": "顯示新內容",
+ "reload": "重新載入",
+ "up_to_date": "已是最新",
+ "no_more_statuses": "没有更多發文",
+ "no_statuses": "没有發文"
},
"interactions": {
"load_older": "載入更早的互動",
@@ -546,8 +692,51 @@
"admin_menu": {
"delete_account": "刪除賬號",
"delete_user": "刪除用戶",
- "delete_user_confirmation": "你確認嗎?此操作無法撤銷。"
- }
+ "delete_user_confirmation": "你確認嗎?此操作無法撤銷。",
+ "moderation": "調停",
+ "grant_admin": "賦予管理權限",
+ "revoke_admin": "撤銷管理權限",
+ "grant_moderator": "賦予主持人權限",
+ "revoke_moderator": "撤銷主持人權限",
+ "activate_account": "啟用賬號",
+ "deactivate_account": "關閉賬號",
+ "force_nsfw": "標記所有的帖子都是工作場合不適",
+ "strip_media": "從帖子裡刪除媒體文件",
+ "force_unlisted": "強制帖子為不公開",
+ "sandbox": "強制帖子為只有關注者可看",
+ "disable_remote_subscription": "禁止從遠程實例關注用戶",
+ "disable_any_subscription": "完全禁止關注用戶",
+ "quarantine": "從聯合實例中禁止用戶帖子"
+ },
+ "approve": "批准",
+ "block": "封鎖",
+ "blocked": "已封鎖!",
+ "deny": "拒絕",
+ "favorites": "喜歡",
+ "follow": "關注",
+ "follow_sent": "請求已發送!",
+ "follow_progress": "請求中…",
+ "follow_again": "再次發送請求?",
+ "follow_unfollow": "取消關注",
+ "followees": "正在關注",
+ "followers": "關注者",
+ "following": "正在關注!",
+ "follows_you": "關注了你!",
+ "hidden": "已隱藏",
+ "mention": "提及",
+ "message": "消息",
+ "mute": "靜音",
+ "muted": "已靜音",
+ "report": "報告",
+ "statuses": "發文",
+ "unsubscribe": "退訂",
+ "unblock": "取消封鎖",
+ "unblock_progress": "取消封鎖中…",
+ "block_progress": "封鎖中…",
+ "unmute": "取消靜音",
+ "unmute_progress": "取消靜音中…",
+ "hide_repeats": "隱藏轉發",
+ "show_repeats": "顯示轉發"
},
"user_profile": {
"timeline_title": "用戶時間線",
@@ -559,7 +748,9 @@
"add_comment_description": "此報告會發送給你的實例管理員。你可以在下面提供更多詳細信息解釋報告的緣由:",
"forward_to": "轉發 {0}",
"submit": "提交",
- "generic_error": "當處理你的請求時,發生了一個錯誤。"
+ "generic_error": "當處理你的請求時,發生了一個錯誤。",
+ "additional_comments": "其它評論",
+ "forward_description": "這個賬號是從另外一個服務器。同時發送一個報告到那裡?"
},
"who_to_follow": {
"more": "更多",
@@ -573,7 +764,8 @@
"reply": "回覆",
"user_settings": "用戶設置",
"accept_follow_request": "接受關注請求",
- "reject_follow_request": "拒絕關注請求"
+ "reject_follow_request": "拒絕關注請求",
+ "bookmark": "書籤"
},
"upload": {
"file_size_units": {
@@ -604,6 +796,8 @@
"check_email": "檢查你的郵箱,會有一個鏈接用於重置密碼。",
"return_home": "回到首頁",
"too_many_requests": "你觸發了嘗試的限制,請稍後再試。",
- "password_reset_disabled": "密碼重置已經被禁用。請聯繫你的實例管理員。"
+ "password_reset_disabled": "密碼重置已經被禁用。請聯繫你的實例管理員。",
+ "password_reset_required": "您必須重置密碼才能登陸。",
+ "password_reset_required_but_mailer_is_disabled": "您必須重置密碼,但是密碼重置被禁用了。請聯繫您所在實例的管理員。"
}
}
--
cgit v1.2.3-70-g09d2
From fffce4aa984d7a654d193b077b7c814f0312379e Mon Sep 17 00:00:00 2001
From: Kana
Date: Fri, 25 Sep 2020 08:28:31 +0000
Subject: Translated using Weblate (Chinese (Simplified))
Currently translated at 99.6% (659 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
---
src/i18n/zh.json | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
(limited to 'src')
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index c11dbae2..40ffe9b1 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -160,7 +160,7 @@
"preview": "预览",
"media_description": "媒体描述",
"media_description_error": "更新媒体失败,请重试",
- "empty_status_error": "不能发布没有内容、没有附件的状态"
+ "empty_status_error": "不能发布没有内容、没有附件的发文"
},
"registration": {
"bio": "简介",
@@ -374,7 +374,7 @@
"fe_downgraded": "PleromaFE 的版本回滚了。",
"fe_upgraded": "PleromaFE 的主题引擎随着版本更新升级了。",
"snapshot_missing": "在文件中没有主题快照,所以网站外观可能会与原来预想的不同。",
- "snapshot_present": "已加载了主题快照,因此所有的值被覆盖了。你可以改为加载主题的实际数据。"
+ "snapshot_present": "主题快照已加载,因此所有的值均被覆盖。您可以改为加载主题的实际数据。"
},
"use_source": "新版本",
"use_snapshot": "老版本",
@@ -429,7 +429,9 @@
"popover": "提示框,菜单,弹出框",
"post": "发布内容/用户简介",
"alert_neutral": "中性",
- "alert_warning": "警告"
+ "alert_warning": "警告",
+ "tabs": "标签页",
+ "underlay": "底衬"
},
"radii": {
"_tab_label": "圆角"
@@ -534,10 +536,10 @@
"discoverable": "允许通过搜索检索等服务找到此账号",
"mutes_and_blocks": "隐藏与屏蔽",
"bot": "这是一个机器人账号",
- "fun": "幽默",
- "useStreamingApiWarning": "(不推荐,试验性,已知会跳过消息)",
+ "fun": "趣味",
+ "useStreamingApiWarning": "(不推荐使用,试验性,已知会跳过一些消息)",
"chatMessageRadius": "聊天消息",
- "greentext": "玩梗箭头"
+ "greentext": "玩梗(meme)箭头"
},
"time": {
"day": "{0} 天",
@@ -583,7 +585,8 @@
"show_new": "显示新内容",
"up_to_date": "已是最新",
"no_more_statuses": "没有更多的状态",
- "no_statuses": "没有状态更新"
+ "no_statuses": "没有状态更新",
+ "reload": "重新载入"
},
"status": {
"favorites": "收藏",
@@ -605,7 +608,8 @@
"copy_link": "复制状态链接",
"status_unavailable": "状态不可取得",
"unbookmark": "取消书签",
- "bookmark": "书签"
+ "bookmark": "书签",
+ "thread_muted_and_words": ",含有过滤词:"
},
"user_card": {
"approve": "允许",
--
cgit v1.2.3-70-g09d2
From cd6adac59ae141783372bd0e8682c635f13ebb5d Mon Sep 17 00:00:00 2001
From: Kana
Date: Fri, 25 Sep 2020 10:30:16 +0000
Subject: Translated using Weblate (Chinese (Simplified))
Currently translated at 99.6% (659 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
---
src/i18n/zh.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index 40ffe9b1..86e084b7 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -539,7 +539,7 @@
"fun": "趣味",
"useStreamingApiWarning": "(不推荐使用,试验性,已知会跳过一些消息)",
"chatMessageRadius": "聊天消息",
- "greentext": "玩梗(meme)箭头"
+ "greentext": "Meme 箭头"
},
"time": {
"day": "{0} 天",
--
cgit v1.2.3-70-g09d2
From f10abd29f0da19625ff0e7c01ba09bd34c766c46 Mon Sep 17 00:00:00 2001
From: tarteka
Date: Sun, 27 Sep 2020 08:37:20 +0000
Subject: Translated using Weblate (Basque)
Currently translated at 77.6% (513 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eu/
---
src/i18n/eu.json | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/i18n/eu.json b/src/i18n/eu.json
index fdca6b95..2c9df7ba 100644
--- a/src/i18n/eu.json
+++ b/src/i18n/eu.json
@@ -226,7 +226,7 @@
"composing": "Idazten",
"confirm_new_password": "Baieztatu pasahitz berria",
"current_avatar": "Zure uneko avatarra",
- "current_password": "Indarrean den pasahitza",
+ "current_password": "Indarrean dagoen pasahitza",
"current_profile_banner": "Zure profilaren banner-a",
"data_import_export_tab": "Datuak Inportatu / Esportatu",
"default_vis": "Lehenetsitako ikusgaitasunak",
@@ -634,7 +634,8 @@
"about": {
"mrf": {
"keyword": {
- "keyword_policies": "Gako-hitz politika"
+ "keyword_policies": "Gako-hitz politika",
+ "ftl_removal": "\"Ezagutzen den Sarea\" denbora-lerrotik ezabatu"
},
"federation": "Federazioa"
}
--
cgit v1.2.3-70-g09d2
From c9033e03510fb9a04b43fafa62fd5a6525a79eec Mon Sep 17 00:00:00 2001
From: tarteka
Date: Sun, 27 Sep 2020 08:50:38 +0000
Subject: Translated using Weblate (Spanish)
Currently translated at 100.0% (661 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
---
src/i18n/es.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/es.json b/src/i18n/es.json
index 718d9040..bbe7edde 100644
--- a/src/i18n/es.json
+++ b/src/i18n/es.json
@@ -762,7 +762,7 @@
"ftl_removal_desc": "Esta instancia elimina las siguientes instancias de la línea de tiempo \"Toda la red conocida\":",
"ftl_removal": "Eliminar de la línea de tiempo \"Toda La Red Conocida\"",
"quarantine_desc": "Esta instancia enviará solo publicaciones públicas a las siguientes instancias:",
- "simple_policies": "Políticas sobre instancias específicas",
+ "simple_policies": "Políticas específicas de la instancia",
"reject_desc": "Esta instancia no aceptará mensajes de las siguientes instancias:",
"reject": "Rechazar",
"accept": "Aceptar"
--
cgit v1.2.3-70-g09d2
From 38fa2111f935b8e3b9eb2994b91a69d7d282a509 Mon Sep 17 00:00:00 2001
From: tarteka
Date: Sun, 27 Sep 2020 08:42:50 +0000
Subject: Translated using Weblate (Basque)
Currently translated at 83.3% (551 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eu/
---
src/i18n/eu.json | 60 ++++++++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 52 insertions(+), 8 deletions(-)
(limited to 'src')
diff --git a/src/i18n/eu.json b/src/i18n/eu.json
index 2c9df7ba..a45b7cfd 100644
--- a/src/i18n/eu.json
+++ b/src/i18n/eu.json
@@ -13,7 +13,8 @@
"scope_options": "Ikusgaitasun aukerak",
"text_limit": "Testu limitea",
"title": "Ezaugarriak",
- "who_to_follow": "Nori jarraitu"
+ "who_to_follow": "Nori jarraitu",
+ "pleroma_chat_messages": "Pleroma Txata"
},
"finder": {
"error_fetching_user": "Errorea erabiltzailea eskuratzen",
@@ -31,7 +32,13 @@
"disable": "Ezgaitu",
"enable": "Gaitu",
"confirm": "Baieztatu",
- "verify": "Egiaztatu"
+ "verify": "Egiaztatu",
+ "peek": "Begiratu",
+ "close": "Itxi",
+ "dismiss": "Baztertu",
+ "retry": "Saiatu berriro",
+ "error_retry": "Saiatu berriro mesedez",
+ "loading": "Kargatzen…"
},
"image_cropper": {
"crop_picture": "Moztu argazkia",
@@ -81,7 +88,10 @@
"user_search": "Erabiltzailea Bilatu",
"search": "Bilatu",
"who_to_follow": "Nori jarraitu",
- "preferences": "Hobespenak"
+ "preferences": "Hobespenak",
+ "chats": "Txatak",
+ "timelines": "Denbora-lerroak",
+ "bookmarks": "Laster-markak"
},
"notifications": {
"broken_favorite": "Egoera ezezaguna, bilatzen…",
@@ -91,7 +101,10 @@
"notifications": "Jakinarazpenak",
"read": "Irakurrita!",
"repeated_you": "zure mezua errepikatu du",
- "no_more_notifications": "Ez dago jakinarazpen gehiago"
+ "no_more_notifications": "Ez dago jakinarazpen gehiago",
+ "reacted_with": "{0}kin erreakzionatu zuen",
+ "migrated_to": "hona migratua:",
+ "follow_request": "jarraitu nahi zaitu"
},
"polls": {
"add_poll": "Inkesta gehitu",
@@ -114,7 +127,8 @@
"search_emoji": "Bilatu emoji bat",
"add_emoji": "Emoji bat gehitu",
"custom": "Ohiko emojiak",
- "unicode": "Unicode emojiak"
+ "unicode": "Unicode emojiak",
+ "load_all": "{emojiAmount} emoji guztiak kargatzen"
},
"stickers": {
"add_sticker": "Pegatina gehitu"
@@ -635,9 +649,39 @@
"mrf": {
"keyword": {
"keyword_policies": "Gako-hitz politika",
- "ftl_removal": "\"Ezagutzen den Sarea\" denbora-lerrotik ezabatu"
+ "ftl_removal": "\"Ezagutzen den Sarea\" denbora-lerrotik ezabatu",
+ "is_replaced_by": "→",
+ "replace": "Ordezkatuak",
+ "reject": "Ukatuak"
},
- "federation": "Federazioa"
- }
+ "federation": "Federazioa",
+ "simple": {
+ "media_nsfw_desc": "Instantzia honek hurrengo instantzien multimediak sentikorrak izatera behartzen ditu:",
+ "media_nsfw": "Behartu Multimedia Sentikor",
+ "media_removal_desc": "Instantzia honek atxikitutako multimedia hurrengo instantzietatik ezabatzen ditu:",
+ "media_removal": "Multimedia Ezabatu",
+ "ftl_removal_desc": "Instantzia honek hurrengo instantziak ezabatzen ditu \"Ezagutzen den Sarea\" denbora-lerrotik:",
+ "ftl_removal": "\"Ezagutzen den Sarea\" denbora-lerrotik ezabatu",
+ "quarantine_desc": "Instantzia honek soilik mezu publikoak bidaliko ditu instantzia hauetara:",
+ "quarantine": "Koarentena",
+ "reject_desc": "Instantzia honek ez ditu hurrengo instantzien mezuak onartuko:",
+ "reject": "Ukatuak",
+ "accept_desc": "Instantzia honek hurrengo instantzietako mezuak soilik onartzen ditu:",
+ "accept": "Onartu",
+ "simple_policies": "Gure instantziaren politika zehatzak"
+ },
+ "mrf_policies_desc": "MRF politikek instantzia honen federazioa manipulatzen dute gainerako instantziekin. Honako politika hauek daude gaituta:",
+ "mrf_policies": "Gaitutako MRF politikak"
+ },
+ "staff": "Arduradunak"
+ },
+ "domain_mute_card": {
+ "unmute_progress": "Isiltasuna kentzen…",
+ "unmute": "Isiltasuna kendu",
+ "mute_progress": "Isiltzen…",
+ "mute": "Isilarazi"
+ },
+ "shoutbox": {
+ "title": "Oihu-kutxa"
}
}
--
cgit v1.2.3-70-g09d2
From d11ecc5987d45a6d3e6f5e6ba4cf583c126abc8a Mon Sep 17 00:00:00 2001
From: Not HJ
Date: Mon, 28 Sep 2020 12:51:44 +0000
Subject: Translated using Weblate (English)
Currently translated at 100.0% (661 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/en/
---
src/i18n/en.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 01f89503..a888ac63 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -92,7 +92,7 @@
"description": "Log in with OAuth",
"logout": "Log out",
"password": "Password",
- "placeholder": "e.g. lain",
+ "placeholder": "e.g. Lain",
"register": "Register",
"username": "Username",
"hint": "Log in to join the discussion",
--
cgit v1.2.3-70-g09d2
From e9f13895b9d98650d3700b5c5a0fcd5080f5be9e Mon Sep 17 00:00:00 2001
From: hj
Date: Mon, 28 Sep 2020 13:34:31 +0000
Subject: Translated using Weblate (English)
Currently translated at 100.0% (661 of 661 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/en/
---
src/i18n/en.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/en.json b/src/i18n/en.json
index a888ac63..01f89503 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -92,7 +92,7 @@
"description": "Log in with OAuth",
"logout": "Log out",
"password": "Password",
- "placeholder": "e.g. Lain",
+ "placeholder": "e.g. lain",
"register": "Register",
"username": "Username",
"hint": "Log in to join the discussion",
--
cgit v1.2.3-70-g09d2
From 71fca987a8b85a9147d77393e82ec6b6748796f6 Mon Sep 17 00:00:00 2001
From: Ben Is
Date: Thu, 1 Oct 2020 09:11:38 +0000
Subject: Translated using Weblate (Italian)
Currently translated at 100.0% (668 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
---
src/i18n/it.json | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/it.json b/src/i18n/it.json
index 474e7fde..4d096004 100644
--- a/src/i18n/it.json
+++ b/src/i18n/it.json
@@ -407,7 +407,14 @@
"reset_background_confirm": "Vuoi veramente azzerare lo sfondo?",
"chatMessageRadius": "Messaggi istantanei",
"notification_setting_hide_notification_contents": "Nascondi mittente e contenuti delle notifiche push",
- "notification_setting_block_from_strangers": "Blocca notifiche da utenti che non segui"
+ "notification_setting_block_from_strangers": "Blocca notifiche da utenti che non segui",
+ "virtual_scrolling": "Velocizza l'elaborazione delle sequenze",
+ "import_mutes_from_a_csv_file": "Importa silenziati da un file CSV",
+ "mutes_imported": "Silenziati importati! Saranno elaborati a breve.",
+ "mute_import_error": "Errore nell'importazione",
+ "mute_import": "Importa silenziati",
+ "mute_export_button": "Esporta la tua lista di silenziati in un file CSV",
+ "mute_export": "Esporta silenziati"
},
"timeline": {
"error_fetching": "Errore nell'aggiornamento",
--
cgit v1.2.3-70-g09d2
From f110258fa1e7a75d4c0ebe6a5956f129c87206c0 Mon Sep 17 00:00:00 2001
From: Snow
Date: Thu, 1 Oct 2020 08:53:41 +0000
Subject: Translated using Weblate (Chinese (Simplified))
Currently translated at 98.6% (659 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
---
src/i18n/zh.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index 86e084b7..1fb0b548 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -141,7 +141,7 @@
"text/bbcode": "BBCode"
},
"content_warning": "主题(可选)",
- "default": "刚刚抵达上海",
+ "default": "刚刚抵达洛杉矶",
"direct_warning_to_all": "本条内容只有被提及的用户能够看到。",
"direct_warning_to_first_only": "本条内容只有被在消息开始处提及的用户能够看到。",
"posting": "发送",
--
cgit v1.2.3-70-g09d2
From dff7e381542c3f0d85d724a16ccf0783ce2e59ff Mon Sep 17 00:00:00 2001
From: Snow
Date: Thu, 1 Oct 2020 08:48:58 +0000
Subject: Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (668 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
---
src/i18n/zh_Hant.json | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/zh_Hant.json b/src/i18n/zh_Hant.json
index 9306b21a..79a992fc 100644
--- a/src/i18n/zh_Hant.json
+++ b/src/i18n/zh_Hant.json
@@ -517,7 +517,14 @@
"title": "版本",
"backend_version": "後端版本",
"frontend_version": "前端版本"
- }
+ },
+ "virtual_scrolling": "優化時間線渲染",
+ "import_mutes_from_a_csv_file": "從CSV文件導入靜音",
+ "mutes_imported": "靜音導入了!處理它們將需要一段時間。",
+ "mute_import": "靜音導入",
+ "mute_import_error": "導入靜音時出錯",
+ "mute_export_button": "將靜音導出到csv文件",
+ "mute_export": "靜音導出"
},
"chats": {
"more": "更多",
--
cgit v1.2.3-70-g09d2
From 7e4d1b0abb00149b1529a7a649a77346995e5f46 Mon Sep 17 00:00:00 2001
From: nickiii
Date: Thu, 1 Oct 2020 10:25:20 +0000
Subject: Added translation using Weblate (Persian)
---
src/i18n/fa.json | 1 +
1 file changed, 1 insertion(+)
create mode 100644 src/i18n/fa.json
(limited to 'src')
diff --git a/src/i18n/fa.json b/src/i18n/fa.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/src/i18n/fa.json
@@ -0,0 +1 @@
+{}
--
cgit v1.2.3-70-g09d2
From 14dc0eef3b81aa79b7227d621fd965e7ac593511 Mon Sep 17 00:00:00 2001
From: "Haelwenn (lanodan) Monnier"
Date: Thu, 1 Oct 2020 11:17:09 +0000
Subject: Translated using Weblate (French)
Currently translated at 92.0% (615 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fr/
---
src/i18n/fr.json | 43 +++++++++++++++++++++++++++++++++++--------
1 file changed, 35 insertions(+), 8 deletions(-)
(limited to 'src')
diff --git a/src/i18n/fr.json b/src/i18n/fr.json
index 3b7eefaf..63ad46d2 100644
--- a/src/i18n/fr.json
+++ b/src/i18n/fr.json
@@ -13,7 +13,8 @@
"scope_options": "Options de visibilité",
"text_limit": "Limite de texte",
"title": "Caractéristiques",
- "who_to_follow": "Personnes à suivre"
+ "who_to_follow": "Personnes à suivre",
+ "pleroma_chat_messages": "Chat Pleroma"
},
"finder": {
"error_fetching_user": "Erreur lors de la recherche de l'utilisateur·ice",
@@ -32,7 +33,12 @@
"enable": "Activer",
"confirm": "Confirmer",
"verify": "Vérifier",
- "dismiss": "Rejeter"
+ "dismiss": "Rejeter",
+ "peek": "Jeter un coup d'œil",
+ "close": "Fermer",
+ "retry": "Réessayez",
+ "error_retry": "Veuillez réessayer",
+ "loading": "Chargement…"
},
"image_cropper": {
"crop_picture": "Rogner l'image",
@@ -77,15 +83,17 @@
"dms": "Messages directs",
"public_tl": "Fil d'actualité public",
"timeline": "Fil d'actualité",
- "twkn": "Ensemble du réseau connu",
+ "twkn": "Réseau connu",
"user_search": "Recherche d'utilisateur·ice",
"who_to_follow": "Qui suivre",
"preferences": "Préférences",
"search": "Recherche",
- "administration": "Administration"
+ "administration": "Administration",
+ "chats": "Chats",
+ "bookmarks": "Marques-Pages"
},
"notifications": {
- "broken_favorite": "Chargement d'un message inconnu…",
+ "broken_favorite": "Message inconnu, chargement…",
"favorited_you": "a aimé votre statut",
"followed_you": "a commencé à vous suivre",
"load_older": "Charger les notifications précédentes",
@@ -115,7 +123,7 @@
"text/bbcode": "BBCode"
},
"content_warning": "Sujet (optionnel)",
- "default": "Écrivez ici votre prochain statut.",
+ "default": "Je viens d'atterrir en Tchéquie.",
"direct_warning_to_all": "Ce message sera visible pour toutes les personnes mentionnées.",
"direct_warning_to_first_only": "Ce message sera visible uniquement pour personnes mentionnées au début du message.",
"posting": "Envoi en cours",
@@ -129,7 +137,12 @@
"private": "Abonné·e·s uniquement - Seul·e·s vos abonné·e·s verront vos billets",
"public": "Publique - Afficher dans les fils publics",
"unlisted": "Non-Listé - Ne pas afficher dans les fils publics"
- }
+ },
+ "media_description_error": "Échec de téléversement du media, essayez encore",
+ "empty_status_error": "Impossible de poster un statut vide sans attachements",
+ "preview_empty": "Vide",
+ "preview": "Prévisualisation",
+ "media_description": "Description de l'attachement"
},
"registration": {
"bio": "Biographie",
@@ -488,7 +501,15 @@
"notification_setting_privacy_option": "Masquer l'expéditeur et le contenu des notifications push",
"notification_setting_privacy": "Intimité",
"hide_followers_count_description": "Masquer le nombre d'abonnés",
- "accent": "Accent"
+ "accent": "Accent",
+ "chatMessageRadius": "Message de chat",
+ "bot": "Ce compte est un robot",
+ "import_mutes_from_a_csv_file": "Importer les masquages depuis un fichier CSV",
+ "mutes_imported": "Masquages importés ! Leur application peut prendre du temps.",
+ "mute_import_error": "Erreur à l'import des masquages",
+ "mute_import": "Import des masquages",
+ "mute_export_button": "Exporter vos masquages dans un fichier CSV",
+ "mute_export": "Export des masquages"
},
"timeline": {
"collapse": "Fermer",
@@ -732,5 +753,11 @@
"return_home": "Retourner à la page d'accueil",
"too_many_requests": "Vos avez atteint la limite d'essais, essayez plus tard.",
"password_reset_required": "Vous devez changer votre mot de passe pour vous authentifier."
+ },
+ "errors": {
+ "storage_unavailable": "Pleroma n'a pas pu accéder au stockage du navigateur. Votre identifiant ou vos mots de passes ne seront sauvegardés et des problèmes pourront être rencontrés. Essayez d'activer les cookies."
+ },
+ "shoutbox": {
+ "title": "Shoutbox"
}
}
--
cgit v1.2.3-70-g09d2
From b12b6a84a466894ccf85c88d47a87f576de872f0 Mon Sep 17 00:00:00 2001
From: nickiii
Date: Thu, 1 Oct 2020 10:44:46 +0000
Subject: Translated using Weblate (Persian)
Currently translated at 2.5% (17 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fa/
---
src/i18n/fa.json | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/fa.json b/src/i18n/fa.json
index 0967ef42..5a7f6139 100644
--- a/src/i18n/fa.json
+++ b/src/i18n/fa.json
@@ -1 +1,29 @@
-{}
+{
+ "about": {
+ "mrf": {
+ "simple": {
+ "media_removal_desc": "این نمونه رسانهی پیغامهای نمونههای ذکر شده را حذف میکند:",
+ "ftl_removal_desc": "این نمونه، نمونههای ذکر شده را از تایملاین «تمام شبکه شناخته شده» حذف میکند:",
+ "media_removal": "حذف رسانه",
+ "ftl_removal": "حذف از تایملاین «تمام شبکه شناخته شده»",
+ "quarantine_desc": "این نمونه تنها پیغامهای عمومی را به نمونههای ذکر شده پیغام ارسال میکند:",
+ "quarantine": "قرنطینه شده",
+ "reject_desc": "این نمونه از نمونههای ذکر شده پیغامی دریافت نمیکند:",
+ "reject": "رد کننده",
+ "accept_desc": "این نمونه تنها از نمونههای ذکر شده پیغام دریافت میکند:",
+ "simple_policies": "سیاستهای مخصوص نمونه",
+ "accept": "دریافت کننده"
+ },
+ "federation": "فدراسیون",
+ "mrf_policies_desc": "سیاستهای MRF رفتار فدراسیون این نمونه را تغییر میدهد. سیاستهایی که در ادامه آمده اعمال شده است:",
+ "keyword": {
+ "reject": "رد کننده",
+ "replace": "جایگزین کننده",
+ "keyword_policies": "سیاستهای واژگان کلیدی",
+ "is_replaced_by": "→",
+ "ftl_removal": "حذف از تایملاین «تمام شبکه شناخته شده»"
+ },
+ "mrf_policies": "سیاستهای MRF(وسیله بازنویسی پیغام) فعال شده"
+ }
+ }
+}
--
cgit v1.2.3-70-g09d2
From 6dec1544503c531d55ed67ad598c2fbb6239d727 Mon Sep 17 00:00:00 2001
From: nickiii
Date: Thu, 1 Oct 2020 12:38:32 +0000
Subject: Translated using Weblate (Persian)
Currently translated at 2.6% (18 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fa/
---
src/i18n/fa.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/fa.json b/src/i18n/fa.json
index 5a7f6139..290a19e3 100644
--- a/src/i18n/fa.json
+++ b/src/i18n/fa.json
@@ -24,6 +24,7 @@
"ftl_removal": "حذف از تایملاین «تمام شبکه شناخته شده»"
},
"mrf_policies": "سیاستهای MRF(وسیله بازنویسی پیغام) فعال شده"
- }
+ },
+ "staff": "کارکنان"
}
}
--
cgit v1.2.3-70-g09d2
From ff2fe5c68c6164853e70a12793982c42ff58d2e9 Mon Sep 17 00:00:00 2001
From: Mark Felder
Date: Thu, 1 Oct 2020 17:05:46 -0500
Subject: Fix Follow Requests title style
---
src/components/follow_requests/follow_requests.vue | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/components/follow_requests/follow_requests.vue b/src/components/follow_requests/follow_requests.vue
index 5fa4cf39..4b9101e2 100644
--- a/src/components/follow_requests/follow_requests.vue
+++ b/src/components/follow_requests/follow_requests.vue
@@ -1,7 +1,9 @@
-
- {{ $t('nav.friend_requests') }}
+
+
+ {{ $t('nav.friend_requests') }}
+
Date: Fri, 2 Oct 2020 12:21:56 +0300
Subject: Stop click propagation when unhiding nsfw
---
src/components/attachment/attachment.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue
index 7fabc963..19c713d5 100644
--- a/src/components/attachment/attachment.vue
+++ b/src/components/attachment/attachment.vue
@@ -28,7 +28,7 @@
:href="attachment.url"
:alt="attachment.description"
:title="attachment.description"
- @click.prevent="toggleHidden"
+ @click.prevent.stop="toggleHidden"
>
Date: Fri, 2 Oct 2020 10:09:39 +0000
Subject: Translated using Weblate (Polish)
Currently translated at 100.0% (668 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
---
src/i18n/pl.json | 58 +++++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 47 insertions(+), 11 deletions(-)
(limited to 'src')
diff --git a/src/i18n/pl.json b/src/i18n/pl.json
index 05a7edf7..dfa0729d 100644
--- a/src/i18n/pl.json
+++ b/src/i18n/pl.json
@@ -49,7 +49,8 @@
"scope_options": "Ustawienia zakresu",
"text_limit": "Limit tekstu",
"title": "Funkcje",
- "who_to_follow": "Propozycje obserwacji"
+ "who_to_follow": "Propozycje obserwacji",
+ "pleroma_chat_messages": "Czat Pleromy"
},
"finder": {
"error_fetching_user": "Błąd przy pobieraniu profilu",
@@ -71,7 +72,9 @@
"verify": "Zweryfikuj",
"close": "Zamknij",
"loading": "Ładowanie…",
- "retry": "Spróbuj ponownie"
+ "retry": "Spróbuj ponownie",
+ "peek": "Spójrz",
+ "error_retry": "Spróbuj ponownie"
},
"image_cropper": {
"crop_picture": "Przytnij obrazek",
@@ -117,12 +120,14 @@
"dms": "Wiadomości prywatne",
"public_tl": "Publiczna oś czasu",
"timeline": "Oś czasu",
- "twkn": "Cała znana sieć",
+ "twkn": "Znana sieć",
"user_search": "Wyszukiwanie użytkowników",
"search": "Wyszukiwanie",
"who_to_follow": "Sugestie obserwacji",
"preferences": "Preferencje",
- "bookmarks": "Zakładki"
+ "bookmarks": "Zakładki",
+ "chats": "Czaty",
+ "timelines": "Osie czasu"
},
"notifications": {
"broken_favorite": "Nieznany status, szukam go…",
@@ -197,7 +202,9 @@
},
"preview_empty": "Pusty",
"preview": "Podgląd",
- "empty_status_error": "Nie można wysłać pustego wpisu bez plików"
+ "empty_status_error": "Nie można wysłać pustego wpisu bez plików",
+ "media_description_error": "Nie udało się zaktualizować mediów, spróbuj ponownie",
+ "media_description": "Opis mediów"
},
"registration": {
"bio": "Bio",
@@ -400,7 +407,7 @@
"theme_help_v2_1": "Możesz też zastąpić kolory i widoczność poszczególnych komponentów przełączając pola wyboru, użyj „Wyczyść wszystko” aby usunąć wszystkie zastąpienia.",
"theme_help_v2_2": "Ikony pod niektórych wpisami są wskaźnikami kontrastu pomiędzy tłem a tekstem, po najechaniu na nie otrzymasz szczegółowe informacje. Zapamiętaj, że jeżeli używasz przezroczystości, wskaźniki pokazują najgorszy możliwy przypadek.",
"tooltipRadius": "Etykiety/alerty",
- "type_domains_to_mute": "Wpisz domeny, które chcesz wyciszyć",
+ "type_domains_to_mute": "Wyszukaj domeny, które chcesz wyciszyć",
"upload_a_photo": "Wyślij zdjęcie",
"user_settings": "Ustawienia użytkownika",
"values": {
@@ -492,7 +499,8 @@
"tabs": "Karty",
"chat": {
"outgoing": "Wiadomości wychodzące",
- "incoming": "Wiadomości przychodzące"
+ "incoming": "Wiadomości przychodzące",
+ "border": "Granica"
}
},
"radii": {
@@ -573,7 +581,22 @@
"add_field": "Dodaj pole"
},
"bot": "To konto jest prowadzone przez bota",
- "notification_setting_hide_notification_contents": "Ukryj nadawcę i zawartość powiadomień push"
+ "notification_setting_hide_notification_contents": "Ukryj nadawcę i zawartość powiadomień push",
+ "notification_setting_block_from_strangers": "Zablokuj powiadomienia od użytkowników których nie obserwujesz",
+ "virtual_scrolling": "Optymalizuj renderowanie osi czasu",
+ "reset_background_confirm": "Czy naprawdę chcesz zresetować tło?",
+ "reset_banner_confirm": "Czy naprawdę chcesz zresetować banner?",
+ "reset_avatar_confirm": "Czy naprawdę chcesz zresetować awatar?",
+ "reset_profile_banner": "Zresetuj banner profilowy",
+ "reset_profile_background": "Zresetuj tło profilowe",
+ "mutes_and_blocks": "Wyciszenia i blokady",
+ "chatMessageRadius": "Wiadomość czatu",
+ "import_mutes_from_a_csv_file": "Zaimportuj wyciszenia z pliku .csv",
+ "mutes_imported": "Zaimportowano wyciszenia! Przetwarzanie zajmie chwilę.",
+ "mute_import_error": "Wystąpił błąd podczas importowania wyciszeń",
+ "mute_import": "Import wyciszeń",
+ "mute_export_button": "Wyeksportuj swoje wyciszenia do pliku .csv",
+ "mute_export": "Eksport wyciszeń"
},
"time": {
"day": "{0} dzień",
@@ -639,7 +662,11 @@
"unbookmark": "Usuń z zakładek",
"bookmark": "Dodaj do zakładek",
"hide_content": "Ukryj zawartość",
- "show_content": "Pokaż zawartość"
+ "show_content": "Pokaż zawartość",
+ "hide_full_subject": "Ukryj cały temat",
+ "show_full_subject": "Pokaż cały temat",
+ "thread_muted_and_words": ", ma słowa:",
+ "thread_muted": "Wątek wyciszony"
},
"user_card": {
"approve": "Przyjmij",
@@ -723,7 +750,8 @@
"add_reaction": "Dodaj reakcję",
"user_settings": "Ustawienia użytkownika",
"accept_follow_request": "Akceptuj prośbę o możliwość obserwacji",
- "reject_follow_request": "Odrzuć prośbę o możliwość obserwacji"
+ "reject_follow_request": "Odrzuć prośbę o możliwość obserwacji",
+ "bookmark": "Zakładka"
},
"upload": {
"error": {
@@ -773,9 +801,17 @@
"error_sending_message": "Coś poszło nie tak podczas wysyłania wiadomości.",
"error_loading_chat": "Coś poszło nie tak podczas ładowania czatu.",
"empty_message_error": "Nie można wysłać pustej wiadomości",
- "new": "Nowy czat"
+ "new": "Nowy czat",
+ "empty_chat_list_placeholder": "Nie masz jeszcze żadnych czatów. Zacznij nowy czat!",
+ "chats": "Czaty"
},
"display_date": {
"today": "Dzisiaj"
+ },
+ "shoutbox": {
+ "title": "Shoutbox"
+ },
+ "errors": {
+ "storage_unavailable": "Pleroma nie mogła uzyskać dostępu do pamięci masowej przeglądarki. Twój login lub lokalne ustawienia nie zostaną zapisane i możesz napotkać problemy. Spróbuj włączyć ciasteczka."
}
}
--
cgit v1.2.3-70-g09d2
From 0042cf38097e15ad5635377e542895bbd979a563 Mon Sep 17 00:00:00 2001
From: nickiii
Date: Sun, 4 Oct 2020 14:45:55 +0000
Subject: Translated using Weblate (Persian)
Currently translated at 15.1% (101 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fa/
---
src/i18n/fa.json | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 126 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/fa.json b/src/i18n/fa.json
index 290a19e3..99bb44b7 100644
--- a/src/i18n/fa.json
+++ b/src/i18n/fa.json
@@ -12,7 +12,9 @@
"reject": "رد کننده",
"accept_desc": "این نمونه تنها از نمونههای ذکر شده پیغام دریافت میکند:",
"simple_policies": "سیاستهای مخصوص نمونه",
- "accept": "دریافت کننده"
+ "accept": "دریافت کننده",
+ "media_nsfw_desc": "این نمونه، رسانه نمونههای ذکر شده را به اجبار حساس میکند:",
+ "media_nsfw": "به اجبار حساس کردن رسانه"
},
"federation": "فدراسیون",
"mrf_policies_desc": "سیاستهای MRF رفتار فدراسیون این نمونه را تغییر میدهد. سیاستهایی که در ادامه آمده اعمال شده است:",
@@ -26,5 +28,128 @@
"mrf_policies": "سیاستهای MRF(وسیله بازنویسی پیغام) فعال شده"
},
"staff": "کارکنان"
+ },
+ "image_cropper": {
+ "crop_picture": "برش تصویر",
+ "cancel": "لغو",
+ "save_without_cropping": "ذخیره بدون برش",
+ "save": "ذخیره"
+ },
+ "notifications": {
+ "followed_you": "پیگیر شما شد",
+ "favorited_you": "پیغام شما را پسندید",
+ "broken_favorite": "پیغام ناشناخته، در حال جستجو…"
+ },
+ "nav": {
+ "chats": "گپها",
+ "timelines": "تایملاینها",
+ "preferences": "ترجیحات",
+ "who_to_follow": "چه کسانی را پیگیری کنیم",
+ "search": "جستجو",
+ "user_search": "جستجوی کاربر",
+ "bookmarks": "نشانکها",
+ "twkn": "شبکه شناخته شده",
+ "timeline": "تایملاین",
+ "public_tl": "تایملاین عمومی",
+ "dms": "پیغامهای مستقیم",
+ "interactions": "تعاملات",
+ "mentions": "نام بردن",
+ "friend_requests": "درخواست پیگیری",
+ "back": "قبلی",
+ "administration": "مدیریت",
+ "about": "درباره"
+ },
+ "features_panel": {
+ "who_to_follow": "چه کسانی را پیگیری کنیم",
+ "title": "ویژگیها",
+ "text_limit": "محدودیت متن",
+ "scope_options": "تنظیمات حوزه",
+ "media_proxy": "پروکسی رسانه",
+ "gopher": "گوفر",
+ "pleroma_chat_messages": "گپ پلروما",
+ "chat": "گپ"
+ },
+ "media_modal": {
+ "next": "بعدی",
+ "previous": "قبلی"
+ },
+ "login": {
+ "heading": {
+ "recovery": "بازیابی دو مرحلهای",
+ "totp": "احراز هویت دو مرحلهای"
+ },
+ "enter_two_factor_code": "کد احراز هویت دو مرحلهای را وارد کنید",
+ "recovery_code": "کد بازیابی",
+ "enter_recovery_code": "کد بازیابی را وارد کنید",
+ "authentication_code": "کد احراز هویت",
+ "hint": "برای شرکت در گفتگو، وارد سامانه شوید",
+ "username": "نام کاربری",
+ "register": "ثبت نام",
+ "description": "ورود به سامانه از طریق OAuth",
+ "placeholder": "به عنوان مثال: lain",
+ "password": "رمز عبور",
+ "logout": "خروج از سامانه",
+ "login": "ورود به سامانه"
+ },
+ "importer": {
+ "error": "در حین بارگذاری فایل خطایی رخ داد.",
+ "success": "با موفقیت بارگذاری شد.",
+ "submit": "ارسال"
+ },
+ "general": {
+ "peek": "نگاه سریع",
+ "close": "بستن",
+ "verify": "تأیید",
+ "confirm": "تأیید",
+ "enable": "فعال",
+ "disable": "غیر فعال",
+ "cancel": "لغو",
+ "show_less": "کمتر نشان بده",
+ "show_more": "بیشتر نشان بده",
+ "optional": "اختیاری",
+ "retry": "دوباره امتحان کنید",
+ "error_retry": "لطفاً دوباره امتحان کنید",
+ "generic_error": "خطایی رخ داد",
+ "loading": "در حال بارگذاری…",
+ "more": "بیشتر",
+ "submit": "ارسال",
+ "apply": "اعمال"
+ },
+ "finder": {
+ "find_user": "جستجوی کاربر",
+ "error_fetching_user": "دریافت کاربر با خطا مواجه شد"
+ },
+ "exporter": {
+ "processing": "در حال پردازش، شما به قادر به دانلود فایل خواهید بود",
+ "export": "صادر کردن"
+ },
+ "domain_mute_card": {
+ "unmute": "صدا دار",
+ "unmute_progress": "در حال صدا دار کردن …",
+ "mute_progress": "در حال بی صدا کردن…",
+ "mute": "بی صدا"
+ },
+ "shoutbox": {
+ "title": "چت باکس"
+ },
+ "display_date": {
+ "today": "امروز"
+ },
+ "file_type": {
+ "file": "فایل",
+ "image": "تصویر",
+ "video": "ویدئو",
+ "audio": "صدا"
+ },
+ "chats": {
+ "empty_chat_list_placeholder": "شما هنوز هیچ گپی ندارید، گپ جدیدی را آغاز کنید!",
+ "delete": "حذف",
+ "error_sending_message": "در حین ارسال پیغام خطایی رخ داد.",
+ "error_loading_chat": "در هنگام بارگذاری گپ خطایی رخ داد.",
+ "delete_confirm": "آیا از حذف این پیغام اطمینان دارید؟",
+ "more": "بیشتر",
+ "empty_message_error": "نمیتوان پیغام خالی فرستاد",
+ "new": "گپ جدید",
+ "chats": "گپها"
}
}
--
cgit v1.2.3-70-g09d2
From ba25c618cc27d751db2a5c7d67101e7ad77a44b8 Mon Sep 17 00:00:00 2001
From: nickiii
Date: Mon, 5 Oct 2020 08:41:02 +0000
Subject: Translated using Weblate (Persian)
Currently translated at 15.1% (101 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fa/
---
src/i18n/fa.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/i18n/fa.json b/src/i18n/fa.json
index 99bb44b7..0e8bda4b 100644
--- a/src/i18n/fa.json
+++ b/src/i18n/fa.json
@@ -53,7 +53,7 @@
"public_tl": "تایملاین عمومی",
"dms": "پیغامهای مستقیم",
"interactions": "تعاملات",
- "mentions": "نام بردن",
+ "mentions": "نام بردنها",
"friend_requests": "درخواست پیگیری",
"back": "قبلی",
"administration": "مدیریت",
@@ -120,7 +120,7 @@
"error_fetching_user": "دریافت کاربر با خطا مواجه شد"
},
"exporter": {
- "processing": "در حال پردازش، شما به قادر به دانلود فایل خواهید بود",
+ "processing": "در حال پردازش، شما به زودی قادر به دانلود فایل خواهید بود",
"export": "صادر کردن"
},
"domain_mute_card": {
--
cgit v1.2.3-70-g09d2
From 20bdf32658b2c97e7e43fe3f5777c358bf352826 Mon Sep 17 00:00:00 2001
From: tarteka
Date: Tue, 6 Oct 2020 14:26:57 +0000
Subject: Translated using Weblate (Spanish)
Currently translated at 100.0% (668 of 668 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
---
src/i18n/es.json | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/es.json b/src/i18n/es.json
index bbe7edde..6889df9a 100644
--- a/src/i18n/es.json
+++ b/src/i18n/es.json
@@ -551,7 +551,14 @@
"change_email_error": "Ha ocurrido un error al intentar modificar tu correo electrónico.",
"change_email": "Modificar el correo electrónico",
"bot": "Esta cuenta es un bot",
- "allow_following_move": "Permitir el seguimiento automático, cuando la cuenta que sigues se traslada a otra instancia"
+ "allow_following_move": "Permitir el seguimiento automático, cuando la cuenta que sigues se traslada a otra instancia",
+ "virtual_scrolling": "Optimizar la representación de la linea temporal",
+ "import_mutes_from_a_csv_file": "Importar silenciados desde un archivo csv",
+ "mutes_imported": "¡Silenciados importados! Procesarlos llevará un tiempo.",
+ "mute_import_error": "Error al importar los silenciados",
+ "mute_import": "Importar silenciados",
+ "mute_export_button": "Exportar los silenciados a un archivo csv",
+ "mute_export": "Exportar silenciados"
},
"time": {
"day": "{0} día",
--
cgit v1.2.3-70-g09d2
From 09da102a4c0f051f2afe7dda81923c28900e8e72 Mon Sep 17 00:00:00 2001
From: feld
Date: Tue, 6 Oct 2020 16:18:30 +0000
Subject: Apply 1 suggestion(s) to 1 file(s)
---
src/components/follow_requests/follow_requests.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/components/follow_requests/follow_requests.vue b/src/components/follow_requests/follow_requests.vue
index 4b9101e2..41f19db8 100644
--- a/src/components/follow_requests/follow_requests.vue
+++ b/src/components/follow_requests/follow_requests.vue
@@ -1,6 +1,6 @@
-
+
{{ $t('nav.friend_requests') }}
--
cgit v1.2.3-70-g09d2
From e5bd1c20b0c5e16546884e32d6886a265555dbb6 Mon Sep 17 00:00:00 2001
From: Dym Sohin
Date: Sun, 11 Oct 2020 02:03:45 +0200
Subject: fix/leftover-emoji-checkboxes-in-settings
---
src/App.scss | 2 +-
src/components/moderation_tools/moderation_tools.vue | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/App.scss b/src/App.scss
index 88e5df86..e1e1bdd0 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -279,7 +279,7 @@ input, textarea, .select, .input {
+ label::before {
flex-shrink: 0;
display: inline-block;
- content: '✔';
+ content: '✓';
transition: color 200ms;
width: 1.1em;
height: 1.1em;
diff --git a/src/components/moderation_tools/moderation_tools.vue b/src/components/moderation_tools/moderation_tools.vue
index b2d5acc5..60fa6ceb 100644
--- a/src/components/moderation_tools/moderation_tools.vue
+++ b/src/components/moderation_tools/moderation_tools.vue
@@ -178,7 +178,7 @@
box-shadow: var(--inputShadow);
&.menu-checkbox-checked::after {
- content: '✔';
+ content: '✓';
}
}
--
cgit v1.2.3-70-g09d2
From def04380da53763379b0dd1eec1073b9796d07a0 Mon Sep 17 00:00:00 2001
From: Ben Is
Date: Fri, 16 Oct 2020 19:02:14 +0000
Subject: Translated using Weblate (Italian)
Currently translated at 100.0% (669 of 669 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
---
src/i18n/it.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/it.json b/src/i18n/it.json
index 4d096004..ce508630 100644
--- a/src/i18n/it.json
+++ b/src/i18n/it.json
@@ -702,7 +702,8 @@
"reply_to": "Rispondi a",
"delete_confirm": "Vuoi veramente eliminare questo messaggio?",
"unbookmark": "Rimuovi segnalibro",
- "bookmark": "Aggiungi segnalibro"
+ "bookmark": "Aggiungi segnalibro",
+ "status_deleted": "Questo messagio è stato cancellato"
},
"time": {
"years_short": "{0}a",
--
cgit v1.2.3-70-g09d2
From 85326ee9e273f94ffd8e0b33fd099c98921ff8f0 Mon Sep 17 00:00:00 2001
From: Anonymous
Date: Fri, 16 Oct 2020 19:23:54 +0000
Subject: Translated using Weblate (Russian)
Currently translated at 55.0% (368 of 669 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
---
src/i18n/ru.json | 5 +++++
1 file changed, 5 insertions(+)
(limited to 'src')
diff --git a/src/i18n/ru.json b/src/i18n/ru.json
index 3444a26d..8f421b50 100644
--- a/src/i18n/ru.json
+++ b/src/i18n/ru.json
@@ -473,5 +473,10 @@
"tool_tip": {
"accept_follow_request": "Принять запрос на чтение",
"reject_follow_request": "Отклонить запрос на чтение"
+ },
+ "image_cropper": {
+ "save_without_cropping": "Сохранить не обрезая",
+ "save": "Сохранить",
+ "crop_picture": "Обрезать картинку"
}
}
--
cgit v1.2.3-70-g09d2
From 81a59feab1e17452c0ebc17500ecfe77037caac3 Mon Sep 17 00:00:00 2001
From: Ben Is
Date: Sat, 17 Oct 2020 08:19:40 +0000
Subject: Translated using Weblate (Italian)
Currently translated at 100.0% (669 of 669 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
---
src/i18n/it.json | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
(limited to 'src')
diff --git a/src/i18n/it.json b/src/i18n/it.json
index ce508630..67e92b32 100644
--- a/src/i18n/it.json
+++ b/src/i18n/it.json
@@ -598,12 +598,12 @@
"reject": "Rifiuta",
"accept": "Accetta",
"simple_policies": "Regole specifiche alla stanza",
- "accept_desc": "Questa stanza accetta messaggi solo dalle seguenti stanze:",
- "reject_desc": "Questa stanza non accetterà messaggi dalle stanze seguenti:",
+ "accept_desc": "Questa stanza accetta messaggi solo dalle seguenti altre:",
+ "reject_desc": "Questa stanza rifiuterà i messaggi provenienti dalle seguenti:",
"quarantine": "Quarantena",
- "quarantine_desc": "Questa stanza inoltrerà solo messaggi pubblici alle seguenti stanze:",
+ "quarantine_desc": "Questa stanza inoltrerà solo messaggi pubblici alle seguenti:",
"ftl_removal": "Rimozione dalla sequenza globale",
- "ftl_removal_desc": "Questa stanza rimuove le seguenti stanze dalla sequenza globale:",
+ "ftl_removal_desc": "Questa stanza rimuove le seguenti dalla sequenza globale:",
"media_removal": "Rimozione multimedia",
"media_removal_desc": "Questa istanza rimuove gli allegati dalle seguenti stanze:",
"media_nsfw": "Allegati oscurati forzatamente",
--
cgit v1.2.3-70-g09d2
From 4835f567d44c12830bc5e8eebe864ad09f2e127b Mon Sep 17 00:00:00 2001
From: Kana
Date: Sun, 18 Oct 2020 06:20:10 +0000
Subject: Translated using Weblate (Chinese (Simplified))
Currently translated at 99.7% (667 of 669 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
---
src/i18n/zh.json | 108 +++++++++++++++++++++++++++++--------------------------
1 file changed, 58 insertions(+), 50 deletions(-)
(limited to 'src')
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index 1fb0b548..fa15991b 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -11,7 +11,7 @@
"gopher": "Gopher",
"media_proxy": "媒体代理",
"scope_options": "可见范围设置",
- "text_limit": "文字數量限制",
+ "text_limit": "文字数量限制",
"title": "功能",
"who_to_follow": "推荐关注",
"pleroma_chat_messages": "Pleroma 聊天"
@@ -24,8 +24,8 @@
"apply": "应用",
"submit": "提交",
"more": "更多",
- "generic_error": "发生一个错误",
- "optional": "可选项",
+ "generic_error": "发生了一个错误",
+ "optional": "可选",
"show_more": "展开",
"show_less": "收起",
"cancel": "取消",
@@ -95,28 +95,28 @@
},
"notifications": {
"broken_favorite": "未知的状态,正在搜索中…",
- "favorited_you": "收藏了你的状态",
+ "favorited_you": "喜欢了你的状态",
"followed_you": "关注了你",
"load_older": "加载更早的通知",
"notifications": "通知",
- "read": "阅读!",
+ "read": "已阅!",
"repeated_you": "转发了你的状态",
"no_more_notifications": "没有更多的通知",
- "reacted_with": "和 {0} 互动过",
+ "reacted_with": "作出了 {0} 的反应",
"migrated_to": "迁移到",
"follow_request": "想要关注你"
},
"polls": {
- "add_poll": "增加问卷调查",
+ "add_poll": "增加投票",
"add_option": "增加选项",
"option": "选项",
"votes": "投票",
"vote": "投票",
- "type": "问卷类型",
- "single_choice": "单选项",
- "multiple_choices": "多选项",
- "expiry": "问卷的时间",
- "expires_in": "投票于 {0} 内结束",
+ "type": "投票类型",
+ "single_choice": "单选",
+ "multiple_choices": "多选",
+ "expiry": "投票期限",
+ "expires_in": "投票于 {0} 后结束",
"expired": "投票 {0} 前已结束",
"not_enough_options": "投票的选项太少"
},
@@ -189,7 +189,7 @@
"settings": {
"app_name": "App 名称",
"security": "安全",
- "enter_current_password_to_confirm": "输入你当前密码来确认你的身份",
+ "enter_current_password_to_confirm": "输入您当前的密码来确认您的身份",
"mfa": {
"otp": "OTP",
"setup_otp": "设置 OTP",
@@ -197,18 +197,18 @@
"confirm_and_enable": "确认并启用 OTP",
"title": "双因素验证",
"generate_new_recovery_codes": "生成新的恢复码",
- "warning_of_generate_new_codes": "当你生成新的恢复码时,你的旧恢复码就失效了。",
+ "warning_of_generate_new_codes": "当您生成新的恢复码时,您旧的恢复码将会失效。",
"recovery_codes": "恢复码。",
"waiting_a_recovery_codes": "正在接收备份码…",
- "recovery_codes_warning": "抄写这些号码,或者保存在安全的地方。这些号码不会再次显示。如果你无法访问你的 2FA app,也丢失了你的恢复码,你的账号就再也无法登录了。",
+ "recovery_codes_warning": "抄写这些号码,或者将其保存在安全的地方。这些号码不会再次显示。如果您无法访问您的 2FA app,也丢失了您的恢复码,您就再也无法登录您的账号了。",
"authentication_methods": "身份验证方法",
"scan": {
"title": "扫一下",
- "desc": "使用你的双因素验证 app,扫描这个二维码,或者输入这些文字密钥:",
+ "desc": "使用您的双因素验证 app,扫描这个二维码,或者输入这些文字密钥:",
"secret_code": "密钥"
},
"verify": {
- "desc": "要启用双因素验证,请把你的双因素验证 app 里的数字输入:"
+ "desc": "要启用双因素验证,请输入您的双因素验证 app 里的数字:"
}
},
"attachmentRadius": "附件",
@@ -218,12 +218,12 @@
"avatarRadius": "头像",
"background": "背景",
"bio": "简介",
- "block_export": "拉黑名单导出",
- "block_export_button": "导出你的拉黑名单到一个 csv 文件",
- "block_import": "拉黑名单导入",
- "block_import_error": "导入拉黑名单出错",
- "blocks_imported": "拉黑名单导入成功!需要一点时间来处理。",
- "blocks_tab": "块",
+ "block_export": "屏蔽名单导出",
+ "block_export_button": "导出你的屏蔽名单到一个 csv 文件",
+ "block_import": "屏蔽名单导入",
+ "block_import_error": "导入屏蔽名单出错",
+ "blocks_imported": "屏蔽名单导入成功!需要一点时间来处理。",
+ "blocks_tab": "屏蔽",
"btnRadius": "按钮",
"cBlue": "蓝色(回复,关注)",
"cGreen": "绿色(转发)",
@@ -243,7 +243,7 @@
"delete_account": "删除账户",
"delete_account_description": "永久删除你的帐号和所有数据。",
"delete_account_error": "删除账户时发生错误,如果一直删除不了,请联系实例管理员。",
- "delete_account_instructions": "在下面输入你的密码来确认删除账户",
+ "delete_account_instructions": "在下面输入您的密码来确认删除账户。",
"avatar_size_instruction": "推荐的头像图片最小的尺寸是 150x150 像素。",
"export_theme": "导出预置主题",
"filtering": "过滤器",
@@ -277,7 +277,7 @@
"invalid_theme_imported": "您所选择的主题文件不被 Pleroma 支持,因此主题未被修改。",
"limited_availability": "在您的浏览器中无法使用",
"links": "链接",
- "lock_account_description": "你需要手动审核关注请求",
+ "lock_account_description": "您需要手动审核关注请求",
"loop_video": "循环视频",
"loop_video_silent_only": "只循环没有声音的视频(例如:Mastodon 里的“GIF”)",
"mutes_tab": "隐藏",
@@ -292,7 +292,7 @@
"notification_visibility_mentions": "提及",
"notification_visibility_repeats": "转发",
"no_rich_text_description": "不显示富文本格式",
- "no_blocks": "没有拉黑的",
+ "no_blocks": "没有屏蔽",
"no_mutes": "没有隐藏",
"hide_follows_description": "不要显示我所关注的人",
"hide_followers_description": "不要显示关注我的人",
@@ -338,7 +338,7 @@
"text": "文本",
"theme": "主题",
"theme_help": "使用十六进制代码(#rrggbb)来设置主题颜色。",
- "theme_help_v2_1": "你也可以通过切换复选框来覆盖某些组件的颜色和透明。使用“清除所有”来清楚所有覆盖设置。",
+ "theme_help_v2_1": "您也可以通过选中复选框来覆盖某些组件的颜色和透明度。使用“清除所有”按钮来清除所有覆盖设置。",
"theme_help_v2_2": "某些条目下的图标是背景或文本对比指示器,鼠标悬停可以获取详细信息。请记住,使用透明度来显示最差的情况。",
"tooltipRadius": "提醒",
"upload_a_photo": "上传照片",
@@ -349,7 +349,7 @@
},
"notifications": "通知",
"notification_mutes": "要停止收到某个指定的用户的通知,请使用隐藏功能。",
- "notification_blocks": "拉黑一个用户会停掉所有他的通知,等同于取消关注。",
+ "notification_blocks": "屏蔽一个用户会停止接收来自该用户的所有通知,并且会取消对该用户的关注。",
"enable_web_push_notifications": "启用 web 推送通知",
"style": {
"switcher": {
@@ -364,7 +364,7 @@
"clear_opacity": "清除透明度",
"load_theme": "加载主题",
"help": {
- "upgraded_from_v2": "PleromaFE 已升级,主题会和你记忆中的不太一样。",
+ "upgraded_from_v2": "PleromaFE 已升级,主题会与您记忆中的不太一样。",
"older_version_imported": "您导入的文件来自旧版本的 FE。",
"future_version_imported": "您导入的文件来自更高版本的 FE。",
"v2_imported": "您导入的文件是旧版 FE 的。我们尽可能保持兼容性,但还是可能出现不一致的情况。",
@@ -468,7 +468,7 @@
},
"fonts": {
"_tab_label": "字体",
- "help": "给用户界面的元素选择字体。选择 “自选”的你必须输入确切的字体名称。",
+ "help": "为用户界面的元素选择字体。若选择 “自选”,您必须输入与系统显示完全一致的字体名称。",
"components": {
"interface": "界面",
"input": "输入框",
@@ -503,7 +503,7 @@
"notification_setting_filters": "过滤器",
"domain_mutes": "域名",
"changed_email": "邮箱修改成功!",
- "change_email_error": "修改你的电子邮箱时发生错误",
+ "change_email_error": "修改您的电子邮箱时发生错误。",
"change_email": "修改电子邮箱",
"allow_following_move": "正在关注的账号迁移时自动重新关注",
"notification_setting_privacy_option": "在通知推送中隐藏发送者和内容",
@@ -539,7 +539,14 @@
"fun": "趣味",
"useStreamingApiWarning": "(不推荐使用,试验性,已知会跳过一些消息)",
"chatMessageRadius": "聊天消息",
- "greentext": "Meme 箭头"
+ "greentext": "Meme 箭头",
+ "virtual_scrolling": "优化时间线渲染",
+ "import_mutes_from_a_csv_file": "从 csv 文件导入隐藏名单",
+ "mutes_imported": "隐藏名单导入成功!处理它们将需要一段时间。",
+ "mute_import_error": "导入隐藏名单出错",
+ "mute_import": "隐藏名单导入",
+ "mute_export_button": "导出你的隐藏名单到一个 csv 文件",
+ "mute_export": "隐藏名单导出"
},
"time": {
"day": "{0} 天",
@@ -609,7 +616,8 @@
"status_unavailable": "状态不可取得",
"unbookmark": "取消书签",
"bookmark": "书签",
- "thread_muted_and_words": ",含有过滤词:"
+ "thread_muted_and_words": ",含有过滤词:",
+ "status_deleted": "该状态已被删除"
},
"user_card": {
"approve": "允许",
@@ -636,9 +644,9 @@
"statuses": "状态",
"subscribe": "订阅",
"unsubscribe": "退订",
- "unblock": "取消拉黑",
- "unblock_progress": "取消拉黑中…",
- "block_progress": "拉黑中…",
+ "unblock": "取消屏蔽",
+ "unblock_progress": "正在取消屏蔽…",
+ "block_progress": "正在屏蔽…",
"unmute": "取消隐藏",
"unmute_progress": "取消隐藏中…",
"mute_progress": "隐藏中…",
@@ -659,7 +667,7 @@
"disable_any_subscription": "完全禁止关注用户",
"quarantine": "从联合实例中禁止用户帖子",
"delete_user": "删除用户",
- "delete_user_confirmation": "你确认吗?此操作无法撤销。"
+ "delete_user_confirmation": "你确定吗?此操作无法撤销。"
},
"hidden": "已隐藏",
"show_repeats": "显示转发",
@@ -674,12 +682,12 @@
},
"user_reporting": {
"title": "报告 {0}",
- "add_comment_description": "此报告会发送给你的实例管理员。你可以在下面提供更多详细信息解释报告的缘由:",
+ "add_comment_description": "此报告会发送给您的实例管理员。您可以在下面提供更多详细信息解释报告的缘由:",
"additional_comments": "其它信息",
"forward_description": "这个账号是从另外一个服务器。同时发送一个副本到那里?",
"forward_to": "转发 {0}",
"submit": "提交",
- "generic_error": "当处理你的请求时,发生了一个错误。"
+ "generic_error": "当处理您的请求时,发生了一个错误。"
},
"who_to_follow": {
"more": "更多",
@@ -720,12 +728,12 @@
"password_reset": {
"forgot_password": "忘记密码了?",
"password_reset": "重置密码",
- "instruction": "输入你的电邮地址或者用户名,我们将发送一个链接到你的邮箱,用于重置密码。",
- "placeholder": "你的电邮地址或者用户名",
- "check_email": "检查你的邮箱,会有一个链接用于重置密码。",
+ "instruction": "输入您的电邮地址或者用户名,我们将发送一个链接到您的邮箱,用于重置密码。",
+ "placeholder": "您的电邮地址或者用户名",
+ "check_email": "检查您的邮箱,会有一个链接用于重置密码。",
"return_home": "回到首页",
- "too_many_requests": "你触发了尝试的限制,请稍后再试。",
- "password_reset_disabled": "密码重置已经被禁用。请联系你的实例管理员。",
+ "too_many_requests": "您达到了尝试次数的上限,请稍后再试。",
+ "password_reset_disabled": "密码重置已被禁用。请联系您的实例管理员。",
"password_reset_required_but_mailer_is_disabled": "您必须重置密码,但是密码重置被禁用了。请联系您所在实例的管理员。",
"password_reset_required": "您必须重置密码才能登陆。"
},
@@ -736,7 +744,7 @@
},
"emoji": {
"keep_open": "选择器保持打开",
- "stickers": "贴图",
+ "stickers": "贴纸",
"unicode": "Unicode 表情符号",
"custom": "自定义表情符号",
"add_emoji": "插入表情符号",
@@ -748,22 +756,22 @@
"about": {
"mrf": {
"simple": {
- "quarantine_desc": "本实例只会把公开状态发送非下列实例:",
+ "quarantine_desc": "对于下列实例,本实例只发送公开的状态,不发送其它状态:",
"quarantine": "隔离",
"reject_desc": "本实例不会接收来自下列实例的消息:",
"reject": "拒绝",
"accept_desc": "本实例只接收来自下列实例的消息:",
- "simple_policies": "站规",
+ "simple_policies": "对于特定实例的策略",
"accept": "接受",
"media_removal": "移除媒体",
"media_nsfw_desc": "本实例将来自以下实例的媒体强制设置为敏感内容:",
"media_nsfw": "强制设置媒体为敏感内容",
"media_removal_desc": "本实例移除了来自以下实例的媒体内容:",
- "ftl_removal_desc": "该实例在从“全部已知网络”时间线上移除了:",
+ "ftl_removal_desc": "该实例在从“全部已知网络”时间线上移除了下列实例:",
"ftl_removal": "从“全部已知网络”时间线上移除"
},
"mrf_policies_desc": "MRF 策略会影响本实例的互通行为。以下策略已启用:",
- "mrf_policies": "已启动 MRF 策略",
+ "mrf_policies": "已启动的 MRF 策略",
"keyword": {
"ftl_removal": "从“全部已知网络”时间线上移除",
"keyword_policies": "关键词策略",
@@ -771,7 +779,7 @@
"replace": "替换",
"reject": "拒绝"
},
- "federation": "联邦"
+ "federation": "联邦互通"
},
"staff": "管理人员"
},
--
cgit v1.2.3-70-g09d2
From cf65ecb99d932f42d6efd3e493a374b3d48fa2c1 Mon Sep 17 00:00:00 2001
From: Marcin Mikołajczak
Date: Tue, 20 Oct 2020 15:00:22 +0000
Subject: Translated using Weblate (Polish)
Currently translated at 100.0% (669 of 669 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
---
src/i18n/pl.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/i18n/pl.json b/src/i18n/pl.json
index dfa0729d..67cf38a5 100644
--- a/src/i18n/pl.json
+++ b/src/i18n/pl.json
@@ -666,7 +666,8 @@
"hide_full_subject": "Ukryj cały temat",
"show_full_subject": "Pokaż cały temat",
"thread_muted_and_words": ", ma słowa:",
- "thread_muted": "Wątek wyciszony"
+ "thread_muted": "Wątek wyciszony",
+ "status_deleted": "Ten wpis został usunięty"
},
"user_card": {
"approve": "Przyjmij",
--
cgit v1.2.3-70-g09d2
From 38142182774ea772aacc88f26586512d6279267f Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Mon, 19 Oct 2020 19:38:49 +0300
Subject: Some initial work on replacing icons with FA5
---
package.json | 4 +
src/App.scss | 9 +-
src/components/emoji_input/emoji_input.js | 9 ++
src/components/emoji_input/emoji_input.vue | 2 +-
src/components/emoji_picker/emoji_picker.js | 16 ++-
src/components/emoji_picker/emoji_picker.scss | 2 +-
src/components/emoji_picker/emoji_picker.vue | 4 +-
src/components/extra_buttons/extra_buttons.js | 4 +
src/components/extra_buttons/extra_buttons.vue | 6 +-
src/components/favorite_button/favorite_button.js | 14 +-
src/components/favorite_button/favorite_button.vue | 33 +++--
src/components/media_upload/media_upload.js | 8 ++
src/components/media_upload/media_upload.vue | 10 +-
src/components/nav_panel/nav_panel.js | 23 ++++
src/components/nav_panel/nav_panel.vue | 148 +++++++++++----------
src/components/poll/poll_form.js | 12 ++
src/components/poll/poll_form.vue | 16 ++-
.../post_status_form/post_status_form.js | 17 +++
.../post_status_form/post_status_form.vue | 31 +++--
src/components/react_button/react_button.js | 4 +
src/components/react_button/react_button.vue | 6 +-
src/components/reply_button/reply_button.js | 4 +
src/components/reply_button/reply_button.vue | 28 +++-
src/components/retweet_button/retweet_button.js | 8 +-
src/components/retweet_button/retweet_button.vue | 48 ++++---
src/components/scope_selector/scope_selector.js | 15 +++
src/components/scope_selector/scope_selector.vue | 48 ++++---
src/components/status/status.js | 49 ++++++-
src/components/status/status.scss | 26 +---
src/components/status/status.vue | 70 +++++-----
src/components/timeline_menu/timeline_menu.js | 18 +++
src/components/timeline_menu/timeline_menu.vue | 32 ++---
src/main.js | 4 +
yarn.lock | 31 +++++
34 files changed, 521 insertions(+), 238 deletions(-)
(limited to 'src')
diff --git a/package.json b/package.json
index 75d9ee56..6bc285c8 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,10 @@
"dependencies": {
"@babel/runtime": "^7.7.6",
"@chenfengyuan/vue-qrcode": "^1.0.0",
+ "@fortawesome/fontawesome-svg-core": "^1.2.32",
+ "@fortawesome/free-regular-svg-icons": "^5.15.1",
+ "@fortawesome/free-solid-svg-icons": "^5.15.1",
+ "@fortawesome/vue-fontawesome": "^2.0.0",
"body-scroll-lock": "^2.6.4",
"chromatism": "^3.0.0",
"cropperjs": "^1.4.3",
diff --git a/src/App.scss b/src/App.scss
index e1e1bdd0..d34698e2 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -318,7 +318,7 @@ option {
}
}
-i[class*=icon-] {
+i[class*=icon-], .svg-inline--fa {
color: $fallback--icon;
color: var(--icon, $fallback--icon);
}
@@ -808,7 +808,12 @@ nav {
}
.button-icon {
- font-size: 1.2em;
+ &i,
+ &.svg-inline--fa.fa-lg {
+ display: inline-block;
+ padding: 0 0.3em;
+ font-size: 1.1em;
+ }
}
@keyframes shakeError {
diff --git a/src/components/emoji_input/emoji_input.js b/src/components/emoji_input/emoji_input.js
index f0123447..87303d08 100644
--- a/src/components/emoji_input/emoji_input.js
+++ b/src/components/emoji_input/emoji_input.js
@@ -3,6 +3,15 @@ import EmojiPicker from '../emoji_picker/emoji_picker.vue'
import { take } from 'lodash'
import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faSmileBeam
+} from '@fortawesome/free-regular-svg-icons'
+
+library.add(
+ faSmileBeam
+)
+
/**
* EmojiInput - augmented inputs for emoji and autocomplete support in inputs
* without having to give up the comfort of and elements
diff --git a/src/components/emoji_input/emoji_input.vue b/src/components/emoji_input/emoji_input.vue
index b9a74572..224e72cf 100644
--- a/src/components/emoji_input/emoji_input.vue
+++ b/src/components/emoji_input/emoji_input.vue
@@ -11,7 +11,7 @@
class="emoji-picker-icon"
@click.prevent="togglePicker"
>
-
+
-
+
-
+
diff --git a/src/components/extra_buttons/extra_buttons.js b/src/components/extra_buttons/extra_buttons.js
index 5e0c36bb..6892dabc 100644
--- a/src/components/extra_buttons/extra_buttons.js
+++ b/src/components/extra_buttons/extra_buttons.js
@@ -1,4 +1,8 @@
import Popover from '../popover/popover.vue'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import { faEllipsisH } from '@fortawesome/free-solid-svg-icons'
+
+library.add(faEllipsisH)
const ExtraButtons = {
props: [ 'status' ],
diff --git a/src/components/extra_buttons/extra_buttons.vue b/src/components/extra_buttons/extra_buttons.vue
index 7a4e8642..0af264a5 100644
--- a/src/components/extra_buttons/extra_buttons.vue
+++ b/src/components/extra_buttons/extra_buttons.vue
@@ -73,9 +73,11 @@
-
diff --git a/src/components/favorite_button/favorite_button.js b/src/components/favorite_button/favorite_button.js
index 5014d84f..2a2ee84a 100644
--- a/src/components/favorite_button/favorite_button.js
+++ b/src/components/favorite_button/favorite_button.js
@@ -1,4 +1,14 @@
import { mapGetters } from 'vuex'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import { faStar } from '@fortawesome/free-solid-svg-icons'
+import {
+ faStar as faStarRegular
+} from '@fortawesome/free-regular-svg-icons'
+
+library.add(
+ faStar,
+ faStarRegular
+)
const FavoriteButton = {
props: ['status', 'loggedIn'],
@@ -23,9 +33,7 @@ const FavoriteButton = {
computed: {
classes () {
return {
- 'icon-star-empty': !this.status.favorited,
- 'icon-star': this.status.favorited,
- 'animate-spin': this.animated
+ '-favorited': this.status.favorited
}
},
...mapGetters(['mergedConfig'])
diff --git a/src/components/favorite_button/favorite_button.vue b/src/components/favorite_button/favorite_button.vue
index fbc90f84..6c7bfdab 100644
--- a/src/components/favorite_button/favorite_button.vue
+++ b/src/components/favorite_button/favorite_button.vue
@@ -1,18 +1,23 @@
-
{{ status.fave_num }}
-
{{ status.fave_num }}
@@ -23,18 +28,20 @@
diff --git a/src/components/media_upload/media_upload.js b/src/components/media_upload/media_upload.js
index 7b8a76cc..669d8190 100644
--- a/src/components/media_upload/media_upload.js
+++ b/src/components/media_upload/media_upload.js
@@ -2,6 +2,14 @@
import statusPosterService from '../../services/status_poster/status_poster.service.js'
import fileSizeFormatService from '../../services/file_size_format/file_size_format.js'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import { faUpload, faCircleNotch } from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faUpload,
+ faCircleNotch
+)
+
const mediaUpload = {
data () {
return {
diff --git a/src/components/media_upload/media_upload.vue b/src/components/media_upload/media_upload.vue
index c8865d77..38e00702 100644
--- a/src/components/media_upload/media_upload.vue
+++ b/src/components/media_upload/media_upload.vue
@@ -7,13 +7,15 @@
class="label"
:title="$t('tool_tip.media_upload')"
>
-
-
-
+
-
@@ -7,12 +7,14 @@
:to="{ name: timelinesRoute }"
:class="onTimelineRoute && 'router-link-active'"
>
- {{ $t("nav.timelines") }}
+
+ {{ $t("nav.timelines") }}
-
- {{ $t("nav.interactions") }}
+
+ {{ $t("nav.interactions") }}
-
@@ -23,12 +25,14 @@
>
{{ unreadChatCount }}
-
{{ $t("nav.chats") }}
+
+ {{ $t("nav.chats") }}
- {{ $t("nav.friend_requests") }}
+
+ {{ $t("nav.friend_requests") }}
- {{ $t("nav.about") }}
+ {{ $t("nav.about") }}
@@ -52,84 +56,88 @@
diff --git a/src/components/poll/poll_form.js b/src/components/poll/poll_form.js
index df93f038..1f8df3f9 100644
--- a/src/components/poll/poll_form.js
+++ b/src/components/poll/poll_form.js
@@ -1,5 +1,17 @@
import * as DateUtils from 'src/services/date_utils/date_utils.js'
import { uniq } from 'lodash'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes,
+ faChevronDown,
+ faPlus
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faTimes,
+ faChevronDown,
+ faPlus
+)
export default {
name: 'PollForm',
diff --git a/src/components/poll/poll_form.vue b/src/components/poll/poll_form.vue
index d53f3837..3a8a2f42 100644
--- a/src/components/poll/poll_form.vue
+++ b/src/components/poll/poll_form.vue
@@ -24,8 +24,8 @@
v-if="options.length > 2"
class="icon-container"
>
-
@@ -35,7 +35,8 @@
class="add-option faint"
@click="addOption"
>
-
+
+
{{ $t("polls.add_option") }}
@@ -55,7 +56,7 @@
-
+
-
+
@@ -103,6 +104,7 @@
.add-option {
align-self: flex-start;
padding-top: 0.25em;
+ padding-left: 0.1em;
cursor: pointer;
}
@@ -124,8 +126,8 @@
.icon-container {
// Hack: Move the icon over the input box
- width: 2em;
- margin-left: -2em;
+ width: 1.5em;
+ margin-left: -1.5em;
z-index: 1;
}
diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index ad149506..1267225d 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -12,6 +12,23 @@ import suggestor from '../emoji_input/suggestor.js'
import { mapGetters, mapState } from 'vuex'
import Checkbox from '../checkbox/checkbox.vue'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faChevronDown,
+ faSmileBeam,
+ faPollH,
+ faUpload,
+ faBan
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faChevronDown,
+ faSmileBeam,
+ faPollH,
+ faUpload,
+ faBan
+)
+
const buildMentionsString = ({ user, attentions = [] }, currentUser) => {
let allAttentions = [...attentions]
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index d67d9ae9..9a5be689 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -12,10 +12,11 @@
v-show="showDropIcon !== 'hide'"
:style="{ animation: showDropIcon === 'show' ? 'fade-in 0.25s' : 'fade-out 0.5s' }"
class="drop-indicator"
- :class="[uploadFileLimitReached ? 'icon-block' : 'icon-upload']"
@dragleave="fileDragStop"
@drop.stop="fileDrop"
- />
+ >
+
+
-
+
-
+ >
+
+
-
+
-
diff --git a/src/components/reply_button/reply_button.js b/src/components/reply_button/reply_button.js
index 22957650..c7bd2a2b 100644
--- a/src/components/reply_button/reply_button.js
+++ b/src/components/reply_button/reply_button.js
@@ -1,3 +1,7 @@
+import { library } from '@fortawesome/fontawesome-svg-core'
+import { faReply } from '@fortawesome/free-solid-svg-icons'
+
+library.add(faReply)
const ReplyButton = {
name: 'ReplyButton',
diff --git a/src/components/reply_button/reply_button.vue b/src/components/reply_button/reply_button.vue
index b2904b5c..ae7b0e26 100644
--- a/src/components/reply_button/reply_button.vue
+++ b/src/components/reply_button/reply_button.vue
@@ -1,15 +1,19 @@
-
-
@@ -19,3 +23,19 @@
+
+
diff --git a/src/components/retweet_button/retweet_button.js b/src/components/retweet_button/retweet_button.js
index 5a41f22d..5ee4179a 100644
--- a/src/components/retweet_button/retweet_button.js
+++ b/src/components/retweet_button/retweet_button.js
@@ -1,3 +1,7 @@
+import { library } from '@fortawesome/fontawesome-svg-core'
+import { faRetweet } from '@fortawesome/free-solid-svg-icons'
+
+library.add(faRetweet)
const RetweetButton = {
props: ['status', 'loggedIn', 'visibility'],
@@ -22,9 +26,7 @@ const RetweetButton = {
computed: {
classes () {
return {
- 'retweeted': this.status.repeated,
- 'retweeted-empty': !this.status.repeated,
- 'animate-spin': this.animated
+ '-repeated': this.status.repeated
}
},
mergedConfig () {
diff --git a/src/components/retweet_button/retweet_button.vue b/src/components/retweet_button/retweet_button.vue
index 074f7747..3e15f30b 100644
--- a/src/components/retweet_button/retweet_button.vue
+++ b/src/components/retweet_button/retweet_button.vue
@@ -1,26 +1,33 @@
-
+
{{ status.repeat_num }}
-
-
{{ status.repeat_num }}
@@ -31,16 +38,21 @@
diff --git a/src/components/scope_selector/scope_selector.js b/src/components/scope_selector/scope_selector.js
index e9ccdefc..34efdc00 100644
--- a/src/components/scope_selector/scope_selector.js
+++ b/src/components/scope_selector/scope_selector.js
@@ -1,3 +1,18 @@
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faEnvelope,
+ faLock,
+ faLockOpen,
+ faGlobeEurope
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faEnvelope,
+ faGlobeEurope,
+ faLock,
+ faLockOpen
+)
+
const ScopeSelector = {
props: [
'showAll',
diff --git a/src/components/scope_selector/scope_selector.vue b/src/components/scope_selector/scope_selector.vue
index 291236f2..5b9abd64 100644
--- a/src/components/scope_selector/scope_selector.vue
+++ b/src/components/scope_selector/scope_selector.vue
@@ -1,36 +1,44 @@
-
+
-
+
+
+
-
+
+
+
-
+
+
+
+ >
+
+
@@ -39,12 +47,16 @@
diff --git a/src/components/font_control/font_control.js b/src/components/font_control/font_control.js
index 8e2b0e45..6274780b 100644
--- a/src/components/font_control/font_control.js
+++ b/src/components/font_control/font_control.js
@@ -1,4 +1,12 @@
import { set } from 'vue'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faChevronDown
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faChevronDown
+)
export default {
props: [
diff --git a/src/components/font_control/font_control.vue b/src/components/font_control/font_control.vue
index 61f0384b..40aed190 100644
--- a/src/components/font_control/font_control.vue
+++ b/src/components/font_control/font_control.vue
@@ -41,7 +41,7 @@
{{ option === 'custom' ? $t('settings.style.fonts.custom') : option }}
-
+
-
+
@@ -28,6 +28,14 @@
import languagesObject from '../../i18n/messages'
import ISO6391 from 'iso-639-1'
import _ from 'lodash'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faChevronDown
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faChevronDown
+)
export default {
computed: {
diff --git a/src/components/settings_modal/tabs/filtering_tab.js b/src/components/settings_modal/tabs/filtering_tab.js
index 3b2df556..5f38a5ae 100644
--- a/src/components/settings_modal/tabs/filtering_tab.js
+++ b/src/components/settings_modal/tabs/filtering_tab.js
@@ -2,6 +2,14 @@ import { filter, trim } from 'lodash'
import Checkbox from 'src/components/checkbox/checkbox.vue'
import SharedComputedObject from '../helpers/shared_computed_object.js'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faChevronDown
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faChevronDown
+)
const FilteringTab = {
data () {
diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue
index eea41514..786f3618 100644
--- a/src/components/settings_modal/tabs/filtering_tab.vue
+++ b/src/components/settings_modal/tabs/filtering_tab.vue
@@ -53,7 +53,7 @@
-
+
diff --git a/src/components/settings_modal/tabs/general_tab.js b/src/components/settings_modal/tabs/general_tab.js
index 0eb37e44..a39d7071 100644
--- a/src/components/settings_modal/tabs/general_tab.js
+++ b/src/components/settings_modal/tabs/general_tab.js
@@ -2,6 +2,14 @@ import Checkbox from 'src/components/checkbox/checkbox.vue'
import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue'
import SharedComputedObject from '../helpers/shared_computed_object.js'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faChevronDown
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faChevronDown
+)
const GeneralTab = {
data () {
diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue
index 13482de7..9fc1470e 100644
--- a/src/components/settings_modal/tabs/general_tab.vue
+++ b/src/components/settings_modal/tabs/general_tab.vue
@@ -103,7 +103,7 @@
{{ subjectLineBehaviorDefaultValue == 'noop' ? $t('settings.instance_default_simple') : '' }}
-
+
@@ -127,7 +127,7 @@
{{ postContentTypeDefaultValue === postFormat ? $t('settings.instance_default_simple') : '' }}
-
+
diff --git a/src/components/settings_modal/tabs/theme_tab/theme_tab.js b/src/components/settings_modal/tabs/theme_tab/theme_tab.js
index e3c5e80a..6cf75fe7 100644
--- a/src/components/settings_modal/tabs/theme_tab/theme_tab.js
+++ b/src/components/settings_modal/tabs/theme_tab/theme_tab.js
@@ -35,6 +35,14 @@ import ExportImport from 'src/components/export_import/export_import.vue'
import Checkbox from 'src/components/checkbox/checkbox.vue'
import Preview from './preview.vue'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faChevronDown
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faChevronDown
+)
// List of color values used in v1
const v1OnlyNames = [
diff --git a/src/components/settings_modal/tabs/theme_tab/theme_tab.vue b/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
index 5328c350..fb8b16ae 100644
--- a/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
+++ b/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
@@ -80,7 +80,7 @@
{{ style[0] || style.name }}
-
+
@@ -907,7 +907,7 @@
{{ $t('settings.style.shadows.components.' + shadow) }}
-
+
diff --git a/src/components/shadow_control/shadow_control.js b/src/components/shadow_control/shadow_control.js
index f9e7b985..800c39d5 100644
--- a/src/components/shadow_control/shadow_control.js
+++ b/src/components/shadow_control/shadow_control.js
@@ -2,6 +2,20 @@ import ColorInput from '../color_input/color_input.vue'
import OpacityInput from '../opacity_input/opacity_input.vue'
import { getCssShadow } from '../../services/style_setter/style_setter.js'
import { hex2rgb } from '../../services/color_convert/color_convert.js'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes,
+ faChevronDown,
+ faChevronUp,
+ faPlus
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faChevronDown,
+ faChevronUp,
+ faTimes,
+ faPlus
+)
const toModel = (object = {}) => ({
x: 0,
diff --git a/src/components/shadow_control/shadow_control.vue b/src/components/shadow_control/shadow_control.vue
index 815a9e59..1f63f3f2 100644
--- a/src/components/shadow_control/shadow_control.vue
+++ b/src/components/shadow_control/shadow_control.vue
@@ -78,35 +78,35 @@
{{ $t('settings.style.shadows.shadow_id', { value: index }) }}
-
+
Date: Tue, 20 Oct 2020 21:18:23 +0300
Subject: cancel -> times
---
src/components/chat_message/chat_message.js | 8 ++++++++
src/components/chat_message/chat_message.vue | 2 +-
src/components/chat_panel/chat_panel.js | 8 ++++++--
src/components/chat_panel/chat_panel.vue | 2 +-
src/components/global_notice_list/global_notice_list.js | 8 ++++++++
src/components/global_notice_list/global_notice_list.vue | 2 +-
src/components/image_cropper/image_cropper.js | 8 ++++++++
src/components/image_cropper/image_cropper.vue | 4 ++--
src/components/login_form/login_form.js | 8 ++++++++
src/components/login_form/login_form.vue | 2 +-
src/components/mfa_form/recovery_form.js | 8 ++++++++
src/components/mfa_form/recovery_form.vue | 2 +-
src/components/mfa_form/totp_form.js | 9 +++++++++
src/components/mfa_form/totp_form.vue | 2 +-
src/components/mobile_nav/mobile_nav.js | 8 ++++++++
src/components/mobile_nav/mobile_nav.vue | 2 +-
src/components/password_reset/password_reset.js | 8 ++++++++
src/components/password_reset/password_reset.vue | 2 +-
src/components/post_status_form/post_status_form.js | 6 ++++--
src/components/post_status_form/post_status_form.vue | 10 +++++-----
src/components/search_bar/search_bar.js | 9 +++++++++
src/components/search_bar/search_bar.vue | 4 ++--
src/components/settings_modal/tabs/profile_tab.js | 8 ++++++++
src/components/settings_modal/tabs/profile_tab.vue | 12 ++++++------
src/components/settings_modal/tabs/theme_tab/preview.vue | 13 ++++++++++++-
25 files changed, 127 insertions(+), 28 deletions(-)
(limited to 'src')
diff --git a/src/components/chat_message/chat_message.js b/src/components/chat_message/chat_message.js
index be4a7c89..4ad993e3 100644
--- a/src/components/chat_message/chat_message.js
+++ b/src/components/chat_message/chat_message.js
@@ -7,6 +7,14 @@ import LinkPreview from '../link-preview/link-preview.vue'
import StatusContent from '../status_content/status_content.vue'
import ChatMessageDate from '../chat_message_date/chat_message_date.vue'
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faTimes
+)
const ChatMessage = {
name: 'ChatMessage',
diff --git a/src/components/chat_message/chat_message.vue b/src/components/chat_message/chat_message.vue
index e923d694..7973e5ef 100644
--- a/src/components/chat_message/chat_message.vue
+++ b/src/components/chat_message/chat_message.vue
@@ -56,7 +56,7 @@
class="dropdown-item dropdown-item-icon"
@click="deleteMessage"
>
- {{ $t("chats.delete") }}
+ {{ $t("chats.delete") }}
diff --git a/src/components/chat_panel/chat_panel.js b/src/components/chat_panel/chat_panel.js
index 3dfec6df..c3887098 100644
--- a/src/components/chat_panel/chat_panel.js
+++ b/src/components/chat_panel/chat_panel.js
@@ -1,9 +1,13 @@
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
import { library } from '@fortawesome/fontawesome-svg-core'
-import { faBullhorn } from '@fortawesome/free-solid-svg-icons'
+import {
+ faBullhorn,
+ faTimes
+} from '@fortawesome/free-solid-svg-icons'
library.add(
- faBullhorn
+ faBullhorn,
+ faTimes
)
const chatPanel = {
diff --git a/src/components/chat_panel/chat_panel.vue b/src/components/chat_panel/chat_panel.vue
index b64535b0..fc06f542 100644
--- a/src/components/chat_panel/chat_panel.vue
+++ b/src/components/chat_panel/chat_panel.vue
@@ -13,7 +13,7 @@
{{ $t('shoutbox.title') }}
diff --git a/src/components/global_notice_list/global_notice_list.js b/src/components/global_notice_list/global_notice_list.js
index 3af29c23..e93fba75 100644
--- a/src/components/global_notice_list/global_notice_list.js
+++ b/src/components/global_notice_list/global_notice_list.js
@@ -1,3 +1,11 @@
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faTimes
+)
const GlobalNoticeList = {
computed: {
diff --git a/src/components/global_notice_list/global_notice_list.vue b/src/components/global_notice_list/global_notice_list.vue
index 0e4285cc..2965cd0d 100644
--- a/src/components/global_notice_list/global_notice_list.vue
+++ b/src/components/global_notice_list/global_notice_list.vue
@@ -10,7 +10,7 @@
{{ $t(notice.messageKey, notice.messageArgs) }}
diff --git a/src/components/image_cropper/image_cropper.js b/src/components/image_cropper/image_cropper.js
index 01361e25..9027b6eb 100644
--- a/src/components/image_cropper/image_cropper.js
+++ b/src/components/image_cropper/image_cropper.js
@@ -1,5 +1,13 @@
import Cropper from 'cropperjs'
import 'cropperjs/dist/cropper.css'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faTimes
+)
const ImageCropper = {
props: {
diff --git a/src/components/image_cropper/image_cropper.vue b/src/components/image_cropper/image_cropper.vue
index 4e1b5927..389b06b9 100644
--- a/src/components/image_cropper/image_cropper.vue
+++ b/src/components/image_cropper/image_cropper.vue
@@ -41,8 +41,8 @@
class="alert error"
>
{{ submitErrorMsg }}
-
diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js
index 0d8f1da6..638bd812 100644
--- a/src/components/login_form/login_form.js
+++ b/src/components/login_form/login_form.js
@@ -1,5 +1,13 @@
import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'
import oauthApi from '../../services/new_api/oauth.js'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faTimes
+)
const LoginForm = {
data: () => ({
diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue
index b4fdcefb..34f49576 100644
--- a/src/components/login_form/login_form.vue
+++ b/src/components/login_form/login_form.vue
@@ -77,7 +77,7 @@
{{ error }}
diff --git a/src/components/mfa_form/recovery_form.js b/src/components/mfa_form/recovery_form.js
index b25c65dd..01a62a50 100644
--- a/src/components/mfa_form/recovery_form.js
+++ b/src/components/mfa_form/recovery_form.js
@@ -1,5 +1,13 @@
import mfaApi from '../../services/new_api/mfa.js'
import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faTimes
+)
export default {
data: () => ({
diff --git a/src/components/mfa_form/recovery_form.vue b/src/components/mfa_form/recovery_form.vue
index 57294630..8e98054e 100644
--- a/src/components/mfa_form/recovery_form.vue
+++ b/src/components/mfa_form/recovery_form.vue
@@ -55,7 +55,7 @@
{{ error }}
diff --git a/src/components/mfa_form/totp_form.js b/src/components/mfa_form/totp_form.js
index b774f2d0..6ee823ed 100644
--- a/src/components/mfa_form/totp_form.js
+++ b/src/components/mfa_form/totp_form.js
@@ -1,5 +1,14 @@
import mfaApi from '../../services/new_api/mfa.js'
import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faTimes
+)
+
export default {
data: () => ({
code: null,
diff --git a/src/components/mfa_form/totp_form.vue b/src/components/mfa_form/totp_form.vue
index a344b395..bad2286f 100644
--- a/src/components/mfa_form/totp_form.vue
+++ b/src/components/mfa_form/totp_form.vue
@@ -57,7 +57,7 @@
{{ error }}
diff --git a/src/components/mobile_nav/mobile_nav.js b/src/components/mobile_nav/mobile_nav.js
index b2b5d264..bd32b266 100644
--- a/src/components/mobile_nav/mobile_nav.js
+++ b/src/components/mobile_nav/mobile_nav.js
@@ -3,6 +3,14 @@ import Notifications from '../notifications/notifications.vue'
import { unseenNotificationsFromStore } from '../../services/notification_utils/notification_utils'
import GestureService from '../../services/gesture_service/gesture_service'
import { mapGetters } from 'vuex'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faTimes
+)
const MobileNav = {
components: {
diff --git a/src/components/mobile_nav/mobile_nav.vue b/src/components/mobile_nav/mobile_nav.vue
index abd95f09..e5664dc5 100644
--- a/src/components/mobile_nav/mobile_nav.vue
+++ b/src/components/mobile_nav/mobile_nav.vue
@@ -59,7 +59,7 @@
class="mobile-nav-button"
@click.stop.prevent="closeMobileNotifications()"
>
-
+
({
diff --git a/src/components/password_reset/password_reset.vue b/src/components/password_reset/password_reset.vue
index 713c9dce..8e8225ed 100644
--- a/src/components/password_reset/password_reset.vue
+++ b/src/components/password_reset/password_reset.vue
@@ -66,7 +66,7 @@
class="button-icon dismiss"
@click.prevent="dismissError()"
>
-
+
diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index 1267225d..e763baa8 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -18,7 +18,8 @@ import {
faSmileBeam,
faPollH,
faUpload,
- faBan
+ faBan,
+ faTimes
} from '@fortawesome/free-solid-svg-icons'
library.add(
@@ -26,7 +27,8 @@ library.add(
faSmileBeam,
faPollH,
faUpload,
- faBan
+ faBan,
+ faTimes
)
const buildMentionsString = ({ user, attentions = [] }, currentUser) => {
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 9a5be689..7f7ac72f 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -40,7 +40,7 @@
class="button-icon dismiss"
@click.prevent="dismissScopeNotice()"
>
-
+
-
+
-
+
Error: {{ error }}
@@ -296,7 +296,7 @@
class="media-upload-wrapper"
>
({
searchTerm: undefined,
diff --git a/src/components/search_bar/search_bar.vue b/src/components/search_bar/search_bar.vue
index 4d5a1aec..6a08ebe5 100644
--- a/src/components/search_bar/search_bar.vue
+++ b/src/components/search_bar/search_bar.vue
@@ -29,8 +29,8 @@
>
-
diff --git a/src/components/settings_modal/tabs/profile_tab.js b/src/components/settings_modal/tabs/profile_tab.js
index bd6bef6a..37e829bb 100644
--- a/src/components/settings_modal/tabs/profile_tab.js
+++ b/src/components/settings_modal/tabs/profile_tab.js
@@ -8,6 +8,14 @@ import EmojiInput from 'src/components/emoji_input/emoji_input.vue'
import suggestor from 'src/components/emoji_input/suggestor.js'
import Autosuggest from 'src/components/autosuggest/autosuggest.vue'
import Checkbox from 'src/components/checkbox/checkbox.vue'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faTimes
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faTimes
+)
const ProfileTab = {
data () {
diff --git a/src/components/settings_modal/tabs/profile_tab.vue b/src/components/settings_modal/tabs/profile_tab.vue
index cf88c4e4..df54551c 100644
--- a/src/components/settings_modal/tabs/profile_tab.vue
+++ b/src/components/settings_modal/tabs/profile_tab.vue
@@ -129,7 +129,7 @@
>
@@ -169,7 +169,7 @@
@@ -197,7 +197,7 @@
@@ -231,7 +231,7 @@
>
Error: {{ bannerUploadError }}
@@ -243,7 +243,7 @@
@@ -277,7 +277,7 @@
>
Error: {{ backgroundUploadError }}
diff --git a/src/components/settings_modal/tabs/theme_tab/preview.vue b/src/components/settings_modal/tabs/theme_tab/preview.vue
index 9d984659..c8cb2665 100644
--- a/src/components/settings_modal/tabs/theme_tab/preview.vue
+++ b/src/components/settings_modal/tabs/theme_tab/preview.vue
@@ -53,7 +53,7 @@
/>
@@ -103,6 +103,17 @@
+
+
diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js
index 1630ba80..083f850f 100644
--- a/src/components/chat/chat.js
+++ b/src/components/chat/chat.js
@@ -9,11 +9,13 @@ import { promiseInterval } from '../../services/promise_interval/promise_interva
import { getScrollPosition, getNewTopPosition, isBottomedOut, scrollableContainerHeight } from './chat_layout_utils.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
- faChevronDown
+ faChevronDown,
+ faChevronLeft
} from '@fortawesome/free-solid-svg-icons'
library.add(
- faChevronDown
+ faChevronDown,
+ faChevronLeft
)
const BOTTOMED_OUT_OFFSET = 10
diff --git a/src/components/chat/chat.scss b/src/components/chat/chat.scss
index 012a1b1d..b7b0d377 100644
--- a/src/components/chat/chat.scss
+++ b/src/components/chat/chat.scss
@@ -58,12 +58,8 @@
.go-back-button {
cursor: pointer;
- margin-right: 1.4em;
-
- i {
- display: flex;
- align-items: center;
- }
+ margin-right: 1.7em;
+ margin-left: 0.3em;
}
.jump-to-bottom-button {
diff --git a/src/components/chat/chat.vue b/src/components/chat/chat.vue
index 0d44c920..0670f1ac 100644
--- a/src/components/chat/chat.vue
+++ b/src/components/chat/chat.vue
@@ -14,7 +14,7 @@
class="go-back-button"
@click="goBack"
>
-
+
diff --git a/src/components/chat_new/chat_new.js b/src/components/chat_new/chat_new.js
index d023efc0..71585995 100644
--- a/src/components/chat_new/chat_new.js
+++ b/src/components/chat_new/chat_new.js
@@ -1,6 +1,16 @@
import { mapState, mapGetters } from 'vuex'
import BasicUserCard from '../basic_user_card/basic_user_card.vue'
import UserAvatar from '../user_avatar/user_avatar.vue'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faSearch,
+ faChevronLeft
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faSearch,
+ faChevronLeft
+)
const chatNew = {
components: {
diff --git a/src/components/chat_new/chat_new.scss b/src/components/chat_new/chat_new.scss
index 11305444..716172b0 100644
--- a/src/components/chat_new/chat_new.scss
+++ b/src/components/chat_new/chat_new.scss
@@ -8,9 +8,7 @@
}
}
- .icon-search {
- font-size: 1.5em;
- float: right;
+ .search-icon {
margin-right: 0.3em;
}
@@ -25,5 +23,7 @@
.go-back-button {
cursor: pointer;
+ margin-right: 1.7em;
+ margin-left: 0.3em;
}
}
diff --git a/src/components/chat_new/chat_new.vue b/src/components/chat_new/chat_new.vue
index 3333dbf9..95eebe6b 100644
--- a/src/components/chat_new/chat_new.vue
+++ b/src/components/chat_new/chat_new.vue
@@ -11,12 +11,12 @@
class="go-back-button"
@click="goBack"
>
-
+
diff --git a/src/components/side_drawer/side_drawer.js b/src/components/side_drawer/side_drawer.js
index 281052e5..fe736168 100644
--- a/src/components/side_drawer/side_drawer.js
+++ b/src/components/side_drawer/side_drawer.js
@@ -2,6 +2,34 @@ import { mapState, mapGetters } from 'vuex'
import UserCard from '../user_card/user_card.vue'
import { unseenNotificationsFromStore } from '../../services/notification_utils/notification_utils'
import GestureService from '../../services/gesture_service/gesture_service'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faSignInAlt,
+ faSignOutAlt,
+ faHome,
+ faComments,
+ faBell,
+ faUserPlus,
+ faBullhorn,
+ faSearch,
+ faTachometerAlt,
+ faCog,
+ faInfoCircle
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faSignInAlt,
+ faSignOutAlt,
+ faHome,
+ faComments,
+ faBell,
+ faUserPlus,
+ faBullhorn,
+ faSearch,
+ faTachometerAlt,
+ faCog,
+ faInfoCircle
+)
const SideDrawer = {
props: [ 'logout' ],
diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue
index eda5a68c..fbdb2441 100644
--- a/src/components/side_drawer/side_drawer.vue
+++ b/src/components/side_drawer/side_drawer.vue
@@ -36,7 +36,7 @@
@click="toggleDrawer"
>
- {{ $t("login.login") }}
+ {{ $t("login.login") }}
- {{ $t("nav.timelines") }}
+ {{ $t("nav.timelines") }}
- {{ $t("nav.chats") }}
+ {{ $t("nav.chats") }}
- {{ $t("nav.interactions") }}
+ {{ $t("nav.interactions") }}
- {{ $t("nav.friend_requests") }}
+ {{ $t("nav.friend_requests") }}
- {{ $t("shoutbox.title") }}
+ {{ $t("shoutbox.title") }}
@@ -100,7 +100,7 @@
@click="toggleDrawer"
>
- {{ $t("nav.search") }}
+ {{ $t("nav.search") }}
- {{ $t("nav.who_to_follow") }}
+ {{ $t("nav.who_to_follow") }}
@@ -116,12 +116,12 @@
href="#"
@click="openSettingsModal"
>
- {{ $t("settings.settings") }}
+ {{ $t("settings.settings") }}
- {{ $t("nav.about") }}
+ {{ $t("nav.about") }}
- {{ $t("nav.administration") }}
+ {{ $t("nav.administration") }}
- {{ $t("login.logout") }}
+ {{ $t("login.logout") }}
diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue
index cfdeaa17..4f7df789 100644
--- a/src/components/user_card/user_card.vue
+++ b/src/components/user_card/user_card.vue
@@ -54,8 +54,9 @@
v-if="isOtherUser && !user.is_local"
:href="user.statusnet_profile_url"
target="_blank"
+ class="external-link-button"
>
-
+
diff --git a/src/hocs/with_subscription/with_subscription.js b/src/hocs/with_subscription/with_subscription.js
index 1775adcb..b1244276 100644
--- a/src/hocs/with_subscription/with_subscription.js
+++ b/src/hocs/with_subscription/with_subscription.js
@@ -3,6 +3,16 @@ import isEmpty from 'lodash/isEmpty'
import { getComponentProps } from '../../services/component_utils/component_utils'
import './with_subscription.scss'
+import { FontAwesomeIcon as FAIcon } from '@fortawesome/vue-fontawesome'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faCircleNotch
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faCircleNotch
+)
+
const withSubscription = ({
fetch, // function to fetch entries and return a promise
select, // function to select data from store
@@ -72,7 +82,7 @@ const withSubscription = ({
)
--
cgit v1.2.3-70-g09d2
From 3cbaa0044943341fa4af4e4eb880649fc7eecda4 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Tue, 20 Oct 2020 22:54:43 +0300
Subject: more replacements + small renames
---
src/App.scss | 6 ++--
src/App.vue | 26 ++++++++------
src/components/font_control/font_control.vue | 2 +-
.../interface_language_switcher.vue | 2 +-
src/components/poll/poll_form.vue | 4 +--
.../post_status_form/post_status_form.vue | 2 +-
src/components/search_bar/search_bar.js | 3 +-
src/components/search_bar/search_bar.vue | 41 ++++++++++++----------
.../settings_modal/settings_modal_content.js | 23 ++++++++++++
.../settings_modal/settings_modal_content.vue | 8 ++---
.../settings_modal/tabs/filtering_tab.vue | 2 +-
src/components/settings_modal/tabs/general_tab.vue | 4 +--
.../settings_modal/tabs/theme_tab/preview.vue | 28 ++++++++++-----
.../settings_modal/tabs/theme_tab/theme_tab.vue | 4 +--
src/components/shadow_control/shadow_control.vue | 2 +-
src/components/tab_switcher/tab_switcher.js | 3 +-
src/components/tab_switcher/tab_switcher.scss | 3 +-
src/components/user_card/user_card.vue | 2 +-
18 files changed, 106 insertions(+), 59 deletions(-)
(limited to 'src')
diff --git a/src/App.scss b/src/App.scss
index 126a3297..06915e16 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -188,7 +188,7 @@ input, textarea, .select, .input {
opacity: 0.5;
}
- .icon-down-open {
+ .select-down-icon {
position: absolute;
top: 0;
bottom: 0;
@@ -368,7 +368,9 @@ i[class*=icon-], .svg-inline--fa {
flex-wrap: wrap;
.nav-icon {
- margin-left: 0.4em;
+ margin-left: 0.2em;
+ width: 2em;
+ text-align: center;
}
&.right {
diff --git a/src/App.vue b/src/App.vue
index 0276c6a6..5efaf717 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -42,36 +42,42 @@
diff --git a/src/components/font_control/font_control.vue b/src/components/font_control/font_control.vue
index 40aed190..6070ab22 100644
--- a/src/components/font_control/font_control.vue
+++ b/src/components/font_control/font_control.vue
@@ -41,7 +41,7 @@
{{ option === 'custom' ? $t('settings.style.fonts.custom') : option }}
-
+
-
+
diff --git a/src/components/poll/poll_form.vue b/src/components/poll/poll_form.vue
index 3a8a2f42..8c4ada89 100644
--- a/src/components/poll/poll_form.vue
+++ b/src/components/poll/poll_form.vue
@@ -56,7 +56,7 @@
-
+
-
+
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 7f7ac72f..817b2fa0 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -199,7 +199,7 @@
{{ $t(`post_status.content_type["${postFormat}"]`) }}
-
+
({
searchTerm: undefined,
hidden: true,
- error: false,
- loading: false
+ error: false
}),
watch: {
'$route': function (route) {
diff --git a/src/components/search_bar/search_bar.vue b/src/components/search_bar/search_bar.vue
index ecc0febf..fbbbbfe0 100644
--- a/src/components/search_bar/search_bar.vue
+++ b/src/components/search_bar/search_bar.vue
@@ -1,17 +1,17 @@
@@ -60,13 +68,10 @@
max-width: calc(100% - 30px - 30px - 20px);
}
- .search-button {
- margin-left: .5em;
- margin-right: .5em;
- }
-
- .icon-cancel {
+ .cancel-icon {
cursor: pointer;
+ color: $fallback--text;
+ color: var(--btnTopBarText, $fallback--text);
}
}
diff --git a/src/components/settings_modal/settings_modal_content.js b/src/components/settings_modal/settings_modal_content.js
index ef1a5ffa..9dcf1b5a 100644
--- a/src/components/settings_modal/settings_modal_content.js
+++ b/src/components/settings_modal/settings_modal_content.js
@@ -10,6 +10,29 @@ import GeneralTab from './tabs/general_tab.vue'
import VersionTab from './tabs/version_tab.vue'
import ThemeTab from './tabs/theme_tab/theme_tab.vue'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faWrench,
+ faUser,
+ faFilter,
+ faPaintBrush,
+ faBell,
+ faDownload,
+ faEyeSlash,
+ faInfo
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faWrench,
+ faUser,
+ faFilter,
+ faPaintBrush,
+ faBell,
+ faDownload,
+ faEyeSlash,
+ faInfo
+)
+
const SettingsModalContent = {
components: {
TabSwitcher,
diff --git a/src/components/settings_modal/settings_modal_content.vue b/src/components/settings_modal/settings_modal_content.vue
index bc30a0ff..c9ed2a38 100644
--- a/src/components/settings_modal/settings_modal_content.vue
+++ b/src/components/settings_modal/settings_modal_content.vue
@@ -37,7 +37,7 @@
@@ -45,7 +45,7 @@
@@ -62,14 +62,14 @@
v-if="isLoggedIn"
:label="$t('settings.mutes_and_blocks')"
:fullHeight="true"
- icon="eye-off"
+ icon="eye-slash"
data-tab-name="mutesAndBlocks"
>
diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue
index 786f3618..ff1a129b 100644
--- a/src/components/settings_modal/tabs/filtering_tab.vue
+++ b/src/components/settings_modal/tabs/filtering_tab.vue
@@ -53,7 +53,7 @@
-
+
diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue
index 2ab6b314..99d3a0dc 100644
--- a/src/components/settings_modal/tabs/general_tab.vue
+++ b/src/components/settings_modal/tabs/general_tab.vue
@@ -103,7 +103,7 @@
{{ subjectLineBehaviorDefaultValue == 'noop' ? $t('settings.instance_default_simple') : '' }}
-
+
@@ -127,7 +127,7 @@
{{ postContentTypeDefaultValue === postFormat ? $t('settings.instance_default_simple') : '' }}
-
+
diff --git a/src/components/settings_modal/tabs/theme_tab/preview.vue b/src/components/settings_modal/tabs/theme_tab/preview.vue
index c8cb2665..65863c54 100644
--- a/src/components/settings_modal/tabs/theme_tab/preview.vue
+++ b/src/components/settings_modal/tabs/theme_tab/preview.vue
@@ -39,19 +39,23 @@
-
-
-
-
@@ -106,11 +110,17 @@
diff --git a/src/components/settings_modal/tabs/theme_tab/theme_tab.vue b/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
index fb8b16ae..9cc1c392 100644
--- a/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
+++ b/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
@@ -80,7 +80,7 @@
{{ style[0] || style.name }}
-
+
@@ -907,7 +907,7 @@
{{ $t('settings.style.shadows.components.' + shadow) }}
-
+
diff --git a/src/components/shadow_control/shadow_control.vue b/src/components/shadow_control/shadow_control.vue
index 1f63f3f2..32220ae8 100644
--- a/src/components/shadow_control/shadow_control.vue
+++ b/src/components/shadow_control/shadow_control.vue
@@ -78,7 +78,7 @@
{{ $t('settings.style.shadows.shadow_id', { value: index }) }}
-
+
--
cgit v1.2.3-70-g09d2
From a50cd7e37dce6e95f2c3d6cc63c382af71a2926e Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 21 Oct 2020 00:01:28 +0300
Subject: remaining changes...
---
src/components/attachment/attachment.js | 22 +++++++++--
src/components/attachment/attachment.vue | 14 ++++---
src/components/chat_panel/chat_panel.vue | 7 ++--
.../global_notice_list/global_notice_list.vue | 2 +-
src/components/image_cropper/image_cropper.js | 6 ++-
src/components/image_cropper/image_cropper.vue | 5 ++-
src/components/importer/importer.js | 11 ++++++
src/components/importer/importer.vue | 14 ++++---
src/components/login_form/login_form.vue | 2 +-
src/components/mfa_form/recovery_form.vue | 2 +-
src/components/mfa_form/totp_form.vue | 6 ++-
src/components/password_reset/password_reset.vue | 2 +-
src/components/poll/poll_form.vue | 9 +++++
.../post_status_form/post_status_form.js | 6 ++-
.../post_status_form/post_status_form.vue | 46 +++++++---------------
src/components/settings_modal/tabs/profile_tab.js | 6 ++-
.../settings_modal/tabs/profile_tab.scss | 6 +--
src/components/settings_modal/tabs/profile_tab.vue | 28 +++++++------
src/components/status/status.scss | 5 ---
src/components/status_content/status_content.js | 18 +++++++++
src/components/status_content/status_content.vue | 28 +++++++------
src/components/user_profile/user_profile.js | 8 ++++
src/components/user_profile/user_profile.vue | 6 ++-
23 files changed, 162 insertions(+), 97 deletions(-)
(limited to 'src')
diff --git a/src/components/attachment/attachment.js b/src/components/attachment/attachment.js
index cb31020d..e23fcb1b 100644
--- a/src/components/attachment/attachment.js
+++ b/src/components/attachment/attachment.js
@@ -3,6 +3,20 @@ import VideoAttachment from '../video_attachment/video_attachment.vue'
import nsfwImage from '../../assets/nsfw.png'
import fileTypeService from '../../services/file_type/file_type.service.js'
import { mapGetters } from 'vuex'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faFile,
+ faMusic,
+ faImage,
+ faVideo
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faFile,
+ faMusic,
+ faImage,
+ faVideo
+)
const Attachment = {
props: [
@@ -39,10 +53,10 @@ const Attachment = {
return this.attachment.description
},
placeholderIconClass () {
- if (this.type === 'image') return 'icon-picture'
- if (this.type === 'video') return 'icon-video'
- if (this.type === 'audio') return 'icon-music'
- return 'icon-doc'
+ if (this.type === 'image') return 'image'
+ if (this.type === 'video') return 'video'
+ if (this.type === 'audio') return 'music'
+ return 'file'
},
referrerpolicy () {
return this.$store.state.instance.mediaProxyAvailable ? '' : 'no-referrer'
diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue
index 19c713d5..0b7a3f9c 100644
--- a/src/components/attachment/attachment.vue
+++ b/src/components/attachment/attachment.vue
@@ -12,7 +12,7 @@
:alt="attachment.description"
:title="attachment.description"
>
-
+
{{ nsfw ? "NSFW / " : "" }}{{ placeholderName }}
@@ -36,9 +36,9 @@
:src="nsfwImage"
:class="{'small': isSmall}"
>
-
-
@@ -142,6 +142,10 @@
white-space: nowrap;
text-overflow: ellipsis;
max-width: 100%;
+
+ svg {
+ color: inherit;
+ }
}
.nsfw-placeholder {
diff --git a/src/components/chat_panel/chat_panel.vue b/src/components/chat_panel/chat_panel.vue
index fc06f542..51b99563 100644
--- a/src/components/chat_panel/chat_panel.vue
+++ b/src/components/chat_panel/chat_panel.vue
@@ -11,7 +11,7 @@
>
{{ $t('shoutbox.title') }}
-
@@ -63,7 +63,7 @@
@click.stop.prevent="togglePanel"
>
-
+
{{ $t('shoutbox.title') }}
@@ -87,7 +87,8 @@
.chat-panel {
.chat-heading {
cursor: pointer;
- .icon-comment-empty {
+
+ .icon {
color: $fallback--text;
color: var(--text, $fallback--text);
}
diff --git a/src/components/global_notice_list/global_notice_list.vue b/src/components/global_notice_list/global_notice_list.vue
index 2965cd0d..3a7139f4 100644
--- a/src/components/global_notice_list/global_notice_list.vue
+++ b/src/components/global_notice_list/global_notice_list.vue
@@ -9,7 +9,7 @@
{{ $t(notice.messageKey, notice.messageArgs) }}
-
diff --git a/src/components/image_cropper/image_cropper.js b/src/components/image_cropper/image_cropper.js
index 9027b6eb..59e4d07e 100644
--- a/src/components/image_cropper/image_cropper.js
+++ b/src/components/image_cropper/image_cropper.js
@@ -2,11 +2,13 @@ import Cropper from 'cropperjs'
import 'cropperjs/dist/cropper.css'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
- faTimes
+ faTimes,
+ faCircleNotch
} from '@fortawesome/free-solid-svg-icons'
library.add(
- faTimes
+ faTimes,
+ faCircleNotch
)
const ImageCropper = {
diff --git a/src/components/image_cropper/image_cropper.vue b/src/components/image_cropper/image_cropper.vue
index 389b06b9..e69cbd0b 100644
--- a/src/components/image_cropper/image_cropper.vue
+++ b/src/components/image_cropper/image_cropper.vue
@@ -31,9 +31,10 @@
@click="submit(false)"
v-text="saveWithoutCroppingText"
/>
-
-
@@ -142,6 +143,7 @@
.user-profile-fields {
margin: 0 0.5em;
+
img {
object-fit: contain;
vertical-align: middle;
--
cgit v1.2.3-70-g09d2
From 7495c6b698e0afe169c1138baabc29f70d4b44a2 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 21 Oct 2020 00:02:58 +0300
Subject: fix attachment remove pointer
---
src/components/post_status_form/post_status_form.vue | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'src')
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 428b8560..3cd9e7a5 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -511,7 +511,7 @@
flex-direction: column;
}
- .attachments .media-upload-wrapper{
+ .attachments .media-upload-wrapper {
padding: 0 0.5em;
.attachment {
@@ -531,6 +531,7 @@
border-radius: $fallback--attachmentRadius;
border-radius: var(--attachmentRadius, $fallback--attachmentRadius);
font-weight: bold;
+ cursor: pointer;
}
}
--
cgit v1.2.3-70-g09d2
From 6aa7445ea7f8f76adbc31d018ebb3228294aef41 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 21 Oct 2020 00:25:59 +0300
Subject: come on and slam
---
src/components/nav_panel/nav_panel.js | 4 ++--
src/components/scope_selector/scope_selector.js | 4 ++--
src/components/scope_selector/scope_selector.vue | 2 +-
src/components/status/status.js | 6 +++---
src/components/timeline_menu/timeline_menu.js | 4 ++--
src/components/timeline_menu/timeline_menu.vue | 2 +-
6 files changed, 11 insertions(+), 11 deletions(-)
(limited to 'src')
diff --git a/src/components/nav_panel/nav_panel.js b/src/components/nav_panel/nav_panel.js
index 87e54133..81d49cc2 100644
--- a/src/components/nav_panel/nav_panel.js
+++ b/src/components/nav_panel/nav_panel.js
@@ -4,7 +4,7 @@ import { mapState, mapGetters } from 'vuex'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faUsers,
- faGlobeEurope,
+ faGlobe,
faBookmark,
faEnvelope,
faHome,
@@ -15,7 +15,7 @@ import {
library.add(
faUsers,
- faGlobeEurope,
+ faGlobe,
faBookmark,
faEnvelope,
faHome,
diff --git a/src/components/scope_selector/scope_selector.js b/src/components/scope_selector/scope_selector.js
index ddb20ff2..2c9d06e0 100644
--- a/src/components/scope_selector/scope_selector.js
+++ b/src/components/scope_selector/scope_selector.js
@@ -3,12 +3,12 @@ import {
faEnvelope,
faLock,
faUnlock,
- faGlobeEurope
+ faGlobe
} from '@fortawesome/free-solid-svg-icons'
library.add(
faEnvelope,
- faGlobeEurope,
+ faGlobe,
faLock,
faUnlock
)
diff --git a/src/components/scope_selector/scope_selector.vue b/src/components/scope_selector/scope_selector.vue
index ddd89422..c098783d 100644
--- a/src/components/scope_selector/scope_selector.vue
+++ b/src/components/scope_selector/scope_selector.vue
@@ -37,7 +37,7 @@
:title="$t('post_status.scope.public')"
@click="changeVis('public')"
>
-
+
diff --git a/src/components/status/status.js b/src/components/status/status.js
index 5b93054f..46fa3b76 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -22,7 +22,7 @@ import {
faEnvelope,
faLock,
faUnlock,
- faGlobeEurope,
+ faGlobe,
faTimes,
faRetweet,
faReply,
@@ -38,7 +38,7 @@ import {
library.add(
faEnvelope,
- faGlobeEurope,
+ faGlobe,
faLock,
faUnlock,
faTimes,
@@ -270,7 +270,7 @@ const Status = {
case 'direct':
return 'envelope'
default:
- return 'globe-europe'
+ return 'globe'
}
},
showError (error) {
diff --git a/src/components/timeline_menu/timeline_menu.js b/src/components/timeline_menu/timeline_menu.js
index 991c600d..4ccd52b4 100644
--- a/src/components/timeline_menu/timeline_menu.js
+++ b/src/components/timeline_menu/timeline_menu.js
@@ -3,7 +3,7 @@ import { mapState } from 'vuex'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faUsers,
- faGlobeEurope,
+ faGlobe,
faBookmark,
faEnvelope,
faHome,
@@ -12,7 +12,7 @@ import {
library.add(
faUsers,
- faGlobeEurope,
+ faGlobe,
faBookmark,
faEnvelope,
faHome,
diff --git a/src/components/timeline_menu/timeline_menu.vue b/src/components/timeline_menu/timeline_menu.vue
index 590752d3..1e546fae 100644
--- a/src/components/timeline_menu/timeline_menu.vue
+++ b/src/components/timeline_menu/timeline_menu.vue
@@ -36,7 +36,7 @@
- {{ $t("nav.twkn") }}
+ {{ $t("nav.twkn") }}
--
cgit v1.2.3-70-g09d2
From 1ec41302f729ac9100c3ec0cede5e4f79dd626a3 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 21 Oct 2020 00:28:24 +0300
Subject: rotate the shackle of the lock for better accessibility
---
src/components/scope_selector/scope_selector.js | 4 ++--
src/components/scope_selector/scope_selector.vue | 2 +-
src/components/status/status.js | 6 +++---
3 files changed, 6 insertions(+), 6 deletions(-)
(limited to 'src')
diff --git a/src/components/scope_selector/scope_selector.js b/src/components/scope_selector/scope_selector.js
index 2c9d06e0..74bf7284 100644
--- a/src/components/scope_selector/scope_selector.js
+++ b/src/components/scope_selector/scope_selector.js
@@ -2,7 +2,7 @@ import { library } from '@fortawesome/fontawesome-svg-core'
import {
faEnvelope,
faLock,
- faUnlock,
+ faLockOpen,
faGlobe
} from '@fortawesome/free-solid-svg-icons'
@@ -10,7 +10,7 @@ library.add(
faEnvelope,
faGlobe,
faLock,
- faUnlock
+ faLockOpen
)
const ScopeSelector = {
diff --git a/src/components/scope_selector/scope_selector.vue b/src/components/scope_selector/scope_selector.vue
index c098783d..d490f8ee 100644
--- a/src/components/scope_selector/scope_selector.vue
+++ b/src/components/scope_selector/scope_selector.vue
@@ -28,7 +28,7 @@
:title="$t('post_status.scope.unlisted')"
@click="changeVis('unlisted')"
>
-
+
Date: Wed, 21 Oct 2020 00:31:16 +0300
Subject: lint
---
src/App.vue | 17 +++--
src/components/account_actions/account_actions.vue | 5 +-
src/components/attachment/attachment.vue | 6 +-
src/components/chat/chat.vue | 5 +-
src/components/chat_new/chat_new.vue | 11 ++-
src/components/chat_panel/chat_panel.vue | 5 +-
src/components/emoji_picker/emoji_picker.vue | 10 ++-
src/components/exporter/exporter.vue | 6 +-
src/components/extra_buttons/extra_buttons.js | 2 +-
src/components/extra_buttons/extra_buttons.vue | 48 ++++++++++---
src/components/font_control/font_control.vue | 5 +-
.../global_notice_list/global_notice_list.vue | 3 +-
src/components/image_cropper/image_cropper.vue | 3 +-
.../interface_language_switcher.vue | 5 +-
src/components/login_form/login_form.vue | 3 +-
src/components/media_modal/media_modal.vue | 10 ++-
src/components/mfa_form/recovery_form.vue | 3 +-
src/components/mobile_nav/mobile_nav.vue | 18 ++++-
src/components/nav_panel/nav_panel.vue | 35 +++++++--
src/components/notification/notification.vue | 33 +++++++--
src/components/notifications/notifications.vue | 6 +-
src/components/panel_loading/panel_loading.vue | 6 +-
src/components/poll/poll_form.vue | 15 +++-
.../post_status_form/post_status_form.vue | 12 ++--
src/components/retweet_button/retweet_button.vue | 18 ++---
src/components/scope_selector/scope_selector.vue | 36 +++++++---
src/components/search/search.vue | 6 +-
src/components/search_bar/search_bar.vue | 12 ++--
.../settings_modal/tabs/filtering_tab.vue | 5 +-
src/components/settings_modal/tabs/general_tab.vue | 10 ++-
src/components/settings_modal/tabs/profile_tab.vue | 12 ++--
.../settings_modal/tabs/theme_tab/preview.vue | 12 ++--
.../settings_modal/tabs/theme_tab/theme_tab.vue | 10 ++-
src/components/shadow_control/shadow_control.vue | 25 +++++--
src/components/side_drawer/side_drawer.vue | 84 ++++++++++++++++++----
src/components/status/status.vue | 44 +++++++++---
src/components/status_popover/status_popover.vue | 6 +-
src/components/timeline/timeline.vue | 6 +-
src/components/timeline_menu/timeline_menu.vue | 40 +++++++++--
src/components/user_card/user_card.vue | 33 +++++++--
.../user_list_popover/user_list_popover.vue | 6 +-
41 files changed, 497 insertions(+), 140 deletions(-)
(limited to 'src')
diff --git a/src/App.vue b/src/App.vue
index 5efaf717..c27f51bf 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -54,7 +54,8 @@
@@ -64,9 +65,10 @@
class="mobile-hidden nav-icon"
target="_blank"
>
diff --git a/src/components/account_actions/account_actions.vue b/src/components/account_actions/account_actions.vue
index 61099d4f..e3ae376e 100644
--- a/src/components/account_actions/account_actions.vue
+++ b/src/components/account_actions/account_actions.vue
@@ -63,7 +63,10 @@
slot="trigger"
class="btn btn-default ellipsis-button"
>
-
+
diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue
index 0b7a3f9c..f1fac2c8 100644
--- a/src/components/attachment/attachment.vue
+++ b/src/components/attachment/attachment.vue
@@ -38,7 +38,8 @@
>
diff --git a/src/components/chat/chat.vue b/src/components/chat/chat.vue
index 0670f1ac..5f58b9a6 100644
--- a/src/components/chat/chat.vue
+++ b/src/components/chat/chat.vue
@@ -14,7 +14,10 @@
class="go-back-button"
@click="goBack"
>
-
+
-
+
diff --git a/src/components/emoji_picker/emoji_picker.vue b/src/components/emoji_picker/emoji_picker.vue
index bd093c99..3262a3d9 100644
--- a/src/components/emoji_picker/emoji_picker.vue
+++ b/src/components/emoji_picker/emoji_picker.vue
@@ -13,7 +13,10 @@
:title="group.text"
@click.prevent="highlight(group.id)"
>
-
+
-
+
diff --git a/src/components/exporter/exporter.vue b/src/components/exporter/exporter.vue
index 156db9a3..ecd71bf1 100644
--- a/src/components/exporter/exporter.vue
+++ b/src/components/exporter/exporter.vue
@@ -1,7 +1,11 @@
-
+
{{ processingMessage }}
diff --git a/src/components/extra_buttons/extra_buttons.js b/src/components/extra_buttons/extra_buttons.js
index f325b2b4..1a8eef72 100644
--- a/src/components/extra_buttons/extra_buttons.js
+++ b/src/components/extra_buttons/extra_buttons.js
@@ -8,7 +8,7 @@ import {
faShareAlt
} from '@fortawesome/free-solid-svg-icons'
import {
- faBookmark as faBookmarkReg,
+ faBookmark as faBookmarkReg
} from '@fortawesome/free-regular-svg-icons'
library.add(
diff --git a/src/components/extra_buttons/extra_buttons.vue b/src/components/extra_buttons/extra_buttons.vue
index 1889eaed..4bf1e62a 100644
--- a/src/components/extra_buttons/extra_buttons.vue
+++ b/src/components/extra_buttons/extra_buttons.vue
@@ -15,14 +15,22 @@
class="dropdown-item dropdown-item-icon"
@click.prevent="muteConversation"
>
-
{{ $t("status.mute_conversation") }}
+
{{ $t("status.mute_conversation") }}
- {{ $t("status.unmute_conversation") }}
+ {{ $t("status.unmute_conversation") }}
- {{ $t("status.pin") }}
+ {{ $t("status.pin") }}
- {{ $t("status.unpin") }}
+ {{ $t("status.unpin") }}
- {{ $t("status.bookmark") }}
+ {{ $t("status.bookmark") }}
- {{ $t("status.unbookmark") }}
+ {{ $t("status.unbookmark") }}
- {{ $t("status.delete") }}
+ {{ $t("status.delete") }}
- {{ $t("status.copy_link") }}
+ {{ $t("status.copy_link") }}
diff --git a/src/components/font_control/font_control.vue b/src/components/font_control/font_control.vue
index 6070ab22..dd117ec0 100644
--- a/src/components/font_control/font_control.vue
+++ b/src/components/font_control/font_control.vue
@@ -41,7 +41,10 @@
{{ option === 'custom' ? $t('settings.style.fonts.custom') : option }}
-
+
diff --git a/src/components/image_cropper/image_cropper.vue b/src/components/image_cropper/image_cropper.vue
index e69cbd0b..605f7427 100644
--- a/src/components/image_cropper/image_cropper.vue
+++ b/src/components/image_cropper/image_cropper.vue
@@ -43,7 +43,8 @@
>
{{ submitErrorMsg }}
diff --git a/src/components/interface_language_switcher/interface_language_switcher.vue b/src/components/interface_language_switcher/interface_language_switcher.vue
index 76bdcdfe..d039e86b 100644
--- a/src/components/interface_language_switcher/interface_language_switcher.vue
+++ b/src/components/interface_language_switcher/interface_language_switcher.vue
@@ -19,7 +19,10 @@
{{ languageNames[i] }}
-
+
diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue
index f6b767a2..4ab5d192 100644
--- a/src/components/login_form/login_form.vue
+++ b/src/components/login_form/login_form.vue
@@ -77,7 +77,8 @@
{{ error }}
diff --git a/src/components/media_modal/media_modal.vue b/src/components/media_modal/media_modal.vue
index cbcfc6d2..ea7f7a7f 100644
--- a/src/components/media_modal/media_modal.vue
+++ b/src/components/media_modal/media_modal.vue
@@ -34,7 +34,10 @@
class="modal-view-button-arrow modal-view-button-arrow--prev"
@click.stop.prevent="goPrev"
>
-
+
-
+
diff --git a/src/components/mfa_form/recovery_form.vue b/src/components/mfa_form/recovery_form.vue
index 61dbda24..f6526d2a 100644
--- a/src/components/mfa_form/recovery_form.vue
+++ b/src/components/mfa_form/recovery_form.vue
@@ -55,7 +55,8 @@
{{ error }}
diff --git a/src/components/mobile_nav/mobile_nav.vue b/src/components/mobile_nav/mobile_nav.vue
index 4d91af77..db9b0ba0 100644
--- a/src/components/mobile_nav/mobile_nav.vue
+++ b/src/components/mobile_nav/mobile_nav.vue
@@ -15,7 +15,11 @@
class="mobile-nav-button"
@click.stop.prevent="toggleMobileSidebar()"
>
-
+
-
+
-
+
-
+
{{ $t("nav.timelines") }}
-
+
{{ $t("nav.interactions") }}
@@ -25,13 +35,23 @@
>
{{ unreadChatCount }}
-
+
{{ $t("nav.chats") }}
-
+
{{ $t("nav.friend_requests") }}
- {{ $t("nav.about") }}
+ {{ $t("nav.about") }}
diff --git a/src/components/notification/notification.vue b/src/components/notification/notification.vue
index 857727a4..b609ae04 100644
--- a/src/components/notification/notification.vue
+++ b/src/components/notification/notification.vue
@@ -18,7 +18,10 @@
href="#"
class="unmute"
@click.prevent="toggleMute"
- >
+ >
{{ notification.from_profile.name }}
-
+
{{ $t('notifications.favorited_you') }}
{{ $t('notifications.repeated_you') }}
-
+
{{ $t('notifications.followed_you') }}
-
+
{{ $t('notifications.follow_request') }}
-
+
{{ $t('notifications.migrated_to') }}
@@ -120,7 +136,10 @@
v-if="needMute"
href="#"
@click.prevent="toggleMute"
- >
+ >
diff --git a/src/components/panel_loading/panel_loading.vue b/src/components/panel_loading/panel_loading.vue
index 9bf3ab32..b15e7d38 100644
--- a/src/components/panel_loading/panel_loading.vue
+++ b/src/components/panel_loading/panel_loading.vue
@@ -1,7 +1,11 @@
-
+
{{ $t('general.loading') }}
diff --git a/src/components/poll/poll_form.vue b/src/components/poll/poll_form.vue
index f3e7a716..e598cf3b 100644
--- a/src/components/poll/poll_form.vue
+++ b/src/components/poll/poll_form.vue
@@ -36,7 +36,10 @@
class="add-option faint"
@click="addOption"
>
-
+
{{ $t("polls.add_option") }}
@@ -57,7 +60,10 @@
-
+
-
+
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 3cd9e7a5..9cf38a9a 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -15,7 +15,7 @@
@dragleave="fileDragStop"
@drop.stop="fileDrop"
>
-
+
-
+
-
+
@@ -245,7 +248,8 @@
diff --git a/src/components/settings_modal/tabs/theme_tab/preview.vue b/src/components/settings_modal/tabs/theme_tab/preview.vue
index 65863c54..20201e18 100644
--- a/src/components/settings_modal/tabs/theme_tab/preview.vue
+++ b/src/components/settings_modal/tabs/theme_tab/preview.vue
@@ -42,22 +42,26 @@
diff --git a/src/components/settings_modal/tabs/theme_tab/theme_tab.vue b/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
index 9cc1c392..280e1955 100644
--- a/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
+++ b/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
@@ -80,7 +80,10 @@
{{ style[0] || style.name }}
-
+
@@ -907,7 +910,10 @@
{{ $t('settings.style.shadows.components.' + shadow) }}
-
+
diff --git a/src/components/shadow_control/shadow_control.vue b/src/components/shadow_control/shadow_control.vue
index 32220ae8..78f0e544 100644
--- a/src/components/shadow_control/shadow_control.vue
+++ b/src/components/shadow_control/shadow_control.vue
@@ -78,35 +78,50 @@
{{ $t('settings.style.shadows.shadow_id', { value: index }) }}
-
+
-
+
-
+
-
+
-
+
- {{ $t("login.login") }}
+ {{ $t("login.login") }}
- {{ $t("nav.timelines") }}
+ {{ $t("nav.timelines") }}
- {{ $t("nav.chats") }}
+ {{ $t("nav.chats") }}
- {{ $t("nav.interactions") }}
+ {{ $t("nav.interactions") }}
- {{ $t("nav.friend_requests") }}
+ {{ $t("nav.friend_requests") }}
- {{ $t("shoutbox.title") }}
+ {{ $t("shoutbox.title") }}
@@ -100,7 +130,12 @@
@click="toggleDrawer"
>
- {{ $t("nav.search") }}
+ {{ $t("nav.search") }}
- {{ $t("nav.who_to_follow") }}
+ {{ $t("nav.who_to_follow") }}
@@ -116,12 +156,22 @@
href="#"
@click="openSettingsModal"
>
- {{ $t("settings.settings") }}
+ {{ $t("settings.settings") }}
- {{ $t("nav.about") }}
+ {{ $t("nav.about") }}
- {{ $t("nav.administration") }}
+ {{ $t("nav.administration") }}
- {{ $t("login.logout") }}
+ {{ $t("login.logout") }}
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index b9b967cc..c94862d4 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -13,7 +13,7 @@
+ >
@@ -51,8 +51,12 @@
href="#"
class="unmute button-icon"
@click.prevent="toggleMute"
- >
-
+ >
+
@@ -61,7 +65,10 @@
v-if="showPinned"
class="pin"
>
-
+
{{ $t('status.pinned') }}
@@ -230,7 +253,7 @@
icon="reply"
size="lg"
flip="horizontal"
- />
+ />
@@ -358,7 +381,6 @@
@onSuccess="clearError"
/>
-
-
+
diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue
index ab17cbbc..aaf0349c 100644
--- a/src/components/timeline/timeline.vue
+++ b/src/components/timeline/timeline.vue
@@ -92,7 +92,11 @@
v-else
class="new-status-notification text-center panel-footer"
>
-
+
diff --git a/src/components/timeline_menu/timeline_menu.vue b/src/components/timeline_menu/timeline_menu.vue
index 1e546fae..8099ddd5 100644
--- a/src/components/timeline_menu/timeline_menu.vue
+++ b/src/components/timeline_menu/timeline_menu.vue
@@ -16,27 +16,52 @@
-
- {{ $t("nav.timeline") }}
+ {{ $t("nav.timeline") }}
-
- {{ $t("nav.bookmarks") }}
+ {{ $t("nav.bookmarks") }}
-
- {{ $t("nav.dms") }}
+ {{ $t("nav.dms") }}
-
- {{ $t("nav.public_tl") }}
+ {{ $t("nav.public_tl") }}
-
- {{ $t("nav.twkn") }}
+ {{ $t("nav.twkn") }}
@@ -46,7 +71,10 @@
class="title timeline-menu-title"
>
{{ timelineName() }}
-
+
diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue
index 6c35c781..c5f10b75 100644
--- a/src/components/user_card/user_card.vue
+++ b/src/components/user_card/user_card.vue
@@ -21,7 +21,11 @@
:user="user"
/>
-
+
-
+
-
+
Striped bg
-
+
@@ -162,8 +176,15 @@
:title="$t('user_card.unsubscribe')"
>
-
-
+
+
diff --git a/src/components/user_list_popover/user_list_popover.vue b/src/components/user_list_popover/user_list_popover.vue
index dd6977d2..95673733 100644
--- a/src/components/user_list_popover/user_list_popover.vue
+++ b/src/components/user_list_popover/user_list_popover.vue
@@ -31,7 +31,11 @@
-
+
--
cgit v1.2.3-70-g09d2
From 1b50d700aa496fdf9e7e774cd7d6b8835b91d13f Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 21 Oct 2020 00:34:42 +0300
Subject: bye bye fontello
---
build/webpack.base.conf.js | 10 -
package.json | 1 -
src/components/media_upload/media_upload.vue | 10 -
static/fontello.json | 416 ---------------------------
4 files changed, 437 deletions(-)
delete mode 100644 static/fontello.json
(limited to 'src')
diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js
index ef40333c..d987eff1 100644
--- a/build/webpack.base.conf.js
+++ b/build/webpack.base.conf.js
@@ -3,7 +3,6 @@ var config = require('../config')
var utils = require('./utils')
var projectRoot = path.resolve(__dirname, '../')
var ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin')
-var FontelloPlugin = require("fontello-webpack-plugin")
var env = process.env.NODE_ENV
// check env & config/index.js to decide weither to enable CSS Sourcemaps for the
@@ -94,15 +93,6 @@ module.exports = {
new ServiceWorkerWebpackPlugin({
entry: path.join(__dirname, '..', 'src/sw.js'),
filename: 'sw-pleroma.js'
- }),
- new FontelloPlugin({
- config: require('../static/fontello.json'),
- host: 'https://fontello.com',
- name: 'fontello',
- output: {
- css: 'static/[name].' + now + '.css', // [hash] is not supported. Use the current timestamp instead for versioning.
- font: 'static/font/[name].' + now + '.[ext]'
- }
})
]
}
diff --git a/package.json b/package.json
index 6bc285c8..14738c3e 100644
--- a/package.json
+++ b/package.json
@@ -72,7 +72,6 @@
"eventsource-polyfill": "^0.9.6",
"express": "^4.13.3",
"file-loader": "^3.0.1",
- "fontello-webpack-plugin": "https://github.com/w3geo/fontello-webpack-plugin.git#6149eac8f2672ab6da089e8802fbfcac98487186",
"function-bind": "^1.0.2",
"html-webpack-plugin": "^3.0.0",
"http-proxy-middleware": "^0.17.2",
diff --git a/src/components/media_upload/media_upload.vue b/src/components/media_upload/media_upload.vue
index 15b2b8e4..88251a26 100644
--- a/src/components/media_upload/media_upload.vue
+++ b/src/components/media_upload/media_upload.vue
@@ -43,15 +43,5 @@
.new-icon {
cursor: pointer;
}
-
- .progress-icon {
- display: inline-block;
- line-height: 0;
- &::before {
- /* Overriding fontello to achieve the perfect speeeen */
- margin: 0;
- line-height: 0;
- }
- }
}
diff --git a/static/fontello.json b/static/fontello.json
deleted file mode 100644
index b0136fd9..00000000
--- a/static/fontello.json
+++ /dev/null
@@ -1,416 +0,0 @@
-{
- "name": "",
- "css_prefix_text": "icon-",
- "css_use_suffix": false,
- "hinting": true,
- "units_per_em": 1000,
- "ascent": 857,
- "glyphs": [
- {
- "uid": "9bd60140934a1eb9236fd7a8ab1ff6ba",
- "css": "spin4",
- "code": 59444,
- "src": "fontelico"
- },
- {
- "uid": "5211af474d3a9848f67f945e2ccaf143",
- "css": "cancel",
- "code": 59392,
- "src": "fontawesome"
- },
- {
- "uid": "eeec3208c90b7b48e804919d0d2d4a41",
- "css": "upload",
- "code": 59393,
- "src": "fontawesome"
- },
- {
- "uid": "2a6740fc2f9d0edea54205963f662594",
- "css": "spin3",
- "code": 59442,
- "src": "fontelico"
- },
- {
- "uid": "c6be5a58ee4e63a5ec399c2b0d15cf2c",
- "css": "reply",
- "code": 61714,
- "src": "fontawesome"
- },
- {
- "uid": "474656633f79ea2f1dad59ff63f6bf07",
- "css": "star",
- "code": 59394,
- "src": "fontawesome"
- },
- {
- "uid": "d17030afaecc1e1c22349b99f3c4992a",
- "css": "star-empty",
- "code": 59395,
- "src": "fontawesome"
- },
- {
- "uid": "09feb4465d9bd1364f4e301c9ddbaa92",
- "css": "retweet",
- "code": 59396,
- "src": "fontawesome"
- },
- {
- "uid": "7fd683b2c518ceb9e5fa6757f2276faa",
- "css": "eye-off",
- "code": 59397,
- "src": "fontawesome"
- },
- {
- "uid": "73ffeb70554099177620847206c12457",
- "css": "binoculars",
- "code": 61925,
- "src": "fontawesome"
- },
- {
- "uid": "e99461abfef3923546da8d745372c995",
- "css": "cog",
- "code": 59399,
- "src": "fontawesome"
- },
- {
- "uid": "1bafeeb1808a5fe24484c7890096901a",
- "css": "user-plus",
- "code": 62004,
- "src": "fontawesome"
- },
- {
- "uid": "559647a6f430b3aeadbecd67194451dd",
- "css": "menu",
- "code": 61641,
- "src": "fontawesome"
- },
- {
- "uid": "0d20938846444af8deb1920dc85a29fb",
- "css": "logout",
- "code": 59400,
- "src": "fontawesome"
- },
- {
- "uid": "ccddff8e8670dcd130e3cb55fdfc2fd0",
- "css": "down-open",
- "code": 59401,
- "src": "fontawesome"
- },
- {
- "uid": "44b9e75612c5fad5505edd70d071651f",
- "css": "attach",
- "code": 59402,
- "src": "entypo"
- },
- {
- "uid": "e15f0d620a7897e2035c18c80142f6d9",
- "css": "link-ext",
- "code": 61582,
- "src": "fontawesome"
- },
- {
- "uid": "e35de5ea31cd56970498e33efbcb8e36",
- "css": "link-ext-alt",
- "code": 61583,
- "src": "fontawesome"
- },
- {
- "uid": "381da2c2f7fd51f8de877c044d7f439d",
- "css": "picture",
- "code": 59403,
- "src": "fontawesome"
- },
- {
- "uid": "872d9516df93eb6b776cc4d94bd97dac",
- "css": "video",
- "code": 59404,
- "src": "fontawesome"
- },
- {
- "uid": "399ef63b1e23ab1b761dfbb5591fa4da",
- "css": "right-open",
- "code": 59405,
- "src": "fontawesome"
- },
- {
- "uid": "d870630ff8f81e6de3958ecaeac532f2",
- "css": "left-open",
- "code": 59406,
- "src": "fontawesome"
- },
- {
- "uid": "fe6697b391355dec12f3d86d6d490397",
- "css": "up-open",
- "code": 59407,
- "src": "fontawesome"
- },
- {
- "uid": "9c1376672bb4f1ed616fdd78a23667e9",
- "css": "comment-empty",
- "code": 61669,
- "src": "fontawesome"
- },
- {
- "uid": "ccc2329632396dc096bb638d4b46fb98",
- "css": "mail-alt",
- "code": 61664,
- "src": "fontawesome"
- },
- {
- "uid": "c1f1975c885aa9f3dad7810c53b82074",
- "css": "lock",
- "code": 59409,
- "src": "fontawesome"
- },
- {
- "uid": "05376be04a27d5a46e855a233d6e8508",
- "css": "lock-open-alt",
- "code": 61758,
- "src": "fontawesome"
- },
- {
- "uid": "197375a3cea8cb90b02d06e4ddf1433d",
- "css": "globe",
- "code": 59410,
- "src": "fontawesome"
- },
- {
- "uid": "b3a9e2dab4d19ea3b2f628242c926bfe",
- "css": "brush",
- "code": 59411,
- "src": "iconic"
- },
- {
- "uid": "9dd9e835aebe1060ba7190ad2b2ed951",
- "css": "search",
- "code": 59398,
- "src": "fontawesome"
- },
- {
- "uid": "ca90da02d2c6a3183f2458e4dc416285",
- "css": "adjust",
- "code": 59414,
- "src": "fontawesome"
- },
- {
- "uid": "5e2ab018e3044337bcef5f7e94098ea1",
- "css": "thumbs-up-alt",
- "code": 61796,
- "src": "fontawesome"
- },
- {
- "uid": "c76b7947c957c9b78b11741173c8349b",
- "css": "attention",
- "code": 59412,
- "src": "fontawesome"
- },
- {
- "uid": "1a5cfa186647e8c929c2b17b9fc4dac1",
- "css": "plus-squared",
- "code": 61694,
- "src": "fontawesome"
- },
- {
- "uid": "44e04715aecbca7f266a17d5a7863c68",
- "css": "plus",
- "code": 59413,
- "src": "fontawesome"
- },
- {
- "uid": "41087bc74d4b20b55059c60a33bf4008",
- "css": "edit",
- "code": 59415,
- "src": "fontawesome"
- },
- {
- "uid": "5717236f6134afe2d2a278a5c9b3927a",
- "css": "play-circled",
- "code": 61764,
- "src": "fontawesome"
- },
- {
- "uid": "d35a1d35efeb784d1dc9ac18b9b6c2b6",
- "css": "pencil",
- "code": 59416,
- "src": "fontawesome"
- },
- {
- "uid": "266d5d9adf15a61800477a5acf9a4462",
- "css": "chart-bar",
- "code": 59419,
- "src": "fontawesome"
- },
- {
- "uid": "d862a10e1448589215be19702f98f2c1",
- "css": "smile",
- "code": 61720,
- "src": "fontawesome"
- },
- {
- "uid": "671f29fa10dda08074a4c6a341bb4f39",
- "css": "bell-alt",
- "code": 61683,
- "src": "fontawesome"
- },
- {
- "uid": "5bb103cd29de77e0e06a52638527b575",
- "css": "wrench",
- "code": 59418,
- "src": "fontawesome"
- },
- {
- "uid": "5b0772e9484a1a11646793a82edd622a",
- "css": "pin",
- "code": 59417,
- "src": "fontawesome"
- },
- {
- "uid": "22411a88489225a018f68db737de3c77",
- "css": "ellipsis",
- "code": 61761,
- "src": "custom_icons",
- "selected": true,
- "svg": {
- "path": "M214 411V518Q214 540 199 556T161 571H54Q31 571 16 556T0 518V411Q0 388 16 373T54 357H161Q183 357 199 373T214 411ZM500 411V518Q500 540 484 556T446 571H339Q317 571 301 556T286 518V411Q286 388 301 373T339 357H446Q469 357 484 373T500 411ZM786 411V518Q786 540 770 556T732 571H625Q603 571 587 556T571 518V411Q571 388 587 373T625 357H732Q755 357 770 373T786 411Z",
- "width": 785.7
- },
- "search": [
- "ellipsis"
- ]
- },
- {
- "uid": "0bef873af785ead27781fdf98b3ae740",
- "css": "bell-ringing-o",
- "code": 59408,
- "src": "custom_icons",
- "selected": true,
- "svg": {
- "path": "M497.8 0C468.3 0 444.4 23.9 444.4 53.3 444.4 61.1 446.1 68.3 448.9 75 301.7 96.7 213.3 213.3 213.3 320 213.3 588.3 117.8 712.8 35.6 782.2 35.6 821.1 67.8 853.3 106.7 853.3H355.6C355.6 931.7 419.4 995.6 497.8 995.6S640 931.7 640 853.3H888.9C927.8 853.3 960 821.1 960 782.2 877.8 712.8 782.2 588.3 782.2 320 782.2 213.3 693.9 96.7 546.7 75 549.4 68.3 551.1 61.1 551.1 53.3 551.1 23.9 527.2 0 497.8 0ZM189.4 44.8C108.4 118.6 70.5 215.1 71.1 320.2L142.2 319.8C141.7 231.2 170.4 158.3 237.3 97.4L189.4 44.8ZM806.2 44.8L758.3 97.4C825.2 158.3 853.9 231.2 853.3 319.8L924.4 320.2C925.1 215.1 887.2 118.6 806.2 44.8ZM408.9 844.4C413.9 844.4 417.8 848.3 417.8 853.3 417.8 897.2 453.9 933.3 497.8 933.3 502.8 933.3 506.7 937.2 506.7 942.2S502.8 951.1 497.8 951.1C443.9 951.1 400 907.2 400 853.3 400 848.3 403.9 844.4 408.9 844.4Z",
- "width": 1000
- },
- "search": [
- "bell-ringing-o"
- ]
- },
- {
- "uid": "0b2b66e526028a6972d51a6f10281b4b",
- "css": "zoom-in",
- "code": 59420,
- "src": "fontawesome"
- },
- {
- "uid": "0bda4bc779d4c32623dec2e43bd67ee8",
- "css": "gauge",
- "code": 61668,
- "src": "fontawesome"
- },
- {
- "uid": "31972e4e9d080eaa796290349ae6c1fd",
- "css": "users",
- "code": 59421,
- "src": "fontawesome"
- },
- {
- "uid": "e82cedfa1d5f15b00c5a81c9bd731ea2",
- "css": "info-circled",
- "code": 59423,
- "src": "fontawesome"
- },
- {
- "uid": "w3nzesrlbezu6f30q7ytyq919p6gdlb6",
- "css": "home-2",
- "code": 59425,
- "src": "typicons"
- },
- {
- "uid": "dcedf50ab1ede3283d7a6c70e2fe32f3",
- "css": "chat",
- "code": 59422,
- "src": "fontawesome"
- },
- {
- "uid": "3a00327e61b997b58518bd43ed83c3df",
- "css": "login",
- "code": 59424,
- "src": "fontawesome"
- },
- {
- "uid": "f3ebd6751c15a280af5cc5f4a764187d",
- "css": "arrow-curved",
- "code": 59426,
- "src": "iconic"
- },
- {
- "uid": "0ddd3e8201ccc7d41f7b7c9d27eca6c1",
- "css": "link",
- "code": 59427,
- "src": "fontawesome"
- },
- {
- "uid": "4aad6bb50b02c18508aae9cbe14e784e",
- "css": "share",
- "code": 61920,
- "src": "fontawesome"
- },
- {
- "uid": "8b80d36d4ef43889db10bc1f0dc9a862",
- "css": "user",
- "code": 59428,
- "src": "fontawesome"
- },
- {
- "uid": "12f4ece88e46abd864e40b35e05b11cd",
- "css": "ok",
- "code": 59431,
- "src": "fontawesome"
- },
- {
- "uid": "4109c474ff99cad28fd5a2c38af2ec6f",
- "css": "filter",
- "code": 61616,
- "src": "fontawesome"
- },
- {
- "uid": "9a76bc135eac17d2c8b8ad4a5774fc87",
- "css": "download",
- "code": 59429,
- "src": "fontawesome"
- },
- {
- "uid": "f04a5d24e9e659145b966739c4fde82a",
- "css": "bookmark",
- "code": 59430,
- "src": "fontawesome"
- },
- {
- "uid": "2f5ef6f6b7aaebc56458ab4e865beff5",
- "css": "bookmark-empty",
- "code": 61591,
- "src": "fontawesome"
- },
- {
- "uid": "9ea0a737ccc45d6c510dcbae56058849",
- "css": "music",
- "code": 59432,
- "src": "fontawesome"
- },
- {
- "uid": "1b5a5d7b7e3c71437f5a26befdd045ed",
- "css": "doc",
- "code": 59433,
- "src": "fontawesome"
- },
- {
- "uid": "98d9c83c1ee7c2c25af784b518c522c5",
- "css": "block",
- "code": 59434,
- "src": "fontawesome"
- },
- {
- "uid": "3e674995cacc2b09692c096ea7eb6165",
- "css": "megaphone",
- "code": 59435,
- "src": "fontawesome"
- }
- ]
-}
\ No newline at end of file
--
cgit v1.2.3-70-g09d2
From 048e67f5fc8b480496c0846661bec0129f4909e0 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 21 Oct 2020 02:07:05 +0300
Subject: make subjectline input use size=1 for compatibility with CJK fonts
---
src/components/poll/poll_form.vue | 1 +
src/components/post_status_form/post_status_form.vue | 1 +
2 files changed, 2 insertions(+)
(limited to 'src')
diff --git a/src/components/poll/poll_form.vue b/src/components/poll/poll_form.vue
index d53f3837..a5bf0618 100644
--- a/src/components/poll/poll_form.vue
+++ b/src/components/poll/poll_form.vue
@@ -12,6 +12,7 @@
--
cgit v1.2.3-70-g09d2
From 22f3801be76e5dc6db592efca45a604db0e55255 Mon Sep 17 00:00:00 2001
From: shironeko
Date: Thu, 22 Oct 2020 08:55:19 +0000
Subject: Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (668 of 669 strings)
Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
---
src/i18n/zh.json | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
(limited to 'src')
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index fa15991b..60204aa1 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -259,7 +259,7 @@
"hide_attachments_in_tl": "在时间线上隐藏附件",
"hide_muted_posts": "不显示被隐藏的用户的帖子",
"max_thumbnails": "最多再每个帖子所能显示的缩略图数量",
- "hide_isp": "隐藏指定实例的面板H",
+ "hide_isp": "隐藏实例独有的面板",
"preload_images": "预载图片",
"use_one_click_nsfw": "点击一次以打开工作场所不适宜的附件",
"hide_post_stats": "隐藏推文相关的统计数据(例如:收藏的次数)",
@@ -431,7 +431,8 @@
"alert_neutral": "中性",
"alert_warning": "警告",
"tabs": "标签页",
- "underlay": "底衬"
+ "underlay": "底衬",
+ "toggled": "勾选的"
},
"radii": {
"_tab_label": "圆角"
@@ -516,7 +517,7 @@
"notification_setting_hide_notification_contents": "隐藏推送通知中的发送者与内容信息",
"notification_setting_block_from_strangers": "屏蔽来自你没有关注的用户的通知",
"type_domains_to_mute": "搜索需要隐藏的域名",
- "useStreamingApi": "实时接收发布以及通知",
+ "useStreamingApi": "实时接收帖子和通知",
"user_mutes": "用户",
"reset_background_confirm": "您确定要重置个人资料背景图吗?",
"reset_banner_confirm": "您确定要重置横幅图片吗?",
@@ -537,7 +538,7 @@
"mutes_and_blocks": "隐藏与屏蔽",
"bot": "这是一个机器人账号",
"fun": "趣味",
- "useStreamingApiWarning": "(不推荐使用,试验性,已知会跳过一些消息)",
+ "useStreamingApiWarning": "(不推荐使用,试验性,已知会跳过一些帖子)",
"chatMessageRadius": "聊天消息",
"greentext": "Meme 箭头",
"virtual_scrolling": "优化时间线渲染",
@@ -756,7 +757,7 @@
"about": {
"mrf": {
"simple": {
- "quarantine_desc": "对于下列实例,本实例只发送公开的状态,不发送其它状态:",
+ "quarantine_desc": "本实例向以下实例仅发送公开的帖子:",
"quarantine": "隔离",
"reject_desc": "本实例不会接收来自下列实例的消息:",
"reject": "拒绝",
@@ -764,9 +765,9 @@
"simple_policies": "对于特定实例的策略",
"accept": "接受",
"media_removal": "移除媒体",
- "media_nsfw_desc": "本实例将来自以下实例的媒体强制设置为敏感内容:",
+ "media_nsfw_desc": "本实例将来自以下实例的媒体内容强制设置为敏感内容:",
"media_nsfw": "强制设置媒体为敏感内容",
- "media_removal_desc": "本实例移除了来自以下实例的媒体内容:",
+ "media_removal_desc": "本实例移除来自以下实例的媒体内容:",
"ftl_removal_desc": "该实例在从“全部已知网络”时间线上移除了下列实例:",
"ftl_removal": "从“全部已知网络”时间线上移除"
},
--
cgit v1.2.3-70-g09d2
From 2c441c79225e1f4412eee4300820f57c4ef5f4fc Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Tue, 27 Oct 2020 10:03:04 +0200
Subject: fix back button size, fix missing chat notifications being marked as
read too eagerly, fix promiseinterval erroring when not getting a promise
---
src/components/chat/chat.js | 14 ++++++++++----
src/components/chat/chat.scss | 11 ++++++-----
src/services/chat_utils/chat_utils.js | 2 +-
src/services/promise_interval/promise_interval.js | 9 ++++++++-
4 files changed, 25 insertions(+), 11 deletions(-)
(limited to 'src')
diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js
index 34e723d0..681ba08f 100644
--- a/src/components/chat/chat.js
+++ b/src/components/chat/chat.js
@@ -11,6 +11,7 @@ import { getScrollPosition, getNewTopPosition, isBottomedOut, scrollableContaine
const BOTTOMED_OUT_OFFSET = 10
const JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET = 150
const SAFE_RESIZE_TIME_OFFSET = 100
+const MARK_AS_READ_DELAY = 1500
const Chat = {
components: {
@@ -94,7 +95,7 @@ const Chat = {
const bottomedOutBeforeUpdate = this.bottomedOut(BOTTOMED_OUT_OFFSET)
this.$nextTick(() => {
if (bottomedOutBeforeUpdate) {
- this.scrollDown({ forceRead: !document.hidden })
+ this.scrollDown()
}
})
},
@@ -200,7 +201,7 @@ const Chat = {
this.$nextTick(() => {
scrollable.scrollTo({ top: scrollable.scrollHeight, left: 0, behavior })
})
- if (forceRead || this.newMessageCount > 0) {
+ if (forceRead) {
this.readChat()
}
},
@@ -225,12 +226,17 @@ const Chat = {
} else if (this.bottomedOut(JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET)) {
this.jumpToBottomButtonVisible = false
if (this.newMessageCount > 0) {
- this.readChat()
+ // Use a delay before marking as read to prevent situation where new messages
+ // arrive just as you're leaving the view and messages that you didn't actually
+ // get to see get marked as read.
+ window.setTimeout(() => {
+ if (this.$el) this.readChat()
+ }, MARK_AS_READ_DELAY)
}
} else {
this.jumpToBottomButtonVisible = true
}
- }, 100),
+ }, 200),
handleScrollUp (positionBeforeLoading) {
const positionAfterLoading = getScrollPosition(this.$refs.scrollable)
this.$refs.scrollable.scrollTo({
diff --git a/src/components/chat/chat.scss b/src/components/chat/chat.scss
index 012a1b1d..f91de618 100644
--- a/src/components/chat/chat.scss
+++ b/src/components/chat/chat.scss
@@ -25,7 +25,7 @@
min-height: 100%;
margin: 0 0 0 0;
border-radius: 10px 10px 0 0;
- border-radius: var(--panelRadius, 10px) var(--panelRadius, 10px) 0 0 ;
+ border-radius: var(--panelRadius, 10px) var(--panelRadius, 10px) 0 0;
&::after {
border-radius: 0;
@@ -58,11 +58,12 @@
.go-back-button {
cursor: pointer;
- margin-right: 1.4em;
+ padding: 0.6em;
+ margin: -0.6em 0.8em -0.6em -0.6em;
+ height: 100%;
i {
- display: flex;
- align-items: center;
+ vertical-align: middle;
}
}
@@ -78,7 +79,7 @@
display: flex;
justify-content: center;
align-items: center;
- box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3), 0px 2px 4px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3), 0 2px 4px rgba(0, 0, 0, 0.3);
z-index: 10;
transition: 0.35s all;
transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
diff --git a/src/services/chat_utils/chat_utils.js b/src/services/chat_utils/chat_utils.js
index 583438f7..86fe1af9 100644
--- a/src/services/chat_utils/chat_utils.js
+++ b/src/services/chat_utils/chat_utils.js
@@ -3,7 +3,7 @@ import { showDesktopNotification } from '../desktop_notification_utils/desktop_n
export const maybeShowChatNotification = (store, chat) => {
if (!chat.lastMessage) return
if (store.rootState.chats.currentChatId === chat.id && !document.hidden) return
- if (store.rootState.users.currentUser.id === chat.lastMessage.account.id) return
+ if (store.rootState.users.currentUser.id === chat.lastMessage.account_id) return
const opts = {
tag: chat.lastMessage.id,
diff --git a/src/services/promise_interval/promise_interval.js b/src/services/promise_interval/promise_interval.js
index cf17970d..0c0a66a0 100644
--- a/src/services/promise_interval/promise_interval.js
+++ b/src/services/promise_interval/promise_interval.js
@@ -10,7 +10,14 @@ export const promiseInterval = (promiseCall, interval) => {
let timeout = null
const func = () => {
- promiseCall().finally(() => {
+ const promise = promiseCall()
+ // something unexpected happened and promiseCall did not
+ // return a promise, abort the loop.
+ if (!(promise && promise.finally)) {
+ console.warn('promiseInterval: promise call did not return a promise, stopping interval.')
+ return
+ }
+ promise.finally(() => {
if (stopped) return
timeout = window.setTimeout(func, interval)
})
--
cgit v1.2.3-70-g09d2
From 1403f20f9feda44206b35f5b303652facd5e2011 Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Tue, 27 Oct 2020 12:59:50 +0200
Subject: block clicks for a second when timeline moves
---
src/components/timeline/timeline.js | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/components/timeline/timeline.js b/src/components/timeline/timeline.js
index 17680542..25fa3e41 100644
--- a/src/components/timeline/timeline.js
+++ b/src/components/timeline/timeline.js
@@ -2,7 +2,7 @@ import Status from '../status/status.vue'
import timelineFetcher from '../../services/timeline_fetcher/timeline_fetcher.service.js'
import Conversation from '../conversation/conversation.vue'
import TimelineMenu from '../timeline_menu/timeline_menu.vue'
-import { throttle, keyBy } from 'lodash'
+import { debounce, throttle, keyBy } from 'lodash'
export const getExcludedStatusIdsByPinning = (statuses, pinnedStatusIds) => {
const ids = []
@@ -34,7 +34,8 @@ const Timeline = {
paused: false,
unfocused: false,
bottomedOut: false,
- virtualScrollIndex: 0
+ virtualScrollIndex: 0,
+ blockingClicks: false
}
},
components: {
@@ -124,6 +125,21 @@ const Timeline = {
this.$store.commit('setLoading', { timeline: this.timelineName, value: false })
},
methods: {
+ blockClickEvent (e) {
+ e.stopPropagation()
+ e.preventDefault()
+ },
+ stopBlockingClicks: debounce(function () {
+ this.blockingClicks = false
+ this.$el && this.$el.removeEventListener('click', this.blockClickEvent, true)
+ }, 1000),
+ blockClicksTemporarily () {
+ if (!this.blockingClicks) {
+ this.$el.addEventListener('click', this.blockClickEvent, true)
+ this.blockingClicks = true
+ }
+ this.stopBlockingClicks()
+ },
handleShortKey (e) {
// Ignore when input fields are focused
if (['textarea', 'input'].includes(e.target.tagName.toLowerCase())) return
@@ -135,6 +151,7 @@ const Timeline = {
this.$store.commit('queueFlush', { timeline: this.timelineName, id: 0 })
this.fetchOlderStatuses()
} else {
+ this.blockClicksTemporarily()
this.$store.commit('showNewStatuses', { timeline: this.timelineName })
this.paused = false
}
--
cgit v1.2.3-70-g09d2
From 7007659e05842dc06eb2c13eddaba6ab657df5ea Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Wed, 28 Oct 2020 08:53:23 +0200
Subject: change input blocking to use css
---
src/components/timeline/timeline.js | 10 +++-------
src/components/timeline/timeline.vue | 9 +++++++--
2 files changed, 10 insertions(+), 9 deletions(-)
(limited to 'src')
diff --git a/src/components/timeline/timeline.js b/src/components/timeline/timeline.js
index 25fa3e41..ea290fde 100644
--- a/src/components/timeline/timeline.js
+++ b/src/components/timeline/timeline.js
@@ -65,8 +65,10 @@ const Timeline = {
}
},
classes () {
+ let rootClasses = !this.embedded ? ['panel', 'panel-default'] : []
+ if (this.blockingClicks) rootClasses = rootClasses.concat(['-blocked'])
return {
- root: ['timeline'].concat(!this.embedded ? ['panel', 'panel-default'] : []),
+ root: rootClasses,
header: ['timeline-heading'].concat(!this.embedded ? ['panel-heading'] : []),
body: ['timeline-body'].concat(!this.embedded ? ['panel-body'] : []),
footer: ['timeline-footer'].concat(!this.embedded ? ['panel-footer'] : [])
@@ -125,17 +127,11 @@ const Timeline = {
this.$store.commit('setLoading', { timeline: this.timelineName, value: false })
},
methods: {
- blockClickEvent (e) {
- e.stopPropagation()
- e.preventDefault()
- },
stopBlockingClicks: debounce(function () {
this.blockingClicks = false
- this.$el && this.$el.removeEventListener('click', this.blockClickEvent, true)
}, 1000),
blockClicksTemporarily () {
if (!this.blockingClicks) {
- this.$el.addEventListener('click', this.blockClickEvent, true)
this.blockingClicks = true
}
this.stopBlockingClicks()
diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue
index c1e2f44b..234ca2d2 100644
--- a/src/components/timeline/timeline.vue
+++ b/src/components/timeline/timeline.vue
@@ -1,5 +1,5 @@
-
+
@import '../../_variables.scss';
-.timeline {
+.Timeline {
.loadmore-text {
opacity: 1;
}
+
+ &.-blocked {
+ pointer-events: none;
+ cursor: wait;
+ }
}
.timeline-heading {
--
cgit v1.2.3-70-g09d2
From 6d7ecd7d800450ab07cb2895d4af96ab13849ded Mon Sep 17 00:00:00 2001
From: Shpuld Shpludson
Date: Wed, 28 Oct 2020 10:02:51 +0000
Subject: Apply 1 suggestion(s) to 1 file(s)
---
src/components/timeline/timeline.vue | 1 -
1 file changed, 1 deletion(-)
(limited to 'src')
diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue
index 234ca2d2..e4404daf 100644
--- a/src/components/timeline/timeline.vue
+++ b/src/components/timeline/timeline.vue
@@ -110,7 +110,6 @@
&.-blocked {
pointer-events: none;
- cursor: wait;
}
}
--
cgit v1.2.3-70-g09d2
From b6cf2bcefd5ddd20c11ee4b0d0f94e29e8f59c40 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 28 Oct 2020 21:31:16 +0200
Subject: improved the semantics for our icon scale, fixed preview, fixed
navbar desktop
---
src/App.scss | 12 ++++---
src/App.vue | 9 ++---
src/components/chat_new/chat_new.vue | 3 +-
src/components/extra_buttons/extra_buttons.vue | 2 +-
src/components/favorite_button/favorite_button.vue | 6 ++--
.../global_notice_list/global_notice_list.vue | 2 +-
src/components/image_cropper/image_cropper.vue | 2 +-
src/components/login_form/login_form.vue | 2 +-
src/components/mfa_form/recovery_form.vue | 2 +-
src/components/mfa_form/totp_form.vue | 2 +-
src/components/mobile_nav/mobile_nav.vue | 9 ++---
src/components/nav_panel/nav_panel.vue | 41 ++++++++--------------
src/components/notification/notification.vue | 8 ++---
src/components/password_reset/password_reset.vue | 2 +-
.../post_status_form/post_status_form.vue | 16 ++++-----
src/components/react_button/react_button.vue | 3 +-
src/components/reply_button/reply_button.vue | 6 ++--
src/components/retweet_button/retweet_button.vue | 9 ++---
src/components/scope_selector/scope_selector.vue | 12 +++----
src/components/search_bar/search_bar.vue | 6 ++--
src/components/settings_modal/tabs/profile_tab.vue | 4 +--
.../settings_modal/tabs/theme_tab/preview.vue | 8 ++---
src/components/side_drawer/side_drawer.vue | 38 +++++++-------------
src/components/status/status.vue | 24 +++++--------
src/components/timeline_menu/timeline_menu.vue | 15 +++-----
src/components/user_card/user_card.vue | 3 +-
26 files changed, 95 insertions(+), 151 deletions(-)
(limited to 'src')
diff --git a/src/App.scss b/src/App.scss
index 06915e16..6884f314 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -812,14 +812,18 @@ nav {
}
}
-.button-icon {
- &.svg-inline--fa.fa-lg {
- display: inline-block;
- padding: 0 0.3em;
+.fa-scale-110 {
+ &.svg-inline--fa {
font-size: 1.1em;
}
}
+.fa-old-padding {
+ &.svg-inline--fa {
+ padding: 0 0.3em;
+ }
+}
+
@keyframes shakeError {
0% {
transform: translateX(0);
diff --git a/src/App.vue b/src/App.vue
index c27f51bf..6e44c7e9 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -53,8 +53,7 @@
>
@@ -66,8 +65,7 @@
target="_blank"
>
@@ -78,8 +76,7 @@
@click.prevent="logout"
>
diff --git a/src/components/chat_new/chat_new.vue b/src/components/chat_new/chat_new.vue
index 8f02a699..f3894a3a 100644
--- a/src/components/chat_new/chat_new.vue
+++ b/src/components/chat_new/chat_new.vue
@@ -20,8 +20,7 @@
diff --git a/src/components/favorite_button/favorite_button.vue b/src/components/favorite_button/favorite_button.vue
index 6c7bfdab..dfe12f86 100644
--- a/src/components/favorite_button/favorite_button.vue
+++ b/src/components/favorite_button/favorite_button.vue
@@ -2,11 +2,10 @@
{{ status.fave_num }}
@@ -14,10 +13,9 @@
{{ status.fave_num }}
diff --git a/src/components/global_notice_list/global_notice_list.vue b/src/components/global_notice_list/global_notice_list.vue
index 06b6af9c..8a33b9eb 100644
--- a/src/components/global_notice_list/global_notice_list.vue
+++ b/src/components/global_notice_list/global_notice_list.vue
@@ -10,7 +10,7 @@
{{ $t(notice.messageKey, notice.messageArgs) }}
diff --git a/src/components/image_cropper/image_cropper.vue b/src/components/image_cropper/image_cropper.vue
index 605f7427..75def612 100644
--- a/src/components/image_cropper/image_cropper.vue
+++ b/src/components/image_cropper/image_cropper.vue
@@ -43,7 +43,7 @@
>
{{ submitErrorMsg }}
diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue
index 4ab5d192..a1f77210 100644
--- a/src/components/login_form/login_form.vue
+++ b/src/components/login_form/login_form.vue
@@ -77,7 +77,7 @@
{{ error }}
diff --git a/src/components/mfa_form/recovery_form.vue b/src/components/mfa_form/recovery_form.vue
index f6526d2a..78953649 100644
--- a/src/components/mfa_form/recovery_form.vue
+++ b/src/components/mfa_form/recovery_form.vue
@@ -55,7 +55,7 @@
{{ error }}
diff --git a/src/components/mfa_form/totp_form.vue b/src/components/mfa_form/totp_form.vue
index 0c6412ea..9401cad5 100644
--- a/src/components/mfa_form/totp_form.vue
+++ b/src/components/mfa_form/totp_form.vue
@@ -58,7 +58,7 @@
{{ error }}
diff --git a/src/components/mobile_nav/mobile_nav.vue b/src/components/mobile_nav/mobile_nav.vue
index db9b0ba0..d2bc65ab 100644
--- a/src/components/mobile_nav/mobile_nav.vue
+++ b/src/components/mobile_nav/mobile_nav.vue
@@ -16,8 +16,7 @@
@click.stop.prevent="toggleMobileSidebar()"
>
diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue
index 4755d7b7..e7301328 100644
--- a/src/components/nav_panel/nav_panel.vue
+++ b/src/components/nav_panel/nav_panel.vue
@@ -9,22 +9,18 @@
>
- {{ $t("nav.timelines") }}
+ />{{ $t("nav.timelines") }}
- {{ $t("nav.interactions") }}
+ />{{ $t("nav.interactions") }}
@@ -37,22 +33,18 @@
- {{ $t("nav.chats") }}
+ />{{ $t("nav.chats") }}
- {{ $t("nav.friend_requests") }}
+ />{{ $t("nav.friend_requests") }}
{{ $t("nav.about") }}
@@ -94,7 +85,7 @@
}
.follow-request-count {
- margin: -6px 10px;
+ vertical-align: bottom;
background-color: $fallback--bg;
background-color: var(--input, $fallback--faint);
}
@@ -126,7 +117,8 @@
a {
display: block;
- padding: 0.8em 0.85em;
+ align-items: stretch;
+ padding: 0.9em 1em;
&:hover {
background-color: $fallback--lightBg;
@@ -156,13 +148,8 @@
}
}
- .button-icon {
- margin-left: -0.1em;
- margin-right: 0.2em;
- }
-
- .button-icon:before {
- width: 1.1em;
+ .fa-scale-110 {
+ margin-right: 0.8em;
}
}
diff --git a/src/components/notification/notification.vue b/src/components/notification/notification.vue
index b609ae04..2bbde108 100644
--- a/src/components/notification/notification.vue
+++ b/src/components/notification/notification.vue
@@ -19,7 +19,7 @@
class="unmute"
@click.prevent="toggleMute"
>
@@ -137,7 +137,7 @@
href="#"
@click.prevent="toggleMute"
>
@@ -157,13 +157,13 @@
>
diff --git a/src/components/password_reset/password_reset.vue b/src/components/password_reset/password_reset.vue
index 3fe42b84..0deb9ccf 100644
--- a/src/components/password_reset/password_reset.vue
+++ b/src/components/password_reset/password_reset.vue
@@ -63,7 +63,7 @@
>
{{ error }}
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 9cf38a9a..a427bb98 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -37,7 +37,7 @@
>
{{ $t('post_status.scope_notice.public') }}
@@ -49,7 +49,7 @@
>
{{ $t('post_status.scope_notice.unlisted') }}
@@ -61,7 +61,7 @@
>
{{ $t('post_status.scope_notice.private') }}
@@ -83,7 +83,7 @@
@click.stop.prevent="togglePreview"
>
{{ $t('post_status.preview') }}
-
+
Error: {{ error }}
@@ -302,7 +301,7 @@
class="media-upload-wrapper"
>
@@ -389,7 +388,6 @@
}
.preview-toggle {
- display: flex;
cursor: pointer;
user-select: none;
@@ -524,7 +522,7 @@
position: relative;
}
- .button-icon {
+ .fa-scale-110 fa-old-padding {
position: absolute;
margin: 10px;
margin: .75em;
diff --git a/src/components/react_button/react_button.vue b/src/components/react_button/react_button.vue
index 8395d5e3..694e6470 100644
--- a/src/components/react_button/react_button.vue
+++ b/src/components/react_button/react_button.vue
@@ -38,9 +38,8 @@
diff --git a/src/components/reply_button/reply_button.vue b/src/components/reply_button/reply_button.vue
index ae7b0e26..a0ac8941 100644
--- a/src/components/reply_button/reply_button.vue
+++ b/src/components/reply_button/reply_button.vue
@@ -2,9 +2,8 @@
diff --git a/src/components/retweet_button/retweet_button.vue b/src/components/retweet_button/retweet_button.vue
index 706c6b81..b234f3d9 100644
--- a/src/components/retweet_button/retweet_button.vue
+++ b/src/components/retweet_button/retweet_button.vue
@@ -3,9 +3,8 @@
@@ -25,9 +23,8 @@
{{ status.repeat_num }}
diff --git a/src/components/scope_selector/scope_selector.vue b/src/components/scope_selector/scope_selector.vue
index a43af23b..a22a4fda 100644
--- a/src/components/scope_selector/scope_selector.vue
+++ b/src/components/scope_selector/scope_selector.vue
@@ -12,8 +12,7 @@
>
diff --git a/src/components/search_bar/search_bar.vue b/src/components/search_bar/search_bar.vue
index 442e91b2..f1c3fd7a 100644
--- a/src/components/search_bar/search_bar.vue
+++ b/src/components/search_bar/search_bar.vue
@@ -8,8 +8,7 @@
:title="$t('nav.search')"
>
@@ -34,10 +33,9 @@
diff --git a/src/components/settings_modal/tabs/profile_tab.vue b/src/components/settings_modal/tabs/profile_tab.vue
index 5a659fc8..d62bc392 100644
--- a/src/components/settings_modal/tabs/profile_tab.vue
+++ b/src/components/settings_modal/tabs/profile_tab.vue
@@ -235,7 +235,7 @@
>
Error: {{ bannerUploadError }}
@@ -286,7 +286,7 @@
Error: {{ backgroundUploadError }}
diff --git a/src/components/settings_modal/tabs/theme_tab/preview.vue b/src/components/settings_modal/tabs/theme_tab/preview.vue
index 20201e18..3174fd7c 100644
--- a/src/components/settings_modal/tabs/theme_tab/preview.vue
+++ b/src/components/settings_modal/tabs/theme_tab/preview.vue
@@ -42,25 +42,25 @@
diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue
index 2a4d794a..eac0ddb2 100644
--- a/src/components/side_drawer/side_drawer.vue
+++ b/src/components/side_drawer/side_drawer.vue
@@ -37,9 +37,8 @@
>
{{ $t("login.login") }}
@@ -50,9 +49,8 @@
>
{{ $t("nav.timelines") }}
@@ -66,9 +64,8 @@
style="position: relative"
>
{{ $t("nav.chats") }}
{{ $t("nav.interactions") }}
@@ -97,9 +93,8 @@
>
{{ $t("nav.friend_requests") }}
{{ $t("shoutbox.title") }}
@@ -131,9 +125,8 @@
>
{{ $t("nav.search") }}
@@ -144,9 +137,8 @@
>
{{ $t("nav.who_to_follow") }}
@@ -157,9 +149,8 @@
@click="openSettingsModal"
>
{{ $t("settings.settings") }}
@@ -167,9 +158,8 @@
{{ $t("nav.about") }}
@@ -183,9 +173,8 @@
target="_blank"
>
{{ $t("nav.administration") }}
@@ -199,9 +188,8 @@
@click="doLogout"
>
{{ $t("login.logout") }}
@@ -284,7 +272,7 @@
--lightText: var(--popoverLightText, $fallback--lightText);
--icon: var(--popoverIcon, $fallback--icon);
- .button-icon:before {
+ .fa-scale-110 fa-old-padding:before {
width: 1.1em;
}
}
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index c94862d4..21412faa 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -11,7 +11,7 @@
>
{{ error }}
@@ -22,7 +22,7 @@
@@ -49,13 +49,12 @@
@@ -186,9 +185,8 @@
:title="status.visibility | capitalize"
>
@@ -249,9 +244,8 @@
@click.prevent="gotoOriginal(status.in_reply_to_status_id)"
>
{{ $t("nav.timeline") }}
@@ -28,8 +27,7 @@
{{ $t("nav.bookmarks") }}
@@ -38,8 +36,7 @@
{{ $t("nav.dms") }}
@@ -48,8 +45,7 @@
{{ $t("nav.public_tl") }}
@@ -58,8 +54,7 @@
{{ $t("nav.twkn") }}
diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue
index c5f10b75..55e231d2 100644
--- a/src/components/user_card/user_card.vue
+++ b/src/components/user_card/user_card.vue
@@ -22,9 +22,8 @@
/>
--
cgit v1.2.3-70-g09d2
From 7c4af4ce3fe140d8dbe3ff6da55dfd0edcef7778 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 28 Oct 2020 21:41:42 +0200
Subject: improved side-drawer alignments
---
src/components/side_drawer/side_drawer.vue | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
(limited to 'src')
diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue
index eac0ddb2..c3370a9d 100644
--- a/src/components/side_drawer/side_drawer.vue
+++ b/src/components/side_drawer/side_drawer.vue
@@ -320,7 +320,6 @@
border-bottom: 1px solid;
border-color: $fallback--border;
border-color: var(--border, $fallback--border);
- margin: 0.2em 0;
}
.side-drawer ul:last-child {
@@ -331,8 +330,11 @@
padding: 0;
a {
+ box-sizing: border-box;
display: block;
- padding: 0.5em 0.85em;
+ height: 3em;
+ line-height: 2em;
+ padding: 0.5em 0.7em;
&:hover {
background-color: $fallback--lightBg;
--
cgit v1.2.3-70-g09d2
From fc7dfb3b9ecb92d2971ddc7007f708dc664e69f0 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 28 Oct 2020 21:47:42 +0200
Subject: update & unify the navbars heights
---
src/components/nav_panel/nav_panel.vue | 5 ++++-
src/components/side_drawer/side_drawer.vue | 4 ++--
2 files changed, 6 insertions(+), 3 deletions(-)
(limited to 'src')
diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue
index e7301328..7308fb1e 100644
--- a/src/components/nav_panel/nav_panel.vue
+++ b/src/components/nav_panel/nav_panel.vue
@@ -117,8 +117,11 @@
a {
display: block;
+ box-sizing: border-box;
align-items: stretch;
- padding: 0.9em 1em;
+ height: 3.5em;
+ line-height: 3.5em;
+ padding: 0 1em;
&:hover {
background-color: $fallback--lightBg;
diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue
index c3370a9d..707c6c3d 100644
--- a/src/components/side_drawer/side_drawer.vue
+++ b/src/components/side_drawer/side_drawer.vue
@@ -333,8 +333,8 @@
box-sizing: border-box;
display: block;
height: 3em;
- line-height: 2em;
- padding: 0.5em 0.7em;
+ line-height: 3em;
+ padding: 0 0.7em;
&:hover {
background-color: $fallback--lightBg;
--
cgit v1.2.3-70-g09d2
From 0ac9d81788a2cb92cec54ae08264b52ea4c93b1c Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 28 Oct 2020 21:55:08 +0200
Subject: fix settings tabs on mobile, update follow request badge
---
src/components/nav_panel/nav_panel.vue | 2 +-
src/components/side_drawer/side_drawer.vue | 7 +++++--
src/components/tab_switcher/tab_switcher.scss | 2 +-
3 files changed, 7 insertions(+), 4 deletions(-)
(limited to 'src')
diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue
index 7308fb1e..8b299bf2 100644
--- a/src/components/nav_panel/nav_panel.vue
+++ b/src/components/nav_panel/nav_panel.vue
@@ -85,7 +85,7 @@
}
.follow-request-count {
- vertical-align: bottom;
+ vertical-align: baseline;
background-color: $fallback--bg;
background-color: var(--input, $fallback--faint);
}
diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue
index 707c6c3d..ed1ccb7d 100644
--- a/src/components/side_drawer/side_drawer.vue
+++ b/src/components/side_drawer/side_drawer.vue
@@ -272,9 +272,12 @@
--lightText: var(--popoverLightText, $fallback--lightText);
--icon: var(--popoverIcon, $fallback--icon);
- .fa-scale-110 fa-old-padding:before {
- width: 1.1em;
+ .follow-request-count {
+ vertical-align: baseline;
+ background-color: $fallback--bg;
+ background-color: var(--input, $fallback--faint);
}
+
}
.side-drawer-logo-wrapper {
diff --git a/src/components/tab_switcher/tab_switcher.scss b/src/components/tab_switcher/tab_switcher.scss
index cd8fff6f..1e963516 100644
--- a/src/components/tab_switcher/tab_switcher.scss
+++ b/src/components/tab_switcher/tab_switcher.scss
@@ -92,7 +92,7 @@
flex-direction: column;
@media all and (max-width: 800px) {
- min-width: 1em;
+ min-width: 4em;
}
&:not(.active)::after {
--
cgit v1.2.3-70-g09d2
From 2e6c51dfd4e59370c104abb3e2602ec5a70bd030 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 28 Oct 2020 22:49:53 +0200
Subject: better icon for picker
---
src/components/emoji_picker/emoji_picker.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
(limited to 'src')
diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js
index b1671566..0d51c7e5 100644
--- a/src/components/emoji_picker/emoji_picker.js
+++ b/src/components/emoji_picker/emoji_picker.js
@@ -1,13 +1,13 @@
import Checkbox from '../checkbox/checkbox.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
- faUnderline,
+ faIcons,
faStickyNote,
faSmileBeam
} from '@fortawesome/free-solid-svg-icons'
library.add(
- faUnderline,
+ faIcons,
faStickyNote,
faSmileBeam
)
@@ -195,7 +195,7 @@ const EmojiPicker = {
{
id: 'standard',
text: this.$t('emoji.unicode'),
- icon: 'underline',
+ icon: 'icons',
emojis: filterByKeyword(standardEmojis, this.keyword)
}
]
--
cgit v1.2.3-70-g09d2
From ef36ca44f613c3d7d2ea11a9ad4f7fe828f7ae83 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Wed, 28 Oct 2020 22:52:20 +0200
Subject: >boxes
---
src/components/emoji_picker/emoji_picker.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
(limited to 'src')
diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js
index 0d51c7e5..2716d93f 100644
--- a/src/components/emoji_picker/emoji_picker.js
+++ b/src/components/emoji_picker/emoji_picker.js
@@ -1,13 +1,13 @@
import Checkbox from '../checkbox/checkbox.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
- faIcons,
+ faBoxOpen,
faStickyNote,
faSmileBeam
} from '@fortawesome/free-solid-svg-icons'
library.add(
- faIcons,
+ faBoxOpen,
faStickyNote,
faSmileBeam
)
@@ -195,7 +195,7 @@ const EmojiPicker = {
{
id: 'standard',
text: this.$t('emoji.unicode'),
- icon: 'icons',
+ icon: 'box-open',
emojis: filterByKeyword(standardEmojis, this.keyword)
}
]
--
cgit v1.2.3-70-g09d2
From 3ead79ddb42967e2e5e7ccc6d832543b066c7c9b Mon Sep 17 00:00:00 2001
From: Shpuld Shpuldson
Date: Thu, 29 Oct 2020 12:45:44 +0200
Subject: document thie this. check
---
src/components/chat/chat.js | 1 +
1 file changed, 1 insertion(+)
(limited to 'src')
diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js
index e60fe09d..c0c9ad6c 100644
--- a/src/components/chat/chat.js
+++ b/src/components/chat/chat.js
@@ -240,6 +240,7 @@ const Chat = {
// arrive just as you're leaving the view and messages that you didn't actually
// get to see get marked as read.
window.setTimeout(() => {
+ // Don't mark as read if the element doesn't exist, user has left chat view
if (this.$el) this.readChat()
}, MARK_AS_READ_DELAY)
}
--
cgit v1.2.3-70-g09d2
From 8225717a7c5391e21dba00a28aebb642ffcc8cef Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Thu, 29 Oct 2020 20:03:53 +0200
Subject: Update and fix avatar shadow in user card
---
src/components/user_avatar/user_avatar.vue | 9 ++++++---
src/components/user_card/user_card.vue | 6 ++++--
2 files changed, 10 insertions(+), 5 deletions(-)
(limited to 'src')
diff --git a/src/components/user_avatar/user_avatar.vue b/src/components/user_avatar/user_avatar.vue
index eb3d375e..43947282 100644
--- a/src/components/user_avatar/user_avatar.vue
+++ b/src/components/user_avatar/user_avatar.vue
@@ -20,11 +20,14 @@
@import '../../_variables.scss';
.Avatar {
+ --_avatarShadowBox: var(--avatarStatusShadow);
+ --_avatarShadowFilter: var(--avatarStatusShadowFilter);
+ --_avatarShadowInset: var(--avatarStatusShadowInset);
--still-image-label-visibility: hidden;
width: 48px;
height: 48px;
- box-shadow: var(--avatarStatusShadow);
+ box-shadow: var(--_avatarShadowBox);
border-radius: $fallback--avatarRadius;
border-radius: var(--avatarRadius, $fallback--avatarRadius);
@@ -34,8 +37,8 @@
}
&.better-shadow {
- box-shadow: var(--avatarStatusShadowInset);
- filter: var(--avatarStatusShadowFilter)
+ box-shadow: var(--_avatarShadowInset);
+ filter: var(--_avatarShadowFilter);
}
&.animated::before {
diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue
index 55e231d2..52a54fa7 100644
--- a/src/components/user_card/user_card.vue
+++ b/src/components/user_card/user_card.vue
@@ -382,11 +382,13 @@
max-height: 56px;
.Avatar {
+ --_avatarShadowBox: var(--avatarShadow);
+ --_avatarShadowFilter: var(--avatarShadowFilter);
+ --_avatarShadowInset: var(--avatarShadowInset);
+
flex: 1 0 100%;
width: 56px;
height: 56px;
- box-shadow: 0px 1px 8px rgba(0,0,0,0.75);
- box-shadow: var(--avatarShadow);
object-fit: cover;
}
}
--
cgit v1.2.3-70-g09d2
From 0f8a7037eae6c1237b759430bacb8381604e74b7 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Thu, 29 Oct 2020 20:06:13 +0200
Subject: fix lain's issue in reaction picker
---
src/components/react_button/react_button.vue | 1 +
1 file changed, 1 insertion(+)
(limited to 'src')
diff --git a/src/components/react_button/react_button.vue b/src/components/react_button/react_button.vue
index 694e6470..fa862484 100644
--- a/src/components/react_button/react_button.vue
+++ b/src/components/react_button/react_button.vue
@@ -11,6 +11,7 @@
>
--
cgit v1.2.3-70-g09d2
From 633349ddff2fd96298ce26ac2d3c404edb1ebbf3 Mon Sep 17 00:00:00 2001
From: Henry Jameson
Date: Thu, 29 Oct 2020 21:13:31 +0200
Subject: Refactor desktop navbar into a component, change layout to grid for
better compatibility with search field and simpler CSS
---
src/App.js | 49 +----
src/App.scss | 119 -------------
src/App.vue | 75 +-------
src/boot/after_store.js | 1 +
src/components/desktop_nav/desktop_nav.js | 89 ++++++++++
src/components/desktop_nav/desktop_nav.scss | 112 ++++++++++++
src/components/desktop_nav/desktop_nav.vue | 79 ++++++++
src/components/mobile_nav/mobile_nav.vue | 267 +++++++++++++++-------------
src/components/search_bar/search_bar.vue | 77 ++++----
src/modules/instance.js | 1 +
static/config.json | 1 +
11 files changed, 465 insertions(+), 405 deletions(-)
create mode 100644 src/components/desktop_nav/desktop_nav.js
create mode 100644 src/components/desktop_nav/desktop_nav.scss
create mode 100644 src/components/desktop_nav/desktop_nav.vue
(limited to 'src')
diff --git a/src/App.js b/src/App.js
index ded772fa..4871b4ac 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,7 +1,6 @@
import UserPanel from './components/user_panel/user_panel.vue'
import NavPanel from './components/nav_panel/nav_panel.vue'
import Notifications from './components/notifications/notifications.vue'
-import SearchBar from './components/search_bar/search_bar.vue'
import InstanceSpecificPanel from './components/instance_specific_panel/instance_specific_panel.vue'
import FeaturesPanel from './components/features_panel/features_panel.vue'
import WhoToFollowPanel from './components/who_to_follow_panel/who_to_follow_panel.vue'
@@ -11,6 +10,7 @@ import MediaModal from './components/media_modal/media_modal.vue'
import SideDrawer from './components/side_drawer/side_drawer.vue'
import MobilePostStatusButton from './components/mobile_post_status_button/mobile_post_status_button.vue'
import MobileNav from './components/mobile_nav/mobile_nav.vue'
+import DesktopNav from './components/desktop_nav/desktop_nav.vue'
import UserReportingModal from './components/user_reporting_modal/user_reporting_modal.vue'
import PostStatusModal from './components/post_status_modal/post_status_modal.vue'
import GlobalNoticeList from './components/global_notice_list/global_notice_list.vue'
@@ -22,7 +22,6 @@ export default {
UserPanel,
NavPanel,
Notifications,
- SearchBar,
InstanceSpecificPanel,
FeaturesPanel,
WhoToFollowPanel,
@@ -31,6 +30,7 @@ export default {
SideDrawer,
MobilePostStatusButton,
MobileNav,
+ DesktopNav,
SettingsModal,
UserReportingModal,
PostStatusModal,
@@ -38,14 +38,6 @@ export default {
},
data: () => ({
mobileActivePanel: 'timeline',
- searchBarHidden: true,
- supportsMask: window.CSS && window.CSS.supports && (
- window.CSS.supports('mask-size', 'contain') ||
- window.CSS.supports('-webkit-mask-size', 'contain') ||
- window.CSS.supports('-moz-mask-size', 'contain') ||
- window.CSS.supports('-ms-mask-size', 'contain') ||
- window.CSS.supports('-o-mask-size', 'contain')
- )
}),
created () {
// Load the locale from the storage
@@ -61,28 +53,6 @@ export default {
background () {
return this.currentUser.background_image || this.$store.state.instance.background
},
- enableMask () { return this.supportsMask && this.$store.state.instance.logoMask },
- logoStyle () {
- return {
- 'visibility': this.enableMask ? 'hidden' : 'visible'
- }
- },
- logoMaskStyle () {
- return this.enableMask ? {
- 'mask-image': `url(${this.$store.state.instance.logo})`
- } : {
- 'background-color': this.enableMask ? '' : 'transparent'
- }
- },
- logoBgStyle () {
- return Object.assign({
- 'margin': `${this.$store.state.instance.logoMargin} 0`,
- opacity: this.searchBarHidden ? 1 : 0
- }, this.enableMask ? {} : {
- 'background-color': this.enableMask ? '' : 'transparent'
- })
- },
- logo () { return this.$store.state.instance.logo },
bgStyle () {
return {
'background-image': `url(${this.background})`
@@ -93,9 +63,7 @@ export default {
'--body-background-image': `url(${this.background})`
}
},
- sitename () { return this.$store.state.instance.name },
chat () { return this.$store.state.chat.channel.state === 'joined' },
- hideSitename () { return this.$store.state.instance.hideSitename },
suggestionsEnabled () { return this.$store.state.instance.suggestionsEnabled },
showInstanceSpecificPanel () {
return this.$store.state.instance.showInstanceSpecificPanel &&
@@ -112,19 +80,6 @@ export default {
}
},
methods: {
- scrollToTop () {
- window.scrollTo(0, 0)
- },
- logout () {
- this.$router.replace('/main/public')
- this.$store.dispatch('logout')
- },
- onSearchBarToggled (hidden) {
- this.searchBarHidden = hidden
- },
- openSettingsModal () {
- this.$store.dispatch('openSettingsModal')
- },
updateMobileState () {
const mobileLayout = windowWidth() <= 800
const layoutHeight = windowHeight()
diff --git a/src/App.scss b/src/App.scss
index 6884f314..05e73b4b 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -359,119 +359,10 @@ i[class*=icon-], .svg-inline--fa {
padding: 0 10px 0 10px;
}
-.item {
- flex: 1;
- line-height: 50px;
- height: 50px;
- overflow: hidden;
- display: flex;
- flex-wrap: wrap;
-
- .nav-icon {
- margin-left: 0.2em;
- width: 2em;
- text-align: center;
- }
-
- &.right {
- justify-content: flex-end;
- }
-}
-
.auto-size {
flex: 1
}
-.nav-bar {
- padding: 0;
- width: 100%;
- align-items: center;
- position: fixed;
- height: 50px;
- box-sizing: border-box;
-
- button {
- &, i[class*=icon-], svg {
- color: $fallback--text;
- color: var(--btnTopBarText, $fallback--text);
- }
-
- &:active {
- background-color: $fallback--fg;
- background-color: var(--btnPressedTopBar, $fallback--fg);
- color: $fallback--text;
- color: var(--btnPressedTopBarText, $fallback--text);
- }
-
- &:disabled {
- color: $fallback--text;
- color: var(--btnDisabledTopBarText, $fallback--text);
- }
-
- &.toggled {
- color: $fallback--text;
- color: var(--btnToggledTopBarText, $fallback--text);
- background-color: $fallback--fg;
- background-color: var(--btnToggledTopBar, $fallback--fg)
- }
- }
-
-
- .logo {
- display: flex;
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
-
- align-items: stretch;
- justify-content: center;
- flex: 0 0 auto;
- z-index: -1;
- transition: opacity;
- transition-timing-function: ease-out;
- transition-duration: 100ms;
-
- .mask {
- mask-repeat: no-repeat;
- mask-position: center;
- mask-size: contain;
- background-color: $fallback--fg;
- background-color: var(--topBarText, $fallback--fg);
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- }
-
- img {
- height: 100%;
- object-fit: contain;
- display: block;
- flex: 0;
- }
- }
-
- .inner-nav {
- position: relative;
- margin: auto;
- box-sizing: border-box;
- padding-left: 10px;
- padding-right: 10px;
- display: flex;
- align-items: center;
- flex-basis: 970px;
- height: 50px;
-
- a, a i, a svg {
- color: $fallback--link;
- color: var(--topBarLink, $fallback--link);
- }
- }
-}
-
main-router {
flex: 1;
}
@@ -781,16 +672,6 @@ nav {
}
}
-@media all and (min-width: 800px) {
- .logo {
- opacity: 1 !important;
- }
-}
-
-.item.right {
- text-align: right;
-}
-
.visibility-notice {
padding: .5em;
border: 1px solid $fallback--faint;
diff --git a/src/App.vue b/src/App.vue
index 6e44c7e9..b4eb0524 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -9,80 +9,7 @@
:style="bgStyle"
/>
-
+
{
? 0
: config.logoMargin
})
+ copyInstanceOption('logoLeft')
store.commit('authFlow/setInitialStrategy', config.loginMethod)
copyInstanceOption('redirectRootNoLogin')
diff --git a/src/components/desktop_nav/desktop_nav.js b/src/components/desktop_nav/desktop_nav.js
new file mode 100644
index 00000000..ee99ec10
--- /dev/null
+++ b/src/components/desktop_nav/desktop_nav.js
@@ -0,0 +1,89 @@
+import SearchBar from 'components/search_bar/search_bar.vue'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faSignInAlt,
+ faSignOutAlt,
+ faHome,
+ faComments,
+ faBell,
+ faUserPlus,
+ faBullhorn,
+ faSearch,
+ faTachometerAlt,
+ faCog,
+ faInfoCircle
+} from '@fortawesome/free-solid-svg-icons'
+
+library.add(
+ faSignInAlt,
+ faSignOutAlt,
+ faHome,
+ faComments,
+ faBell,
+ faUserPlus,
+ faBullhorn,
+ faSearch,
+ faTachometerAlt,
+ faCog,
+ faInfoCircle
+)
+
+export default {
+ components: {
+ SearchBar
+ },
+ data: () => ({
+ searchBarHidden: true,
+ supportsMask: window.CSS && window.CSS.supports && (
+ window.CSS.supports('mask-size', 'contain') ||
+ window.CSS.supports('-webkit-mask-size', 'contain') ||
+ window.CSS.supports('-moz-mask-size', 'contain') ||
+ window.CSS.supports('-ms-mask-size', 'contain') ||
+ window.CSS.supports('-o-mask-size', 'contain')
+ )
+ }),
+ computed: {
+ enableMask () { return this.supportsMask && this.$store.state.instance.logoMask },
+ logoStyle () {
+ return {
+ 'visibility': this.enableMask ? 'hidden' : 'visible'
+ }
+ },
+ logoMaskStyle () {
+ return this.enableMask ? {
+ 'mask-image': `url(${this.$store.state.instance.logo})`
+ } : {
+ 'background-color': this.enableMask ? '' : 'transparent'
+ }
+ },
+ logoBgStyle () {
+ return Object.assign({
+ 'margin': `${this.$store.state.instance.logoMargin} 0`,
+ opacity: this.searchBarHidden ? 1 : 0
+ }, this.enableMask ? {} : {
+ 'background-color': this.enableMask ? '' : 'transparent'
+ })
+ },
+ logo () { return this.$store.state.instance.logo },
+ sitename () { return this.$store.state.instance.name },
+ hideSitename () { return this.$store.state.instance.hideSitename },
+ logoLeft () { return this.$store.state.instance.logoLeft },
+ currentUser () { return this.$store.state.users.currentUser },
+ privateMode () { return this.$store.state.instance.private },
+ },
+ methods: {
+ scrollToTop () {
+ window.scrollTo(0, 0)
+ },
+ logout () {
+ this.$router.replace('/main/public')
+ this.$store.dispatch('logout')
+ },
+ onSearchBarToggled (hidden) {
+ this.searchBarHidden = hidden
+ },
+ openSettingsModal () {
+ this.$store.dispatch('openSettingsModal')
+ },
+ }
+}
diff --git a/src/components/desktop_nav/desktop_nav.scss b/src/components/desktop_nav/desktop_nav.scss
new file mode 100644
index 00000000..028692a9
--- /dev/null
+++ b/src/components/desktop_nav/desktop_nav.scss
@@ -0,0 +1,112 @@
+@import '../../_variables.scss';
+
+.DesktopNav {
+ height: 50px;
+ width: 100%;
+ position: fixed;
+
+ .inner-nav {
+ display: grid;
+ grid-template-rows: 50px;
+ grid-template-columns: 2fr auto 2fr;
+ grid-template-areas: "sitename logo actions";
+ box-sizing: border-box;
+ padding: 0 1.2em;
+ margin: auto;
+ max-width: 980px;
+ }
+
+ &.-logoLeft {
+ grid-template-columns: auto 2fr 2fr;
+ grid-template-areas: "logo sitename actions";
+ }
+
+ button {
+ &, svg {
+ color: $fallback--text;
+ color: var(--btnTopBarText, $fallback--text);
+ }
+
+ &:active {
+ background-color: $fallback--fg;
+ background-color: var(--btnPressedTopBar, $fallback--fg);
+ color: $fallback--text;
+ color: var(--btnPressedTopBarText, $fallback--text);
+ }
+
+ &:disabled {
+ color: $fallback--text;
+ color: var(--btnDisabledTopBarText, $fallback--text);
+ }
+
+ &.toggled {
+ color: $fallback--text;
+ color: var(--btnToggledTopBarText, $fallback--text);
+ background-color: $fallback--fg;
+ background-color: var(--btnToggledTopBar, $fallback--fg)
+ }
+ }
+
+ .logo {
+ grid-area: logo;
+ position: relative;
+ transition: opacity;
+ transition-timing-function: ease-out;
+ transition-duration: 100ms;
+
+ @media all and (min-width: 800px) {
+ opacity: 1 !important;
+ }
+
+ .mask {
+ mask-repeat: no-repeat;
+ mask-position: center;
+ mask-size: contain;
+ background-color: $fallback--fg;
+ background-color: var(--topBarText, $fallback--fg);
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ }
+
+ img {
+ display: inline-block;
+ height: 50px;
+ }
+ }
+
+ .nav-icon {
+ margin-left: 0.2em;
+ width: 2em;
+ text-align: center;
+ }
+
+ a, a svg {
+ color: $fallback--link;
+ color: var(--topBarLink, $fallback--link);
+ }
+
+ .sitename {
+ grid-area: sitename;
+ }
+
+ .actions {
+ grid-area: actions;
+ }
+
+ .item {
+ flex: 1;
+ line-height: 50px;
+ height: 50px;
+ overflow: hidden;
+ display: flex;
+ flex-wrap: wrap;
+
+ &.right {
+ justify-content: flex-end;
+ text-align: right;
+ }
+ }
+}
diff --git a/src/components/desktop_nav/desktop_nav.vue b/src/components/desktop_nav/desktop_nav.vue
new file mode 100644
index 00000000..d166be08
--- /dev/null
+++ b/src/components/desktop_nav/desktop_nav.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
diff --git a/src/components/mobile_nav/mobile_nav.vue b/src/components/mobile_nav/mobile_nav.vue
index d2bc65ab..30b15149 100644
--- a/src/components/mobile_nav/mobile_nav.vue
+++ b/src/components/mobile_nav/mobile_nav.vue
@@ -1,55 +1,53 @@
-
+