Merge tag 'v2.0.0rc2' into asonix/changes

This commit is contained in:
Riley Trautman 2017-10-14 22:17:06 -05:00
commit 8eb73b875f
29 changed files with 286 additions and 123 deletions

View file

@ -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

View file

@ -6,6 +6,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController
before_action :check_enabled_registrations, only: [:new, :create]
before_action :configure_sign_up_params, only: [:create]
before_action :set_sessions, only: [:edit, :update]
before_action :set_instance_presenter, only: [:new, :update]
def destroy
not_found
@ -39,6 +40,10 @@ class Auth::RegistrationsController < Devise::RegistrationsController
private
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
def determine_layout
%w(edit update).include?(action_name) ? 'admin' : 'auth'
end

View file

@ -8,6 +8,7 @@ class Auth::SessionsController < Devise::SessionsController
skip_before_action :require_no_authentication, only: [:create]
skip_before_action :check_suspension, only: [:destroy]
prepend_before_action :authenticate_with_two_factor, if: :two_factor_enabled?, only: [:create]
before_action :set_instance_presenter, only: [:new]
def create
super do |resource|
@ -84,6 +85,10 @@ class Auth::SessionsController < Devise::SessionsController
private
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
def home_paths(resource)
paths = [about_path]
if single_user_mode? && resource.is_a?(User)

View file

@ -8,15 +8,41 @@ import { useEmoji } from '../../../actions/emojis';
const perLine = 8;
const lines = 2;
const DEFAULTS = [
'+1',
'grinning',
'kissing_heart',
'heart_eyes',
'laughing',
'stuck_out_tongue_winking_eye',
'sweat_smile',
'joy',
'yum',
'disappointed',
'thinking_face',
'weary',
'sob',
'sunglasses',
'heart',
'ok_hand',
];
const getFrequentlyUsedEmojis = createSelector([
state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()),
], emojiCounters => emojiCounters
], emojiCounters => {
let emojis = emojiCounters
.keySeq()
.sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b))
.reverse()
.slice(0, perLine * lines)
.toArray()
);
.toArray();
if (emojis.length < DEFAULTS.length) {
emojis = emojis.concat(DEFAULTS.slice(0, DEFAULTS.length - emojis.length));
}
return emojis;
});
const getCustomEmojis = createSelector([
state => state.get('custom_emojis'),

View file

@ -78,6 +78,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));
}
}
@ -240,11 +241,17 @@ export default class Status extends ImmutablePureComponent {
}
componentDidUpdate () {
const { ancestorsIds } = this.props;
if (this._scrolledIntoView) {
return;
}
if (ancestorsIds && ancestorsIds.size > 0) {
const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size];
element.scrollIntoView();
const { status, ancestorsIds } = this.props;
if (status && ancestorsIds && ancestorsIds.size > 0) {
const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];
element.scrollIntoView(true);
this._scrolledIntoView = true;
}
}

View file

@ -186,7 +186,7 @@ export default class UI extends React.Component {
componentDidMount () {
this.hotkeys.__mousetrap__.stopCallback = (e, element) => {
return !(e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) && ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);
return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);
};
}

View file

