diff --git a/CODEOWNERS b/CODEOWNERS index 42fc73ded7..b7291a40be 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -8,8 +8,17 @@ # /config/locales/*.fr.yml @żelipapą # /config/locales/fr.yml @żelipapą +# Polish /app/javascript/mastodon/locales/pl.json @m4sk1n /app/views/user_mailer/*.pl.html.erb @m4sk1n /app/views/user_mailer/*.pl.text.erb @m4sk1n /config/locales/*.pl.yml @m4sk1n /config/locales/pl.yml @m4sk1n + +# French +/app/javascript/mastodon/locales/fr.json @aldarone +/app/javascript/mastodon/locales/whitelist_fr.json @aldarone +/app/views/user_mailer/*.fr.html.erb @aldarone +/app/views/user_mailer/*.fr.text.erb @aldarone +/config/locales/*.fr.yml @aldarone +/config/locales/fr.yml @aldarone diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index fff5f529ce..656226fcac 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -80,6 +80,7 @@ export default class Status extends ImmutablePureComponent { componentWillReceiveProps (nextProps) { if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) { + this._scrolledIntoView = false; this.props.dispatch(fetchStatus(nextProps.params.statusId)); } } @@ -242,11 +243,17 @@ export default class Status extends ImmutablePureComponent { } componentDidUpdate () { + if (this._scrolledIntoView) { + return; + } + const { status, ancestorsIds } = this.props; if (status && ancestorsIds && ancestorsIds.size > 0) { - const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size]; - element.scrollIntoView(); + const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1]; + + element.scrollIntoView(true); + this._scrolledIntoView = true; } } diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 350d92c444..48f174c4c7 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -168,8 +168,8 @@ "search_popout.search_format": "Recherche avancée", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "statuts", - "search_popout.tips.text": "Un texte simple renvoie les noms affichés, les noms d'utilisateur et les hashtags correspondants", - "search_popout.tips.user": "utilisateur", + "search_popout.tips.text": "Un texte simple renvoie les noms affichés, les noms d'utilisateur⋅ice et les hashtags correspondants", + "search_popout.tips.user": "utilisateur⋅ice", "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", "standalone.public_title": "Jeter un coup d’œil…", "status.cannot_reblog": "Cette publication ne peut être boostée", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index bad2d78c5a..a3e237f6bf 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -66,17 +66,17 @@ "embed.instructions": "Embed deze toot op jouw website, door de onderstaande code te kopiëren.", "embed.preview": "Zo komt het eruit te zien:", "emoji_button.activity": "Activiteiten", - "emoji_button.custom": "Custom", + "emoji_button.custom": "Lokale emoji’s", "emoji_button.flags": "Vlaggen", "emoji_button.food": "Eten en drinken", "emoji_button.label": "Emoji toevoegen", "emoji_button.nature": "Natuur", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Geen emoji’s!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Voorwerpen", "emoji_button.people": "Mensen", - "emoji_button.recent": "Frequently used", + "emoji_button.recent": "Vaak gebruikt", "emoji_button.search": "Zoeken...", - "emoji_button.search_results": "Search results", + "emoji_button.search_results": "Zoekresultaten", "emoji_button.symbols": "Symbolen", "emoji_button.travel": "Reizen en plekken", "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!", @@ -165,11 +165,11 @@ "report.submit": "Verzenden", "report.target": "Rapporteren van", "search.placeholder": "Zoeken", - "search_popout.search_format": "Advanced search format", + "search_popout.search_format": "Geavanceerd zoeken", "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", + "search_popout.tips.status": "toot", + "search_popout.tips.text": "Gebruik gewone tekst om te zoeken op weergavenamen, gebruikersnamen en hashtags.", + "search_popout.tips.user": "gebruiker", "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", "standalone.public_title": "Een kijkje binnenin...", "status.cannot_reblog": "Deze toot kan niet geboost worden", @@ -201,11 +201,11 @@ "tabs_bar.notifications": "Meldingen", "upload_area.title": "Hierin slepen om te uploaden", "upload_button.label": "Media toevoegen", - "upload_form.description": "Describe for the visually impaired", + "upload_form.description": "Omschrijf dit voor mensen met een visuele beperking", "upload_form.undo": "Ongedaan maken", "upload_progress.label": "Uploaden...", - "video.close": "Close video", - "video.exit_fullscreen": "Exit full screen", + "video.close": "Video sluiten", + "video.exit_fullscreen": "Volledig scherm sluiten", "video.expand": "Video groter maken", "video.fullscreen": "Volledig scherm", "video.hide": "Video verbergen", diff --git a/app/javascript/styles/basics.scss b/app/javascript/styles/basics.scss index b829191ad4..43c32c8bc6 100644 --- a/app/javascript/styles/basics.scss +++ b/app/javascript/styles/basics.scss @@ -29,8 +29,7 @@ body { font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", mastodon-font-sans-serif, sans-serif; } - &.app-body, - &.error { + &.app-body { position: fixed; width: 100%; height: 100%; @@ -70,25 +69,34 @@ body { } &.error { + position: absolute; text-align: center; color: $ui-primary-color; - padding: 20px; + background: $ui-base-color; + width: 100%; + height: 100%; + padding: 0; display: flex; justify-content: center; align-items: center; - .dialog img { - display: block; - max-width: 470px; - width: 100%; - height: auto; - margin-top: -120px; - } + .dialog { + vertical-align: middle; + margin: 20px; - .dialog h1 { - font-size: 20px; - line-height: 28px; - font-weight: 400; + img { + display: block; + max-width: 470px; + width: 100%; + height: auto; + margin-top: -120px; + } + + h1 { + font-size: 20px; + line-height: 28px; + font-weight: 400; + } } } } diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml index 3b4219c561..c3f5cb8422 100644 --- a/app/views/home/index.html.haml +++ b/app/views/home/index.html.haml @@ -1,4 +1,10 @@ - content_for :header_tags do + %link{ href: asset_pack_path('features/getting_started.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ + %link{ href: asset_pack_path('features/compose.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ + %link{ href: asset_pack_path('features/home_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ + %link{ href: asset_pack_path('features/notifications.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ + %link{ href: asset_pack_path('features/community_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ + %link{ href: asset_pack_path('features/public_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key} %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json) diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index e6190f7e2a..24b74c787c 100755 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -20,14 +20,6 @@ = stylesheet_pack_tag 'common', media: 'all' = javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' - - %link{ href: asset_pack_path('features/getting_started.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ - %link{ href: asset_pack_path('features/compose.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ - %link{ href: asset_pack_path('features/home_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ - %link{ href: asset_pack_path('features/notifications.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ - %link{ href: asset_pack_path('features/community_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ - %link{ href: asset_pack_path('features/public_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ - = javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous' = csrf_meta_tags diff --git a/app/views/shared/_og.html.haml b/app/views/shared/_og.html.haml index dbd476915b..a6d805bea2 100644 --- a/app/views/shared/_og.html.haml +++ b/app/views/shared/_og.html.haml @@ -1,6 +1,6 @@ - thumbnail = @instance_presenter.thumbnail = opengraph 'og:site_name', t('about.hosted_on', domain: site_hostname) -= opengraph 'og:url', about_url += opengraph 'og:url', url_for(only_path: false) = opengraph 'og:type', 'website' = opengraph 'og:title', @instance_presenter.site_title = opengraph 'og:description', strip_tags(@instance_presenter.site_description.presence || t('about.about_mastodon_html')) diff --git a/lib/mastodon/migration_helpers.rb b/lib/mastodon/migration_helpers.rb index ed716501e7..80a8f440c3 100644 --- a/lib/mastodon/migration_helpers.rb +++ b/lib/mastodon/migration_helpers.rb @@ -335,7 +335,10 @@ module Mastodon start_arel = table.project(table[:id]).order(table[:id].asc).take(1) start_arel = yield table, start_arel if block_given? - start_id = exec_query(start_arel.to_sql).to_hash.first['id'].to_i + first_row = exec_query(start_arel.to_sql).to_hash.first + # In case there are no rows but we didn't catch it in the estimated size: + return unless first_row + start_id = first_row['id'].to_i say "Migrating #{table_name}.#{column} (~#{total.to_i} rows)" diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png index 2d2d25e37f..923d0d7dec 100644 Binary files a/public/android-chrome-192x192.png and b/public/android-chrome-192x192.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png index 829263f839..70ec8dbf9b 100644 Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png index e8e289eaac..b6cd056c0e 100644 Binary files a/public/mstile-150x150.png and b/public/mstile-150x150.png differ