Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master
commit
f504ac4ff6
|
@ -110,7 +110,7 @@ export default class Dropdown extends React.PureComponent {
|
||||||
icon: PropTypes.string.isRequired,
|
icon: PropTypes.string.isRequired,
|
||||||
items: PropTypes.array.isRequired,
|
items: PropTypes.array.isRequired,
|
||||||
size: PropTypes.number.isRequired,
|
size: PropTypes.number.isRequired,
|
||||||
ariaLabel: PropTypes.string,
|
title: PropTypes.string,
|
||||||
disabled: PropTypes.bool,
|
disabled: PropTypes.bool,
|
||||||
status: ImmutablePropTypes.map,
|
status: ImmutablePropTypes.map,
|
||||||
isUserTouching: PropTypes.func,
|
isUserTouching: PropTypes.func,
|
||||||
|
@ -120,7 +120,7 @@ export default class Dropdown extends React.PureComponent {
|
||||||
};
|
};
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
ariaLabel: 'Menu',
|
title: 'Menu',
|
||||||
};
|
};
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
|
@ -186,14 +186,14 @@ export default class Dropdown extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { icon, items, size, ariaLabel, disabled } = this.props;
|
const { icon, items, size, title, disabled } = this.props;
|
||||||
const { expanded } = this.state;
|
const { expanded } = this.state;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div onKeyDown={this.handleKeyDown}>
|
<div onKeyDown={this.handleKeyDown}>
|
||||||
<IconButton
|
<IconButton
|
||||||
icon={icon}
|
icon={icon}
|
||||||
title={ariaLabel}
|
title={title}
|
||||||
active={expanded}
|
active={expanded}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
size={size}
|
size={size}
|
||||||
|
|
|
@ -179,7 +179,7 @@ export default class StatusActionBar extends ImmutablePureComponent {
|
||||||
{shareButton}
|
{shareButton}
|
||||||
|
|
||||||
<div className='status__action-bar-dropdown'>
|
<div className='status__action-bar-dropdown'>
|
||||||
<DropdownMenuContainer disabled={anonymousAccess} status={status} items={menu} icon='ellipsis-h' size={18} direction='right' ariaLabel={intl.formatMessage(messages.more)} />
|
<DropdownMenuContainer disabled={anonymousAccess} status={status} items={menu} icon='ellipsis-h' size={18} direction='right' title={intl.formatMessage(messages.more)} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -120,7 +120,7 @@ export default class ActionBar extends React.PureComponent {
|
||||||
{shareButton}
|
{shareButton}
|
||||||
|
|
||||||
<div className='detailed-status__action-bar-dropdown'>
|
<div className='detailed-status__action-bar-dropdown'>
|
||||||
<DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' ariaLabel='More' />
|
<DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title='More' />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
import Immutable from 'immutable';
|
||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
import punycode from 'punycode';
|
import punycode from 'punycode';
|
||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
|
@ -24,6 +25,7 @@ export default class Card extends React.PureComponent {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
card: ImmutablePropTypes.map,
|
card: ImmutablePropTypes.map,
|
||||||
maxDescription: PropTypes.number,
|
maxDescription: PropTypes.number,
|
||||||
|
onOpenMedia: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
|
@ -34,6 +36,27 @@ export default class Card extends React.PureComponent {
|
||||||
width: 0,
|
width: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handlePhotoClick = () => {
|
||||||
|
const { card, onOpenMedia } = this.props;
|
||||||
|
|
||||||
|
onOpenMedia(
|
||||||
|
Immutable.fromJS([
|
||||||
|
{
|
||||||
|
type: 'image',
|
||||||
|
url: card.get('url'),
|
||||||
|
description: card.get('title'),
|
||||||
|
meta: {
|
||||||
|
original: {
|
||||||
|
width: card.get('width'),
|
||||||
|
height: card.get('height'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
renderLink () {
|
renderLink () {
|
||||||
const { card, maxDescription } = this.props;
|
const { card, maxDescription } = this.props;
|
||||||
|
|
||||||
|
@ -73,9 +96,16 @@ export default class Card extends React.PureComponent {
|
||||||
const { card } = this.props;
|
const { card } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<a href={card.get('url')} className='status-card-photo' target='_blank' rel='noopener'>
|
<img
|
||||||
<img src={card.get('url')} alt={card.get('title')} width={card.get('width')} height={card.get('height')} />
|
className='status-card-photo'
|
||||||
</a>
|
onClick={this.handlePhotoClick}
|
||||||
|
role='button'
|
||||||
|
tabIndex='0'
|
||||||
|
src={card.get('url')}
|
||||||
|
alt={card.get('title')}
|
||||||
|
width={card.get('width')}
|
||||||
|
height={card.get('height')}
|
||||||
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (status.get('spoiler_text').length === 0) {
|
} else if (status.get('spoiler_text').length === 0) {
|
||||||
media = <CardContainer statusId={status.get('id')} />;
|
media = <CardContainer onOpenMedia={this.props.onOpenMedia} statusId={status.get('id')} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status.get('application')) {
|
if (status.get('application')) {
|
||||||
|
|
|
@ -7,7 +7,7 @@ export default class ImageLoader extends React.PureComponent {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
alt: PropTypes.string,
|
alt: PropTypes.string,
|
||||||
src: PropTypes.string.isRequired,
|
src: PropTypes.string.isRequired,
|
||||||
previewSrc: PropTypes.string.isRequired,
|
previewSrc: PropTypes.string,
|
||||||
width: PropTypes.number,
|
width: PropTypes.number,
|
||||||
height: PropTypes.number,
|
height: PropTypes.number,
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ export default class ImageLoader extends React.PureComponent {
|
||||||
this.removeEventListeners();
|
this.removeEventListeners();
|
||||||
this.setState({ loading: true, error: false });
|
this.setState({ loading: true, error: false });
|
||||||
Promise.all([
|
Promise.all([
|
||||||
this.loadPreviewCanvas(props),
|
props.previewSrc && this.loadPreviewCanvas(props),
|
||||||
this.hasSize() && this.loadOriginalImage(props),
|
this.hasSize() && this.loadOriginalImage(props),
|
||||||
].filter(Boolean))
|
].filter(Boolean))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
|
|
@ -92,7 +92,7 @@ export default class MediaModal extends ImmutablePureComponent {
|
||||||
const height = image.getIn(['meta', 'original', 'height']) || null;
|
const height = image.getIn(['meta', 'original', 'height']) || null;
|
||||||
|
|
||||||
if (image.get('type') === 'image') {
|
if (image.get('type') === 'image') {
|
||||||
return <ImageLoader previewSrc={image.get('preview_url')} src={image.get('url')} width={width} height={height} alt={image.get('description')} key={image.get('preview_url')} />;
|
return <ImageLoader previewSrc={image.get('preview_url')} src={image.get('url')} width={width} height={height} alt={image.get('description')} key={image.get('url')} />;
|
||||||
} else if (image.get('type') === 'gifv') {
|
} else if (image.get('type') === 'gifv') {
|
||||||
return <ExtendedVideoPlayer src={image.get('url')} muted controls={false} width={width} height={height} key={image.get('preview_url')} alt={image.get('description')} />;
|
return <ExtendedVideoPlayer src={image.get('url')} muted controls={false} width={width} height={height} key={image.get('preview_url')} alt={image.get('description')} />;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,18 +9,18 @@
|
||||||
"account.follows_you": "et segueix",
|
"account.follows_you": "et segueix",
|
||||||
"account.media": "Media",
|
"account.media": "Media",
|
||||||
"account.mention": "Esmentar @{name}",
|
"account.mention": "Esmentar @{name}",
|
||||||
"account.moved_to": "{name} has moved to:",
|
"account.moved_to": "{name} s'ha mogut a:",
|
||||||
"account.mute": "Silenciar @{name}",
|
"account.mute": "Silenciar @{name}",
|
||||||
"account.mute_notifications": "Mute notifications from @{name}",
|
"account.mute_notifications": "Notificacions desactivades de @{name}",
|
||||||
"account.posts": "Publicacions",
|
"account.posts": "Publicacions",
|
||||||
"account.report": "Informe @{name}",
|
"account.report": "Informe @{name}",
|
||||||
"account.requested": "Esperant aprovació",
|
"account.requested": "Esperant aprovació. Clic per a cancel·lar la petició de seguiment",
|
||||||
"account.share": "Compartir el perfil de @{name}",
|
"account.share": "Compartir el perfil de @{name}",
|
||||||
"account.unblock": "Desbloquejar @{name}",
|
"account.unblock": "Desbloquejar @{name}",
|
||||||
"account.unblock_domain": "Mostra {domain}",
|
"account.unblock_domain": "Mostra {domain}",
|
||||||
"account.unfollow": "Deixar de seguir",
|
"account.unfollow": "Deixar de seguir",
|
||||||
"account.unmute": "Treure silenci de @{name}",
|
"account.unmute": "Treure silenci de @{name}",
|
||||||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
"account.unmute_notifications": "Activar notificacions de @{name}",
|
||||||
"account.view_full_profile": "Veure el perfil complet",
|
"account.view_full_profile": "Veure el perfil complet",
|
||||||
"boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop",
|
"boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop",
|
||||||
"bundle_column_error.body": "S'ha produït un error en carregar aquest component.",
|
"bundle_column_error.body": "S'ha produït un error en carregar aquest component.",
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
"compose_form.publish_loud": "{publish}!",
|
"compose_form.publish_loud": "{publish}!",
|
||||||
"compose_form.sensitive": "Marcar multimèdia com a sensible",
|
"compose_form.sensitive": "Marcar multimèdia com a sensible",
|
||||||
"compose_form.spoiler": "Amagar text darrera l'advertència",
|
"compose_form.spoiler": "Amagar text darrera l'advertència",
|
||||||
"compose_form.spoiler_placeholder": "Advertència de contingut",
|
"compose_form.spoiler_placeholder": "Escriu l'advertència aquí",
|
||||||
"confirmation_modal.cancel": "Cancel·lar",
|
"confirmation_modal.cancel": "Cancel·lar",
|
||||||
"confirmations.block.confirm": "Bloquejar",
|
"confirmations.block.confirm": "Bloquejar",
|
||||||
"confirmations.block.message": "Estàs segur que vols bloquejar {name}?",
|
"confirmations.block.message": "Estàs segur que vols bloquejar {name}?",
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||||
"confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?",
|
"confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?",
|
||||||
"embed.instructions": "Incrusta aquest estat al lloc web copiant el codi a continuació.",
|
"embed.instructions": "Incrusta aquest estat al lloc web copiant el codi a continuació.",
|
||||||
"embed.preview": "A continuació s'explica com:",
|
"embed.preview": "Aquí tenim quin aspecte tindrá:",
|
||||||
"emoji_button.activity": "Activitat",
|
"emoji_button.activity": "Activitat",
|
||||||
"emoji_button.custom": "Personalitzat",
|
"emoji_button.custom": "Personalitzat",
|
||||||
"emoji_button.flags": "Flags",
|
"emoji_button.flags": "Flags",
|
||||||
|
@ -99,7 +99,7 @@
|
||||||
"home.column_settings.advanced": "Avançat",
|
"home.column_settings.advanced": "Avançat",
|
||||||
"home.column_settings.basic": "Bàsic",
|
"home.column_settings.basic": "Bàsic",
|
||||||
"home.column_settings.filter_regex": "Filtrar per expressió regular",
|
"home.column_settings.filter_regex": "Filtrar per expressió regular",
|
||||||
"home.column_settings.show_reblogs": "Mostrar 'boosts'",
|
"home.column_settings.show_reblogs": "Mostrar impulsos",
|
||||||
"home.column_settings.show_replies": "Mostrar respostes",
|
"home.column_settings.show_replies": "Mostrar respostes",
|
||||||
"home.settings": "Ajustos de columna",
|
"home.settings": "Ajustos de columna",
|
||||||
"lightbox.close": "Tancar",
|
"lightbox.close": "Tancar",
|
||||||
|
@ -108,7 +108,7 @@
|
||||||
"loading_indicator.label": "Carregant...",
|
"loading_indicator.label": "Carregant...",
|
||||||
"media_gallery.toggle_visible": "Alternar visibilitat",
|
"media_gallery.toggle_visible": "Alternar visibilitat",
|
||||||
"missing_indicator.label": "No trobat",
|
"missing_indicator.label": "No trobat",
|
||||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
"mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?",
|
||||||
"navigation_bar.blocks": "Usuaris bloquejats",
|
"navigation_bar.blocks": "Usuaris bloquejats",
|
||||||
"navigation_bar.community_timeline": "Línia de temps Local",
|
"navigation_bar.community_timeline": "Línia de temps Local",
|
||||||
"navigation_bar.edit_profile": "Editar perfil",
|
"navigation_bar.edit_profile": "Editar perfil",
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
"notifications.column_settings.mention": "Mencions:",
|
"notifications.column_settings.mention": "Mencions:",
|
||||||
"notifications.column_settings.push": "Push notificacions",
|
"notifications.column_settings.push": "Push notificacions",
|
||||||
"notifications.column_settings.push_meta": "Aquest dispositiu",
|
"notifications.column_settings.push_meta": "Aquest dispositiu",
|
||||||
"notifications.column_settings.reblog": "Boosts:",
|
"notifications.column_settings.reblog": "Impulsos:",
|
||||||
"notifications.column_settings.show": "Mostrar en la columna",
|
"notifications.column_settings.show": "Mostrar en la columna",
|
||||||
"notifications.column_settings.sound": "Reproduïr so",
|
"notifications.column_settings.sound": "Reproduïr so",
|
||||||
"onboarding.done": "Fet",
|
"onboarding.done": "Fet",
|
||||||
|
@ -164,11 +164,11 @@
|
||||||
"privacy.public.short": "Públic",
|
"privacy.public.short": "Públic",
|
||||||
"privacy.unlisted.long": "No publicar en línies de temps públiques",
|
"privacy.unlisted.long": "No publicar en línies de temps públiques",
|
||||||
"privacy.unlisted.short": "No llistat",
|
"privacy.unlisted.short": "No llistat",
|
||||||
"relative_time.days": "fa {number} jorns",
|
"relative_time.days": "fa {number} dies",
|
||||||
"relative_time.hours": "fa {number} hores",
|
"relative_time.hours": "fa {number} hores",
|
||||||
"relative_time.just_now": "ara",
|
"relative_time.just_now": "ara",
|
||||||
"relative_time.minutes": "fa {number} minutes",
|
"relative_time.minutes": "fa {number} minuts",
|
||||||
"relative_time.seconds": "fa {number} segondes",
|
"relative_time.seconds": "fa {number} segons",
|
||||||
"reply_indicator.cancel": "Cancel·lar",
|
"reply_indicator.cancel": "Cancel·lar",
|
||||||
"report.placeholder": "Comentaris addicionals",
|
"report.placeholder": "Comentaris addicionals",
|
||||||
"report.submit": "Enviar",
|
"report.submit": "Enviar",
|
||||||
|
@ -192,7 +192,7 @@
|
||||||
"status.mute_conversation": "Silenciar conversació",
|
"status.mute_conversation": "Silenciar conversació",
|
||||||
"status.open": "Ampliar aquest estat",
|
"status.open": "Ampliar aquest estat",
|
||||||
"status.pin": "Fixat en el perfil",
|
"status.pin": "Fixat en el perfil",
|
||||||
"status.reblog": "Boost",
|
"status.reblog": "Impuls",
|
||||||
"status.reblogged_by": "{name} ha retootejat",
|
"status.reblogged_by": "{name} ha retootejat",
|
||||||
"status.reply": "Respondre",
|
"status.reply": "Respondre",
|
||||||
"status.replyAll": "Respondre al tema",
|
"status.replyAll": "Respondre al tema",
|
||||||
|
@ -209,7 +209,7 @@
|
||||||
"tabs_bar.home": "Inici",
|
"tabs_bar.home": "Inici",
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notificacions",
|
"tabs_bar.notifications": "Notificacions",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "El vostre esborrany es perdrà si sortiu de Mastodon.",
|
||||||
"upload_area.title": "Arrossega i deixa anar per carregar",
|
"upload_area.title": "Arrossega i deixa anar per carregar",
|
||||||
"upload_button.label": "Afegir multimèdia",
|
"upload_button.label": "Afegir multimèdia",
|
||||||
"upload_form.description": "Descriure els problemes visuals",
|
"upload_form.description": "Descriure els problemes visuals",
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"account.follows_you": "关注了你",
|
"account.follows_you": "关注了你",
|
||||||
"account.media": "媒体",
|
"account.media": "媒体",
|
||||||
"account.mention": "提及 @{name}",
|
"account.mention": "提及 @{name}",
|
||||||
"account.moved_to": "{name} has moved to:",
|
"account.moved_to": "{name} 已经迁移到:",
|
||||||
"account.mute": "隐藏 @{name}",
|
"account.mute": "隐藏 @{name}",
|
||||||
"account.mute_notifications": "隐藏来自 @{name} 的通知",
|
"account.mute_notifications": "隐藏来自 @{name} 的通知",
|
||||||
"account.posts": "嘟文",
|
"account.posts": "嘟文",
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
"empty_column.hashtag": "这个话题标签下暂时没有内容。",
|
"empty_column.hashtag": "这个话题标签下暂时没有内容。",
|
||||||
"empty_column.home": "你还没有关注任何用户。快看看{public},向其他用户搭讪吧。",
|
"empty_column.home": "你还没有关注任何用户。快看看{public},向其他用户搭讪吧。",
|
||||||
"empty_column.home.public_timeline": "公共时间轴",
|
"empty_column.home.public_timeline": "公共时间轴",
|
||||||
"empty_column.list": "There is nothing in this list yet.",
|
"empty_column.list": "这个列表中暂时没有内容。",
|
||||||
"empty_column.notifications": "你还没有收到过通知信息,快向其他用户搭讪吧。",
|
"empty_column.notifications": "你还没有收到过通知信息,快向其他用户搭讪吧。",
|
||||||
"empty_column.public": "这里神马都没有!写一些公开的嘟文,或者关注其他实例的用户,这里就会有嘟文出现了哦!",
|
"empty_column.public": "这里神马都没有!写一些公开的嘟文,或者关注其他实例的用户,这里就会有嘟文出现了哦!",
|
||||||
"follow_request.authorize": "同意",
|
"follow_request.authorize": "同意",
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
import {
|
||||||
|
ACCOUNT_BLOCK_SUCCESS,
|
||||||
|
ACCOUNT_MUTE_SUCCESS,
|
||||||
|
} from '../actions/accounts';
|
||||||
import { CONTEXT_FETCH_SUCCESS } from '../actions/statuses';
|
import { CONTEXT_FETCH_SUCCESS } from '../actions/statuses';
|
||||||
import { TIMELINE_DELETE, TIMELINE_CONTEXT_UPDATE } from '../actions/timelines';
|
import { TIMELINE_DELETE, TIMELINE_CONTEXT_UPDATE } from '../actions/timelines';
|
||||||
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
|
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
|
||||||
|
@ -31,6 +35,12 @@ const deleteFromContexts = (state, id) => {
|
||||||
return state;
|
return state;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const filterContexts = (state, relationship) => {
|
||||||
|
return state.map(
|
||||||
|
statuses => statuses.filter(
|
||||||
|
status => status.get('account') !== relationship.id));
|
||||||
|
};
|
||||||
|
|
||||||
const updateContext = (state, status, references) => {
|
const updateContext = (state, status, references) => {
|
||||||
return state.update('descendants', map => {
|
return state.update('descendants', map => {
|
||||||
references.forEach(parentId => {
|
references.forEach(parentId => {
|
||||||
|
@ -49,6 +59,9 @@ const updateContext = (state, status, references) => {
|
||||||
|
|
||||||
export default function contexts(state = initialState, action) {
|
export default function contexts(state = initialState, action) {
|
||||||
switch(action.type) {
|
switch(action.type) {
|
||||||
|
case ACCOUNT_BLOCK_SUCCESS:
|
||||||
|
case ACCOUNT_MUTE_SUCCESS:
|
||||||
|
return filterContexts(state, action.relationship);
|
||||||
case CONTEXT_FETCH_SUCCESS:
|
case CONTEXT_FETCH_SUCCESS:
|
||||||
return normalizeContext(state, action.id, action.ancestors, action.descendants);
|
return normalizeContext(state, action.id, action.ancestors, action.descendants);
|
||||||
case TIMELINE_DELETE:
|
case TIMELINE_DELETE:
|
||||||
|
|
|
@ -22,10 +22,6 @@ import {
|
||||||
TIMELINE_DELETE,
|
TIMELINE_DELETE,
|
||||||
TIMELINE_EXPAND_SUCCESS,
|
TIMELINE_EXPAND_SUCCESS,
|
||||||
} from '../actions/timelines';
|
} from '../actions/timelines';
|
||||||
import {
|
|
||||||
ACCOUNT_BLOCK_SUCCESS,
|
|
||||||
ACCOUNT_MUTE_SUCCESS,
|
|
||||||
} from '../actions/accounts';
|
|
||||||
import {
|
import {
|
||||||
NOTIFICATIONS_UPDATE,
|
NOTIFICATIONS_UPDATE,
|
||||||
NOTIFICATIONS_REFRESH_SUCCESS,
|
NOTIFICATIONS_REFRESH_SUCCESS,
|
||||||
|
@ -88,18 +84,6 @@ const deleteStatus = (state, id, references) => {
|
||||||
return state.delete(id);
|
return state.delete(id);
|
||||||
};
|
};
|
||||||
|
|
||||||
const filterStatuses = (state, relationship) => {
|
|
||||||
state.forEach(status => {
|
|
||||||
if (status.get('account') !== relationship.id) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
state = deleteStatus(state, status.get('id'), state.filter(item => item.get('reblog') === status.get('id')));
|
|
||||||
});
|
|
||||||
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
|
|
||||||
const initialState = ImmutableMap();
|
const initialState = ImmutableMap();
|
||||||
|
|
||||||
export default function statuses(state = initialState, action) {
|
export default function statuses(state = initialState, action) {
|
||||||
|
@ -139,9 +123,6 @@ export default function statuses(state = initialState, action) {
|
||||||
return normalizeStatuses(state, action.statuses);
|
return normalizeStatuses(state, action.statuses);
|
||||||
case TIMELINE_DELETE:
|
case TIMELINE_DELETE:
|
||||||
return deleteStatus(state, action.id, action.references);
|
return deleteStatus(state, action.id, action.references);
|
||||||
case ACCOUNT_BLOCK_SUCCESS:
|
|
||||||
case ACCOUNT_MUTE_SUCCESS:
|
|
||||||
return filterStatuses(state, action.relationship);
|
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2182,15 +2182,12 @@ button.icon-button.active i.fa-retweet {
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-card-photo {
|
.status-card-photo {
|
||||||
|
cursor: zoom-in;
|
||||||
display: block;
|
display: block;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
width: 100%;
|
||||||
img {
|
height: auto;
|
||||||
display: block;
|
margin: 0;
|
||||||
width: 100%;
|
|
||||||
height: auto;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-card-video {
|
.status-card-video {
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
= opengraph 'og:site_name', site_title
|
= opengraph 'og:site_name', site_title
|
||||||
= opengraph 'og:type', 'article'
|
= opengraph 'og:type', 'article'
|
||||||
= opengraph 'og:title', "#{@account.username} on #{site_hostname}"
|
= opengraph 'og:title', "#{@account.display_name} on #{site_hostname}"
|
||||||
= opengraph 'og:url', account_stream_entry_url(@account, @stream_entry)
|
= opengraph 'og:url', account_stream_entry_url(@account, @stream_entry)
|
||||||
|
|
||||||
= render 'stream_entries/og_description', activity: @stream_entry.activity
|
= render 'stream_entries/og_description', activity: @stream_entry.activity
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -4,53 +4,64 @@ ca:
|
||||||
hints:
|
hints:
|
||||||
defaults:
|
defaults:
|
||||||
avatar: PNG, GIF o JPG. Màxim 2MB. Serà escalat a 120x120px
|
avatar: PNG, GIF o JPG. Màxim 2MB. Serà escalat a 120x120px
|
||||||
|
digest: S'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència
|
||||||
display_name:
|
display_name:
|
||||||
one: Queda <span class="name-counter">1</span> caràcter
|
one: <span class="name-counter">1</span> càracter
|
||||||
other: Queden <span class="name-counter">%{count}</span> caràcters
|
other: <span class="name-counter">%{count}</span> càracters
|
||||||
header: PNG, GIF o JPG. Màxim 2MB. Serà escalat a 700x335px
|
header: PNG, GIF o JPG. Màxim 2MB. Serà escalat a 700x335px
|
||||||
locked: Cal que aprovis manualment els seguidors i les publicacions es mostraran només als teus seguidors
|
locked: Requereix que aprovis manualment seguidors i les publicacions seran mostrades només als teus seguidors
|
||||||
note:
|
note:
|
||||||
one: Queda <span class="note-counter">1</span> caràcgter
|
one: <span class="note-counter">1</span> càracter left
|
||||||
other: Queden <span class="note-counter">%{count}</span> caràcters
|
other: <span class="note-counter">%{count}</span> càracters
|
||||||
|
setting_noindex: Afecta el teu perfil públic i les pàgines d'estat
|
||||||
|
setting_theme: Afecta la manera en què Mastodon es veu quan està connectat des de qualsevol dispositiu.
|
||||||
imports:
|
imports:
|
||||||
data: Fitxers CSV exportat des d'una altra instància de Mastodon
|
data: Arxiu CSV exportat desde una altra instància de Mastodon
|
||||||
sessions:
|
sessions:
|
||||||
otp: Introdueix el codi de dos factors des del telèfon o utilitza un dels teus codis de recuperació.
|
otp: Introdueix el codi de dos factors des del teu telèfon o utilitza un dels teus codis de recuperació.
|
||||||
user:
|
user:
|
||||||
filtered_languages: Els missatges en les llengües seleccionades s'eliminaran de les línies de temps públiques.
|
filtered_languages: Els idiomes seleccionats seran eliminats de les línies de temps públiques.
|
||||||
labels:
|
labels:
|
||||||
defaults:
|
defaults:
|
||||||
avatar: Avatar
|
avatar: Avatar
|
||||||
confirm_new_password: Confirma la contrasenya nova
|
confirm_new_password: Confirmar nova contrasenya
|
||||||
confirm_password: Confirma la contrasenya
|
confirm_password: Confirmar contrasenya
|
||||||
current_password: Contrasenya actual
|
current_password: Contrasenya actual
|
||||||
data: Informació
|
data: Informació
|
||||||
display_name: Nom visibile
|
display_name: Mostrar nom
|
||||||
email: Adreça de correu electrònic
|
email: Direcció de correu electrònic
|
||||||
header: Imgatge de capçalera
|
filtered_languages: Idiomes filtrats
|
||||||
locale: Llengua
|
header: Img. capçalera
|
||||||
locked: Fes privat aquest compte
|
locale: Idioma
|
||||||
new_password: Contrasenya nova
|
locked: Fer privat aquest compte
|
||||||
|
new_password: Nova contrasenya
|
||||||
note: Biografia
|
note: Biografia
|
||||||
otp_attempt: Codi de dos factors
|
otp_attempt: Codi de dos factors
|
||||||
password: Contrasenya
|
password: Contrasenya
|
||||||
setting_auto_play_gif: Reprodueix automàticament els GIF animats
|
setting_auto_play_gif: Auto-reproducció de GIFs animats
|
||||||
setting_boost_modal: Mostra la finestra de confirmació abans d'un retoot
|
setting_boost_modal: Mostrar finestra de confirmació abans d'un Retoot
|
||||||
setting_default_privacy: Privacitat de les publicacions
|
setting_default_privacy: Privacitat de publicacions
|
||||||
setting_delete_modal: Mostra la finestra de confirmació abans d'esborrar un toot
|
setting_default_sensitive: Marca sempre els multimèdia com a sensibles
|
||||||
|
setting_delete_modal: Mostrar finestra de confirmació abans d'esborrar un toot
|
||||||
|
setting_noindex: Desactivació de la indexació del motor de cerca
|
||||||
|
setting_reduce_motion: Redueix el moviment en animacions
|
||||||
|
setting_system_font_ui: Utilitzeu el tipus de lletra predeterminat del sistema
|
||||||
|
setting_theme: Tema del lloc
|
||||||
|
setting_unfollow_modal: Mostra el diàleg de confirmació abans de deixar de seguir a algú
|
||||||
severity: Severitat
|
severity: Severitat
|
||||||
type: Importa tipus
|
type: Importar tipus
|
||||||
username: Nom d´usuari
|
username: Nom d´usuari
|
||||||
interactions:
|
interactions:
|
||||||
must_be_follower: Blocar les notificacions de persones que no et segueixen
|
must_be_follower: Bloquejar notificacions de persones que no et segueixen
|
||||||
must_be_following: Blocar les notificacions de persones que no segueixes
|
must_be_following: Bloquejar notificacions de persones que no segueixes
|
||||||
|
must_be_following_dm: Bloqueja missatges directes de persones que no segueixes
|
||||||
notification_emails:
|
notification_emails:
|
||||||
digest: Envia un resum de correus electrònics
|
digest: Enviar resum de correus electrònics
|
||||||
favourite: Envia un correu electrònic quan algú marqui com a preferit en la teva publicació
|
favourite: Enviar correu electrònic quan algú marqui com a favorit en la teva publicació
|
||||||
follow: Envia un correu electrònic quan algú et segueixi
|
follow: Enviar correu electrònic quan algú et segueixi
|
||||||
follow_request: Envia un correu electrònic quan algú sol·liciti seguir-te
|
follow_request: Enviar correu electrònic quan algú sol·liciti seguir-te
|
||||||
mention: Envia un correu electrònic quan algú et mencioni
|
mention: Enviar correu electrònic quan algú et mencioni
|
||||||
reblog: Envia un correu electrònic quan algú comparteixi la teva publicació
|
reblog: Enviar correu electrònic quan algú comparteixi la seva publicació
|
||||||
'no': 'No'
|
'no': 'No'
|
||||||
required:
|
required:
|
||||||
mark: "*"
|
mark: "*"
|
||||||
|
|
Loading…
Reference in New Issue