@ -1,31 +1,31 @@
{
"account.block": "حظر @{name}",
"account.block_domain": "Hide everything from {domain}",
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.block_domain": "إخفاء كل شيئ قادم من إسم النطاق {domain}",
"account.disclaimer_full": "قد لا تعكس المعلومات أدناه الملف الشخصي الكامل للمستخدم.",
"account.edit_profile": "تعديل الملف الشخصي",
"account.follow": "تابِع",
"account.followers": "المتابعون",
"account.follows": "يتبع",
"account.follows_you": "يتابعك",
"account.media": "Media",
"account.media": "وسائط",
"account.mention": "أُذكُر @{name}",
"account.mute": "أكتم @{name}",
"account.posts": "المشاركات",
"account.report": "أبلغ عن @{name}",
"account.requested": "في انتظار الموافقة",
"account.share": "Share @{name}'s profile",
"account.share": "مشاركة @{name}'s profile",
"account.unblock": "إلغاء الحظر عن @{name}",
"account.unblock_domain": "Unhide {domain}",
"account.unblock_domain": "فك حظر {domain}",
"account.unfollow": "إلغاء المتابعة",
"account.unmute": "إلغاء الكتم عن @{name}",
"account.view_full_profile": "View full profile",
"account.view_full_profile": "عرض الملف الشخصي كاملا",
"boost_modal.combo": "يمكنك ضغط {combo} لتخطّي هذه في المرّة القادمة",
"bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again",
"bundle_column_error.title": "Network error",
"bundle_modal_error.close": "Close",
"bundle_modal_error.message": "Something went wrong while loading this component.",
"bundle_modal_error.retry": "Try again",
"bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
"bundle_column_error.retry": "إعادة المحاولة",
"bundle_column_error.title": "خطأ في الشبكة",
"bundle_modal_error.close": "أغلق",
"bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
"bundle_modal_error.retry": "إعادة المحاولة",
"column.blocks": "الحسابات المحجوبة",
"column.community": "الخيط العام المحلي",
"column.favourites": "المفضلة",
@ -33,15 +33,15 @@
"column.home": "الرئيسية",
"column.mutes": "الحسابات المكتومة",
"column.notifications": "الإشعارات",
"column.pins": "Pinned toot",
"column.pins": "التبويقات المثبتة",
"column.public": "الخيط العام الموحد",
"column_back_button.label": "العودة",
"column_header.hide_settings": "Hide settings",
"column_header.moveLeft_settings": "Move column to the left",
"column_header.moveRight_settings": "Move column to the right",
"column_header.pin": "Pin",
"column_header.show_settings": "Show settings",
"column_header.unpin": "Unpin",
"column_header.hide_settings": "إخفاء الإعدادات",
"column_header.moveLeft_settings": "نقل القائمة إلى اليسار",
"column_header.moveRight_settings": "نقل القائمة إلى اليمين",
"column_header.pin": "تدبيس",
"column_header.show_settings": "عرض الإعدادات",
"column_header.unpin": "فك التدبيس",
"column_subheading.navigation": "التصفح",
"column_subheading.settings": "الإعدادات",
"compose_form.lock_disclaimer": "حسابك ليس {locked}. يمكن لأي شخص متابعتك و عرض المنشورات.",
@ -57,16 +57,16 @@
"confirmations.block.message": "هل أنت متأكد أنك تريد حجب {name} ؟",
"confirmations.delete.confirm": "حذف",
"confirmations.delete.message": "هل أنت متأكد أنك تريد حذف هذا المنشور ؟",
"confirmations.domain_block.confirm": "Hide entire domain",
"confirmations.domain_block.confirm": "إخفاء إسم النطاق كاملا",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
"confirmations.mute.confirm": "أكتم",
"confirmations.mute.message": "هل أنت متأكد أنك تريد كتم {name} ؟",
"confirmations.unfollow.confirm": "Unfollow",
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
"embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Here is what it will look like:",
"confirmations.unfollow.confirm": "إلغاء المتابعة",
"confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟",
"embed.instructions": "يمكنكم إدماج هذه الحالة على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.",
"embed.preview": "هكذا ما سوف يبدو عليه :",
"emoji_button.activity": "الأنشطة",
"emoji_button.custom": "Custom",
"emoji_button.custom": "مخصص",
"emoji_button.flags": "الأعلام",
"emoji_button.food": "الطعام والشراب",
"emoji_button.label": "أدرج إيموجي",
@ -74,9 +74,9 @@
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "أشياء",
"emoji_button.people": "الناس",
"emoji_button.recent": "Frequently used",
"emoji_button.recent": "الشائعة الإستخدام",
"emoji_button.search": "ابحث...",
"emoji_button.search_results": "Search results",
"emoji_button.search_results": "نتائج البحث",
"emoji_button.symbols": "رموز",
"emoji_button.travel": "أماكن و أسفار",
"empty_column.community": "الخط الزمني المحلي فارغ. اكتب شيئا ما للعامة كبداية.",
@ -100,8 +100,8 @@
"home.column_settings.show_replies": "عرض الردود",
"home.settings": "إعدادات العمود",
"lightbox.close": "إغلاق",
"lightbox.next": "Next",
"lightbox.previous": "Previous",
"lightbox.next": "التالي",
"lightbox.previous": "العودة",
"loading_indicator.label": "تحميل ...",
"media_gallery.toggle_visible": "عرض / إخفاء",
"missing_indicator.label": "تعذر العثور عليه",
@ -113,7 +113,7 @@
"navigation_bar.info": "معلومات إضافية",
"navigation_bar.logout": "خروج",
"navigation_bar.mutes": "الحسابات المكتومة",
"navigation_bar.pins": "Pinned toots",
"navigation_bar.pins": "التبويقات المثبتة",
"navigation_bar.preferences": "التفضيلات",
"navigation_bar.public_timeline": "الخيط العام الموحد",
"notification.favourite": "{name} أعجب بمنشورك",
@ -126,8 +126,8 @@
"notifications.column_settings.favourite": "المُفَضَّلة :",
"notifications.column_settings.follow": "متابعُون جُدُد :",
"notifications.column_settings.mention": "الإشارات :",
"notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.push": "الإخطارات المدفوعة",
"notifications.column_settings.push_meta": "هذا الجهاز",
"notifications.column_settings.reblog": "الترقيّات:",
"notifications.column_settings.show": "إعرِضها في عمود",
"notifications.column_settings.sound": "أصدر صوتا",
@ -165,23 +165,23 @@
"report.submit": "إرسال",
"report.target": "إبلاغ",
"search.placeholder": "ابحث",
"search_popout.search_format": "Advanced search format",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "status",
"search_popout.search_format": "نمط البحث المتقدم",
"search_popout.tips.hashtag": "وسم",
"search_popout.tips.status": "حالة",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.user": "user",
"search_popout.tips.user": "مستخدِم",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"standalone.public_title": "A look inside...",
"standalone.public_title": "نظرة على ...",
"status.cannot_reblog": "تعذرت ترقية هذا المنشور",
"status.delete": "إحذف",
"status.embed": "Embed",
"status.embed": "إدماج",
"status.favourite": "أضف إلى المفضلة",
"status.load_more": "حمّل المزيد",
"status.media_hidden": "الصورة مستترة",
"status.mention": "أذكُر @{name}",
"status.mute_conversation": "Mute conversation",
"status.mute_conversation": "كتم المحادثة",
"status.open": "وسع هذه المشاركة",
"status.pin": "Pin on profile",
"status.pin": "تدبيس على الملف الشخصي",
"status.reblog": "رَقِّي",
"status.reblogged_by": "{name} رقى",
"status.reply": "ردّ",
@ -189,11 +189,11 @@
"status.report": "إبلِغ عن @{name}",
"status.sensitive_toggle": "اضغط للعرض",
"status.sensitive_warning": "محتوى حساس",
"status.share": "Share",
"status.share": "مشاركة",
"status.show_less": "إعرض أقلّ",
"status.show_more": "أظهر المزيد",
"status.unmute_conversation": "Unmute conversation",
"status.unpin": "Unpin from profile",
"status.unmute_conversation": "فك الكتم عن المحادثة",
"status.unpin": "فك التدبيس من الملف الشخصي",
"tabs_bar.compose": "تحرير",
"tabs_bar.federated_timeline": "الموحَّد",
"tabs_bar.home": "الرئيسية",
@ -201,16 +201,16 @@
"tabs_bar.notifications": "الإخطارات",
"upload_area.title": "إسحب ثم أفلت للرفع",
"upload_button.label": "إضافة وسائط",
"upload_form.description": "Describe for the visually impaired",
"upload_form.description": "وصف للمعاقين بصريا",
"upload_form.undo": "إلغاء",
"upload_progress.label": "يرفع...",
"video.close": "Close video",
"video.exit_fullscreen": "Exit full screen",
"video.expand": "Expand video",
"video.fullscreen": "Full screen",
"video.hide": "Hide video",
"video.mute": "Mute sound",
"video.pause": "Pause",
"video.play": "Play",
"video.unmute": "Unmute sound"
"video.close": "إغلاق الفيديو",
"video.exit_fullscreen": "الخروج من وضع الشاشة المليئة",
"video.expand": "توسيع الفيديو",
"video.fullscreen": "ملء الشاشة",
"video.hide": "إخفاء الفيديو",
"video.mute": "كتم الصوت",
"video.pause": "إيقاف مؤقت",
"video.play": "تشغيل",
"video.unmute": "تشغيل الصوت"
}

