Merge branch 'kb_development' into kb-connect-patch-to-development
This commit is contained in:
commit
b0e077ed54
57 changed files with 360 additions and 303 deletions
|
@ -5,6 +5,7 @@ module TwoFactorAuthenticationConcern
|
|||
|
||||
included do
|
||||
prepend_before_action :authenticate_with_two_factor, if: :two_factor_enabled?, only: [:create]
|
||||
helper_method :webauthn_enabled?
|
||||
end
|
||||
|
||||
def two_factor_enabled?
|
||||
|
@ -87,4 +88,10 @@ module TwoFactorAuthenticationConcern
|
|||
|
||||
set_locale { render :two_factor }
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def webauthn_enabled?
|
||||
@webauthn_enabled
|
||||
end
|
||||
end
|
||||
|
|
|
@ -56,4 +56,4 @@ export const showAlertForError = (error, skipNotFound = false) => {
|
|||
title: messages.unexpectedTitle,
|
||||
message: messages.unexpectedMessage,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
|
@ -290,7 +290,7 @@ export function submitComposeWithCircleSuccess(status, circleId) {
|
|||
type: COMPOSE_WITH_CIRCLE_SUCCESS,
|
||||
status,
|
||||
circleId,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function submitComposeFail(error) {
|
||||
|
|
|
@ -121,7 +121,7 @@ export function normalizeStatus(status, normalOldStatus) {
|
|||
normalStatus.media_attachments.forEach(item => {
|
||||
const oldItem = list.find(i => i.get('id') === item.id);
|
||||
if (oldItem && oldItem.get('description') === item.description) {
|
||||
item.translation = oldItem.get('translation')
|
||||
item.translation = oldItem.get('translation');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -165,13 +165,13 @@ export function normalizePoll(poll, normalOldPoll) {
|
|||
...option,
|
||||
voted: poll.own_votes && poll.own_votes.includes(index),
|
||||
titleHtml: emojify(escapeTextContentForBrowser(option.title), emojiMap),
|
||||
}
|
||||
};
|
||||
|
||||
if (normalOldPoll && normalOldPoll.getIn(['options', index, 'title']) === option.title) {
|
||||
normalOption.translation = normalOldPoll.getIn(['options', index, 'translation']);
|
||||
}
|
||||
|
||||
return normalOption
|
||||
return normalOption;
|
||||
});
|
||||
|
||||
return normalPoll;
|
||||
|
|
|
@ -192,4 +192,4 @@ export const connectListStream = listId =>
|
|||
* @returns {function(): void}
|
||||
*/
|
||||
export const connectAntennaStream = antennaId =>
|
||||
connectTimelineStream(`antenna:${antennaId}`, 'antenna', { antenna: antennaId }, { fillGaps: () => fillAntennaTimelineGaps(antennaId) });
|
||||
connectTimelineStream(`antenna:${antennaId}`, 'antenna', { antenna: antennaId }, { fillGaps: () => fillAntennaTimelineGaps(antennaId) });
|
||||
|
|
|
@ -22,7 +22,7 @@ export default class Column extends PureComponent {
|
|||
scrollable = document.scrollingElement;
|
||||
} else {
|
||||
scrollable = this.node.querySelector('.scrollable');
|
||||
}
|
||||
}
|
||||
|
||||
if (!scrollable) {
|
||||
return;
|
||||
|
|
|
@ -184,7 +184,7 @@ class CompactedStatus extends ImmutablePureComponent {
|
|||
} else if (attachments.getIn([0, 'type']) === 'audio') {
|
||||
return '16 / 9';
|
||||
} else {
|
||||
return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2'
|
||||
return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -356,10 +356,10 @@ class MediaGallery extends PureComponent {
|
|||
|
||||
const rowClass = (size === 5 || size === 6 || size === 9 || size === 10 || size === 11 || size === 12) ? 'media-gallery--row3' :
|
||||
(size === 7 || size === 8 || size === 13 || size === 14 || size === 15 || size === 16) ? 'media-gallery--row4' :
|
||||
'media-gallery--row2';
|
||||
'media-gallery--row2';
|
||||
const columnClass = (size === 9) ? 'media-gallery--column3' :
|
||||
(size === 10 || size === 11 || size === 12 || size === 13 || size === 14 || size === 15 || size === 16) ? 'media-gallery--column4' :
|
||||
'media-gallery--column2';
|
||||
'media-gallery--column2';
|
||||
const compactClass = compact ? 'media-gallery__compact' : null;
|
||||
|
||||
return (
|
||||
|
|
|
@ -132,7 +132,7 @@ class Poll extends ImmutablePureComponent {
|
|||
|
||||
handleReveal = () => {
|
||||
this.setState({ revealed: true });
|
||||
}
|
||||
};
|
||||
|
||||
renderOption (option, optionIndex, showResults) {
|
||||
const { poll, lang, disabled, intl } = this.props;
|
||||
|
|
|
@ -13,7 +13,7 @@ import AttachmentList from 'mastodon/components/attachment_list';
|
|||
import { Icon } from 'mastodon/components/icon';
|
||||
import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder';
|
||||
|
||||
import CompactedStatusContainer from '../containers/compacted_status_container'
|
||||
import CompactedStatusContainer from '../containers/compacted_status_container';
|
||||
import Card from '../features/status/components/card';
|
||||
// We use the component (and not the container) since we do not want
|
||||
// to use the progress bar to show download progress
|
||||
|
@ -213,7 +213,7 @@ class Status extends ImmutablePureComponent {
|
|||
} else if (attachments.getIn([0, 'type']) === 'audio') {
|
||||
return '16 / 9';
|
||||
} else {
|
||||
return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2'
|
||||
return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -489,12 +489,12 @@ class Status extends ImmutablePureComponent {
|
|||
</div>
|
||||
|
||||
<div >
|
||||
<FormattedMessage id='status.filtered' defaultMessage='Filtered' />: {matchedFilters.join(', ')}.
|
||||
{' '}
|
||||
<button className='status__wrapper--filtered__button' onClick={this.handleUnfilterClick}>
|
||||
<FormattedMessage id='status.show_filter_reason' defaultMessage='Show anyway' />
|
||||
</button>
|
||||
</div>
|
||||
<FormattedMessage id='status.filtered' defaultMessage='Filtered' />: {matchedFilters.join(', ')}.
|
||||
{' '}
|
||||
<button className='status__wrapper--filtered__button' onClick={this.handleUnfilterClick}>
|
||||
<FormattedMessage id='status.show_filter_reason' defaultMessage='Show anyway' />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</HotKeys>
|
||||
);
|
||||
|
@ -628,7 +628,7 @@ class Status extends ImmutablePureComponent {
|
|||
const withReference = (!withQuote && status.get('status_references_count') > 0) ? <span className='status__visibility-icon'><Icon id='link' title='Reference' /></span> : null;
|
||||
const withExpiration = status.get('expires_at') ? <span className='status__visibility-icon'><Icon id='clock-o' title='Expiration' /></span> : null;
|
||||
|
||||
const quote = !muted && status.get('quote_id') && (['public', 'community'].includes(contextType) ? showQuoteInPublic : showQuoteInHome) && <CompactedStatusContainer id={status.get('quote_id')} />
|
||||
const quote = !muted && status.get('quote_id') && (['public', 'community'].includes(contextType) ? showQuoteInPublic : showQuoteInHome) && <CompactedStatusContainer id={status.get('quote_id')} />;
|
||||
|
||||
return (
|
||||
<HotKeys handlers={handlers}>
|
||||
|
|
|
@ -192,7 +192,7 @@ class About extends PureComponent {
|
|||
</Section>
|
||||
|
||||
<Section title={intl.formatMessage(messages.capabilities)}>
|
||||
<p><FormattedMessage id='about.kmyblue_capability' defaultMessage='This server is using kmyblue, a fork of Mastodon. On this server, kmyblues unique features are configured as follows.' /></p>
|
||||
<p><FormattedMessage id='about.kmyblue_capability' defaultMessage='This server is using kmyblue, a fork of Mastodon. On this server, kmyblues unique features are configured as follows.' /></p>
|
||||
{!isLoading && (
|
||||
<ol className='rules-list'>
|
||||
<li>
|
||||
|
|
|
@ -33,7 +33,7 @@ class RadioPanel extends PureComponent {
|
|||
<div className='setting-radio-panel'>
|
||||
{values.map((val) => (
|
||||
<button className={classNames('setting-radio-panel__item', {'setting-radio-panel__item__active': value.get('value') === val.get('value')})}
|
||||
key={val.get('value')} onClick={this.handleChange} data-value={val.get('value')}>
|
||||
key={val.get('value')} onClick={this.handleChange} data-value={val.get('value')}>
|
||||
{val.get('label')}
|
||||
</button>
|
||||
))}
|
||||
|
|
|
@ -167,7 +167,7 @@ class AntennaSetting extends PureComponent {
|
|||
|
||||
handleEditAntennaClick = () => {
|
||||
window.open(`/antennas/${this.props.params.id}/edit`, '_blank');
|
||||
}
|
||||
};
|
||||
|
||||
handleDeleteClick = () => {
|
||||
const { dispatch, columnId, intl } = this.props;
|
||||
|
@ -193,7 +193,7 @@ class AntennaSetting extends PureComponent {
|
|||
|
||||
handleTimelineClick = () => {
|
||||
this.context.router.history.push(`/antennast/${this.props.params.id}`);
|
||||
}
|
||||
};
|
||||
|
||||
onStlToggle = ({ target }) => {
|
||||
const { dispatch } = this.props;
|
||||
|
@ -336,7 +336,7 @@ class AntennaSetting extends PureComponent {
|
|||
</label>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
let stlAlert;
|
||||
|
@ -369,7 +369,7 @@ class AntennaSetting extends PureComponent {
|
|||
const contentRadioAlert = antenna.get(contentRadioValue.get('value') === 'tags' ? 'keywords_count' : 'tags_count') > 0;
|
||||
|
||||
const listOptions = lists.toArray().filter((list) => list.length >= 2 && list[1]).map((list) => {
|
||||
return { value: list[1].get('id'), label: list[1].get('title') }
|
||||
return { value: list[1].get('id'), label: list[1].get('title') };
|
||||
});
|
||||
|
||||
return (
|
||||
|
@ -470,7 +470,7 @@ class AntennaSetting extends PureComponent {
|
|||
icon='sitemap'
|
||||
label={intl.formatMessage(messages.addDomainLabel)}
|
||||
title={intl.formatMessage(messages.addDomainTitle)}
|
||||
/>
|
||||
/>
|
||||
)}
|
||||
|
||||
{rangeRadioAlert && <div className='alert'><FormattedMessage id='antennas.warnings.range_radio' defaultMessage='Simultaneous account and domain designation is not recommended.' /></div>}
|
||||
|
@ -487,7 +487,7 @@ class AntennaSetting extends PureComponent {
|
|||
icon='hashtag'
|
||||
label={intl.formatMessage(messages.addTagLabel)}
|
||||
title={intl.formatMessage(messages.addTagTitle)}
|
||||
/>
|
||||
/>
|
||||
)}
|
||||
|
||||
{contentRadioValue.get('value') === 'keywords' && (
|
||||
|
@ -500,7 +500,7 @@ class AntennaSetting extends PureComponent {
|
|||
icon='paragraph'
|
||||
label={intl.formatMessage(messages.addKeywordLabel)}
|
||||
title={intl.formatMessage(messages.addKeywordTitle)}
|
||||
/>
|
||||
/>
|
||||
)}
|
||||
|
||||
{contentRadioAlert && <div className='alert'><FormattedMessage id='antennas.warnings.content_radio' defaultMessage='Simultaneous keyword and tag designation is not recommended.' /></div>}
|
||||
|
@ -518,7 +518,7 @@ class AntennaSetting extends PureComponent {
|
|||
icon='sitemap'
|
||||
label={intl.formatMessage(messages.addDomainLabel)}
|
||||
title={intl.formatMessage(messages.addDomainTitle)}
|
||||
/>
|
||||
/>
|
||||
<h3><FormattedMessage id='antennas.exclude_keywords' defaultMessage='Exclude keywords' /></h3>
|
||||
<TextList
|
||||
onChange={this.onExcludeKeywordNameChanged}
|
||||
|
@ -529,18 +529,18 @@ class AntennaSetting extends PureComponent {
|
|||
icon='paragraph'
|
||||
label={intl.formatMessage(messages.addKeywordLabel)}
|
||||
title={intl.formatMessage(messages.addKeywordTitle)}
|
||||
/>
|
||||
<h3><FormattedMessage id='antennas.exclude_tags' defaultMessage='Exclude tags' /></h3>
|
||||
<TextList
|
||||
onChange={this.onExcludeTagNameChanged}
|
||||
onAdd={this.onExcludeTagAdd}
|
||||
onRemove={this.onExcludeTagRemove}
|
||||
value={this.state.excludeTagName}
|
||||
values={tags.get('exclude_tags') || ImmutableList()}
|
||||
icon='hashtag'
|
||||
label={intl.formatMessage(messages.addTagLabel)}
|
||||
title={intl.formatMessage(messages.addTagTitle)}
|
||||
/>
|
||||
/>
|
||||
<h3><FormattedMessage id='antennas.exclude_tags' defaultMessage='Exclude tags' /></h3>
|
||||
<TextList
|
||||
onChange={this.onExcludeTagNameChanged}
|
||||
onAdd={this.onExcludeTagAdd}
|
||||
onRemove={this.onExcludeTagRemove}
|
||||
value={this.state.excludeTagName}
|
||||
values={tags.get('exclude_tags') || ImmutableList()}
|
||||
icon='hashtag'
|
||||
label={intl.formatMessage(messages.addTagLabel)}
|
||||
title={intl.formatMessage(messages.addTagTitle)}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
@ -79,7 +79,7 @@ class Antennas extends ImmutablePureComponent {
|
|||
>
|
||||
{antennas.map(antenna => (
|
||||
<ColumnLink key={antenna.get('id')} to={`/antennast/${antenna.get('id')}`} icon='wifi' text={antenna.get('title')}
|
||||
badge={antenna.get('insert_feeds') ? intl.formatMessage(antenna.get('list') ? messages.insert_list : messages.insert_home) : undefined} />
|
||||
badge={antenna.get('insert_feeds') ? intl.formatMessage(antenna.get('list') ? messages.insert_list : messages.insert_home) : undefined} />
|
||||
))}
|
||||
</ScrollableList>
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ export default class NavigationBar extends ImmutablePureComponent {
|
|||
};
|
||||
|
||||
render () {
|
||||
const username = this.props.account.get('acct')
|
||||
const username = this.props.account.get('acct');
|
||||
return (
|
||||
<div className='navigation-bar'>
|
||||
<Link to={`/@${username}`}>
|
||||
|
|
|
@ -57,17 +57,17 @@ class Search extends PureComponent {
|
|||
};
|
||||
|
||||
defaultOptions = [
|
||||
{ label: <><mark>has:</mark> <FormattedList type='disjunction' value={['media', 'poll', 'embed']} /></>, action: e => { e.preventDefault(); this._insertText('has:') } },
|
||||
{ label: <><mark>is:</mark> <FormattedList type='disjunction' value={['reply', 'sensitive']} /></>, action: e => { e.preventDefault(); this._insertText('is:') } },
|
||||
{ label: <><mark>my:</mark> <FormattedList type='disjunction' value={['favourited', 'bookmarked', 'boosted']} /></>, action: e => { e.preventDefault(); this._insertText('my:') } },
|
||||
{ label: <><mark>language:</mark> <FormattedMessage id='search_popout.language_code' defaultMessage='ISO language code' /></>, action: e => { e.preventDefault(); this._insertText('language:') } },
|
||||
{ label: <><mark>from:</mark> <FormattedMessage id='search_popout.user' defaultMessage='user' /></>, action: e => { e.preventDefault(); this._insertText('from:') } },
|
||||
{ label: <><mark>domain:</mark> <FormattedMessage id='search_popout.domain' defaultMessage='domain' /></>, action: e => { e.preventDefault(); this._insertText('domain:') } },
|
||||
{ label: <><mark>before:</mark> <FormattedMessage id='search_popout.specific_date' defaultMessage='specific date' /></>, action: e => { e.preventDefault(); this._insertText('before:') } },
|
||||
{ label: <><mark>during:</mark> <FormattedMessage id='search_popout.specific_date' defaultMessage='specific date' /></>, action: e => { e.preventDefault(); this._insertText('during:') } },
|
||||
{ label: <><mark>after:</mark> <FormattedMessage id='search_popout.specific_date' defaultMessage='specific date' /></>, action: e => { e.preventDefault(); this._insertText('after:') } },
|
||||
{ label: <><mark>in:</mark> <FormattedList type='disjunction' value={['all', 'library']} /></>, action: e => { e.preventDefault(); this._insertText('in:') } },
|
||||
{ label: <><mark>order:</mark> <FormattedList type='disjunction' value={['desc', 'asc']} /></>, action: e => { e.preventDefault(); this._insertText('order:') } },
|
||||
{ label: <><mark>has:</mark> <FormattedList type='disjunction' value={['media', 'poll', 'embed']} /></>, action: e => { e.preventDefault(); this._insertText('has:'); } },
|
||||
{ label: <><mark>is:</mark> <FormattedList type='disjunction' value={['reply', 'sensitive']} /></>, action: e => { e.preventDefault(); this._insertText('is:'); } },
|
||||
{ label: <><mark>my:</mark> <FormattedList type='disjunction' value={['favourited', 'bookmarked', 'boosted']} /></>, action: e => { e.preventDefault(); this._insertText('my:'); } },
|
||||
{ label: <><mark>language:</mark> <FormattedMessage id='search_popout.language_code' defaultMessage='ISO language code' /></>, action: e => { e.preventDefault(); this._insertText('language:'); } },
|
||||
{ label: <><mark>from:</mark> <FormattedMessage id='search_popout.user' defaultMessage='user' /></>, action: e => { e.preventDefault(); this._insertText('from:'); } },
|
||||
{ label: <><mark>domain:</mark> <FormattedMessage id='search_popout.domain' defaultMessage='domain' /></>, action: e => { e.preventDefault(); this._insertText('domain:'); } },
|
||||
{ label: <><mark>before:</mark> <FormattedMessage id='search_popout.specific_date' defaultMessage='specific date' /></>, action: e => { e.preventDefault(); this._insertText('before:'); } },
|
||||
{ label: <><mark>during:</mark> <FormattedMessage id='search_popout.specific_date' defaultMessage='specific date' /></>, action: e => { e.preventDefault(); this._insertText('during:'); } },
|
||||
{ label: <><mark>after:</mark> <FormattedMessage id='search_popout.specific_date' defaultMessage='specific date' /></>, action: e => { e.preventDefault(); this._insertText('after:'); } },
|
||||
{ label: <><mark>in:</mark> <FormattedList type='disjunction' value={['all', 'library']} /></>, action: e => { e.preventDefault(); this._insertText('in:'); } },
|
||||
{ label: <><mark>order:</mark> <FormattedList type='disjunction' value={['desc', 'asc']} /></>, action: e => { e.preventDefault(); this._insertText('order:'); } },
|
||||
];
|
||||
|
||||
setRef = c => {
|
||||
|
|
|
@ -80,7 +80,7 @@ class Results extends PureComponent {
|
|||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
}
|
||||
|
||||
handleSelectAll = () => {
|
||||
const { submittedType, dispatch } = this.props;
|
||||
|
@ -116,7 +116,7 @@ class Results extends PureComponent {
|
|||
}
|
||||
|
||||
this.setState({ type: 'hashtags' });
|
||||
}
|
||||
};
|
||||
|
||||
handleSelectStatuses = () => {
|
||||
const { submittedType, dispatch } = this.props;
|
||||
|
@ -128,7 +128,7 @@ class Results extends PureComponent {
|
|||
}
|
||||
|
||||
this.setState({ type: 'statuses' });
|
||||
}
|
||||
};
|
||||
|
||||
handleLoadMoreAccounts = () => this._loadMore('accounts');
|
||||
handleLoadMoreStatuses = () => this._loadMore('statuses');
|
||||
|
|
|
@ -199,7 +199,7 @@ const Firehose = ({ feedType, multiColumn }) => {
|
|||
</Helmet>
|
||||
</Column>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
Firehose.propTypes = {
|
||||
multiColumn: PropTypes.bool,
|
||||
|
|
|
@ -27,9 +27,9 @@ const mapStateToProps = (state, { accountId }) => ({
|
|||
const mapDispatchToProps = (dispatch) => ({
|
||||
onSignupClick() {
|
||||
dispatch(closeModal({
|
||||
modalType: undefined,
|
||||
ignoreFocus: false,
|
||||
}));
|
||||
modalType: undefined,
|
||||
ignoreFocus: false,
|
||||
}));
|
||||
dispatch(openModal({ modalType: 'CLOSED_REGISTRATIONS' }));
|
||||
},
|
||||
});
|
||||
|
@ -187,7 +187,7 @@ class LoginForm extends React.PureComponent {
|
|||
|
||||
setIFrameRef = (iframe) => {
|
||||
this.iframeRef = iframe;
|
||||
}
|
||||
};
|
||||
|
||||
handleFocus = () => {
|
||||
this.setState({ expanded: true });
|
||||
|
|
|
@ -78,7 +78,7 @@ class Lists extends ImmutablePureComponent {
|
|||
>
|
||||
{lists.map(list =>
|
||||
(<ColumnLink key={list.get('id')} to={`/lists/${list.get('id')}`} icon='list-ul' text={list.get('title')}
|
||||
badge={(list.get('antennas') && list.get('antennas').size > 0) ? intl.formatMessage(messages.with_antenna) : undefined} />),
|
||||
badge={(list.get('antennas') && list.get('antennas').size > 0) ? intl.formatMessage(messages.with_antenna) : undefined} />),
|
||||
)}
|
||||
</ScrollableList>
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ class ReactionEmoji extends ImmutablePureComponent {
|
|||
const html = { __html: emojify(emoji) };
|
||||
content = (
|
||||
<span dangerouslySetInnerHTML={html} />
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -100,7 +100,7 @@ class ReactionDeck extends ImmutablePureComponent {
|
|||
const newDeck = this.deckToArray();
|
||||
newDeck.push('👍');
|
||||
this.props.onChange(newDeck);
|
||||
}
|
||||
};
|
||||
|
||||
render () {
|
||||
const { intl, deck, emojiMap, multiColumn } = this.props;
|
||||
|
@ -123,38 +123,38 @@ class ReactionDeck extends ImmutablePureComponent {
|
|||
showBackButton
|
||||
/>
|
||||
|
||||
<ScrollableList
|
||||
scrollKey='reaction_deck'
|
||||
bindToDocument={!multiColumn}
|
||||
>
|
||||
<DragDropContext onDragEnd={this.handleReorder}>
|
||||
<StrictModeDroppable droppableId='deckitems'>
|
||||
{(provided) => (
|
||||
<div className='deckitems reaction_deck_container' {...provided.droppableProps} ref={provided.innerRef}>
|
||||
{deck.map((emoji, index) => (
|
||||
<Draggable key={index} draggableId={'' + index} index={index}>
|
||||
{(provided2) => (
|
||||
<div className='reaction_deck_container__row' ref={provided2.innerRef} {...provided2.draggableProps}>
|
||||
<Icon id='bars' className='handle' {...provided2.dragHandleProps} />
|
||||
<ReactionEmoji emojiMap={emojiMap}
|
||||
emoji={emoji.get('name')}
|
||||
index={index}
|
||||
onChange={this.handleChange}
|
||||
onRemove={this.handleRemove}
|
||||
className='reaction_emoji'
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</Draggable>
|
||||
))}
|
||||
{provided.placeholder}
|
||||
<ScrollableList
|
||||
scrollKey='reaction_deck'
|
||||
bindToDocument={!multiColumn}
|
||||
>
|
||||
<DragDropContext onDragEnd={this.handleReorder}>
|
||||
<StrictModeDroppable droppableId='deckitems'>
|
||||
{(provided) => (
|
||||
<div className='deckitems reaction_deck_container' {...provided.droppableProps} ref={provided.innerRef}>
|
||||
{deck.map((emoji, index) => (
|
||||
<Draggable key={index} draggableId={'' + index} index={index}>
|
||||
{(provided2) => (
|
||||
<div className='reaction_deck_container__row' ref={provided2.innerRef} {...provided2.draggableProps}>
|
||||
<Icon id='bars' className='handle' {...provided2.dragHandleProps} />
|
||||
<ReactionEmoji emojiMap={emojiMap}
|
||||
emoji={emoji.get('name')}
|
||||
index={index}
|
||||
onChange={this.handleChange}
|
||||
onRemove={this.handleRemove}
|
||||
className='reaction_emoji'
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</Draggable>
|
||||
))}
|
||||
{provided.placeholder}
|
||||
|
||||
<Button text={intl.formatMessage(messages.reaction_deck_add)} onClick={this.handleAdd} />
|
||||
</div>
|
||||
)}
|
||||
</StrictModeDroppable>
|
||||
</DragDropContext>
|
||||
</ScrollableList>
|
||||
<Button text={intl.formatMessage(messages.reaction_deck_add)} onClick={this.handleAdd} />
|
||||
</div>
|
||||
)}
|
||||
</StrictModeDroppable>
|
||||
</DragDropContext>
|
||||
</ScrollableList>
|
||||
|
||||
<Helmet>
|
||||
<meta name='robots' content='noindex' />
|
||||
|
|
|
@ -45,7 +45,7 @@ class Reblogs extends ImmutablePureComponent {
|
|||
if (!this.props.accountIds) {
|
||||
this.props.dispatch(fetchReblogs(this.props.params.statusId));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
handleRefresh = () => {
|
||||
this.props.dispatch(fetchReblogs(this.props.params.statusId));
|
||||
|
|
|
@ -104,7 +104,7 @@ const Comment = ({ comment, domain, statusIds, isRemote, isSubmitting, selectedD
|
|||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
Comment.propTypes = {
|
||||
comment: PropTypes.string.isRequired,
|
||||
|
|
|
@ -147,7 +147,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
|||
} else if (attachments.getIn([0, 'type']) === 'audio') {
|
||||
return '16 / 9';
|
||||
} else {
|
||||
return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2'
|
||||
return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -83,8 +83,8 @@ class Header extends PureComponent {
|
|||
|
||||
if (sso_redirect) {
|
||||
content = (
|
||||
<a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
|
||||
)
|
||||
<a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
|
||||
);
|
||||
} else {
|
||||
let signupButton;
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@ export default class ModalRoot extends PureComponent {
|
|||
<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
|
||||
{(SpecificComponent) => {
|
||||
const ref = typeof SpecificComponent !== 'function' ? this.setModalRef : undefined;
|
||||
return <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={this.handleClose} ref={ref} />
|
||||
return <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={this.handleClose} ref={ref} />;
|
||||
}}
|
||||
</BundleContainer>
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ const SignInBanner = () => {
|
|||
<p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>
|
||||
<a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
|
||||
</div>
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (registrationsOpen) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"about.blocks": "Valvotut palvelimet",
|
||||
"about.contact": "Yhteydenotto:",
|
||||
"about.contact": "Ota yhteyttä:",
|
||||
"about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.",
|
||||
"about.domain_blocks.no_reason_available": "Syytä ei ole ilmoitettu",
|
||||
"about.domain_blocks.preamble": "Mastodonin avulla voidaan yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.",
|
||||
|
@ -31,10 +31,10 @@
|
|||
"account.featured_tags.last_status_never": "Ei julkaisuja",
|
||||
"account.featured_tags.title": "Käyttäjän {name} esille nostetut aihetunnisteet",
|
||||
"account.follow": "Seuraa",
|
||||
"account.followers": "seuraaja(t)",
|
||||
"account.followers": "Seuraajat",
|
||||
"account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajaa}}",
|
||||
"account.following": "Seurataan",
|
||||
"account.following": "Seuratut",
|
||||
"account.following_counter": "{count, plural, one {{counter} seurattu} other {{counter} seurattua}}",
|
||||
"account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.",
|
||||
"account.follows_you": "Seuraa sinua",
|
||||
|
@ -194,7 +194,7 @@
|
|||
"copypaste.copied": "Kopioitu",
|
||||
"copypaste.copy_to_clipboard": "Kopioi leikepöydälle",
|
||||
"directory.federated": "Koko tunnettu fediversumi",
|
||||
"directory.local": "Vain palvelusta {domain}",
|
||||
"directory.local": "Vain palvelimelta {domain}",
|
||||
"directory.new_arrivals": "Äskettäin saapuneet",
|
||||
"directory.recently_active": "Hiljattain aktiiviset",
|
||||
"disabled_account_banner.account_settings": "Tilin asetukset",
|
||||
|
@ -266,7 +266,7 @@
|
|||
"filter_modal.select_filter.context_mismatch": "ei sovellu tähän kontekstiin",
|
||||
"filter_modal.select_filter.expired": "vanhentunut",
|
||||
"filter_modal.select_filter.prompt_new": "Uusi luokka: {name}",
|
||||
"filter_modal.select_filter.search": "Etsi tai luo",
|
||||
"filter_modal.select_filter.search": "Hae tai luo",
|
||||
"filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi",
|
||||
"filter_modal.select_filter.title": "Suodata tämä julkaisu",
|
||||
"filter_modal.title.status": "Suodata julkaisu",
|
||||
|
@ -336,9 +336,9 @@
|
|||
"keyboard_shortcuts.blocked": "Avaa estettyjen käyttäjien luettelo",
|
||||
"keyboard_shortcuts.boost": "Tehosta julkaisua",
|
||||
"keyboard_shortcuts.column": "Kohdista sarakkeeseen",
|
||||
"keyboard_shortcuts.compose": "siirry tekstinsyöttöön",
|
||||
"keyboard_shortcuts.compose": "Kohdista kirjoituskenttään",
|
||||
"keyboard_shortcuts.description": "Kuvaus",
|
||||
"keyboard_shortcuts.direct": "avataksesi yksityisten mainintojen sarakkeen",
|
||||
"keyboard_shortcuts.direct": "Avaa yksityisten mainintojen sarake",
|
||||
"keyboard_shortcuts.down": "Siirry listassa alaspäin",
|
||||
"keyboard_shortcuts.enter": "Avaa julkaisu",
|
||||
"keyboard_shortcuts.favourite": "Lisää julkaisu suosikkeihin",
|
||||
|
@ -347,22 +347,22 @@
|
|||
"keyboard_shortcuts.heading": "Pikanäppäimet",
|
||||
"keyboard_shortcuts.home": "Avaa kotiaikajana",
|
||||
"keyboard_shortcuts.hotkey": "Pikanäppäin",
|
||||
"keyboard_shortcuts.legend": "Näytä tämä selite",
|
||||
"keyboard_shortcuts.legend": "Näytä tämä ohje",
|
||||
"keyboard_shortcuts.local": "Avaa paikallinen aikajana",
|
||||
"keyboard_shortcuts.mention": "Mainitse julkaisija",
|
||||
"keyboard_shortcuts.muted": "Avaa lista mykistetyistä käyttäjistä",
|
||||
"keyboard_shortcuts.mention": "Mainitse kirjoittaja",
|
||||
"keyboard_shortcuts.muted": "Avaa mykistettyjen käyttäjien luettelo",
|
||||
"keyboard_shortcuts.my_profile": "Avaa profiilisi",
|
||||
"keyboard_shortcuts.notifications": "Avaa ilmoitukset-valikko",
|
||||
"keyboard_shortcuts.notifications": "Avaa ilmoitussarake",
|
||||
"keyboard_shortcuts.open_media": "Avaa media",
|
||||
"keyboard_shortcuts.pinned": "Avaa kiinnitettyjen julkaisujen luettelo",
|
||||
"keyboard_shortcuts.profile": "Avaa kirjoittajan profiili",
|
||||
"keyboard_shortcuts.reply": "Vastaa julkaisuun",
|
||||
"keyboard_shortcuts.requests": "Avaa seuraamispyyntöjen luettelo",
|
||||
"keyboard_shortcuts.search": "siirry hakukenttään",
|
||||
"keyboard_shortcuts.search": "Kohdista hakukenttään",
|
||||
"keyboard_shortcuts.spoilers": "Näytä/piilota sisältövaroituskenttä",
|
||||
"keyboard_shortcuts.start": "avaa \"Aloitus\"",
|
||||
"keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media",
|
||||
"keyboard_shortcuts.start": "Avaa Näin pääset alkuun -sarake",
|
||||
"keyboard_shortcuts.toggle_hidden": "Näytä/piilota sisältövaroituksella merkitty teksti",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "Näytä/piilota media",
|
||||
"keyboard_shortcuts.toot": "Luo uusi julkaisu",
|
||||
"keyboard_shortcuts.unfocus": "Poistu teksti-/hakukentästä",
|
||||
"keyboard_shortcuts.up": "Siirry listassa ylöspäin",
|
||||
|
@ -419,7 +419,7 @@
|
|||
"navigation_bar.pins": "Kiinnitetyt julkaisut",
|
||||
"navigation_bar.preferences": "Asetukset",
|
||||
"navigation_bar.public_timeline": "Yleinen aikajana",
|
||||
"navigation_bar.search": "Haku",
|
||||
"navigation_bar.search": "Hae",
|
||||
"navigation_bar.security": "Turvallisuus",
|
||||
"not_signed_in_indicator.not_signed_in": "Sinun on kirjauduttava sisään käyttääksesi resurssia.",
|
||||
"notification.admin.report": "{name} teki ilmoituksen käytäjästä {target}",
|
||||
|
@ -475,11 +475,11 @@
|
|||
"onboarding.actions.go_to_explore": "Siirry suosituimpien aiheiden syötteeseen",
|
||||
"onboarding.actions.go_to_home": "Siirry kotisyötteeseeni",
|
||||
"onboarding.compose.template": "Tervehdys #Mastodon!",
|
||||
"onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.",
|
||||
"onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa tai yrittää myöhemmin uudelleen.",
|
||||
"onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!",
|
||||
"onboarding.follows.title": "Mukauta kotisyötettäsi",
|
||||
"onboarding.share.lead": "Kerro ihmisille, kuinka he voivat löytää sinut Mastodonista!",
|
||||
"onboarding.share.message": "Olen {username} #Mastodon'issa! Seuraa minua osoitteessa {url}",
|
||||
"onboarding.share.message": "Olen {username} #Mastodonissa! Seuraa minua osoitteessa {url}",
|
||||
"onboarding.share.next_steps": "Mahdolliset seuraavat vaiheet:",
|
||||
"onboarding.share.title": "Jaa profiilisi",
|
||||
"onboarding.start.lead": "Uusi Mastodon-tilisi on nyt valmiina käyttöön. Kyseessä on ainutlaatuinen, hajautettu sosiaalisen median alusta, jolla sinä itse – algoritmin sijaan – määrität käyttökokemuksesi. Näin hyödyt Mastodonista eniten:",
|
||||
|
@ -584,17 +584,17 @@
|
|||
"report_notification.open": "Avaa raportti",
|
||||
"search.no_recent_searches": "Ei viimeaikaisia hakuja",
|
||||
"search.placeholder": "Hae",
|
||||
"search.quick_action.account_search": "Profiilit, jotka vastaavat hakua {x}",
|
||||
"search.quick_action.go_to_account": "Avaa profiili {x}",
|
||||
"search.quick_action.account_search": "Profiilit haulla {x}",
|
||||
"search.quick_action.go_to_account": "Siirry profiiliin {x}",
|
||||
"search.quick_action.go_to_hashtag": "Siirry aihetunnisteeseen {x}",
|
||||
"search.quick_action.open_url": "Avaa URL-osoite Mastodonissa",
|
||||
"search.quick_action.status_search": "Julkaisut haulla {x}",
|
||||
"search.search_or_paste": "Etsi tai kirjoita URL-osoite",
|
||||
"search.search_or_paste": "Hae tai kirjoita URL-osoite",
|
||||
"search_popout.full_text_search_disabled_message": "Ei saatavilla palvelimella {domain}.",
|
||||
"search_popout.language_code": "ISO-kielikoodi",
|
||||
"search_popout.options": "Haun asetukset",
|
||||
"search_popout.quick_actions": "Pikatoiminnot",
|
||||
"search_popout.recent": "Viime haut",
|
||||
"search_popout.recent": "Viimeaikaiset haut",
|
||||
"search_popout.specific_date": "tietty päivämäärä",
|
||||
"search_popout.user": "käyttäjä",
|
||||
"search_results.accounts": "Profiilit",
|
||||
|
@ -637,7 +637,7 @@
|
|||
"status.history.created": "{name} luotu {date}",
|
||||
"status.history.edited": "{name} muokkasi {date}",
|
||||
"status.load_more": "Lataa lisää",
|
||||
"status.media.open": "Napsauta avataksesi",
|
||||
"status.media.open": "Avaa napsauttamalla",
|
||||
"status.media.show": "Napsauta näyttääksesi",
|
||||
"status.media_hidden": "Media piilotettu",
|
||||
"status.mention": "Mainitse @{name}",
|
||||
|
@ -654,7 +654,7 @@
|
|||
"status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä julkaisua. Kun joku tekee niin, tulee hän tähän näkyviin.",
|
||||
"status.redraft": "Poista ja palauta muokattavaksi",
|
||||
"status.remove_bookmark": "Poista kirjanmerkki",
|
||||
"status.replied_to": "Vastattu {name}",
|
||||
"status.replied_to": "Vastaus käyttäjälle {name}",
|
||||
"status.reply": "Vastaa",
|
||||
"status.replyAll": "Vastaa ketjuun",
|
||||
"status.report": "Raportoi @{name}",
|
||||
|
@ -715,7 +715,7 @@
|
|||
"upload_modal.preview_label": "Esikatselu ({ratio})",
|
||||
"upload_progress.label": "Ladataan...",
|
||||
"upload_progress.processing": "Käsitellään…",
|
||||
"username.taken": "Käyttäjätunnus on jo varattu. Kokeile toista",
|
||||
"username.taken": "Käyttäjänimi on jo varattu. Kokeile toista",
|
||||
"video.close": "Sulje video",
|
||||
"video.download": "Lataa tiedosto",
|
||||
"video.exit_fullscreen": "Poistu koko näytön tilasta",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"about.domain_blocks.silenced.explanation": "San fharsaingeachd, chan fhaic thu pròifilean agus susbaint an fhrithealaiche seo ach ma nì thu lorg no ma tha thu ga leantainn.",
|
||||
"about.domain_blocks.silenced.title": "Cuingichte",
|
||||
"about.domain_blocks.suspended.explanation": "Cha dèid dàta sam bith on fhrithealaiche seo a phròiseasadh, a stòradh no iomlaid agus chan urrainn do na cleachdaichean on fhrithealaiche sin conaltradh no eadar-ghnìomh a ghabhail an-seo.",
|
||||
"about.domain_blocks.suspended.title": "’Na dhàil",
|
||||
"about.domain_blocks.suspended.title": "À rèim",
|
||||
"about.not_available": "Cha deach am fiosrachadh seo a sholar air an fhrithealaiche seo.",
|
||||
"about.powered_by": "Lìonra sòisealta sgaoilte le cumhachd {mastodon}",
|
||||
"about.rules": "Riaghailtean an fhrithealaiche",
|
||||
|
|
|
@ -340,7 +340,7 @@
|
|||
"errors.unexpected_crash.report_issue": "問題を報告",
|
||||
"explore.search_results": "検索結果",
|
||||
"explore.suggested_follows": "ユーザー",
|
||||
"explore.title": "エクスプローラー",
|
||||
"explore.title": "探索する",
|
||||
"explore.trending_links": "ニュース",
|
||||
"explore.trending_statuses": "投稿",
|
||||
"explore.trending_tags": "ハッシュタグ",
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
"account.unendorse": "Mostrar pas pel perfil",
|
||||
"account.unfollow": "Quitar de sègre",
|
||||
"account.unmute": "Quitar de rescondre @{name}",
|
||||
"account.unmute_notifications_short": "Restablir las notificacions",
|
||||
"account.unmute_short": "Tornar afichar",
|
||||
"account_note.placeholder": "Clicar per ajustar una nòta",
|
||||
"admin.dashboard.retention.average": "Mejana",
|
||||
|
@ -97,6 +98,8 @@
|
|||
"column.direct": "Mencions privadas",
|
||||
"column.directory": "Percórrer los perfils",
|
||||
"column.domain_blocks": "Domenis resconduts",
|
||||
"column.favourites": "Favorits",
|
||||
"column.firehose": "Tuts en dirèct",
|
||||
"column.follow_requests": "Demandas d’abonament",
|
||||
"column.home": "Acuèlh",
|
||||
"column.lists": "Listas",
|
||||
|
@ -117,6 +120,7 @@
|
|||
"community.column_settings.remote_only": "Sonque alonhat",
|
||||
"compose.language.change": "Cambiar de lenga",
|
||||
"compose.language.search": "Recercar de lengas...",
|
||||
"compose.published.body": "Tut publicat.",
|
||||
"compose.published.open": "Dobrir",
|
||||
"compose.saved.body": "Publicacion enregistrada.",
|
||||
"compose_form.direct_message_warning_learn_more": "Ne saber mai",
|
||||
|
@ -170,6 +174,7 @@
|
|||
"conversation.open": "Veire la conversacion",
|
||||
"conversation.with": "Amb {names}",
|
||||
"copypaste.copied": "Copiat",
|
||||
"copypaste.copy_to_clipboard": "Copiar al quichapapièr",
|
||||
"directory.federated": "Del fediverse conegut",
|
||||
"directory.local": "Solament de {domain}",
|
||||
"directory.new_arrivals": "Nòus-venguts",
|
||||
|
@ -220,6 +225,7 @@
|
|||
"errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs",
|
||||
"errors.unexpected_crash.report_issue": "Senhalar un problèma",
|
||||
"explore.search_results": "Resultats de recèrca",
|
||||
"explore.suggested_follows": "Personas",
|
||||
"explore.title": "Explorar",
|
||||
"explore.trending_links": "Novèlas",
|
||||
"explore.trending_statuses": "Publicacions",
|
||||
|
@ -234,6 +240,7 @@
|
|||
"filter_modal.select_filter.search": "Cercar o crear",
|
||||
"filter_modal.select_filter.title": "Filtrar aquesta publicacion",
|
||||
"filter_modal.title.status": "Filtrar una publicacion",
|
||||
"firehose.local": "Aqueste servidor",
|
||||
"follow_request.authorize": "Acceptar",
|
||||
"follow_request.reject": "Regetar",
|
||||
"follow_requests.unlocked_explanation": "Encara que vòstre compte siasque pas verrolhat, la còla de {domain} pensèt que volriatz benlèu repassar las demandas d’abonament d’aquestes comptes.",
|
||||
|
@ -257,12 +264,19 @@
|
|||
"hashtag.column_settings.tag_mode.any": "Un d’aquestes",
|
||||
"hashtag.column_settings.tag_mode.none": "Cap d’aquestes",
|
||||
"hashtag.column_settings.tag_toggle": "Inclure las etiquetas suplementàrias dins aquesta colomna",
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} tut} other {{counter} tuts}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} tut} other {{counter} tuts}} uèi",
|
||||
"hashtag.follow": "Sègre l’etiqueta",
|
||||
"hashtag.unfollow": "Quitar de sègre l’etiqueta",
|
||||
"hashtags.and_other": "…e {count, plural, one {}other {# de mai}}",
|
||||
"home.actions.go_to_explore": "Agachatz las tendéncias",
|
||||
"home.actions.go_to_suggestions": "Trobatz de monde de sègre",
|
||||
"home.column_settings.basic": "Basic",
|
||||
"home.column_settings.show_reblogs": "Mostrar los partatges",
|
||||
"home.column_settings.show_replies": "Mostrar las responsas",
|
||||
"home.hide_announcements": "Rescondre las anóncias",
|
||||
"home.pending_critical_update.link": "Veire las mesas a jorn",
|
||||
"home.show_announcements": "Mostrar las anóncias",
|
||||
"interaction_modal.on_another_server": "Sus un autre servidor",
|
||||
"interaction_modal.on_this_server": "Sus aqueste servidor",
|
||||
|
@ -332,14 +346,17 @@
|
|||
"mute_modal.hide_notifications": "Rescondre las notificacions d’aquesta persona ?",
|
||||
"mute_modal.indefinite": "Cap de data de fin",
|
||||
"navigation_bar.about": "A prepaus",
|
||||
"navigation_bar.advanced_interface": "Dobrir l’interfàcia web avançada",
|
||||
"navigation_bar.blocks": "Personas blocadas",
|
||||
"navigation_bar.bookmarks": "Marcadors",
|
||||
"navigation_bar.community_timeline": "Flux public local",
|
||||
"navigation_bar.compose": "Escriure un nòu tut",
|
||||
"navigation_bar.direct": "Mencions privadas",
|
||||
"navigation_bar.discover": "Trobar",
|
||||
"navigation_bar.domain_blocks": "Domenis resconduts",
|
||||
"navigation_bar.edit_profile": "Modificar lo perfil",
|
||||
"navigation_bar.explore": "Explorar",
|
||||
"navigation_bar.favourites": "Favorits",
|
||||
"navigation_bar.filters": "Mots ignorats",
|
||||
"navigation_bar.follow_requests": "Demandas d’abonament",
|
||||
"navigation_bar.followed_tags": "Etiquetas seguidas",
|
||||
|
@ -369,6 +386,7 @@
|
|||
"notifications.column_settings.admin.report": "Senhalaments novèls :",
|
||||
"notifications.column_settings.admin.sign_up": "Nòus inscrits :",
|
||||
"notifications.column_settings.alert": "Notificacions localas",
|
||||
"notifications.column_settings.favourite": "Favorits :",
|
||||
"notifications.column_settings.filter_bar.advanced": "Mostrar totas las categorias",
|
||||
"notifications.column_settings.filter_bar.category": "Barra de recèrca rapida",
|
||||
"notifications.column_settings.filter_bar.show_bar": "Afichar la barra de filtres",
|
||||
|
@ -386,6 +404,7 @@
|
|||
"notifications.column_settings.update": "Modificacions :",
|
||||
"notifications.filter.all": "Totas",
|
||||
"notifications.filter.boosts": "Partages",
|
||||
"notifications.filter.favourites": "Favorits",
|
||||
"notifications.filter.follows": "Seguiments",
|
||||
"notifications.filter.mentions": "Mencions",
|
||||
"notifications.filter.polls": "Resultats del sondatge",
|
||||
|
@ -399,15 +418,21 @@
|
|||
"notifications_permission_banner.enable": "Activar las notificacions burèu",
|
||||
"notifications_permission_banner.how_to_control": "Per recebre las notificacions de Mastodon quand es pas dobèrt, activatz las notificacions de burèu. Podètz precisar quin tipe de notificacion generarà una notificacion de burèu via lo boton {icon} dessús un còp activadas.",
|
||||
"notifications_permission_banner.title": "Manquetz pas jamai res",
|
||||
"onboarding.action.back": "Tornar en rèire",
|
||||
"onboarding.actions.back": "Tornar en rèire",
|
||||
"onboarding.actions.go_to_explore": "See what's trending",
|
||||
"onboarding.actions.go_to_home": "Go to your home feed",
|
||||
"onboarding.compose.template": "Adiu #Mastodon !",
|
||||
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
|
||||
"onboarding.follows.title": "Popular on Mastodon",
|
||||
"onboarding.share.title": "Partejar vòstre perfil",
|
||||
"onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
|
||||
"onboarding.start.skip": "Want to skip right ahead?",
|
||||
"onboarding.start.title": "Tot es prèst !",
|
||||
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
|
||||
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
|
||||
"onboarding.steps.publish_status.body": "Say hello to the world.",
|
||||
"onboarding.steps.publish_status.title": "Escrivètz vòstre primièr tut",
|
||||
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
|
||||
"onboarding.steps.setup_profile.title": "Customize your profile",
|
||||
"onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
|
||||
|
@ -415,6 +440,7 @@
|
|||
"picture_in_picture.restore": "Lo tornar",
|
||||
"poll.closed": "Tampat",
|
||||
"poll.refresh": "Actualizar",
|
||||
"poll.reveal": "Veire los resultats",
|
||||
"poll.total_people": "{count, plural, one {# persona} other {# personas}}",
|
||||
"poll.total_votes": "{count, plural, one {# vòte} other {# vòtes}}",
|
||||
"poll.vote": "Votar",
|
||||
|
@ -482,11 +508,17 @@
|
|||
"report_notification.open": "Dobrir lo senhalament",
|
||||
"search.placeholder": "Recercar",
|
||||
"search.search_or_paste": "Recercar o picar una URL",
|
||||
"search_popout.language_code": "Còdi ISO de lenga",
|
||||
"search_popout.options": "Opcions de recèrca",
|
||||
"search_popout.quick_actions": "Accions rapidas",
|
||||
"search_popout.recent": "Recèrcas recentas",
|
||||
"search_popout.specific_date": "data especifica",
|
||||
"search_popout.user": "utilizaire",
|
||||
"search_results.accounts": "Perfils",
|
||||
"search_results.all": "Tot",
|
||||
"search_results.hashtags": "Etiquetas",
|
||||
"search_results.nothing_found": "Cap de resultat per aquestes tèrmes de recèrca",
|
||||
"search_results.see_all": "O veire tot",
|
||||
"search_results.statuses": "Tuts",
|
||||
"search_results.title": "Recèrca : {q}",
|
||||
"server_banner.active_users": "utilizaires actius",
|
||||
|
@ -506,16 +538,20 @@
|
|||
"status.copy": "Copiar lo ligam de l’estatut",
|
||||
"status.delete": "Escafar",
|
||||
"status.detailed_status": "Vista detalhada de la convèrsa",
|
||||
"status.direct_indicator": "Mencion privada",
|
||||
"status.edit": "Modificar",
|
||||
"status.edited": "Modificat {date}",
|
||||
"status.edited_x_times": "Modificat {count, plural, un {{count} còp} other {{count} còps}}",
|
||||
"status.embed": "Embarcar",
|
||||
"status.favourite": "Apondre als favorits",
|
||||
"status.filter": "Filtrar aquesta publicacion",
|
||||
"status.filtered": "Filtrat",
|
||||
"status.hide": "Amagar la publicacion",
|
||||
"status.history.created": "{name} o creèt lo {date}",
|
||||
"status.history.edited": "{name} o modifiquèt lo {date}",
|
||||
"status.load_more": "Cargar mai",
|
||||
"status.media.open": "Clicar per dobrir",
|
||||
"status.media.show": "Clicar per mostar",
|
||||
"status.media_hidden": "Mèdia rescondut",
|
||||
"status.mention": "Mencionar",
|
||||
"status.more": "Mai",
|
||||
|
@ -546,6 +582,7 @@
|
|||
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
|
||||
"status.translate": "Traduire",
|
||||
"status.translated_from_with": "Traduch del {lang} amb {provider}",
|
||||
"status.uncached_media_warning": "Apercebut indisponible",
|
||||
"status.unmute_conversation": "Tornar mostrar la conversacion",
|
||||
"status.unpin": "Tirar del perfil",
|
||||
"subscribed_languages.lead": "Sonque las publicacions dins las lengas seleccionadas apreissaràn dins vòstre acuèlh e linha cronologica aprèp aqueste cambiament. Seleccionatz pas res per recebre las publicacions en quina lenga que siá.",
|
||||
|
|
|
@ -218,7 +218,10 @@
|
|||
"home.hide_announcements": "නිවේදන සඟවන්න",
|
||||
"home.pending_critical_update.link": "යාවත්කාල බලන්න",
|
||||
"home.show_announcements": "නිවේදන පෙන්වන්න",
|
||||
"interaction_modal.login.action": "මුලට ගෙනයන්න",
|
||||
"interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි",
|
||||
"interaction_modal.title.favourite": "{name}ගේ ලිපිය ප්රිය කරන්න",
|
||||
"interaction_modal.title.follow": "{name} අනුගමනය",
|
||||
"intervals.full.days": "{number, plural, one {දවස් #} other {දවස් #}}",
|
||||
"intervals.full.hours": "{number, plural, one {පැය #} other {පැය #}}",
|
||||
"intervals.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}}",
|
||||
|
@ -319,6 +322,7 @@
|
|||
"notifications.mark_as_read": "සියළු දැනුම්දීම් කියවූ බව යොදන්න",
|
||||
"notifications_permission_banner.enable": "වැඩතල දැනුම්දීම් සබල කරන්න",
|
||||
"notifications_permission_banner.title": "කිසිවක් අතපසු නොකරන්න",
|
||||
"onboarding.actions.go_to_explore": "නැගී එන දෑ වෙත ගෙනයන්න",
|
||||
"onboarding.compose.template": "ආයුබෝ #මාස්ටඩන්!",
|
||||
"onboarding.share.title": "ඔබගේ පැතිකඩ බෙදාගන්න",
|
||||
"onboarding.steps.publish_status.title": "පළමු ලිපිය පළ කරන්න",
|
||||
|
@ -358,6 +362,7 @@
|
|||
"report.categories.other": "වෙනත්",
|
||||
"report.categories.spam": "ආයාචිත",
|
||||
"report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ",
|
||||
"report.category.subtitle": "හොඳම ගැලපීම තෝරන්න",
|
||||
"report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න",
|
||||
"report.category.title_account": "පැතිකඩ",
|
||||
"report.category.title_status": "ලිපිය",
|
||||
|
@ -394,14 +399,25 @@
|
|||
"report_notification.categories.spam": "ආයාචිත",
|
||||
"report_notification.categories.violation": "නීතිය කඩ කිරීම",
|
||||
"report_notification.open": "විවෘත වාර්තාව",
|
||||
"search.no_recent_searches": "මෑත සෙවීම් නැත",
|
||||
"search.placeholder": "සොයන්න",
|
||||
"search.quick_action.account_search": "ගැළපෙන පැතිකඩ {x}",
|
||||
"search.quick_action.go_to_account": "{x} පැතිකඩ වෙත යන්න",
|
||||
"search.quick_action.open_url": "ලිපිනය මාස්ටඩන්හි අරින්න",
|
||||
"search.quick_action.status_search": "ගැළපෙන ලිපි {x}",
|
||||
"search.search_or_paste": "සොයන්න හෝ ඒ.ස.නි. අලවන්න",
|
||||
"search_popout.options": "සෙවුම් විකල්ප",
|
||||
"search_popout.quick_actions": "ඉක්මන් ක්රියාමාර්ග",
|
||||
"search_popout.recent": "මෑත සෙවීම්",
|
||||
"search_popout.specific_date": "නිශ්චිත දිනයකට",
|
||||
"search_popout.user": "පරිශ්රීලකයා",
|
||||
"search_results.accounts": "පැතිකඩ",
|
||||
"search_results.all": "සියල්ල",
|
||||
"search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය",
|
||||
"search_results.see_all": "සියල්ල බලන්න",
|
||||
"search_results.statuses": "ලිපි",
|
||||
"search_results.title": "{q} සොයන්න",
|
||||
"server_banner.active_users": "සක්රිය පරිශ්රීලකයින්",
|
||||
"server_banner.learn_more": "තව දැනගන්න",
|
||||
"sign_in_banner.create_account": "ගිණුමක් සාදන්න",
|
||||
"sign_in_banner.sign_in": "පිවිසෙන්න",
|
||||
|
|
|
@ -409,7 +409,7 @@
|
|||
"navigation_bar.favourites": "最愛",
|
||||
"navigation_bar.filters": "已靜音的關鍵字",
|
||||
"navigation_bar.follow_requests": "跟隨請求",
|
||||
"navigation_bar.followed_tags": "已跟隨的主題標籤",
|
||||
"navigation_bar.followed_tags": "已跟隨主題標籤",
|
||||
"navigation_bar.follows_and_followers": "跟隨中與跟隨者",
|
||||
"navigation_bar.lists": "列表",
|
||||
"navigation_bar.logout": "登出",
|
||||
|
|
|
@ -38,10 +38,10 @@ export default function antennaAdderReducer(state = initialState, action) {
|
|||
return state.setIn(['antennas', 'isLoading'], true);
|
||||
case ANTENNA_ADDER_ANTENNAS_FETCH_FAIL:
|
||||
case ANTENNA_ADDER_EXCLUDE_ANTENNAS_FETCH_FAIL:
|
||||
return state.setIn(['antennas', 'isLoading'], false);
|
||||
return state.setIn(['antennas', 'isLoading'], false);
|
||||
case ANTENNA_ADDER_ANTENNAS_FETCH_SUCCESS:
|
||||
case ANTENNA_ADDER_EXCLUDE_ANTENNAS_FETCH_SUCCESS:
|
||||
return state.update('antennas', antennas => antennas.withMutations(map => {
|
||||
return state.update('antennas', antennas => antennas.withMutations(map => {
|
||||
map.set('isLoading', false);
|
||||
map.set('loaded', true);
|
||||
map.set('items', ImmutableList(action.antennas.map(item => item.id)));
|
||||
|
|
|
@ -83,7 +83,7 @@ const prependToCircleStatusById = (state, circleId, statusId) => {
|
|||
map.updateIn(['statuses', 'items'], list => ImmutableOrderedSet([statusId]).union(list));
|
||||
}
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
export default function circles(state = initialState, action) {
|
||||
switch(action.type) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import './public-path';
|
||||
import main from "mastodon/main"
|
||||
import main from "mastodon/main";
|
||||
|
||||
import { start } from '../mastodon/common';
|
||||
import { loadLocale } from '../mastodon/locales';
|
||||
|
|
|
@ -38,7 +38,13 @@ class UpdateAccountService < BaseService
|
|||
end
|
||||
|
||||
def check_links(account)
|
||||
VerifyAccountLinksWorker.perform_async(account.id) if account.fields.any?(&:requires_verification?)
|
||||
return unless account.fields.any?(&:requires_verification?)
|
||||
|
||||
if account.local?
|
||||
VerifyAccountLinksWorker.perform_async(account.id)
|
||||
else
|
||||
VerifyAccountLinksWorker.perform_in(rand(10.minutes.to_i), account.id)
|
||||
end
|
||||
end
|
||||
|
||||
def process_hashtags(account)
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
= form_tag preview_admin_report_actions_path(@report), method: :post do
|
||||
= form_tag preview_admin_report_actions_path(report), method: :post do
|
||||
.report-actions
|
||||
.report-actions__item
|
||||
.report-actions__item__button
|
||||
= link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(@report), method: :post, class: 'button'
|
||||
= link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(report), method: :post, class: 'button'
|
||||
.report-actions__item__description
|
||||
= t('admin.reports.actions.resolve_description_html')
|
||||
- if @statuses.any? { |status| (status.with_media? || status.with_preview_card?) && !status.discarded? }
|
||||
- if statuses.any? { |status| (status.with_media? || status.with_preview_card?) && !status.discarded? }
|
||||
.report-actions__item
|
||||
.report-actions__item__button
|
||||
= button_tag t('admin.reports.mark_as_sensitive'), name: :mark_as_sensitive, class: 'button'
|
||||
|
@ -33,6 +33,6 @@
|
|||
= t('admin.reports.actions.suspend_description_html')
|
||||
.report-actions__item
|
||||
.report-actions__item__button
|
||||
= link_to t('admin.accounts.custom'), new_admin_account_action_path(@report.target_account_id, report_id: @report.id), class: 'button'
|
||||
= link_to t('admin.accounts.custom'), new_admin_account_action_path(report.target_account_id, report_id: report.id), class: 'button'
|
||||
.report-actions__item__description
|
||||
= t('admin.reports.actions.other_description_html')
|
||||
|
|
|
@ -179,7 +179,7 @@
|
|||
|
||||
%p#actions= t(@report.target_account.local? ? 'admin.reports.actions_description_html' : 'admin.reports.actions_description_remote_html')
|
||||
|
||||
= render partial: 'admin/reports/actions'
|
||||
= render partial: 'admin/reports/actions', locals: { report: @report, statuses: @statuses }
|
||||
|
||||
- unless @action_logs.empty?
|
||||
%hr.spacer/
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
- if !@user.confirmed?
|
||||
- if !user.confirmed?
|
||||
.flash-message.warning
|
||||
= t('auth.status.confirming')
|
||||
= link_to t('auth.didnt_get_confirmation'), new_user_confirmation_path
|
||||
- elsif !@user.approved?
|
||||
- elsif !user.approved?
|
||||
.flash-message.warning
|
||||
= t('auth.status.pending')
|
||||
- elsif @user.account.moved_to_account_id.present?
|
||||
- elsif user.account.moved_to_account_id.present?
|
||||
.flash-message.warning
|
||||
= t('auth.status.redirecting_to', acct: @user.account.moved_to_account.pretty_acct)
|
||||
= t('auth.status.redirecting_to', acct: user.account.moved_to_account.pretty_acct)
|
||||
= link_to t('migrations.cancel'), settings_migration_path
|
||||
|
||||
%h3= t('auth.status.account_status')
|
||||
|
||||
%p.hint
|
||||
- if @user.account.suspended?
|
||||
- if user.account.suspended?
|
||||
%span.negative-hint= t('user_mailer.warning.explanation.suspend')
|
||||
- elsif @user.disabled?
|
||||
- elsif user.disabled?
|
||||
%span.negative-hint= t('user_mailer.warning.explanation.disable')
|
||||
- elsif @user.account.silenced?
|
||||
- elsif user.account.silenced?
|
||||
%span.warning-hint= t('user_mailer.warning.explanation.silence')
|
||||
- else
|
||||
%span.positive-hint= t('auth.status.functional')
|
||||
|
||||
= render partial: 'account_warning', collection: @strikes
|
||||
= render partial: 'account_warning', collection: strikes
|
||||
|
||||
- if @user.account.strikes.exists?
|
||||
- if user.account.strikes.exists?
|
||||
%hr.spacer/
|
||||
|
||||
%p.muted-hint
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
- content_for :page_title do
|
||||
= t('settings.account_settings')
|
||||
|
||||
= render 'status'
|
||||
= render partial: 'status', locals: { user: @user, strikes: @strikes }
|
||||
|
||||
%h3= t('auth.security')
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
= javascript_pack_tag 'two_factor_authentication', crossorigin: 'anonymous'
|
||||
|
||||
- if @webauthn_enabled
|
||||
- if webauthn_enabled?
|
||||
= render partial: 'auth/sessions/two_factor/webauthn_form', locals: { hidden: @scheme_type != 'webauthn' }
|
||||
|
||||
= render partial: 'auth/sessions/two_factor/otp_authentication_form', locals: { hidden: @scheme_type != 'totp' }
|
||||
|
|
|
@ -13,6 +13,6 @@
|
|||
- if Setting.site_contact_email.present?
|
||||
%p.hint.subtle-hint= t('users.otp_lost_help_html', email: mail_to(Setting.site_contact_email, nil))
|
||||
|
||||
- if @webauthn_enabled
|
||||
- if webauthn_enabled?
|
||||
.form-footer
|
||||
= link_to(t('auth.link_to_webauth'), '#', id: 'link-to-webauthn')
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
%tbody
|
||||
%tr
|
||||
%td.accounts-table__interrelationships
|
||||
= interrelationships_icon(@relationships, account.id)
|
||||
= interrelationships_icon(relationships, account.id)
|
||||
%td= account_link_to account
|
||||
%td.accounts-table__count.optional
|
||||
= friendly_number_to_human account.statuses_count
|
||||
|
|
|
@ -53,6 +53,6 @@
|
|||
- if @accounts.empty?
|
||||
= nothing_here 'nothing-here--under-tabs'
|
||||
- else
|
||||
= render partial: 'account', collection: @accounts, locals: { f: f }
|
||||
= render partial: 'account', collection: @accounts, locals: { f: f, relationships: @relationships }
|
||||
|
||||
= paginate @accounts
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue