Merge pull request #2772 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes up to 2ea9336b68
main
Claire 2024-07-10 18:11:50 +02:00 committed by GitHub
commit 5c9c02417a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 141 additions and 38 deletions

View File

@ -1 +1 @@
3.3.3
3.3.4

View File

@ -12,7 +12,7 @@ ARG BUILDPLATFORM=${BUILDPLATFORM}
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.x"]
# renovate: datasource=docker depName=docker.io/ruby
ARG RUBY_VERSION="3.3.3"
ARG RUBY_VERSION="3.3.4"
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
# renovate: datasource=node-version depName=node
ARG NODE_MAJOR_VERSION="20"
@ -67,7 +67,9 @@ ENV \
# Optimize jemalloc 5.x performance
MALLOC_CONF="narenas:2,background_thread:true,thp:never,dirty_decay_ms:1000,muzzy_decay_ms:0" \
# Enable libvips, should not be changed
MASTODON_USE_LIBVIPS=true
MASTODON_USE_LIBVIPS=true \
# Sidekiq will touch tmp/sidekiq_process_has_started_and_will_begin_processing_jobs to indicate it is ready. This can be used for a readiness check in Kubernetes
MASTODON_SIDEKIQ_READY_FILENAME=sidekiq_process_has_started_and_will_begin_processing_jobs
# Set default shell used for running commands
SHELL ["/bin/bash", "-o", "pipefail", "-o", "errexit", "-c"]

View File

