diff options
Diffstat (limited to 'app')
31 files changed, 145 insertions, 110 deletions
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5e7fdffb0..fc006d777 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -69,8 +69,12 @@ module ApplicationHelper tag(:meta, content: content, property: property) end - def react_component(name, props = {}) - content_tag(:div, nil, data: { component: name.to_s.camelcase, props: Oj.dump(props) }) + def react_component(name, props = {}, &block) + if block.nil? + content_tag(:div, nil, data: { component: name.to_s.camelcase, props: Oj.dump(props) }) + else + content_tag(:div, data: { component: name.to_s.camelcase, props: Oj.dump(props) }, &block) + end end def body_classes diff --git a/app/javascript/flavours/glitch/components/hashtag.js b/app/javascript/flavours/glitch/components/hashtag.js index 88689cc6c..d75edd994 100644 --- a/app/javascript/flavours/glitch/components/hashtag.js +++ b/app/javascript/flavours/glitch/components/hashtag.js @@ -1,16 +1,16 @@ import React from 'react'; import { Sparklines, SparklinesCurve } from 'react-sparklines'; -import { Link } from 'react-router-dom'; import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import Permalink from './permalink'; import { shortNumberFormat } from 'flavours/glitch/util/numbers'; const Hashtag = ({ hashtag }) => ( <div className='trends__item'> <div className='trends__item__name'> - <Link to={`/timelines/tag/${hashtag.get('name')}`}> + <Permalink href={hashtag.get('url')} to={`/timelines/tag/${hashtag.get('name')}`}> #<span>{hashtag.get('name')}</span> - </Link> + </Permalink> <FormattedMessage id='trends.count_by_accounts' defaultMessage='{count} {rawCount, plural, one {person} other {people}} talking' values={{ rawCount: hashtag.getIn(['history', 0, 'accounts']), count: <strong>{shortNumberFormat(hashtag.getIn(['history', 0, 'accounts']))}</strong> }} /> </div> diff --git a/app/javascript/flavours/glitch/features/ui/index.js b/app/javascript/flavours/glitch/features/ui/index.js index f043f767e..7928dfe6c 100644 --- a/app/javascript/flavours/glitch/features/ui/index.js +++ b/app/javascript/flavours/glitch/features/ui/index.js @@ -182,6 +182,7 @@ export default class UI extends React.Component { e.preventDefault(); this.setState({ draggingOver: false }); + this.dragTargets = []; if (e.dataTransfer && e.dataTransfer.files.length === 1) { this.props.dispatch(uploadCompose(e.dataTransfer.files)); diff --git a/app/javascript/flavours/glitch/packs/public.js b/app/javascript/flavours/glitch/packs/public.js index 342c5265e..56012ba78 100644 --- a/app/javascript/flavours/glitch/packs/public.js +++ b/app/javascript/flavours/glitch/packs/public.js @@ -61,6 +61,12 @@ function main() { if (reactComponents.length > 0) { import(/* webpackChunkName: "containers/media_container" */ 'flavours/glitch/containers/media_container') .then(({ default: MediaContainer }) => { + [].forEach.call(reactComponents, (component) => { + [].forEach.call(component.children, (child) => { + component.removeChild(child); + }); + }); + const content = document.createElement('div'); ReactDOM.render(<MediaContainer locale={locale} components={reactComponents} />, content); diff --git a/app/javascript/flavours/glitch/styles/about.scss b/app/javascript/flavours/glitch/styles/about.scss index f676a8c77..c8d144e5b 100644 --- a/app/javascript/flavours/glitch/styles/about.scss +++ b/app/javascript/flavours/glitch/styles/about.scss @@ -1270,8 +1270,7 @@ $small-breakpoint: 960px; } #mastodon-timeline { - display: block; - width: 100vw; + display: flex; height: 100vh; border-radius: 0; } diff --git a/app/javascript/flavours/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss index e7124a2c0..4e969601b 100644 --- a/app/javascript/flavours/glitch/styles/admin.scss +++ b/app/javascript/flavours/glitch/styles/admin.scss @@ -1,4 +1,6 @@ $no-columns-breakpoint: 600px; +$sidebar-width: 240px; +$content-width: 840px; .admin-wrapper { display: flex; @@ -6,7 +8,7 @@ $no-columns-breakpoint: 600px; height: 100%; .sidebar-wrapper { - flex: 1; + flex: 1 1 $sidebar-width; height: 100%; background: $ui-base-color; display: flex; @@ -14,7 +16,7 @@ $no-columns-breakpoint: 600px; } .sidebar { - width: 240px; + width: $sidebar-width; height: 100%; padding: 0; overflow-y: auto; @@ -95,12 +97,12 @@ $no-columns-breakpoint: 600px; } .content-wrapper { - flex: 2; + flex: 2 1 $content-width; overflow: auto; } .content { - max-width: 700px; + max-width: $content-width; padding: 20px 15px; padding-top: 60px; padding-left: 25px; diff --git a/app/javascript/mastodon/components/hashtag.js b/app/javascript/mastodon/components/hashtag.js index a407df31e..f091d7893 100644 --- a/app/javascript/mastodon/components/hashtag.js +++ b/app/javascript/mastodon/components/hashtag.js @@ -1,16 +1,16 @@ import React from 'react'; import { Sparklines, SparklinesCurve } from 'react-sparklines'; -import { Link } from 'react-router-dom'; import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import Permalink from './permalink'; import { shortNumberFormat } from '../utils/numbers'; const Hashtag = ({ hashtag }) => ( <div className='trends__item'> <div className='trends__item__name'> - <Link to={`/timelines/tag/${hashtag.get('name')}`}> + <Permalink href={hashtag.get('url')} to={`/timelines/tag/${hashtag.get('name')}`}> #<span>{hashtag.get('name')}</span> - </Link> + </Permalink> <FormattedMessage id='trends.count_by_accounts' defaultMessage='{count} {rawCount, plural, one {person} other {people}} talking' values={{ rawCount: hashtag.getIn(['history', 0, 'accounts']), count: <strong>{shortNumberFormat(hashtag.getIn(['history', 0, 'accounts']))}</strong> }} /> </div> diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index cb88e538a..a59c0a257 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -259,6 +259,7 @@ class UI extends React.PureComponent { e.preventDefault(); this.setState({ draggingOver: false }); + this.dragTargets = []; if (e.dataTransfer && e.dataTransfer.files.length === 1) { this.props.dispatch(uploadCompose(e.dataTransfer.files)); diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index f558a6ddc..45b074a52 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -132,8 +132,8 @@ "follow_request.authorize": "ترخيص", "follow_request.reject": "رفض", "getting_started.developers": "المُطوِّرون", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", + "getting_started.directory": "دليل المستخدِمين والمستخدِمات", + "getting_started.documentation": "الدليل", "getting_started.heading": "إستعدّ للبدء", "getting_started.invite": "دعوة أشخاص", "getting_started.open_source_notice": "ماستدون برنامج مفتوح المصدر. يمكنك المساهمة، أو الإبلاغ عن تقارير الأخطاء، على جيت هب {github}.", @@ -156,7 +156,7 @@ "introduction.federation.home.text": "سوف تُعرَض منشورات الأشخاص الذين تُتابِعهم على الخيط الرئيسي. بإمكانك متابعة أي حساب أيا كان الخادم الذي هو عليه!", "introduction.federation.local.headline": "Local", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish tutorial!", + "introduction.interactions.action": "إنهاء العرض التوضيحي!", "introduction.interactions.favourite.headline": "الإضافة إلى المفضلة", "introduction.interactions.favourite.text": "يمكِنك إضافة أي تبويق إلى المفضلة و إعلام صاحبه أنك أعجِبت بذاك التبويق.", "introduction.interactions.reblog.headline": "الترقية", @@ -293,7 +293,7 @@ "search_results.total": "{count, number} {count, plural, one {result} و {results}}", "standalone.public_title": "نظرة على ...", "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_status": "افتح هذا المنشور على واجهة الإشراف", "status.block": "Block @{name}", "status.cancel_reblog_private": "إلغاء الترقية", "status.cannot_reblog": "تعذرت ترقية هذا المنشور", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 6b911711e..302ff2573 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -292,8 +292,8 @@ "search_results.statuses": "Toots", "search_results.total": "{count, number} {count, plural, un {result} altres {results}}", "standalone.public_title": "Una mirada a l'interior ...", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Obre l'interfície de moderació per a @{name}", + "status.admin_status": "Obre aquest estat a la interfície de moderació", "status.block": "Block @{name}", "status.cancel_reblog_private": "Desfer l'impuls", "status.cannot_reblog": "Aquesta publicació no pot ser retootejada", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 0277a513b..496f13e7d 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -292,8 +292,8 @@ "search_results.statuses": "Statuti", "search_results.total": "{count, number} {count, plural, one {risultatu} other {risultati}}", "standalone.public_title": "Una vista à l'internu...", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Apre l'interfaccia di muderazione per @{name}", + "status.admin_status": "Apre stu statutu in l'interfaccia di muderazione", "status.block": "Bluccà @{name}", "status.cancel_reblog_private": "Ùn sparte più", "status.cannot_reblog": "Stu statutu ùn pò micca esse spartutu", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 31c21cce5..7e8d7b8d3 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -292,8 +292,8 @@ "search_results.statuses": "Tooty", "search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledku} other {výsledků}}", "standalone.public_title": "Nahlédněte dovnitř...", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Otevřít moderační rozhraní pro uživatele @{name}", + "status.admin_status": "Otevřít tento příspěvek v moderačním rozhraní", "status.block": "Zablokovat uživatele @{name}", "status.cancel_reblog_private": "Zrušit boost", "status.cannot_reblog": "Tento příspěvek nemůže být boostnutý", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index a25497f78..471b70439 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -139,29 +139,29 @@ "getting_started.open_source_notice": "Mae Mastodon yn feddalwedd côd agored. Mae modd cyfrannu neu adrodd materion ar GitHUb ar {github}.", "getting_started.security": "Diogelwch", "getting_started.terms": "Telerau Gwasanaeth", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_header.tag_mode.all": "a {additional}", + "hashtag.column_header.tag_mode.any": "neu {additional}", + "hashtag.column_header.tag_mode.none": "heb {additional}", + "hashtag.column_settings.tag_mode.all": "Pob un o'r rhain", + "hashtag.column_settings.tag_mode.any": "Unrhyw un o'r rhain", + "hashtag.column_settings.tag_mode.none": "Dim o'r rhain", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Syml", "home.column_settings.show_reblogs": "Dangos bŵstiau", "home.column_settings.show_replies": "Dangos ymatebion", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", + "introduction.federation.action": "Nesaf", + "introduction.federation.federated.headline": "Ffederasiwn", "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", "introduction.federation.home.headline": "Home", "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", "introduction.federation.local.headline": "Local", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", "introduction.interactions.action": "Finish tutorial!", - "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.headline": "Ffefryn", "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.headline": "Hwb", "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.headline": "Ateb", "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", "introduction.welcome.action": "Let's go!", "introduction.welcome.headline": "First steps", @@ -244,17 +244,17 @@ "notifications.column_settings.favourite": "Ffefrynnau:", "notifications.column_settings.filter_bar.advanced": "Display all categories", "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.show": "Dangos", "notifications.column_settings.follow": "Dilynwyr newydd:", "notifications.column_settings.mention": "Crybwylliadau:", "notifications.column_settings.push": "Hysbysiadau push", - "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.reblog": "Hybiadau:", "notifications.column_settings.show": "Dangos yn y golofn", "notifications.column_settings.sound": "Chwarae sain", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", + "notifications.filter.all": "Pob", + "notifications.filter.boosts": "Hybiadau", + "notifications.filter.favourites": "Ffefrynnau", + "notifications.filter.follows": "Yn dilyn", "notifications.filter.mentions": "Mentions", "notifications.group": "{count} o hysbysiadau", "privacy.change": "Addasu preifatrwdd y statws", @@ -302,7 +302,7 @@ "status.direct": "Neges breifat @{name}", "status.embed": "Plannu", "status.favourite": "Hoffi", - "status.filtered": "Filtered", + "status.filtered": "Wedi'i hidlo", "status.load_more": "Llwythwch mwy", "status.media_hidden": "Cyfryngau wedi'u cuddio", "status.mention": "Crybwyll @{name}", @@ -328,12 +328,12 @@ "status.show_less_all": "Dangos llai i bawb", "status.show_more": "Dangos mwy", "status.show_more_all": "Dangos mwy i bawb", - "status.show_thread": "Show thread", + "status.show_thread": "Dangos edefyn", "status.unmute_conversation": "Dad-dawelu sgwrs", "status.unpin": "Dadbinio o'r proffil", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Wedi'i ffedereiddio", + "tabs_bar.federated_timeline": "Ffederasiwn", "tabs_bar.home": "Hafan", "tabs_bar.local_timeline": "Lleol", "tabs_bar.notifications": "Hysbysiadau", @@ -343,7 +343,7 @@ "upload_area.title": "Llusgwch & gollwing i uwchlwytho", "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg", - "upload_form.focus": "Cropio", + "upload_form.focus": "Newid rhagolwg", "upload_form.undo": "Dileu", "upload_progress.label": "Uwchlwytho...", "video.close": "Cau fideo", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 7d5f0348a..69a139c57 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -160,7 +160,7 @@ "introduction.interactions.favourite.headline": "Favorisieren", "introduction.interactions.favourite.text": "Du kannst einen Beitrag für später speichern und dem Autor wissen lassen, dass du ihn magst, indem du ihn favorisierst.", "introduction.interactions.reblog.headline": "Teilen", - "introduction.interactions.reblog.text": "Du kannst Beiträge von anderen Leuten an deine Follower teilen (oder auch \"boosten\").", + "introduction.interactions.reblog.text": "Du kannst Beiträge von anderen Leuten an deine Follower teilen.", "introduction.interactions.reply.headline": "Antworten", "introduction.interactions.reply.text": "Du kannst auf die Beiträge von anderen Leuten antworten und die Beiträge werden dann in eine Konversation zusammengebunden.", "introduction.welcome.action": "Lasst uns loslegen!", @@ -168,7 +168,7 @@ "introduction.welcome.text": "Willkommen im Fediverse! In wenigen Momenten wirst du in der Lage sein Nachrichten zu versenden und mit deinen Freunden über Server hinweg in Kontakt zu treten. Aber dieser Server, {domain}, ist sehr speziell — er hostet dein Profil, also merke dir den Namen.", "keyboard_shortcuts.back": "zurück navigieren", "keyboard_shortcuts.blocked": "Liste blockierter Profile öffnen", - "keyboard_shortcuts.boost": "boosten", + "keyboard_shortcuts.boost": "teilen", "keyboard_shortcuts.column": "einen Status in einer der Spalten fokussieren", "keyboard_shortcuts.compose": "fokussiere das Eingabefeld", "keyboard_shortcuts.description": "Beschreibung", @@ -252,9 +252,9 @@ "notifications.column_settings.show": "In der Spalte anzeigen", "notifications.column_settings.sound": "Ton abspielen", "notifications.filter.all": "Alle", - "notifications.filter.boosts": "Boosts", + "notifications.filter.boosts": "Erneut geteilte Beiträge", "notifications.filter.favourites": "Favoriten", - "notifications.filter.follows": "Follows", + "notifications.filter.follows": "Folgende", "notifications.filter.mentions": "Erwähnungen", "notifications.group": "{count} Benachrichtigungen", "privacy.change": "Sichtbarkeit des Beitrags anpassen", @@ -292,8 +292,8 @@ "search_results.statuses": "Beiträge", "search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}", "standalone.public_title": "Ein kleiner Einblick …", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Öffne Moderationsoberfläche für @{name}", + "status.admin_status": "Öffne diesen Status in der Moderationsoberfläche", "status.block": "Blockiere @{name}", "status.cancel_reblog_private": "Nicht mehr teilen", "status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 35e41d7bb..762896887 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -292,8 +292,8 @@ "search_results.statuses": "Pouets", "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", "standalone.public_title": "Un aperçu …", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Ouvrir l'interface de modération pour @{name}", + "status.admin_status": "Ouvrir ce statut dans l'interface de modération", "status.block": "Block @{name}", "status.cancel_reblog_private": "Dé-booster", "status.cannot_reblog": "Cette publication ne peut être boostée", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 23bbed74d..c1ece163d 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -132,7 +132,7 @@ "follow_request.authorize": "Autorizar", "follow_request.reject": "Rexeitar", "getting_started.developers": "Desenvolvedoras", - "getting_started.directory": "Profile directory", + "getting_started.directory": "Directorio do perfil", "getting_started.documentation": "Documentation", "getting_started.heading": "Comezando", "getting_started.invite": "Convide a xente", @@ -292,8 +292,8 @@ "search_results.statuses": "Toots", "search_results.total": "{count, number} {count,plural,one {result} outros {results}}", "standalone.public_title": "Ollada dentro...", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Abrir interface de moderación para @{name}", + "status.admin_status": "Abrir este estado na interface de moderación", "status.block": "Block @{name}", "status.cancel_reblog_private": "Non promover", "status.cannot_reblog": "Esta mensaxe non pode ser promovida", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 7ddd95f60..6f7d5cf7e 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -136,7 +136,7 @@ "follow_request.authorize": "許可", "follow_request.reject": "拒否", "getting_started.developers": "開発", - "getting_started.directory": "Profile directory", + "getting_started.directory": "ディレクトリ", "getting_started.documentation": "ドキュメント", "getting_started.heading": "スタート", "getting_started.invite": "招待", @@ -262,7 +262,7 @@ "notifications.filter.follows": "フォロー", "notifications.filter.mentions": "返信", "notifications.group": "{count} 件の通知", - "privacy.change": "投稿のプライバシーを変更", + "privacy.change": "公開範囲を変更", "privacy.direct.long": "メンションしたユーザーだけに公開", "privacy.direct.short": "ダイレクト", "privacy.private.long": "フォロワーだけに公開", @@ -297,8 +297,8 @@ "search_results.statuses": "トゥート", "search_results.total": "{count, number}件の結果", "standalone.public_title": "今こんな話をしています...", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "@{name} のモデレーション画面を開く", + "status.admin_status": "この投稿をモデレーション画面で開く", "status.block": "@{name}さんをブロック", "status.cancel_reblog_private": "ブースト解除", "status.cannot_reblog": "この投稿はブーストできません", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 0d707afb1..ceb474a3e 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -292,8 +292,8 @@ "search_results.statuses": "툿", "search_results.total": "{count, number}건의 결과", "standalone.public_title": "지금 이런 이야기를 하고 있습니다…", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "@{name}에 대한 모더레이션 인터페이스 열기", + "status.admin_status": "모더레이션 인터페이스에서 이 게시물 열기", "status.block": "@{name} 차단", "status.cancel_reblog_private": "부스트 취소", "status.cannot_reblog": "이 포스트는 부스트 할 수 없습니다", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index e5f7b0bdf..871142195 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -118,8 +118,8 @@ "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!", "empty_column.direct": "Je hebt nog geen directe berichten. Wanneer je er een verzend of ontvangt, zijn deze hier te zien.", "empty_column.domain_blocks": "Er zijn nog geen genegeerde domeinen.", - "empty_column.favourited_statuses": "Jij hebt nog geen favoriete toots. Wanneer je er een als favoriet markeert, valt deze hier te zien.", - "empty_column.favourites": "Niemand heeft nog deze toot als favoriet gemarkeerd. Wanneer iemand dit doet, valt dat hier te zien.", + "empty_column.favourited_statuses": "Jij hebt nog geen favoriete toots. Wanneer je er een aan jouw favorieten toevoegt, valt deze hier te zien.", + "empty_column.favourites": "Niemand heeft deze toot nog aan hun favorieten toegevoegd. Wanneer iemand dit doet, valt dat hier te zien.", "empty_column.follow_requests": "Jij hebt nog enkel volgverzoek ontvangen. Wanneer je er eentje ontvangt, valt dat hier te zien.", "empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.", "empty_column.home": "Jij volgt nog niemand. Bezoek {public} of gebruik het zoekvenster om andere mensen te ontmoeten.", @@ -158,7 +158,7 @@ "introduction.federation.local.text": "Openbare toots van mensen die ook op jouw server zitten verschijnen op de lokale tijdlijn.", "introduction.interactions.action": "Introductie beëindigen!", "introduction.interactions.favourite.headline": "Favorieten", - "introduction.interactions.favourite.text": "Je kunt door een toot als favoriet te markeren, deze voor later bewaren en de auteur laten weten dat je het leuk vond.", + "introduction.interactions.favourite.text": "Je kunt door een toot aan jouw favorieten toe te voegen, deze voor later bewaren en de auteur laten weten dat je de toot leuk vind.", "introduction.interactions.reblog.headline": "Boost", "introduction.interactions.reblog.text": "Je kunt toots van andere mensen met jouw volgers delen door deze te boosten.", "introduction.interactions.reply.headline": "Reageren", @@ -175,7 +175,7 @@ "keyboard_shortcuts.direct": "om jouw directe berichten te tonen", "keyboard_shortcuts.down": "om naar beneden door de lijst te bewegen", "keyboard_shortcuts.enter": "om toot volledig te tonen", - "keyboard_shortcuts.favourite": "om als favoriet te markeren", + "keyboard_shortcuts.favourite": "om aan jouw favorieten toe te voegen", "keyboard_shortcuts.favourites": "om jouw lijst met favorieten te tonen", "keyboard_shortcuts.federated": "om de globale tijdlijn te tonen", "keyboard_shortcuts.heading": "Sneltoetsen", @@ -234,7 +234,7 @@ "navigation_bar.preferences": "Instellingen", "navigation_bar.public_timeline": "Globale tijdlijn", "navigation_bar.security": "Beveiliging", - "notification.favourite": "{name} markeerde jouw toot als favoriet", + "notification.favourite": "{name} voegde jouw toot als favoriet toe", "notification.follow": "{name} volgt jou nu", "notification.mention": "{name} vermeldde jou", "notification.reblog": "{name} boostte jouw toot", @@ -292,8 +292,8 @@ "search_results.statuses": "Toots", "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", "standalone.public_title": "Een kijkje binnenin...", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Moderatie-omgeving van @{name} openen", + "status.admin_status": "Deze toot in de moderatie-omgeving openen", "status.block": "Blokkeer @{name}", "status.cancel_reblog_private": "Niet langer boosten", "status.cannot_reblog": "Deze toot kan niet geboost worden", @@ -331,7 +331,7 @@ "status.show_thread": "Gesprek tonen", "status.unmute_conversation": "Gesprek niet langer negeren", "status.unpin": "Van profielpagina losmaken", - "suggestions.dismiss": "Suggestie verwerpen", + "suggestions.dismiss": "Voorstel verwerpen", "suggestions.header": "Je bent waarschijnlijk ook geïnteresseerd in…", "tabs_bar.federated_timeline": "Globaal", "tabs_bar.home": "Start", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 87fbf54c3..c28e9f5b8 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -292,8 +292,8 @@ "search_results.statuses": "Tuts", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", "standalone.public_title": "Una ulhada dedins…", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Dobrir l’interfàcia de moderacion per @{name}", + "status.admin_status": "Dobrir aqueste estatut dins l’interfàcia de moderacion", "status.block": "Blocar @{name}", "status.cancel_reblog_private": "Quitar de partejar", "status.cannot_reblog": "Aqueste estatut pòt pas èsser partejat", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 6a1b8a0c6..9f78c430f 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Dodaj lub usuń z list", "account.badges.bot": "Bot", "account.block": "Blokuj @{name}", "account.block_domain": "Blokuj wszystko z {domain}", @@ -117,7 +117,7 @@ "emoji_button.search_results": "Wyniki wyszukiwania", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", - "empty_column.account_timeline": "No toots here!", + "empty_column.account_timeline": "Brak wpisów tutaj!", "empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.", "empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!", "empty_column.direct": "Nie masz żadnych wiadomości bezpośrednich. Kiedy dostaniesz lub wyślesz jakąś, pojawi się ona tutaj.", @@ -136,19 +136,19 @@ "follow_request.authorize": "Autoryzuj", "follow_request.reject": "Odrzuć", "getting_started.developers": "Dla programistów", - "getting_started.directory": "Profile directory", + "getting_started.directory": "Katalog profilów", "getting_started.documentation": "Dokumentacja", "getting_started.heading": "Rozpocznij", "getting_started.invite": "Zaproś znajomych", "getting_started.open_source_notice": "Mastodon jest oprogramowaniem o otwartym źródle. Możesz pomóc w rozwoju lub zgłaszać błędy na GitHubie tutaj: {github}.", "getting_started.security": "Bezpieczeństwo", "getting_started.terms": "Zasady użytkowania", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_header.tag_mode.all": "i {additional}", + "hashtag.column_header.tag_mode.any": "lub {additional}", + "hashtag.column_header.tag_mode.none": "bez {additional}", + "hashtag.column_settings.tag_mode.all": "Wszystkie", + "hashtag.column_settings.tag_mode.any": "Dowolne", + "hashtag.column_settings.tag_mode.none": "Żadne", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Podstawowe", "home.column_settings.show_reblogs": "Pokazuj podbicia", @@ -297,8 +297,8 @@ "search_results.statuses": "Wpisy", "search_results.total": "{count, number} {count, plural, one {wynik} few {wyniki} many {wyników} more {wyników}}", "standalone.public_title": "Spojrzenie w głąb…", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}", + "status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym", "status.block": "Zablokuj @{name}", "status.cancel_reblog_private": "Cofnij podbicie", "status.cannot_reblog": "Ten wpis nie może zostać podbity", @@ -333,11 +333,11 @@ "status.show_less_all": "Zwiń wszystkie", "status.show_more": "Rozwiń", "status.show_more_all": "Rozwiń wszystkie", - "status.show_thread": "Show thread", + "status.show_thread": "Pokaż wątek", "status.unmute_conversation": "Cofnij wyciszenie konwersacji", "status.unpin": "Odepnij z profilu", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Odrzuć sugestię", + "suggestions.header": "Może Cię zainteresować…", "tabs_bar.federated_timeline": "Globalne", "tabs_bar.home": "Strona główna", "tabs_bar.local_timeline": "Lokalne", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index b0555bd0c..392e7f485 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -292,8 +292,8 @@ "search_results.statuses": "Toots", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "standalone.public_title": "Dê uma espiada...", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Abrir interface de moderação para @{name}", + "status.admin_status": "Abrir esse status na interface de moderação", "status.block": "Block @{name}", "status.cancel_reblog_private": "Desfazer compartilhamento", "status.cannot_reblog": "Esta postagem não pode ser compartilhada", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index d874ed0aa..91ecbbce7 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -24,8 +24,8 @@ "account.mute": "Ignorovať @{name}", "account.mute_notifications": "Stĺmiť oboznámenia od @{name}", "account.muted": "Utíšený/á", - "account.posts": "Hlášky", - "account.posts_with_replies": "Hlášky s odpoveďami", + "account.posts": "Príspevky", + "account.posts_with_replies": "Príspevky aj s odpoveďami", "account.report": "Nahlás @{name}", "account.requested": "Čaká na schválenie. Kliknite pre zrušenie žiadosti", "account.share": "Zdieľať @{name} profil", @@ -56,7 +56,7 @@ "column.lists": "Zoznamy", "column.mutes": "Ignorovaní užívatelia", "column.notifications": "Oboznámenia", - "column.pins": "Pripnuté hlášky", + "column.pins": "Pripnuté príspevky", "column.public": "Federovaná časová os", "column_back_button.label": "Späť", "column_header.hide_settings": "Skryť nastavenia", @@ -203,8 +203,8 @@ "lists.account.add": "Pridať do zoznamu", "lists.account.remove": "Odobrať zo zoznamu", "lists.delete": "Vymazať list", - "lists.edit": "Upraviť zoznam", - "lists.new.create": "Pridať zoznam", + "lists.edit": "Uprav zoznam", + "lists.new.create": "Pridaj zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", "lists.search": "Vyhľadávajte medzi užívateľmi ktorých sledujete", "lists.subheading": "Tvoje zoznamy", @@ -220,7 +220,7 @@ "navigation_bar.direct": "Súkromné správy", "navigation_bar.discover": "Objavuj", "navigation_bar.domain_blocks": "Skryté domény", - "navigation_bar.edit_profile": "Upraviť profil", + "navigation_bar.edit_profile": "Uprav profil", "navigation_bar.favourites": "Obľúbené", "navigation_bar.filters": "Utĺmené slová", "navigation_bar.follow_requests": "Žiadosti o sledovanie", @@ -289,11 +289,11 @@ "search_popout.tips.user": "používateľ", "search_results.accounts": "Ľudia", "search_results.hashtags": "Haštagy", - "search_results.statuses": "Hlášky", + "search_results.statuses": "Príspevky", "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}", "standalone.public_title": "Náhľad dovnútra...", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", + "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.block": "Blokovať @{name}", "status.cancel_reblog_private": "Nezdieľaj", "status.cannot_reblog": "Tento príspevok nemôže byť re-tootnutý", diff --git a/app/javascript/mastodon/service_worker/web_push_notifications.js b/app/javascript/mastodon/service_worker/web_push_notifications.js index 80a4fb329..1ab0dc0fa 100644 --- a/app/javascript/mastodon/service_worker/web_push_notifications.js +++ b/app/javascript/mastodon/service_worker/web_push_notifications.js @@ -92,11 +92,14 @@ const handlePush = (event) => { options.image = notification.status && notification.status.media_attachments.length > 0 && notification.status.media_attachments[0].preview_url || undefined; options.data = { access_token, preferred_locale, id: notification.status ? notification.status.id : notification.account.id, url: notification.status ? `/web/statuses/${notification.status.id}` : `/web/accounts/${notification.account.id}` }; - if (notification.status && notification.status.sensitive) { + if (notification.status && notification.status.spoiler_text || notification.status.sensitive) { options.data.hiddenBody = htmlToPlainText(notification.status.content); options.data.hiddenImage = notification.status.media_attachments.length > 0 && notification.status.media_attachments[0].preview_url; - options.body = notification.status.spoiler_text; + if (notification.status.spoiler_text) { + options.body = notification.status.spoiler_text; + } + options.image = undefined; options.actions = [actionExpand(preferred_locale)]; } else if (notification.type === 'mention') { diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 196d2d02f..69441d315 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -66,6 +66,12 @@ function main() { if (reactComponents.length > 0) { import(/* webpackChunkName: "containers/media_container" */ '../mastodon/containers/media_container') .then(({ default: MediaContainer }) => { + [].forEach.call(reactComponents, (component) => { + [].forEach.call(component.children, (child) => { + component.removeChild(child); + }); + }); + const content = document.createElement('div'); ReactDOM.render(<MediaContainer locale={locale} components={reactComponents} />, content); diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss index dc456be3e..47ac9265b 100644 --- a/app/javascript/styles/mastodon/about.scss +++ b/app/javascript/styles/mastodon/about.scss @@ -1267,8 +1267,7 @@ $small-breakpoint: 960px; } #mastodon-timeline { - display: block; - width: 100vw; + display: flex; height: 100vh; border-radius: 0; } diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index e7124a2c0..4e969601b 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -1,4 +1,6 @@ $no-columns-breakpoint: 600px; +$sidebar-width: 240px; +$content-width: 840px; .admin-wrapper { display: flex; @@ -6,7 +8,7 @@ $no-columns-breakpoint: 600px; height: 100%; .sidebar-wrapper { - flex: 1; + flex: 1 1 $sidebar-width; height: 100%; background: $ui-base-color; display: flex; @@ -14,7 +16,7 @@ $no-columns-breakpoint: 600px; } .sidebar { - width: 240px; + width: $sidebar-width; height: 100%; padding: 0; overflow-y: auto; @@ -95,12 +97,12 @@ $no-columns-breakpoint: 600px; } .content-wrapper { - flex: 2; + flex: 2 1 $content-width; overflow: auto; } .content { - max-width: 700px; + max-width: $content-width; padding: 20px 15px; padding-top: 60px; padding-left: 25px; diff --git a/app/services/fetch_oembed_service.rb b/app/services/fetch_oembed_service.rb index 9ddf9b13b..10176cfb9 100644 --- a/app/services/fetch_oembed_service.rb +++ b/app/services/fetch_oembed_service.rb @@ -43,7 +43,7 @@ class FetchOEmbedService res.code != 200 ? nil : res.body_with_limit end - validate(parse_for_format(body)) unless body.nil? + validate(parse_for_format(body)) if body.present? rescue Oj::ParseError, Ox::ParseError nil end diff --git a/app/views/stream_entries/_attachment_list.html.haml b/app/views/stream_entries/_attachment_list.html.haml new file mode 100644 index 000000000..d9706f47b --- /dev/null +++ b/app/views/stream_entries/_attachment_list.html.haml @@ -0,0 +1,8 @@ +.attachment-list + .attachment-list__icon + = fa_icon 'link' + %ul.attachment-list__list + - attachments.each do |media| + %li + - url = media.remote_url.presence || media.file.url + = link_to File.basename(url), url, title: media.description diff --git a/app/views/stream_entries/_detailed_status.html.haml b/app/views/stream_entries/_detailed_status.html.haml index 9298ecbb0..18265e110 100644 --- a/app/views/stream_entries/_detailed_status.html.haml +++ b/app/views/stream_entries/_detailed_status.html.haml @@ -25,9 +25,11 @@ - if !status.media_attachments.empty? - if status.media_attachments.first.video? - video = status.media_attachments.first - = react_component :video, src: video.file.url(:original), preview: video.file.url(:small), sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 670, height: 380, detailed: true, inline: true, alt: video.description + = react_component :video, src: video.file.url(:original), preview: video.file.url(:small), sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 670, height: 380, detailed: true, inline: true, alt: video.description do + = render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments } - else - = react_component :media_gallery, height: 380, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, standalone: true, 'autoPlayGif': current_account&.user&.setting_auto_play_gif || autoplay, 'reduceMotion': current_account&.user&.setting_reduce_motion, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } + = react_component :media_gallery, height: 380, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, standalone: true, 'autoPlayGif': current_account&.user&.setting_auto_play_gif || autoplay, 'reduceMotion': current_account&.user&.setting_reduce_motion, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do + = render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments } - elsif status.preview_card = react_component :card, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json diff --git a/app/views/stream_entries/_simple_status.html.haml b/app/views/stream_entries/_simple_status.html.haml index 1d44be791..28b4e3217 100644 --- a/app/views/stream_entries/_simple_status.html.haml +++ b/app/views/stream_entries/_simple_status.html.haml @@ -30,9 +30,11 @@ - if !status.media_attachments.empty? - if status.media_attachments.first.video? - video = status.media_attachments.first - = react_component :video, src: video.file.url(:original), preview: video.file.url(:small), sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 610, height: 343, inline: true, alt: video.description + = react_component :video, src: video.file.url(:original), preview: video.file.url(:small), sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 610, height: 343, inline: true, alt: video.description do + = render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments } - else - = react_component :media_gallery, height: 343, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, 'autoPlayGif': current_account&.user&.setting_auto_play_gif || autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } + = react_component :media_gallery, height: 343, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, 'autoPlayGif': current_account&.user&.setting_auto_play_gif || autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do + = render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments } - elsif status.preview_card = react_component :card, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json |