Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
bd077ad7d9 | ||
|
a29d409e20 | ||
|
5acd5315f2 | ||
|
b79ab15859 | ||
|
77406d3a09 | ||
|
510c9049c7 | ||
|
ed902581d3 | ||
|
64db9ed5f6 | ||
|
1085ef3836 | ||
|
86a9de6753 | ||
|
83c982b458 | ||
|
9aba44ea79 | ||
|
6dcf96271e |
@@ -9,8 +9,8 @@ ARG GID=991
|
||||
ENV RAILS_SERVE_STATIC_FILES=true \
|
||||
RAILS_ENV=production NODE_ENV=production
|
||||
|
||||
ARG YARN_VERSION=1.3.2
|
||||
ARG YARN_DOWNLOAD_SHA256=6cfe82e530ef0837212f13e45c1565ba53f5199eec2527b85ecbcd88bf26821d
|
||||
ARG YARN_VERSION=1.5.1
|
||||
ARG YARN_DOWNLOAD_SHA256=cd31657232cf48d57fdbff55f38bfa058d2fb4950450bd34af72dac796af4de1
|
||||
ARG LIBICONV_VERSION=1.15
|
||||
ARG LIBICONV_DOWNLOAD_SHA256=ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178
|
||||
|
||||
|
@@ -12,10 +12,9 @@ class Auth::SessionsController < Devise::SessionsController
|
||||
|
||||
def new
|
||||
Devise.omniauth_configs.each do |provider, config|
|
||||
if config.strategy.redirect_at_sign_in
|
||||
return redirect_to(omniauth_authorize_path(resource_name, provider))
|
||||
end
|
||||
return redirect_to(omniauth_authorize_path(resource_name, provider)) if config.strategy.redirect_at_sign_in
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
@@ -59,6 +58,14 @@ class Auth::SessionsController < Devise::SessionsController
|
||||
end
|
||||
end
|
||||
|
||||
def after_sign_out_path_for(_resource_or_scope)
|
||||
Devise.omniauth_configs.each_value do |config|
|
||||
return root_path if config.strategy.redirect_at_sign_in
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def two_factor_enabled?
|
||||
find_user.try(:otp_required_for_login?)
|
||||
end
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import React from 'react';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import PropTypes from 'prop-types';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
|
||||
const filename = url => url.split('/').pop().split('#')[0].split('?')[0];
|
||||
@@ -8,10 +9,29 @@ export default class AttachmentList extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
media: ImmutablePropTypes.list.isRequired,
|
||||
compact: PropTypes.bool,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { media } = this.props;
|
||||
const { media, compact } = this.props;
|
||||
|
||||
if (compact) {
|
||||
return (
|
||||
<div className='attachment-list compact'>
|
||||
<ul className='attachment-list__list'>
|
||||
{media.map(attachment => {
|
||||
const displayUrl = attachment.get('remote_url') || attachment.get('url');
|
||||
|
||||
return (
|
||||
<li key={attachment.get('id')}>
|
||||
<a href={displayUrl} target='_blank' rel='noopener'><i className='fa fa-link' /> {filename(displayUrl)}</a>
|
||||
</li>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='attachment-list'>
|
||||
@@ -20,11 +40,15 @@ export default class AttachmentList extends ImmutablePureComponent {
|
||||
</div>
|
||||
|
||||
<ul className='attachment-list__list'>
|
||||
{media.map(attachment => (
|
||||
<li key={attachment.get('id')}>
|
||||
<a href={attachment.get('remote_url')} target='_blank' rel='noopener'>{filename(attachment.get('remote_url'))}</a>
|
||||
</li>
|
||||
))}
|
||||
{media.map(attachment => {
|
||||
const displayUrl = attachment.get('remote_url') || attachment.get('url');
|
||||
|
||||
return (
|
||||
<li key={attachment.get('id')}>
|
||||
<a href={displayUrl} target='_blank' rel='noopener'>{filename(displayUrl)}</a>
|
||||
</li>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
|
@@ -12,9 +12,15 @@ export default class Permalink extends React.PureComponent {
|
||||
href: PropTypes.string.isRequired,
|
||||
to: PropTypes.string.isRequired,
|
||||
children: PropTypes.node,
|
||||
onInterceptClick: PropTypes.func,
|
||||
};
|
||||
|
||||
handleClick = (e) => {
|
||||
handleClick = e => {
|
||||
if (this.props.onInterceptClick && this.props.onInterceptClick()) {
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {
|
||||
e.preventDefault();
|
||||
this.context.router.history.push(this.props.to);
|
||||
@@ -22,7 +28,7 @@ export default class Permalink extends React.PureComponent {
|
||||
}
|
||||
|
||||
render () {
|
||||
const { href, children, className, ...other } = this.props;
|
||||
const { href, children, className, onInterceptClick, ...other } = this.props;
|
||||
|
||||
return (
|
||||
<a target='_blank' href={href} onClick={this.handleClick} {...other} className={`permalink${className ? ' ' + className : ''}`}>
|
||||
|
@@ -7,6 +7,7 @@ import RelativeTimestamp from './relative_timestamp';
|
||||
import DisplayName from './display_name';
|
||||
import StatusContent from './status_content';
|
||||
import StatusActionBar from './status_action_bar';
|
||||
import AttachmentList from './attachment_list';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { MediaGallery, Video } from '../features/ui/util/async-components';
|
||||
@@ -177,9 +178,14 @@ export default class Status extends ImmutablePureComponent {
|
||||
status = status.get('reblog');
|
||||
}
|
||||
|
||||
if (status.get('media_attachments').size > 0 && !this.props.muted) {
|
||||
if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) {
|
||||
|
||||
if (status.get('media_attachments').size > 0) {
|
||||
if (this.props.muted || status.get('media_attachments').some(item => item.get('type') === 'unknown')) {
|
||||
media = (
|
||||
<AttachmentList
|
||||
compact
|
||||
media={status.get('media_attachments')}
|
||||
/>
|
||||
);
|
||||
} else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
|
||||
const video = status.getIn(['media_attachments', 0]);
|
||||
|
||||
|
@@ -2,6 +2,7 @@ import React from 'react';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import Permalink from '../../../components/permalink';
|
||||
import { displaySensitiveMedia } from '../../../initial_state';
|
||||
|
||||
export default class MediaItem extends ImmutablePureComponent {
|
||||
|
||||
@@ -9,8 +10,22 @@ export default class MediaItem extends ImmutablePureComponent {
|
||||
media: ImmutablePropTypes.map.isRequired,
|
||||
};
|
||||
|
||||
state = {
|
||||
visible: !this.props.media.getIn(['status', 'sensitive']) || displaySensitiveMedia,
|
||||
};
|
||||
|
||||
handleClick = () => {
|
||||
if (!this.state.visible) {
|
||||
this.setState({ visible: true });
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
render () {
|
||||
const { media } = this.props;
|
||||
const { visible } = this.state;
|
||||
const status = media.get('status');
|
||||
const focusX = media.getIn(['meta', 'focus', 'x']);
|
||||
const focusY = media.getIn(['meta', 'focus', 'y']);
|
||||
@@ -18,21 +33,28 @@ export default class MediaItem extends ImmutablePureComponent {
|
||||
const y = ((focusY / -2) + .5) * 100;
|
||||
const style = {};
|
||||
|
||||
let content;
|
||||
let label, icon;
|
||||
|
||||
if (media.get('type') === 'gifv') {
|
||||
content = <span className='media-gallery__gifv__label'>GIF</span>;
|
||||
label = <span className='media-gallery__gifv__label'>GIF</span>;
|
||||
}
|
||||
|
||||
if (!status.get('sensitive')) {
|
||||
if (visible) {
|
||||
style.backgroundImage = `url(${media.get('preview_url')})`;
|
||||
style.backgroundPosition = `${x}% ${y}%`;
|
||||
} else {
|
||||
icon = (
|
||||
<span className='account-gallery__item__icons'>
|
||||
<i className='fa fa-eye-slash' />
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='account-gallery__item'>
|
||||
<Permalink to={`/statuses/${status.get('id')}`} href={status.get('url')} style={style}>
|
||||
{content}
|
||||
<Permalink to={`/statuses/${status.get('id')}`} href={status.get('url')} style={style} onInterceptClick={this.handleClick}>
|
||||
{icon}
|
||||
{label}
|
||||
</Permalink>
|
||||
</div>
|
||||
);
|
||||
|
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"account.block": "حظر @{name}",
|
||||
"account.block_domain": "إخفاء كل شيئ قادم من إسم النطاق {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.blocked": "محظور",
|
||||
"account.disclaimer_full": "قد لا تعكس المعلومات أدناه الملف الشخصي الكامل للمستخدم.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "تعديل الملف الشخصي",
|
||||
"account.follow": "تابِع",
|
||||
"account.followers": "المتابعون",
|
||||
@@ -14,7 +15,7 @@
|
||||
"account.moved_to": "{name} إنتقل إلى :",
|
||||
"account.mute": "أكتم @{name}",
|
||||
"account.mute_notifications": "كتم إخطارات @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.muted": "مكتوم",
|
||||
"account.posts": "التبويقات",
|
||||
"account.posts_with_replies": "تبويقات تحتوي على رُدود",
|
||||
"account.report": "أبلغ عن @{name}",
|
||||
@@ -241,7 +242,7 @@
|
||||
"status.mute_conversation": "كتم المحادثة",
|
||||
"status.open": "وسع هذه المشاركة",
|
||||
"status.pin": "تدبيس على الملف الشخصي",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.pinned": "تبويق مثبَّت",
|
||||
"status.reblog": "رَقِّي",
|
||||
"status.reblogged_by": "{name} رقى",
|
||||
"status.reply": "ردّ",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Редактирай профила си",
|
||||
"account.follow": "Последвай",
|
||||
"account.followers": "Последователи",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Amaga-ho tot de {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "La informació següent pot reflectir incompleta el perfil de l'usuari.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edita el perfil",
|
||||
"account.follow": "Segueix",
|
||||
"account.followers": "Seguidors",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Alles von {domain} verstecken",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Das Profil wird möglicherweise unvollständig wiedergegeben.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Profil bearbeiten",
|
||||
"account.follow": "Folgen",
|
||||
"account.followers": "Folgende",
|
||||
|
@@ -319,15 +319,6 @@
|
||||
],
|
||||
"path": "app/javascript/mastodon/containers/status_container.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Media",
|
||||
"id": "account.media"
|
||||
}
|
||||
],
|
||||
"path": "app/javascript/mastodon/features/account_gallery/index.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
@@ -497,6 +488,10 @@
|
||||
{
|
||||
"defaultMessage": "Muted",
|
||||
"id": "account.muted"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Domain hidden",
|
||||
"id": "account.domain_blocked"
|
||||
}
|
||||
],
|
||||
"path": "app/javascript/mastodon/features/account/components/header.json"
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edit profile",
|
||||
"account.follow": "Follow",
|
||||
"account.followers": "Followers",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Kaŝi ĉion de {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Subaj informoj povas reflekti la profilon de la uzanto nekomplete.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Redakti profilon",
|
||||
"account.follow": "Sekvi",
|
||||
"account.followers": "Sekvantoj",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Ocultar todo de {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "La siguiente información del usuario puede estar incompleta.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
"account.follow": "Seguir",
|
||||
"account.followers": "Seguidores",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "پنهانسازی همه چیز از سرور {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "اطلاعات زیر ممکن است نمایهٔ این کاربر را به تمامی نشان ندهد.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "ویرایش نمایه",
|
||||
"account.follow": "پی بگیرید",
|
||||
"account.followers": "پیگیران",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Alla olevat käyttäjän profiilitiedot saattavat olla epätäydellisiä.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Muokkaa",
|
||||
"account.follow": "Seuraa",
|
||||
"account.followers": "Seuraajia",
|
||||
|
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"account.block": "Bloquer @{name}",
|
||||
"account.block_domain": "Tout masquer venant de {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.blocked": "Bloqué",
|
||||
"account.disclaimer_full": "Les données ci-dessous peuvent ne pas refléter ce profil dans sa totalité.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Modifier le profil",
|
||||
"account.follow": "Suivre",
|
||||
"account.followers": "Abonné⋅e⋅s",
|
||||
@@ -14,7 +15,7 @@
|
||||
"account.moved_to": "{name} a déménagé vers :",
|
||||
"account.mute": "Masquer @{name}",
|
||||
"account.mute_notifications": "Ignorer les notifications de @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.muted": "Silencé",
|
||||
"account.posts": "Pouets",
|
||||
"account.posts_with_replies": "Pouets avec réponses",
|
||||
"account.report": "Signaler",
|
||||
@@ -218,7 +219,7 @@
|
||||
"report.target": "Signalement",
|
||||
"search.placeholder": "Rechercher",
|
||||
"search_popout.search_format": "Recherche avancée",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.full_text": "Les textes simples retournent les pouets que vous avez écris, mis en favori, épinglés, ou ayant été mentionnés, ainsi que les noms d'utilisateurs, les noms affichés, et les hashtags correspondant.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.status": "statuts",
|
||||
"search_popout.tips.text": "Un texte simple renvoie les noms affichés, les noms d’utilisateur⋅ice et les hashtags correspondants",
|
||||
@@ -241,7 +242,7 @@
|
||||
"status.mute_conversation": "Masquer la conversation",
|
||||
"status.open": "Déplier ce statut",
|
||||
"status.pin": "Épingler sur le profil",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.pinned": "Pouet épinglé",
|
||||
"status.reblog": "Partager",
|
||||
"status.reblogged_by": "{name} a partagé :",
|
||||
"status.reply": "Répondre",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Ocultar calquer contido de {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "A información inferior podería mostrar un perfil incompleto da usuaria.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
"account.follow": "Seguir",
|
||||
"account.followers": "Seguidoras",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "להסתיר הכל מהקהילה {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "המידע להלן עשוי להיות לא עדכני או לא שלם.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "עריכת פרופיל",
|
||||
"account.follow": "מעקב",
|
||||
"account.followers": "עוקבים",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Sakrij sve sa {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Ovaj korisnik je sa druge instance. Ovaj broj bi mogao biti veći.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Uredi profil",
|
||||
"account.follow": "Slijedi",
|
||||
"account.followers": "Sljedbenici",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Minden elrejtése innen: {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Az alul található információk hiányosan mutathatják be a felhasználót.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Profil szerkesztése",
|
||||
"account.follow": "Követés",
|
||||
"account.followers": "Követők",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Թաքցնել ամենը հետեւյալ տիրույթից՝ {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Ներքոհիշյալը կարող է ոչ ամբողջությամբ արտացոլել օգտատիրոջ էջի տվյալները։",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Խմբագրել անձնական էջը",
|
||||
"account.follow": "Հետեւել",
|
||||
"account.followers": "Հետեւվողներ",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Ubah profil",
|
||||
"account.follow": "Ikuti",
|
||||
"account.followers": "Pengikut",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Modifikar profilo",
|
||||
"account.follow": "Sequar",
|
||||
"account.followers": "Sequanti",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Modifica profilo",
|
||||
"account.follow": "Segui",
|
||||
"account.followers": "Seguaci",
|
||||
|
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"account.block": "@{name}さんをブロック",
|
||||
"account.block_domain": "{domain}全体を非表示",
|
||||
"account.blocked": "Blocked",
|
||||
"account.blocked": "ブロック済み",
|
||||
"account.disclaimer_full": "以下の情報は不正確な可能性があります。",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "プロフィールを編集",
|
||||
"account.follow": "フォロー",
|
||||
"account.followers": "フォロワー",
|
||||
@@ -14,7 +15,7 @@
|
||||
"account.moved_to": "{name}さんは引っ越しました:",
|
||||
"account.mute": "@{name}さんをミュート",
|
||||
"account.mute_notifications": "@{name}さんからの通知を受け取らない",
|
||||
"account.muted": "Muted",
|
||||
"account.muted": "ミュート済み",
|
||||
"account.posts": "投稿",
|
||||
"account.posts_with_replies": "投稿と返信",
|
||||
"account.report": "@{name}さんを通報",
|
||||
@@ -218,7 +219,7 @@
|
||||
"report.target": "{target}さんを通報する",
|
||||
"search.placeholder": "検索",
|
||||
"search_popout.search_format": "高度な検索フォーマット",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.full_text": "表示名やユーザー名、ハッシュタグのほか、あなたのトゥートやお気に入り、ブーストしたトゥート、返信に一致する単純なテキスト。",
|
||||
"search_popout.tips.hashtag": "ハッシュタグ",
|
||||
"search_popout.tips.status": "トゥート",
|
||||
"search_popout.tips.text": "表示名やユーザー名、ハッシュタグに一致する単純なテキスト",
|
||||
@@ -241,9 +242,9 @@
|
||||
"status.mute_conversation": "会話をミュート",
|
||||
"status.open": "詳細を表示",
|
||||
"status.pin": "プロフィールに固定表示",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.pinned": "固定されたトゥート",
|
||||
"status.reblog": "ブースト",
|
||||
"status.reblogged_by": "{name}さんにブーストされました",
|
||||
"status.reblogged_by": "{name}さんがブースト",
|
||||
"status.reply": "返信",
|
||||
"status.replyAll": "全員に返信",
|
||||
"status.report": "@{name}さんを通報",
|
||||
@@ -258,7 +259,7 @@
|
||||
"tabs_bar.home": "ホーム",
|
||||
"tabs_bar.local_timeline": "ローカル",
|
||||
"tabs_bar.notifications": "通知",
|
||||
"ui.beforeunload": "Mastodonから離れるとあなたのドラフトは失われます。",
|
||||
"ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
|
||||
"upload_area.title": "ドラッグ&ドロップでアップロード",
|
||||
"upload_button.label": "メディアを追加",
|
||||
"upload_form.description": "視覚障害者のための説明",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "{domain} 전체를 숨김",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "여기 있는 정보는 유저의 프로파일을 정확히 반영하지 못 할 수도 있습니다.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "프로필 편집",
|
||||
"account.follow": "팔로우",
|
||||
"account.followers": "팔로워",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Negeer alles van {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "De informatie hieronder kan mogelijk een incompleet beeld geven van dit gebruikersprofiel.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Profiel bewerken",
|
||||
"account.follow": "Volgen",
|
||||
"account.followers": "Volgers",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Skjul alt fra {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Informasjonen nedenfor kan gi et ufullstendig bilde av brukerens profil.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Rediger profil",
|
||||
"account.follow": "Følg",
|
||||
"account.followers": "Følgere",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Tot amagar del domeni {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Aquelas informacions de perfil pòdon èsser incomplètas.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Modificar lo perfil",
|
||||
"account.follow": "Sègre",
|
||||
"account.followers": "Seguidors",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Blokuj wszystko z {domain}",
|
||||
"account.blocked": "Zablokowany",
|
||||
"account.disclaimer_full": "Poniższe informacje mogą nie odwzorowywać bezbłędnie profilu użytkownika.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edytuj profil",
|
||||
"account.follow": "Śledź",
|
||||
"account.followers": "Śledzący",
|
||||
|
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"account.block": "Bloquear @{name}",
|
||||
"account.block_domain": "Esconder tudo de {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.blocked": "Bloqueado",
|
||||
"account.disclaimer_full": "As informações abaixo podem refletir o perfil do usuário de maneira incompleta.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
"account.follow": "Seguir",
|
||||
"account.followers": "Seguidores",
|
||||
@@ -14,9 +15,9 @@
|
||||
"account.moved_to": "{name} se mudou para:",
|
||||
"account.mute": "Silenciar @{name}",
|
||||
"account.mute_notifications": "Silenciar notificações de @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.posts": "Posts",
|
||||
"account.posts_with_replies": "Toots with replies",
|
||||
"account.muted": "Silenciado",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Toots e respostas",
|
||||
"account.report": "Denunciar @{name}",
|
||||
"account.requested": "Aguardando aprovação. Clique para cancelar a solicitação",
|
||||
"account.share": "Compartilhar perfil de @{name}",
|
||||
@@ -210,20 +211,20 @@
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"reply_indicator.cancel": "Cancelar",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.forward": "Encaminhar para {target}",
|
||||
"report.forward_hint": "Essa conta pertence à um outro servidor. Encaminhar uma cópia da denúncia com seus dados tornados anônimos para esse servidor?",
|
||||
"report.hint": "A sua denúncia será enviada aos moderadores da instância. Você pode adicionar uma explicação de porque você está denunciando essa conta abaixo:",
|
||||
"report.placeholder": "Comentários adicionais",
|
||||
"report.submit": "Enviar",
|
||||
"report.target": "Denunciar",
|
||||
"search.placeholder": "Pesquisar",
|
||||
"search_popout.search_format": "Formato de busca avançado",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.full_text": "Texto simples retorna status que você escreveu, favoritou, compartilhou ou em que tenha sido mencionado; também retorna nomes de exibição, usuários e hashtags correspondentes.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.text": "Texto simples retorna nomes de exibição, usuários e hashtags correspondentes",
|
||||
"search_popout.tips.user": "usuário",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.accounts": "Pessoas",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
|
||||
@@ -241,7 +242,7 @@
|
||||
"status.mute_conversation": "Silenciar conversa",
|
||||
"status.open": "Expandir",
|
||||
"status.pin": "Fixar no perfil",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.pinned": "Toot fixado",
|
||||
"status.reblog": "Compartilhar",
|
||||
"status.reblogged_by": "{name} compartilhou",
|
||||
"status.reply": "Responder",
|
||||
@@ -262,7 +263,7 @@
|
||||
"upload_area.title": "Arraste e solte para enviar",
|
||||
"upload_button.label": "Adicionar mídia",
|
||||
"upload_form.description": "Descreva a imagem para deficientes visuais",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.focus": "Recortar",
|
||||
"upload_form.undo": "Desfazer",
|
||||
"upload_progress.label": "Salvando...",
|
||||
"video.close": "Fechar vídeo",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Esconder tudo do domínio {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "As informações abaixo podem refletir o perfil do usuário de forma incompleta.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
"account.follow": "Seguir",
|
||||
"account.followers": "Seguidores",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Блокировать все с {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Нижеуказанная информация может не полностью отражать профиль пользователя.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Изменить профиль",
|
||||
"account.follow": "Подписаться",
|
||||
"account.followers": "Подписаны",
|
||||
|
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"account.block": "Blokovať @{name}",
|
||||
"account.block_domain": "Ukryť všetko z {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.blocked": "Blokovaný/á",
|
||||
"account.disclaimer_full": "Inofrmácie nižšie nemusia byť úplným odrazom uživateľovho účtu.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Upraviť profil",
|
||||
"account.follow": "Následovať",
|
||||
"account.followers": "Sledujúci",
|
||||
@@ -14,7 +15,7 @@
|
||||
"account.moved_to": "{name} sa presunul/a na:",
|
||||
"account.mute": "Ignorovať @{name}",
|
||||
"account.mute_notifications": "Stĺmiť notifikácie od @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.muted": "Utíšený/á",
|
||||
"account.posts": "Hlášky",
|
||||
"account.posts_with_replies": "Príspevky s odpoveďami",
|
||||
"account.report": "Nahlásiť @{name}",
|
||||
@@ -241,7 +242,7 @@
|
||||
"status.mute_conversation": "Ignorovať konverzáciu",
|
||||
"status.open": "Otvoriť tento status",
|
||||
"status.pin": "Pripnúť na profil",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.pinned": "Pripnutý príspevok",
|
||||
"status.reblog": "Povýšiť",
|
||||
"status.reblogged_by": "{name} povýšil",
|
||||
"status.reply": "Odpovedať",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Sakrij sve sa domena {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Navedene informacije možda ne odslikavaju korisnički profil u potpunosti.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Izmeni profil",
|
||||
"account.follow": "Zaprati",
|
||||
"account.followers": "Pratioca",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Сакриј све са домена {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Наведене информације можда не одсликавају кориснички профил у потпуности.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Измени профил",
|
||||
"account.follow": "Запрати",
|
||||
"account.followers": "Пратиоца",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Dölj allt från {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Informationen nedan kan spegla användarens profil ofullständigt.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Redigera profil",
|
||||
"account.follow": "Följ",
|
||||
"account.followers": "Följare",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edit profile",
|
||||
"account.follow": "Follow",
|
||||
"account.followers": "Followers",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Profili düzenle",
|
||||
"account.follow": "Takip et",
|
||||
"account.followers": "Takipçiler",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "Заглушити {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Налаштування профілю",
|
||||
"account.follow": "Підписатися",
|
||||
"account.followers": "Підписники",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "隐藏来自 {domain} 的内容",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "此处显示的信息可能不是全部内容。",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "修改个人资料",
|
||||
"account.follow": "关注",
|
||||
"account.followers": "关注者",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "隱藏來自 {domain} 的一切文章",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "下列資料不一定完整。",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "修改個人資料",
|
||||
"account.follow": "關注",
|
||||
"account.followers": "關注的人",
|
||||
|
@@ -3,6 +3,7 @@
|
||||
"account.block_domain": "隱藏來自 {domain} 的一切貼文",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "下列資料不一定完整。",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "編輯用者資訊",
|
||||
"account.follow": "關注",
|
||||
"account.followers": "專注者",
|
||||
|
@@ -194,6 +194,28 @@ $small-breakpoint: 960px;
|
||||
}
|
||||
}
|
||||
|
||||
.closed-registrations-message {
|
||||
margin-top: 20px;
|
||||
|
||||
&,
|
||||
p {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
color: $ui-primary-color;
|
||||
margin-bottom: 0;
|
||||
|
||||
a {
|
||||
color: $ui-highlight-color;
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
em {
|
||||
display: inline;
|
||||
margin: 0;
|
||||
|
@@ -4222,45 +4222,59 @@ a.status-card {
|
||||
border-radius: 4px;
|
||||
margin-top: 14px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.attachment-list__icon {
|
||||
flex: 0 0 auto;
|
||||
color: $ui-base-lighter-color;
|
||||
padding: 8px 18px;
|
||||
cursor: default;
|
||||
border-right: 1px solid lighten($ui-base-color, 8%);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 26px;
|
||||
|
||||
.fa {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.attachment-list__list {
|
||||
list-style: none;
|
||||
padding: 4px 0;
|
||||
padding-left: 8px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
li {
|
||||
display: block;
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
&__icon {
|
||||
flex: 0 0 auto;
|
||||
color: $ui-base-lighter-color;
|
||||
font-weight: 500;
|
||||
padding: 8px 18px;
|
||||
cursor: default;
|
||||
border-right: 1px solid lighten($ui-base-color, 8%);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 26px;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
.fa {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
&__list {
|
||||
list-style: none;
|
||||
padding: 4px 0;
|
||||
padding-left: 8px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
li {
|
||||
display: block;
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: $ui-base-lighter-color;
|
||||
font-weight: 500;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.compact {
|
||||
border: 0;
|
||||
margin-top: 4px;
|
||||
|
||||
.attachment-list__list {
|
||||
padding: 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.fa {
|
||||
color: $ui-base-lighter-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4666,7 +4680,7 @@ a.status-card {
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
position: absolute;
|
||||
color: inherit;
|
||||
color: $ui-primary-color;
|
||||
text-decoration: none;
|
||||
border-radius: 4px;
|
||||
|
||||
@@ -4674,6 +4688,7 @@ a.status-card {
|
||||
&:active,
|
||||
&:focus {
|
||||
outline: 0;
|
||||
color: $ui-secondary-color;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
@@ -4685,6 +4700,14 @@ a.status-card {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__icons {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
font-size: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.account__section-headline {
|
||||
|
@@ -20,13 +20,12 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||
private
|
||||
|
||||
def process_status
|
||||
media_attachments = process_attachments
|
||||
status_params = process_status_params
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
@status = Status.create!(status_params)
|
||||
|
||||
process_tags(@status)
|
||||
attach_media(@status, media_attachments)
|
||||
end
|
||||
|
||||
resolve_thread(@status)
|
||||
@@ -40,7 +39,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||
status
|
||||
end
|
||||
|
||||
def status_params
|
||||
def process_status_params
|
||||
{
|
||||
uri: @object['id'],
|
||||
url: object_url || @object['id'],
|
||||
@@ -54,6 +53,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||
visibility: visibility_from_audience,
|
||||
thread: replied_to_status,
|
||||
conversation: conversation_from_uri(@object['conversation']),
|
||||
media_attachments: process_attachments.take(4),
|
||||
}
|
||||
end
|
||||
|
||||
@@ -108,7 +108,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||
end
|
||||
|
||||
def process_attachments
|
||||
return if @object['attachment'].nil?
|
||||
return [] if @object['attachment'].nil?
|
||||
|
||||
media_attachments = []
|
||||
|
||||
@@ -132,13 +132,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||
media_attachments
|
||||
end
|
||||
|
||||
def attach_media(status, media_attachments)
|
||||
return if media_attachments.blank?
|
||||
|
||||
media = MediaAttachment.where(status_id: nil, id: media_attachments.take(4).map(&:id))
|
||||
media.update(status_id: status.id)
|
||||
end
|
||||
|
||||
def resolve_thread(status)
|
||||
return unless status.reply? && status.thread.nil?
|
||||
ThreadResolveWorker.perform_async(status.id, in_reply_to_uri)
|
||||
|
@@ -29,7 +29,7 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
|
||||
# Skip if the reblogged status is not public
|
||||
return if cached_reblog && !(cached_reblog.public_visibility? || cached_reblog.unlisted_visibility?)
|
||||
|
||||
media_attachments = save_media
|
||||
media_attachments = save_media.take(4)
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
status = Status.create!(
|
||||
@@ -44,12 +44,12 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
|
||||
language: content_language,
|
||||
visibility: visibility_scope,
|
||||
conversation: find_or_create_conversation,
|
||||
thread: thread? ? find_status(thread.first) || find_activitypub_status(thread.first, thread.second) : nil
|
||||
thread: thread? ? find_status(thread.first) || find_activitypub_status(thread.first, thread.second) : nil,
|
||||
media_attachments: media_attachments
|
||||
)
|
||||
|
||||
save_mentions(status)
|
||||
save_hashtags(status)
|
||||
attach_media(status, media_attachments)
|
||||
save_emojis(status)
|
||||
end
|
||||
|
||||
@@ -159,13 +159,6 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
|
||||
media_attachments
|
||||
end
|
||||
|
||||
def attach_media(parent, media_attachments)
|
||||
return if media_attachments.blank?
|
||||
|
||||
media = MediaAttachment.where(status_id: nil, id: media_attachments.take(4).map(&:id))
|
||||
media.update(status_id: parent.id)
|
||||
end
|
||||
|
||||
def save_emojis(parent)
|
||||
do_not_download = DomainBlock.find_by(domain: parent.account.domain)&.reject_media?
|
||||
|
||||
|
@@ -28,7 +28,11 @@ module Remotable
|
||||
matches = response.headers['content-disposition']&.match(/filename="([^"]*)"/)
|
||||
filename = matches.nil? ? parsed_url.path.split('/').last : matches[1]
|
||||
basename = SecureRandom.hex(8)
|
||||
extname = File.extname(filename)
|
||||
extname = if filename.nil?
|
||||
''
|
||||
else
|
||||
File.extname(filename)
|
||||
end
|
||||
|
||||
send("#{attachment_name}=", StringIO.new(response.to_s))
|
||||
send("#{attachment_name}_file_name=", basename + extname)
|
||||
|
@@ -5,13 +5,14 @@ class BlockDomainService < BaseService
|
||||
|
||||
def call(domain_block)
|
||||
@domain_block = domain_block
|
||||
process_domain_block
|
||||
process_domain_block!
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def process_domain_block
|
||||
def process_domain_block!
|
||||
clear_media! if domain_block.reject_media?
|
||||
|
||||
if domain_block.silence?
|
||||
silence_accounts!
|
||||
elsif domain_block.suspend?
|
||||
@@ -19,14 +20,26 @@ class BlockDomainService < BaseService
|
||||
end
|
||||
end
|
||||
|
||||
def invalidate_association_caches!
|
||||
# Normally, associated models of a status are immutable (except for accounts)
|
||||
# so they are aggressively cached. After updating the media attachments to no
|
||||
# longer point to a local file, we need to clear the cache to make those
|
||||
# changes appear in the API and UI
|
||||
@affected_status_ids.each { |id| Rails.cache.delete_matched("statuses/#{id}-*") }
|
||||
end
|
||||
|
||||
def silence_accounts!
|
||||
blocked_domain_accounts.in_batches.update_all(silenced: true)
|
||||
end
|
||||
|
||||
def clear_media!
|
||||
clear_account_images
|
||||
clear_account_attachments
|
||||
clear_emojos
|
||||
@affected_status_ids = []
|
||||
|
||||
clear_account_images!
|
||||
clear_account_attachments!
|
||||
clear_emojos!
|
||||
|
||||
invalidate_association_caches!
|
||||
end
|
||||
|
||||
def suspend_accounts!
|
||||
@@ -36,23 +49,25 @@ class BlockDomainService < BaseService
|
||||
end
|
||||
end
|
||||
|
||||
def clear_account_images
|
||||
def clear_account_images!
|
||||
blocked_domain_accounts.find_each do |account|
|
||||
account.avatar.destroy
|
||||
account.header.destroy
|
||||
account.avatar.destroy if account.avatar.exists?
|
||||
account.header.destroy if account.header.exists?
|
||||
account.save
|
||||
end
|
||||
end
|
||||
|
||||
def clear_account_attachments
|
||||
def clear_account_attachments!
|
||||
media_from_blocked_domain.find_each do |attachment|
|
||||
attachment.file.destroy
|
||||
@affected_status_ids << attachment.status_id if attachment.status_id.present?
|
||||
|
||||
attachment.file.destroy if attachment.file.exists?
|
||||
attachment.type = :unknown
|
||||
attachment.save
|
||||
end
|
||||
end
|
||||
|
||||
def clear_emojos
|
||||
def clear_emojos!
|
||||
emojis_from_blocked_domains.destroy_all
|
||||
end
|
||||
|
||||
|
@@ -22,6 +22,7 @@ class PostStatusService < BaseService
|
||||
media = validate_media!(options[:media_ids])
|
||||
status = nil
|
||||
text = options.delete(:spoiler_text) if text.blank? && options[:spoiler_text].present?
|
||||
text = '.' if text.blank? && !media.empty?
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
status = account.statuses.create!(text: text,
|
||||
|
@@ -1,12 +1,13 @@
|
||||
- if @instance_presenter.open_registrations
|
||||
= render 'registration'
|
||||
- else
|
||||
- if @instance_presenter.closed_registrations_message.blank?
|
||||
%p= t('about.closed_registrations')
|
||||
- else
|
||||
= @instance_presenter.closed_registrations_message.html_safe
|
||||
= link_to t('auth.register_elsewhere'), 'https://joinmastodon.org', class: 'button button-primary'
|
||||
|
||||
= link_to t('auth.register'), 'https://joinmastodon.org', class: 'button button-primary'
|
||||
.closed-registrations-message
|
||||
- if @instance_presenter.closed_registrations_message.blank?
|
||||
%p= t('about.closed_registrations')
|
||||
- else
|
||||
= @instance_presenter.closed_registrations_message.html_safe
|
||||
|
||||
.separator-or
|
||||
%span= t('auth.or')
|
||||
|
@@ -123,6 +123,7 @@ ar:
|
||||
emoji: إيموجي
|
||||
enable: تفعيل
|
||||
image_hint: ملف PNG إلى غاية حجم 50 ك.ب
|
||||
shortcode_hint: على الأقل حرفين، و فقط رموز أبجدية عددية و أسطر سفلية
|
||||
title: الإيموجي الخاصة
|
||||
upload: رفع
|
||||
domain_blocks:
|
||||
|
@@ -376,6 +376,7 @@ en:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Sign up
|
||||
register_elsewhere: Sign up on another server
|
||||
resend_confirmation: Resend confirmation instructions
|
||||
reset_password: Reset password
|
||||
security: Security
|
||||
|
@@ -38,7 +38,7 @@ fr:
|
||||
followers: Abonné⋅e⋅s
|
||||
following: Abonnements
|
||||
media: Médias
|
||||
moved_html: "%{name} a déménagé vers %{new_profile_link} :"
|
||||
moved_html: "%{name} a changé de compte pour %{new_profile_link} :"
|
||||
nothing_here: Rien à voir ici !
|
||||
people_followed_by: Personnes suivies par %{name}
|
||||
people_who_follow: Personnes qui suivent %{name}
|
||||
@@ -369,6 +369,7 @@ fr:
|
||||
logout: Se déconnecter
|
||||
migrate_account: Déplacer vers un compte différent
|
||||
migrate_account_html: Si vous voulez rediriger ce compte vers un autre, vous pouvez le <a href="%{path}">configurer ici</a>.
|
||||
or: ou
|
||||
or_log_in_with: Ou authentifiez-vous avec
|
||||
providers:
|
||||
cas: CAS
|
||||
@@ -462,7 +463,7 @@ fr:
|
||||
following: Liste d’utilisateur⋅ice⋅s suivi⋅e⋅s
|
||||
muting: Liste d’utilisateur⋅ice⋅s que vous masquez
|
||||
upload: Importer
|
||||
in_memoriam_html: In Memoriam.
|
||||
in_memoriam_html: En mémoire de.
|
||||
invites:
|
||||
delete: Désactiver
|
||||
expired: Expiré
|
||||
@@ -545,7 +546,7 @@ fr:
|
||||
trillion: T
|
||||
unit: ''
|
||||
pagination:
|
||||
newer: Jamais
|
||||
newer: Plus récent
|
||||
next: Suivant
|
||||
older: Plus ancien
|
||||
prev: Précédent
|
||||
@@ -649,7 +650,7 @@ fr:
|
||||
unlisted_long: Tout le monde peut voir vos statuts mais ils ne seront pas sur listés sur les fils publics
|
||||
stream_entries:
|
||||
click_to_show: Cliquer pour afficher
|
||||
pinned: Statut épinglé
|
||||
pinned: Pouet épinglé
|
||||
reblogged: partagé
|
||||
sensitive_content: Contenu sensible
|
||||
terms:
|
||||
|
@@ -369,6 +369,7 @@ pt-BR:
|
||||
logout: Sair
|
||||
migrate_account: Mudar para uma conta diferente
|
||||
migrate_account_html: Se você quer redirecionar essa conta para uma outra você pode <a href="%{path}">configurar isso aqui</a>.
|
||||
or: ou
|
||||
or_log_in_with: Ou faça login com
|
||||
providers:
|
||||
cas: CAS
|
||||
|
@@ -5,14 +5,8 @@ ar:
|
||||
defaults:
|
||||
avatar: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير 2MB. سيتم تصغيره إلى 120x120px
|
||||
digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة
|
||||
display_name:
|
||||
one: <span class="name-counter">1</span> حرف متبقي
|
||||
other: <span class="name-counter">%{count}</span> حروف متبقية
|
||||
header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير 2MB. سيتم تصغيره إلى 700x335px
|
||||
locked: يتطلب منك الموافقة يدويا على طلبات المتابعة
|
||||
note:
|
||||
one: <span class="note-counter">1</span> حرف متبقي
|
||||
other: <span class="note-counter">%{count}</span> حروف متبقية
|
||||
setting_noindex: ذلك يؤثر على حالة ملفك الشخصي و صفحاتك
|
||||
setting_theme: ذلك يؤثر على الشكل الذي سيبدو عليه ماستدون عندما تقوم بالدخول مِن أي جهاز.
|
||||
imports:
|
||||
|
@@ -580,9 +580,11 @@ sk:
|
||||
alipay: Alipay
|
||||
generic: Neznámy prehliadač
|
||||
current_session: Aktuálna sezóna
|
||||
description: "%{browser} na %{platform}"
|
||||
explanation: Tieto sú prehliadače ktoré sú teraz prihlásené na tvoj Mastodon účet.
|
||||
ip: IP adresa
|
||||
platforms:
|
||||
mac: MacOSX
|
||||
other: neznáma platforma
|
||||
revoke: Zamietni
|
||||
revoke_success: Sezóna úspešne zamietnutá
|
||||
@@ -594,6 +596,32 @@ sk:
|
||||
development: Vývoj
|
||||
edit_profile: Upraviť profil
|
||||
export: Exportovať dáta
|
||||
followers: Povolení sledovatelia
|
||||
import: Importovať
|
||||
migrate: Presunúť účet
|
||||
notifications: Oznámenia
|
||||
preferences: Možnosti
|
||||
settings: Nastavenia
|
||||
two_factor_authentication: Dvoj-faktorové overenie
|
||||
your_apps: Tvoje aplikácie
|
||||
statuses:
|
||||
open_in_web: Otvor v okne prehliadača
|
||||
over_character_limit: limit počtu %{max} znakov bol presiahnutý
|
||||
pin_errors:
|
||||
ownership: Nemožno pripnúť príspevok od niekoho iného
|
||||
private: Neverejné príspevky nemôžu byť pripnuté
|
||||
show_more: Ukáž viac
|
||||
visibilities:
|
||||
private: Iba pre sledovateľov
|
||||
private_long: Ukáž iba následovateľom
|
||||
public: Verejné
|
||||
public_long: Všetci môžu vidieť
|
||||
unlisted: Nezaradené
|
||||
unlisted_long: Všetci môžu vidieť, ale nieje zaradené do verejnej osi
|
||||
stream_entries:
|
||||
click_to_show: Klikni pre zobrazenie
|
||||
pinned: Pripnutý toot
|
||||
reblogged: vyzdvihnutý
|
||||
user_mailer:
|
||||
welcome:
|
||||
final_step: 'Začnite písať! Aj bez následovníkov budú vaše verejné správy videné ostatnými, napríklad na lokálnej osi a pod haštagmi. Môžete sa ostatným predstaviť pod haštagom #introductions.'
|
||||
|
@@ -21,7 +21,7 @@ module Mastodon
|
||||
end
|
||||
|
||||
def flags
|
||||
'rc2'
|
||||
'rc3'
|
||||
end
|
||||
|
||||
def to_a
|
||||
|
@@ -476,10 +476,10 @@ namespace :mastodon do
|
||||
time_ago = ENV.fetch('NUM_DAYS') { 7 }.to_i.days.ago
|
||||
|
||||
MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).find_each do |media|
|
||||
if media.file.exists?
|
||||
media.file.destroy
|
||||
media.save
|
||||
end
|
||||
next unless media.file.exists?
|
||||
|
||||
media.file.destroy
|
||||
media.save
|
||||
end
|
||||
end
|
||||
|
||||
|
@@ -10,7 +10,7 @@
|
||||
"build:production": "cross-env RAILS_ENV=production ./bin/webpack",
|
||||
"manage:translations": "node ./config/webpack/translationRunner.js",
|
||||
"start": "node ./streaming/index.js",
|
||||
"test": "yarn run test:lint && yarn run test:jest",
|
||||
"test": "npm-run-all test:lint test:jest",
|
||||
"test:lint": "eslint -c .eslintrc.yml --ext=js app/javascript/ config/webpack/ streaming/",
|
||||
"test:jest": "cross-env NODE_ENV=test jest --coverage"
|
||||
},
|
||||
@@ -67,6 +67,7 @@
|
||||
"marky": "^1.2.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"node-sass": "^4.7.2",
|
||||
"npm-run-all": "^4.1.2",
|
||||
"npmlog": "^4.1.2",
|
||||
"object-assign": "^4.1.1",
|
||||
"object-fit-images": "^3.2.3",
|
||||
|
131
yarn.lock
131
yarn.lock
@@ -244,6 +244,10 @@ array-equal@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
|
||||
|
||||
array-filter@~0.0.0:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
|
||||
|
||||
array-find-index@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
|
||||
@@ -263,6 +267,14 @@ array-includes@^3.0.3:
|
||||
define-properties "^1.1.2"
|
||||
es-abstract "^1.7.0"
|
||||
|
||||
array-map@~0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
|
||||
|
||||
array-reduce@~0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
|
||||
|
||||
array-union@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
|
||||
@@ -2166,7 +2178,7 @@ double-ended-queue@^2.1.0-0:
|
||||
version "2.1.0-0"
|
||||
resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
|
||||
|
||||
duplexer@^0.1.1:
|
||||
duplexer@^0.1.1, duplexer@~0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
|
||||
|
||||
@@ -2282,7 +2294,7 @@ error-ex@^1.2.0, error-ex@^1.3.1:
|
||||
dependencies:
|
||||
is-arrayish "^0.2.1"
|
||||
|
||||
es-abstract@^1.6.1, es-abstract@^1.7.0:
|
||||
es-abstract@^1.4.3, es-abstract@^1.6.1, es-abstract@^1.7.0:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
|
||||
dependencies:
|
||||
@@ -2534,6 +2546,18 @@ event-emitter@~0.3.5:
|
||||
d "1"
|
||||
es5-ext "~0.10.14"
|
||||
|
||||
event-stream@~3.3.0:
|
||||
version "3.3.4"
|
||||
resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
|
||||
dependencies:
|
||||
duplexer "~0.1.1"
|
||||
from "~0"
|
||||
map-stream "~0.1.0"
|
||||
pause-stream "0.0.11"
|
||||
split "0.3"
|
||||
stream-combiner "~0.0.4"
|
||||
through "~2.3.1"
|
||||
|
||||
eventemitter3@1.x.x:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
|
||||
@@ -2868,6 +2892,10 @@ fresh@0.5.2:
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
||||
|
||||
from@~0:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
|
||||
|
||||
fs-extra@^0.30.0:
|
||||
version "0.30.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
|
||||
@@ -4048,6 +4076,10 @@ json-loader@^0.5.4:
|
||||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
|
||||
|
||||
json-parse-better-errors@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a"
|
||||
|
||||
json-schema-traverse@^0.3.0:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
|
||||
@@ -4187,6 +4219,15 @@ load-json-file@^2.0.0:
|
||||
pify "^2.0.0"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
load-json-file@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
parse-json "^4.0.0"
|
||||
pify "^3.0.0"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
loader-runner@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
|
||||
@@ -4377,6 +4418,10 @@ map-obj@^1.0.0, map-obj@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
|
||||
|
||||
map-stream@~0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
|
||||
|
||||
mark-loader@^0.1.6:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/mark-loader/-/mark-loader-0.1.6.tgz#0abb477dca7421d70e20128ff6489f5cae8676d5"
|
||||
@@ -4425,6 +4470,10 @@ memory-fs@^0.4.0, memory-fs@~0.4.1:
|
||||
errno "^0.1.3"
|
||||
readable-stream "^2.0.1"
|
||||
|
||||
memorystream@^0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
|
||||
|
||||
meow@^3.3.0, meow@^3.7.0:
|
||||
version "3.7.0"
|
||||
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
|
||||
@@ -4756,6 +4805,20 @@ normalize-url@^1.4.0:
|
||||
query-string "^4.1.0"
|
||||
sort-keys "^1.0.0"
|
||||
|
||||
npm-run-all@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.2.tgz#90d62d078792d20669139e718621186656cea056"
|
||||
dependencies:
|
||||
ansi-styles "^3.2.0"
|
||||
chalk "^2.1.0"
|
||||
cross-spawn "^5.1.0"
|
||||
memorystream "^0.3.1"
|
||||
minimatch "^3.0.4"
|
||||
ps-tree "^1.1.0"
|
||||
read-pkg "^3.0.0"
|
||||
shell-quote "^1.6.1"
|
||||
string.prototype.padend "^3.0.0"
|
||||
|
||||
npm-run-path@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
||||
@@ -5028,6 +5091,13 @@ parse-json@^3.0.0:
|
||||
dependencies:
|
||||
error-ex "^1.3.1"
|
||||
|
||||
parse-json@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
|
||||
dependencies:
|
||||
error-ex "^1.3.1"
|
||||
json-parse-better-errors "^1.0.1"
|
||||
|
||||
parse5@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
|
||||
@@ -5100,6 +5170,18 @@ path-type@^2.0.0:
|
||||
dependencies:
|
||||
pify "^2.0.0"
|
||||
|
||||
path-type@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
|
||||
dependencies:
|
||||
pify "^3.0.0"
|
||||
|
||||
pause-stream@0.0.11:
|
||||
version "0.0.11"
|
||||
resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
|
||||
dependencies:
|
||||
through "~2.3"
|
||||
|
||||
pbkdf2@^3.0.3:
|
||||
version "3.0.14"
|
||||
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
|
||||
@@ -5763,6 +5845,12 @@ prr@~0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
|
||||
|
||||
ps-tree@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014"
|
||||
dependencies:
|
||||
event-stream "~3.3.0"
|
||||
|
||||
pseudomap@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
||||
@@ -6126,6 +6214,14 @@ read-pkg@^2.0.0:
|
||||
normalize-package-data "^2.3.2"
|
||||
path-type "^2.0.0"
|
||||
|
||||
read-pkg@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
|
||||
dependencies:
|
||||
load-json-file "^4.0.0"
|
||||
normalize-package-data "^2.3.2"
|
||||
path-type "^3.0.0"
|
||||
|
||||
readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
|
||||
@@ -6675,6 +6771,15 @@ shebang-regex@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||
|
||||
shell-quote@^1.6.1:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
|
||||
dependencies:
|
||||
array-filter "~0.0.0"
|
||||
array-map "~0.0.0"
|
||||
array-reduce "~0.0.0"
|
||||
jsonify "~0.0.0"
|
||||
|
||||
shellwords@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
|
||||
@@ -6809,6 +6914,12 @@ spdy@^3.4.1:
|
||||
select-hose "^2.0.0"
|
||||
spdy-transport "^2.0.18"
|
||||
|
||||
split@0.3:
|
||||
version "0.3.3"
|
||||
resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
|
||||
dependencies:
|
||||
through "2"
|
||||
|
||||
split@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
|
||||
@@ -6854,6 +6965,12 @@ stream-browserify@^2.0.1:
|
||||
inherits "~2.0.1"
|
||||
readable-stream "^2.0.2"
|
||||
|
||||
stream-combiner@~0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
|
||||
dependencies:
|
||||
duplexer "~0.1.1"
|
||||
|
||||
stream-http@^2.7.2:
|
||||
version "2.7.2"
|
||||
resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad"
|
||||
@@ -6890,6 +7007,14 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string.prototype.padend@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0"
|
||||
dependencies:
|
||||
define-properties "^1.1.2"
|
||||
es-abstract "^1.4.3"
|
||||
function-bind "^1.0.2"
|
||||
|
||||
string_decoder@^1.0.0, string_decoder@~1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
|
||||
@@ -7057,7 +7182,7 @@ throng@^4.0.0:
|
||||
dependencies:
|
||||
lodash.defaults "^4.0.1"
|
||||
|
||||
through@2, through@^2.3.6:
|
||||
through@2, through@^2.3.6, through@~2.3, through@~2.3.1:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
|
||||
|
Reference in New Issue
Block a user