diff --git a/CHANGELOG.md b/CHANGELOG.md
index dd4a28360f..4f270bfeaf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,10 +5,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
+### Fixed
+- Follows/Followers tabs on user profiles now display the content properly.
+- Handle punycode in screen names
+
+## [2.2.2] - 2020-12-22
### Added
- Mouseover titles for emojis in reaction picker
- Support to input emoji into the search box in reaction picker
- Added some missing unicode emoji
+- Added the upload limit to the Features panel in the About page
+- Support for solid color wallpaper, instance doesn't have to define a wallpaper anymore
### Fixed
- Fixed the occasional bug where screen would scroll 1px when typing into a reply form
@@ -17,11 +24,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fixed custom emoji not working in profile field names
- Fixed pinned statuses not appearing in user profiles
- Fixed some elements not being keyboard navigation friendly
+- Fixed error handling when updating various profile images
- Fixed your latest chat messages disappearing when closing chat view and opening it again during the same session
+- Fixed custom emoji not showing in poll options before voting
+- Fixed link color not applied to instance name in topbar
### Changed
- Errors when fetching are now shown with popup errors instead of "Error fetching updates" in panel headers
- Made reply/fav/repeat etc buttons easier to hit
+- Adjusted timeline menu clickable area to match the visible button
+- Moved external source link from status heading to the ellipsis menu
+- Disabled horizontal textarea resize
+- Wallpaper is now top-aligned, horizontally centered.
## [2.2.1] - 2020-11-11
diff --git a/package.json b/package.json
index 14738c3eb3..e11396bf68 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
"parse-link-header": "^1.0.1",
"phoenix": "^1.3.0",
"portal-vue": "^2.1.4",
+ "punycode.js": "^2.1.0",
"v-click-outside": "^2.1.1",
"vue": "^2.6.11",
"vue-chat-scroll": "^1.2.1",
@@ -55,7 +56,7 @@
"babel-plugin-lodash": "^3.3.4",
"chai": "^3.5.0",
"chalk": "^1.1.3",
- "chromedriver": "^2.21.2",
+ "chromedriver": "^87.0.1",
"connect-history-api-fallback": "^1.1.0",
"cross-spawn": "^4.0.2",
"css-loader": "^0.28.0",
diff --git a/src/App.js b/src/App.js
index 5270031915..1ca029b69a 100644
--- a/src/App.js
+++ b/src/App.js
@@ -15,6 +15,7 @@ import UserReportingModal from './components/user_reporting_modal/user_reporting
import PostStatusModal from './components/post_status_modal/post_status_modal.vue'
import GlobalNoticeList from './components/global_notice_list/global_notice_list.vue'
import { windowWidth, windowHeight } from './services/window_utils/window_utils'
+import { mapGetters } from 'vuex'
export default {
name: 'app',
@@ -50,17 +51,18 @@ export default {
},
computed: {
currentUser () { return this.$store.state.users.currentUser },
- background () {
- return this.currentUser.background_image || this.$store.state.instance.background
+ userBackground () { return this.currentUser.background_image },
+ instanceBackground () {
+ return this.mergedConfig.hideInstanceWallpaper
+ ? null
+ : this.$store.state.instance.background
},
+ background () { return this.userBackground || this.instanceBackground },
bgStyle () {
- return {
- 'background-image': `url(${this.background})`
- }
- },
- bgAppStyle () {
- return {
- '--body-background-image': `url(${this.background})`
+ if (this.background) {
+ return {
+ '--body-background-image': `url(${this.background})`
+ }
}
},
chat () { return this.$store.state.chat.channel.state === 'joined' },
@@ -77,7 +79,8 @@ export default {
return {
'order': this.$store.state.instance.sidebarRight ? 99 : 0
}
- }
+ },
+ ...mapGetters(['mergedConfig'])
},
methods: {
updateMobileState () {
diff --git a/src/App.scss b/src/App.scss
index cdc3209c91..2a1d7b1bc2 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -14,7 +14,9 @@
right: -20px;
background-size: cover;
background-repeat: no-repeat;
- background-position: 0 50%;
+ background-color: var(--wallpaper);
+ background-image: var(--body-background-image);
+ background-position: 50% 50px;
}
i[class^='icon-'] {
@@ -332,6 +334,10 @@ input, textarea, .select, .input {
box-sizing: border-box;
}
}
+
+ &.resize-height {
+ resize: vertical;
+ }
}
option {
diff --git a/src/App.vue b/src/App.vue
index b4eb052467..1a1667788d 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,12 +1,11 @@
diff --git a/src/components/desktop_nav/desktop_nav.scss b/src/components/desktop_nav/desktop_nav.scss
index 8fd8e6202e..2d46858854 100644
--- a/src/components/desktop_nav/desktop_nav.scss
+++ b/src/components/desktop_nav/desktop_nav.scss
@@ -5,6 +5,10 @@
width: 100%;
position: fixed;
+ a {
+ color: var(--topBarLink, $fallback--link);
+ }
+
.inner-nav {
display: grid;
grid-template-rows: 50px;
diff --git a/src/components/extra_buttons/extra_buttons.js b/src/components/extra_buttons/extra_buttons.js
index 1a8eef7295..b5b29e8a5a 100644
--- a/src/components/extra_buttons/extra_buttons.js
+++ b/src/components/extra_buttons/extra_buttons.js
@@ -5,7 +5,8 @@ import {
faBookmark,
faEyeSlash,
faThumbtack,
- faShareAlt
+ faShareAlt,
+ faExternalLinkAlt
} from '@fortawesome/free-solid-svg-icons'
import {
faBookmark as faBookmarkReg
@@ -17,7 +18,8 @@ library.add(
faBookmarkReg,
faEyeSlash,
faThumbtack,
- faShareAlt
+ faShareAlt,
+ faExternalLinkAlt
)
const ExtraButtons = {
diff --git a/src/components/extra_buttons/extra_buttons.vue b/src/components/extra_buttons/extra_buttons.vue
index e687d48735..dc790cad7e 100644
--- a/src/components/extra_buttons/extra_buttons.vue
+++ b/src/components/extra_buttons/extra_buttons.vue
@@ -1,5 +1,6 @@
{{ $t("status.copy_link") }}
+
+ {{ $t("status.external_source") }}
+
@@ -54,7 +58,7 @@
.global-error {
background-color: var(--alertPopupError, $fallback--cRed);
color: var(--alertPopupErrorText, $fallback--text);
- i {
+ .svg-inline--fa {
color: var(--alertPopupErrorText, $fallback--text);
}
}
@@ -62,7 +66,7 @@
.global-warning {
background-color: var(--alertPopupWarning, $fallback--cOrange);
color: var(--alertPopupWarningText, $fallback--text);
- i {
+ .svg-inline--fa {
color: var(--alertPopupWarningText, $fallback--text);
}
}
@@ -70,9 +74,16 @@
.global-info {
background-color: var(--alertPopupNeutral, $fallback--fg);
color: var(--alertPopupNeutralText, $fallback--text);
- i {
+ .svg-inline--fa {
color: var(--alertPopupNeutralText, $fallback--text);
}
}
+
+ .close-notice {
+ padding-right: 0.2em;
+ .svg-inline--fa:hover {
+ opacity: 0.6;
+ }
+ }
}
diff --git a/src/components/image_cropper/image_cropper.js b/src/components/image_cropper/image_cropper.js
index 59e4d07ef5..e8d5ec6de8 100644
--- a/src/components/image_cropper/image_cropper.js
+++ b/src/components/image_cropper/image_cropper.js
@@ -2,12 +2,10 @@ import Cropper from 'cropperjs'
import 'cropperjs/dist/cropper.css'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
- faTimes,
faCircleNotch
} from '@fortawesome/free-solid-svg-icons'
library.add(
- faTimes,
faCircleNotch
)
@@ -53,8 +51,7 @@ const ImageCropper = {
cropper: undefined,
dataUrl: undefined,
filename: undefined,
- submitting: false,
- submitError: null
+ submitting: false
}
},
computed: {
@@ -66,9 +63,6 @@ const ImageCropper = {
},
cancelText () {
return this.cancelButtonLabel || this.$t('image_cropper.cancel')
- },
- submitErrorMsg () {
- return this.submitError && this.submitError instanceof Error ? this.submitError.toString() : this.submitError
}
},
methods: {
@@ -82,12 +76,8 @@ const ImageCropper = {
},
submit (cropping = true) {
this.submitting = true
- this.avatarUploadError = null
this.submitHandler(cropping && this.cropper, this.file)
.then(() => this.destroy())
- .catch((err) => {
- this.submitError = err
- })
.finally(() => {
this.submitting = false
})
@@ -113,9 +103,6 @@ const ImageCropper = {
reader.readAsDataURL(this.file)
this.$emit('changed', this.file, reader)
}
- },
- clearError () {
- this.submitError = null
}
},
mounted () {
diff --git a/src/components/image_cropper/image_cropper.vue b/src/components/image_cropper/image_cropper.vue
index 448461b4d4..8c48a38767 100644
--- a/src/components/image_cropper/image_cropper.vue
+++ b/src/components/image_cropper/image_cropper.vue
@@ -37,17 +37,6 @@
icon="circle-notch"
/>
-
- {{ submitErrorMsg }}
-
-
diff --git a/src/components/popover/popover.vue b/src/components/popover/popover.vue
index 020eab0557..2252c68f37 100644
--- a/src/components/popover/popover.vue
+++ b/src/components/popover/popover.vue
@@ -95,6 +95,7 @@
box-shadow: none;
width: 100%;
height: 100%;
+ box-sizing: border-box;
--btnText: var(--popoverText, $fallback--text);
diff --git a/src/components/react_button/react_button.vue b/src/components/react_button/react_button.vue
index dde67d214f..ac940b9890 100644
--- a/src/components/react_button/react_button.vue
+++ b/src/components/react_button/react_button.vue
@@ -20,10 +20,10 @@
{{ emoji.replacement }}
diff --git a/src/components/remote_follow/remote_follow.vue b/src/components/remote_follow/remote_follow.vue
index cb1c2a1bb5..be8274001c 100644
--- a/src/components/remote_follow/remote_follow.vue
+++ b/src/components/remote_follow/remote_follow.vue
@@ -16,7 +16,7 @@
>
diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue
index 813dc4cdb6..8f850c8b7a 100644
--- a/src/components/settings_modal/tabs/filtering_tab.vue
+++ b/src/components/settings_modal/tabs/filtering_tab.vue
@@ -75,6 +75,7 @@
{{ $t('settings.filtering_explanation') }}
diff --git a/src/components/settings_modal/tabs/general_tab.js b/src/components/settings_modal/tabs/general_tab.js
index df592a1094..029ee7a1cc 100644
--- a/src/components/settings_modal/tabs/general_tab.js
+++ b/src/components/settings_modal/tabs/general_tab.js
@@ -34,6 +34,10 @@ const GeneralTab = {
return this.$store.state.instance.postFormats || []
},
instanceSpecificPanelPresent () { return this.$store.state.instance.showInstanceSpecificPanel },
+ instanceWallpaperUsed () {
+ return this.$store.state.instance.background &&
+ !this.$store.state.users.currentUser.background_image
+ },
...SharedComputedObject()
}
}
diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue
index c1d0d0ecb8..a9081793bd 100644
--- a/src/components/settings_modal/tabs/general_tab.vue
+++ b/src/components/settings_modal/tabs/general_tab.vue
@@ -11,6 +11,11 @@
{{ $t('settings.hide_isp') }}
+
+
+ {{ $t('settings.hide_wallpaper') }}
+
+
diff --git a/src/components/settings_modal/tabs/profile_tab.js b/src/components/settings_modal/tabs/profile_tab.js
index a4fed6294f..9709424c9e 100644
--- a/src/components/settings_modal/tabs/profile_tab.js
+++ b/src/components/settings_modal/tabs/profile_tab.js
@@ -45,9 +45,7 @@ const ProfileTab = {
banner: null,
bannerPreview: null,
background: null,
- backgroundPreview: null,
- bannerUploadError: null,
- backgroundUploadError: null
+ backgroundPreview: null
}
},
components: {
@@ -162,18 +160,18 @@ const ProfileTab = {
if (file.size > this.$store.state.instance[slot + 'limit']) {
const filesize = fileSizeFormatService.fileSizeFormat(file.size)
const allowedsize = fileSizeFormatService.fileSizeFormat(this.$store.state.instance[slot + 'limit'])
- this[slot + 'UploadError'] = [
- this.$t('upload.error.base'),
- this.$t(
- 'upload.error.file_too_big',
- {
+ this.$store.dispatch('pushGlobalNotice', {
+ messageKey: 'upload.error.message',
+ messageArgs: [
+ this.$t('upload.error.file_too_big', {
filesize: filesize.num,
filesizeunit: filesize.unit,
allowedsize: allowedsize.num,
allowedsizeunit: allowedsize.unit
- }
- )
- ].join(' ')
+ })
+ ],
+ level: 'error'
+ })
return
}
// eslint-disable-next-line no-undef
@@ -213,8 +211,9 @@ const ProfileTab = {
that.$store.commit('setCurrentUser', user)
resolve()
})
- .catch((err) => {
- reject(new Error(that.$t('upload.error.base') + ' ' + err.message))
+ .catch((error) => {
+ that.displayUploadError(error)
+ reject(error)
})
}
@@ -235,24 +234,27 @@ const ProfileTab = {
this.$store.commit('setCurrentUser', user)
this.bannerPreview = null
})
- .catch((err) => {
- this.bannerUploadError = this.$t('upload.error.base') + ' ' + err.message
- })
- .then(() => { this.bannerUploading = false })
+ .catch(this.displayUploadError)
+ .finally(() => { this.bannerUploading = false })
},
submitBackground (background) {
if (!this.backgroundPreview && background !== '') { return }
this.backgroundUploading = true
- this.$store.state.api.backendInteractor.updateProfileImages({ background }).then((data) => {
- if (!data.error) {
+ this.$store.state.api.backendInteractor.updateProfileImages({ background })
+ .then((data) => {
this.$store.commit('addNewUsers', [data])
this.$store.commit('setCurrentUser', data)
this.backgroundPreview = null
- } else {
- this.backgroundUploadError = this.$t('upload.error.base') + data.error
- }
- this.backgroundUploading = false
+ })
+ .catch(this.displayUploadError)
+ .finally(() => { this.backgroundUploading = false })
+ },
+ displayUploadError (error) {
+ this.$store.dispatch('pushGlobalNotice', {
+ messageKey: 'upload.error.message',
+ messageArgs: [error.message],
+ level: 'error'
})
}
}
diff --git a/src/components/settings_modal/tabs/profile_tab.vue b/src/components/settings_modal/tabs/profile_tab.vue
index 50d3ee6301..b7ef21d77a 100644
--- a/src/components/settings_modal/tabs/profile_tab.vue
+++ b/src/components/settings_modal/tabs/profile_tab.vue
@@ -11,7 +11,7 @@
{{ $t('settings.bio') }}
@@ -22,7 +22,7 @@
>
@@ -229,17 +229,6 @@
>
{{ $t('general.submit') }}
-
- Error: {{ bannerUploadError }}
-
-
{{ $t('settings.profile_background') }}
@@ -279,18 +268,6 @@
>
{{ $t('general.submit') }}
-
- Error: {{ backgroundUploadError }}
-
-
diff --git a/src/components/settings_modal/tabs/theme_tab/theme_tab.scss b/src/components/settings_modal/tabs/theme_tab/theme_tab.scss
index 926eceff57..1b7d9f3152 100644
--- a/src/components/settings_modal/tabs/theme_tab/theme_tab.scss
+++ b/src/components/settings_modal/tabs/theme_tab/theme_tab.scss
@@ -165,7 +165,8 @@
border-color: var(--border, $fallback--border);
margin: 1em 0;
padding: 1em;
- background: var(--body-background-image);
+ background-color: var(--wallpaper);
+ background-image: var(--body-background-image);
background-size: cover;
background-position: 50% 50%;
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 4ab793d66c..b8add42f48 100644
--- a/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
+++ b/src/components/settings_modal/tabs/theme_tab/theme_tab.vue
@@ -616,6 +616,15 @@
:disabled="underlayOpacityLocal === 'transparent'"
/>
+
+
{{ $t('settings.style.advanced_colors.wallpaper') }}
+
+
{{ $t('settings.style.advanced_colors.poll') }}
-
-
-
@@ -217,8 +207,9 @@
@click.prevent="toggleMute"
>
diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue
index 0326342be4..4c43fe5ce8 100644
--- a/src/components/timeline/timeline.vue
+++ b/src/components/timeline/timeline.vue
@@ -102,6 +102,7 @@
.timeline-heading {
max-width: 100%;
flex-wrap: nowrap;
+ align-items: center;
.loadmore-button {
flex-shrink: 0;
}
diff --git a/src/components/timeline_menu/timeline_menu.js b/src/components/timeline_menu/timeline_menu.js
index ef8a581379..8d6a58b11e 100644
--- a/src/components/timeline_menu/timeline_menu.js
+++ b/src/components/timeline_menu/timeline_menu.js
@@ -59,6 +59,14 @@ const TimelineMenu = {
this.isOpen = true
}, 25)
},
+ blockOpen (event) {
+ // For the blank area inside the button element.
+ // Just setting @click.stop="" makes unintuitive behavior when
+ // menu is open and clicking on the blank area doesn't close it.
+ if (!this.isOpen) {
+ event.stopPropagation()
+ }
+ },
timelineName () {
const route = this.$route.name
if (route === 'tag-timeline') {
diff --git a/src/components/timeline_menu/timeline_menu.vue b/src/components/timeline_menu/timeline_menu.vue
index c46531be47..3c86842b7d 100644
--- a/src/components/timeline_menu/timeline_menu.vue
+++ b/src/components/timeline_menu/timeline_menu.vue
@@ -65,10 +65,16 @@
slot="trigger"
class="title timeline-menu-title"
>
- {{ timelineName() }}
- {{ timelineName() }}
+
+
+
+
@@ -117,8 +123,9 @@
cursor: pointer;
user-select: none;
width: 100%;
+ display: flex;
- span {
+ .timeline-menu-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@@ -128,6 +135,11 @@
margin-left: 0.6em;
transition: transform 100ms;
}
+
+ .click-blocker {
+ cursor: default;
+ flex-grow: 1;
+ }
}
&.open .timeline-menu-title svg {
diff --git a/src/hocs/with_load_more/with_load_more.js b/src/hocs/with_load_more/with_load_more.js
index 7df9dbb2f2..671b2b6f70 100644
--- a/src/hocs/with_load_more/with_load_more.js
+++ b/src/hocs/with_load_more/with_load_more.js
@@ -29,12 +29,8 @@ const withLoadMore = ({
return {
loading: false,
bottomedOut: false,
- error: false
- }
- },
- computed: {
- entries () {
- return select(this.$props, this.$store) || []
+ error: false,
+ entries: []
}
},
created () {
@@ -48,6 +44,11 @@ const withLoadMore = ({
destroy && destroy(this.$props, this.$store)
},
methods: {
+ // Entries is not a computed because computed can't track the dynamic
+ // selector for changes and won't trigger after fetch.
+ updateEntries () {
+ this.entries = select(this.$props, this.$store) || []
+ },
fetchEntries () {
if (!this.loading) {
this.loading = true
@@ -61,6 +62,9 @@ const withLoadMore = ({
this.loading = false
this.error = true
})
+ .finally(() => {
+ this.updateEntries()
+ })
}
},
scrollLoad (e) {
diff --git a/src/i18n/en.json b/src/i18n/en.json
index ef23efd60c..26dd61445d 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -50,7 +50,8 @@
"scope_options": "Scope options",
"text_limit": "Text limit",
"title": "Features",
- "who_to_follow": "Who to follow"
+ "who_to_follow": "Who to follow",
+ "upload_limit": "Upload limit"
},
"finder": {
"error_fetching_user": "Error fetching user",
@@ -328,6 +329,7 @@
"hide_muted_posts": "Hide posts of muted users",
"max_thumbnails": "Maximum amount of thumbnails per post",
"hide_isp": "Hide instance-specific panel",
+ "hide_wallpaper": "Hide instance wallpaper",
"preload_images": "Preload images",
"use_one_click_nsfw": "Open NSFW attachments with just one click",
"hide_post_stats": "Hide post statistics (e.g. the number of favorites)",
@@ -515,6 +517,7 @@
"inputs": "Input fields",
"faint_text": "Faded text",
"underlay": "Underlay",
+ "wallpaper": "Wallpaper",
"poll": "Poll graph",
"icons": "Icons",
"highlight": "Highlighted elements",
@@ -661,6 +664,7 @@
"unmute_conversation": "Unmute conversation",
"status_unavailable": "Status unavailable",
"copy_link": "Copy link to status",
+ "external_source": "External source",
"thread_muted": "Thread muted",
"thread_muted_and_words": ", has words:",
"show_full_subject": "Show full subject",
@@ -668,7 +672,8 @@
"show_content": "Show content",
"hide_content": "Hide content",
"status_deleted": "This post was deleted",
- "nsfw": "NSFW"
+ "nsfw": "NSFW",
+ "expand": "Expand"
},
"user_card": {
"approve": "Approve",
@@ -758,6 +763,7 @@
"upload": {
"error": {
"base": "Upload failed.",
+ "message": "Upload failed: {0}",
"file_too_big": "File too big [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
"default": "Try again later"
},
diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index c3195f10aa..2a1161be25 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -33,7 +33,9 @@ const loaders = {
ro: () => import('./ro.json'),
ru: () => import('./ru.json'),
te: () => import('./te.json'),
- zh: () => import('./zh.json')
+ uk: () => import('./uk.json'),
+ zh: () => import('./zh.json'),
+ zh_Hant: () => import('./zh_Hant.json')
}
const messages = {
diff --git a/src/i18n/ru.json b/src/i18n/ru.json
index f636bdf8f5..3a7c61a9a4 100644
--- a/src/i18n/ru.json
+++ b/src/i18n/ru.json
@@ -19,7 +19,7 @@
"optional": "не обязательно",
"show_less": "Показать меньше",
"show_more": "Показать больше",
- "peek": "Взглянуть",
+ "peek": "Свернуть",
"dismiss": "Закрыть",
"retry": "Попробуйте еще раз",
"error_retry": "Пожалуйста попробуйте еще раз",
@@ -39,8 +39,11 @@
"recovery_code": "Код восстановления",
"heading": {
"TotpForm": "Двухфакторная аутентификация",
- "RecoveryForm": "Two-factor recovery"
- }
+ "RecoveryForm": "Two-factor recovery",
+ "totp": "Двухфакторная аутентификация"
+ },
+ "hint": "Войдите чтобы присоединиться к дискуссии",
+ "description": "Войти с помощью OAuth"
},
"nav": {
"back": "Назад",
@@ -52,7 +55,14 @@
"twkn": "Федеративная лента",
"search": "Поиск",
"friend_requests": "Запросы на чтение",
- "bookmarks": "Закладки"
+ "bookmarks": "Закладки",
+ "chats": "Беседы",
+ "timelines": "Ленты",
+ "preferences": "Настройки",
+ "who_to_follow": "Кого читать",
+ "dms": "Личные Сообщения",
+ "administration": "Панель администратора",
+ "about": "О сервере"
},
"notifications": {
"broken_favorite": "Неизвестный статус, ищем...",
@@ -62,12 +72,17 @@
"notifications": "Уведомления",
"read": "Прочесть",
"repeated_you": "повторил(а) ваш статус",
- "follow_request": "хочет читать вас"
+ "follow_request": "хочет читать вас",
+ "reacted_with": "добавил реакцию: {0}",
+ "migrated_to": "мигрировал на",
+ "no_more_notifications": "Нет дальнейших уведомлений",
+ "error": "Ошибка при обновлении уведомлений: {0}"
},
"interactions": {
"favs_repeats": "Повторы и фавориты",
- "follows": "Новые подписки",
- "load_older": "Загрузить старые взаимодействия"
+ "follows": "Новые читатели",
+ "load_older": "Загрузить старые взаимодействия",
+ "moves": "Миграции пользователей"
},
"post_status": {
"account_not_locked_warning": "Ваш аккаунт не {0}. Кто угодно может начать читать вас чтобы видеть посты только для подписчиков.",
@@ -87,7 +102,21 @@
"private": "Для подписчиков - этот пост видят только подписчики",
"public": "Публичный - этот пост виден всем",
"unlisted": "Непубличный - этот пост не виден на публичных лентах"
- }
+ },
+ "preview_empty": "Пустой предпросмотр",
+ "media_description_error": "Не удалось обновить вложение, попробуйте еще раз",
+ "empty_status_error": "Нельзя отправить пустой статус без вложений",
+ "preview": "Предпросмотр",
+ "direct_warning_to_first_only": "Это сообщение увидят только пользователи упомянутые в его начале.",
+ "direct_warning_to_all": "Это сообщение увидят все упомянутые пользователи.",
+ "content_type": {
+ "text/bbcode": "BBCode",
+ "text/html": "HTML",
+ "text/markdown": "Markdown",
+ "text/plain": "Простой текст"
+ },
+ "media_description": "Описание вложения",
+ "new_status": "Написать новый статус"
},
"registration": {
"bio": "Описание",
@@ -103,7 +132,12 @@
"password_required": "не должен быть пустым",
"password_confirmation_required": "не должно быть пустым",
"password_confirmation_match": "должно совпадать с паролем"
- }
+ },
+ "bio_placeholder": "например:\nПривет, я Игорь Печкин.\nРаботаю почтальоном в деревне Простоквашино. С недавних пор велосипедист.",
+ "fullname_placeholder": "например: Почтальон Печкин",
+ "username_placeholder": "например: pechkin",
+ "captcha": "Код подтверждения",
+ "new_captcha": "Нажмите на изображение чтобы получить новый код"
},
"settings": {
"enter_current_password_to_confirm": "Введите свой текущий пароль",
@@ -202,7 +236,7 @@
"hide_followers_count_description": "Не показывать число моих подписчиков",
"show_admin_badge": "Показывать значок администратора в моем профиле",
"show_moderator_badge": "Показывать значок модератора в моем профиле",
- "nsfw_clickthrough": "Включить скрытие NSFW вложений",
+ "nsfw_clickthrough": "Включить скрытие NSFW вложений и не показывать изображения в предпросмотре ссылок для NSFW статусов",
"oauth_tokens": "OAuth токены",
"token": "Токен",
"refresh_token": "Рефреш токен",
@@ -355,7 +389,60 @@
}
},
"allow_following_move": "Разрешить автоматически читать новый аккаунт при перемещении на другой сервер",
- "hide_user_stats": "Не показывать статистику пользователей (например количество читателей)"
+ "hide_user_stats": "Не показывать статистику пользователей (например количество читателей)",
+ "discoverable": "Разрешить показ аккаунта в поисковиках и других сервисах",
+ "default_vis": "Видимость постов по умолчанию",
+ "mutes_and_blocks": "Блокировки и игнорируемые",
+ "composing": "Составление постов",
+ "chatMessageRadius": "Сообщения в беседе",
+ "blocks_tab": "Блокировки",
+ "import_mutes_from_a_csv_file": "Импортировать игнорируемых из CSV файла",
+ "mutes_imported": "Игнорируемые импортированы! Обработка может занять некоторое время.",
+ "mute_import_error": "Произошла ошибка при импорте игнорируемых",
+ "mute_import": "Импорт игнорируемых",
+ "block_export_button": "Экспортирует блокировки в CSV файл",
+ "mute_export_button": "Экспортирует игнорируемых пользователей в CSV файл",
+ "mute_export": "Экспорт игнорируемых",
+ "blocks_imported": "Блокировки импортированы! Обработка может занять некоторое время.",
+ "block_import_error": "Произошла ошибка при импорте блокировок",
+ "block_import": "Импорт блокировок",
+ "block_export": "Экспортировать блокировки",
+ "security": "Безопасность",
+ "app_name": "Приложение",
+ "user_mutes": "Пользователи",
+ "post_status_content_type": "Формат составляемых статусов по умолчанию",
+ "subject_line_noop": "Не копировать",
+ "subject_line_mastodon": "Как в Mastodon: скопировать как есть",
+ "subject_line_email": "Как в e-mail: \"re: тема\"",
+ "subject_line_behavior": "Копировать тему в ответах",
+ "no_mutes": "Нет игнорируемых",
+ "no_blocks": "Нет блокировок",
+ "notification_visibility_emoji_reactions": "Реакции",
+ "notification_visibility_moves": "Миграции пользователей",
+ "use_contain_fit": "Не обрезать вложения в миниатюрах",
+ "profile_fields": {
+ "value": "Значение",
+ "name": "Пункт",
+ "add_field": "Добавить поле",
+ "label": "Таблица метаданных профиля"
+ },
+ "play_videos_in_modal": "Проигрывать видео во всплывающей рамке",
+ "mutes_tab": "Игнорируемые",
+ "invalid_theme_imported": "Выбраный файл не является темой Pleroma. Изменений в тему не было внесено.",
+ "import_blocks_from_a_csv_file": "Импортировать блокировки из CSV файла",
+ "hide_filtered_statuses": "Не показывать отфильтрованные статусы",
+ "hide_muted_posts": "Не показывать статусы игнорируемых пользователей",
+ "hide_post_stats": "Не показывать статистику статусов (например количество отметок «Нравится»)",
+ "use_one_click_nsfw": "Открывать NSFW вложения одним кликом",
+ "preload_images": "Предварительно загружать изображения",
+ "max_thumbnails": "Максимальное число миниатюр показываемых в статусе",
+ "emoji_reactions_on_timeline": "Показывать эмодзи реакции в ленте",
+ "domain_mutes": "Узлы",
+ "notification_setting_privacy": "Приватность",
+ "notification_setting_block_from_strangers": "Не показывать уведомления от пользователей которых вы не читаете",
+ "notification_setting_filters": "Фильтрация",
+ "notifications": "Уведомления",
+ "virtual_scrolling": "Оптимизировать рендеринг ленты"
},
"timeline": {
"collapse": "Свернуть",
@@ -369,7 +456,11 @@
},
"status": {
"bookmark": "В закладки",
- "unbookmark": "Удалить из закладок"
+ "unbookmark": "Удалить из закладок",
+ "status_deleted": "Пост удален",
+ "reply_to": "Ответ",
+ "repeats": "Повторы",
+ "favorites": "Понравилось"
},
"user_card": {
"block": "Заблокировать",
@@ -407,7 +498,11 @@
"quarantine": "Не федерировать посты пользователя",
"delete_user": "Удалить пользователя",
"delete_user_confirmation": "Вы уверены? Это действие нельзя отменить."
- }
+ },
+ "media": "С вложениями",
+ "mention": "Упомянуть",
+ "show_repeats": "Показывать повторы",
+ "hide_repeats": "Скрыть повторы"
},
"user_profile": {
"timeline_title": "Лента пользователя"
@@ -480,12 +575,78 @@
},
"tool_tip": {
"accept_follow_request": "Принять запрос на чтение",
- "reject_follow_request": "Отклонить запрос на чтение"
+ "reject_follow_request": "Отклонить запрос на чтение",
+ "media_upload": "Прикрепить вложение"
},
"image_cropper": {
"save_without_cropping": "Сохранить не обрезая",
"save": "Сохранить",
"crop_picture": "Обрезать картинку",
- "cancel": "Отмена"
+ "cancel": "Отменить"
+ },
+ "errors": {
+ "storage_unavailable": "Pleroma не смогла получить доступ к хранилищу браузера. Ваша сессия и настройки не будут сохранены, и вы можете столкнуться с непредвиденными проблемами. Попробуйте включить файлы cookie."
+ },
+ "polls": {
+ "not_enough_options": "Недостаточно уникальных вариантов в опросе",
+ "expired": "Опрос закончился {0} назад",
+ "expires_in": "Опрос заканчивается через {0}",
+ "expiry": "Срок опроса",
+ "multiple_choices": "Несколько вариантов",
+ "single_choice": "Один вариант",
+ "type": "Тип опроса",
+ "vote": "Проголосовать",
+ "votes": "голосов",
+ "option": "Вариант",
+ "add_option": "Добавить вариант",
+ "add_poll": "Прикрепить опрос"
+ },
+ "media_modal": {
+ "next": "Следующая",
+ "previous": "Предыдущая"
+ },
+ "importer": {
+ "error": "Произошла ошибка при импорте файла.",
+ "success": "Импорт прошел успешно.",
+ "submit": "Отправить"
+ },
+ "selectable_list": {
+ "select_all": "Выбрать все"
+ },
+ "emoji": {
+ "load_all": "Все {emojiAmount} эмодзи загружаются",
+ "load_all_hint": "Загружены первые {saneAmount} эмодзи, загрузка всех эмодзи может привести к проблемам с производительностью.",
+ "unicode": "Стандартные эмодзи",
+ "custom": "Пользовательские эмодзи",
+ "add_emoji": "Добавить эмодзи",
+ "search_emoji": "Поиск эмодзи",
+ "keep_open": "Оставить окно выбора открытым",
+ "emoji": "Эмодзи",
+ "stickers": "Стикеры"
+ },
+ "shoutbox": {
+ "title": "Болтовня"
+ },
+ "time": {
+ "days_short": "{0}дн",
+ "years_short": "{0}г",
+ "year_short": "{0}г",
+ "weeks_short": "{0}нед",
+ "week_short": "{0}нед",
+ "seconds_short": "{0}сек",
+ "second_short": "{0}с",
+ "now_short": "только что",
+ "now": "только что",
+ "months_short": "{0}мес",
+ "month_short": "{0}мес",
+ "minutes_short": "{0}мин",
+ "minute_short": "{0}мин",
+ "in_past": "{0} назад",
+ "in_future": "через {0}",
+ "hours_short": "{0}ч",
+ "hour_short": "{0}ч",
+ "hour": "{0} час",
+ "day_short": "{0}д",
+ "days": "{0} дней"
}
}
diff --git a/src/i18n/uk.json b/src/i18n/uk.json
index 73006e6e89..f630b2ddb0 100644
--- a/src/i18n/uk.json
+++ b/src/i18n/uk.json
@@ -44,19 +44,19 @@
"mute": "Ігнорувати"
},
"shoutbox": {
- "title": "Для воплів"
+ "title": "Міні-чат"
},
"about": {
"staff": "Адміністрація",
"mrf": {
"simple": {
- "media_nsfw_desc": "Даний інстанс примусово позначає вкладення з наступних інстансів як NSFW:",
- "media_nsfw": "Примусове визначення вкладення як дратівливого",
- "media_removal_desc": "Поточний інстанс видаляє вкладення на перелічених інстансах:",
- "media_removal": "Видалення вкладень",
+ "media_nsfw_desc": "Даний інстанс примусово позначає медіа в наступних інстансах як NSFW:",
+ "media_nsfw": "Примусове визначення медіа як дратівливого",
+ "media_removal_desc": "Поточний інстанс видаляє медіа з дописів на перелічених інстансах:",
+ "media_removal": "Видалення медіа",
"ftl_removal_desc": "Цей інстанс видаляє перелічені інстанси з \"Усієї відомої мережі\":",
- "ftl_removal": "Видалення з \"Вся відома мережа\"",
- "quarantine_desc": "Поточний інстанс буде надсилати тільки публічні пости наступним інстансам:",
+ "ftl_removal": "Видалення з \"Усієї відомої мережі\"",
+ "quarantine_desc": "Поточний інстанс буде надсилати тільки публічні дописи наступним інстансам:",
"quarantine": "Карантин",
"reject_desc": "Поточний інстанс не прийматиме повідомлення з перелічених інстансів:",
"accept": "Прийняти",
@@ -64,7 +64,7 @@
"accept_desc": "Поточний інстанс приймає повідомлення тільки з перелічених інстансів:",
"simple_policies": "Правила поточного інстансу"
},
- "mrf_policies_desc": "Правила MRF розповсюджуються на данний інстанс. Наступні правила активні:",
+ "mrf_policies_desc": "Правила MRF розповсюджуються на даний інстанс. Наступні правила активні:",
"mrf_policies": "Активні правила MRF (модуль переписування повідомлень)",
"keyword": {
"is_replaced_by": "→",
@@ -83,7 +83,16 @@
"password": "Пароль",
"logout": "Вийти",
"description": "Увійти за допомогою OAuth",
- "login": "Увійти"
+ "login": "Увійти",
+ "recovery_code": "Код відновлення",
+ "enter_recovery_code": "Введіть код відновлення",
+ "authentication_code": "Код автентифікації",
+ "heading": {
+ "recovery": "Двофакторне відновлення",
+ "totp": "Двофакторна автентифікація"
+ },
+ "enter_two_factor_code": "Введіть двофакторний код автентифікації",
+ "placeholder": "напр. stepan"
},
"importer": {
"error": "Під час імпортування файлу сталася помилка.",
@@ -95,5 +104,674 @@
"save_without_cropping": "Зберегти не обрізаючи",
"crop_picture": "Обрізати малюнок",
"save": "Зберегти"
+ },
+ "polls": {
+ "expired": "Опитування закінчилось {0} тому",
+ "expires_in": "Опитування закінчується через {0}",
+ "expiry": "Термін опитування",
+ "multiple_choices": "Декілька варіантів",
+ "single_choice": "Один варіант",
+ "add_option": "Додати опцію",
+ "type": "Тип опитування",
+ "vote": "Проголосувати",
+ "votes": "голосів",
+ "option": "Відповідь",
+ "add_poll": "Додати опитування",
+ "not_enough_options": "Замало унікальних варіантів в опитуванні"
+ },
+ "notifications": {
+ "reacted_with": "додав реакцію: {0}",
+ "migrated_to": "мігрував на",
+ "no_more_notifications": "Немає більше сповіщень",
+ "repeated_you": "поширив(-ла) ваш допис",
+ "read": "Прочитано!",
+ "notifications": "Сповіщення",
+ "load_older": "Завантажити давніші сповіщення",
+ "follow_request": "хоче підписатись на вас",
+ "followed_you": "підписався(-лась) на вас",
+ "favorited_you": "вподобав(-ла) ваш допис",
+ "broken_favorite": "Невідомий допис, шукаю його…",
+ "error": "Помилка при оновленні сповіщень: {0}"
+ },
+ "nav": {
+ "chats": "Локальні балачки",
+ "timelines": "Стрічки",
+ "twkn": "Уся відома мережа",
+ "about": "Інформація",
+ "preferences": "Налаштування",
+ "friend_requests": "Запити послідовників",
+ "who_to_follow": "Кого відстежувати",
+ "search": "Пошук",
+ "user_search": "Пошук користувача",
+ "bookmarks": "Закладки",
+ "timeline": "Домашня стрічка",
+ "public_tl": "Публічна стрічка",
+ "dms": "Приватні повідомлення",
+ "interactions": "Взаємодії",
+ "mentions": "Згадування",
+ "back": "Назад",
+ "administration": "Адміністрування"
+ },
+ "media_modal": {
+ "next": "Наступна",
+ "previous": "Попередня"
+ },
+ "password_reset": {
+ "instruction": "Введіть свою адресу електронної пошти або ім’я користувача. Ми надішлемо вам посилання для скидання пароля.",
+ "placeholder": "Ваша електронна адреса або ім'я користувача",
+ "check_email": "Перевірте електронну пошту на наявність посилання для скидання пароля.",
+ "return_home": "Повернутися на головну сторінку",
+ "too_many_requests": "Ви досягли ліміту спроб, спробуйте ще раз пізніше.",
+ "password_reset_required_but_mailer_is_disabled": "Ви повинні скинути свій пароль, але скидання пароля вимкнено. Зверніться до адміністратора інстансу.",
+ "password_reset_disabled": "Скидання пароля вимкнено. Зверніться до адміністратора інстансу.",
+ "password_reset_required": "Для входу потрібно скинути пароль.",
+ "password_reset": "Відновити пароль",
+ "forgot_password": "Забули пароль?"
+ },
+ "chats": {
+ "you": "Ви:",
+ "message_user": "Повідомлення для {nickname}",
+ "delete": "Видалити",
+ "chats": "Чати",
+ "new": "Новий чат",
+ "empty_message_error": "Не вдається опублікувати порожнє повідомлення",
+ "more": "Більше",
+ "delete_confirm": "Ви дійсно хочете видалити це повідомлення?",
+ "error_loading_chat": "Під час завантаження чату сталася помилка.",
+ "error_sending_message": "Під час надсилання повідомлення сталася помилка.",
+ "empty_chat_list_placeholder": "У вас ще немає чатів. Почніть новий чат!"
+ },
+ "file_type": {
+ "audio": "Аудіо",
+ "video": "Відео",
+ "image": "Зображення",
+ "file": "Файл"
+ },
+ "display_date": {
+ "today": "Сьогодні"
+ },
+ "interactions": {
+ "load_older": "Завантажити давніші взаємодії",
+ "follows": "Нові підписки",
+ "favs_repeats": "Повтори та вподобайки",
+ "moves": "Міграції користувачів"
+ },
+ "errors": {
+ "storage_unavailable": "Pleroma не змогла отримати доступ до сховища браузеру. Ваша сесія та налаштування не будуть збережені, це може спричинити непередбачувані проблеми. Спробуйте увімкнути cookie."
+ },
+ "emoji": {
+ "stickers": "Стікери",
+ "custom": "Користувацькі емодзі",
+ "search_emoji": "Пошук емодзі",
+ "keep_open": "Тримати панель відкритою",
+ "add_emoji": "Додати емодзі",
+ "emoji": "Емодзі",
+ "load_all": "Всі {emojiAmount} эмодзі завантажуються",
+ "load_all_hint": "Завантажені перші {saneAmount} емодзі, завантаження всіх емодзі може призвести до проблем з продуктивністю.",
+ "unicode": "Стандартні емодзі"
+ },
+ "post_status": {
+ "content_type": {
+ "text/bbcode": "BBCode",
+ "text/markdown": "Markdown",
+ "text/html": "HTML",
+ "text/plain": "Простий текст"
+ },
+ "attachments_sensitive": "Позначити вкладення як чутливі",
+ "account_not_locked_warning_link": "замкнена",
+ "account_not_locked_warning": "Ваша обліковка не {0}. Будь-хто може відстежувати вас для перегляду дописів тільки для відстежувачів.",
+ "new_status": "Створити допис",
+ "direct_warning_to_first_only": "Цей допис побачать лише користувачі, що були згадані на початку повідомлення.",
+ "direct_warning_to_all": "Цей допис побачать всі згадані користувачі.",
+ "default": "Що нового?",
+ "content_warning": "Тема (необов'язково)",
+ "preview": "Попередній перегляд",
+ "posting": "Відправляється",
+ "empty_status_error": "Не можу опублікувати пустий статус без вкладень",
+ "scope": {
+ "unlisted": "Непублічний - цей допис буде відсутній у публічних стрічках",
+ "public": "Піблічний - цей допис побачать усі",
+ "private": "Для читачів - цей допис побачать лише ваші читачі",
+ "direct": "Приватний - цей допис побачать лише згадані користувачі"
+ },
+ "scope_notice": {
+ "unlisted": "Цей допис не буде видно в публічній стрічці та усій відомій мережі",
+ "private": "Цей допис побачать лише ваші підписники",
+ "public": "Цей допис бачитимуть усі"
+ },
+ "preview_empty": "Пустий",
+ "media_description_error": "Не вдалось оновити медіа, спробуйте ще раз",
+ "media_description": "Опис медіа"
+ },
+ "settings": {
+ "blocks_imported": "Блокування імпортовані! Їх обробка триватиме певний час.",
+ "block_import_error": "Помилка імпортування блокувань",
+ "block_import": "Імпорт блокувань",
+ "block_export_button": "Експорт блокувань у файл CSV",
+ "block_export": "Експорт блокувань",
+ "bio": "Про Вас",
+ "background": "Обкладинка",
+ "app_name": "Назва програми",
+ "follow_export": "Експортувати відстежуваних",
+ "filtering_explanation": "Усі статуси з цими словами будуть приховані, один на рядок",
+ "filtering": "Фільтрування",
+ "export_theme": "Зберегти переднабір",
+ "avatar_size_instruction": "Рекомендований мінімальний розмір для зображень аватара становить 150x150 пікселів.",
+ "delete_account_instructions": "Введіть ваш пароль в поле нижче, аби підтвердити видалення облікового запису.",
+ "delete_account_error": "Під час видалення вашого облікового запису виникла проблема. Якщо це трапляється постійно, будь ласка, зверніться до адміністратора вашого сервера.",
+ "delete_account_description": "Остаточно видалити ваш обліковий запис та усі ваші повідомлення.",
+ "delete_account": "Видалити обліковий запис",
+ "default_vis": "Обсяг видимості за замовчуванням",
+ "data_import_export_tab": "Імпорт/експорт даних",
+ "current_password": "Поточний пароль",
+ "confirm_new_password": "Підтвердіть новий пароль",
+ "composing": "Складання відповіді",
+ "collapse_subject": "Згорнути дописи з темами",
+ "changed_password": "Пароль успішно змінено!",
+ "change_password_error": "Не вдалося змінити пароль.",
+ "change_password": "Змінити пароль",
+ "cRed": "Червоний (Скасувати)",
+ "cGreen": "Зелений (Поширити)",
+ "cOrange": "Жовтогарячий (Вподобайки)",
+ "cBlue": "Блакитний (Відповісти, читати)",
+ "btnRadius": "Кнопки",
+ "blocks_tab": "Блокування",
+ "avatarRadius": "Аватарки",
+ "avatarAltRadius": "Аватарки у сповіщеннях",
+ "avatar": "Аватар",
+ "attachments": "Вкладення",
+ "attachmentRadius": "Вкладення",
+ "general": "Загальні",
+ "foreground": "Передній план",
+ "follows_imported": "Відстежуваних імпортовано! Їхня обробка потребує часу.",
+ "follow_import_error": "Помилка імпортування відстежуваних",
+ "follow_import": "Імпортувати відстежуваних",
+ "follow_export_button": "Експортувати відстежуваних до csv файлу",
+ "lock_account_description": "Обмежте свій обліковий запис лише схваленими читачами",
+ "links": "Посилання",
+ "limited_availability": "Недоступно у вашому браузері",
+ "invalid_theme_imported": "Вибраний файл не є темою Pleroma. У вашу тему не внесено жодних змін.",
+ "interfaceLanguage": "Мова оболонки",
+ "interface": "Оболонка",
+ "instance_default_simple": "(за замовчуванням)",
+ "instance_default": "(за замовчуванням: {value})",
+ "checkboxRadius": "Прапорці",
+ "inputRadius": "Поля вводу",
+ "import_theme": "Завантажити переднабір",
+ "import_followers_from_a_csv_file": "Імпортувати відстежуваних з csv файлу",
+ "import_blocks_from_a_csv_file": "Імпортувати заблокованих з csv файлу",
+ "hide_filtered_statuses": "Сховати відфільтровані статуси",
+ "hide_user_stats": "Приховувати статистику користувачів (напр. кількість відстежувачів)",
+ "hide_post_stats": "Приховувати статистику дописів (напр. кількість вподобаних)",
+ "use_one_click_nsfw": "Відкривати NSFW вкладення одним кліком миші",
+ "preload_images": "Передзавантажувати світлини",
+ "hide_isp": "Сховати панель з особливостями сервера",
+ "max_thumbnails": "Максимальна кількість мініатюр на повідомлення",
+ "hide_muted_posts": "Приховати повідомлення приглушених користувачів",
+ "hide_attachments_in_tl": "Приховувати вкладення у стрічці",
+ "hide_attachments_in_convo": "Приховувати вкладення у розмовах",
+ "mutes_tab": "Заглушені",
+ "loop_video_silent_only": "Зациклити відео без звуку (напр. Mastodon \"gifs\")",
+ "loop_video": "Зациклити відео",
+ "mfa": {
+ "verify": {
+ "desc": "Щоб увімкнути двофакторну автентифікацію, введіть код з вашого застосунку для двофакторної автентифікації:"
+ },
+ "scan": {
+ "desc": "Відскануйте цей QR-код за допомогою програми двофакторної автентифікації або введіть текстовий ключ:",
+ "title": "Сканування",
+ "secret_code": "Ключ"
+ },
+ "authentication_methods": "Методи автентифікації",
+ "recovery_codes_warning": "Запишіть ці коди і тримайте в безпечному місці - інакше ви їх ніколи не побачите. Якщо ви втратите доступ до OTP додатку - без резервних кодів ви не зможете отримати доступ до свого облікового запису.",
+ "waiting_a_recovery_codes": "Отримую резервні коди…",
+ "recovery_codes": "Резервні коди.",
+ "warning_of_generate_new_codes": "Після отримання нових резервних кодів, старі перестануть працювати.",
+ "generate_new_recovery_codes": "Згенерувати нові резервні коди",
+ "title": "Двофакторна автентифікація",
+ "confirm_and_enable": "Підтвердити та увімкнути OTP",
+ "wait_pre_setup_otp": "попереднє налаштування OTP",
+ "setup_otp": "Налаштування OTP",
+ "otp": "OTP"
+ },
+ "enter_current_password_to_confirm": "Введіть свій поточний пароль",
+ "security": "Безпека",
+ "domain_mutes": "Домени",
+ "discoverable": "Дозволити виявлення цього облікового запису в результатах пошуку та інших службах",
+ "mutes_and_blocks": "Заглушені та блоковані",
+ "changed_email": "Email успішно змінено!",
+ "change_email_error": "Сталася помилка під час зміни email.",
+ "change_email": "Змінити email",
+ "bot": "Це обліковий запис бота",
+ "import_mutes_from_a_csv_file": "Імпорт заглушених з csv файлу",
+ "mutes_imported": "Заглушені імпортовані! Їх обробка триватиме певний час.",
+ "mute_export_button": "Експорт заглушених у csv файл",
+ "mute_import_error": "Під час імпорту заглушених сталася помилка",
+ "mute_import": "Імпорт ігнорувань",
+ "mute_export": "Експорт ігнорувань",
+ "new_password": "Новий пароль",
+ "new_email": "Нова ел. пошта",
+ "name_bio": "Особисті дані",
+ "set_new_profile_banner": "Встановити новий банер",
+ "set_new_avatar": "Встановити новий аватар",
+ "security_tab": "Безпека",
+ "saving_ok": "Налаштування збережені",
+ "saving_err": "Помилка при збереженні налаштувань",
+ "reply_visibility_self": "Показувати лише адресовані мені відповіді",
+ "reply_visibility_following": "Показувати відповіді адресовані лише мені або користувачам, яких я читаю",
+ "reply_visibility_all": "Показати всі відповіді",
+ "replies_in_timeline": "Відповіді в стрічці",
+ "profile_tab": "Профіль",
+ "profile_banner": "Банер профілю",
+ "profile_background": "Обкладинка профілю",
+ "revoke_token": "Відкликати",
+ "oauth_tokens": "OAuth ключі",
+ "token": "Ключ",
+ "refresh_token": "Оновити ключ",
+ "valid_until": "Діє до",
+ "use_contain_fit": "Не обрізати краї мініатюр",
+ "name": "Ім'я",
+ "profile_fields": {
+ "value": "Зміст",
+ "name": "Назва",
+ "add_field": "Додати поле",
+ "label": "Метадані профілю"
+ },
+ "play_videos_in_modal": "Відтворювати відео у спливаючій рамці",
+ "accent": "Акцент",
+ "chatMessageRadius": "Повідомлення в бесіді",
+ "notification_mutes": "Щоб перестати отримувати сповіщення від певного користувача, заглушіть його.",
+ "user_mutes": "Користувачі",
+ "no_mutes": "Заглушені відсутні",
+ "emoji_reactions_on_timeline": "Показувати реакції емоджі на стрічці",
+ "pad_emoji": "Додавати простір з обидвох сторін емоджі, при додаванні з панелі",
+ "allow_following_move": "Дозволити автостеження при переміщенні на інший інстанс",
+ "set_new_profile_background": "Встановити нову обкладинку профілю",
+ "radii_help": "Радіус заокруглення кутів інтерфейсу (в пікселях)",
+ "presets": "Переднабір",
+ "show_moderator_badge": "Показувати значок модератора в моєму профілі",
+ "show_admin_badge": "Показувати значок адміністратора в моєму профілі",
+ "hide_followers_description": "Не показувати хто підписаний на мене",
+ "hide_follows_description": "Не показувати на кого я підписаний",
+ "no_rich_text_description": "Видалення всього форматування тексту з усіх дописів",
+ "notification_visibility_emoji_reactions": "Реакції",
+ "notification_visibility_moves": "Міграція користувача",
+ "notification_visibility_repeats": "Поширення допису",
+ "notification_visibility_mentions": "Згадування",
+ "notification_visibility_likes": "Вподобайки",
+ "notification_visibility_follows": "Нові підписки",
+ "notification_visibility": "Отримувати сповіщення про наступні події",
+ "settings": "Налаштування",
+ "panelRadius": "Панелі",
+ "text": "Текст",
+ "tooltipRadius": "Підказки/попередження",
+ "values": {
+ "true": "так",
+ "false": "ні"
+ },
+ "user_settings": "Користувацькі налаштування",
+ "upload_a_photo": "Завантажити фото",
+ "theme": "Тема",
+ "style": {
+ "switcher": {
+ "keep_fonts": "Залишити шрифти",
+ "keep_roundness": "Залишити скруглення",
+ "keep_opacity": "Залишити прозорості",
+ "keep_shadows": "Залишити тіні",
+ "keep_color": "Залишити кольори",
+ "use_source": "Нова версія",
+ "use_snapshot": "Стара версія",
+ "load_theme": "Завантажити тему",
+ "reset": "Скинути",
+ "clear_all": "Очистити все",
+ "help": {
+ "older_version_imported": "Імпортований файл було створено в старішій версії FE.",
+ "future_version_imported": "Імпортований файл було створено в новішій версії FE.",
+ "v2_imported": "Файл, який ви імпортували, був створений для старішої версії інтерфейсу Pleroma. Ми намагаємось покращити сумісність, але все одно можуть бути розбіжності.",
+ "upgraded_from_v2": "PleromaFE було оновлено, тема може дещо відрізнятися від тієї, яку ви пам’ятаєте.",
+ "snapshot_source_mismatch": "Конфлікт версій: Швидше за все, FE повернуто до попередньої версії та оновлено знову, якщо ви змінили тему за допомогою старішої версії FE, швидше за все, ви хочете використовувати стару версію, інакше використовуйте нову версію.",
+ "migration_napshot_gone": "З якоїсь причини знімок зник, деякі речі можуть бути не такими, як ви пам’ятаєте.",
+ "migration_snapshot_ok": "Для безпеки, знімок теми завантажено. Ви можете спробувати завантажити дані теми.",
+ "fe_downgraded": "Версію PleromaFE змінено на старшу.",
+ "fe_upgraded": "Двигун теми PleromaFE оновлено.",
+ "snapshot_missing": "У файлі немає жодного знімка теми, тому він може виглядати інакше, ніж передбачалося спочатку.",
+ "snapshot_present": "Знімок теми завантажено, тому всі значення було перезаписано. Натомість ви можете завантажити правильні дані теми."
+ },
+ "keep_as_is": "Залишити як є",
+ "clear_opacity": "Очистити прозорість",
+ "save_load_hint": "Параметри \"Зберегти\" зберігають встановлені на даний момент параметри під час вибору або завантаження тем, вони також зберігають зазначені параметри під час експорту теми. Коли всі прапорці знято, експортування теми збереже все."
+ },
+ "common": {
+ "color": "Колір",
+ "contrast": {
+ "context": {
+ "text": "для тексту",
+ "18pt": "для великого (18pt+) тексту"
+ },
+ "level": {
+ "bad": "Не відповідає жодним вимогам щодо доступності",
+ "aaa": "відповідає вимогам рівня ААA (рекомендований)",
+ "aa": "відповідає вимогам рівня АА (мінімальний)"
+ },
+ "hint": "Рівень контрасту: {ratio}, {level} {context}"
+ },
+ "opacity": "Прозорість"
+ },
+ "preview": {
+ "mono": "змісту",
+ "text": "Трохи більше {0} та {1}",
+ "button": "Кнопка",
+ "error": "Приклад помилки",
+ "content": "Зміст",
+ "header": "Попередній перегляд",
+ "link": "невеличке посилання",
+ "header_faint": "Це нормально",
+ "input": "Що нового?",
+ "checkbox": "Я переглянув умови використання",
+ "fine_print": "Прочитайте наш {0} аби нічого нового не дізнатись!",
+ "faint_link": "корисний підручник"
+ },
+ "shadows": {
+ "components": {
+ "button": "Кнопка",
+ "input": "Поле вводу",
+ "panel": "Панель",
+ "panelHeader": "Заголовок панелі",
+ "avatarStatus": "Аватар користувача (в стрічці)",
+ "avatar": "Аватар користувача (профіль)",
+ "buttonPressedHover": "Кнопка (натиснута + наведенний курсор)",
+ "buttonPressed": "Кнопка (натиснута)",
+ "buttonHover": "Кнопка (при наведенні)",
+ "popup": "Спливаючі вікна та підказки"
+ },
+ "component": "Компонент",
+ "filter_hint": {
+ "inset_classic": "Тіні спрямовані всередину використовуватимуть {0}",
+ "spread_zero": "Тіні з поширенням > 0 відображатимуться так, ніби було встановлено нуль",
+ "avatar_inset": "Зауважте, що використання як вставних, так і невставних тіней на аватарах може привести до непередбачуваних результатів із прозорими аватарами.",
+ "drop_shadow_syntax": "{0} не підтримує параметр {1} та ключове слово {2}.",
+ "always_drop_shadow": "Увага! Ця тінь завжди використовує {0}, якщо підтримується браузером."
+ },
+ "inset": "Всередину",
+ "blur": "Розмиття",
+ "shadow_id": "Тінь №{value}",
+ "override": "Перевизначити",
+ "_tab_label": "Тінь і підсвічування",
+ "hintV3": "Для тіней ви також можете використовувати позначення {0} для використання іншого кольорового слота."
+ },
+ "fonts": {
+ "components": {
+ "input": "Поля вводу",
+ "interface": "Інтерфейс",
+ "postCode": "Моноширинний текст в дописі (форматований текст)",
+ "post": "Текст допису"
+ },
+ "_tab_label": "Шрифти",
+ "size": "Розмір (в пікселях)",
+ "custom": "Нестандартний",
+ "weight": "Товщина",
+ "family": "Назва шрифту",
+ "help": "Виберіть шрифт для елементів інтерфейсу. Для \"нестандартного\" потрібно ввести точну назву шрифту, так як вона відображається в системі."
+ },
+ "advanced_colors": {
+ "alert_warning": "Попередження",
+ "underlay": "Тло",
+ "inputs": "Поля входу",
+ "buttons": "Кнопки",
+ "borders": "Кордони",
+ "top_bar": "Верхня панель",
+ "panel_header": "Заголовок панелі",
+ "badge_notification": "Сповіщення",
+ "popover": "Підказки, меню, поповери",
+ "badge": "Тло значків",
+ "post": "Дописи/Дані користувачів",
+ "alert_neutral": "Нейтральний",
+ "alert_error": "Помилки",
+ "alert": "Фон сповіщень",
+ "_tab_label": "Додатково",
+ "selectedPost": "Вибраний допис",
+ "highlight": "Виділені елементи",
+ "poll": "Діаграма опитування",
+ "icons": "Іконки",
+ "faint_text": "Затемнений текст",
+ "chat": {
+ "border": "Кайма",
+ "outgoing": "Вихідні повідомлення",
+ "incoming": "Вхідні повідомлення"
+ },
+ "toggled": "Переключено",
+ "disabled": "Вимкнено",
+ "selectedMenu": "Вибраний пункт меню",
+ "tabs": "Вкладки",
+ "pressed": "Натиснуто"
+ },
+ "common_colors": {
+ "rgbo": "Піктограми, акценти, значки",
+ "foreground_hint": "Перегляньте вкладку \"Додатково\" для більшого контролю",
+ "main": "Загальні кольори",
+ "_tab_label": "Загальні"
+ },
+ "radii": {
+ "_tab_label": "Округлість"
+ }
+ },
+ "enable_web_push_notifications": "Увімкнути web push-сповіщення",
+ "notifications": "Сповіщення",
+ "fun": "Розваги",
+ "notification_setting_privacy": "Приватність",
+ "notification_setting_filters": "Фільтри",
+ "reset_avatar": "Скинути аватар",
+ "reset_profile_background": "Скинути обкладинку профілю",
+ "reset_avatar_confirm": "Ви дійсно хочете скинути аватар?",
+ "reset_profile_banner": "Скинули банер профілю",
+ "hide_follows_count_description": "Не показувати на кого я підписаний",
+ "reset_banner_confirm": "Ви дійсно хочете скинути банер?",
+ "reset_background_confirm": "Ви дійсно хочете скинути обкладинку?",
+ "subject_line_behavior": "Вигляд теми при відповіді",
+ "subject_input_always_show": "Завжди показувати поле для вводу теми",
+ "minimal_scopes_mode": "Мінімізувати набір варіантів осягу для допису",
+ "scope_copy": "Копіювати осяг при відповіді (завжди ввімкнено для особистих повідомлень)",
+ "search_user_to_mute": "Шукайте кого ви хочете заглушити",
+ "search_user_to_block": "Шукайте кого ви хочете заблокувати",
+ "autohide_floating_post_button": "Автоматично ховати кнопку \"Новий допис\" (в мобільній версії)",
+ "pause_on_unfocused": "Призупинити трансляцію, коли вкладка неактивна",
+ "hide_followers_count_description": "Не показувати кількість читачів",
+ "notification_blocks": "Блокування користувача зупиняє всі сповіщення від нього, а також скасовує його відстеження.",
+ "notification_setting_hide_notification_contents": "Ховати відправника та вміст push-сповіщень",
+ "notification_setting_block_from_strangers": "Блокувати сповіщення від користувачів за якими ви не слідкуєте",
+ "type_domains_to_mute": "Пошук доменів для заглушення",
+ "nsfw_clickthrough": "Увімкнути приховування NSFW медіа",
+ "greentext": "Мемний текст",
+ "virtual_scrolling": "Оптимізувати оновлення стрчки",
+ "theme_help_v2_2": "Піктограми під деякими записами є показниками контрасту між фоном та текстом. Коли ви наведете на них курсор, ви отримаєте детальну інформацію. Пам'ятайте, якщо ви використовуєте прозорість, індикатори показують найгірший варіант.",
+ "theme_help_v2_1": "Ви також можете замінити кольори та видимість окремих компонентів, перемикаючи прапорці, використовуйте \"Очистити все\", щоб видалити всі заміни.",
+ "theme_help": "Використовувати шістнадцяткові коди кольору (#rrggbb) щоб редагувати тему.",
+ "no_blocks": "Блокування відсутні",
+ "subject_line_mastodon": "Як в mastodon: просто скопіювати",
+ "subject_line_email": "Як в email: \"re: тема\"",
+ "useStreamingApiWarning": "(Не рекомендується, експериментально, повідомлення можуть зникати)",
+ "useStreamingApi": "Отримувати повідомлення та сповіщення в режимі реального часу",
+ "streaming": "Ввімкнути автоматичне завантаження нових повідомлень при прокручуванні вгору",
+ "stop_gifs": "Відтворювати GIF анімації тільки при наведенні",
+ "post_status_content_type": "Тип вмісту допису",
+ "subject_line_noop": "Не копіювати",
+ "version": {
+ "frontend_version": "Версія фронтенду",
+ "backend_version": "Версія бекенду",
+ "title": "Версія"
+ }
+ },
+ "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": "не може бути порожнім"
+ },
+ "bio_placeholder": "напр.\nНаш народ завжди прагне волі для себе і бажає її для інших народів. Він боровся і бореться за правду і справедливість. Ми хочемо жити у згоді і взаємному шануванні з усіми народами доброї волі. Такі самі права визнаємо за іншими народами, за які боремося для себе.",
+ "fullname_placeholder": "напр. Степан Бандера",
+ "username_placeholder": "напр. stepan",
+ "new_captcha": "Натисніть на зображення, щоб оновити код, якщо він нерозбірливий",
+ "token": "Ключ запрошення",
+ "registration": "Реєстрація",
+ "password_confirm": "Підтвердження паролю",
+ "fullname": "Відображене ім'я",
+ "email": "Ел. пошта",
+ "bio": "Про себе",
+ "captcha": "CAPTCHA"
+ },
+ "who_to_follow": {
+ "who_to_follow": "На кого підписатися",
+ "more": "Більше"
+ },
+ "tool_tip": {
+ "repeat": "Поширити",
+ "reply": "Відповісти",
+ "add_reaction": "Додати реакцію",
+ "user_settings": "Налаштування користувача",
+ "favorite": "Подобається",
+ "reject_follow_request": "Відхилити запит на підписку",
+ "accept_follow_request": "Прийняти запит на підписку",
+ "media_upload": "Завантажити медіа"
+ },
+ "upload": {
+ "error": {
+ "base": "Збій при завантаженні.",
+ "file_too_big": "Файл завеликий [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
+ "default": "Спробуйте ще раз пізніше"
+ },
+ "file_size_units": {
+ "TiB": "ТіБ",
+ "GiB": "ГіБ",
+ "MiB": "МіБ",
+ "KiB": "КіБ",
+ "B": "Б"
+ }
+ },
+ "time": {
+ "weeks_short": "{0}тижд.",
+ "week_short": "{0}тижд.",
+ "years_short": "{0}р",
+ "year_short": "{0}р",
+ "years": "{0} роки",
+ "year": "{0} рік",
+ "weeks": "{0} тижднів",
+ "week": "{0} тиждень",
+ "second_short": "{0}с",
+ "second": "{0} секунда",
+ "now_short": "щойно",
+ "now": "щойно",
+ "months_short": "{0}міс.",
+ "month_short": "{0}міс.",
+ "months": "{0} місяці",
+ "month": "{0} місяць",
+ "minutes_short": "{0}хв",
+ "hours_short": "{0}год",
+ "hour_short": "{0}год",
+ "day_short": "{0}д",
+ "minute_short": "{0}хв",
+ "minutes": "{0} хвилини",
+ "minute": "{0} хвилина",
+ "in_past": "{0} тому",
+ "hours": "{0} години",
+ "hour": "{0} година",
+ "days_short": "{0}д",
+ "days": "{0} дні",
+ "day": "{0} день",
+ "seconds_short": "{0}с",
+ "seconds": "{0} секунди",
+ "in_future": "через {0}"
+ },
+ "search": {
+ "no_results": "Немає результатів",
+ "hashtags": "Хештеги",
+ "people": "Люди"
+ },
+ "user_card": {
+ "statuses": "Дописи",
+ "message": "Повідомлення",
+ "follow": "Підписатись",
+ "follow_unfollow": "Відписатись",
+ "follow_again": "Відправити запит знову?",
+ "follow_sent": "Запит відправлено!",
+ "blocked": "Заблоковано!",
+ "admin_menu": {
+ "activate_account": "Активувати обліковий запис",
+ "deactivate_account": "Деактивувати обліковий запис",
+ "delete_account": "Видалити аккаунт",
+ "moderation": "Модерація",
+ "delete_user_confirmation": "Ви абсолютно впевнені? Цю дію неможливо буде скасовувати.",
+ "delete_user": "Видалити обліковий запис",
+ "strip_media": "Вилучити медіа з дописів користувача",
+ "force_nsfw": "Позначити всі дописи як NSFW"
+ },
+ "deny": "Відмовити",
+ "block": "Заблокувати",
+ "approve": "Схвалити",
+ "mention": "Згадати",
+ "unsubscribe": "Відписатись",
+ "subscribe": "Підписатись",
+ "report": "Поскаржитись",
+ "per_day": "на день",
+ "favorites": "Вподобання",
+ "media": "Медіа"
+ },
+ "status": {
+ "copy_link": "Скопіювати посилання на допис",
+ "status_unavailable": "Допис недоступний",
+ "replies_list": "Відповіді:",
+ "delete_confirm": "Ви дійсно хочете видалити цей допис?",
+ "delete": "Видалити допис",
+ "pin": "Закріпити в профілі",
+ "status_deleted": "Цей допис був видалений",
+ "favorites": "Вподобане",
+ "hide_content": "Сховати вміст",
+ "show_content": "Показати вміст",
+ "hide_full_subject": "Сховати всю тему",
+ "show_full_subject": "Показати всю тему",
+ "thread_muted_and_words": ", має слова:",
+ "mute_conversation": "Заглушити розмову",
+ "reply_to": "Відповідь",
+ "unbookmark": "Видалити із закладок",
+ "bookmark": "Додати до закладок",
+ "pinned": "Закріплено",
+ "unpin": "Відкріпити від профілю",
+ "repeats": "Повтори"
+ },
+ "timeline": {
+ "no_more_statuses": "Більше немає дописів",
+ "up_to_date": "Оновлено",
+ "reload": "Оновити",
+ "show_new": "Показати нові",
+ "load_older": "Завантажити давніші дописи",
+ "error": "Помилка завантаження стрічки: {0}",
+ "collapse": "Згорнути",
+ "conversation": "Розмова",
+ "no_statuses": "Ніяких статусів",
+ "repeated": "поширив(-ла)",
+ "no_retweet_hint": "Запис, позначено як \"тільки для відстежувачів\" або \"особисте\" і тому не може бути повторений"
+ },
+ "user_reporting": {
+ "submit": "Відправити",
+ "forward_to": "Переслати до {0}",
+ "forward_description": "Цей обліковий запис належить іншому інстансу. Відправити їм копію скарги?",
+ "additional_comments": "Додаткове пояснення",
+ "add_comment_description": "Скарга буде надіслана модераторам вашого інстансу. Нижче Ви можете додати пояснення чому ви вирішили поскаржитись на цей обліковий запис:",
+ "title": "Поскаржитись на {0}",
+ "generic_error": "Виникла помилка під час обробки вашого запиту."
+ },
+ "user_profile": {
+ "profile_loading_error": "Вибачте, під час завантаження цього профілю виникла помилка.",
+ "profile_does_not_exist": "Вибачте, цей профіль більше не існує."
}
}
diff --git a/src/modules/config.js b/src/modules/config.js
index 444b8ec7c3..cd088737cb 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -20,6 +20,7 @@ export const defaultState = {
customTheme: undefined,
customThemeSource: undefined,
hideISP: false,
+ hideInstanceWallpaper: false,
// bad name: actually hides posts of muted USERS
hideMutedPosts: undefined, // instance default
collapseMessageWithSubject: undefined, // instance default
diff --git a/src/modules/instance.js b/src/modules/instance.js
index 5f7bf0ec6f..411b1caa87 100644
--- a/src/modules/instance.js
+++ b/src/modules/instance.js
@@ -127,7 +127,7 @@ const instance = {
imageUrl: false,
replacement: values[key]
}
- }).sort((a, b) => a.displayText - b.displayText)
+ }).sort((a, b) => a.name > b.name ? 1 : -1)
commit('setInstanceOption', { name: 'emoji', value: emoji })
} else {
throw (res)
@@ -154,7 +154,7 @@ const instance = {
}
// Technically could use tags but those are kinda useless right now,
// should have been "pack" field, that would be more useful
- }).sort((a, b) => a.displayText.toLowerCase() > b.displayText.toLowerCase() ? 1 : 0)
+ }).sort((a, b) => a.displayText.toLowerCase() > b.displayText.toLowerCase() ? 1 : -1)
commit('setInstanceOption', { name: 'customEmoji', value: emoji })
} else {
throw (res)
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 6b825c3746..405903a9a4 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -162,7 +162,12 @@ const updateProfileImages = ({ credentials, avatar = null, banner = null, backgr
body: form
})
.then((data) => data.json())
- .then((data) => parseUser(data))
+ .then((data) => {
+ if (data.error) {
+ throw new Error(data.error)
+ }
+ return parseUser(data)
+ })
}
const updateProfile = ({ credentials, params }) => {
diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js
index c71bc15af8..f71d660975 100644
--- a/src/services/entity_normalizer/entity_normalizer.service.js
+++ b/src/services/entity_normalizer/entity_normalizer.service.js
@@ -1,6 +1,7 @@
import escape from 'escape-html'
import parseLinkHeader from 'parse-link-header'
import { isStatusNotification } from '../notification_utils/notification_utils.js'
+import punycode from 'punycode.js'
/** NOTICE! **
* Do not initialize UI-generated data here.
@@ -197,6 +198,19 @@ export const parseUser = (data) => {
output.rights = output.rights || {}
output.notification_settings = output.notification_settings || {}
+ // Convert punycode to unicode
+ if (output.screen_name.includes('@')) {
+ const parts = output.screen_name.split('@')
+ console.log(parts)
+ let unicodeDomain = punycode.toUnicode(parts[1])
+ if (unicodeDomain !== parts[1]) {
+ // Add some identifier so users can potentially spot spoofing attempts:
+ // lain.com and xn--lin-6cd.com would appear identical otherwise.
+ unicodeDomain = '🌏' + unicodeDomain
+ output.screen_name = [parts[0], unicodeDomain].join('@')
+ }
+ }
+
return output
}
@@ -280,7 +294,7 @@ export const parseStatus = (data) => {
if (output.poll) {
output.poll.options = (output.poll.options || []).map(field => ({
...field,
- title_html: addEmojis(field.title, data.emojis)
+ title_html: addEmojis(escape(field.title), data.emojis)
}))
}
output.pinned = data.pinned
diff --git a/src/services/theme_data/pleromafe.js b/src/services/theme_data/pleromafe.js
index 7ed8579757..bec1eebdfc 100644
--- a/src/services/theme_data/pleromafe.js
+++ b/src/services/theme_data/pleromafe.js
@@ -84,6 +84,10 @@ export const SLOT_INHERITANCE = {
opacity: 'bg',
priority: 1
},
+ wallpaper: {
+ depends: ['bg'],
+ color: (mod, bg) => brightness(-2 * mod, bg).rgb
+ },
fg: {
depends: [],
priority: 1
diff --git a/static/themes/redmond-xx-se.json b/static/themes/redmond-xx-se.json
index 24480d2c7b..b62769dbc7 100644
--- a/static/themes/redmond-xx-se.json
+++ b/static/themes/redmond-xx-se.json
@@ -267,6 +267,7 @@
},
"colors": {
"bg": "#c0c0c0",
+ "wallpaper": "#008080",
"text": "#000000",
"link": "#0000ff",
"accent": "#000080",
diff --git a/static/themes/redmond-xx.json b/static/themes/redmond-xx.json
index cf9010fe20..83b591091d 100644
--- a/static/themes/redmond-xx.json
+++ b/static/themes/redmond-xx.json
@@ -258,6 +258,7 @@
},
"colors": {
"bg": "#c0c0c0",
+ "wallpaper": "#008080",
"text": "#000000",
"link": "#0000ff",
"accent": "#000080",
diff --git a/static/themes/redmond-xxi.json b/static/themes/redmond-xxi.json
index 7fdc4a6d65..60ceae7c2c 100644
--- a/static/themes/redmond-xxi.json
+++ b/static/themes/redmond-xxi.json
@@ -240,6 +240,7 @@
},
"colors": {
"bg": "#d6d6ce",
+ "wallpaper": "#396ba5",
"text": "#000000",
"link": "#0000ff",
"accent": "#0a246a",
diff --git a/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js b/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js
index e1f7a958f9..a3f49b2cef 100644
--- a/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js
+++ b/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js
@@ -311,6 +311,12 @@ describe('API Entities normalizer', () => {
expect(parseUser(user)).to.have.property('hide_followers_count', false)
expect(parseUser(user)).to.have.property('hide_follows_count', true)
})
+
+ it('converts IDN to unicode and marks it as internatonal', () => {
+ const user = makeMockUserMasto({ acct: 'lain@xn--lin-6cd.com' })
+
+ expect(parseUser(user)).to.have.property('screen_name').that.equal('lain@🌏lаin.com')
+ })
})
// We currently use QvitterAPI notifications only, and especially due to MastoAPI lacking is_seen, support for MastoAPI
diff --git a/yarn.lock b/yarn.lock
index 86cd420f27..6682841b8d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -951,6 +951,11 @@
remark "^12.0.0"
unist-util-find-all-after "^3.0.1"
+"@testim/chrome-version@^1.0.7":
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/@testim/chrome-version/-/chrome-version-1.0.7.tgz#0cd915785ec4190f08a3a6acc9b61fc38fb5f1a9"
+ integrity sha512-8UT/J+xqCYfn3fKtOznAibsHpiuDshCb0fwgWxRazTT19Igp9ovoXMPhXyLD6m3CKQGTMHgqoxaFfMWaL40Rnw==
+
"@types/color-name@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
@@ -961,6 +966,11 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6"
integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=
+"@types/node@*":
+ version "14.14.19"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.19.tgz#5135176a8330b88ece4e9ab1fdcfc0a545b4bab4"
+ integrity sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ==
+
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
@@ -976,6 +986,13 @@
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+"@types/yauzl@^2.9.1":
+ version "2.9.1"
+ resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af"
+ integrity sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==
+ dependencies:
+ "@types/node" "*"
+
"@ungap/event-target@^0.1.0":
version "0.1.0"
resolved "https://registry.yarnpkg.com/@ungap/event-target/-/event-target-0.1.0.tgz#88d527d40de86c4b0c99a060ca241d755999915b"
@@ -1182,6 +1199,21 @@ agent-base@2:
extend "~3.0.0"
semver "~5.0.1"
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
ajv-errors@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
@@ -1209,15 +1241,6 @@ ajv@^6.10.2:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^6.5.5:
- version "6.6.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d"
- dependencies:
- fast-deep-equal "^2.0.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
@@ -1338,21 +1361,11 @@ array-slice@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- dependencies:
- array-uniq "^1.0.1"
-
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-array-uniq@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-
array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
@@ -1383,16 +1396,6 @@ asn1.js@^4.0.0:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
-asn1@~0.2.3:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
- dependencies:
- safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
assert@^1.1.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
@@ -1443,10 +1446,6 @@ async@^2.5.0:
dependencies:
lodash "^4.17.10"
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
atob@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
@@ -1475,13 +1474,12 @@ autoprefixer@^9.8.0:
postcss "^7.0.32"
postcss-value-parser "^4.1.0"
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-
-aws4@^1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+axios@^0.21.0:
+ version "0.21.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
+ integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
+ dependencies:
+ follow-redirects "^1.10.0"
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0"
@@ -1675,12 +1673,6 @@ base@^0.11.1:
mixin-deep "^1.2.0"
pascalcase "^0.1.1"
-bcrypt-pbkdf@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
- dependencies:
- tweetnacl "^0.14.3"
-
better-assert@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
@@ -1880,6 +1872,11 @@ buffer-alloc@^1.2.0:
buffer-alloc-unsafe "^1.1.0"
buffer-fill "^1.0.0"
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+
buffer-fill@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
@@ -2042,10 +2039,6 @@ caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001097:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001107.tgz#809360df7a5b3458f627aa46b0f6ed6d5239da9a"
integrity sha512-86rCH+G8onCmdN4VZzJet5uPELII59cUzDphko3thQFgAQG1RNa+sVLDoALIhRYmflo5iSIzWY3vu1XTWtNMQQ==
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-
ccount@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17"
@@ -2156,14 +2149,18 @@ chrome-trace-event@^1.0.0:
dependencies:
tslib "^1.9.0"
-chromedriver@^2.21.2:
- version "2.45.0"
- resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.45.0.tgz#8c1b158adbbd3e0ca3f7af19d459082245554378"
+chromedriver@^87.0.1:
+ version "87.0.4"
+ resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-87.0.4.tgz#749f69e9427880abff19c1838258c35238397e50"
+ integrity sha512-kD4N/L8c0nAzh1eEAiAbEIq6Pn5TvGvckODvP5dPqF90q5tPiAJZCoWWSOUV/mrPxiodjHPfmNeOfGERHugzug==
dependencies:
- del "^3.0.0"
- extract-zip "^1.6.7"
- mkdirp "^0.5.1"
- request "^2.88.0"
+ "@testim/chrome-version" "^1.0.7"
+ axios "^0.21.0"
+ del "^6.0.0"
+ extract-zip "^2.0.1"
+ https-proxy-agent "^5.0.0"
+ mkdirp "^1.0.4"
+ proxy-from-env "^1.1.0"
tcp-port-used "^1.0.1"
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
@@ -2198,6 +2195,11 @@ clean-css@4.2.x:
dependencies:
source-map "~0.6.0"
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
cli-cursor@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
@@ -2338,12 +2340,6 @@ combine-lists@^1.0.0:
dependencies:
lodash "^4.5.0"
-combined-stream@^1.0.6, combined-stream@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
- dependencies:
- delayed-stream "~1.0.0"
-
commander@2.17.x, commander@~2.17.1:
version "2.17.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
@@ -2378,7 +2374,7 @@ concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-concat-stream@1.6.2, concat-stream@^1.5.0:
+concat-stream@^1.5.0:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
dependencies:
@@ -2480,7 +2476,7 @@ core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0:
version "2.6.2"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.2.tgz#267988d7268323b349e20b4588211655f0e83944"
-core-util-is@1.0.2, core-util-is@~1.0.0:
+core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -2698,12 +2694,6 @@ cyclist@~0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- dependencies:
- assert-plus "^1.0.0"
-
data-uri-to-buffer@1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835"
@@ -2746,6 +2736,13 @@ debug@2.6.8:
dependencies:
ms "2.0.0"
+debug@4:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ dependencies:
+ ms "2.1.2"
+
debug@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87"
@@ -2837,20 +2834,19 @@ degenerator@~1.0.2:
escodegen "1.x.x"
esprima "3.x.x"
-del@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+del@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952"
+ integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==
dependencies:
- globby "^6.1.0"
- is-path-cwd "^1.0.0"
- is-path-in-cwd "^1.0.0"
- p-map "^1.1.1"
- pify "^3.0.0"
- rimraf "^2.2.8"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ globby "^11.0.1"
+ graceful-fs "^4.2.4"
+ is-glob "^4.0.1"
+ is-path-cwd "^2.2.0"
+ is-path-inside "^3.0.2"
+ p-map "^4.0.0"
+ rimraf "^3.0.2"
+ slash "^3.0.0"
delegates@^1.0.0:
version "1.0.0"
@@ -3010,13 +3006,6 @@ duplexify@^3.4.2, duplexify@^3.6.0:
readable-stream "^2.0.0"
stream-shift "^1.0.0"
-ecc-jsbn@~0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
- dependencies:
- jsbn "~0.1.0"
- safer-buffer "^2.1.0"
-
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -3520,7 +3509,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
assign-symbols "^1.0.0"
is-extendable "^1.0.1"
-extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.2:
+extend@3, extend@^3.0.0, extend@~3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
@@ -3551,18 +3540,16 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-extract-zip@^1.6.7:
- version "1.6.7"
- resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9"
+extract-zip@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
+ integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
dependencies:
- concat-stream "1.6.2"
- debug "2.6.9"
- mkdirp "0.5.1"
- yauzl "2.4.1"
-
-extsprintf@1.3.0, extsprintf@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ debug "^4.1.1"
+ get-stream "^5.1.0"
+ yauzl "^2.10.0"
+ optionalDependencies:
+ "@types/yauzl" "^2.9.1"
fast-deep-equal@^2.0.1:
version "2.0.1"
@@ -3604,9 +3591,10 @@ fastq@^1.6.0:
dependencies:
reusify "^1.0.4"
-fd-slicer@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+fd-slicer@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+ integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
dependencies:
pend "~1.2.0"
@@ -3763,6 +3751,11 @@ follow-redirects@^1.0.0:
dependencies:
debug "=3.1.0"
+follow-redirects@^1.10.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7"
+ integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==
+
for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -3773,18 +3766,6 @@ for-own@^0.1.4:
dependencies:
for-in "^1.0.1"
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.6"
- mime-types "^2.1.12"
-
formatio@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.2.0.tgz#f3b2167d9068c4698a8d51f4f760a39a54d818eb"
@@ -3890,6 +3871,13 @@ get-stream@^4.0.0:
dependencies:
pump "^3.0.0"
+get-stream@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
get-uri@2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.2.tgz#5c795e71326f6ca1286f2fc82575cd2bab2af578"
@@ -3905,12 +3893,6 @@ get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- dependencies:
- assert-plus "^1.0.0"
-
glob-base@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
@@ -3970,7 +3952,7 @@ glob@^5.0.15:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3:
+glob@^7.0.0, glob@^7.1.1, glob@^7.1.3:
version "7.1.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
dependencies:
@@ -4028,16 +4010,6 @@ globby@^11.0.1:
merge2 "^1.3.0"
slash "^3.0.0"
-globby@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
- dependencies:
- array-union "^1.0.1"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
globjoin@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
@@ -4054,6 +4026,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
version "4.1.15"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
+graceful-fs@^4.2.4:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
+ integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
+
"graceful-readlink@>= 1.0.0":
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
@@ -4072,17 +4049,6 @@ handlebars@^4.0.1:
optionalDependencies:
uglify-js "^3.1.4"
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-
-har-validator@~5.1.0:
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
- dependencies:
- ajv "^6.5.5"
- har-schema "^2.0.0"
-
hard-rejection@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
@@ -4304,14 +4270,6 @@ http-proxy@^1.13.0, http-proxy@^1.16.2:
follow-redirects "^1.0.0"
requires-port "^1.0.0"
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
https-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
@@ -4324,6 +4282,14 @@ https-proxy-agent@1:
debug "2"
extend "3"
+https-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
+ integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
iconv-lite@0.4.23, iconv-lite@^0.4.4:
version "0.4.23"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
@@ -4717,21 +4683,15 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-is-path-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+is-path-cwd@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
-is-path-in-cwd@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
- dependencies:
- is-path-inside "^1.0.0"
-
-is-path-inside@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
- dependencies:
- path-is-inside "^1.0.1"
+is-path-inside@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"
+ integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==
is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
version "1.1.0"
@@ -4787,7 +4747,7 @@ is-symbol@^1.0.2:
dependencies:
has-symbols "^1.0.0"
-is-typedarray@^1.0.0, is-typedarray@~1.0.0:
+is-typedarray@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -4885,10 +4845,6 @@ isparta@4.x.x:
source-map "^0.5.0"
which "^1.0.9"
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-
istanbul@0.4.5, istanbul@^0.4.0:
version "0.4.5"
resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
@@ -4946,10 +4902,6 @@ js-yaml@~3.7.0:
argparse "^1.0.7"
esprima "^2.6.0"
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-
jsesc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
@@ -4975,18 +4927,10 @@ json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
json3@3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
@@ -5015,15 +4959,6 @@ json5@^2.1.2:
dependencies:
minimist "^1.2.5"
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
karma-coverage@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.2.tgz#cc09dceb589a83101aca5fe70c287645ef387689"
@@ -5774,7 +5709,7 @@ mime-db@~1.37.0:
version "1.37.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
-mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19:
+mime-types@~2.1.18:
version "2.1.21"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
dependencies:
@@ -5894,6 +5829,11 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@
dependencies:
minimist "0.0.8"
+mkdirp@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
mkpath@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d"
@@ -5950,6 +5890,11 @@ ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
ms@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
@@ -6202,10 +6147,6 @@ number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-oauth-sign@~0.9.0:
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
-
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -6399,9 +6340,12 @@ p-locate@^4.1.0:
dependencies:
p-limit "^2.2.0"
-p-map@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
p-try@^1.0.0:
version "1.0.0"
@@ -6569,7 +6513,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+path-is-inside@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
@@ -6624,10 +6568,6 @@ pend@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-
phoenix@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/phoenix/-/phoenix-1.4.0.tgz#9cec8dbd8cbc59ecd2147bc09ca8ceb56b860d75"
@@ -6641,10 +6581,6 @@ pify@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-
pify@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
@@ -7147,6 +7083,11 @@ proxy-agent@2.0.0:
pac-proxy-agent "1"
socks-proxy-agent "2"
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
@@ -7155,10 +7096,6 @@ pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-psl@^1.1.24:
- version "1.1.31"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
-
public-encrypt@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
@@ -7192,11 +7129,16 @@ pumpify@^1.3.3:
inherits "^2.0.3"
pump "^2.0.0"
+punycode.js@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.1.0.tgz#f3937f7a914152c2dc17e9c280a2cf86a26b7cda"
+ integrity sha512-LvGUJ9QHiESLM4yn8JuJWicstRcJKRmP46psQw1HvCZ9puLFwYMKJWvkAkP3OHBVzNzZGx/D53EYJrIaKd9gZQ==
+
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
-punycode@^1.2.4, punycode@^1.4.1:
+punycode@^1.2.4:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
@@ -7222,7 +7164,7 @@ qrcode@^1.3.0:
pngjs "^3.3.0"
yargs "^12.0.5"
-qs@6.5.2, qs@~6.5.2:
+qs@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
@@ -7606,31 +7548,6 @@ replace-ext@1.0.0:
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
-request@^2.88.0:
- version "2.88.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.8.0"
- caseless "~0.12.0"
- combined-stream "~1.0.6"
- extend "~3.0.2"
- forever-agent "~0.6.1"
- form-data "~2.3.2"
- har-validator "~5.1.0"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.19"
- oauth-sign "~0.9.0"
- performance-now "^2.1.0"
- qs "~6.5.2"
- safe-buffer "^5.1.2"
- tough-cookie "~2.4.3"
- tunnel-agent "^0.6.0"
- uuid "^3.3.2"
-
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -7713,12 +7630,19 @@ rfdc@^1.1.2:
version "1.1.4"
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2"
-rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2:
+rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
dependencies:
glob "^7.1.3"
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -7764,7 +7688,7 @@ safe-regex@^1.1.0:
dependencies:
ret "~0.1.10"
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+"safer-buffer@>= 2.1.2 < 3":
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
@@ -8148,20 +8072,6 @@ sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-sshpk@^1.7.0:
- version "1.16.0"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.0.tgz#1d4963a2fbffe58050aa9084ca20be81741c07de"
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- bcrypt-pbkdf "^1.0.0"
- dashdash "^1.12.0"
- ecc-jsbn "~0.1.1"
- getpass "^0.1.1"
- jsbn "~0.1.0"
- safer-buffer "^2.0.2"
- tweetnacl "~0.14.0"
-
ssri@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
@@ -8647,13 +8557,6 @@ toposort@^1.0.0:
version "1.0.7"
resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
-tough-cookie@~2.4.3:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
- dependencies:
- psl "^1.1.24"
- punycode "^1.4.1"
-
trim-newlines@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
@@ -8690,16 +8593,6 @@ tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- dependencies:
- safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
@@ -8995,14 +8888,6 @@ vendors@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801"
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
vfile-location@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3"
@@ -9331,11 +9216,13 @@ yargs@^12.0.5:
y18n "^3.2.1 || ^4.0.0"
yargs-parser "^11.1.1"
-yauzl@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+yauzl@^2.10.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+ integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
dependencies:
- fd-slicer "~1.0.1"
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.1.0"
yeast@0.1.2:
version "0.1.2"