-
-
-
- {{ $t('post_status.new_status') }}
-
-
-
-
+
+
+
+
+
{
+ const scrollBarGap = window.innerWidth - document.documentElement.clientWidth
+ bodyScrollLock.disableBodyScroll(el, {
+ reserveScrollBarGap: true
+ })
+ setTimeout(() => {
+ // If previousNavPaddingRight is already set, don't set it again.
+ if (previousNavPaddingRight === undefined) {
+ const navEl = document.getElementById('nav')
+ previousNavPaddingRight = window.getComputedStyle(navEl).getPropertyValue('padding-right')
+ navEl.style.paddingRight = previousNavPaddingRight ? `calc(${previousNavPaddingRight} + ${scrollBarGap}px)` : `${scrollBarGap}px`
+ }
+ // If previousAppBgWrapeprRight is already set, don't set it again.
+ if (previousAppBgWrapperRight === undefined) {
+ const appBgWrapperEl = document.getElementById('app_bg_wrapper')
+ previousAppBgWrapperRight = window.getComputedStyle(appBgWrapperEl).getPropertyValue('right')
+ appBgWrapperEl.style.right = previousAppBgWrapperRight ? `calc(${previousAppBgWrapperRight} + ${scrollBarGap}px)` : `${scrollBarGap}px`
+ }
+ document.body.classList.add('scroll-locked')
+ })
+}
+
+const enableBodyScroll = (el) => {
+ setTimeout(() => {
+ if (previousNavPaddingRight !== undefined) {
+ document.getElementById('nav').style.paddingRight = previousNavPaddingRight
+ // Restore previousNavPaddingRight to undefined so disableBodyScroll knows it can be set again.
+ previousNavPaddingRight = undefined
+ }
+ if (previousAppBgWrapperRight !== undefined) {
+ document.getElementById('app_bg_wrapper').style.right = previousAppBgWrapperRight
+ // Restore previousAppBgWrapperRight to undefined so disableBodyScroll knows it can be set again.
+ previousAppBgWrapperRight = undefined
+ }
+ document.body.classList.remove('scroll-locked')
+ })
+ bodyScrollLock.enableBodyScroll(el)
+}
+
+const directive = {
+ inserted: (el, binding) => {
+ if (binding.value) {
+ disableBodyScroll(el)
+ }
+ },
+ componentUpdated: (el, binding) => {
+ if (binding.oldValue === binding.value) {
+ return
+ }
+
+ if (binding.value) {
+ disableBodyScroll(el)
+ } else {
+ enableBodyScroll(el)
+ }
+ },
+ unbind: (el) => {
+ enableBodyScroll(el)
+ }
+}
+
+export default (Vue) => {
+ Vue.directive('body-scroll-lock', directive)
+}
diff --git a/src/i18n/en.json b/src/i18n/en.json
index ddde471ab8..e4af507e49 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -529,6 +529,7 @@
"follows_you": "Follows you!",
"its_you": "It's you!",
"media": "Media",
+ "mention": "Mention",
"mute": "Mute",
"muted": "Muted",
"per_day": "per day",
diff --git a/src/i18n/es.json b/src/i18n/es.json
index 009599f5a4..91c7f38330 100644
--- a/src/i18n/es.json
+++ b/src/i18n/es.json
@@ -508,7 +508,9 @@
"pinned": "Fijado",
"delete_confirm": "¿Realmente quieres borrar la publicación?",
"reply_to": "Respondiendo a",
- "replies_list": "Respuestas:"
+ "replies_list": "Respuestas:",
+ "mute_conversation": "Silenciar la conversación",
+ "unmute_conversation": "Mostrar la conversación"
},
"user_card": {
"approve": "Aprobar",
@@ -606,5 +608,16 @@
"person_talking": "{count} personas hablando",
"people_talking": "{count} gente hablando",
"no_results": "Sin resultados"
+ },
+ "password_reset": {
+ "forgot_password": "¿Contraseña olvidada?",
+ "password_reset": "Restablecer la contraseña",
+ "instruction": "Ingrese su dirección de correo electrónico o nombre de usuario. Le enviaremos un enlace para restablecer su contraseña.",
+ "placeholder": "Su correo electrónico o nombre de usuario",
+ "check_email": "Revise su correo electrónico para obtener un enlace para restablecer su contraseña.",
+ "return_home": "Volver a la página de inicio",
+ "not_found": "No pudimos encontrar ese correo electrónico o nombre de usuario.",
+ "too_many_requests": "Has alcanzado el límite de intentos, vuelve a intentarlo más tarde.",
+ "password_reset_disabled": "El restablecimiento de contraseñas está deshabilitado. Póngase en contacto con el administrador de su instancia."
}
}
\ No newline at end of file
diff --git a/src/i18n/eu.json b/src/i18n/eu.json
index 1efaa31043..ad8f4c0536 100644
--- a/src/i18n/eu.json
+++ b/src/i18n/eu.json
@@ -88,7 +88,7 @@
"followed_you": "Zu jarraitzen zaitu",
"load_older": "Kargatu jakinarazpen zaharragoak",
"notifications": "Jakinarazpenak",
- "read": "Irakurri!",
+ "read": "Irakurrita!",
"repeated_you": "zure mezua errepikatu du",
"no_more_notifications": "Ez dago jakinarazpen gehiago"
},
@@ -116,7 +116,7 @@
},
"post_status": {
"new_status": "Mezu berri bat idatzi",
- "account_not_locked_warning": "Zure kontua ez dago {0}. Edozeinek jarraitzen hastearekin, zure mezuak irakur dezake.",
+ "account_not_locked_warning": "Zure kontua ez dago {0}. Edozeinek jarraitzen hastearekin, zure mezuak irakur ditzake.",
"account_not_locked_warning_link": "Blokeatuta",
"attachments_sensitive": "Nabarmendu eranskinak hunkigarri gisa ",
"content_type": {
@@ -136,10 +136,10 @@
"unlisted": "Mezu hau ez da argitaratuko Denbora-lerro Publikoan ezta Ezagutzen den Sarean"
},
"scope": {
- "direct": "Zuzena - Bidali aipatutako erabiltzaileei besterik ez",
- "private": "Jarraitzaileentzako bakarrik- Bidali jarraitzaileentzat bakarrik",
- "public": "Publickoa - Bistaratu denbora-lerro publikoetan",
- "unlisted": "Zerrendatu gabea - ez bidali denbora-lerro publikoetan"
+ "direct": "Zuzena: Bidali aipatutako erabiltzaileei besterik ez",
+ "private": "Jarraitzaileentzako bakarrik: Bidali jarraitzaileentzat bakarrik",
+ "public": "Publikoa: Bistaratu denbora-lerro publikoetan",
+ "unlisted": "Zerrendatu gabea: ez bidali denbora-lerro publikoetara"
}
},
"registration": {
@@ -228,7 +228,7 @@
"avatar_size_instruction": "Avatar irudien gomendatutako gutxieneko tamaina 150x150 pixel dira.",
"export_theme": "Gorde aurre-ezarpena",
"filtering": "Iragazten",
- "filtering_explanation": "Hitz hauek dituzten muzu guztiak isilduak izango dira. Lerro bakoitzeko bat",
+ "filtering_explanation": "Hitz hauek dituzten mezu guztiak isilduak izango dira. Lerro bakoitzeko bat",
"follow_export": "Jarraitzen dituzunak esportatu",
"follow_export_button": "Esportatu zure jarraitzaileak csv fitxategi batean",
"follow_import": "Jarraitzen dituzunak inportatu",
@@ -276,7 +276,7 @@
"no_blocks": "Ez daude erabiltzaile blokeatutak",
"no_mutes": "Ez daude erabiltzaile mututuak",
"hide_follows_description": "Ez erakutsi nor jarraitzen ari naizen",
- "hide_followers_description": "Ez erakutsi nor ari de ni jarraitzen",
+ "hide_followers_description": "Ez erakutsi nor ari den ni jarraitzen",
"show_admin_badge": "Erakutsi Administratzaile etiketa nire profilan",
"show_moderator_badge": "Erakutsi Moderatzaile etiketa nire profilan",
"nsfw_clickthrough": "Gaitu klika hunkigarri eranskinak ezkutatzeko",
@@ -456,8 +456,8 @@
"time": {
"day": "{0} egun",
"days": "{0} egun",
- "day_short": "{0}d",
- "days_short": "{0}d",
+ "day_short": "{0}e",
+ "days_short": "{0}e",
"hour": "{0} ordu",
"hours": "{0} ordu",
"hour_short": "{0}o",
@@ -492,7 +492,7 @@
"conversation": "Elkarrizketa",
"error_fetching": "Errorea eguneraketak eskuratzen",
"load_older": "Kargatu mezu zaharragoak",
- "no_retweet_hint": "Mezu hau jarraitzailentzko bakarrik markatuta dago eta ezin da errepikatu",
+ "no_retweet_hint": "Mezu hau jarraitzailentzako bakarrik markatuta dago eta ezin da errepikatu",
"repeated": "Errepikatuta",
"show_new": "Berriena erakutsi",
"up_to_date": "Eguneratuta",
@@ -507,8 +507,10 @@
"unpin": "Aingura ezeztatu profilatik",
"pinned": "Ainguratuta",
"delete_confirm": "Mezu hau benetan ezabatu nahi duzu?",
- "reply_to": "Erantzun",
- "replies_list": "Erantzunak:"
+ "reply_to": "Erantzuten",
+ "replies_list": "Erantzunak:",
+ "mute_conversation": "Elkarrizketa isilarazi",
+ "unmute_conversation": "Elkarrizketa aktibatu"
},
"user_card": {
"approve": "Onartu",
@@ -581,7 +583,7 @@
},
"tool_tip": {
"media_upload": "Multimedia igo",
- "repeat": "Erreplikatu",
+ "repeat": "Errepikatu",
"reply": "Erantzun",
"favorite": "Gogokoa",
"user_settings": "Erabiltzaile ezarpenak"
@@ -601,10 +603,21 @@
}
},
"search": {
- "people": "Gendea",
+ "people": "Erabiltzaileak",
"hashtags": "Traolak",
"person_talking": "{count} pertsona hitzegiten",
- "people_talking": "{count} gende hitzegiten",
+ "people_talking": "{count} jende hitzegiten",
"no_results": "Emaitzarik ez"
+ },
+ "password_reset": {
+ "forgot_password": "Pasahitza ahaztua?",
+ "password_reset": "Pasahitza berrezarri",
+ "instruction": "Idatzi zure helbide elektronikoa edo erabiltzaile izena. Pasahitza berrezartzeko esteka bidaliko dizugu.",
+ "placeholder": "Zure e-posta edo erabiltzaile izena",
+ "check_email": "Begiratu zure posta elektronikoa pasahitza berrezarri ahal izateko.",
+ "return_home": "Itzuli hasierara",
+ "not_found": "Ezin izan dugu helbide elektroniko edo erabiltzaile hori aurkitu.",
+ "too_many_requests": "Saiakera gehiegi burutu ditzu, saiatu berriro geroxeago.",
+ "password_reset_disabled": "Pasahitza berrezartzea debekatuta dago. Mesedez, jarri harremanetan instantzia administratzailearekin."
}
}
\ No newline at end of file
diff --git a/src/i18n/oc.json b/src/i18n/oc.json
index 6100a4d276..680ad6dd02 100644
--- a/src/i18n/oc.json
+++ b/src/i18n/oc.json
@@ -5,7 +5,7 @@
"exporter": {
"export": "Exportar",
"processing": "Tractament, vos demandarem lèu de telecargar lo fichièr"
- },
+ },
"features_panel": {
"chat": "Chat",
"gopher": "Gopher",
@@ -30,12 +30,12 @@
"cancel": "Anullar"
},
"image_cropper": {
- "crop_picture": "Talhar l’imatge",
- "save": "Salvar",
- "save_without_cropping": "Salvar sens talhada",
- "cancel": "Anullar"
+ "crop_picture": "Talhar l’imatge",
+ "save": "Salvar",
+ "save_without_cropping": "Salvar sens talhada",
+ "cancel": "Anullar"
},
- "importer": {
+ "importer": {
"submit": "Mandar",
"success": "Corrèctament importat.",
"error": "Una error s’es producha pendent l’importacion d’aqueste fichièr."
@@ -65,6 +65,7 @@
"timeline": "Flux d’actualitat",
"twkn": "Lo malhum conegut",
"user_search": "Cèrca d’utilizaires",
+ "search": "Cercar",
"who_to_follow": "Qual seguir",
"preferences": "Preferéncias"
},
@@ -79,19 +80,27 @@
"no_more_notifications": "Pas mai de notificacions"
},
"polls": {
-"add_poll": "Ajustar un sondatge",
+ "add_poll": "Ajustar un sondatge",
"add_option": "Ajustar d’opcions",
- "option": "Opcion",
- "votes": "vòtes",
- "vote": "Votar",
- "type": "Tipe de sondatge",
- "single_choice": "Causida unica",
- "multiple_choices": "Causida multipla",
- "expiry": "Durada del sondatge",
- "expires_in": "Lo sondatge s’acabarà {0}",
- "expired": "Sondatge acabat {0}",
- "not_enough_options": "I a pas pro d’opcions"
- },
+ "option": "Opcion",
+ "votes": "vòtes",
+ "vote": "Votar",
+ "type": "Tipe de sondatge",
+ "single_choice": "Causida unica",
+ "multiple_choices": "Causida multipla",
+ "expiry": "Durada del sondatge",
+ "expires_in": "Lo sondatge s’acabarà {0}",
+ "expired": "Sondatge acabat {0}",
+ "not_enough_options": "I a pas pro d’opcions"
+ },
+ "stickers": {
+ "add_sticker": "Ajustar un pegasolet"
+ },
+ "interactions": {
+ "favs_repeats": "Repeticions e favorits",
+ "follows": "Nòus seguidors",
+ "load_older": "Cargar d’interaccions anterioras"
+ },
"post_status": {
"new_status": "Publicar d’estatuts novèls",
"account_not_locked_warning": "Vòstre compte es pas {0}. Qual que siá pòt vos seguir per veire vòstras publicacions destinadas pas qu’a vòstres seguidors.",
@@ -137,8 +146,8 @@
}
},
"selectable_list": {
- "select_all": "O seleccionar tot"
- },
+ "select_all": "O seleccionar tot"
+ },
"settings": {
"app_name": "Nom de l’aplicacion",
"attachmentRadius": "Pèças juntas",
@@ -216,7 +225,6 @@
"use_contain_fit": "Talhar pas las pèças juntas per las vinhetas",
"name": "Nom",
"name_bio": "Nom & Bio",
-
"new_password": "Nòu senhal",
"notification_visibility_follows": "Abonaments",
"notification_visibility_likes": "Aimar",
@@ -264,12 +272,12 @@
"subject_line_email": "Coma los corrièls : \"re: subjècte\"",
"subject_line_mastodon": "Coma mastodon : copiar tal coma es",
"subject_line_noop": "Copiar pas",
-"post_status_content_type": "Publicar lo tipe de contengut dels estatuts",
+ "post_status_content_type": "Publicar lo tipe de contengut dels estatuts",
"stop_gifs": "Lançar los GIFs al subrevòl",
"streaming": "Activar lo cargament automatic dels novèls estatus en anar amont",
"text": "Tèxte",
"theme": "Tèma",
- "theme_help_v2_1": "You can also override certain component's colors and opacity by toggling the checkbox, use \"Clear all\" button to clear all overrides.",
+ "theme_help_v2_1": "Podètz tanben remplaçar la color d’unes compausants en clicant la case, utilizatz lo boton \"O escafar tot\" per escafar totes las subrecargadas.",
"theme_help_v2_2": "Icons underneath some entries are background/text contrast indicators, hover over for detailed info. Please keep in mind that when using transparency contrast indicators show the worst possible case.",
"theme_help": "Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.",
"tooltipRadius": "Astúcias/alèrtas",
@@ -280,14 +288,14 @@
"true": "òc"
},
"notifications": "Notificacions",
- "notification_setting": "Receber las notificacions de :",
+ "notification_setting": "Recebre las notificacions de :",
"notification_setting_follows": "Utilizaires que seguissètz",
"notification_setting_non_follows": "Utilizaires que seguissètz pas",
"notification_setting_followers": "Utilizaires que vos seguisson",
"notification_setting_non_followers": "Utilizaires que vos seguisson pas",
- "notification_mutes": "Per receber pas mai d’un utilizaire en particular, botatz-lo en silenci.",
+ "notification_mutes": "Per recebre pas mai d’un utilizaire en particular, botatz-lo en silenci.",
"notification_blocks": "Blocar un utilizaire arrèsta totas las notificacions tan coma quitar de los seguir.",
- "enable_web_push_notifications": "Activar las notificacions web push",
+ "enable_web_push_notifications": "Activar las notificacions web push",
"style": {
"switcher": {
"keep_color": "Gardar las colors",
@@ -442,7 +450,7 @@
"conversation": "Conversacion",
"error_fetching": "Error en cercant de mesas a jorn",
"load_older": "Ne veire mai",
- "no_retweet_hint": "Las publicacions marcadas pels seguidors solament o dirèctas se pòdon pas repetir",
+ "no_retweet_hint": "Las publicacions marcadas pels seguidors solament o dirèctas se pòdon pas repetir",
"repeated": "repetit",
"show_new": "Ne veire mai",
"up_to_date": "A jorn",
@@ -477,6 +485,8 @@
"per_day": "per jorn",
"remote_follow": "Seguir a distància",
"statuses": "Estatuts",
+ "subscribe": "S’abonar",
+ "unsubscribe": "Se desabonar",
"unblock": "Desblocar",
"unblock_progress": "Desblocatge...",
"block_progress": "Blocatge...",
@@ -501,7 +511,7 @@
"quarantine": "Defendre la federacion de las publicacions de l’utilizaire",
"delete_user": "Suprimir l’utilizaire",
"delete_user_confirmation": "Volètz vertadièrament far aquò ? Aquesta accion se pòt pas anullar."
- }
+ }
},
"user_profile": {
"timeline_title": "Flux utilizaire",
@@ -532,5 +542,12 @@
"GiB": "Gio",
"TiB": "Tio"
}
+ },
+ "search": {
+ "people": "Gent",
+ "hashtags": "Etiquetas",
+ "person_talking": "{count} persona ne parla",
+ "people_talking": "{count} personas ne parlan",
+ "no_results": "Cap de resultats"
}
}
\ No newline at end of file
diff --git a/src/main.js b/src/main.js
index b3256e8ed7..7923ffe890 100644
--- a/src/main.js
+++ b/src/main.js
@@ -15,6 +15,7 @@ import mediaViewerModule from './modules/media_viewer.js'
import oauthTokensModule from './modules/oauth_tokens.js'
import reportsModule from './modules/reports.js'
import pollsModule from './modules/polls.js'
+import postStatusModule from './modules/postStatus.js'
import VueI18n from 'vue-i18n'
@@ -26,6 +27,7 @@ import messages from './i18n/messages.js'
import VueChatScroll from 'vue-chat-scroll'
import VueClickOutside from 'v-click-outside'
import PortalVue from 'portal-vue'
+import VBodyScrollLock from './directives/body_scroll_lock'
import VTooltip from 'v-tooltip'
import afterStoreSetup from './boot/after_store.js'
@@ -38,6 +40,7 @@ Vue.use(VueI18n)
Vue.use(VueChatScroll)
Vue.use(VueClickOutside)
Vue.use(PortalVue)
+Vue.use(VBodyScrollLock)
Vue.use(VTooltip)
const i18n = new VueI18n({
@@ -76,7 +79,8 @@ const persistedStateOptions = {
mediaViewer: mediaViewerModule,
oauthTokens: oauthTokensModule,
reports: reportsModule,
- polls: pollsModule
+ polls: pollsModule,
+ postStatus: postStatusModule
},
plugins: [persistedState, pushNotifications],
strict: false // Socket modifies itself, let's ignore this for now.
diff --git a/src/modules/postStatus.js b/src/modules/postStatus.js
new file mode 100644
index 0000000000..638c1fb202
--- /dev/null
+++ b/src/modules/postStatus.js
@@ -0,0 +1,25 @@
+const postStatus = {
+ state: {
+ params: null,
+ modalActivated: false
+ },
+ mutations: {
+ openPostStatusModal (state, params) {
+ state.params = params
+ state.modalActivated = true
+ },
+ closePostStatusModal (state) {
+ state.modalActivated = false
+ }
+ },
+ actions: {
+ openPostStatusModal ({ commit }, params) {
+ commit('openPostStatusModal', params)
+ },
+ closePostStatusModal ({ commit }) {
+ commit('closePostStatusModal')
+ }
+ }
+}
+
+export default postStatus
diff --git a/yarn.lock b/yarn.lock
index d6c8b4a682..4e0d9a22b0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1196,6 +1196,11 @@ body-parser@1.18.3, body-parser@^1.16.1:
raw-body "2.3.3"
type-is "~1.6.16"
+body-scroll-lock@^2.6.4:
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-2.6.4.tgz#567abc60ef4d656a79156781771398ef40462e94"
+ integrity sha512-NP08WsovlmxEoZP9pdlqrE+AhNaivlTrz9a0FF37BQsnOrpN48eNqivKkE7SYpM9N+YIPjsdVzfLAUQDBm6OQw==
+
boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"