Merge commit 'b2aa476abbe82e2b49d84c9fb8ef654f95391fd3' into glitch-soc/merge-upstream
This commit is contained in:
commit
99f0a03dec
2
.github/actions/setup-javascript/action.yml
vendored
2
.github/actions/setup-javascript/action.yml
vendored
@ -16,7 +16,7 @@ runs:
|
||||
# The following is needed because we can not use `cache: true` for `setup-node`, as it does not support Corepack yet and mess up with the cache location if ran after Node is installed
|
||||
- name: Enable corepack
|
||||
shell: bash
|
||||
run: corepack enable
|
||||
run: npm i -g corepack
|
||||
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
|
||||
@ -342,7 +342,7 @@ COPY --from=node /usr/local/lib /usr/local/lib
|
||||
RUN \
|
||||
# Configure Corepack
|
||||
rm /usr/local/bin/yarn*; \
|
||||
corepack enable; \
|
||||
npm i -g corepack; \
|
||||
corepack prepare --activate;
|
||||
|
||||
# hadolint ignore=DL3008
|
||||
|
||||
1
Gemfile
1
Gemfile
@ -58,6 +58,7 @@ gem 'httplog', '~> 1.8.0', require: false
|
||||
gem 'i18n'
|
||||
gem 'idn-ruby', require: 'idn'
|
||||
gem 'inline_svg'
|
||||
gem 'ipaddr', '~> 1.2'
|
||||
gem 'irb', '~> 1.8'
|
||||
gem 'kaminari', '~> 1.2'
|
||||
gem 'link_header', '~> 0.0'
|
||||
|
||||
@ -343,6 +343,7 @@ GEM
|
||||
activesupport (>= 3.0)
|
||||
nokogiri (>= 1.6)
|
||||
io-console (0.8.2)
|
||||
ipaddr (1.2.9)
|
||||
irb (1.18.0)
|
||||
pp (>= 0.6.0)
|
||||
prism (>= 1.3.0)
|
||||
@ -992,6 +993,7 @@ DEPENDENCIES
|
||||
i18n-tasks (~> 1.0)
|
||||
idn-ruby
|
||||
inline_svg
|
||||
ipaddr (~> 1.2)
|
||||
irb (~> 1.8)
|
||||
jd-paperclip-azure (~> 3.0)
|
||||
json
|
||||
|
||||
2
Vagrantfile
vendored
2
Vagrantfile
vendored
@ -115,7 +115,7 @@ gem install bundler foreman
|
||||
bundle install
|
||||
|
||||
# Install node modules
|
||||
sudo corepack enable
|
||||
sudo npm i -g corepack
|
||||
corepack prepare
|
||||
yarn install
|
||||
|
||||
|
||||
10
app/controllers/redirect/collections_controller.rb
Normal file
10
app/controllers/redirect/collections_controller.rb
Normal file
@ -0,0 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Redirect::CollectionsController < Redirect::BaseController
|
||||
private
|
||||
|
||||
def set_resource
|
||||
@resource = Collection.find(params[:id])
|
||||
not_found if @resource.local? || @resource&.account&.suspended?
|
||||
end
|
||||
end
|
||||
@ -49,9 +49,9 @@ module ContextHelper
|
||||
},
|
||||
quote_authorizations: {
|
||||
'gts' => 'https://gotosocial.org/ns#',
|
||||
'quoteAuthorization' => { '@id' => 'https://w3id.org/fep/044f#quoteAuthorization', '@type' => '@id' },
|
||||
'interactingObject' => { '@id' => 'gts:interactingObject' },
|
||||
'interactionTarget' => { '@id' => 'gts:interactionTarget' },
|
||||
'QuoteAuthorization' => 'https://w3id.org/fep/044f#QuoteAuthorization',
|
||||
'interactingObject' => { '@id' => 'gts:interactingObject', '@type' => '@id' },
|
||||
'interactionTarget' => { '@id' => 'gts:interactionTarget', '@type' => '@id' },
|
||||
},
|
||||
}.freeze
|
||||
|
||||
|
||||
@ -3,8 +3,6 @@ import type { FC } from 'react';
|
||||
|
||||
import { defineMessages, useIntl } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
||||
import { followAccount } from '@/mastodon/actions/accounts';
|
||||
import { useAccount } from '@/mastodon/hooks/useAccount';
|
||||
import { getAccountHidden } from '@/mastodon/selectors/accounts';
|
||||
@ -18,6 +16,7 @@ import { FollowButton } from '../follow_button';
|
||||
import { IconButton } from '../icon_button';
|
||||
|
||||
import { AccountMenu } from './menu';
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
const messages = defineMessages({
|
||||
enableNotifications: {
|
||||
@ -49,7 +48,7 @@ export const AccountButtons: FC<AccountButtonsProps> = ({
|
||||
const me = useAppSelector((state) => state.meta.get('me') as string);
|
||||
|
||||
return (
|
||||
<div className={classNames('account__header__buttons', className)}>
|
||||
<div className={className}>
|
||||
{!hidden && (
|
||||
<AccountButtonsOther accountId={accountId} noShare={noShare} />
|
||||
)}
|
||||
@ -94,7 +93,7 @@ const AccountButtonsOther: FC<
|
||||
{!isMovedAndUnfollowedAccount && (
|
||||
<FollowButton
|
||||
accountId={accountId}
|
||||
className='account__header__follow-button'
|
||||
className={classes.followButton}
|
||||
labelLength='long'
|
||||
/>
|
||||
)}
|
||||
|
||||
@ -108,11 +108,9 @@ const FieldCard: FC<{
|
||||
}> = ({ htmlHandlers, field }) => {
|
||||
const intl = useIntl();
|
||||
const {
|
||||
name,
|
||||
name_emojified,
|
||||
nameHasEmojis,
|
||||
value_emojified,
|
||||
value_plain,
|
||||
valueHasEmojis,
|
||||
verified_at,
|
||||
} = field;
|
||||
@ -138,8 +136,7 @@ const FieldCard: FC<{
|
||||
)}
|
||||
label={
|
||||
<FieldHTML
|
||||
text={name}
|
||||
textEmojified={name_emojified}
|
||||
text={name_emojified}
|
||||
textHasCustomEmoji={nameHasEmojis}
|
||||
className='translate'
|
||||
isOverflowing={isLabelOverflowing}
|
||||
@ -149,8 +146,7 @@ const FieldCard: FC<{
|
||||
}
|
||||
value={
|
||||
<FieldHTML
|
||||
text={value_plain}
|
||||
textEmojified={value_emojified}
|
||||
text={value_emojified}
|
||||
textHasCustomEmoji={valueHasEmojis}
|
||||
isOverflowing={isValueOverflowing}
|
||||
onOverflowClick={handleOverflowClick}
|
||||
@ -175,7 +171,6 @@ const FieldCard: FC<{
|
||||
|
||||
type FieldHTMLProps = {
|
||||
text: string;
|
||||
textEmojified: string;
|
||||
textHasCustomEmoji: boolean;
|
||||
isOverflowing?: boolean;
|
||||
onOverflowClick?: () => void;
|
||||
@ -183,9 +178,7 @@ type FieldHTMLProps = {
|
||||
|
||||
const FieldHTML: FC<FieldHTMLProps> = ({
|
||||
className,
|
||||
extraEmojis,
|
||||
text,
|
||||
textEmojified,
|
||||
textHasCustomEmoji,
|
||||
isOverflowing,
|
||||
onOverflowClick,
|
||||
@ -198,7 +191,7 @@ const FieldHTML: FC<FieldHTMLProps> = ({
|
||||
const html = (
|
||||
<EmojiHTML
|
||||
as='span'
|
||||
htmlString={textEmojified}
|
||||
htmlString={text}
|
||||
className={className}
|
||||
onElement={handleElement}
|
||||
data-contents
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
import { useCallback } from 'react';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import { Helmet } from 'react-helmet';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { openModal } from '@/mastodon/actions/modal';
|
||||
import FollowRequestNoteContainer from '@/mastodon/features/account/containers/follow_request_note_container';
|
||||
@ -96,22 +97,20 @@ export const AccountHeader: React.FC<{
|
||||
const isMe = me && account.id === me;
|
||||
|
||||
return (
|
||||
<div className='account-timeline__header'>
|
||||
<div>
|
||||
{!hidden && account.memorial && <MemorialNote />}
|
||||
{!hidden && account.moved && (
|
||||
<MovedNote accountId={account.id} targetAccountId={account.moved} />
|
||||
)}
|
||||
|
||||
<AnimateEmojiProvider
|
||||
className={classNames('account__header', {
|
||||
inactive: !!account.moved,
|
||||
})}
|
||||
className={classNames(!!account.moved && classes.moved)}
|
||||
>
|
||||
{!suspendedOrHidden && !account.moved && relationship?.requested_by && (
|
||||
<FollowRequestNoteContainer account={account} />
|
||||
)}
|
||||
|
||||
<div className={classNames('account__header__image', classes.header)}>
|
||||
<div className={classes.header}>
|
||||
{!suspendedOrHidden && (
|
||||
<img
|
||||
src={autoPlayGif ? account.header : account.header_static}
|
||||
@ -121,21 +120,16 @@ export const AccountHeader: React.FC<{
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className={classNames('account__header__bar', classes.barWrapper)}>
|
||||
<div
|
||||
className={classNames(
|
||||
'account__header__tabs',
|
||||
classes.avatarWrapper,
|
||||
)}
|
||||
>
|
||||
<div className={classes.barWrapper}>
|
||||
<div className={classes.avatarWrapper}>
|
||||
<a
|
||||
className='avatar'
|
||||
href={account.avatar}
|
||||
rel='noopener'
|
||||
target='_blank'
|
||||
onClick={handleOpenAvatar}
|
||||
>
|
||||
<Avatar
|
||||
className={classes.avatar}
|
||||
account={suspendedOrHidden ? undefined : account}
|
||||
alt={account.avatar_description}
|
||||
size={80}
|
||||
@ -143,12 +137,7 @@ export const AccountHeader: React.FC<{
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={classNames(
|
||||
'account__header__tabs__name',
|
||||
classes.displayNameWrapper,
|
||||
)}
|
||||
>
|
||||
<div className={classes.displayNameWrapper}>
|
||||
<AccountName accountId={accountId} />
|
||||
<AccountButtons
|
||||
accountId={accountId}
|
||||
@ -168,23 +157,16 @@ export const AccountHeader: React.FC<{
|
||||
)}
|
||||
|
||||
{!suspendedOrHidden && (
|
||||
<div className='account__header__extra'>
|
||||
<div className='account__header__bio'>
|
||||
{me && account.id !== me && (
|
||||
<AccountNote accountId={accountId} />
|
||||
)}
|
||||
<div className={classes.bioButtonsWrapper}>
|
||||
{me && account.id !== me && <AccountNote accountId={accountId} />}
|
||||
|
||||
<AccountBio
|
||||
showDropdown
|
||||
accountId={accountId}
|
||||
className={classNames(
|
||||
'account__header__content',
|
||||
classes.bio,
|
||||
)}
|
||||
/>
|
||||
<AccountBio
|
||||
showDropdown
|
||||
accountId={accountId}
|
||||
className={classes.bio}
|
||||
/>
|
||||
|
||||
<AccountHeaderFields accountId={accountId} />
|
||||
</div>
|
||||
<AccountHeaderFields accountId={accountId} />
|
||||
|
||||
{!me && account.email_subscriptions && (
|
||||
<AccountSubscriptionForm accountId={accountId} />
|
||||
|
||||
@ -1,26 +1,79 @@
|
||||
.moved {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
// Account header
|
||||
.header {
|
||||
height: 120px;
|
||||
overflow: hidden;
|
||||
background: var(--color-bg-secondary);
|
||||
border-bottom: 1px solid var(--color-border-primary);
|
||||
|
||||
img {
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@container (width >= 500px) {
|
||||
height: 160px;
|
||||
}
|
||||
|
||||
:global(.inactive) & {
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
}
|
||||
|
||||
// Wraps everything except the header image.
|
||||
.barWrapper {
|
||||
border-bottom: none;
|
||||
padding-inline: 16px;
|
||||
}
|
||||
|
||||
// Avatar
|
||||
.avatarWrapper {
|
||||
margin-top: -64px;
|
||||
padding-top: 0;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 8px;
|
||||
overflow: hidden;
|
||||
margin-inline-start: -2px; // aligns the pfp with content below
|
||||
}
|
||||
|
||||
.avatar {
|
||||
background: var(--color-bg-primary);
|
||||
border: 1px solid var(--color-border-primary);
|
||||
border-radius: var(--avatar-border-radius);
|
||||
|
||||
.moved & {
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
}
|
||||
|
||||
.displayNameWrapper {
|
||||
display: flex;
|
||||
align-items: start;
|
||||
gap: 16px;
|
||||
margin-top: 16px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
h1 {
|
||||
font-size: 17px;
|
||||
line-height: 22px;
|
||||
color: var(--color-text-primary);
|
||||
font-weight: 600;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
:global(.emojione) {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
}
|
||||
}
|
||||
|
||||
.nameWrapper {
|
||||
@ -112,21 +165,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
$button-breakpoint: 420px;
|
||||
$button-fallback-breakpoint: $button-breakpoint + 55px;
|
||||
|
||||
.buttonsDesktop {
|
||||
@container (width < #{$button-breakpoint}) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@supports (not (container-type: inline-size)) {
|
||||
@media (max-width: #{$button-fallback-breakpoint}) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.handleCopy {
|
||||
border: 1px solid var(--color-border-primary);
|
||||
border-radius: 8px;
|
||||
@ -147,6 +185,45 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
|
||||
}
|
||||
}
|
||||
|
||||
$button-breakpoint: 420px;
|
||||
$button-fallback-breakpoint: $button-breakpoint + 55px;
|
||||
|
||||
.buttonsDesktop,
|
||||
.buttonsMobile {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
|
||||
:global(.button) {
|
||||
flex-shrink: 1;
|
||||
white-space: nowrap;
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
:global(.icon-button) {
|
||||
border: 1px solid var(--color-border-primary);
|
||||
border-radius: 4px;
|
||||
box-sizing: content-box;
|
||||
padding: 5px;
|
||||
|
||||
&:global(.copied) {
|
||||
border-color: var(--color-text-success);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.buttonsDesktop {
|
||||
@container (width < #{$button-breakpoint}) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@supports (not (container-type: inline-size)) {
|
||||
@media (max-width: #{$button-fallback-breakpoint}) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.buttonsMobile {
|
||||
position: sticky;
|
||||
bottom: var(--mobile-bottom-nav-height);
|
||||
@ -188,6 +265,7 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
|
||||
|
||||
.bio {
|
||||
font-size: 15px;
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.familiarFollowers {
|
||||
@ -420,3 +498,13 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
|
||||
background: var(--color-bg-primary);
|
||||
}
|
||||
}
|
||||
|
||||
// Buttons
|
||||
|
||||
.followButton {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.bioButtonsWrapper {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@ import { PureComponent } from 'react';
|
||||
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import StackTrace from 'stacktrace-js';
|
||||
|
||||
|
||||
@ -154,17 +154,19 @@ export const HoverCardAccount = forwardRef<
|
||||
{(isMutual || isFollower) && (
|
||||
<>
|
||||
·
|
||||
{isMutual ? (
|
||||
<FormattedMessage
|
||||
id='account.mutual'
|
||||
defaultMessage='You follow each other'
|
||||
/>
|
||||
) : (
|
||||
<FormattedMessage
|
||||
id='account.follows_you'
|
||||
defaultMessage='Follows you'
|
||||
/>
|
||||
)}
|
||||
<span>
|
||||
{isMutual ? (
|
||||
<FormattedMessage
|
||||
id='account.mutual'
|
||||
defaultMessage='You follow each other'
|
||||
/>
|
||||
) : (
|
||||
<FormattedMessage
|
||||
id='account.follows_you'
|
||||
defaultMessage='Follows you'
|
||||
/>
|
||||
)}
|
||||
</span>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { PureComponent } from 'react';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
import { Route } from 'react-router-dom';
|
||||
|
||||
import { Provider as ReduxProvider } from 'react-redux';
|
||||
|
||||
@ -3,7 +3,7 @@ import { PureComponent } from 'react';
|
||||
|
||||
import { defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
@ -2,9 +2,10 @@ import type { FC } from 'react';
|
||||
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { Column } from '@/mastodon/components/column';
|
||||
import { ColumnHeader } from '@/mastodon/components/column_header';
|
||||
import { LoadingIndicator } from '@/mastodon/components/loading_indicator';
|
||||
|
||||
@ -24,6 +24,7 @@ import Column from '@/mastodon/features/ui/components/column';
|
||||
import { useAccount } from '@/mastodon/hooks/useAccount';
|
||||
import { useAccountId } from '@/mastodon/hooks/useAccountId';
|
||||
import { useAccountVisibility } from '@/mastodon/hooks/useAccountVisibility';
|
||||
import { me } from '@/mastodon/initial_state';
|
||||
import { useAppDispatch, useAppSelector } from '@/mastodon/store';
|
||||
import AddIcon from '@/material-icons/400-24px/add.svg?react';
|
||||
|
||||
@ -173,12 +174,14 @@ const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({
|
||||
defaultMessage='Collections'
|
||||
/>
|
||||
</h2>
|
||||
<SubheadingLink to='/collections/new' icon={AddIcon}>
|
||||
<FormattedMessage
|
||||
id='account.featured.new_collection'
|
||||
defaultMessage='New collection'
|
||||
/>
|
||||
</SubheadingLink>
|
||||
{accountId === me && (
|
||||
<SubheadingLink to='/collections/new' icon={AddIcon}>
|
||||
<FormattedMessage
|
||||
id='account.featured.new_collection'
|
||||
defaultMessage='New collection'
|
||||
/>
|
||||
</SubheadingLink>
|
||||
)}
|
||||
</Subheading>
|
||||
{hasCollections ? (
|
||||
<ItemList>
|
||||
|
||||
@ -2,7 +2,7 @@ import { useEffect, useRef, useCallback } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
|
||||
import {
|
||||
|
||||
@ -131,7 +131,7 @@ export const CollectionMenu: React.FC<{
|
||||
{
|
||||
text: intl.formatMessage(messages.copyLink),
|
||||
action: () => {
|
||||
void navigator.clipboard.writeText(getCollectionPath(id));
|
||||
void navigator.clipboard.writeText(collection.url);
|
||||
dispatch(showAlert({ message: messages.copyLinkConfirmation }));
|
||||
},
|
||||
},
|
||||
@ -196,13 +196,14 @@ export const CollectionMenu: React.FC<{
|
||||
id,
|
||||
openShareModal,
|
||||
isOwnCollection,
|
||||
collection.url,
|
||||
dispatch,
|
||||
openDeleteConfirmation,
|
||||
context,
|
||||
currentAccountInCollection,
|
||||
openReportModal,
|
||||
openBlockModal,
|
||||
openRevokeConfirmation,
|
||||
openBlockModal,
|
||||
]);
|
||||
|
||||
return (
|
||||
|
||||
@ -42,7 +42,7 @@ export const CollectionShareModal: React.FC<{
|
||||
const isNew = !!location.state?.newCollection;
|
||||
const isOwnCollection = collection.account_id === me;
|
||||
|
||||
const collectionLink = `${window.location.origin}/collections/${collection.id}`;
|
||||
const collectionLink = collection.url;
|
||||
|
||||
const handleShareOnDevice = useCallback(() => {
|
||||
void navigator.share({
|
||||
|
||||
@ -138,12 +138,16 @@ export const CollectionAccountsList: React.FC<{
|
||||
|
||||
const renderAccountItemButton = useCallback(
|
||||
({ relationship, accountId }: RenderButtonOptions) => {
|
||||
if (!me || !relationship) {
|
||||
// Show follow button when logged out (it will trigger the remote interaction modal)
|
||||
return <AccountListItemFollowButton accountId={accountId} />;
|
||||
}
|
||||
|
||||
// When viewing your own collection, only show the Follow button
|
||||
// for accounts you're not following anymore.
|
||||
const withoutButton =
|
||||
!relationship ||
|
||||
(collectionOwnerId === me &&
|
||||
(relationship.following || relationship.requested));
|
||||
collectionOwnerId === me &&
|
||||
(relationship.following || relationship.requested);
|
||||
|
||||
if (withoutButton) return null;
|
||||
|
||||
|
||||
@ -2,10 +2,11 @@ import { useCallback, useEffect } from 'react';
|
||||
|
||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { useHistory, useLocation, useParams } from 'react-router';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import HelpIcon from '@/material-icons/400-24px/help.svg?react';
|
||||
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
|
||||
import ShareIcon from '@/material-icons/400-24px/share.svg?react';
|
||||
|
||||
@ -2,7 +2,6 @@ import { useEffect } from 'react';
|
||||
|
||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import {
|
||||
Switch,
|
||||
Route,
|
||||
@ -12,6 +11,8 @@ import {
|
||||
useLocation,
|
||||
} from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { Callout } from '@/mastodon/components/callout';
|
||||
import { useCurrentAccountId } from '@/mastodon/hooks/useAccountId';
|
||||
import { initialState } from '@/mastodon/initial_state';
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
import { defineMessages, useIntl } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Route, Switch, useRouteMatch } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { TabLink, TabList } from '@/mastodon/components/tab_list';
|
||||
import { Column } from 'mastodon/components/column';
|
||||
import { ColumnHeader } from 'mastodon/components/column_header';
|
||||
|
||||
@ -3,7 +3,7 @@ import { PureComponent } from 'react';
|
||||
|
||||
import { defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
|
||||
@ -2,11 +2,12 @@ import { useEffect, useCallback } from 'react';
|
||||
|
||||
import { useIntl, defineMessages } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
import type { Map as ImmutableMap, List as ImmutableList } from 'immutable';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import elephantUIPlane from '@/images/elephant_ui_plane.svg';
|
||||
import EditIcon from '@/material-icons/400-24px/edit_square.svg?react';
|
||||
import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
|
||||
|
||||
@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { useDispatch } from 'react-redux';
|
||||
|
||||
|
||||
@ -3,10 +3,10 @@ import { useCallback, useEffect, useRef } from 'react';
|
||||
|
||||
import { defineMessages, useIntl } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
|
||||
import { List as ImmutableList } from 'immutable';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
|
||||
import {
|
||||
addColumn,
|
||||
|
||||
@ -2,7 +2,7 @@ import { useEffect, useRef, useCallback, useState } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import BlockIcon from '@/material-icons/400-24px/block-fill.svg?react';
|
||||
import { apiGetDomainBlocks } from 'mastodon/api/domain_blocks';
|
||||
|
||||
@ -2,9 +2,10 @@ import { useCallback, useRef } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { NavLink, Switch, Route } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import TrendingUpIcon from '@/material-icons/400-24px/trending_up.svg?react';
|
||||
import { Column } from 'mastodon/components/column';
|
||||
import type { ColumnRef } from 'mastodon/components/column';
|
||||
|
||||
@ -2,7 +2,7 @@ import { useEffect, useRef, useCallback } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import StarIcon from '@/material-icons/400-24px/star-fill.svg?react';
|
||||
import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns';
|
||||
|
||||
@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
||||
|
||||
import { defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
|
||||
@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect } from 'react';
|
||||
|
||||
import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
import { NavLink } from 'react-router-dom';
|
||||
|
||||
import { useIdentity } from '@/mastodon/identity_context';
|
||||
|
||||
@ -10,11 +10,11 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import CheckIcon from '@/material-icons/400-24px/check.svg?react';
|
||||
import CloseIcon from '@/material-icons/400-24px/close.svg?react';
|
||||
|
||||
import { AccountBio } from '@/mastodon/components/account_bio';
|
||||
import { Avatar } from '@/mastodon/components/avatar';
|
||||
import { DisplayName } from '@/mastodon/components/display_name';
|
||||
import { IconButton } from '@/mastodon/components/icon_button';
|
||||
import { injectIntl } from '@/mastodon/components/intl';
|
||||
import { EmojiHTML } from '@/mastodon/components/emoji/html';
|
||||
|
||||
const messages = defineMessages({
|
||||
authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' },
|
||||
@ -41,11 +41,7 @@ class AccountAuthorize extends ImmutablePureComponent {
|
||||
<DisplayName account={account} />
|
||||
</Link>
|
||||
|
||||
<EmojiHTML
|
||||
className='account__header__content translate'
|
||||
htmlString={account.get('note_emojified')}
|
||||
extraEmojis={account.get('emojis')}
|
||||
/>
|
||||
<AccountBio accountId={account.id} />
|
||||
</div>
|
||||
|
||||
<div className='account--panel'>
|
||||
|
||||
@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
||||
|
||||
import { defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
|
||||
@ -2,10 +2,10 @@ import { useEffect, useCallback, useRef } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
|
||||
import { isFulfilled } from '@reduxjs/toolkit';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import TagIcon from '@/material-icons/400-24px/tag.svg?react';
|
||||
import {
|
||||
fetchFollowedHashtags,
|
||||
|
||||
@ -28,6 +28,7 @@ interface AccountListProps {
|
||||
list?: AccountList | null;
|
||||
loadMore: () => void;
|
||||
prependAccountId?: string | null;
|
||||
withoutFollowsYouBadge?: boolean;
|
||||
scrollKey: string;
|
||||
}
|
||||
|
||||
@ -40,6 +41,7 @@ export const AccountList: FC<AccountListProps> = ({
|
||||
list,
|
||||
loadMore,
|
||||
prependAccountId,
|
||||
withoutFollowsYouBadge,
|
||||
scrollKey,
|
||||
}) => {
|
||||
const account = useAccount(accountId);
|
||||
@ -57,6 +59,7 @@ export const AccountList: FC<AccountListProps> = ({
|
||||
key={followerId}
|
||||
accountId={followerId}
|
||||
withBio={false}
|
||||
badge={withoutFollowsYouBadge ? false : null}
|
||||
/>
|
||||
)) ?? [];
|
||||
|
||||
@ -66,11 +69,12 @@ export const AccountList: FC<AccountListProps> = ({
|
||||
key={prependAccountId}
|
||||
accountId={prependAccountId}
|
||||
withBio={false}
|
||||
badge={withoutFollowsYouBadge ? false : null}
|
||||
/>,
|
||||
);
|
||||
}
|
||||
return children;
|
||||
}, [prependAccountId, list, forceEmptyState]);
|
||||
}, [prependAccountId, list, forceEmptyState, withoutFollowsYouBadge]);
|
||||
|
||||
const { multiColumn } = useLayout();
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ import { expandFollowers, fetchFollowers } from '@/mastodon/actions/accounts';
|
||||
import { useAccount } from '@/mastodon/hooks/useAccount';
|
||||
import { useAccountId } from '@/mastodon/hooks/useAccountId';
|
||||
import { useRelationship } from '@/mastodon/hooks/useRelationship';
|
||||
import { me } from '@/mastodon/initial_state';
|
||||
import { selectUserListWithoutMe } from '@/mastodon/selectors/user_lists';
|
||||
import { useAppDispatch, useAppSelector } from '@/mastodon/store';
|
||||
|
||||
@ -85,6 +86,7 @@ const Followers: FC = () => {
|
||||
list={followerList}
|
||||
loadMore={loadMore}
|
||||
prependAccountId={followerId}
|
||||
withoutFollowsYouBadge={accountId === me}
|
||||
scrollKey='followers'
|
||||
/>
|
||||
);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { useIntl } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { Column } from 'mastodon/components/column';
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ import { PureComponent } from 'react';
|
||||
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import { PureComponent } from 'react';
|
||||
import { defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
|
||||
@ -483,11 +483,19 @@ const InteractionModal: React.FC<{
|
||||
/>
|
||||
</h3>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
id='interaction_modal.action'
|
||||
defaultMessage="To interact with {name}'s post, you need to sign into your account on whatever Mastodon server you use."
|
||||
values={{ name }}
|
||||
/>
|
||||
{intent === 'follow' ? (
|
||||
<FormattedMessage
|
||||
id='interaction_modal.action_follow'
|
||||
defaultMessage='To follow {name}, you need to sign into your account on whatever Mastodon server you use.'
|
||||
values={{ name }}
|
||||
/>
|
||||
) : (
|
||||
<FormattedMessage
|
||||
id='interaction_modal.action'
|
||||
defaultMessage="To interact with {name}'s post, you need to sign into your account on whatever Mastodon server you use."
|
||||
values={{ name }}
|
||||
/>
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
||||
|
||||
import { defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
import { useRef, useEffect, useCallback } from 'react';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { useParams } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import TrendingUpIcon from '@/material-icons/400-24px/trending_up.svg?react';
|
||||
import { expandLinkTimeline } from 'mastodon/actions/timelines';
|
||||
import { Column } from 'mastodon/components/column';
|
||||
|
||||
@ -3,7 +3,7 @@ import { PureComponent } from 'react';
|
||||
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
import { Link, withRouter } from 'react-router-dom';
|
||||
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
|
||||
@ -2,9 +2,10 @@ import { useEffect, useMemo, useCallback } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import AddIcon from '@/material-icons/400-24px/add.svg?react';
|
||||
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
|
||||
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
||||
|
||||
@ -2,9 +2,10 @@ import { useCallback, useState, useEffect } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { useParams, Link } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
|
||||
import SquigglyArrow from '@/svg-icons/squiggly_arrow.svg?react';
|
||||
import { fetchRelationships } from 'mastodon/actions/accounts';
|
||||
|
||||
@ -2,11 +2,12 @@ import { useCallback, useState, useEffect } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { useParams, useHistory, Link } from 'react-router-dom';
|
||||
|
||||
import { isFulfilled } from '@reduxjs/toolkit';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react';
|
||||
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
|
||||
import { fetchList } from 'mastodon/actions/lists';
|
||||
|
||||
@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
||||
|
||||
import { defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
|
||||
@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect, useState } from 'react';
|
||||
|
||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
|
||||
|
||||
@ -2,8 +2,7 @@ import { useCallback, useEffect, useMemo, useRef } from 'react';
|
||||
|
||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
import { isEqual } from 'lodash';
|
||||
import { useDebouncedCallback } from 'use-debounce';
|
||||
|
||||
|
||||
@ -2,9 +2,9 @@ import { useEffect, useState, useCallback, useRef } from 'react';
|
||||
|
||||
import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
import { useDebouncedCallback } from 'use-debounce';
|
||||
|
||||
import PersonIcon from '@/material-icons/400-24px/person.svg?react';
|
||||
|
||||
@ -3,9 +3,10 @@ import { useState, useMemo, useCallback, createRef } from 'react';
|
||||
import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react';
|
||||
import EditIcon from '@/material-icons/400-24px/edit.svg?react';
|
||||
import PersonIcon from '@/material-icons/400-24px/person.svg?react';
|
||||
|
||||
@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
||||
|
||||
import { defineMessages } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
|
||||
@ -2,7 +2,7 @@ import { useState, useEffect } from 'react';
|
||||
|
||||
import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { apiGetPrivacyPolicy } from 'mastodon/api/instance';
|
||||
import type { ApiPrivacyPolicyJSON } from 'mastodon/api_types/instance';
|
||||
|
||||
@ -3,7 +3,7 @@ import { PureComponent } from 'react';
|
||||
|
||||
import { defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
|
||||
@ -2,10 +2,10 @@ import { useCallback, useEffect } from 'react';
|
||||
|
||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
|
||||
import { List as ImmutableList } from 'immutable';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react';
|
||||
import { fetchQuotes } from 'mastodon/actions/interactions_typed';
|
||||
import { ColumnHeader } from 'mastodon/components/column_header';
|
||||
|
||||
@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
||||
|
||||
import { defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
|
||||
@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef } from 'react';
|
||||
|
||||
import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react';
|
||||
import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
|
||||
|
||||
@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
||||
import { defineMessages } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
import { withRouter } from 'react-router-dom';
|
||||
import { difference } from 'lodash';
|
||||
|
||||
|
||||
@ -7,9 +7,10 @@ import {
|
||||
defineMessages,
|
||||
} from 'react-intl';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Link, useParams } from 'react-router-dom';
|
||||
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import { apiGetTermsOfService } from 'mastodon/api/instance';
|
||||
import type { ApiTermsOfServiceJSON } from 'mastodon/api_types/instance';
|
||||
import { Column } from 'mastodon/components/column';
|
||||
|
||||
@ -4,7 +4,7 @@ import { PureComponent } from 'react';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
import { Button } from 'mastodon/components/button';
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import { PureComponent } from 'react';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { Helmet } from '@unhead/react/helmet';
|
||||
|
||||
import Base from 'mastodon/components/modal_root';
|
||||
import { AltTextModal } from 'mastodon/features/alt_text_modal';
|
||||
|
||||
@ -25,7 +25,7 @@ class IntersectionObserverWrapper {
|
||||
this.observerBacklog.forEach(([ id, node, callback ]) => {
|
||||
this.observe(id, node, callback);
|
||||
});
|
||||
this.observerBacklog = null;
|
||||
this.observerBacklog = [];
|
||||
}
|
||||
|
||||
observe (id, node, callback) {
|
||||
|
||||
@ -136,10 +136,10 @@
|
||||
"account.share": "Κοινοποίηση του προφίλ @{name}",
|
||||
"account.show_reblogs": "Εμφάνιση ενισχύσεων από @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} ανάρτηση} other {{counter} αναρτήσεις}}",
|
||||
"account.timeline.pinned": "Καρφιτσωμένα",
|
||||
"account.timeline.pinned": "Καρφιτσωμένη",
|
||||
"account.timeline.pinned.view_all": "Προβολή όλων των καρφιτσωμένων αναρτήσεων",
|
||||
"account.unblock": "Άρση αποκλεισμού @{name}",
|
||||
"account.unblock_domain": "Άρση αποκλεισμού του τομέα {domain}",
|
||||
"account.unblock_domain": "Άρση αποκλεισμού τομέα {domain}",
|
||||
"account.unblock_domain_short": "Άρση αποκλ.",
|
||||
"account.unblock_short": "Άρση αποκλεισμού",
|
||||
"account.unendorse": "Να μην αναδεικνύεται στο προφίλ",
|
||||
@ -162,7 +162,7 @@
|
||||
"account_edit.custom_fields.edit_label": "Επεξεργασία πεδίου",
|
||||
"account_edit.custom_fields.placeholder": "Προσθέστε τις αντωνυμίες σας, εξωτερικούς συνδέσμους ή οτιδήποτε άλλο θέλετε να μοιραστείτε.",
|
||||
"account_edit.custom_fields.reorder_button": "Αναδιάταξη πεδίων",
|
||||
"account_edit.custom_fields.tip_content": "Μπορείς εύκολα να προσθέσεις αξιοπιστία στον Mastodon λογαριασμό σου επαληθεύοντας συνδέσμους σε οποιεσδήποτε ιστοσελίδες κατέχεις.",
|
||||
"account_edit.custom_fields.tip_content": "Μπορείς εύκολα να προσθέσεις αξιοπιστία στον Mastodon λογαριασμό σου επαληθεύοντας συνδέσμους προς οποιεσδήποτε ιστοσελίδες κατέχεις.",
|
||||
"account_edit.custom_fields.tip_title": "Συμβουλή: Προσθήκη επαληθευμένων συνδέσμων",
|
||||
"account_edit.custom_fields.title": "Προσαρμοσμένα πεδία",
|
||||
"account_edit.custom_fields.verified_hint": "Πώς προσθέτω έναν επαληθευμένο σύνδεσμο;",
|
||||
@ -241,7 +241,7 @@
|
||||
"account_edit.upload_modal.title_add.header": "Προσθήκη εικόνας εξωφύλλου",
|
||||
"account_edit.upload_modal.title_replace.avatar": "Αντικατάσταση εικόνας προφίλ",
|
||||
"account_edit.upload_modal.title_replace.header": "Αντικατάσταση εικόνας εξωφύλλου",
|
||||
"account_edit.verified_modal.details": "Πρόσθεσε αξιοπιστία στο Mastodon προφίλ σας επαληθεύοντας συνδέσμους σε προσωπικές ιστοσελίδες. Ορίστε πως δουλεύει:",
|
||||
"account_edit.verified_modal.details": "Πρόσθεσε αξιοπιστία στο Mastodon προφίλ σου επαληθεύοντας συνδέσμους προς προσωπικές ιστοσελίδες. Ορίστε πως δουλεύει:",
|
||||
"account_edit.verified_modal.invisible_link.details": "Πρόσθεσε τον σύνδεσμο στην κεφαλίδα σου. Το σημαντικό μέρος είναι το rel=\"me\" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμα να χρησιμοποιήσεις μια ετικέτα link στην κεφαλίδα της σελίδας αντί για {tag}, αλλά η HTML πρέπει να είναι προσβάσιμη χωρίς την εκτέλεση JavaScript.",
|
||||
"account_edit.verified_modal.invisible_link.summary": "Πώς κάνω αυτόν τον σύνδεσμο αόρατο;",
|
||||
"account_edit.verified_modal.step1.header": "Αντίγραψε τον παρακάτω κώδικα HTML και επικόλλησε τον στην κεφαλίδα της ιστοσελίδας σου",
|
||||
@ -250,7 +250,7 @@
|
||||
"account_edit.verified_modal.title": "Πώς να προσθέσεις έναν επαληθευμένο σύνδεσμο",
|
||||
"account_edit_tags.add_tag": "Προσθήκη #{tagName}",
|
||||
"account_edit_tags.column_title": "Επεξεργασία Ετικετών",
|
||||
"account_edit_tags.help_text": "Οι αναδεδειγμένες ετικέτες βοηθούν τους χρήστες να ανακαλύψουν και να αλληλεπιδράσουν με το προφίλ σας. Εμφανίζονται ως φίλτρα στην προβολή Δραστηριότητας της σελίδας προφίλ σας.",
|
||||
"account_edit_tags.help_text": "Οι αναδεδειγμένες ετικέτες βοηθούν τους χρήστες να ανακαλύψουν και να αλληλεπιδράσουν με το προφίλ σας. Εμφανίζονται ως φίλτρα στην καρτέλα Δραστηριότητα της σελίδας προφίλ σας.",
|
||||
"account_edit_tags.max_tags_reached": "Έχετε φτάσει τον μέγιστο αριθμό των προτεινόμενων ετικετών.",
|
||||
"account_edit_tags.search_placeholder": "Εισάγετε μια ετικέτα…",
|
||||
"account_edit_tags.suggestions": "Προτάσεις:",
|
||||
@ -866,7 +866,7 @@
|
||||
"lists.done": "Έγινε",
|
||||
"lists.edit": "Επεξεργασία λίστας",
|
||||
"lists.exclusive": "Απόκρυψη μελών από την Αρχική",
|
||||
"lists.exclusive_hint": "Αν κάποιος είναι σε αυτή τη λίστα, απόκρυψέ τον από την Αρχική σου για να αποφύγεις να βλέπεις τις αναρτήσεις του δύο φορές.",
|
||||
"lists.exclusive_hint": "Αν κάποιος είναι σε αυτή τη λίστα, απόκρυψέ τον από την Αρχική ροή σου για να αποφύγεις να βλέπεις τις αναρτήσεις του δύο φορές.",
|
||||
"lists.find_users_to_add": "Εύρεση χρηστών για προσθήκη",
|
||||
"lists.list_members_count": "{count, plural, one {# μέλος} other {# μέλη}}",
|
||||
"lists.list_name": "Όνομα λίστας",
|
||||
|
||||
@ -796,6 +796,7 @@
|
||||
"info_button.label": "Help",
|
||||
"info_button.what_is_alt_text": "<h1>What is alt text?</h1> <p>Alt text provides image descriptions for people with vision impairments, low-bandwidth connections, or those seeking extra context.</p> <p>You can improve accessibility and understanding for everyone by writing clear, concise, and objective alt text.</p> <ul> <li>Capture important elements</li> <li>Summarize text in images</li> <li>Use regular sentence structure</li> <li>Avoid redundant information</li> <li>Focus on trends and key findings in complex visuals (like diagrams or maps)</li> </ul>",
|
||||
"interaction_modal.action": "To interact with {name}'s post, you need to sign into your account on whatever Mastodon server you use.",
|
||||
"interaction_modal.action_follow": "To follow {name}, you need to sign into your account on whatever Mastodon server you use.",
|
||||
"interaction_modal.go": "Go",
|
||||
"interaction_modal.no_account_yet": "Don't have an account yet?",
|
||||
"interaction_modal.on_another_server": "On a different server",
|
||||
|
||||
@ -1043,9 +1043,9 @@
|
||||
"notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas",
|
||||
"notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement",
|
||||
"notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez l'expéditeur·ice",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez la personne",
|
||||
"notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées",
|
||||
"notifications.policy.title": "Gestion des notifications des …",
|
||||
"notifications.policy.title": "Gestion des notifications des…",
|
||||
"notifications_permission_banner.enable": "Activer les notifications de bureau",
|
||||
"notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications de bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.",
|
||||
"notifications_permission_banner.title": "Ne rien rater",
|
||||
|
||||
@ -1027,7 +1027,7 @@
|
||||
"notifications.group": "{count} notifications",
|
||||
"notifications.mark_as_read": "Marquer toutes les notifications comme lues",
|
||||
"notifications.permission_denied": "Impossible d’activer les notifications de bureau car l’autorisation a été refusée.",
|
||||
"notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée avant",
|
||||
"notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée auparavant",
|
||||
"notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car l’autorisation requise n’a pas été accordée.",
|
||||
"notifications.policy.accept": "Accepter",
|
||||
"notifications.policy.accept_hint": "Afficher dans les notifications",
|
||||
@ -1043,9 +1043,9 @@
|
||||
"notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas",
|
||||
"notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement",
|
||||
"notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez l'expéditeur·ice",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez la personne",
|
||||
"notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées",
|
||||
"notifications.policy.title": "Gestion des notifications des …",
|
||||
"notifications.policy.title": "Gestion des notifications des…",
|
||||
"notifications_permission_banner.enable": "Activer les notifications de bureau",
|
||||
"notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.",
|
||||
"notifications_permission_banner.title": "Toujours au courant",
|
||||
|
||||
@ -328,11 +328,15 @@
|
||||
"annual_report.summary.share_on_mastodon": "Comhroinn ar Mastodon",
|
||||
"attachments_list.unprocessed": "(neamhphróiseáilte)",
|
||||
"audio.hide": "Cuir fuaim i bhfolach",
|
||||
"block_modal.no_collections": "Ní féidir le ceachtar agaibh a chéile a chur le bailiúcháin. Bainfear sibh go huathoibríoch ó bhailiúcháin atá agaibh cheana féin, más infheidhme.",
|
||||
"block_modal.remote_users_caveat": "Iarrfaimid ar an bhfreastalaí {domain} meas a bheith agat ar do chinneadh. Mar sin féin, ní ráthaítear comhlíonadh toisc go bhféadfadh roinnt freastalaithe bloic a láimhseáil ar bhealach difriúil. Seans go mbeidh postálacha poiblí fós le feiceáil ag úsáideoirí nach bhfuil logáilte isteach.",
|
||||
"block_modal.show_less": "Taispeáin níos lú",
|
||||
"block_modal.show_more": "Taispeáin níos mó",
|
||||
"block_modal.they_cant_mention": "Ní féidir libh a chéile a lua, a leanúint ná a chéile a lua.",
|
||||
"block_modal.they_cant_see_posts": "Ní féidir leo d’ábhar a fheiceáil agus ní fheicfidh tú a gcuid ábhair.",
|
||||
"block_modal.they_will_know": "Is féidir leo a fheiceáil go bhfuil bac orthu.",
|
||||
"block_modal.title": "Úsáideoir a bhlocáil?",
|
||||
"block_modal.you_wont_see_mentions": "Ní fheicfidh tú poist ó dhaoine eile a luann iad.",
|
||||
"boost_modal.combo": "Is féidir leat {combo} a bhrú chun é seo a scipeáil an chéad uair eile",
|
||||
"boost_modal.reblog": "An post a threisiú?",
|
||||
"boost_modal.undo_reblog": "An deireadh a chur le postáil?",
|
||||
|
||||
@ -224,6 +224,7 @@
|
||||
"account_edit.profile_tab.show_media.title": "„Média” lap megjelenítése",
|
||||
"account_edit.profile_tab.show_media_replies.description": "Ha engedélyezve van, akkor a Média lap megjeleníti a bejegyzéseidet és a mások bejegyzéseihez írt válaszaidat.",
|
||||
"account_edit.profile_tab.show_media_replies.title": "Válaszok megjelenítése a „Média” lapon",
|
||||
"account_edit.profile_tab.show_relations.description": "A profilodban megjeleníti azokat a fiókokat, melyeket követsz, valamint a többi felhasználó követőit. Mások továbbra is látni fogják, hogy követed-e őket.",
|
||||
"account_edit.profile_tab.show_relations.title": "„Követők” és „Követettek” megjelenítése",
|
||||
"account_edit.profile_tab.subtitle": "A profil megjelenítésének testreszabása.",
|
||||
"account_edit.profile_tab.title": "Profil megjelenítési beállításai",
|
||||
@ -327,6 +328,7 @@
|
||||
"annual_report.summary.share_on_mastodon": "Megosztás a Mastodonon",
|
||||
"attachments_list.unprocessed": "(feldolgozatlan)",
|
||||
"audio.hide": "Hang elrejtése",
|
||||
"block_modal.no_collections": "Egyikőtök sem adhatja hozzá a másikat gyűjteményekhez. Automatikusan el is lesztek távolítva az egymás gyűjteményéből.",
|
||||
"block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.",
|
||||
"block_modal.show_less": "Kevesebb mutatása",
|
||||
"block_modal.show_more": "Több mutatása",
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
"account.familiar_followers_many": "Yeṭṭafaṛ-it {name1} d {name2}, akked {othersCount, plural, one {yiwen nniḍen i tessneḍ} other {# nniḍen i tessneḍ}}",
|
||||
"account.familiar_followers_one": "Yeṭṭafar-it {name1}",
|
||||
"account.familiar_followers_two": "Yeṭṭafar-it {name1} akked {name2}",
|
||||
"account.featured": "Ufrinen",
|
||||
"account.featured.accounts": "Imeɣna",
|
||||
"account.featured.collections": "Tilkensa",
|
||||
"account.featured.new_collection": "Talkensit tamaynut",
|
||||
@ -68,6 +69,8 @@
|
||||
"account.join_modal.me_today": "Ass-a, d ass-ik⋅im amezwaru deg {server}!",
|
||||
"account.join_modal.other": "{name} yerna-d ɣer {server} ass n",
|
||||
"account.join_modal.other_today": "D ass amezwaru n {name} ɣef {server}!",
|
||||
"account.join_modal.share.intro": "Bḍu izen anida deg-s ad temmeslayeḍ fell-ak⋅am",
|
||||
"account.join_modal.years": "{number, plural, one {n useggas} other {n iseggasen}}",
|
||||
"account.joined_short": "Izeddi da seg ass n",
|
||||
"account.languages": "Beddel tutlayin yettwajerden",
|
||||
"account.last_active": "Armud aneggaru",
|
||||
@ -87,6 +90,7 @@
|
||||
"account.menu.remove_follower": "Kkes aneḍfar",
|
||||
"account.menu.report": "Cetki ɣef umiḍan-a",
|
||||
"account.menu.share": "Zuzer…",
|
||||
"account.menu.unblock": "Kkes asewḥel i umiḍan",
|
||||
"account.moved_to": "{name} yenna-d dakken amiḍan-is amaynut yuɣal :",
|
||||
"account.mute": "Sgugem @{name}",
|
||||
"account.mute_notifications_short": "Susem ilɣa",
|
||||
@ -141,6 +145,7 @@
|
||||
"account_edit.display_name.edit_label": "Ẓreg isem ara d-yettwaskanen",
|
||||
"account_edit.display_name.title": "Isem ara d-yettwaskanen",
|
||||
"account_edit.featured_hashtags.edit_label": "Rnu ihacṭagen",
|
||||
"account_edit.featured_hashtags.title": "Ihacṭagen ufrinen",
|
||||
"account_edit.field_actions.delete": "Kkes urti",
|
||||
"account_edit.field_actions.edit": "Ẓreg urti",
|
||||
"account_edit.field_delete_modal.delete_button": "Kkes",
|
||||
@ -167,6 +172,7 @@
|
||||
"account_edit.name_modal.add_title": "Rnu isem ara d-yettwaskanen",
|
||||
"account_edit.name_modal.edit_title": "Ẓreg isem ara d-yettwaskanen",
|
||||
"account_edit.profile_tab.button_label": "Sagen",
|
||||
"account_edit.profile_tab.show_featured.title": "Sken-d accer n \"Ufrinen\"",
|
||||
"account_edit.save": "Sekles",
|
||||
"account_edit.upload_modal.back": "Uɣal",
|
||||
"account_edit.upload_modal.done": "Dayen",
|
||||
@ -179,12 +185,16 @@
|
||||
"account_edit.upload_modal.title_add.header": "Rnu tawlaft n tduli",
|
||||
"account_edit.upload_modal.title_replace.avatar": "Semselsi tawlaft n umaɣnu",
|
||||
"account_edit.upload_modal.title_replace.header": "Semselsi tawlaft n tduli",
|
||||
"account_edit.verified_modal.invisible_link.summary": "Amek ara rreɣ aseɣwen-nni ur yettban ara?",
|
||||
"account_edit.verified_modal.title": "Amek ara ternuḍ aseɣwen yettuselknen",
|
||||
"account_edit_tags.add_tag": "Rnu #{tagName}",
|
||||
"account_edit_tags.column_title": "Asiẓreg n yihacṭagen",
|
||||
"account_edit_tags.search_placeholder": "Sekcem-d ahacṭag…",
|
||||
"account_edit_tags.suggestions": "Isumren:",
|
||||
"account_edit_tags.tag_status_count": "{count, plural, one {# n yizen} other {# n yiznan}}",
|
||||
"account_list.total": "{total, plural, one {# n umiḍan} other {# n imiḍanen}}",
|
||||
"account_note.placeholder": "Ulac iwenniten",
|
||||
"admin.dashboard.retention.cohort": "Ajerred deg ayyur",
|
||||
"admin.dashboard.retention.cohort_size": "Iseqdacen imaynuten",
|
||||
"alert.rate_limited.message": "Ma ulac aɣilif ɛreḍ tikelt-nniḍen akka {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Aktum s talast",
|
||||
@ -223,6 +233,7 @@
|
||||
"block_modal.title": "Sewḥel aseqdac ?",
|
||||
"boost_modal.combo": "Tzemreḍ ad tsiteḍ ɣef {combo} akken ad tzegleḍ aya tikelt i d-iteddun",
|
||||
"boost_modal.reblog": "Zuzer tasuffeɣt?",
|
||||
"boost_modal.undo_reblog": "Semmet azuzer n yizen-a?",
|
||||
"bundle_column_error.copy_stacktrace": "Nɣel tuccḍa n uneqqis",
|
||||
"bundle_column_error.error.title": "Uh, ala !",
|
||||
"bundle_column_error.network.body": "Teḍra-d tuccḍa deg usali n usebter-a. Aya yezmer ad yili d ugur akudan deg tuqqna-inek·inem ɣer internet neɣ deg uqeddac-a.",
|
||||
@ -234,6 +245,7 @@
|
||||
"bundle_modal_error.close": "Mdel",
|
||||
"bundle_modal_error.retry": "Ɛreḍ tikelt-nniḍen",
|
||||
"callout.dismiss": "Zgel-it",
|
||||
"character_counter.required": "{currentLength}/{maxLength} n yisekkilen",
|
||||
"closed_registrations_modal.description": "Asnulfu n umiḍan deg {domain} mačči d ayen izemren ad yili, maca ttxil-k·m, err deg lbal-ik·im belli ur teḥwaǧeḍ ara amiḍan s wudem ibanen ɣef {domain} akken ad tesqedceḍ Mastodon.",
|
||||
"closed_registrations_modal.find_another_server": "Aff-d aqeddac nniḍen",
|
||||
"closed_registrations_modal.title": "Ajerred deg Masṭudun",
|
||||
@ -243,6 +255,8 @@
|
||||
"collection.share_modal.title": "Bḍu talkensit",
|
||||
"collection.share_modal.title_new": "Zuzer talkensit-ik·im tamaynut!",
|
||||
"collections.account_count": "{count, plural, one {# n umiḍan} other {# n imiḍanen}}",
|
||||
"collections.accounts.empty_description": "Rnu alamma d {count} n imiḍanen",
|
||||
"collections.accounts.empty_editor_title": "Ulac ula yiwen ɛad deg telkensit-a",
|
||||
"collections.accounts.empty_title": "Talkensit-a d tilemt",
|
||||
"collections.block_collection_owner": "Sewḥel amiḍan",
|
||||
"collections.by_account": "sɣur {account_handle}",
|
||||
@ -262,12 +276,14 @@
|
||||
"collections.detail.revoke_inclusion": "Kkes-iyi",
|
||||
"collections.detail.sensitive_content": "Agbur amḥulfu",
|
||||
"collections.detail.share": "Zuzer talkensit-a",
|
||||
"collections.detail.you_are_in_this_collection": "Aql-ik⋅em ɣer sdat deg telsenkit-a",
|
||||
"collections.edit_details": "Ẓreg talqayt",
|
||||
"collections.hidden_accounts_link": "{count, plural, one {# n umiḍan uffir} other {# n imiḍanen yettwaffaren}}",
|
||||
"collections.hints.accounts_counter": "{count}/{max} n imiḍanen",
|
||||
"collections.last_updated_at": "Taẓrigt taneggarut: {date}",
|
||||
"collections.list.created_by_author": "D-yesnulfa {name}",
|
||||
"collections.list.created_by_you": "D-tesnulfaḍ",
|
||||
"collections.list.featuring_you": "Yid-k⋅m",
|
||||
"collections.manage_accounts": "Sefrek imiḍanen",
|
||||
"collections.name_length_hint": "talast n 40 n yisekkilen",
|
||||
"collections.new_collection": "Talkensit tamaynut",
|
||||
@ -276,6 +292,7 @@
|
||||
"collections.revoke_collection_inclusion": "Kkes-iyi seg telkensit-a",
|
||||
"collections.search_accounts_label": "Nadi ɣef umiḍan ara ternuḍ",
|
||||
"collections.share_short": "Bḍu",
|
||||
"collections.suggestions.can_not_add": "Ur tezmireḍ ara ad t-ternuḍt",
|
||||
"collections.view_collection": "Wali talkensit",
|
||||
"collections.visibility_public": "Azayaz",
|
||||
"collections.visibility_title": "Abani",
|
||||
@ -290,6 +307,7 @@
|
||||
"column.edit_list": "Ẓreg tabdart",
|
||||
"column.favourites": "Imenyafen",
|
||||
"column.firehose": "Isuddam usriden",
|
||||
"column.firehose_singular": "Asuddem usrid",
|
||||
"column.follow_requests": "Isuturen n teḍfeṛt",
|
||||
"column.home": "Agejdan",
|
||||
"column.list_members": "Sefrek iεeggalen n tebdart",
|
||||
@ -299,6 +317,7 @@
|
||||
"column.other_collections": "Tilkensa sɣur {name}",
|
||||
"column.pins": "Tisuffaɣ yettwasenṭḍen",
|
||||
"column.public": "Tasuddemt tamatut",
|
||||
"column.your_collections": "Tilkensa-k·m",
|
||||
"column_back_button.label": "Tuɣalin",
|
||||
"column_header.hide_settings": "Ffer iɣewwaṛen",
|
||||
"column_header.moveLeft_settings": "Err ajgu ɣer tama tazelmaḍt",
|
||||
@ -355,6 +374,7 @@
|
||||
"confirmations.follow_to_list.confirm": "Ḍfeṛ-it sakin rnu-t ɣer tebdart",
|
||||
"confirmations.follow_to_list.title": "Ḍfer aseqdac?",
|
||||
"confirmations.hide_featured_tab.confirm": "Ffer accer",
|
||||
"confirmations.hide_featured_tab.title": "Ffer accer n \"Ufrinen\"?",
|
||||
"confirmations.logout.confirm": "Ffeɣ",
|
||||
"confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?",
|
||||
"confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?",
|
||||
@ -432,11 +452,13 @@
|
||||
"emoji_button.symbols": "Izamulen",
|
||||
"emoji_button.travel": "Imeḍqan d Yinigen",
|
||||
"empty_column.account_featured_self.no_collections_button": "Snulfu-d talkensit",
|
||||
"empty_column.account_featured_self.no_collections_hide_tab": "Ɣumm accer-a",
|
||||
"empty_column.account_suspended": "Amiḍan yettwaḥbas",
|
||||
"empty_column.account_timeline": "Ulac tisuffaɣ da !",
|
||||
"empty_column.account_unavailable": "Ur nufi ara amaɣnu-ayi",
|
||||
"empty_column.blocks": "Ur tesḥebseḍ ula yiwen n umseqdac ar tura.",
|
||||
"empty_column.bookmarked_statuses": "Ulac kra n tsuffeɣt i terniḍ ɣer yismenyifen-ik·im ar tura. Ticki terniḍ yiwet, ad d-tettwasken da.",
|
||||
"empty_column.collections.featured_in": "Ur-k yerni ḥedd ɛad ɣer kra n telkensit.",
|
||||
"empty_column.community": "Tasuddemt tazayezt tadigant n yisallen d tilemt. Aru ihi kra akken ad tt-teččareḍ!",
|
||||
"empty_column.domain_blocks": "Ulac kra n taɣult yettwaffren ar tura.",
|
||||
"empty_column.explore_statuses": "Ulac ayen yellan d anezzuɣ akka tura. Uɣal-d ticki!",
|
||||
@ -458,6 +480,7 @@
|
||||
"explore.trending_tags": "Ihacṭagen",
|
||||
"featured_carousel.current": "<sr>Izen wis</sr> {current, number} / {max, number}",
|
||||
"featured_carousel.header": "{count, plural, one {n tsuffeɣt tunṭiḍt} other {n tsuffaɣ tunṭiḍin}}",
|
||||
"featured_carousel.slide": "Iznen {current, number} ɣef {max, number}",
|
||||
"featured_tags.more_items": "+{count}",
|
||||
"featured_tags.suggestions.add": "Rnu",
|
||||
"featured_tags.suggestions.dismiss": "Uhu, tanemmirt",
|
||||
|
||||
@ -43,6 +43,7 @@
|
||||
"account.featured": "Utvald",
|
||||
"account.featured.accounts": "Profilar",
|
||||
"account.featured.collections": "Samlingar",
|
||||
"account.featured.new_collection": "Ny samling",
|
||||
"account.field_overflow": "Vis heile innhaldet",
|
||||
"account.filters.all": "All aktivitet",
|
||||
"account.filters.boosts_toggle": "Vis framhevingar",
|
||||
@ -68,6 +69,16 @@
|
||||
"account.go_to_profile": "Gå til profil",
|
||||
"account.hide_reblogs": "Gøym framhevingar frå @{name}",
|
||||
"account.in_memoriam": "Til minne om.",
|
||||
"account.join_modal.day": "Dag",
|
||||
"account.join_modal.me": "Du vart medlem av {server} den",
|
||||
"account.join_modal.me_anniversary": "God allheimsbursdag! Du vart medlem av {server} den",
|
||||
"account.join_modal.me_today": "Det er fyrste dagen din på {server}!",
|
||||
"account.join_modal.other": "{name} vart medlem av {server} den",
|
||||
"account.join_modal.other_today": "{name} har sin fyrste dag på {server}!",
|
||||
"account.join_modal.share.celebrate": "Skriv eit jubileumsinnlegg",
|
||||
"account.join_modal.share.intro": "Skriv eit introduksjonsinnlegg",
|
||||
"account.join_modal.share.welcome": "Skriv eit velkomstinnlegg",
|
||||
"account.join_modal.years": "{number, plural, one {år} other {år}}",
|
||||
"account.joined_short": "Vart med",
|
||||
"account.languages": "Endre språktingingar",
|
||||
"account.last_active": "Sist aktiv",
|
||||
|
||||
@ -324,11 +324,15 @@
|
||||
"annual_report.summary.share_on_mastodon": "Ndajeni në Mastodon me të tjerë",
|
||||
"attachments_list.unprocessed": "(e papërpunuar)",
|
||||
"audio.hide": "Fshihe audion",
|
||||
"block_modal.no_collections": "Asnjë prej jush s’mund shtojë tjetrin te koleksione. Do të hiqeni automatikisht nga koleksionne ekzistuese të njëri-tjetrit, nëse ka vend.",
|
||||
"block_modal.remote_users_caveat": "Do t’i kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi s’është i garantuar, ngaqë disa shërbyes mund t’i trajtojnë ndryshe bllokimet. Psotimet publike mundet të jenë ende të dukshme për përdorues pa bërë hyrje në llogari.",
|
||||
"block_modal.show_less": "Shfaq më pak",
|
||||
"block_modal.show_more": "Shfaq më tepër",
|
||||
"block_modal.they_cant_mention": "S’mund të përmendni, ndiqni, ose citoni njëri-tjetrin.",
|
||||
"block_modal.they_cant_see_posts": "S’mund të shohin lëndën tuaj dhe ju s’do të shihni të tyren.",
|
||||
"block_modal.they_will_know": "Mund të shohin se janë bllokuar.",
|
||||
"block_modal.title": "Të bllokohet përdoruesi?",
|
||||
"block_modal.you_wont_see_mentions": "S’do të shihni postime nga të tjerë që i përmendin ata.",
|
||||
"boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}",
|
||||
"boost_modal.reblog": "Përforcim postimi?",
|
||||
"boost_modal.undo_reblog": "Të hiqet përforcim për postimin?",
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import { StrictMode } from 'react';
|
||||
import { createRoot } from 'react-dom/client';
|
||||
|
||||
import { Globals } from '@react-spring/web';
|
||||
@ -33,7 +34,11 @@ function main() {
|
||||
await initializeEmoji();
|
||||
|
||||
const root = createRoot(mountNode);
|
||||
root.render(<Mastodon {...props} />);
|
||||
root.render(
|
||||
<StrictMode>
|
||||
<Mastodon {...props} />
|
||||
</StrictMode>,
|
||||
);
|
||||
store.dispatch(setupBrowserNotifications());
|
||||
|
||||
if (isProduction() && me && 'serviceWorker' in navigator) {
|
||||
|
||||
@ -231,75 +231,6 @@
|
||||
border-color: var(--color-border-error-soft);
|
||||
}
|
||||
|
||||
.account__header__fields {
|
||||
max-width: 100vw;
|
||||
padding: 0;
|
||||
margin: 15px -15px -15px;
|
||||
border: 0 none;
|
||||
border-top: 1px solid var(--color-border-primary);
|
||||
border-bottom: 1px solid var(--color-border-primary);
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
|
||||
dl {
|
||||
display: flex;
|
||||
border-bottom: 1px solid var(--color-border-primary);
|
||||
}
|
||||
|
||||
dt,
|
||||
dd {
|
||||
box-sizing: border-box;
|
||||
padding: 14px;
|
||||
text-align: center;
|
||||
max-height: 48px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 500;
|
||||
width: 120px;
|
||||
flex: 0 0 auto;
|
||||
color: var(--color-text-primary);
|
||||
background: var(--color-bg-secondary);
|
||||
}
|
||||
|
||||
dd {
|
||||
flex: 1 1 auto;
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text-brand);
|
||||
text-decoration: none;
|
||||
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.verified {
|
||||
border: 1px solid var(--color-border-success-soft);
|
||||
background: var(--color-bg-success-softest);
|
||||
|
||||
a {
|
||||
color: var(--color-text-success);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
&__mark {
|
||||
color: var(--color-text-success);
|
||||
}
|
||||
}
|
||||
|
||||
dl:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.directory__tag .trends__item__current {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
@ -1051,35 +1051,121 @@ a.name-tag,
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.account__header__fields,
|
||||
.account__header__content {
|
||||
&__fields,
|
||||
&__content {
|
||||
background: var(--color-bg-primary);
|
||||
border: 1px solid var(--color-border-primary);
|
||||
border-radius: 4px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.account__header__fields {
|
||||
margin: 0;
|
||||
&__fields {
|
||||
border: 1px solid var(--color-border-primary);
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
display: grid;
|
||||
grid-template-columns: 120px auto;
|
||||
grid-auto-flow: row;
|
||||
|
||||
dl {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
dt,
|
||||
dd {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
padding: 14px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid var(--color-border-primary);
|
||||
|
||||
&:last-of-type:not(.verified) {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 500;
|
||||
width: 120px;
|
||||
flex: 0 0 auto;
|
||||
color: var(--color-text-primary);
|
||||
background: var(--color-bg-secondary);
|
||||
}
|
||||
|
||||
dd {
|
||||
flex: 1 1 auto;
|
||||
color: var(--color-text-secondary);
|
||||
|
||||
&:first-of-type.verified {
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
|
||||
&:last-of-type.verified {
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text-brand);
|
||||
text-decoration: none;
|
||||
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
dl:first-child .verified {
|
||||
border-radius: 0 4px 0 0;
|
||||
}
|
||||
.verified {
|
||||
border: 1px solid var(--color-border-success-soft);
|
||||
background: var(--color-bg-success-softest);
|
||||
|
||||
.verified a {
|
||||
color: var(--color-text-success);
|
||||
a {
|
||||
color: var(--color-text-success);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
&__mark {
|
||||
color: var(--color-text-success);
|
||||
|
||||
> svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.account__header__content {
|
||||
&__content {
|
||||
box-sizing: border-box;
|
||||
padding: 20px;
|
||||
color: var(--color-text-primary);
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
overflow: hidden;
|
||||
word-break: normal;
|
||||
overflow-wrap: break-word;
|
||||
|
||||
p {
|
||||
margin-bottom: 20px;
|
||||
unicode-bidi: plaintext;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text-brand);
|
||||
text-decoration: none;
|
||||
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -8320,372 +8320,6 @@ noscript {
|
||||
}
|
||||
}
|
||||
|
||||
.account__header__content {
|
||||
color: var(--color-text-secondary);
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
overflow: hidden;
|
||||
word-break: normal;
|
||||
overflow-wrap: break-word;
|
||||
|
||||
p {
|
||||
margin-bottom: 20px;
|
||||
unicode-bidi: plaintext;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: underline;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.account__header {
|
||||
container: account-header / inline-size;
|
||||
|
||||
&.inactive {
|
||||
opacity: 0.5;
|
||||
|
||||
.account__header__image,
|
||||
.account__avatar {
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
}
|
||||
|
||||
&__info {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
inset-inline-end: 20px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
&__image {
|
||||
overflow: hidden;
|
||||
height: 145px;
|
||||
position: relative;
|
||||
background: var(--color-bg-tertiary);
|
||||
border-bottom: 1px solid var(--color-border-primary);
|
||||
|
||||
img {
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&__bar {
|
||||
position: relative;
|
||||
padding: 0 20px;
|
||||
border-bottom: 1px solid var(--color-border-primary);
|
||||
|
||||
.avatar {
|
||||
display: block;
|
||||
flex: 0 0 auto;
|
||||
|
||||
.account__avatar {
|
||||
background: var(--color-bg-primary);
|
||||
border: 1px solid var(--color-border-primary);
|
||||
border-radius: var(--avatar-border-radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__tabs {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
margin-top: -55px;
|
||||
padding-top: 10px;
|
||||
gap: 8px;
|
||||
overflow: hidden;
|
||||
margin-inline-start: -2px; // aligns the pfp with content below
|
||||
|
||||
&__name {
|
||||
margin-top: 16px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
.emojione {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 17px;
|
||||
line-height: 22px;
|
||||
color: var(--color-text-primary);
|
||||
font-weight: 600;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
small {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: var(--color-text-secondary);
|
||||
font-weight: 400;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
span {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
user-select: all;
|
||||
}
|
||||
|
||||
.icon-lock {
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.spacer {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
}
|
||||
|
||||
&__follow-button {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
&__buttons {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
|
||||
$button-breakpoint: 420px;
|
||||
$button-fallback-breakpoint: $button-breakpoint + 55px;
|
||||
|
||||
&--desktop {
|
||||
margin-top: 55px;
|
||||
|
||||
@container (width < #{$button-breakpoint}) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@supports (not (container-type: inline-size)) {
|
||||
@media (max-width: #{$button-fallback-breakpoint}) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--mobile {
|
||||
margin-block: 16px;
|
||||
|
||||
@container (width >= #{$button-breakpoint}) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@supports (not (container-type: inline-size)) {
|
||||
@media (min-width: ($button-fallback-breakpoint + 1px)) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button {
|
||||
flex-shrink: 1;
|
||||
white-space: nowrap;
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
.icon-button {
|
||||
border: 1px solid var(--color-border-primary);
|
||||
border-radius: 4px;
|
||||
box-sizing: content-box;
|
||||
padding: 5px;
|
||||
|
||||
.icon {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
&.copied {
|
||||
border-color: var(--color-text-success);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__bio {
|
||||
.account__header__content {
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
|
||||
.account__header__fields {
|
||||
margin: 0;
|
||||
margin-top: 16px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid var(--color-border-primary);
|
||||
|
||||
dl {
|
||||
display: block;
|
||||
padding: 11px 16px;
|
||||
border-bottom-color: var(--color-border-primary);
|
||||
}
|
||||
|
||||
dd,
|
||||
dt {
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
padding: 0;
|
||||
text-align: initial;
|
||||
}
|
||||
|
||||
dt {
|
||||
width: auto;
|
||||
background: transparent;
|
||||
text-transform: uppercase;
|
||||
color: var(--color-text-tertiary);
|
||||
}
|
||||
|
||||
dd {
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text-brand);
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
.verified {
|
||||
border: 1px solid var(--color-text-success);
|
||||
margin-top: -1px;
|
||||
margin-inline: -1px;
|
||||
|
||||
&:first-child {
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
dt,
|
||||
dd {
|
||||
color: var(--color-text-success);
|
||||
}
|
||||
|
||||
dd {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
|
||||
span {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text-success);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__extra {
|
||||
margin-top: 16px;
|
||||
|
||||
&__links {
|
||||
font-size: 14px;
|
||||
color: var(--color-text-secondary);
|
||||
margin: 0 -10px;
|
||||
padding-top: 16px;
|
||||
padding-bottom: 10px;
|
||||
|
||||
a {
|
||||
display: inline-block;
|
||||
color: var(--color-text-secondary);
|
||||
text-decoration: none;
|
||||
padding: 5px 10px;
|
||||
font-weight: 500;
|
||||
|
||||
strong {
|
||||
font-weight: 700;
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__account-note {
|
||||
color: var(--color-text-primary);
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
margin-bottom: 10px;
|
||||
|
||||
&__loading-indicator-wrapper {
|
||||
position: relative;
|
||||
height: 37px;
|
||||
|
||||
.loading-indicator {
|
||||
left: 10px;
|
||||
}
|
||||
|
||||
.circular-progress {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
color: var(--color-text-secondary);
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
width: calc(100% + 20px);
|
||||
color: var(--color-text-primary);
|
||||
background: transparent;
|
||||
padding: 10px;
|
||||
margin: 0 -10px;
|
||||
font-family: inherit;
|
||||
font-size: 14px;
|
||||
resize: none;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
border-radius: 4px;
|
||||
|
||||
&::placeholder {
|
||||
color: var(--color-text-tertiary);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background: var(--color-bg-brand-softest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.account__contents {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@ -21,6 +21,9 @@ class PermalinkRedirector
|
||||
elsif accounts_request? && record_integer_id_request?
|
||||
account = Account.find_by(id: second_segment)
|
||||
account if !account&.local? && !account&.suspended?
|
||||
elsif collections_request? && record_integer_id_request?
|
||||
collection = Collection.find_by(id: second_segment)
|
||||
collection if !collection&.local? && !collection&.account&.suspended?
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -43,6 +46,8 @@ class PermalinkRedirector
|
||||
redirect_account_path(object.id)
|
||||
when 'Status'
|
||||
redirect_status_path(object.id)
|
||||
when 'Collection'
|
||||
redirect_collection_path(object.id)
|
||||
else
|
||||
@path.delete_prefix('/deck') if @path.start_with?('/deck')
|
||||
end
|
||||
@ -70,6 +75,10 @@ class PermalinkRedirector
|
||||
first_segment == 'accounts'
|
||||
end
|
||||
|
||||
def collections_request?
|
||||
first_segment == 'collections'
|
||||
end
|
||||
|
||||
def record_integer_id_request?
|
||||
second_segment =~ /\d/
|
||||
end
|
||||
|
||||
@ -30,7 +30,7 @@ class CollectionItem < ApplicationRecord
|
||||
|
||||
delegate :local?, :remote?, to: :collection
|
||||
|
||||
validates :account_id, uniqueness: { scope: :collection_id }
|
||||
validates :account_id, uniqueness: { scope: :collection_id, allow_nil: true }
|
||||
validates :position, numericality: { only_integer: true, greater_than: 0 }
|
||||
validates :activity_uri, presence: true, if: :local_item_with_remote_account?
|
||||
validates :approval_uri, presence: true, unless: -> { local? || account&.local? || !accepted? }
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
-# locals: (field:, account:)
|
||||
%dl
|
||||
%dt.emojify{ title: field.name }
|
||||
= prerender_custom_emojis(h(field.name), account.emojis)
|
||||
%dd{ title: field.value, class: field_verified_class(field.verified?) }
|
||||
- if field.verified?
|
||||
%span.verified__mark{ title: t('accounts.link_verified_on', date: l(field.verified_at)) }
|
||||
= material_symbol 'check'
|
||||
= prerender_custom_emojis(account_field_value_format(field, with_rel_me: false), account.emojis)
|
||||
%dt.emojify{ title: field.name }
|
||||
= prerender_custom_emojis(h(field.name), account.emojis)
|
||||
%dd{ title: field.value, class: field_verified_class(field.verified?) }
|
||||
- if field.verified?
|
||||
%span.verified__mark{ title: t('accounts.link_verified_on', date: l(field.verified_at)) }
|
||||
= material_symbol 'check'
|
||||
= prerender_custom_emojis(account_field_value_format(field, with_rel_me: false), account.emojis)
|
||||
|
||||
@ -11,12 +11,12 @@
|
||||
.admin-account-bio
|
||||
- if @account.fields?
|
||||
%div
|
||||
.account__header__fields
|
||||
%dl.admin-account-bio__fields
|
||||
= render partial: 'field', collection: @account.fields, locals: { account: @account }
|
||||
|
||||
- if @account.note?
|
||||
%div
|
||||
.account__header__content.emojify
|
||||
.admin-account-bio__content.emojify
|
||||
= prerender_custom_emojis(account_bio_format(@account), @account.emojis)
|
||||
|
||||
= render 'admin/accounts/counters', account: @account
|
||||
|
||||
@ -61,14 +61,11 @@
|
||||
wrapper: :with_block_label
|
||||
|
||||
- if approved_registrations? && @invite.blank?
|
||||
%p.lead= t('auth.sign_up.manual_review', domain: site_hostname)
|
||||
|
||||
.fields-group
|
||||
= f.simple_fields_for :invite_request, resource.invite_request || resource.build_invite_request do |invite_request_fields|
|
||||
= invite_request_fields.input :text,
|
||||
as: :text,
|
||||
hint: false,
|
||||
label: false,
|
||||
hint: t('auth.sign_up.manual_review', domain: site_hostname),
|
||||
input_html: { maxlength: UserInviteRequest::TEXT_SIZE_LIMIT },
|
||||
required: Setting.require_invite_text,
|
||||
wrapper: :with_block_label
|
||||
|
||||
@ -18,7 +18,7 @@ FileUtils.chdir APP_ROOT do
|
||||
system('bundle check') || system!('bundle install')
|
||||
|
||||
puts "\n== Installing JS dependencies =="
|
||||
system! 'corepack enable'
|
||||
system! 'npm i -g corepack'
|
||||
system! 'bin/yarn install --immutable'
|
||||
|
||||
puts "\n== Preparing database =="
|
||||
|
||||
@ -484,8 +484,10 @@ da:
|
||||
title: Blokér nyt e-maildomæne
|
||||
no_email_domain_block_selected: Ingen e-maildomæneblokeringer ændret (ingen var valgt)
|
||||
not_permitted: Ikke tilladt
|
||||
reset: Nulstil
|
||||
resolved_dns_records_hint_html: Domænenavnet opløses til flg. MX-domæner, som i sidste ende er ansvarlige for e-mailmodtagelse. Blokering af et MX-domæne blokerer også tilmeldinger fra enhver e-mailadresse på det pågældende MX-domæne, selv hvis det synlige domænenavn er et andet. <strong>Pas på ikke at blokere større e-mailudbydere.</strong>
|
||||
resolved_through_html: Opløst via %{domain}
|
||||
search: Søg
|
||||
title: Blokerede e-maildomæner
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
|
||||
@ -484,8 +484,10 @@ de:
|
||||
title: Neue E-Mail-Domain sperren
|
||||
no_email_domain_block_selected: Es wurden keine E-Mail-Domain-Sperren geändert, da keine ausgewählt wurden
|
||||
not_permitted: Nicht erlaubt
|
||||
reset: Zurücksetzen
|
||||
resolved_dns_records_hint_html: Die Domain wird zu den folgenden MX-Domains aufgelöst, die für die Annahme von E-Mails zuständig sind. Das Sperren einer MX-Domain sperrt Anmeldungen aller E-Mail-Adressen, die dieselbe MX-Domain verwenden, auch wenn die sichtbare Domain anders lautet. <strong>Achte daher darauf, keine großen E-Mail-Anbieter versehentlich zu sperren.</strong>
|
||||
resolved_through_html: Durch %{domain} aufgelöst
|
||||
search: Suchen
|
||||
title: Gesperrte E-Mail-Domains
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
@ -495,26 +497,39 @@ de:
|
||||
hint: Bisher wurden keine Konten abonniert.
|
||||
no_lists_yet: Noch keine Listen vorhanden
|
||||
inactive: Deaktiviert
|
||||
last_email: Letzte E-Mail
|
||||
lead: Konten, die die Funktion aktiviert haben und abonniert wurden, werden unten angezeigt.
|
||||
status: Status
|
||||
subscribers: Abonnent*innen
|
||||
title: Mailingliste
|
||||
additional_footer_texts:
|
||||
show:
|
||||
title: Fußzeile
|
||||
compliance_settings:
|
||||
additional_footer_text:
|
||||
action: Verwalten
|
||||
hint: Der Text erscheint ausschließlich in der Fußzeile von E-Mails
|
||||
title: Fußzeile
|
||||
lead: E-Mail-Newsletter können abhängig vom geltenden Recht als Marketing-E-Mails betrachtet werden.
|
||||
privacy_policy:
|
||||
action: Verwalten
|
||||
hint: Die Datenschutzerklärung wird in der Fußzeile jeder E-Mail beigefügt
|
||||
title: Datenschutzerklärung
|
||||
title: Einstellungen zur Einhaltung von Vorschriften
|
||||
danger_zone:
|
||||
disable_feature:
|
||||
action: Deaktivieren
|
||||
hint: Funktion für alle Konten deaktivieren
|
||||
title: Funktion deaktivieren
|
||||
erase_all_data:
|
||||
action: Daten löschen
|
||||
hint: Löscht dauerhaft alle E-Mails aus allen Mailinglisten
|
||||
title: Alle Daten löschen
|
||||
title: Gefahrenzone
|
||||
disabled_msg: E-Mail-Abonnements wurden erfolgreich deaktiviert.
|
||||
index:
|
||||
disabled:
|
||||
description: Diese Funktion ermöglicht bestimmten Konten, ein Widget zu ihrem Profil hinzuzufügen, damit Gäste ohne Mastodon-Konto deren Beiträge per E-Mail erhalten können.
|
||||
get_started: Loslegen
|
||||
lead: Ermögliche Gästen, Beiträge von ausgewählten Konten dieses Servers per E-Mail zu abonnieren.
|
||||
title: E-Mail-Newsletter
|
||||
@ -533,6 +548,11 @@ de:
|
||||
show:
|
||||
enable_feature: Funktionen aktivieren
|
||||
important_information: Wichtige Informationen
|
||||
list:
|
||||
1_permission_explanation: Wenn die Funktion aktiviert ist, können alle berechtigten Konten ein E-Mail-Formular zu ihrem Profil hinzufügen.
|
||||
2_feature_explanation: Sobald Gäste ein Profil abonnieren und das Abonnement bestätigen, werden sie E-Mails über neue öffentliche Beiträge des betreffenden Profils erhalten.
|
||||
3_privacy_policy_warning: Server-Admins werden Zugriff auf persönlich identifizierbare Informationen (E-Mail-Adressen) haben. Daher müssen die Datenschutzerklärung und Nutzungsbedingungen im Vorfeld aktualisiert werden, bevor diese Funktion verwendet werden kann.
|
||||
4_cost_warning: Abhängig vom Hosting-Provider können Gebühren für den E-Mail-Versand anfallen. Kläre für deinen Server vorher alle Details, da diese Funktion die Anzahl versendeter E-Mails drastisch erhöhen kann.
|
||||
export_domain_allows:
|
||||
new:
|
||||
title: Erlaubte Domains importieren
|
||||
@ -838,6 +858,7 @@ de:
|
||||
manage_custom_emojis: Emojis
|
||||
manage_custom_emojis_description: Spezielle Emojis dieses Servers verwalten
|
||||
manage_email_subscriptions: E-Mail-Abonnements
|
||||
manage_email_subscriptions_description: Konten mit dieser Berechtigung dürfen die Funktion für E-Mail-Newsletter verwenden
|
||||
manage_federation: Föderation
|
||||
manage_federation_description: Domains anderer Mastodon-Server sperren/zulassen – und Zustellbarkeit kontrollieren
|
||||
manage_invites: Einladungen
|
||||
|
||||
@ -484,8 +484,10 @@ el:
|
||||
title: Αποκλεισμός νέου τομέα email
|
||||
no_email_domain_block_selected: Δεν άλλαξαν οι αποκλεισμοί τομέα email καθώς δεν επιλέχθηκε κανένας
|
||||
not_permitted: Δεν επιτρέπεται
|
||||
reset: Επαναφορά
|
||||
resolved_dns_records_hint_html: Το όνομα τομέα επιλύεται στους ακόλουθους τομείς MX, οι οποίοι είναι τελικά υπεύθυνοι για την αποδοχή των email. Αποκλείοντας έναν τομέα MX θα αποκλείει τις εγγραφές από οποιαδήποτε διεύθυνση email που χρησιμοποιεί τον ίδιο τομέα MX, ακόμη και αν το ορατό όνομα τομέα είναι διαφορετικό. <strong>Προσέξτε να μην αποκλείσετε τους μεγάλους παρόχους ηλεκτρονικού ταχυδρομείου.</strong>
|
||||
resolved_through_html: Επιλύθηκε μέσω %{domain}
|
||||
search: Αναζήτηση
|
||||
title: Αποκλεισμένοι τομείς email
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
|
||||
@ -484,8 +484,10 @@ es-AR:
|
||||
title: Bloquear nuevo dominio de correo electrónico
|
||||
no_email_domain_block_selected: No se cambiaron bloqueos de dominio de correo electrónico, ya que no se seleccionó ninguno
|
||||
not_permitted: No permitidos
|
||||
reset: Restablecer
|
||||
resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. <strong>Tené cuidado de no bloquear los principales proveedores de correo electrónico.</strong>
|
||||
resolved_through_html: Resuelto a través de %{domain}
|
||||
search: Buscar
|
||||
title: Dominios bloqueados de correo electrónico
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
|
||||
@ -484,8 +484,10 @@ es-MX:
|
||||
title: Bloquear nuevo dominio de correo
|
||||
no_email_domain_block_selected: No se han cambiado bloqueos de dominio de correo, ya que ninguno ha sido seleccionado
|
||||
not_permitted: No permitido
|
||||
reset: Restablecer
|
||||
resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. <strong>Ten cuidado de no bloquear los principales proveedores de correo electrónico.</strong>
|
||||
resolved_through_html: Resuelto a través de %{domain}
|
||||
search: Buscar
|
||||
title: Dominios de correo bloqueados
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
@ -496,7 +498,7 @@ es-MX:
|
||||
no_lists_yet: No hay listas todavía
|
||||
inactive: Inactiva
|
||||
last_email: Último correo electrónico
|
||||
lead: Las cuentas que han habilitado la función y tienen suscriptores se mostrarán a continuación.
|
||||
lead: A continuación se mostrarán las cuentas que hayan activado la función y tengan suscriptores.
|
||||
status: Estado
|
||||
subscribers: Suscriptores
|
||||
title: Listas de correo
|
||||
@ -506,33 +508,33 @@ es-MX:
|
||||
compliance_settings:
|
||||
additional_footer_text:
|
||||
action: Administrar
|
||||
hint: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de noticias
|
||||
hint: Texto opcional que aparece únicamente en el pie de página de los correos electrónicos del boletín informativo
|
||||
title: Texto de pie de página adicional
|
||||
lead: Los boletines de correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operas.
|
||||
lead: Los boletines informativos por correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operes.
|
||||
privacy_policy:
|
||||
action: Administrar
|
||||
hint: Esta política está enlazada en el pie de cada correo electrónico
|
||||
hint: Esta política aparece en el pie de página de cada correo electrónico
|
||||
title: Política de privacidad
|
||||
title: Ajustes de cumplimiento normativo
|
||||
danger_zone:
|
||||
disable_feature:
|
||||
action: Desactivar
|
||||
hint: Desactivar función para todas las cuentas
|
||||
hint: Desactivar la función para todas las cuentas
|
||||
title: Desactivar función
|
||||
erase_all_data:
|
||||
action: Borrar datos
|
||||
hint: Borra permanentemente todos los correos electrónicos de todas las listas de correo
|
||||
title: Borrar todos los datos
|
||||
action: Eliminar datos
|
||||
hint: Elimina de forma permanente todos los correos electrónicos de todas las listas de correo
|
||||
title: Eliminar todos los datos
|
||||
title: Zona peligrosa
|
||||
disabled_msg: Las suscripciones de correo electrónico se han desactivado correctamente.
|
||||
disabled_msg: Las suscripciones por correo electrónico se han desactivado correctamente.
|
||||
index:
|
||||
disabled:
|
||||
cannot_be_enabled: Tu proveedor técnico no ha habilitado esta función para tu servidor.
|
||||
description: Esta función permite a las cuentas especificadas añadir un widget a sus perfiles, permitiendo a los visitantes sin una cuenta de Mastodon recibir sus publicaciones por correo electrónico.
|
||||
description: Esta función permite a las cuentas especificadas añadir un widget a sus perfiles, lo que permite a los visitantes que no tienen una cuenta de Mastodon recibir sus publicaciones por correo electrónico.
|
||||
get_started: Primeros pasos
|
||||
lead: Permitir a los visitantes recibir publicaciones por correo electrónico de cuentas dedicadas en este servidor.
|
||||
title: Boletines de correo electrónico
|
||||
purged_msg: Todos los datos de las suscripciones de correo electrónico están siendo borrados.
|
||||
lead: Permitir que los visitantes reciban publicaciones por correo electrónico desde cuentas específicas de este servidor.
|
||||
title: Boletines informativos por correo electrónico
|
||||
purged_msg: Se están borrando todos los datos de las suscripciones por correo electrónico.
|
||||
roles:
|
||||
accounts: Cuentas
|
||||
edit_role: Editar rol
|
||||
@ -545,13 +547,13 @@ es-MX:
|
||||
title: Roles
|
||||
setups:
|
||||
show:
|
||||
enable_feature: Activar función
|
||||
enable_feature: Habilitar función
|
||||
important_information: Información importante
|
||||
list:
|
||||
1_permission_explanation: Cuando esta función está activada, las cuentas con los permisos designados pueden añadir un formulario de recopilación de correo electrónico a sus perfiles.
|
||||
2_feature_explanation: Cuando los visitantes se registran en la página de perfil de una cuenta y confirman su suscripción, comenzarán a recibir actualizaciones por correo electrónico cuando la cuenta cree nuevas publicaciones públicas.
|
||||
3_privacy_policy_warning: Los administradores del servidor tendrán acceso a información de identificación personal (direcciones de correo electrónico). Por lo tanto, la política de privacidad y los Términos del Servicio del servidor deben actualizarse antes de usar esta función.
|
||||
4_cost_warning: Los correos electrónicos pueden incurrir en un cargo dependiendo de la configuración del alojamiento. Habla con tu proveedor de alojamiento antes de activarlo, ya que esta característica podría aumentar drásticamente la cantidad de correos electrónicos enviados desde tu servidor.
|
||||
1_permission_explanation: Cuando esta función está habilitada, las cuentas con los permisos correspondientes pueden añadir un formulario de recopilación de correos electrónicos a sus perfiles.
|
||||
2_feature_explanation: Cuando los visitantes se suscriban en la página de perfil de una cuenta y confirmen su suscripción, empezarán a recibir notificaciones por correo electrónico cada vez que la cuenta publique nuevas entradas públicas.
|
||||
3_privacy_policy_warning: Los administradores del servidor tendrán acceso a la información de identificación personal (direcciones de correo electrónico) recopilada. Por lo tanto, es necesario actualizar la política de privacidad y los Términos de servicio del servidor antes de utilizar esta función.
|
||||
4_cost_warning: El envío de correos electrónicos puede conllevar un cargo adicional dependiendo de la configuración del alojamiento web. Consúltalo con tu proveedor de alojamiento antes de habilitar esta función, ya que podría aumentar considerablemente el volumen de correos electrónicos enviados desde tu servidor.
|
||||
export_domain_allows:
|
||||
new:
|
||||
title: Importar dominios permitidos
|
||||
@ -857,7 +859,7 @@ es-MX:
|
||||
manage_custom_emojis: Administrar Emojis Personalizados
|
||||
manage_custom_emojis_description: Permite a los usuarios gestionar emojis personalizados en el servidor
|
||||
manage_email_subscriptions: Gestionar suscripciones por correo electrónico
|
||||
manage_email_subscriptions_description: Permite a los usuarios con este permiso habilitar la función del boletín de noticias por correo electrónico para su cuenta
|
||||
manage_email_subscriptions_description: Permitir a los usuarios con este permiso activar la función de boletín informativo por correo electrónico en su cuenta
|
||||
manage_federation: Administrar Federación
|
||||
manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios, y controlar la entregabilidad
|
||||
manage_invites: Administrar Invitaciones
|
||||
|
||||
@ -484,8 +484,10 @@ es:
|
||||
title: Bloquear nuevo dominio de correo
|
||||
no_email_domain_block_selected: No se han cambiado bloqueos de dominio de correo, ya que ninguno ha sido seleccionado
|
||||
not_permitted: No permitido
|
||||
reset: Restablecer
|
||||
resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. <strong>Ten cuidado de no bloquear los principales proveedores de correo electrónico.</strong>
|
||||
resolved_through_html: Resuelto a través de %{domain}
|
||||
search: Buscar
|
||||
title: Dominios de correo bloqueados
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
|
||||
@ -539,6 +539,19 @@ et:
|
||||
empty:
|
||||
hint: Kellelgi pole õigust seda oskust kasutada.
|
||||
no_roles_added: Rolle pole lisatud
|
||||
lead: Järgmiste rollidega kontod saavad selle oskuse oma profiilis sisse lülitada.
|
||||
manage_roles: Halda rolle
|
||||
role_name: Rolli nimi
|
||||
title: Rollid
|
||||
setups:
|
||||
show:
|
||||
enable_feature: Luba oskus
|
||||
important_information: Oluline info
|
||||
list:
|
||||
1_permission_explanation: Kui see funktsioon on sisse lülitatud, saavad vastavate õigustega kontod lisada oma profiilidesse e-posti kogumise vormi.
|
||||
2_feature_explanation: Kui külastajad registreeruvad konto profiililehel ja kinnitavad tellimuse, hakkavad nad saama e-kirju, kui konto avaldab uusi avalikke postitusi.
|
||||
3_privacy_policy_warning: Serveri administraatoritel on juurdepääs kogutud isikuandmetele (e-posti aadressidele). Seetõttu tuleb enne selle funktsiooni kasutamist ajakohastada serveri privaatsuspoliitika ja kasutustingimused.
|
||||
4_cost_warning: Sõltuvalt veebimajutuse seadistustest võib e-kirjade saatmine kaasa tuua lisatasu. Enne selle funktsiooni aktiveerimist konsulteeri oma veebimajutuse pakkujaga, kuna sinu serverist saadetavate e-kirjade arv võib oluliselt suureneda.
|
||||
export_domain_allows:
|
||||
new:
|
||||
title: Lubatud domeenide import
|
||||
@ -844,6 +857,7 @@ et:
|
||||
manage_custom_emojis: Halda isetehtud emotikone
|
||||
manage_custom_emojis_description: Lubab kasutajatel hallata serveris isetehtud emotikone
|
||||
manage_email_subscriptions: Halda e-posti tellimusi
|
||||
manage_email_subscriptions_description: Luba selle õigusega kasutajatel oma kontol e-posti uudiskirja funktsioon sisse lülitada
|
||||
manage_federation: Halda födereerumist
|
||||
manage_federation_description: Lubab kasutajail keelata või lubada föderatsioone teiste domeenidega ja hallata ühenduvust
|
||||
manage_invites: Halda kutseid
|
||||
|
||||
@ -517,6 +517,71 @@ ga:
|
||||
resolved_dns_records_hint_html: Réitíonn an t-ainm fearainn chuig na fearainn MX seo a leanas, atá freagrach sa deireadh as glacadh le ríomhphost. Má dhéantar fearann MX a bhlocáil, cuirfear bac ar chlárúcháin ó aon seoladh ríomhphoist a úsáideann an fearann MX céanna, fiú má tá an t-ainm fearainn infheicthe difriúil. <strong>Bí cúramach gan bac a chur ar phríomhsholáthraithe ríomhphoist.</strong>
|
||||
resolved_through_html: Réitithe trí %{domain}
|
||||
title: Fearainn ríomhphoist bactha
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
account: Cuntas
|
||||
active: Gníomhach
|
||||
empty:
|
||||
hint: Níl aon síntiúsóirí ag aon chuntas go fóill.
|
||||
no_lists_yet: Gan aon liostaí fós
|
||||
inactive: Neamhghníomhach
|
||||
last_email: Ríomhphost deireanach
|
||||
lead: Taispeánfar thíos cuntais a bhfuil an ghné cumasaithe acu agus a bhfuil síntiúsóirí acu.
|
||||
status: Stádas
|
||||
subscribers: Síntiúsóirí
|
||||
title: Liostaí poist
|
||||
additional_footer_texts:
|
||||
show:
|
||||
title: Téacs breise sa bhuntásc
|
||||
compliance_settings:
|
||||
additional_footer_text:
|
||||
action: Bainistigh
|
||||
hint: Téacs roghnach a thaispeántar i mbunús ríomhphoist nuachtlitir amháin
|
||||
title: Téacs breise sa bhuntásc
|
||||
lead: Féadfar nuachtlitreacha ríomhphoist a mheas mar ríomhphoist mhargaíochta, ag brath ar na dlínsí ina bhfeidhmíonn tú.
|
||||
privacy_policy:
|
||||
action: Bainistigh
|
||||
hint: Tá nasc chuig an mbeartas seo i mbun gach ríomhphoist
|
||||
title: Polasaí príobháideachta
|
||||
title: Socruithe comhlíontachta
|
||||
danger_zone:
|
||||
disable_feature:
|
||||
action: Díchumasaigh
|
||||
hint: Múch an ghné do gach cuntas
|
||||
title: Díchumasaigh gné
|
||||
erase_all_data:
|
||||
action: Scrios sonraí
|
||||
hint: Scriosann sé gach ríomhphost i ngach liosta seoltaí go buan
|
||||
title: Scrios na sonraí go léir
|
||||
title: Crios contúirte
|
||||
disabled_msg: Tá síntiúis ríomhphoist díchumasaithe go rathúil.
|
||||
index:
|
||||
disabled:
|
||||
cannot_be_enabled: Níl an ghné seo cumasaithe ag do sholáthraí teicniúil do do fhreastalaí.
|
||||
description: Leis an ngné seo, is féidir le cuntais shonraithe giuirléid a chur lena bpróifílí, rud a chuireann ar chumas cuairteoirí gan cuntas Mastodon a gcuid post a fháil trí ríomhphost.
|
||||
get_started: Tosaigh
|
||||
lead: Lig do chuairteoirí poist a fháil trí ríomhphost ó chuntais tiomnaithe ar an bhfreastalaí seo.
|
||||
title: Nuachtlitreacha ríomhphoist
|
||||
purged_msg: Tá gach sonraí síntiúis ríomhphoist á scriosadh.
|
||||
roles:
|
||||
accounts: Cuntais
|
||||
edit_role: Cuir ról in eagar
|
||||
empty:
|
||||
hint: Níl cead ag aon duine an ghné seo a úsáid.
|
||||
no_roles_added: Níor cuireadh aon róil leis
|
||||
lead: Is féidir le cuntais leis na róil seo a leanas an ghné seo a chumasú ar a bpróifílí.
|
||||
manage_roles: Bainistigh róil
|
||||
role_name: Ainm an róil
|
||||
title: Róil
|
||||
setups:
|
||||
show:
|
||||
enable_feature: Cumasaigh gné
|
||||
important_information: Faisnéis thábhachtach
|
||||
list:
|
||||
1_permission_explanation: Nuair a bhíonn an ghné seo cumasaithe, is féidir le cuntais a bhfuil na ceadanna ainmnithe acu foirm bhailiúcháin ríomhphoist a chur lena bpróifílí.
|
||||
2_feature_explanation: Nuair a chláraíonn cuairteoirí ar leathanach próifíle cuntais agus a dheimhníonn siad a síntiús, tosóidh siad ag fáil nuashonruithe ríomhphoist nuair a chruthaíonn an cuntas poist phoiblí nua.
|
||||
3_privacy_policy_warning: Beidh rochtain ag riarthóirí freastalaí ar PII (seoltaí ríomhphoist) a bhailítear. Dá bhrí sin, ní mór an polasaí príobháideachta agus na Téarmaí Seirbhíse don fhreastalaí a nuashonrú sula n-úsáidtear an ghné seo.
|
||||
4_cost_warning: D’fhéadfadh táille a bheith i gceist le ríomhphoist ag brath ar shocrú an óstála. Pléigh le do sholáthraí óstála sula gcumasaíonn tú é, mar d’fhéadfadh an ghné seo líon na ríomhphoist a sheoltar ó do fhreastalaí a mhéadú go mór.
|
||||
export_domain_allows:
|
||||
new:
|
||||
title: Ceadaíonn fearann iomportála
|
||||
@ -840,6 +905,7 @@ ga:
|
||||
manage_custom_emojis: Bainistigh Emojis Saincheaptha
|
||||
manage_custom_emojis_description: Ligeann sé d'úsáideoirí emojis saincheaptha a bhainistiú ar an bhfreastalaí
|
||||
manage_email_subscriptions: Bainistigh Síntiúis Ríomhphoist
|
||||
manage_email_subscriptions_description: Lig d’úsáideoirí a bhfuil an cead seo acu gné an nuachtlitir ríomhphoist a chumasú dá gcuntas
|
||||
manage_federation: Cónaidhm a bhainistiú
|
||||
manage_federation_description: Ligeann sé d’úsáideoirí cónaidhm a bhlocáil nó a cheadú le fearainn eile, agus inseachadacht a rialú
|
||||
manage_invites: Bainistigh Cuirí
|
||||
|
||||
@ -484,8 +484,10 @@ gl:
|
||||
title: Bloquear novo dominio de correo
|
||||
no_email_domain_block_selected: Non se cambiou ningún bloqueo de dominio porque non había ningún seleccionado
|
||||
not_permitted: Non permitido
|
||||
reset: Restabelecer
|
||||
resolved_dns_records_hint_html: O nome de dominio corresponde cos seguintes dominios MX, que son os responsables últimos de aceptar o correo. Ao bloquear un dominio MX bloquerás a creación de contas para todo enderezo de correo que use o mesmo dominio MX, incluso se o nome de dominio visible é diferente. <strong>Ten coidado xa que podes bloquear os principais provedores de correo.</strong>
|
||||
resolved_through_html: Resolto a través de %{domain}
|
||||
search: Buscar
|
||||
title: Dominios de correo bloqueados
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
@ -551,6 +553,7 @@ gl:
|
||||
1_permission_explanation: Cando se activa esta ferramenta as contas cos permisos concedidos poden engadir un formulario no seu perfil para recoller correos.
|
||||
2_feature_explanation: Cando unha persoa visita se apunta na páxina do perfil e confirma a súa subscrición, comezará a recibir actualizacións por correo cando a conta publique novas publicacións públicas.
|
||||
3_privacy_policy_warning: A administración do servidor vai ter acceso aos PII (enderezos de correo) recollidos. Así, a directiva de privacidade e os termos do servizo do servidor deben actualizarse antes de activar esta ferramenta.
|
||||
4_cost_warning: Os correos poderían supoñer costes adicionais do servidor. Consulta co teu provedor de hospedaxe antes de activalos, xa que esta ferramenta podería facer aumentar drásticamente o número de correos que envía o teu servidor.
|
||||
export_domain_allows:
|
||||
new:
|
||||
title: Importar dominios permitidos
|
||||
@ -856,6 +859,7 @@ gl:
|
||||
manage_custom_emojis: Xestionar Emojis personalizados
|
||||
manage_custom_emojis_description: Permite xestionar os emojis personalizados do servidor
|
||||
manage_email_subscriptions: Xestionar subscripcións por correo
|
||||
manage_email_subscriptions_description: Permitir ás usuarias con este permiso activar para a súa conta a ferramenta do boletín por correo
|
||||
manage_federation: Xestionar a federación
|
||||
manage_federation_description: Permite bloquear ou permitir a federación con outros dominios, e controlar as entregas
|
||||
manage_invites: Xestionar Convites
|
||||
|
||||
@ -496,6 +496,7 @@ hu:
|
||||
no_lists_yet: Még nincsenek listák
|
||||
inactive: Inaktív
|
||||
last_email: Legutóbbi e-mail
|
||||
lead: A fiókok, melyek bekapcsolták a funkciót, és vannak feliratkozóik, itt fognak megjelenni alább.
|
||||
status: Állapot
|
||||
subscribers: Feliratkozók
|
||||
title: Levelezőlisták
|
||||
@ -527,6 +528,7 @@ hu:
|
||||
index:
|
||||
disabled:
|
||||
cannot_be_enabled: A műszaki szolgáltató nem kapcsolta be ezt a funkciót a kiszolgálód számára.
|
||||
description: A funkció lehetővé teszi, hogy a megadott fiókok hozzáadjanak egy kisalkalmazást a profiljukhoz, mellyel a Mastodon-fiók nélküli látogatók e-mailben megkaphatják a bejegyzéseiket.
|
||||
get_started: Első lépések
|
||||
title: E-mailes hírlevelek
|
||||
purged_msg: Az összes e-mail-feliratkozási adat törlése folyamatban van.
|
||||
|
||||
@ -484,8 +484,10 @@ is:
|
||||
title: Útiloka nýtt tölvupóstlén
|
||||
no_email_domain_block_selected: Engum útilokunum tölvupóstléna var breytt þar sem ekkert var valið
|
||||
not_permitted: Ekki leyft
|
||||
reset: Endurstilla
|
||||
resolved_dns_records_hint_html: Heiti lénsins vísar til eftirfarandi MX-léna, sem bera endanlega ábyrgð á að tölvupóstur skili sér. Útilokun á MX-léni mun koma í veg fyrir nýskráningar með hverju því tölvupóstfangi sem notar sama MX-lén, jafnvel þótt sýnilega lénsheitið sé frábrugðið. <strong>Farðu varlega svo þú útilokir ekki algengar tölvupóstþjónustur.</strong>
|
||||
resolved_through_html: Leyst í gegnum %{domain}
|
||||
search: Leita
|
||||
title: Útilokuð tölvupóstlén
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
|
||||
@ -486,6 +486,7 @@ it:
|
||||
not_permitted: Non consentito
|
||||
resolved_dns_records_hint_html: Il nome di dominio si risolve nei seguenti domini MX, che sono in ultima analisi responsabili dell'accettazione delle e-mail. Il blocco di un dominio MX bloccherà le registrazioni da qualsiasi indirizzo e-mail che utilizzi lo stesso dominio MX, anche se il nome di dominio visibile è diverso. <strong>Fai attenzione a non bloccare i principali provider di posta elettronica.</strong>
|
||||
resolved_through_html: Risolto attraverso %{domain}
|
||||
search: Cerca
|
||||
title: Domini e-mail bloccati
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
@ -521,6 +522,7 @@ it:
|
||||
title: Disabilita la funzionalità
|
||||
erase_all_data:
|
||||
action: Cancella i dati
|
||||
hint: Elimina in modo permanente tutti gli indirizzi email in tutte le mailing list
|
||||
title: Cancella tutti i dati
|
||||
title: Zona pericolosa
|
||||
disabled_msg: Le iscrizioni via email sono state disabilitate con successo.
|
||||
|
||||
@ -1005,6 +1005,7 @@ kab:
|
||||
development: Taneflit
|
||||
edit_profile: Ẓreg amaɣnu
|
||||
export: Sifeḍ
|
||||
featured_tags: Ihacṭagen ufrinen
|
||||
import: Kter
|
||||
import_and_export: Taktert d usifeḍ
|
||||
migrate: Tunigin n umiḍan
|
||||
|
||||
@ -92,6 +92,7 @@ de:
|
||||
closed_registrations_message: Wird angezeigt, wenn Registrierungen deaktiviert sind
|
||||
content_cache_retention_period: Sämtliche Beiträge von anderen Servern (einschließlich geteilte Beiträge und Antworten) werden, unabhängig von der Interaktion der lokalen Nutzer*innen mit diesen Beiträgen, nach der festgelegten Anzahl von Tagen gelöscht. Davon sind auch Beiträge betroffen, die von lokalen Nutzer*innen favorisiert oder als Lesezeichen gespeichert wurden. Private Erwähnungen zwischen Nutzer*innen von verschiedenen Servern werden ebenfalls verloren gehen und können nicht wiederhergestellt werden. Diese Option richtet sich ausschließlich an Server mit speziellen Zwecken und wird die allgemeine Nutzungserfahrung beeinträchtigen, wenn sie für den allgemeinen Gebrauch aktiviert ist.
|
||||
custom_css: Du kannst eigene Stylesheets für das Webinterface von Mastodon verwenden.
|
||||
email_footer_text: Der Text erscheint ausschließlich in der Fußzeile von E-Mails.
|
||||
favicon: WebP, PNG, GIF oder JPG. Überschreibt das Standard-Mastodon-Favicon mit einem eigenen Favicon.
|
||||
landing_page: Legt fest, welchen Bereich (nicht angemeldete) Besucher*innen sehen, wenn sie deinen Server besuchen. Für „Trends“ müssen die Trends in den Entdecken-Einstellungen aktiviert sein. Für „Lokaler Feed“ muss „Zugriff auf Live-Feeds, die lokale Beiträge beinhalten“ in den Entdecken-Einstellungen auf „Alle“ gesetzt werden.
|
||||
mascot: Überschreibt die Abbildung im erweiterten Webinterface.
|
||||
@ -294,6 +295,7 @@ de:
|
||||
closed_registrations_message: Nachricht, falls Registrierungen deaktiviert sind
|
||||
content_cache_retention_period: Aufbewahrungsfrist für externe Inhalte
|
||||
custom_css: Eigenes CSS
|
||||
email_footer_text: Fußzeile
|
||||
favicon: Favicon
|
||||
landing_page: Landingpage für Gäste
|
||||
local_live_feed_access: Zugriff auf Live-Feeds, die lokale Beiträge beinhalten
|
||||
@ -322,6 +324,9 @@ de:
|
||||
trendable_by_default: Trends ohne vorherige Überprüfung erlauben
|
||||
trends: Trends aktivieren
|
||||
wrapstodon: Wrapstodon aktivieren
|
||||
form_email_subscriptions_confirmation:
|
||||
agreement_email_volume: Ich verstehe, dass das Aktivieren dieser Funktion die Anzahl versendeter E-Mails drastisch erhöhen kann. Ich übernehme die Verantwortung für mögliche Zusatzkosten.
|
||||
agreement_privacy_and_terms: Datenschutzerklärung und Nutzungsbedingungen wurden im Vorfeld aktualisiert.
|
||||
interactions:
|
||||
must_be_follower: Benachrichtigungen von Profilen, die mir nicht folgen, ausblenden
|
||||
must_be_following: Benachrichtigungen von Profilen, denen ich nicht folge, ausblenden
|
||||
|
||||
@ -156,7 +156,7 @@ el:
|
||||
jurisdiction: Ανέφερε τη χώρα όπου ζει αυτός που πληρώνει τους λογαριασμούς. Εάν πρόκειται για εταιρεία ή άλλη οντότητα, ανέφερε τη χώρα όπου υφίσταται, και την πόλη, περιοχή, έδαφος ή πολιτεία ανάλογα με την περίπτωση.
|
||||
min_age: Δεν πρέπει να είναι κάτω από την ελάχιστη ηλικία που απαιτείται από τους νόμους της δικαιοδοσίας σας.
|
||||
user:
|
||||
chosen_languages: Όταν ενεργοποιηθεί, μόνο αναρτήσεις σε επιλεγμένες γλώσσες θα εμφανίζονται στις δημόσιες ροές. Αυτή η ρύθμιση δεν επηρεάζει την Αρχική ροή και τις λίστες σας.
|
||||
chosen_languages: Όταν επιλέξετε, στις δημόσιες ροές θα εμφανίζονται αναρτήσεις μόνο από τις επιλεγμένες γλώσσες. Αυτή η ρύθμιση δεν επηρεάζει την Αρχική ροή και τις λίστες σας.
|
||||
date_of_birth:
|
||||
one: Πρέπει να βεβαιωθούμε ότι είσαι τουλάχιστον %{count} για να χρησιμοποιήσεις το %{domain}. Δε θα το αποθηκεύσουμε.
|
||||
other: Πρέπει να βεβαιωθούμε ότι είσαι τουλάχιστον %{count} για να χρησιμοποιήσεις το %{domain}. Δε θα το αποθηκεύσουμε.
|
||||
|
||||
@ -92,7 +92,7 @@ es-MX:
|
||||
closed_registrations_message: Mostrado cuando los registros están cerrados
|
||||
content_cache_retention_period: Todas las publicaciones de otros servidores (incluyendo impuestos y respuestas) serán borrados después del número de días especificado, sin tener en cuenta cualquier interacción del usuario local con esas publicaciones. Esto incluye los mensajes que un usuario local haya marcado como favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán y será imposible restaurarlas. El uso de esta configuración está pensado para instancias de propósito especial y rompe muchas expectativas de los usuarios cuando se implementa para uso general.
|
||||
custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon.
|
||||
email_footer_text: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de correo electrónico.
|
||||
email_footer_text: Texto opcional que aparece únicamente en el pie de página de los correos electrónicos del boletín informativo.
|
||||
favicon: WEBP, PNG, GIF o JPG. Reemplaza el icono predeterminado de Mastodon con un icono personalizado.
|
||||
landing_page: Selecciona qué página ven los nuevos visitantes cuando llegan por primera vez a tu servidor. Si seleccionas "Tendencias", entonces las tendencias deben estar habilitadas en la Configuración de Descubrimiento. Si selecciona "Cronología local", entonces "Acceso a las cronologías que destacan publicaciones locales" debe configurarse a "Todos" en la Configuración de Descubrimiento.
|
||||
mascot: Reemplaza la ilustración en la interfaz web avanzada.
|
||||
@ -325,8 +325,8 @@ es-MX:
|
||||
trends: Habilitar tendencias
|
||||
wrapstodon: Habilitar Wrapstodon
|
||||
form_email_subscriptions_confirmation:
|
||||
agreement_email_volume: Entiendo que activar esta característica puede aumentar significativamente el volumen de correos electrónicos enviados desde el servidor, y que soy el único responsable de cualquier coste incurrido.
|
||||
agreement_privacy_and_terms: He actualizado la Política de Privacidad y los Términos del Servicio.
|
||||
agreement_email_volume: Entiendo que al habilitar esta función puede aumentar considerablemente el volumen de correos electrónicos enviados desde el servidor y que soy el único responsable de los gastos en que se incurra.
|
||||
agreement_privacy_and_terms: He actualizado la Política de privacidad y los Términos de servicio.
|
||||
interactions:
|
||||
must_be_follower: Bloquear notificaciones de personas que no te siguen
|
||||
must_be_following: Bloquear notificaciones de personas que no sigues
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user