Compare commits

..

23 Commits

Author SHA1 Message Date
Eugen Rochko
8e9911962d Change Android icon padding again to half of previous (#5339) 2017-10-12 00:58:14 +02:00
Sylvhem
3ebe03b729 Fixes and updates for the French translation (#5340)
* Ajout du support des thèmes multiples

Ajoute des traductions pour les nouvelles chaînes permettant le support de thèmes multiples.

Add translations for the new strings allowing support for multiple themes.

* Mise à jour de la traduction

Met à jour les chaînes modifiées et ajoute des traductions pour celle n’en ayant pas.

Update modified strings and add new translations for the ones who are missing them.

* Remplace « ' » par « ’ »

Retire de la traduction les apostrophes droites « ' » (U+0027) au profit des apostrophes typographiques « ’ » (U+2019).
En typographie française, les apostrophes typographiques sont utilisées à la place des apostrophes droites. La traduction était incohérente et utilisait les deux.

Remove from the translation all the vertical apostrophes (U+0027) in favor of the curly ones (U+2019).
In French typography, typographic apostrophes are used instead of vertical ones. The translation was incoherent and used both.
2017-10-12 00:58:01 +02:00
Jeroen
6bc07d3de3 Updating Dutch strings for 2.0 (#5334) 2017-10-11 21:21:22 +02:00
Alda Marteau-Hardi
fbc6375fde Add myself as codeowner of the translation files. (#5333) 2017-10-11 21:21:13 +02:00
Alda Marteau-Hardi
0352c40e99 Use gender neutral language as in the rest of the french translation (#5331) 2017-10-11 21:20:56 +02:00
aschmitz
e5d8166a12 Fix #5329 (#5332)
This fixes #5329, which occurred when using MigrationHelpers on a
table that Postgres estimated to be non-empty when it was actually
empty.
2017-10-11 21:20:39 +02:00
Lynx Kotoura
07ea625cb2 Fix styles of error pages (#5335)
Signed-off-by: Lynx Kotoura <admin@sanin.link>

Signed-off-by: Lynx Kotoura <admin@sanin.link>
2017-10-11 21:18:45 +02:00
takayamaki
27101f1beb fix presented og:url is incorrect (#5320) 2017-10-11 19:22:21 +02:00
Eugen Rochko
1823cf435a In thread view, only scroll first update, scroll to replied-to post (#5322) 2017-10-11 19:21:44 +02:00
Nolan Lawson
6a50329a9c Only preload JS in /web pages (#5325) 2017-10-11 19:20:55 +02:00
Eugen Rochko
b17e571bc2 Add padding to Android icon, change Apple and MS icons (#5321) 2017-10-11 19:11:15 +02:00
Eugen Rochko
476e79b8e3 Fully disable hotkeys when input element is focused (#5324)
Because alt+n is a way to enter some kinda letter on some keyboard
2017-10-11 16:31:07 +02:00
JohnD28
19d3317a69 Update french translation : mastodon/locales/fr.json (#5318)
* Update fr.json

* Update fr.json

* Update fr.json
2017-10-11 22:07:09 +09:00
JohnD28
fe6941e28e Update doorkeeper.fr.yml (#5317) 2017-10-11 22:04:36 +09:00
ButterflyOfFire
38600b2792 Update ar.json (#5316)
Pushing new arabic translated strings for Mastodon web client.
2017-10-11 21:19:04 +09:00
unarist
b0407ece42 Fix an error when ancestors get loaded before the status itself (#5312)
When ancestors get loaded, we scroll to the target status (i.e. skip
ancestors). However, ancestors may get loaded before the status itself,
then it causes TypeError because `this.node` is undefined yet.

Since we don't show anything until the status gets loaded, we don't need
to scroll to the target status in this time. If we get the status itslef
later, it causes `componentDidUpdate` and scrolling correctly.
2017-10-11 11:25:15 +02:00
Eugen Rochko
9b3d8ee346 Fix #5281 - Fix tooltip/custom emoji/search interaction (#5310) 2017-10-11 01:33:29 +02:00
Eugen Rochko
b3d7ad958f Fix #5306: Stop hotkeys in input fields even when shift is pressed (#5309)
AZERTY layouts require pressing shift to press a number at all, so
it triggers a column switch even when simply typing numbers in
textarea
2017-10-11 01:01:17 +02:00
takayamaki
552d22bec9 sign_in and sign_up views present og meta infos (#5308) 2017-10-11 00:52:25 +02:00
Eugen Rochko
7c33da45f0 Bump version to 2.0.0rc2 2017-10-10 20:48:26 +02:00
Eugen Rochko
9815be2a44 Fix #5293 - Pre-fill frequently used emojis to avoid bugs (#5305) 2017-10-10 20:47:14 +02:00
Nolan Lawson
bebaa6eced Remove prop types from external libraries (#5304) 2017-10-10 18:44:51 +02:00
Jakob Kramer
616f53eea8 Update German translation (#5302) 2017-10-10 23:12:18 +09:00
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ą
# /config/locales/fr.yml @żelipapą # /config/locales/fr.yml @żelipapą
# Polish
/app/javascript/mastodon/locales/pl.json @m4sk1n /app/javascript/mastodon/locales/pl.json @m4sk1n
/app/views/user_mailer/*.pl.html.erb @m4sk1n /app/views/user_mailer/*.pl.html.erb @m4sk1n
/app/views/user_mailer/*.pl.text.erb @m4sk1n /app/views/user_mailer/*.pl.text.erb @m4sk1n
/config/locales/*.pl.yml @m4sk1n /config/locales/*.pl.yml @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 :check_enabled_registrations, only: [:new, :create]
before_action :configure_sign_up_params, only: [:create] before_action :configure_sign_up_params, only: [:create]
before_action :set_sessions, only: [:edit, :update] before_action :set_sessions, only: [:edit, :update]
before_action :set_instance_presenter, only: [:new, :update]
def destroy def destroy
not_found not_found
@@ -39,6 +40,10 @@ class Auth::RegistrationsController < Devise::RegistrationsController
private private
def set_instance_presenter
@instance_presenter = InstancePresenter.new
end
def determine_layout def determine_layout
%w(edit update).include?(action_name) ? 'admin' : 'auth' %w(edit update).include?(action_name) ? 'admin' : 'auth'
end end

View File

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

View File

@@ -8,15 +8,41 @@ import { useEmoji } from '../../../actions/emojis';
const perLine = 8; const perLine = 8;
const lines = 2; 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([ const getFrequentlyUsedEmojis = createSelector([
state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()), state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()),
], emojiCounters => emojiCounters ], emojiCounters => {
let emojis = emojiCounters
.keySeq() .keySeq()
.sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b)) .sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b))
.reverse() .reverse()
.slice(0, perLine * lines) .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([ const getCustomEmojis = createSelector([
state => state.get('custom_emojis'), state => state.get('custom_emojis'),

View File

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

View File

@@ -66,7 +66,7 @@
"embed.instructions": "Intégrez ce statut à votre site en copiant ce code ci-dessous.", "embed.instructions": "Intégrez ce statut à votre site en copiant ce code ci-dessous.",
"embed.preview": "Il apparaîtra comme cela:", "embed.preview": "Il apparaîtra comme cela:",
"emoji_button.activity": "Activités", "emoji_button.activity": "Activités",
"emoji_button.custom": "Custom", "emoji_button.custom": "Personnalisés",
"emoji_button.flags": "Drapeaux", "emoji_button.flags": "Drapeaux",
"emoji_button.food": "Boire et manger", "emoji_button.food": "Boire et manger",
"emoji_button.label": "Insérer un emoji", "emoji_button.label": "Insérer un emoji",
@@ -74,9 +74,9 @@
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Objets", "emoji_button.objects": "Objets",
"emoji_button.people": "Personnages", "emoji_button.people": "Personnages",
"emoji_button.recent": "Frequently used", "emoji_button.recent": "Fréquemment utilisés",
"emoji_button.search": "Recherche…", "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.symbols": "Symboles",
"emoji_button.travel": "Lieux et voyages", "emoji_button.travel": "Lieux et voyages",
"empty_column.community": "Le fil public local est vide. Écrivez-donc quelque chose pour le remplir!", "empty_column.community": "Le fil public local est vide. Écrivez-donc quelque chose pour le remplir!",
@@ -165,11 +165,11 @@
"report.submit": "Envoyer", "report.submit": "Envoyer",
"report.target": "Signalement", "report.target": "Signalement",
"search.placeholder": "Rechercher", "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.hashtag": "hashtag",
"search_popout.tips.status": "status", "search_popout.tips.status": "statuts",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.text": "Un texte simple renvoie les noms affichés, les noms dutilisateur⋅ice et les hashtags correspondants",
"search_popout.tips.user": "user", "search_popout.tips.user": "utilisateur⋅ice",
"search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}",
"standalone.public_title": "Jeter un coup dœil…", "standalone.public_title": "Jeter un coup dœil…",
"status.cannot_reblog": "Cette publication ne peut être boostée", "status.cannot_reblog": "Cette publication ne peut être boostée",
@@ -201,7 +201,7 @@
"tabs_bar.notifications": "Notifications", "tabs_bar.notifications": "Notifications",
"upload_area.title": "Glissez et déposez pour envoyer", "upload_area.title": "Glissez et déposez pour envoyer",
"upload_button.label": "Joindre un média", "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_form.undo": "Annuler",
"upload_progress.label": "Envoi en cours…", "upload_progress.label": "Envoi en cours…",
"video.close": "Fermer la vidéo", "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.instructions": "Embed deze toot op jouw website, door de onderstaande code te kopiëren.",
"embed.preview": "Zo komt het eruit te zien:", "embed.preview": "Zo komt het eruit te zien:",
"emoji_button.activity": "Activiteiten", "emoji_button.activity": "Activiteiten",
"emoji_button.custom": "Custom", "emoji_button.custom": "Lokale emojis",
"emoji_button.flags": "Vlaggen", "emoji_button.flags": "Vlaggen",
"emoji_button.food": "Eten en drinken", "emoji_button.food": "Eten en drinken",
"emoji_button.label": "Emoji toevoegen", "emoji_button.label": "Emoji toevoegen",
"emoji_button.nature": "Natuur", "emoji_button.nature": "Natuur",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", "emoji_button.not_found": "Geen emojis!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Voorwerpen", "emoji_button.objects": "Voorwerpen",
"emoji_button.people": "Mensen", "emoji_button.people": "Mensen",
"emoji_button.recent": "Frequently used", "emoji_button.recent": "Vaak gebruikt",
"emoji_button.search": "Zoeken...", "emoji_button.search": "Zoeken...",
"emoji_button.search_results": "Search results", "emoji_button.search_results": "Zoekresultaten",
"emoji_button.symbols": "Symbolen", "emoji_button.symbols": "Symbolen",
"emoji_button.travel": "Reizen en plekken", "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!", "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.submit": "Verzenden",
"report.target": "Rapporteren van", "report.target": "Rapporteren van",
"search.placeholder": "Zoeken", "search.placeholder": "Zoeken",
"search_popout.search_format": "Advanced search format", "search_popout.search_format": "Geavanceerd zoeken",
"search_popout.tips.hashtag": "hashtag", "search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "status", "search_popout.tips.status": "toot",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.text": "Gebruik gewone tekst om te zoeken op weergavenamen, gebruikersnamen en hashtags.",
"search_popout.tips.user": "user", "search_popout.tips.user": "gebruiker",
"search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}",
"standalone.public_title": "Een kijkje binnenin...", "standalone.public_title": "Een kijkje binnenin...",
"status.cannot_reblog": "Deze toot kan niet geboost worden", "status.cannot_reblog": "Deze toot kan niet geboost worden",
@@ -201,11 +201,11 @@
"tabs_bar.notifications": "Meldingen", "tabs_bar.notifications": "Meldingen",
"upload_area.title": "Hierin slepen om te uploaden", "upload_area.title": "Hierin slepen om te uploaden",
"upload_button.label": "Media toevoegen", "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_form.undo": "Ongedaan maken",
"upload_progress.label": "Uploaden...", "upload_progress.label": "Uploaden...",
"video.close": "Close video", "video.close": "Video sluiten",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Volledig scherm sluiten",
"video.expand": "Video groter maken", "video.expand": "Video groter maken",
"video.fullscreen": "Volledig scherm", "video.fullscreen": "Volledig scherm",
"video.hide": "Video verbergen", "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; 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, &.app-body {
&.error {
position: fixed; position: fixed;
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -70,14 +69,22 @@ body {
} }
&.error { &.error {
position: absolute;
text-align: center; text-align: center;
color: $ui-primary-color; color: $ui-primary-color;
padding: 20px; background: $ui-base-color;
width: 100%;
height: 100%;
padding: 0;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
.dialog img { .dialog {
vertical-align: middle;
margin: 20px;
img {
display: block; display: block;
max-width: 470px; max-width: 470px;
width: 100%; width: 100%;
@@ -85,12 +92,13 @@ body {
margin-top: -120px; margin-top: -120px;
} }
.dialog h1 { h1 {
font-size: 20px; font-size: 20px;
line-height: 28px; line-height: 28px;
font-weight: 400; font-weight: 400;
} }
} }
}
} }
button { button {

View File

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

View File

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

View File

@@ -1,6 +1,9 @@
- content_for :page_title do - content_for :page_title do
= t('auth.register') = 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| = simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
= render 'shared/error_messages', object: resource = render 'shared/error_messages', object: resource

View File

@@ -1,6 +1,9 @@
- content_for :page_title do - content_for :page_title do
= t('auth.login') = 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| = 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 :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' } = 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 - 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} %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key}
%script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json) %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 'common', media: 'all'
= stylesheet_pack_tag current_theme, media: 'all' = stylesheet_pack_tag current_theme, media: 'all'
= javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' = 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' = javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous'
= csrf_meta_tags = csrf_meta_tags

View File

@@ -1,6 +1,6 @@
- thumbnail = @instance_presenter.thumbnail - thumbnail = @instance_presenter.thumbnail
= opengraph 'og:site_name', t('about.hosted_on', domain: site_hostname) = 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:type', 'website'
= opengraph 'og:title', @instance_presenter.site_title = opengraph 'og:title', @instance_presenter.site_title
= opengraph 'og:description', strip_tags(@instance_presenter.site_description.presence || t('about.about_mastodon_html')) = opengraph 'og:description', strip_tags(@instance_presenter.site_description.presence || t('about.about_mastodon_html'))

View File

@@ -2,6 +2,7 @@
de: de:
about: 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_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 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. 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 contact: Kontakt
@@ -75,6 +76,7 @@ de:
silenced: Stummgeschaltet silenced: Stummgeschaltet
suspended: Gesperrt suspended: Gesperrt
title: Moderation title: Moderation
moderation_notes: Moderationsnotizen
most_recent_activity: Letzte Aktivität most_recent_activity: Letzte Aktivität
most_recent_ip: Letzte IP-Adresse most_recent_ip: Letzte IP-Adresse
not_subscribed: Nicht abonniert not_subscribed: Nicht abonniert
@@ -108,11 +110,25 @@ de:
unsubscribe: Abbestellen unsubscribe: Abbestellen
username: Profilname username: Profilname
web: Web 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: 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! created_msg: Emoji erstellt!
delete: Löschen delete: Löschen
destroyed_msg: Emoji gelöscht! destroyed_msg: Emoji gelöscht!
disable: Deaktivieren
disabled_msg: Das Emoji wurde deaktiviert
emoji: Emoji emoji: Emoji
enable: Aktivieren
enabled_msg: Das Emoji wurde aktiviert
image_hint: PNG bis 50 kB image_hint: PNG bis 50 kB
new: new:
title: Eigenes Emoji hinzufügen title: Eigenes Emoji hinzufügen
@@ -423,7 +439,7 @@ de:
reblog: reblog:
title: "%{name} hat deinen Beitrag geteilt" title: "%{name} hat deinen Beitrag geteilt"
remote_follow: 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 missing_resource: Die erforderliche Weiterleitungs-URL für dein Konto konnte nicht gefunden werden
proceed: Weiter proceed: Weiter
prompt: 'Du wirst dieser Person folgen:' prompt: 'Du wirst dieser Person folgen:'

View File

@@ -59,7 +59,7 @@ fr:
prompt: Autoriser %{client_name} à utiliser votre compte? prompt: Autoriser %{client_name} à utiliser votre compte?
title: Autorisation requise title: Autorisation requise
show: 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: authorized_applications:
buttons: buttons:
revoke: Annuler revoke: Annuler
@@ -112,4 +112,4 @@ fr:
scopes: scopes:
follow: sabonner, se désabonner, bloquer et débloquer des comptes follow: sabonner, se désabonner, bloquer et débloquer des comptes
read: lire les données de votre compte 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: hints:
defaults: defaults:
avatar: Au format PNG, GIF ou JPG. 2Mo maximum. Sera réduit à 120x120px 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: display_name:
one: <span class="name-counter">1</span> caractère restant one: <span class="name-counter">1</span> caractère restant
other: <span class="name-counter">%{count}</span> caractères restants 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 one: <span class="note-counter">1</span> caractère restant
other: <span class="note-counter">%{count}</span> caractères restants other: <span class="note-counter">%{count}</span> caractères restants
setting_noindex: Affecte votre profil public ainsi que vos statuts 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: imports:
data: Un fichier CSV généré par une autre instance de Mastodon data: Un fichier CSV généré par une autre instance de Mastodon
sessions: sessions:
otp: Entrez le code dauthentification à deux facteurs depuis votre téléphone ou utilisez un de vos codes de récupération. otp: Entrez le code dauthentification à deux facteurs depuis votre téléphone ou utilisez un de vos codes de récupération.
user: 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: labels:
defaults: defaults:
avatar: Image de profil avatar: Image de profil
@@ -43,6 +45,7 @@ fr:
setting_delete_modal: Afficher un dialogue de confirmation avant de supprimer un pouet 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_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_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 setting_unfollow_modal: Afficher un dialogue de confirmation avant de vous désabonner dun compte
severity: Séverité severity: Séverité
type: Type dimport type: Type dimport

View File

@@ -4,11 +4,7 @@ const env = process.env.NODE_ENV || 'development';
module.exports = { module.exports = {
test: /\.js$/, test: /\.js$/,
// include react-intl because transform-react-remove-prop-types needs to apply to it exclude: /node_modules/,
exclude: {
test: /node_modules/,
exclude: /react-intl[\/\\](?!locale-data)/,
},
loader: 'babel-loader', loader: 'babel-loader',
options: { options: {
forceEnv: env, 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 = table.project(table[:id]).order(table[:id].asc).take(1)
start_arel = yield table, start_arel if block_given? 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)" say "Migrating #{table_name}.#{column} (~#{total.to_i} rows)"

View File

@@ -21,7 +21,7 @@ module Mastodon
end end
def flags def flags
'rc1' 'rc2'
end end
def to_a 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.0 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" minimalistic-crypto-utils "^1.0.0"
emoji-mart@Gargron/emoji-mart#build: emoji-mart@Gargron/emoji-mart#build:
version "2.1.3" version "2.1.4"
resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/74721c33954e239b0dba7e24bc7be0b4a650063a" resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/a5e1afe5ebcf2841e611d20d261b029581cbe051"
emoji-regex@^6.1.0: emoji-regex@^6.1.0:
version "6.4.3" version "6.4.3"