View file

@ -66,7 +66,7 @@
"embed.instructions": "Intégrez ce statut à votre site en copiant ce code ci-dessous.",
"embed.preview": "Il apparaîtra comme cela:",
"emoji_button.activity": "Activités",
"emoji_button.custom": "Custom",
"emoji_button.custom": "Personnalisés",
"emoji_button.flags": "Drapeaux",
"emoji_button.food": "Boire et manger",
"emoji_button.label": "Insérer un emoji",
@ -74,9 +74,9 @@
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Objets",
"emoji_button.people": "Personnages",
"emoji_button.recent": "Frequently used",
"emoji_button.recent": "Fréquemment utilisés",
"emoji_button.search": "Recherche…",
"emoji_button.search_results": "Search results",
"emoji_button.search_results": "Résultats de la recherche",
"emoji_button.symbols": "Symboles",
"emoji_button.travel": "Lieux et voyages",
"empty_column.community": "Le fil public local est vide. Écrivez-donc quelque chose pour le remplir!",
@ -165,11 +165,11 @@
"report.submit": "Envoyer",
"report.target": "Signalement",
"search.placeholder": "Rechercher",
"search_popout.search_format": "Advanced search format",
"search_popout.search_format": "Recherche avancée",
"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": "statuts",
"search_popout.tips.text": "Un texte simple renvoie les noms affichés, les noms dutilisateur⋅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",
@ -201,7 +201,7 @@
"tabs_bar.notifications": "Notifications",
"upload_area.title": "Glissez et déposez pour envoyer",
"upload_button.label": "Joindre un média",
"upload_form.description": "Describe for the visually impaired",
"upload_form.description": "Décrire pour les malvoyants",
"upload_form.undo": "Annuler",
"upload_progress.label": "Envoi en cours…",
"video.close": "Fermer la vidéo",

