Merge tag 'v2.0.0rc2' into asonix/changes
This commit is contained in:
commit
8eb73b875f
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -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": "تشغيل الصوت"
|
||||
}
|
||||
|
|
|
@ -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 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",
|
||||
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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' }
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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'))
|
|
@ -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:'
|
||||
|
|
|
@ -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: s’abonner, 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
|
@ -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 d’inactivité 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 l’apparence de Mastodon quand vous êtes connecté·e depuis n’importe quel appareil.
|
||||
imports:
|
||||
data: Un fichier CSV généré par une autre instance de Mastodon
|
||||
sessions:
|
||||
otp: Entrez le code d’authentification à 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 d’un compte
|
||||
severity: Séverité
|
||||
type: Type d’import
|
||||
|
|
|
@ -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,
|
||||
|
|
21
config/webpack/loaders/babel_external.js
Normal file
21
config/webpack/loaders/babel_external.js
Normal 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'),
|
||||
},
|
||||
};
|
||||
}
|
|
@ -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)"
|
||||
|
||||
|
|
|
@ -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 |
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue