Commit 8334649c authored by Shpuld Shpludson's avatar Shpuld Shpludson
Browse files

Merge branch 'develop' into feat/report-notification

parents 54def7d2 11963de2
Pipeline #34470 passed with stages
in 8 minutes and 35 seconds
...@@ -3,8 +3,13 @@ All notable changes to this project will be documented in this file. ...@@ -3,8 +3,13 @@ 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/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased] ## [Unreleased]
### Fixed
- Button to remove uploaded media in post status form is now properly placed and sized.
- Fixed shoutbox not working in mobile layout
## [2.2.3] - 2021-01-18
### Added ### Added
- Added Report button to status ellipsis menu for easier reporting - Added Report button to status ellipsis menu for easier reporting
...@@ -12,6 +17,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ...@@ -12,6 +17,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Follows/Followers tabs on user profiles now display the content properly. - Follows/Followers tabs on user profiles now display the content properly.
- Handle punycode in screen names - Handle punycode in screen names
### Changed
- Don't filter own posts when they hit your wordfilter
- Language picker now uses native language names
## [2.2.2] - 2020-12-22 ## [2.2.2] - 2020-12-22
### Added ### Added
- Mouseover titles for emojis in reaction picker - Mouseover titles for emojis in reaction picker
......
...@@ -178,6 +178,13 @@ a { ...@@ -178,6 +178,13 @@ a {
&.-fullwidth { &.-fullwidth {
width: 100%; width: 100%;
} }
&.-hover-highlight {
&:hover svg {
color: $fallback--lightText;
color: var(--lightText, $fallback--lightText);
}
}
} }
input, textarea, .select, .input { input, textarea, .select, .input {
......
...@@ -12,11 +12,11 @@ ...@@ -12,11 +12,11 @@
v-model="language" v-model="language"
> >
<option <option
v-for="(langCode, i) in languageCodes" v-for="lang in languages"
:key="langCode" :key="lang.code"
:value="langCode" :value="lang.code"
> >
{{ languageNames[i] }} {{ lang.name }}
</option> </option>
</select> </select>
<FAIcon <FAIcon
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
<script> <script>
import languagesObject from '../../i18n/messages' import languagesObject from '../../i18n/messages'
import localeService from '../../services/locale/locale.service.js'
import ISO6391 from 'iso-639-1' import ISO6391 from 'iso-639-1'
import _ from 'lodash' import _ from 'lodash'
import { library } from '@fortawesome/fontawesome-svg-core' import { library } from '@fortawesome/fontawesome-svg-core'
...@@ -42,12 +43,8 @@ library.add( ...@@ -42,12 +43,8 @@ library.add(
export default { export default {
computed: { computed: {
languageCodes () { languages () {
return languagesObject.languages return _.map(languagesObject.languages, (code) => ({ code: code, name: this.getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name))
},
languageNames () {
return _.map(this.languageCodes, this.getLanguageName)
}, },
language: { language: {
...@@ -61,12 +58,13 @@ export default { ...@@ -61,12 +58,13 @@ export default {
methods: { methods: {
getLanguageName (code) { getLanguageName (code) {
const specialLanguageNames = { const specialLanguageNames = {
'ja': 'Japanese (日本語)', 'ja_easy': 'やさしいにほんご',
'ja_easy': 'Japanese (やさしいにほんご)', 'zh': '简体中文',
'zh': 'Simplified Chinese (简体中文)', 'zh_Hant': '繁體中文'
'zh_Hant': 'Traditional Chinese (繁體中文)'
} }
return specialLanguageNames[code] || ISO6391.getName(code) const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code)
const browserLocale = localeService.internalToBrowserLocale(code)
return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1)
} }
} }
} }
......
...@@ -21,20 +21,17 @@ ...@@ -21,20 +21,17 @@
@keydown.enter.stop.prevent="nextOption(index)" @keydown.enter.stop.prevent="nextOption(index)"
> >
</div> </div>
<div <button
v-if="options.length > 2" v-if="options.length > 2"
class="icon-container" class="delete-option button-unstyled -hover-highlight"
@click="deleteOption(index)"
> >
<FAIcon <FAIcon icon="times" />
icon="times" </button>
class="delete"
@click="deleteOption(index)"
/>
</div>
</div> </div>
<a <button
v-if="options.length < maxOptions" v-if="options.length < maxOptions"
class="add-option faint" class="add-option faint button-unstyled -hover-highlight"
@click="addOption" @click="addOption"
> >
<FAIcon <FAIcon
...@@ -43,7 +40,7 @@ ...@@ -43,7 +40,7 @@
/> />
{{ $t("polls.add_option") }} {{ $t("polls.add_option") }}
</a> </button>
<div class="poll-type-expiry"> <div class="poll-type-expiry">
<div <div
class="poll-type" class="poll-type"
...@@ -116,7 +113,6 @@ ...@@ -116,7 +113,6 @@
align-self: flex-start; align-self: flex-start;
padding-top: 0.25em; padding-top: 0.25em;
padding-left: 0.1em; padding-left: 0.1em;
cursor: pointer;
} }
.poll-option { .poll-option {
...@@ -135,19 +131,11 @@ ...@@ -135,19 +131,11 @@
} }
} }
.icon-container { .delete-option {
// Hack: Move the icon over the input box // Hack: Move the icon over the input box
width: 1.5em; width: 1.5em;
margin-left: -1.5em; margin-left: -1.5em;
z-index: 1; z-index: 1;
.delete {
cursor: pointer;
&:hover {
color: inherit;
}
}
} }
.poll-type-expiry { .poll-type-expiry {
......
...@@ -302,11 +302,12 @@ ...@@ -302,11 +302,12 @@
:key="file.url" :key="file.url"
class="media-upload-wrapper" class="media-upload-wrapper"
> >
<FAIcon <button
class="fa-scale-110 fa-old-padding" class="button-unstyled hider"
icon="times"
@click="removeMediaFile(file)" @click="removeMediaFile(file)"
/> >
<FAIcon icon="times" />
</button>
<attachment <attachment
:attachment="file" :attachment="file"
:set-media="() => $store.dispatch('setMedia', newStatus.files)" :set-media="() => $store.dispatch('setMedia', newStatus.files)"
...@@ -516,26 +517,11 @@ ...@@ -516,26 +517,11 @@
} }
.attachments .media-upload-wrapper { .attachments .media-upload-wrapper {
padding: 0 0.5em; position: relative;
.attachment { .attachment {
margin: 0; margin: 0;
padding: 0; padding: 0;
position: relative;
}
.fa-scale-110 fa-old-padding {
position: absolute;
margin: 10px;
margin: .75em;
padding: .5em;
background: rgba(230,230,230,0.6);
z-index: 2;
color: black;
border-radius: $fallback--attachmentRadius;
border-radius: var(--attachmentRadius, $fallback--attachmentRadius);
font-weight: bold;
cursor: pointer;
} }
} }
......
...@@ -111,16 +111,17 @@ ...@@ -111,16 +111,17 @@
.profile-fields { .profile-fields {
display: flex; display: flex;
&>.emoji-input { & > .emoji-input {
flex: 1 1 auto; flex: 1 1 auto;
margin: 0 .2em .5em; margin: 0 0.2em 0.5em;
min-width: 0; min-width: 0;
} }
&>.icon-container { .delete-field {
width: 20px; width: 20px;
align-self: center; align-self: center;
margin: 0 .2em .5em; margin: 0 0.2em 0.5em;
padding: 0 0.5em;
} }
} }
} }
...@@ -124,24 +124,24 @@ ...@@ -124,24 +124,24 @@
:placeholder="$t('settings.profile_fields.value')" :placeholder="$t('settings.profile_fields.value')"
> >
</EmojiInput> </EmojiInput>
<div <button
class="icon-container" class="delete-field button-unstyled -hover-highlight"
@click="deleteField(i)"
> >
<FAIcon <FAIcon
v-show="newFields.length > 1" v-show="newFields.length > 1"
icon="times" icon="times"
@click="deleteField(i)"
/> />
</div> </button>
</div> </div>
<a <button
v-if="newFields.length < maxFields" v-if="newFields.length < maxFields"
class="add-field faint" class="add-field faint button-unstyled -hover-highlight"
@click="addField" @click="addField"
> >
<FAIcon icon="plus" /> <FAIcon icon="plus" />
{{ $t("settings.profile_fields.add_field") }} {{ $t("settings.profile_fields.add_field") }}
</a> </button>
</div> </div>
<p> <p>
<Checkbox v-model="bot"> <Checkbox v-model="bot">
......
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
v-if="chat" v-if="chat"
@click="toggleDrawer" @click="toggleDrawer"
> >
<router-link :to="{ name: 'chat' }"> <router-link :to="{ name: 'chat-panel' }">
<FAIcon <FAIcon
fixed-width fixed-width
class="fa-scale-110 fa-old-padding" class="fa-scale-110 fa-old-padding"
......
...@@ -157,6 +157,7 @@ const Status = { ...@@ -157,6 +157,7 @@ const Status = {
return muteWordHits(this.status, this.muteWords) return muteWordHits(this.status, this.muteWords)
}, },
muted () { muted () {
if (this.statusoid.user.id === this.currentUser.id) return false
const { status } = this const { status } = this
const { reblog } = status const { reblog } = status
const relationship = this.$store.getters.relationship(status.user.id) const relationship = this.$store.getters.relationship(status.user.id)
......
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
v-if="!!visibleRole" v-if="!!visibleRole"
class="alert user-role" class="alert user-role"
> >
{{ visibleRole }} {{ $t(`user_card.roles.${visibleRole}`) }}
</span> </span>
<span <span
v-if="user.bot" v-if="user.bot"
...@@ -507,7 +507,6 @@ ...@@ -507,7 +507,6 @@
.user-role { .user-role {
flex: none; flex: none;
text-transform: capitalize;
color: $fallback--text; color: $fallback--text;
color: var(--alertNeutralText, $fallback--text); color: var(--alertNeutralText, $fallback--text);
background-color: $fallback--fg; background-color: $fallback--fg;
......
...@@ -740,6 +740,10 @@ ...@@ -740,6 +740,10 @@
"quarantine": "Disallow user posts from federating", "quarantine": "Disallow user posts from federating",
"delete_user": "Delete user", "delete_user": "Delete user",
"delete_user_confirmation": "Are you absolutely sure? This action cannot be undone." "delete_user_confirmation": "Are you absolutely sure? This action cannot be undone."
},
"roles": {
"admin": "Admin",
"moderator": "Moderator"
} }
}, },
"user_profile": { "user_profile": {
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
"administration": "Amministrazione", "administration": "Amministrazione",
"back": "Indietro", "back": "Indietro",
"interactions": "Interazioni", "interactions": "Interazioni",
"dms": "Messaggi diretti", "dms": "Messaggi privati",
"user_search": "Ricerca utenti", "user_search": "Ricerca utenti",
"search": "Ricerca", "search": "Ricerca",
"who_to_follow": "Chi seguire", "who_to_follow": "Chi seguire",
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
"notifications": "Notifiche", "notifications": "Notifiche",
"read": "Letto!", "read": "Letto!",
"broken_favorite": "Stato sconosciuto, lo sto cercando…", "broken_favorite": "Stato sconosciuto, lo sto cercando…",
"favorited_you": "ha gradito il tuo messaggio", "favorited_you": "gradisce il tuo messaggio",
"load_older": "Carica notifiche precedenti", "load_older": "Carica notifiche precedenti",
"repeated_you": "ha condiviso il tuo messaggio", "repeated_you": "ha condiviso il tuo messaggio",
"follow_request": "vuole seguirti", "follow_request": "vuole seguirti",
...@@ -487,7 +487,11 @@ ...@@ -487,7 +487,11 @@
"follow_progress": "Richiedo…", "follow_progress": "Richiedo…",
"follow_sent": "Richiesta inviata!", "follow_sent": "Richiesta inviata!",
"favorites": "Preferiti", "favorites": "Preferiti",
"message": "Contatta" "message": "Contatta",
"roles": {
"moderator": "Moderatore",
"admin": "Amministratore"
}
}, },
"chat": { "chat": {
"title": "Chat" "title": "Chat"
...@@ -495,7 +499,7 @@ ...@@ -495,7 +499,7 @@
"features_panel": { "features_panel": {
"chat": "Chat", "chat": "Chat",
"gopher": "Gopher", "gopher": "Gopher",
"media_proxy": "Proxy multimedia", "media_proxy": "Proxy allegati",
"scope_options": "Opzioni visibilità", "scope_options": "Opzioni visibilità",
"text_limit": "Lunghezza massima", "text_limit": "Lunghezza massima",
"title": "Caratteristiche", "title": "Caratteristiche",
...@@ -505,7 +509,7 @@ ...@@ -505,7 +509,7 @@
}, },
"finder": { "finder": {
"error_fetching_user": "Errore nel recupero dell'utente", "error_fetching_user": "Errore nel recupero dell'utente",
"find_user": "Trova utente" "find_user": "Cerca utente"
}, },
"login": { "login": {
"login": "Accedi", "login": "Accedi",
...@@ -515,18 +519,18 @@ ...@@ -515,18 +519,18 @@
"register": "Registrati", "register": "Registrati",
"username": "Nome utente", "username": "Nome utente",
"description": "Accedi con OAuth", "description": "Accedi con OAuth",
"hint": "Accedi per partecipare alla discussione", "hint": "Accedi per conversare",
"authentication_code": "Codice di autenticazione", "authentication_code": "Codice di autenticazione",
"enter_recovery_code": "Inserisci un codice di recupero", "enter_recovery_code": "Inserisci un codice di recupero",
"enter_two_factor_code": "Inserisci un codice two-factor", "enter_two_factor_code": "Inserisci un codice 2FA",
"recovery_code": "Codice di recupero", "recovery_code": "Codice di recupero",
"heading": { "heading": {
"totp": "Autenticazione two-factor", "totp": "Autenticazione 2FA",
"recovery": "Recupero two-factor" "recovery": "Recupero 2FA"
} }
}, },
"post_status": { "post_status": {
"account_not_locked_warning": "Il tuo profilo non è {0}. Chiunque può seguirti e vedere i tuoi messaggi riservati ai tuoi seguaci.", "account_not_locked_warning": "Il tuo profilo non è {0}. Chiunque può seguirti e vedere i tuoi messaggi per seguaci.",
"account_not_locked_warning_link": "protetto", "account_not_locked_warning_link": "protetto",
"attachments_sensitive": "Nascondi gli allegati", "attachments_sensitive": "Nascondi gli allegati",
"content_type": { "content_type": {
...@@ -536,7 +540,7 @@ ...@@ -536,7 +540,7 @@
"text/html": "HTML" "text/html": "HTML"
}, },
"content_warning": "Oggetto (facoltativo)", "content_warning": "Oggetto (facoltativo)",
"default": "Sono appena atterrato a Fiumicino.", "default": "Sono appena atterrato a Città Laggiù.",
"direct_warning": "Questo post sarà visibile solo dagli utenti menzionati.", "direct_warning": "Questo post sarà visibile solo dagli utenti menzionati.",
"posting": "Sto pubblicando", "posting": "Sto pubblicando",
"scope": { "scope": {
...@@ -611,13 +615,13 @@ ...@@ -611,13 +615,13 @@
"ftl_removal_desc": "Questa stanza rimuove le seguenti dalla sequenza globale:", "ftl_removal_desc": "Questa stanza rimuove le seguenti dalla sequenza globale:",
"media_removal": "Rimozione multimedia", "media_removal": "Rimozione multimedia",
"media_removal_desc": "Questa istanza rimuove gli allegati dalle seguenti stanze:", "media_removal_desc": "Questa istanza rimuove gli allegati dalle seguenti stanze:",
"media_nsfw": "Allegati oscurati forzatamente", "media_nsfw": "Allegati oscurati d'ufficio",
"media_nsfw_desc": "Questa stanza oscura gli allegati dei messaggi provenienti da queste stanze:" "media_nsfw_desc": "Questa stanza oscura gli allegati dei messaggi provenienti da queste stanze:"
}, },
"mrf_policies": "Regole RM abilitate", "mrf_policies": "Regole RM abilitate",
"mrf_policies_desc": "Le regole RM cambiano il comportamento federativo della stanza. Vigono le seguenti regole:" "mrf_policies_desc": "Le regole RM cambiano il comportamento federativo della stanza. Vigono le seguenti regole:"
}, },
"staff": "Equipaggio" "staff": "Responsabili"
}, },
"domain_mute_card": { "domain_mute_card": {
"mute": "Zittisci", "mute": "Zittisci",
...@@ -646,20 +650,20 @@ ...@@ -646,20 +650,20 @@
}, },
"polls": { "polls": {
"add_poll": "Sondaggio", "add_poll": "Sondaggio",
"add_option": "Alternativa", "add_option": "Aggiungi opzione",
"option": "Opzione", "option": "Opzione",
"votes": "voti", "votes": "voti",
"vote": "Vota", "vote": "Vota",
"type": "Tipo di sondaggio", "type": "Tipo di sondaggio",
"single_choice": "Scelta singola", "single_choice": "Scelta singola",
"multiple_choices": "Scelta multipla", "multiple_choices": "Scelta multipla",
"expiry": "Scadenza", "expiry": "Età",
"expires_in": "Scade fra {0}", "expires_in": "Chiude fra {0}",
"expired": "Scaduto {0} fa", "expired": "Chiuso {0} fa",
"not_enough_options": "Aggiungi altre risposte" "not_enough_options": "Aggiungi altre risposte"
}, },
"interactions": { "interactions": {
"favs_repeats": "Condivisi e preferiti", "favs_repeats": "Condivisi e Graditi",
"load_older": "Carica vecchie interazioni", "load_older": "Carica vecchie interazioni",
"moves": "Utenti migrati",