View file

@ -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 emojis",
"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 emojis!! (╯°□°)╯︵ ┻━┻",
"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",

View file

@ -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;
}
}
}
}

View file

@ -3,7 +3,7 @@
- content_for :header_tags do
= javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous'
= render partial: 'og'
= render partial: 'shared/og'
.landing-page
.header-wrapper.compact

View file

@ -4,7 +4,7 @@
- content_for :header_tags do
%script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json)
= javascript_pack_tag 'about', integrity: true, crossorigin: 'anonymous'
= render partial: 'og'
= render partial: 'shared/og'
.landing-page
.header-wrapper

View file

@ -1,6 +1,9 @@
- content_for :page_title do
= t('auth.register')
- content_for :header_tags do
= render partial: 'shared/og'
= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
= render 'shared/error_messages', object: resource

View file

@ -1,6 +1,9 @@
- content_for :page_title do
= t('auth.login')
- content_for :header_tags do
= render partial: 'shared/og'
= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
= f.input :email, autofocus: true, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }
= f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' }

View file

@ -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)

View file

@ -21,14 +21,6 @@
= stylesheet_pack_tag 'common', media: 'all'
= stylesheet_pack_tag current_theme, 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

View file

@ -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'))

View file

@ -2,6 +2,7 @@
de:
about:
about_mastodon_html: Mastodon ist ein soziales Netzwerk. Es basiert auf offenen Web-Protokollen und freier, quelloffener Software. Es ist dezentral (so wie E-Mail!).
about_hashtag_html: Dies sind öffentliche Beiträge, die mit <strong>#%{hashtag}</strong> getaggt wurden. Wenn du ein Konto irgendwo im Fediversum besitzt, kannst du mit ihnen interagieren.
about_this: Über diese Instanz
closed_registrations: Die Registrierung auf dieser Instanz ist momentan geschlossen. Aber du kannst dein Konto auch auf einer anderen Instanz erstellen! Von dort hast du genauso Zugriff auf das Mastodon-Netzwerk.
contact: Kontakt
@ -75,6 +76,7 @@ de:
silenced: Stummgeschaltet
suspended: Gesperrt
title: Moderation
moderation_notes: Moderationsnotizen
most_recent_activity: Letzte Aktivität
most_recent_ip: Letzte IP-Adresse
not_subscribed: Nicht abonniert
@ -108,11 +110,25 @@ de:
unsubscribe: Abbestellen
username: Profilname
web: Web
account_moderation_notes:
account: Moderator*in
created_at: Datum
create: Erstellen
created_msg: Moderationsnotiz erfolgreich erstellt!
delete: Löschen
destroyed_msg: Moderationsnotiz erfolgreich gelöscht!
custom_emojis:
copied_msg: Eine lokale Kopie des Emojis wurde erstellt
copy: Kopieren
copy_failed_msg: Es konnte keine lokale Kopie des Emojis erstellt werden
created_msg: Emoji erstellt!
delete: Löschen
destroyed_msg: Emoji gelöscht!
disable: Deaktivieren
disabled_msg: Das Emoji wurde deaktiviert
emoji: Emoji
enable: Aktivieren
enabled_msg: Das Emoji wurde aktiviert
image_hint: PNG bis 50 kB
new:
title: Eigenes Emoji hinzufügen
@ -423,7 +439,7 @@ de:
reblog:
title: "%{name} hat deinen Beitrag geteilt"
remote_follow:
acct: Dein Profilname@Domain, von dem aus du dieser Person folgen möchtest
acct: Profilname@Domain, von wo aus du dieser Person folgen möchtest
missing_resource: Die erforderliche Weiterleitungs-URL für dein Konto konnte nicht gefunden werden
proceed: Weiter
prompt: 'Du wirst dieser Person folgen:'