@ -1430,6 +1430,8 @@ body > [data-popper-placement] {
min-height: 54px;
border-bottom: 1px solid var(--background-border-color);
cursor: auto;
opacity: 1;
animation: fade 150ms linear;
@keyframes fade {
0% {
@ -1441,9 +1443,6 @@ body > [data-popper-placement] {
}
}
opacity: 1;
animation: fade 150ms linear;
.media-gallery,
.video-player,
.audio-player,
@ -5199,9 +5198,11 @@ a.status-card {
&__menu {
@include search-popout;
& {
padding: 0;
background: $ui-secondary-color;
}
}
&__menu-list {
padding: 6px;

View File

@ -197,7 +197,7 @@
"copy_icon_button.copied": "Zkopírováno do schránky",
"copypaste.copied": "Zkopírováno",
"copypaste.copy_to_clipboard": "Zkopírovat do schránky",
"directory.federated": "Ze známého fedivesmíru",
"directory.federated": "Ze známého fediversu",
"directory.local": "Pouze z {domain}",
"directory.new_arrivals": "Nově příchozí",
"directory.recently_active": "Nedávno aktivní",
@ -213,7 +213,7 @@
"domain_block_modal.block_account_instead": "Raději blokovat @{name}",
"domain_block_modal.they_can_interact_with_old_posts": "Lidé z tohoto serveru mohou interagovat s vašimi starými příspěvky.",
"domain_block_modal.they_cant_follow": "Nikdo z tohoto serveru vás nemůže sledovat.",
"domain_block_modal.they_wont_know": "Nebude vědět, že je zablokován.",
"domain_block_modal.they_wont_know": "Nebude vědět, že je zablokován*a.",
"domain_block_modal.title": "Blokovat doménu?",
"domain_block_modal.you_will_lose_followers": "Všichni vaši sledující z tohoto serveru budou odstraněni.",
"domain_block_modal.you_wont_see_posts": "Neuvidíte příspěvky ani upozornění od uživatelů z tohoto serveru.",
@ -341,7 +341,7 @@
"hashtag.column_settings.tag_mode.any": "Jakýkoliv z těchto",
"hashtag.column_settings.tag_mode.none": "Žádný z těchto",
"hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci další štítky",
"hashtag.counter_by_accounts": "{count, plural, one {{counter} účastník} few {{counter} účastníci} other {{counter} účastníků}}",
"hashtag.counter_by_accounts": "{count, plural, one {{counter} účastník*ice} few {{counter} účastníci} other {{counter} účastníků}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}",
"hashtag.counter_by_uses_today": "Dnes {count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}",
"hashtag.follow": "Sledovat hashtag",
@ -440,7 +440,7 @@
"mute_modal.show_options": "Zobrazit možnosti",
"mute_modal.they_can_mention_and_follow": "Mohou vás zmínit a sledovat, ale neuvidíte je.",
"mute_modal.they_wont_know": "Nebudou vědět, že byli skryti.",
"mute_modal.title": "Ztlumit uživatele?",
"mute_modal.title": "Ztlumit uživatele*ku?",
"mute_modal.you_wont_see_mentions": "Neuvidíte příspěvky, které je zmiňují.",
"mute_modal.you_wont_see_posts": "Stále budou moci vidět vaše příspěvky, ale vy jejich neuvidíte.",
"navigation_bar.about": "O aplikaci",
@ -566,8 +566,8 @@
"onboarding.share.message": "Jsem {username} na #Mastodonu! Pojď mě sledovat na {url}",
"onboarding.share.next_steps": "Možné další kroky:",
"onboarding.share.title": "Sdílejte svůj profil",
"onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
"onboarding.start.skip": "Want to skip right ahead?",
"onboarding.start.lead": "Nyní jste součástí Mastodonu, unikátní sociální sítě, kde vy - ne algoritmus - vytváří vaše vlastní prožitky. Začněte na této nové sociální platformě:",
"onboarding.start.skip": "Nepotřebujete pomoci začít?",
"onboarding.start.title": "Dokázali jste to!",
"onboarding.steps.follow_people.body": "Mastodon je o sledování zajimavých lidí.",
"onboarding.steps.follow_people.title": "Přispůsobit vlastní domovský kanál",
@ -581,7 +581,7 @@
"onboarding.tips.accounts_from_other_servers": "<strong>Víte, že?</strong> Protože je Mastodon decentralizovaný, některé profily, na které narazíte, budou hostovány na jiných serverech, než je ten váš. A přesto s nimi můžete bezproblémově komunikovat! Jejich server se nachází v druhé polovině uživatelského jména!",
"onboarding.tips.migration": "<strong>Víte, že?</strong> Pokud máte pocit, že {domain} pro vás v budoucnu není vhodnou volbou, můžete se přesunout na jiný Mastodon server, aniž byste přišli o své sledující. Můžete dokonce hostovat svůj vlastní server!",
"onboarding.tips.verification": "<strong>Víte, že?</strong> Svůj účet můžete ověřit tak, že na své webové stránky umístíte odkaz na váš Mastodon profil a odkaz na stránku přidáte do svého profilu. Nejsou k tomu potřeba žádné poplatky ani dokumenty!",
"password_confirmation.exceeds_maxlength": "Potvrzení hesla překračuje maximální délku hesla",
"password_confirmation.exceeds_maxlength": "Potvrzení hesla překračuje maximální povolenou délku hesla",
"password_confirmation.mismatching": "Zadaná hesla se neshodují",
"picture_in_picture.restore": "Vrátit zpět",
"poll.closed": "Uzavřeno",
@ -665,7 +665,7 @@
"report.unfollow": "Přestat sledovat @{name}",
"report.unfollow_explanation": "Tento účet sledujete. Abyste už neviděli jeho příspěvky ve své domovské časové ose, přestaňte jej sledovat.",
"report_notification.attached_statuses": "{count, plural, one {{count} připojený příspěvek} few {{count} připojené příspěvky} many {{count} připojených příspěvků} other {{count} připojených příspěvků}}",
"report_notification.categories.legal": "Zákonné",
"report_notification.categories.legal": "Právní ustanovení",
"report_notification.categories.other": "Ostatní",
"report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Porušení pravidla",

View File

@ -82,6 +82,7 @@
"alert.unexpected.title": "Ийой!",
"announcement.announcement": "Голошіня",
"audio.hide": "Зпрятати звук",
"block_modal.remote_users_caveat": "Попросиме ґазду сервера {domain} честовати вашоє рішеня. Айбо не ґарантуєме повный соглас, бо даякі серверы можут брати блокованя по-инчакому. Публичні дописы годно быти видко незалоґованым хосновачам.",
"block_modal.show_less": "Указати менше",
"block_modal.show_more": "Указати бульше",
"block_modal.they_cant_mention": "Они не можут вас споминати авадь слідовати.",
@ -111,5 +112,43 @@
"column.direct": "Шептаня",
"column.directory": "Никати профілі",
"column.domain_blocks": "Заблоковані домены",
"column.favourites": "Убраноє"
"column.favourites": "Убраноє",
"column.follow_requests": "Запросы на пудписку",
"column.lists": "Исписы",
"column.mutes": "Стишені хосновачі",
"column.notifications": "Убвіщеня",
"column.pins": "Закріплені публикації",
"column_back_button.label": "Назад",
"column_header.hide_settings": "Спрятати штімованя",
"column_header.moveLeft_settings": "Посунути колонку до ліва",
"column_header.moveRight_settings": "Посунути колонку до права",
"column_header.pin": "Закріпити",
"column_header.show_settings": "Указати штімованя",
"column_header.unpin": "Удкріпити",
"column_subheading.settings": "Штімованя",
"compose.language.change": "Поміняти язык",
"compose.language.search": "Глядати языкы...",
"compose.published.body": "Пост опубликованый.",
"compose.saved.body": "Пост усокоченый.",
"compose_form.direct_message_warning_learn_more": "Читайте бульше",
"compose_form.encryption_warning": "Публикації на Mastodon не шіфрувут ся. Не шырьте чутливу інформацію через Mastodon.",
"compose_form.hashtag_warning": "Сись пост не буде ся появляти у исписови по гештеґови, бо вун не є публичный. Лишек публичні посты буде видко за гештеґом.",
"compose_form.lock_disclaimer": "Ваш профіл є {locked}. Хоть-тко може ся на вас пудписати, обы видїти ваші ексклузівні посты.",
"compose_form.lock_disclaimer.lock": "замкнено",
"compose_form.placeholder": "Што нового?",
"compose_form.poll.duration": "Трывалость убзвідованя",
"compose_form.poll.multiple": "Дакулько варіантув",
"compose_form.poll.option_placeholder": "Варіант {number}",
"compose_form.poll.single": "Уберіт єден",
"compose_form.poll.switch_to_multiple": "Змінити убзвідованя обы поволити дакулько варіантув",
"compose_form.poll.switch_to_single": "Змінити убзвідованя обы поволити лишек єден варіант",
"compose_form.poll.type": "Стіл",
"compose_form.publish": "Публикація",
"compose_form.publish_form": "Нова публикація",
"compose_form.reply": "Удповідь",
"copypaste.copy_to_clipboard": "Копіровати у памнять",
"directory.recently_active": "Недавно актівні",
"disabled_account_banner.account_settings": "Штімованя акаунта",
"disabled_account_banner.text": "Ваш акаунт {disabledAccount} раз є неактівный.",
"dismissable_banner.community_timeline": "Туй сут недавні публикації уд профілув на серверови {domain}."
}

View File

@ -1366,6 +1366,8 @@ body > [data-popper-placement] {
min-height: 54px;
border-bottom: 1px solid var(--background-border-color);
cursor: auto;
opacity: 1;
animation: fade 150ms linear;
@keyframes fade {
0% {
@ -1377,9 +1379,6 @@ body > [data-popper-placement] {
}
}
opacity: 1;
animation: fade 150ms linear;
.media-gallery,
.video-player,
.audio-player,
@ -4851,9 +4850,11 @@ a.status-card {
&__menu {
@include search-popout;
& {
padding: 0;
background: $ui-secondary-color;
}
}
&__menu-list {
padding: 6px;

View File

@ -2503,6 +2503,7 @@ body {
background: $win95-tooltip-yellow;
border: 1px solid black;
padding: 4px;
margin-bottom: 24px;
h1, h1 small {
color:black;
@ -2510,8 +2511,6 @@ body {
text-overflow: unset;
}
margin-bottom: 24px;
&:after {
content: "";
display:block;

View File

@ -274,7 +274,7 @@ class LinkDetailsExtractor
end
def detect_encoding_and_parse_document
[detect_encoding, nil, @html_charset].uniq.each do |encoding|
[detect_encoding, nil, header_encoding].uniq.each do |encoding|
document = Nokogiri::HTML(@html, nil, encoding)
return document if document.to_s.valid_encoding?
end
@ -286,6 +286,13 @@ class LinkDetailsExtractor
guess&.fetch(:confidence, 0).to_i > 60 ? guess&.fetch(:encoding, nil) : nil
end
def header_encoding
Encoding.find(@html_charset).name if @html_charset
rescue ArgumentError
# Encoding from HTTP header is not recognized by ruby
nil
end
def detector
@detector ||= CharlockHolmes::EncodingDetector.new.tap do |detector|
detector.strip_tags = true

View File

@ -2,19 +2,24 @@
require_relative '../../lib/mastodon/sidekiq_middleware'
SIDEKIQ_WILL_PROCESSES_JOBS_FILE = Rails.root.join('tmp', 'sidekiq_process_has_started_and_will_begin_processing_jobs').freeze
Sidekiq.configure_server do |config|
config.redis = REDIS_SIDEKIQ_PARAMS
# This is used in Kubernetes setups, to signal that the Sidekiq process has started and will begin processing jobs
# This comes from https://github.com/sidekiq/sidekiq/wiki/Kubernetes#sidekiq
ready_filename = ENV.fetch('MASTODON_SIDEKIQ_READY_FILENAME', nil)
if ready_filename
raise 'MASTODON_SIDEKIQ_READY_FILENAME is not a valid filename' if File.basename(ready_filename) != ready_filename
ready_path = Rails.root.join('tmp', ready_filename)
config.on(:startup) do
FileUtils.touch(SIDEKIQ_WILL_PROCESSES_JOBS_FILE)
FileUtils.touch(ready_path)
end
config.on(:shutdown) do
FileUtils.rm_f(SIDEKIQ_WILL_PROCESSES_JOBS_FILE)
FileUtils.rm_f(ready_path)
end
end
config.server_middleware do |chain|

View File

@ -118,7 +118,7 @@ cs:
promote: Povýšit
protocol: Protokol
public: Veřejný
push_subscription_expires: Odebírání PuSH expiruje
push_subscription_expires: Odebírání PuSH vyprší
redownload: Obnovit profil
redownloaded_msg: Profil účtu %{username} byl úspěšně obnoven ze zdroje
reject: Zamítnout

View File

@ -25,7 +25,7 @@ lv:
edit: Labot
submit: Apstiprināt
confirmations:
destroy: Vai esi pārliecināts?
destroy: Vai tiešām?
edit:
title: Labot lietotni
form:
@ -69,7 +69,7 @@ lv:
buttons:
revoke: Atsaukt
confirmations:
revoke: Vai esi pārliecināts?
revoke: Vai tiešām?
index:
authorized_at: Autorizētas %{date}
description_html: Šīs ir lietotnes, kas var piekļūt Tavam kontam ar API. Ja šeit ir lietotnes, kuras neatpazīsti, vai lietotne darbojas ne tā, kā paredzēts, vari atsaukt tās piekļuvi.
@ -135,6 +135,7 @@ lv:
media: Multividesu pielikumi
mutes: Apklusinātie
notifications: Paziņojumi
profile: Tavs Mastodon profils
push: Uznirstošie paziņojumi
reports: Ziņojumi
search: Meklēt
@ -165,6 +166,7 @@ lv:
admin:write:reports: veikt moderācijas darbības pārskatos
crypto: lieto pilnīgu šifrēšanu
follow: mainīt konta attiecības
profile: lasīt tikai Tava konta profila informāciju
push: saņemt savus push paziņojumus
read: lasīt visus sava konta datus
read:accounts: apskatīt kontu informāciju

View File

@ -1 +1,21 @@
---
ry:
accounts:
follow: Пудписати ся
following: Пудпискы
posts:
few: Публикації
one: Публикація
other: Публикації
posts_tab_heading: Публикації
imports:
titles:
following: Імпортованя пудписок
types:
following: Испис пудписок
notification_mailer:
follow:
body: "%{name} ся пудписує ся на вас!"
subject: "%{name} ся пудписує ся на вас"
relationships:
following: Пудпискы

View File

@ -0,0 +1,18 @@
HTTP/1.1 200 OK
server: nginx
date: Thu, 13 Jun 2024 14:33:13 GMT
content-type: text/html; charset=utf8
content-length: 192
accept-ranges: bytes
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Webserver Configs R Us</title>
</head>
<body>
<h2>Welcome</h2>
<p>Sneaky non-UTF character: á</p>
</body>
</html>

View File

@ -32,6 +32,7 @@ RSpec.describe FetchLinkCardService do
stub_request(:get, 'http://example.com/aergerliche-umlaute').to_return(request_fixture('redirect_with_utf8_url.txt'))
stub_request(:get, 'http://example.com/page_without_title').to_return(request_fixture('page_without_title.txt'))
stub_request(:get, 'http://example.com/long_canonical_url').to_return(request_fixture('long_canonical_url.txt'))
stub_request(:get, 'http://example.com/alternative_utf8_spelling_in_header').to_return(request_fixture('alternative_utf8_spelling_in_header.txt'))
Rails.cache.write('oembed_endpoint:example.com', oembed_cache) if oembed_cache
@ -292,6 +293,14 @@ RSpec.describe FetchLinkCardService do
expect(status.preview_card).to be_nil
end
end
context 'with a URL where the `Content-Type` header uses `utf8` instead of `utf-8`' do
let(:status) { Fabricate(:status, text: 'test http://example.com/alternative_utf8_spelling_in_header') }
it 'does not create a preview card' do
expect(status.preview_card.title).to eq 'Webserver Configs R Us'
end
end
end
context 'with a remote status' do

View File

@ -15486,15 +15486,15 @@ __metadata:
linkType: hard
"sass@npm:^1.62.1":
version: 1.77.6
resolution: "sass@npm:1.77.6"
version: 1.77.7
resolution: "sass@npm:1.77.7"
dependencies:
chokidar: "npm:>=3.0.0 <4.0.0"
immutable: "npm:^4.0.0"
source-map-js: "npm:>=0.6.2 <2.0.0"
bin:
sass: sass.js
checksum: 10c0/fe5a393c0aa29eda9f83c06be9b94788b61fe8bad0616ee6e3a25d21ab504f430d40c0064fdca89b02b8e426411ae6dcd906c91f2e48c263575c3d392b6daeb1
checksum: 10c0/6cacbf4b5165d30a9be0f09438aed85ff0617e5087442e65c23c8464750ff1b9988855a58f36b420b62f992d1e82403f99810aba7731519d3d026847e21a5635
languageName: node
linkType: hard