Merge remote-tracking branch 'origin/develop' into shigusegubu
* origin/develop: Translated using Weblate (Esperanto) Translated using Weblate (Esperanto) Translated using Weblate (Esperanto) Translated using Weblate (Chinese (Simplified)) Translated using Weblate (Chinese (Simplified)) Translated using Weblate (Chinese (Traditional)) Translated using Weblate (Chinese (Simplified)) Translated using Weblate (Esperanto) Translated using Weblate (Esperanto) document thie this. check Apply 1 suggestion(s) to 1 file(s) change input blocking to use css update changelog update changelog block clicks for a second when timeline moves fix back button size, fix missing chat notifications being marked as read too eagerly, fix promiseinterval erroring when not getting a promise
This commit is contained in:
commit
0733d17cd5
11 changed files with 113 additions and 48 deletions
|
@ -12,6 +12,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||
- Fixed chats list not updating its order when new messages come in
|
||||
- Fixed chat messages sometimes getting lost when you receive a message at the same time
|
||||
- Fixed clicking NSFW hider through status popover
|
||||
- Fixed chat-view back button being hard to click
|
||||
- Fixed fresh chat notifications being cleared immediately while leaving the chat view and not having time to actually see the messages
|
||||
|
||||
### Changed
|
||||
- Clicking immediately when timeline shifts is now blocked to prevent misclicks
|
||||
|
||||
### Added
|
||||
- Import/export a muted users
|
||||
|
|
|
@ -21,6 +21,7 @@ library.add(
|
|||
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: {
|
||||
|
@ -104,7 +105,7 @@ const Chat = {
|
|||
const bottomedOutBeforeUpdate = this.bottomedOut(BOTTOMED_OUT_OFFSET)
|
||||
this.$nextTick(() => {
|
||||
if (bottomedOutBeforeUpdate) {
|
||||
this.scrollDown({ forceRead: !document.hidden })
|
||||
this.scrollDown()
|
||||
}
|
||||
})
|
||||
},
|
||||
|
@ -210,7 +211,7 @@ const Chat = {
|
|||
this.$nextTick(() => {
|
||||
scrollable.scrollTo({ top: scrollable.scrollHeight, left: 0, behavior })
|
||||
})
|
||||
if (forceRead || this.newMessageCount > 0) {
|
||||
if (forceRead) {
|
||||
this.readChat()
|
||||
}
|
||||
},
|
||||
|
@ -235,12 +236,18 @@ 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(() => {
|
||||
// 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)
|
||||
}
|
||||
} else {
|
||||
this.jumpToBottomButtonVisible = true
|
||||
}
|
||||
}, 100),
|
||||
}, 200),
|
||||
handleScrollUp (positionBeforeLoading) {
|
||||
const positionAfterLoading = getScrollPosition(this.$refs.scrollable)
|
||||
this.$refs.scrollable.scrollTo({
|
||||
|
|
|
@ -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,8 +58,10 @@
|
|||
|
||||
.go-back-button {
|
||||
cursor: pointer;
|
||||
margin-right: 1.7em;
|
||||
margin-left: 0.3em;
|
||||
width: 28px;
|
||||
text-align: center;
|
||||
padding: 0.6em;
|
||||
margin: -0.6em 0.6em -0.6em -0.6em;
|
||||
}
|
||||
|
||||
.jump-to-bottom-button {
|
||||
|
@ -74,7 +76,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);
|
||||
|
|
|
@ -23,7 +23,9 @@
|
|||
|
||||
.go-back-button {
|
||||
cursor: pointer;
|
||||
margin-right: 1.7em;
|
||||
margin-left: 0.3em;
|
||||
width: 28px;
|
||||
text-align: center;
|
||||
padding: 0.6em;
|
||||
margin: -0.6em 0.6em -0.6em -0.6em;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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'
|
||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons'
|
||||
|
||||
|
@ -40,7 +40,8 @@ const Timeline = {
|
|||
paused: false,
|
||||
unfocused: false,
|
||||
bottomedOut: false,
|
||||
virtualScrollIndex: 0
|
||||
virtualScrollIndex: 0,
|
||||
blockingClicks: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
|
@ -70,8 +71,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'] : [])
|
||||
|
@ -130,6 +133,15 @@ const Timeline = {
|
|||
this.$store.commit('setLoading', { timeline: this.timelineName, value: false })
|
||||
},
|
||||
methods: {
|
||||
stopBlockingClicks: debounce(function () {
|
||||
this.blockingClicks = false
|
||||
}, 1000),
|
||||
blockClicksTemporarily () {
|
||||
if (!this.blockingClicks) {
|
||||
this.blockingClicks = true
|
||||
}
|
||||
this.stopBlockingClicks()
|
||||
},
|
||||
handleShortKey (e) {
|
||||
// Ignore when input fields are focused
|
||||
if (['textarea', 'input'].includes(e.target.tagName.toLowerCase())) return
|
||||
|
@ -141,6 +153,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
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div :class="[classes.root, 'timeline']">
|
||||
<div :class="[classes.root, 'Timeline']">
|
||||
<div :class="classes.header">
|
||||
<TimelineMenu v-if="!embedded" />
|
||||
<div
|
||||
|
@ -107,10 +107,14 @@
|
|||
<style lang="scss">
|
||||
@import '../../_variables.scss';
|
||||
|
||||
.timeline {
|
||||
.Timeline {
|
||||
.loadmore-text {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&.-blocked {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
.timeline-heading {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"features_panel": {
|
||||
"chat": "Babilejo",
|
||||
"gopher": "Gopher",
|
||||
"media_proxy": "Vidaŭdaĵa prokurilo",
|
||||
"media_proxy": "Vidaŭdaĵa retperilo",
|
||||
"scope_options": "Agordoj de amplekso",
|
||||
"text_limit": "Limo de teksto",
|
||||
"title": "Funkcioj",
|
||||
|
@ -33,7 +33,8 @@
|
|||
"show_more": "Montri plion",
|
||||
"retry": "Reprovi",
|
||||
"error_retry": "Bonvolu reprovi",
|
||||
"loading": "Enlegante…"
|
||||
"loading": "Enlegante…",
|
||||
"peek": "Antaŭmontri"
|
||||
},
|
||||
"image_cropper": {
|
||||
"crop_picture": "Tondi bildon",
|
||||
|
@ -70,9 +71,9 @@
|
|||
"friend_requests": "Petoj pri abono",
|
||||
"mentions": "Mencioj",
|
||||
"dms": "Rektaj mesaĝoj",
|
||||
"public_tl": "Publika tempolinio",
|
||||
"timeline": "Tempolinio",
|
||||
"twkn": "La tuta konata reto",
|
||||
"public_tl": "Publika historio",
|
||||
"timeline": "Historio",
|
||||
"twkn": "Konata reto",
|
||||
"user_search": "Serĉi uzantojn",
|
||||
"who_to_follow": "Kiun aboni",
|
||||
"preferences": "Agordoj",
|
||||
|
@ -80,7 +81,8 @@
|
|||
"search": "Serĉi",
|
||||
"interactions": "Interagoj",
|
||||
"administration": "Administrado",
|
||||
"bookmarks": "Legosignoj"
|
||||
"bookmarks": "Legosignoj",
|
||||
"timelines": "Historioj"
|
||||
},
|
||||
"notifications": {
|
||||
"broken_favorite": "Nekonata stato, serĉante ĝin…",
|
||||
|
@ -107,14 +109,14 @@
|
|||
"text/html": "HTML"
|
||||
},
|
||||
"content_warning": "Temo (malnepra)",
|
||||
"default": "Ĵus alvenis al la Universala Kongreso!",
|
||||
"default": "Ĵus alvenis Esperantujon!",
|
||||
"direct_warning": "Ĉi tiu afiŝo estos videbla nur por ĉiuj menciitaj uzantoj.",
|
||||
"posting": "Afiŝante",
|
||||
"scope": {
|
||||
"direct": "Rekta – Afiŝi nur al menciitaj uzantoj",
|
||||
"private": "Nur abonantoj – Afiŝi nur al abonantoj",
|
||||
"public": "Publika – Afiŝi al publikaj tempolinioj",
|
||||
"unlisted": "Nelistigita – Ne afiŝi al publikaj tempolinioj"
|
||||
"public": "Publika – Afiŝi al publikaj historioj",
|
||||
"unlisted": "Nelistigita – Ne afiŝi al publikaj historioj"
|
||||
},
|
||||
"scope_notice": {
|
||||
"unlisted": "Ĉi tiu afiŝo ne estos videbla en la Publika historio kaj La tuta konata reto",
|
||||
|
@ -193,7 +195,7 @@
|
|||
"foreground": "Malfono",
|
||||
"general": "Ĝenerala",
|
||||
"hide_attachments_in_convo": "Kaŝi kunsendaĵojn en interparoloj",
|
||||
"hide_attachments_in_tl": "Kaŝi kunsendaĵojn en tempolinio",
|
||||
"hide_attachments_in_tl": "Kaŝi kunsendaĵojn en historioj",
|
||||
"max_thumbnails": "Maksimuma nombro da bildetoj en afiŝo",
|
||||
"hide_isp": "Kaŝi breton propran al nodo",
|
||||
"preload_images": "Antaŭ-enlegi bildojn",
|
||||
|
@ -246,7 +248,7 @@
|
|||
"profile_banner": "Rubando de profilo",
|
||||
"profile_tab": "Profilo",
|
||||
"radii_help": "Agordi fasadan rondigon de randoj (bildere)",
|
||||
"replies_in_timeline": "Respondoj en tempolinio",
|
||||
"replies_in_timeline": "Respondoj en historioj",
|
||||
"reply_visibility_all": "Montri ĉiujn respondojn",
|
||||
"reply_visibility_following": "Montri nur respondojn por mi aŭ miaj abonatoj",
|
||||
"reply_visibility_self": "Montri nur respondojn por mi",
|
||||
|
@ -297,7 +299,12 @@
|
|||
"older_version_imported": "La enportita dosiero estis farita per pli malnova versio de PleromaFE.",
|
||||
"future_version_imported": "La enportita dosiero estis farita per pli nova versio de PleromaFE.",
|
||||
"v2_imported": "La dosiero, kiun vi enportis, estis farita por malnova versio de PleromaFE. Ni provas maksimumigi interkonformecon, sed tamen eble montriĝos misoj.",
|
||||
"upgraded_from_v2": "PleromaFE estis ĝisdatigita; la haŭto eble aspektos malsame ol kiel vi ĝin memoras."
|
||||
"upgraded_from_v2": "PleromaFE estis ĝisdatigita; la haŭto eble aspektos malsame ol kiel vi ĝin memoras.",
|
||||
"snapshot_missing": "Neniu momentokopio de haŭto estis en la dosiero, ĝi povas aspekti iom malsame ol oni intencis.",
|
||||
"snapshot_present": "Ĉiuj valoroj estas transpasataj, ĉar momentokopio de haŭto estas enlegita. Vi povas enlegi anstataŭe la aktualajn datumojn de haŭto.",
|
||||
"snapshot_source_mismatch": "Versioj konfliktas: plej probable la fasado estis reirigita kaj ree ĝisdatigita; se vi ŝanĝis la haŭton per pli malnova versio de la fasado, vi probable volas uzi la malnovan version. Alie uzu la novan.",
|
||||
"migration_napshot_gone": "Ial mankis momentokopio; io povus aspekti malsame ol en via memoro.",
|
||||
"migration_snapshot_ok": "Certige, momentokopio de la haŭto enlegiĝis. Vi povas provi enlegi datumojn de la haŭto."
|
||||
},
|
||||
"use_source": "Nova versio",
|
||||
"use_snapshot": "Malnova versio",
|
||||
|
@ -352,10 +359,11 @@
|
|||
"icons": "Bildsimboloj",
|
||||
"poll": "Grafo de enketo",
|
||||
"underlay": "Subtavolo",
|
||||
"popover": "Ŝpruchelpiloj, menuoj",
|
||||
"popover": "Ŝprucaĵoj, menuoj",
|
||||
"post": "Afiŝoj/Priskriboj de uzantoj",
|
||||
"alert_neutral": "Neŭtrala",
|
||||
"alert_warning": "Averto"
|
||||
"alert_warning": "Averto",
|
||||
"toggled": "Ŝaltita"
|
||||
},
|
||||
"radii": {
|
||||
"_tab_label": "Rondeco"
|
||||
|
@ -388,7 +396,8 @@
|
|||
"buttonPressed": "Butono (premita)",
|
||||
"buttonPressedHover": "Butono (premita kaj je ŝvebo)",
|
||||
"input": "Eniga kampo"
|
||||
}
|
||||
},
|
||||
"hintV3": "Kolorojn de ombroj vi ankaŭ povas skribi per la sistemo {0}."
|
||||
},
|
||||
"fonts": {
|
||||
"_tab_label": "Tiparoj",
|
||||
|
@ -411,7 +420,7 @@
|
|||
"button": "Butono",
|
||||
"text": "Kelko da pliaj {0} kaj {1}",
|
||||
"mono": "enhavo",
|
||||
"input": "Ĵus alvenis al la Universala Kongreso!",
|
||||
"input": "Ĵus alvenis Esperantujon!",
|
||||
"faint_link": "helpan manlibron",
|
||||
"fine_print": "Legu nian {0} por nenion utilan ekscii!",
|
||||
"header_faint": "Tio estas en ordo",
|
||||
|
@ -420,7 +429,7 @@
|
|||
}
|
||||
},
|
||||
"discoverable": "Permesi trovon de ĉi tiu konto en serĉrezultoj kaj aliaj servoj",
|
||||
"mutes_and_blocks": "Silentigitoj kaj blokitoj",
|
||||
"mutes_and_blocks": "Blokado kaj silentigoj",
|
||||
"chatMessageRadius": "Babileja mesaĝo",
|
||||
"changed_email": "Retpoŝtadreso sukcese ŝanĝiĝis!",
|
||||
"change_email_error": "Eraris ŝanĝo de via retpoŝtadreso.",
|
||||
|
@ -448,7 +457,10 @@
|
|||
"warning_of_generate_new_codes": "Kiam vi estigos novajn rehavajn kodojn, viaj malnovaj ne plu funkcios.",
|
||||
"generate_new_recovery_codes": "Estigi novajn rehavajn kodojn",
|
||||
"title": "Duobla aŭtentikigo",
|
||||
"otp": "OTP"
|
||||
"otp": "OTP",
|
||||
"wait_pre_setup_otp": "antaŭagordante OTP",
|
||||
"setup_otp": "Agordi OTP",
|
||||
"confirm_and_enable": "Konfirmi kaj ŝalti OTP"
|
||||
},
|
||||
"enter_current_password_to_confirm": "Enigu vian pasvorton por konfirmi vian identecon",
|
||||
"security": "Sekureco",
|
||||
|
@ -480,11 +492,11 @@
|
|||
},
|
||||
"import_blocks_from_a_csv_file": "Enporti blokitojn el CSV-dosiero",
|
||||
"hide_muted_posts": "Kaŝi afiŝojn de silentigitaj uzantoj",
|
||||
"emoji_reactions_on_timeline": "Montri bildosignajn reagojn en la tempolinio",
|
||||
"emoji_reactions_on_timeline": "Montri bildosignajn reagojn en historioj",
|
||||
"pad_emoji": "Meti spacetojn ĉirkaŭ bildosigno post ties elekto",
|
||||
"domain_mutes": "Retnomoj",
|
||||
"notification_blocks": "Blokinte uzanton vi malabonos ĝin kaj haltigos ĉiujn sciigojn.",
|
||||
"notification_mutes": "Por ne plu ricevi sciigojn de certa uzanto, silentigu.",
|
||||
"notification_mutes": "Por ne plu ricevi sciigojn de certa uzanto, silentigu ĝin.",
|
||||
"notification_setting_hide_notification_contents": "Kaŝi la sendinton kaj la enhavojn de pasivaj sciigoj",
|
||||
"notification_setting_privacy": "Privateco",
|
||||
"notification_setting_block_from_strangers": "Bloki sciigojn de uzantoj, kiujn vi ne abonas",
|
||||
|
@ -495,7 +507,14 @@
|
|||
"backend_version": "Versio de internaĵo",
|
||||
"title": "Versio"
|
||||
},
|
||||
"accent": "Emfazo"
|
||||
"accent": "Emfazo",
|
||||
"virtual_scrolling": "Optimumigi bildigon de historioj",
|
||||
"import_mutes_from_a_csv_file": "Enporti silentigojn el CSV-dosiero",
|
||||
"mutes_imported": "Silentigoj enportiĝis! Traktado daŭros iom da tempo.",
|
||||
"mute_import_error": "Eraris enporto de silentigoj",
|
||||
"mute_import": "Enporto de silentigoj",
|
||||
"mute_export_button": "Elportu viajn silentigojn al CSV-dosiero",
|
||||
"mute_export": "Elporto de silentigoj"
|
||||
},
|
||||
"timeline": {
|
||||
"collapse": "Maletendi",
|
||||
|
@ -503,7 +522,7 @@
|
|||
"error_fetching": "Eraris ĝisdatigo",
|
||||
"load_older": "Montri pli malnovajn statojn",
|
||||
"no_retweet_hint": "Afiŝo estas markita kiel rekta aŭ nur por abonantoj, kaj ne eblas ĝin ripeti",
|
||||
"repeated": "ripetita",
|
||||
"repeated": "ripetis",
|
||||
"show_new": "Montri novajn",
|
||||
"up_to_date": "Ĝisdata",
|
||||
"no_more_statuses": "Neniuj pliaj statoj",
|
||||
|
@ -648,21 +667,22 @@
|
|||
"media_nsfw": "Devige marki vidaŭdaĵojn konsternaj",
|
||||
"media_removal_desc": "Ĉi tiu nodo forigas vidaŭdaĵojn de afiŝoj el la jenaj nodoj:",
|
||||
"media_removal": "Forigo de vidaŭdaĵoj",
|
||||
"ftl_removal": "Forigo de la historio de «La tuta konata reto»",
|
||||
"ftl_removal": "Forigo el la historio de «La tuta konata reto»",
|
||||
"quarantine_desc": "Ĉi tiu nodo sendos nur publikajn afiŝojn al la jenaj nodoj:",
|
||||
"quarantine": "Kvaranteno",
|
||||
"reject_desc": "Ĉi tiu nodo ne akceptos mesaĝojn de la jenaj nodoj:",
|
||||
"reject": "Rifuzi",
|
||||
"accept_desc": "Ĉi tiu nodo nur akceptas mesaĝojn de la jenaj nodoj:",
|
||||
"accept": "Akcepti",
|
||||
"simple_policies": "Specialaj politikoj de la nodo"
|
||||
"simple_policies": "Specialaj politikoj de la nodo",
|
||||
"ftl_removal_desc": "Ĉi tiu nodo forigas la jenajn nodojn el la historio de «La tuta konata reto»:"
|
||||
},
|
||||
"mrf_policies": "Ŝaltis politikon de Mesaĝa ŝanĝilaro (MRF)",
|
||||
"keyword": {
|
||||
"is_replaced_by": "→",
|
||||
"replace": "Anstataŭigi",
|
||||
"reject": "Rifuzi",
|
||||
"ftl_removal": "Forigo de la historio de «La tuta konata reto»",
|
||||
"ftl_removal": "Forigo el la historio de «La tuta konata reto»",
|
||||
"keyword_policies": "Politiko pri ŝlosilvortoj"
|
||||
},
|
||||
"federation": "Federado",
|
||||
|
@ -707,7 +727,8 @@
|
|||
"pin": "Fiksi al profilo",
|
||||
"delete": "Forigi staton",
|
||||
"repeats": "Ripetoj",
|
||||
"favorites": "Ŝatataj"
|
||||
"favorites": "Ŝatoj",
|
||||
"status_deleted": "Ĉi tiu afiŝo foriĝis"
|
||||
},
|
||||
"time": {
|
||||
"years_short": "{0}j",
|
||||
|
@ -769,7 +790,8 @@
|
|||
"new": "Nova babilo",
|
||||
"chats": "Babiloj",
|
||||
"delete": "Forigi",
|
||||
"you": "Vi:"
|
||||
"you": "Vi:",
|
||||
"message_user": "Mesaĝi al {nickname}"
|
||||
},
|
||||
"password_reset": {
|
||||
"password_reset_required_but_mailer_is_disabled": "Vi devas restarigi vian pasvorton, sed restarigado de pasvortoj estas malŝaltita. Bonvolu kontakti la administranton de via nodo.",
|
||||
|
@ -791,5 +813,8 @@
|
|||
"additional_comments": "Aldonaj komentoj",
|
||||
"add_comment_description": "Ĉi tiu raporto sendiĝos al reguligistoj de via nodo. Vi povas komprenigi kial vi raportas ĉi tiun konton sube:",
|
||||
"title": "Raportante {0}"
|
||||
},
|
||||
"shoutbox": {
|
||||
"title": "Kriujo"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
"repeated_you": "转发了你的状态",
|
||||
"no_more_notifications": "没有更多的通知",
|
||||
"reacted_with": "作出了 {0} 的反应",
|
||||
"migrated_to": "迁移到",
|
||||
"migrated_to": "迁移到了",
|
||||
"follow_request": "想要关注你"
|
||||
},
|
||||
"polls": {
|
||||
|
@ -165,7 +165,7 @@
|
|||
"registration": {
|
||||
"bio": "简介",
|
||||
"email": "电子邮箱",
|
||||
"fullname": "全名",
|
||||
"fullname": "显示名称",
|
||||
"password_confirm": "确认密码",
|
||||
"registration": "注册",
|
||||
"token": "邀请码",
|
||||
|
@ -322,7 +322,7 @@
|
|||
"search_user_to_mute": "搜索你想要隐藏的用户",
|
||||
"security_tab": "安全",
|
||||
"scope_copy": "回复时的复制范围(私信是总是复制的)",
|
||||
"minimal_scopes_mode": "最小发文范围",
|
||||
"minimal_scopes_mode": "使发文可见范围的选项最少化",
|
||||
"set_new_avatar": "设置新头像",
|
||||
"set_new_profile_background": "设置新的个人资料背景",
|
||||
"set_new_profile_banner": "设置新的横幅图片",
|
||||
|
|
|
@ -680,7 +680,7 @@
|
|||
"fullname": "顯示名稱",
|
||||
"bio_placeholder": "例如:\n你好,我是玲音。\n我是一個住在日本郊區的動畫少女。你可能在 Wired 見過我。",
|
||||
"fullname_placeholder": "例如:岩倉玲音",
|
||||
"username_placeholder": "例如:玲音",
|
||||
"username_placeholder": "例如:lain",
|
||||
"new_captcha": "點擊圖片獲取新的驗證碼",
|
||||
"captcha": "CAPTCHA",
|
||||
"token": "邀請碼",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
|
|
Loading…
Add table
Reference in a new issue