View file

@ -59,7 +59,7 @@ fr:
prompt: Autoriser %{client_name} à utiliser votre compte?
title: Autorisation requise
show:
title: Copy this authorization code and paste it to the application.
title: Copiez ce code d'autorisation et collez-le dans l'application.
authorized_applications:
buttons:
revoke: Annuler
@ -112,4 +112,4 @@ fr:
scopes:
follow: sabonner, se désabonner, bloquer et débloquer des comptes
read: lire les données de votre compte
write: poster en tant que vous
write: poster en votre nom

File diff suppressed because one or more lines are too long

View file

@ -4,6 +4,7 @@ fr:
hints:
defaults:
avatar: Au format PNG, GIF ou JPG. 2Mo maximum. Sera réduit à 120x120px
digest: Envoyé après une longue période dinactivité et contient un résumé des notifications que vous avez reçues pendant votre absence
display_name:
one: <span class="name-counter">1</span> caractère restant
other: <span class="name-counter">%{count}</span> caractères restants
@ -13,12 +14,13 @@ fr:
one: <span class="note-counter">1</span> caractère restant
other: <span class="note-counter">%{count}</span> caractères restants
setting_noindex: Affecte votre profil public ainsi que vos statuts
setting_theme: Affecte lapparence de Mastodon quand vous êtes connecté·e depuis nimporte quel appareil.
imports:
data: Un fichier CSV généré par une autre instance de Mastodon
sessions:
otp: Entrez le code dauthentification à deux facteurs depuis votre téléphone ou utilisez un de vos codes de récupération.
user:
filtered_languages: Les langues sélectionnées seront retirées de vos fils publics.
filtered_languages: Les langues sélectionnées seront filtrées hors de vos fils publics pour vous
labels:
defaults:
avatar: Image de profil
@ -43,6 +45,7 @@ fr:
setting_delete_modal: Afficher un dialogue de confirmation avant de supprimer un pouet
setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles
setting_system_font_ui: Utiliser la police par défaut du système
setting_theme: Thème du site
setting_unfollow_modal: Afficher un dialogue de confirmation avant de vous désabonner dun compte
severity: Séverité
type: Type dimport

View file

@ -4,11 +4,7 @@ const env = process.env.NODE_ENV || 'development';
module.exports = {
test: /\.js$/,
// include react-intl because transform-react-remove-prop-types needs to apply to it
exclude: {
test: /node_modules/,
exclude: /react-intl[\/\\](?!locale-data)/,
},
exclude: /node_modules/,
loader: 'babel-loader',
options: {
forceEnv: env,

View file

@ -0,0 +1,21 @@
const { resolve } = require('path');
const env = process.env.NODE_ENV || 'development';
if (env === 'development') {
module.exports = {};
} else {
// babel options to apply only to external libraries, e.g. remove-prop-types
module.exports = {
test: /\.js$/,
include: /node_modules/,
loader: 'babel-loader',
options: {
babelrc: false,
plugins: [
'transform-react-remove-prop-types',
],
cacheDirectory: env === 'development' ? false : resolve(__dirname, '..', '..', '..', 'tmp', 'cache', 'babel-loader-external'),
},
};
}

View file

@ -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)"

View file

@ -21,7 +21,7 @@ module Mastodon
end
def flags
'rc1'
'rc2'
end
def to_a

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

View file

@ -2192,8 +2192,8 @@ elliptic@^6.0.0:
minimalistic-crypto-utils "^1.0.0"
emoji-mart@Gargron/emoji-mart#build:
version "2.1.3"
resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/74721c33954e239b0dba7e24bc7be0b4a650063a"
version "2.1.4"
resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/a5e1afe5ebcf2841e611d20d261b029581cbe051"
emoji-regex@^6.1.0:
version "6.4.3"