Release Wondering wapiti (#231)

* [FIX] the reply content type is missing (#214)

* [ADD] Custom emoji installation documentation  (#213)

* [CH] Move custom emoji doc in customization doc

* Revert "[CH] Disable server statuses streaming when on small devices as it can disturb user navigation (#128)"

This reverts commit 4a1515472b as it causes issues on home timeline

* [ADD] Add option to disable quote RT (#220)

* [FIX] Fix double message entry when no chats (#221)

* [CH] Remove settings password options when using ldap (#222)

* [ADD] Add an icon to describe privacy (#223)

* [FIX] Fix wrong default privacy after first compose modal (#229)

* [FIX] Fix Quoted status CW not being forwarded nor hidden (#230)

* Fix i18n issues

* bump version

---------

Co-authored-by: SevicheCC <91365763+Sevichecc@users.noreply.github.com>
Co-authored-by: нездалисько <105280814+uandreew@users.noreply.github.com>
Co-authored-by: clovis <clovis@synapse-medicine.com>
This commit is contained in:
Clovis 2023-06-25 20:30:43 +02:00 committed by GitHub
parent a684ec9e32
commit 9cf92b9ed4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
84 changed files with 323 additions and 160 deletions

View file

@ -53,11 +53,15 @@ const SidebarNavigation = () => {
});
}
menu.push({
to: '/messages',
text: intl.formatMessage(messages.direct),
icon: require('@tabler/icons/mail.svg'),
});
// we only want to add this option is it's not already shown
// so only when chats are supported
if (features.chats) {
menu.push({
to: '/messages',
text: intl.formatMessage(messages.direct),
icon: require('@tabler/icons/mail.svg'),
});
}
if (features.bookmarks) {
menu.push({
@ -75,7 +79,7 @@ const SidebarNavigation = () => {
});
}
if(features.profileDirectory) {
if (features.profileDirectory) {
menu.push({
to: '/directory',
text: intl.formatMessage(messages.directory),
@ -131,7 +135,7 @@ const SidebarNavigation = () => {
<SidebarNavigationLink
to='/messages'
icon={require('@tabler/icons/mail.svg')}
text={<FormattedMessage id='navigation.direct_messages' defaultMessage='Messages' />}
text={<FormattedMessage id='column.direct' defaultMessage='Direct messages' />}
/>
);
}

View file

@ -1,6 +1,6 @@
import classNames from 'classnames';
import { List as ImmutableList } from 'immutable';
import React from 'react';
import React, { useMemo } from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import { useHistory } from 'react-router-dom';
@ -109,6 +109,8 @@ const StatusActionBar: React.FC<IStatusActionBar> = ({
const isStaff = account ? account.staff : false;
const isAdmin = account ? account.admin : false;
const quotePosts = useMemo(() => features.quotePosts && soapboxConfig.quotePosts, [features, soapboxConfig]);
if (!status) {
return null;
}
@ -601,7 +603,7 @@ const StatusActionBar: React.FC<IStatusActionBar> = ({
text={withLabels ? intl.formatMessage(messages.reply) : undefined}
/>
{(features.quotePosts && me) ? (
{(quotePosts && me) ? (
<DropdownMenuContainer
items={reblogMenu}
disabled={!publicStatus}

View file

@ -11,7 +11,7 @@ import { toggleStatusHidden } from 'soapbox/actions/statuses';
import Icon from 'soapbox/components/icon';
import AccountContainer from 'soapbox/containers/account_container';
import QuotedStatus from 'soapbox/features/status/containers/quoted_status_container';
import { useAppDispatch, useSettings } from 'soapbox/hooks';
import { useAppDispatch, useSettings, useLogo } from 'soapbox/hooks';
import { defaultMediaVisibility, textForScreenReader, getActualStatus } from 'soapbox/utils/status';
import StatusActionBar from './status-action-bar';
@ -79,6 +79,8 @@ const Status: React.FC<IStatus> = (props) => {
const actualStatus = getActualStatus(status);
const logo = useLogo();
// Track height changes we know about to compensate scrolling.
useEffect(() => {
didShowCard.current = Boolean(!muted && !hidden && status?.card);
@ -207,61 +209,6 @@ const Status: React.FC<IStatus> = (props) => {
);
}
if (status.reblog && typeof status.reblog === 'object') {
const displayNameHtml = { __html: String(status.getIn(['account', 'display_name_html'])) };
reblogElement = (
<NavLink
to={`/@${status.getIn(['account', 'acct'])}`}
onClick={(event) => event.stopPropagation()}
className='hidden sm:flex items-center text-gray-700 dark:text-gray-600 text-xs font-medium space-x-1 hover:underline'
>
<Icon src={require('@tabler/icons/repeat.svg')} className='text-green-600' />
<HStack alignItems='center'>
<FormattedMessage
id='status.reblogged_by'
defaultMessage='{name} reposted'
values={{
name: <bdi className='max-w-[100px] truncate pr-1'>
<strong className='text-gray-800 dark:text-gray-200' dangerouslySetInnerHTML={displayNameHtml} />
</bdi>,
}}
/>
</HStack>
</NavLink>
);
reblogElementMobile = (
<div className='pb-5 -mt-2 sm:hidden truncate'>
<NavLink
to={`/@${status.getIn(['account', 'acct'])}`}
onClick={(event) => event.stopPropagation()}
className='flex items-center text-gray-700 dark:text-gray-600 text-xs font-medium space-x-1 hover:underline'
>
<Icon src={require('@tabler/icons/repeat.svg')} className='text-green-600' />
<span>
<FormattedMessage
id='status.reblogged_by'
defaultMessage='{name} reposted'
values={{
name: <bdi>
<strong className='text-gray-800 dark:text-gray-200' dangerouslySetInnerHTML={displayNameHtml} />
</bdi>,
}}
/>
</span>
</NavLink>
</div>
);
rebloggedByText = intl.formatMessage(
messages.reblogged_by,
{ name: String(status.getIn(['account', 'acct'])) },
);
}
let quote;
if (actualStatus.quote) {
@ -299,7 +246,10 @@ const Status: React.FC<IStatus> = (props) => {
className={classNames('status cursor-pointer', { focusable })}
tabIndex={focusable && !muted ? 0 : undefined}
data-featured={featured ? 'true' : null}
aria-label={textForScreenReader(intl, actualStatus, rebloggedByText)}
aria-label={textForScreenReader(intl, actualStatus, intl.formatMessage(
messages.reblogged_by,
{ name: String(status.getIn(['account', 'acct'])) },
))}
ref={node}
onClick={() => history.push(statusUrl)}
role='link'
@ -324,22 +274,61 @@ const Status: React.FC<IStatus> = (props) => {
})}
data-id={status.id}
>
{reblogElementMobile}
<div className='mb-4'>
<AccountContainer
key={String(actualStatus.getIn(['account', 'id']))}
id={String(actualStatus.getIn(['account', 'id']))}
timestamp={actualStatus.created_at}
timestampUrl={statusUrl}
action={reblogElement}
hideActions={!reblogElement}
showEdit={!!actualStatus.edited_at}
showProfileHoverCard={hoverable}
withLinkToProfile={hoverable}
/>
<div className='flex mb-3'>
<div className='grow'>
{
status.reblog && typeof status.reblog === 'object' && (
<NavLink
to={`/@${status.getIn(['account', 'acct'])}`}
onClick={(event) => event.stopPropagation()}
className='flex items-center mb-3 text-gray-700 dark:text-gray-600 text-xs font-medium space-x-1 hover:underline'
>
<Icon src={require('@tabler/icons/repeat.svg')} className='text-green-600' />
<HStack alignItems='center'>
<FormattedMessage
id='status.reblogged_by'
defaultMessage='{name} reposted'
values={{
name: <bdi className='max-w-[100px] truncate pr-1'>
<strong className='text-gray-800 dark:text-gray-200' dangerouslySetInnerHTML={{ __html: String(status.getIn(['account', 'display_name_html'])) }} />
</bdi>,
}}
/>
</HStack>
</NavLink>
)
}
<AccountContainer
key={String(actualStatus.getIn(['account', 'id']))}
id={String(actualStatus.getIn(['account', 'id']))}
timestamp={actualStatus.created_at}
timestampUrl={statusUrl}
hideActions
showEdit={!!actualStatus.edited_at}
showProfileHoverCard={hoverable}
withLinkToProfile={hoverable}
/>
</div>
{
actualStatus.visibility === 'public' && <Icon aria-hidden src={require('@tabler/icons/world.svg')} className='h-5 w-5 shrink-0 text-gray-400 dark:text-gray-600' />
}
{
actualStatus.visibility === 'unlisted' && <Icon aria-hidden src={require('@tabler/icons/eye-off.svg')} className='h-5 w-5 shrink-0 text-gray-400 dark:text-gray-600' />
}
{
actualStatus.visibility === 'local' && <Icon aria-hidden src={logo} className='h-5 w-5 shrink-0 text-gray-400 dark:text-gray-600' />
}
{
actualStatus.visibility === 'private' && <Icon aria-hidden src={require('@tabler/icons/lock.svg')} className='h-5 w-5 shrink-0 text-gray-400 dark:text-gray-600' />
}
{
actualStatus.visibility === 'direct' && <Icon aria-hidden src={require('@tabler/icons/mail.svg')} className='h-5 w-5 shrink-0 text-gray-400 dark:text-gray-600' />
}
</div>
<div className='status__content-wrapper'>
{!group && actualStatus.group && (
<div className='status__meta'>
@ -368,7 +357,7 @@ const Status: React.FC<IStatus> = (props) => {
onToggleVisibility={handleToggleMediaVisibility}
/>
{quote}
{!actualStatus.hidden && quote}
{!hideActionBar && (
<div className='pt-4'>

View file

@ -6,10 +6,11 @@ import { expandCommunityTimeline } from 'soapbox/actions/timelines';
import PullToRefresh from 'soapbox/components/pull-to-refresh';
import { Column } from 'soapbox/components/ui';
import { useAppDispatch, useSettings } from 'soapbox/hooks';
import { isMobile } from 'soapbox/is_mobile';
import Timeline from '../ui/components/timeline';
import ColumnSettings from './containers/column_settings_container';
const messages = defineMessages({
title: { id: 'column.community', defaultMessage: 'Local timeline' },
});
@ -33,13 +34,11 @@ const CommunityTimeline = () => {
useEffect(() => {
dispatch(expandCommunityTimeline({ onlyMedia } as any));
if (!isMobile(window.innerWidth)) {
const disconnect = dispatch(connectCommunityStream({ onlyMedia } as any));
const disconnect = dispatch(connectCommunityStream({ onlyMedia } as any));
return () => {
disconnect();
};
}
return () => {
disconnect();
};
}, [onlyMedia]);
return (

View file

@ -12,6 +12,7 @@ import AutosuggestInput from 'soapbox/components/autosuggest_input';
import AutosuggestTextarea from 'soapbox/components/autosuggest_textarea';
import Icon from 'soapbox/components/icon';
import { Button, Stack } from 'soapbox/components/ui';
import SvgIcon from 'soapbox/components/ui/icon/svg-icon';
import { isMobile } from 'soapbox/is_mobile';
import EmojiPickerDropdown from '../../../containers/emoji_picker_dropdown_container';
@ -31,6 +32,8 @@ import UploadButtonContainer from '../containers/upload_button_container';
import WarningContainer from '../containers/warning_container';
import { countableText } from '../util/counter';
import TextCharacterCounter from './text_character_counter';
import VisualCharacterCounter from './visual_character_counter';
@ -45,8 +48,10 @@ const messages = defineMessages({
message: { id: 'compose_form.message', defaultMessage: 'Message' },
schedule: { id: 'compose_form.schedule', defaultMessage: 'Schedule' },
saveChanges: { id: 'compose_form.save_changes', defaultMessage: 'Save changes' },
marked: { id: 'compose_form.spoiler.marked', defaultMessage: 'Text is hidden behind warning' },
});
export default @withRouter
class ComposeForm extends ImmutablePureComponent {
@ -85,10 +90,12 @@ class ComposeForm extends ImmutablePureComponent {
clickableAreaRef: PropTypes.object,
scheduledAt: PropTypes.instanceOf(Date),
features: PropTypes.object.isRequired,
spoilerForced: PropTypes.bool,
};
static defaultProps = {
showSearch: false,
spoilerForced: false,
};
handleChange = (e) => {
@ -256,7 +263,7 @@ class ComposeForm extends ImmutablePureComponent {
}
render() {
const { intl, onPaste, showSearch, anyMedia, shouldCondense, autoFocus, isModalOpen, maxTootChars, scheduledStatusCount, features } = this.props;
const { intl, onPaste, showSearch, anyMedia, shouldCondense, autoFocus, isModalOpen, maxTootChars, scheduledStatusCount, features, spoilerForced } = this.props;
const condensed = shouldCondense && !this.state.composeFocused && this.isEmpty() && !this.props.isUploading;
const disabled = this.props.isSubmitting;
const text = [this.props.spoilerText, countableText(this.props.text)].join('');
@ -327,7 +334,7 @@ class ComposeForm extends ImmutablePureComponent {
value={this.props.spoilerText}
onChange={this.handleChangeSpoilerText}
onKeyDown={this.handleKeyDown}
disabled={!this.props.spoiler}
disabled={this.props.spoilerForced || !this.props.spoiler}
ref={this.setSpoilerText}
suggestions={this.props.suggestions}
onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}
@ -380,7 +387,13 @@ class ComposeForm extends ImmutablePureComponent {
{features.polls && <PollButtonContainer />}
{features.privacyScopes && <PrivacyDropdownContainer />}
{features.scheduledStatuses && <ScheduleButtonContainer />}
{features.spoilers && <SpoilerButtonContainer />}
{features.spoilers && (
spoilerForced ? <SvgIcon
className={classNames('cursor-not-allowed text-primary-600 hover:text-primary-500 dark:text-primary-400 dark:hover:text-primary-300')}
src={require('@tabler/icons/alert-triangle.svg')}
title={intl.formatMessage(messages.marked)}
/> : <SpoilerButtonContainer />
)}
{features.richText && <MarkdownButtonContainer />}
</div>

View file

@ -166,7 +166,7 @@ const PrivacyDropdown: React.FC<IPrivacyDropdown> = ({
const options = [
{ icon: require('@tabler/icons/world.svg'), value: 'public', text: intl.formatMessage(messages.public_short), meta: intl.formatMessage(messages.public_long) },
{ icon: require('@tabler/icons/lock-open.svg'), value: 'unlisted', text: intl.formatMessage(messages.unlisted_short), meta: intl.formatMessage(messages.unlisted_long) },
{ icon: require('@tabler/icons/eye-off.svg'), value: 'unlisted', text: intl.formatMessage(messages.unlisted_short), meta: intl.formatMessage(messages.unlisted_long) },
...(features.localOnlyPrivacy ? [{ icon: logo, value: 'local', text: intl.formatMessage(messages.local_short), meta: intl.formatMessage(messages.local_long) }] : []),
{ icon: require('@tabler/icons/lock.svg'), value: 'private', text: intl.formatMessage(messages.private_short), meta: intl.formatMessage(messages.private_long) },
{ icon: require('@tabler/icons/mail.svg'), value: 'direct', text: intl.formatMessage(messages.direct_short), meta: intl.formatMessage(messages.direct_long) },

View file

@ -13,6 +13,7 @@ import {
} from 'soapbox/actions/compose';
import { getFeatures } from 'soapbox/utils/features';
import ComposeForm from '../components/compose_form';
const mapStateToProps = state => {
@ -23,6 +24,7 @@ const mapStateToProps = state => {
suggestions: state.getIn(['compose', 'suggestions']),
spoiler: state.getIn(['compose', 'spoiler']),
spoilerText: state.getIn(['compose', 'spoiler_text']),
spoilerForced: state.getIn(['compose', 'spoiler_forced']),
privacy: state.getIn(['compose', 'privacy']),
focusDate: state.getIn(['compose', 'focusDate']),
caretPosition: state.getIn(['compose', 'caretPosition']),

View file

@ -1,4 +1,4 @@
import React, { useEffect } from 'react';
import React, { useEffect, useRef } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Link } from 'react-router-dom';
@ -21,6 +21,9 @@ const HomeTimeline: React.FC = () => {
const dispatch = useAppDispatch();
const features = useFeatures();
const polling = useRef<NodeJS.Timer | null>(null);
const isPartial = useAppSelector(state => state.timelines.get('home')?.isPartial === true);
const currentAccountId = useAppSelector(state => state.timelines.get('home')?.feedAccountId as string | undefined);
const siteTitle = useAppSelector(state => state.instance.title);
const currentAccountRelationship = useAppSelector(state => currentAccountId ? state.relationships.get(currentAccountId) : null);
@ -29,10 +32,37 @@ const HomeTimeline: React.FC = () => {
dispatch(expandHomeTimeline({ maxId, accountId: currentAccountId }));
};
// Mastodon generates the feed in Redis, and can return a partial timeline
// (HTTP 206) for new users. Poll until we get a full page of results.
const checkIfReloadNeeded = () => {
if (isPartial) {
polling.current = setInterval(() => {
dispatch(expandHomeTimeline());
}, 3000);
} else {
stopPolling();
}
};
const stopPolling = () => {
if (polling.current) {
clearInterval(polling.current);
polling.current = null;
}
};
const handleRefresh = () => {
return dispatch(expandHomeTimeline({ maxId: null, accountId: currentAccountId }));
};
useEffect(() => {
checkIfReloadNeeded();
return () => {
stopPolling();
};
}, [isPartial]);
useEffect(() => {
// Check to see if we still follow the user that is selected in the Feed Carousel.
if (currentAccountId) {

View file

@ -31,7 +31,7 @@ const Privacy = ({ onNext } : { onNext : () => void}) => {
</div>
<div className='flex-grow-1 w-1/2'>
<h4 className='items-center text-xl font-bold'>
<Icon className='inline-block text-primary-500 align-middle mr-1 w-6 h-6' src={require('@tabler/icons/lock-open.svg')} />
<Icon className='inline-block text-primary-500 align-middle mr-1 w-6 h-6' src={require('@tabler/icons/eye-off.svg')} />
<span className='align-middle'>
<FormattedMessage id='onboarding.privacy.unlisted-title' defaultMessage='Unlisted' />
</span>

View file

@ -8,7 +8,6 @@ import { expandPublicTimeline, expandBubbleTimeline } from 'soapbox/actions/time
import PullToRefresh from 'soapbox/components/pull-to-refresh';
import { Button, Column, Text } from 'soapbox/components/ui';
import { useAppDispatch, useAppSelector, useSettings, useFeatures, useOwnAccount } from 'soapbox/hooks';
import { isMobile } from 'soapbox/is_mobile';
import PinnedHostsPicker from '../remote_timeline/components/pinned_hosts_picker';
import Timeline from '../ui/components/timeline';
@ -40,7 +39,7 @@ const CommunityTimeline = () => {
}, [dispatch]);
const handleLoadMore = React.useCallback((maxId: string) => {
if (!bubbleTimeline) {
if(!bubbleTimeline) {
dispatch(expandPublicTimeline({ maxId, onlyMedia }));
} else {
dispatch(expandBubbleTimeline({ maxId, onlyMedia }));
@ -48,7 +47,7 @@ const CommunityTimeline = () => {
}, [bubbleTimeline, dispatch, onlyMedia]);
const handleRefresh = React.useCallback(() => {
if (!bubbleTimeline) {
if(!bubbleTimeline) {
return dispatch(expandPublicTimeline({ onlyMedia } as any));
} else {
return dispatch(expandBubbleTimeline({ onlyMedia } as any));
@ -56,15 +55,13 @@ const CommunityTimeline = () => {
}, [bubbleTimeline, dispatch, onlyMedia]);
useEffect(() => {
if (!bubbleTimeline) {
if(!bubbleTimeline) {
dispatch(expandPublicTimeline({ onlyMedia } as any));
if (!isMobile(window.innerWidth)) {
const disconnect = dispatch(connectPublicStream({ onlyMedia }));
const disconnect = dispatch(connectPublicStream({ onlyMedia }));
return () => {
disconnect();
};
}
return () => {
disconnect();
};
} else {
dispatch(expandBubbleTimeline({ onlyMedia } as any));
// bubble timeline doesnt have streaming for now
@ -75,37 +72,37 @@ const CommunityTimeline = () => {
<Column label={intl.formatMessage(messages.title)} transparent withHeader={false}>
<PinnedHostsPicker />
{showExplanationBox && <div className='mb-4'>
<Text size='lg' weight='bold' className='mb-2'>
<FormattedMessage id='fediverse_tab.explanation_box.title' defaultMessage='What is the Fediverse?' />
</Text>
<FormattedMessage
id='fediverse_tab.explanation_box.explanation'
defaultMessage='{site_title} is part of the Fediverse, a social network made up of thousands of independent social media sites (aka "servers"). The posts you see here are from 3rd-party servers. You have the freedom to engage with them, or to block any server you don&apos;t like. Pay attention to the full username after the second @ symbol to know which server a post is from. To see only {site_title} posts, visit {local}.'
values={{
site_title: siteTitle,
local: (
<Link to='/timeline/local'>
<FormattedMessage
id='empty_column.home.local_tab'
defaultMessage='the {site_title} tab'
values={{ site_title: siteTitle }}
/>
</Link>
),
}}
/>
{
bubbleTimeline && (
<p className='mt-2'>
<FormattedMessage id='fediverse_tab.explanation_box.bubble' defaultMessage='This timeline shows you all the statuses published on a selection of other instances curated by your moderators.' />
</p>
)
}
<div className='text-right'>
<Button theme='link' onClick={dismissExplanationBox}>
<FormattedMessage id='fediverse_tab.explanation_box.dismiss' defaultMessage="Don\'t show again" />
</Button>
</div>
<Text size="lg" weight="bold" className="mb-2">
<FormattedMessage id='fediverse_tab.explanation_box.title' defaultMessage='What is the Fediverse?' />
</Text>
<FormattedMessage
id='fediverse_tab.explanation_box.explanation'
defaultMessage='{site_title} is part of the Fediverse, a social network made up of thousands of independent social media sites (aka "servers"). The posts you see here are from 3rd-party servers. You have the freedom to engage with them, or to block any server you don&apos;t like. Pay attention to the full username after the second @ symbol to know which server a post is from. To see only {site_title} posts, visit {local}.'
values={{
site_title: siteTitle,
local: (
<Link to='/timeline/local'>
<FormattedMessage
id='empty_column.home.local_tab'
defaultMessage='the {site_title} tab'
values={{ site_title: siteTitle }}
/>
</Link>
),
}}
/>
{
bubbleTimeline && (
<p className='mt-2'>
<FormattedMessage id='fediverse_tab.explanation_box.bubble' defaultMessage='This timeline shows you all the statuses published on a selection of other instances curated by your moderators.' />
</p>
)
}
<div className="text-right">
<Button theme="link" onClick={dismissExplanationBox}>
<FormattedMessage id='fediverse_tab.explanation_box.dismiss' defaultMessage="Don\'t show again" />
</Button>
</div>
</div>}
<PullToRefresh onRefresh={handleRefresh}>
<Timeline

View file

@ -7,6 +7,7 @@ import { fetchMfa } from 'soapbox/actions/mfa';
import List, { ListItem } from 'soapbox/components/list';
import { Card, CardBody, CardHeader, CardTitle, Column } from 'soapbox/components/ui';
import { useAppSelector, useOwnAccount } from 'soapbox/hooks';
import { ConfigDB } from 'soapbox/utils/config_db';
import { getFeatures } from 'soapbox/utils/features';
import Preferences from '../preferences';
@ -41,6 +42,7 @@ const Settings = () => {
const intl = useIntl();
const mfa = useAppSelector((state) => state.security.get('mfa'));
const configuration = useAppSelector((state) => state.admin.get('configs'));
const features = useAppSelector((state) => getFeatures(state.instance));
const account = useOwnAccount();
@ -59,6 +61,7 @@ const Settings = () => {
const navigateToFilters = () => history.push('/filters');
const isMfaEnabled = mfa.getIn(['settings', 'totp']);
const isLdapEnabled = React.useMemo(() => ConfigDB.find(configuration, ':pleroma', ':ldap')?.get('value').find((e) => e.get('tuple').get(0) === ':enabled')?.getIn(['tuple', 1]), [configuration]);
useEffect(() => {
dispatch(fetchMfa());
@ -111,7 +114,11 @@ const Settings = () => {
{features.security && (
<>
<ListItem label={intl.formatMessage(messages.changeEmail)} onClick={navigateToChangeEmail} />
<ListItem label={intl.formatMessage(messages.changePassword)} onClick={navigateToChangePassword} />
{
!isLdapEnabled && (
<ListItem label={intl.formatMessage(messages.changePassword)} onClick={navigateToChangePassword} />
)
}
<ListItem label={intl.formatMessage(messages.configureMfa)} onClick={navigateToMfa}>
{isMfaEnabled ?
intl.formatMessage(messages.mfaEnabled) :

View file

@ -44,6 +44,7 @@ const messages = defineMessages({
verifiedCanEditNameLabel: { id: 'soapbox_config.verified_can_edit_name_label', defaultMessage: 'Allow verified users to edit their own display name.' },
displayFqnLabel: { id: 'soapbox_config.display_fqn_label', defaultMessage: 'Display domain (eg @user@domain) for local accounts.' },
greentextLabel: { id: 'soapbox_config.greentext_label', defaultMessage: 'Enable greentext support' },
quoteRT: { id: 'soapbox_config.quote_rt', defaultMessage: 'Enable Quote RT' },
promoPanelIconsLink: { id: 'soapbox_config.hints.promo_panel_icons.link', defaultMessage: 'Soapbox Icons List' },
authenticatedProfileLabel: { id: 'soapbox_config.authenticated_profile_label', defaultMessage: 'Profiles require authentication' },
authenticatedProfileHint: { id: 'soapbox_config.authenticated_profile_hint', defaultMessage: 'Users must be logged-in to view replies and media on user profiles.' },
@ -262,6 +263,13 @@ const SoapboxConfig: React.FC = () => {
/>
</ListItem>
<ListItem label={intl.formatMessage(messages.quoteRT)}>
<Toggle
checked={soapbox.quotePosts === true}
onChange={handleChange(['quotePosts'], (e) => e.target.checked)}
/>
</ListItem>
<ListItem
label={intl.formatMessage(messages.authenticatedProfileLabel)}
hint={intl.formatMessage(messages.authenticatedProfileHint)}

View file

@ -116,9 +116,7 @@ const ProfileDropdown: React.FC<IProfileDropdown> = ({ account, children }) => {
{menuItem.toggle}
</div>
);
} else if (!menuItem.text) {
return <MenuDivider key={idx} />;
} else {
} else if (menuItem.text) {
const Comp: any = menuItem.action ? MenuItem : MenuLink;
const itemProps = menuItem.action ? { onSelect: menuItem.action } : { to: menuItem.to, as: Link };

View file

@ -35,6 +35,7 @@ import HomePage from 'soapbox/pages/home_page';
import ProfilePage from 'soapbox/pages/profile_page';
import StatusPage from 'soapbox/pages/status_page';
import { getAccessToken, getVapidKey } from 'soapbox/utils/auth';
import { ConfigDB } from 'soapbox/utils/config_db';
import { isStandalone } from 'soapbox/utils/state';
// import GroupSidebarPanel from '../groups/sidebar_panel';
@ -116,6 +117,7 @@ import {
} from './util/async-components';
import { WrappedRoute } from './util/react_router_helpers';
// Dummy import, to make sure that <Status /> ends up in the application bundle.
// Without this it ends up in ~8 very commonly used bundles.
import 'soapbox/components/status';
@ -161,6 +163,8 @@ const SwitchingColumnsArea: React.FC = ({ children }) => {
const features = useFeatures();
const { search } = useLocation();
const configuration = useAppSelector((state) => state.admin.get('configs'));
const isLdapEnabled = React.useMemo(() => ConfigDB.find(configuration, ':pleroma', ':ldap')?.get('value').find((e) => e.get('tuple').get(0) === ':enabled')?.getIn(['tuple', 1]), [configuration]);
const { authenticatedProfile, cryptoAddresses } = useSoapboxConfig();
const hasCrypto = cryptoAddresses.size > 0;
@ -282,7 +286,11 @@ const SwitchingColumnsArea: React.FC = ({ children }) => {
{features.accountAliases && <WrappedRoute path='/settings/aliases' page={DefaultPage} component={Aliases} content={children} />}
{features.accountMoving && <WrappedRoute path='/settings/migration' page={DefaultPage} component={Migration} content={children} />}
<WrappedRoute path='/settings/email' page={DefaultPage} component={EditEmail} content={children} />
<WrappedRoute path='/settings/password' page={DefaultPage} component={EditPassword} content={children} />
{
!isLdapEnabled && (
<WrappedRoute path='/settings/password' page={DefaultPage} component={EditPassword} content={children} />
)
}
<WrappedRoute path='/settings/account' page={DefaultPage} component={DeleteAccount} content={children} />
<WrappedRoute path='/settings/media_display' page={DefaultPage} component={MediaDisplay} content={children} />
<WrappedRoute path='/settings/mfa' page={DefaultPage} component={MfaForm} exact />

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -531,7 +531,7 @@
"federation_restrictions.not_disclosed_message": "{siteTitle} does not disclose federation restrictions through the API.",
"fediverse_tab.explanation_box.bubble": "This timeline shows you all the statuses published on a selection of other instances curated by your moderators.",
"fediverse_tab.explanation_box.dismiss": "Don't show again",
"fediverse_tab.explanation_box.explanation": "{site_title} forma part del Fediverse, una xarxa social formada per milers de servidors independents. Els missatges que veus aquí són de servidors de tercers. Tens la llibertat de interectuar amb ells, o de bloquejar qualsevol servidor que no vulguis veure. Per saber a quin servidor es troba una publicació fixat en el domini després del segon @ al nom d'usuari. Per veure només les publicacions de {site.title}, visita {local}.",
"fediverse_tab.explanation_box.explanation": "{site_title} is part of the Fediverse, a social network made up of thousands of independent social media sites (aka \"servers\"). The posts you see here are from 3rd-party servers. You have the freedom to engage with them, or to block any server you don't like. Pay attention to the full username after the second @ symbol to know which server a post is from. To see only {site_title} posts, visit {local}.",
"fediverse_tab.explanation_box.title": "Què és el Fediverse?",
"feed_suggestions.heading": "Suggested profiles",
"feed_suggestions.view_all": "View all",
@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icona",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Etiqueta",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edita les dades de configuració directament. Els canvis fets directament al fitxer JSON substituiran els camps de formulari de més amunt. Fes clic a Desa per aplicar els canvis.",
"soapbox_config.raw_json_label": "Avançat: Edita les dades JSON en brut",
"soapbox_config.save": "Desa",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Ikona",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Štítek",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Upravte data nastavení přímo. Změny udělané přímo do JSON přepíše předchozí formulář. Zmáčkněte Uložit pro aplikaci změn.",
"soapbox_config.raw_json_label": "Pokročilé: Upravit JSON data",
"soapbox_config.save": "Uložit",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Speichern",

View file

@ -748,6 +748,10 @@
"defaultMessage": "Profile directory",
"id": "navigation_bar.profile_directory"
},
{
"defaultMessage": "Dashboard",
"id": "tabs_bar.dashboard"
},
{
"defaultMessage": "Switch accounts",
"id": "profile_dropdown.switch_account"
@ -809,10 +813,6 @@
"defaultMessage": "Chats",
"id": "tabs_bar.chats"
},
{
"defaultMessage": "Messages",
"id": "navigation.direct_messages"
},
{
"defaultMessage": "Home",
"id": "tabs_bar.home"
@ -2351,6 +2351,10 @@
"defaultMessage": "Save changes",
"id": "compose_form.save_changes"
},
{
"defaultMessage": "Text is hidden behind warning",
"id": "compose_form.spoiler.marked"
},
{
"defaultMessage": "You have scheduled posts. {click_here} to see them.",
"id": "compose_form.scheduled_statuses.message"
@ -5148,6 +5152,10 @@
"defaultMessage": "Enable greentext support",
"id": "soapbox_config.greentext_label"
},
{
"defaultMessage": "Enable Quote RT",
"id": "soapbox_config.quote_rt"
},
{
"defaultMessage": "Soapbox Icons List",
"id": "soapbox_config.hints.promo_panel_icons.link"

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "𐑲𐑒𐑪𐑯",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "𐑧𐑛𐑦𐑑 𐑞 𐑕𐑧𐑑𐑦𐑙𐑟 𐑛𐑱𐑑𐑩 𐑛𐑦𐑮𐑧𐑒𐑑𐑤𐑦. 𐑗𐑱𐑯𐑡𐑩𐑟 𐑥𐑱𐑛 𐑛𐑦𐑮𐑧𐑒𐑑𐑤𐑦 𐑑 𐑞 JSON 𐑓𐑲𐑤 𐑢𐑦𐑤 𐑴𐑝𐑼𐑮𐑲𐑛 𐑞 𐑓𐑹𐑥 𐑓𐑰𐑤𐑛𐑟 𐑩𐑚𐑳𐑝. 𐑒𐑤𐑦𐑒 𐑕𐑱𐑝 𐑑 𐑩𐑐𐑤𐑲 𐑘𐑹 𐑗𐑱𐑯𐑡𐑩𐑟.",
"soapbox_config.raw_json_label": "𐑩𐑛𐑝𐑭𐑯𐑕𐑑: 𐑧𐑛𐑦𐑑 raw JSON 𐑛𐑱𐑑𐑩",
"soapbox_config.save": "𐑕𐑱𐑝",
@ -1133,7 +1134,7 @@
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} 𐑤𐑧𐑓𐑑",
"time_remaining.moments": "𐑥𐑴𐑥𐑩𐑯𐑑𐑕 remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} 𐑤𐑧𐑓𐑑",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people} 𐑑𐑷𐑒𐑦𐑙",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"trends.title": "𐑑𐑮𐑧𐑯𐑛𐑟",
"ui.beforeunload": "𐑘𐑹 𐑛𐑮𐑭𐑓𐑑 𐑢𐑦𐑤 𐑚𐑰 𐑤𐑪𐑕𐑑 𐑦𐑓 𐑿 𐑤𐑰𐑝.",
"unauthorized_modal.text": "𐑿 𐑯𐑰𐑛 𐑑 𐑚𐑰 𐑤𐑪𐑜𐑛 𐑦𐑯 𐑑 𐑛𐑵 𐑞𐑨𐑑.",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -862,8 +862,8 @@
"privacy.public.short": "Public",
"privacy.unlisted.long": "Ne pas afficher dans les fils publics",
"privacy.unlisted.short": "Non listé",
"profile_dropdown.add_account": "Add an existing account",
"profile_dropdown.logout": "Log out @{acct}",
"profile_dropdown.add_account": "Ajouter un compte existant",
"profile_dropdown.logout": "Se déconnecter",
"profile_dropdown.switch_account": "Switch accounts",
"profile_dropdown.theme": "Thème",
"profile_fields_panel.title": "À propos",
@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Activer les citations (Quote RT)",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Avancé: Editer le fichier JSON",
"soapbox_config.save": "Enregistrer",
@ -1071,7 +1072,7 @@
"status.open": "Déplier ce statut",
"status.pin": "Épingler sur le profil",
"status.pinned": "Statut épinglé",
"status.quote": "Quote post",
"status.quote": "Citer",
"status.reactions.cry": "Sad",
"status.reactions.empty": "No one has reacted to this post yet. When someone does, they will show up here.",
"status.reactions.heart": "Love",
@ -1082,7 +1083,7 @@
"status.read_more": "En savoir plus",
"status.reblog": "Partager",
"status.reblog_private": "Booster vers laudience originale",
"status.reblogged_by": "{name} a partagé:",
"status.reblogged_by": "{name} a partagé",
"status.reblogs.empty": "Personne na encore partagé ce statut. Lorsque quelquun le fera, il apparaîtra ici.",
"status.redraft": "Effacer et ré-écrire",
"status.remove_account_from_group": "Remove account from group",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -309,7 +309,7 @@
"compose_form.save_changes": "Save changes",
"compose_form.schedule": "לתזמן",
"compose_form.scheduled_statuses.click_here": "לחץ כאן",
"compose_form.scheduled_statuses.message": "יש לך פוסטים מתוזמנים. {לחץ_כאן} כדי לראות אותם.",
"compose_form.scheduled_statuses.message": "יש לך פוסטים מתוזמנים. כדי לראות אותם.",
"compose_form.sensitive.hide": "סמן מדיה כרגישה",
"compose_form.sensitive.marked": "מדיה מסומנת כרגישה",
"compose_form.sensitive.unmarked": "מדיה לא מסומנת כרגישה",
@ -863,7 +863,7 @@
"privacy.unlisted.long": "לא יופיע בפידים הציבוריים המשותפים",
"privacy.unlisted.short": "לא לפיד הכללי",
"profile_dropdown.add_account": "הוסף חשבון קיים",
"profile_dropdown.logout": "התנתק מ-{account}",
"profile_dropdown.logout": "התנתק מ",
"profile_dropdown.switch_account": "Switch accounts",
"profile_dropdown.theme": "Theme",
"profile_fields_panel.title": "Profile fields",
@ -914,8 +914,8 @@
"remote_instance.federation_panel.no_restrictions_message": "{siteTitle} לא הטיל הגבלות על {host}.",
"remote_instance.federation_panel.restricted_message": "{siteTitle} חוסם את כל הפעילויות של {host}.",
"remote_instance.federation_panel.some_restrictions_message": "{siteTitle} הטיל כמה הגבלות על {host}.",
"remote_instance.pin_host": "הצמד {מארח}",
"remote_instance.unpin_host": "בטל הצמדה של {מארח}",
"remote_instance.pin_host": "הצמד",
"remote_instance.unpin_host": "בטל הצמדה של",
"remote_interaction.account_placeholder": "הזן את username@domain שממנו ברצונך לפעול",
"remote_interaction.divider": "או",
"remote_interaction.favourite": "המשך לסמן לייק",
@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "סמל",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "תווית",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "ערוך את נתוני ההגדרות ישירות. שינויים שנעשו ישירות בקובץ JSON יעקפו את שדות הטופס שלמעלה. לחץ על שמור כדי להחיל את השינויים שלך.",
"soapbox_config.raw_json_label": "מתקדם: ערוך נתוני JSON גולמיים",
"soapbox_config.save": "שמור",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -142,7 +142,7 @@
"admin_nav.reports": "Kærur",
"age_verification.fail": "You must be {ageMinimum, plural, one {# year} other {# years}} old or older.",
"age_verification.header": "Enter your birth date",
"alert.unexpected.body": "Afsakaðu truflunina. Ef vandamálið heldur áfram skaltu láta hjálparliðið vita. Þú getur líka {clear_cookies} en þetta mun skrá þig út.",
"alert.unexpected.body": "Afsakaðu truflunina. Ef vandamálið heldur áfram skaltu láta hjálparliðið vita. Þú getur líka en þetta mun skrá þig út.",
"alert.unexpected.browser": "Vafri",
"alert.unexpected.clear_cookies": "hreinsað vafrakökur og vafragögn",
"alert.unexpected.links.help": "Hjálparmiðstöð",
@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Salva",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "保存",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -444,7 +444,7 @@
"edit_profile.hints.header": "PNG, GIF lub JPG. Zostanie zmniejszony do {size}",
"edit_profile.hints.hide_network": "To, kogo obserwujesz i kto Cię obserwuje nie będzie wyświetlane na Twoim profilu",
"edit_profile.hints.locked": "Wymaga ręcznego zatwierdzania obserwacji",
"edit_profile.hints.meta_fields": "Możesz ustawić {count, plural, one {# niestandardowe pole} few {# niestandardowe pola} many {# niestandardowych pól} wyświetlanych na Twoim profilu.",
"edit_profile.hints.meta_fields": "You can have up to {count, plural, one {# custom field} other {# custom fields}} displayed on your profile.",
"edit_profile.hints.stranger_notifications": "Wyświetlaj tylko powiadomienia od osób, które obserwujesz",
"edit_profile.save": "Zapisz",
"edit_profile.success": "Zapisano profil!",
@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Ikona",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Podpis",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "Adres URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edytuj ustawienia bezpośrednio. Zmiany dokonane w pliku JSON zastąpią powyższe ustawienia. Naciśnij Zapisz, aby zastosować zmiany.",
"soapbox_config.raw_json_label": "Zaawansowane: Edytuj surowe dane JSON",
"soapbox_config.save": "Zapisz",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Ícone",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Descrição",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edita os dados das definições diretamente. Alterações são feitas diretamente no ficheiro JSON que substituirão os campos do formulário acima. Clica Guardar para aplicar as alterações.",
"soapbox_config.raw_json_label": "Avançado: Editar dados JSON diretamente",
"soapbox_config.save": "Guardar",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -687,7 +687,7 @@
"migration.fields.acct.label": "Обробка нового облікового запису",
"migration.fields.acct.placeholder": "username@domain",
"migration.fields.confirm_password.label": "Поточний пароль",
"migration.hint": "Це призведе до переміщення ваших підписників до нового облікового запису. Ніякі інші дані не будуть переміщені. Щоб виконати міграцію, спочатку потрібно {посилання} на ваш новий акаунт.",
"migration.hint": "Це призведе до переміщення ваших підписників до нового облікового запису. Ніякі інші дані не будуть переміщені. Щоб виконати міграцію, спочатку потрібно на ваш новий акаунт.",
"migration.hint.link": "створити псевдонім облікового запису",
"migration.move_account.fail": "Міграції облікового запису не відбулося.",
"migration.move_account.success": "Обліковий запис успішно перенесено.",
@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Іконка",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Лейбл",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Відредагуйте дані налаштувань безпосередньо. Зміни, внесені безпосередньо в JSON-файл, замінять поля форми вище. Натисніть 'Зберегти', щоб застосувати зміни.",
"soapbox_config.raw_json_label": "Розширений: Редагування необроблених даних JSON",
"soapbox_config.save": "Зберігти",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "图标",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "标签",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "直接编辑JSON数据。将覆盖此页所有设定。单击以应用更改。",
"soapbox_config.raw_json_label": "高级编辑JSON数据",
"soapbox_config.save": "保存更改",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -1036,6 +1036,7 @@
"soapbox_config.promo_panel.meta_fields.icon_placeholder": "Icon",
"soapbox_config.promo_panel.meta_fields.label_placeholder": "Label",
"soapbox_config.promo_panel.meta_fields.url_placeholder": "URL",
"soapbox_config.quote_rt": "Enable Quote RT",
"soapbox_config.raw_json_hint": "Edit the settings data directly. Changes made directly to the JSON file will override the form fields above. Click Save to apply your changes.",
"soapbox_config.raw_json_label": "Advanced: Edit raw JSON data",
"soapbox_config.save": "Save",

View file

@ -99,6 +99,7 @@ export const SoapboxConfigRecord = ImmutableRecord({
gdpr: false,
gdprUrl: '',
greentext: false,
quotePosts: true,
promoPanel: PromoPanelRecord(),
navlinks: ImmutableMap({
homeFooter: ImmutableList<FooterItem>(),

View file

@ -19,7 +19,7 @@ import { normalizePoll } from 'soapbox/normalizers/poll';
import type { ReducerAccount } from 'soapbox/reducers/accounts';
import type { Account, Attachment, Card, Emoji, Mention, Poll, EmbeddedEntity } from 'soapbox/types/entities';
export type StatusVisibility = 'public' | 'unlisted' | 'private' | 'direct';
export type StatusVisibility = 'public' | 'unlisted' | 'local' | 'private' | 'direct';
// https://docs.joinmastodon.org/entities/status/
export const StatusRecord = ImmutableRecord({

View file

@ -101,6 +101,7 @@ export const ReducerRecord = ImmutableRecord({
sensitive: false,
spoiler: false,
spoiler_text: '',
spoiler_forced: false,
suggestions: ImmutableList(),
suggestion_token: null as string | null,
tagHistory: ImmutableList<string>(),
@ -143,7 +144,9 @@ export const statusToMentionsAccountIdsArray = (status: StatusEntity, account: A
function clearAll(state: State) {
return ReducerRecord({
content_type: state.default_content_type,
default_content_type: state.default_content_type,
privacy: state.default_privacy,
default_privacy: state.default_privacy,
idempotencyKey: uuid(),
});
}
@ -359,8 +362,9 @@ export default function compose(state = ReducerRecord({ idempotencyKey: uuid(),
map.set('caretPosition', null);
map.set('idempotencyKey', uuid());
map.set('content_type', state.default_content_type);
map.set('spoiler', false);
map.set('spoiler_text', '');
map.set('spoiler', !!action.status.getIn(['pleroma', 'spoiler_text', 'text/plain']));
map.set('spoiler_forced', !!action.status.getIn(['pleroma', 'spoiler_text', 'text/plain']));
map.set('spoiler_text', action.status.getIn(['pleroma', 'spoiler_text', 'text/plain']) || '');
});
case COMPOSE_SUBMIT_REQUEST:
return state.set('is_submitting', true);

View file

@ -31,6 +31,7 @@ The instance logo must be a valid svg file. It will be shown in pages using the
If you want the logo to match your color settings, you will need to update it so every `fill` or `stroke` property that you want to change use the special value `currentColor`
https://css-tricks.com/currentcolor/
## About pages
It is possible to create arbitrary HTML pages under `/about/:page` on your website.
@ -44,3 +45,31 @@ If you create a file called `index.html`, it will be treated as the root (availa
For convenience, Mangane ships with sample files under `instance/about.example`.
Simply rename that directory to `about` and start editing!
## How to add new emojis to a reaction on a status?
1. We clone the Mangane repository to our computer/server and then open the file **app/soapbox/locales/defaultMessages.json**
In it, we look for the field `"defaultMessage": "Love","`.
After it, we indent to write code for our emoji (to make the translation work).
![](https://telegra.ph/file/2aac2c64934dae56f8357.png)
In my case, I translated the emoji "Okay" and named its ID as "status.reactions.okay".
2. Now we go to **app/soapbox/components/status-action-bar.tsx** and search for `_reactionHeart: { id: 'status.reactions.heart', defaultMessage: 'Love' },` After that, we simply duplicate its code, replacing "heart" and "love" with the name and description of our emoji. For example, we replace `status.reactions.heart" with "status.reactions.okay` and replace `defaultMessage: 'Love'` with `defaultMessage: 'I'm okay'` (default language is English).
![enter image description here](https://telegra.ph/file/583bc89b8aa9af7dc24d0.png)
3. After this step, we go to the file with our localization and add new translation lines. In my case, it's Ukrainian localization, so the file **app/soapbox/locales/uk.json**
![enter image description here](https://telegra.ph/file/22af87c7465d0ca430479.png)
4. "Now that we have finished with the localization, we go to the configuration file of Mangane(Soapbox), which is located at app/soapbox/normalizers/soapbox/soapbox_config.ts, and look for `❤️,` in it.
We can add our newly created emoji in a similar manner. For example, we can add our "Okay" emoji by adding the following line to the config file: `'👌',`
This will add the "Okay" emoji to the list of available reactions in the app."
![enter image description here](https://telegra.ph/file/e22708475171d322b6f23.png)
5. In this file, we are almost done. Now, we go to the last file, which is **app/soapbox/utils/emoji_reacts.ts**. We can add our newly created emoji in the same way as we did in soapbox_config.ts and we are done.
![enter image description here](https://telegra.ph/file/f3913bff911e18fe1c345.png)
Now, we need to build Mangane and install it on our instance. After installation, the new reactions will appear when we click the 'Refresh' button on the website.
If you want to see how I did it in my repository, you can check it out at the following [link.](https://github.com/ua-thinking/ak.noleron.com/commit/2d20b259f95b0a895d376a43890d523c189d0781)

View file

@ -1,6 +1,6 @@
{
"name": "mangane-fe",
"version": "hyperactive-sloth",
"version": "wondering-wapiti",
"displayName": "Mangane",
"description": "Devanture pour https://bdx.town",
"homepage": "https://bdx.town",