Improve accessibility (part 3) (#4405)
* fix(compose): Add aria-label for the navigation links * fix(search): Add input label * fix(navigation_bar): Link description * fix(autosuggest_textarea): Add input label * fix(compose_form): Add input label * fix(upload_button): Add input label * fix(account/header): Add link content * fix(column_header): Use h1 tag * fix(column_header): Labels move buttons moving column * fix(settings_text): Add label to input * fix(column_header): Remove role from h1 * fix(modal_root): Use role=dialog * fix(modal_root): Focus restauration * fix(modal_root): Apply inert to sibligs * fix(column_header): Add role=button * chore(eslint): Disable jsx-a11y/label-has-for
This commit is contained in:
parent
f9075577e4
commit
6884dd79ba
@ -112,7 +112,7 @@ rules:
|
|||||||
jsx-a11y/iframe-has-title: warn
|
jsx-a11y/iframe-has-title: warn
|
||||||
jsx-a11y/img-has-alt: warn
|
jsx-a11y/img-has-alt: warn
|
||||||
jsx-a11y/img-redundant-alt: warn
|
jsx-a11y/img-redundant-alt: warn
|
||||||
jsx-a11y/label-has-for: warn
|
jsx-a11y/label-has-for: off
|
||||||
jsx-a11y/mouse-events-have-key-events: warn
|
jsx-a11y/mouse-events-have-key-events: warn
|
||||||
jsx-a11y/no-access-key: warn
|
jsx-a11y/no-access-key: warn
|
||||||
jsx-a11y/no-distracting-elements: warn
|
jsx-a11y/no-distracting-elements: warn
|
||||||
|
@ -162,20 +162,23 @@ export default class AutosuggestTextarea extends ImmutablePureComponent {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='autosuggest-textarea'>
|
<div className='autosuggest-textarea'>
|
||||||
<Textarea
|
<label>
|
||||||
inputRef={this.setTextarea}
|
<span style={{ display: 'none' }}>{placeholder}</span>
|
||||||
className='autosuggest-textarea__textarea'
|
<Textarea
|
||||||
disabled={disabled}
|
inputRef={this.setTextarea}
|
||||||
placeholder={placeholder}
|
className='autosuggest-textarea__textarea'
|
||||||
autoFocus={autoFocus}
|
disabled={disabled}
|
||||||
value={value}
|
placeholder={placeholder}
|
||||||
onChange={this.onChange}
|
autoFocus={autoFocus}
|
||||||
onKeyDown={this.onKeyDown}
|
value={value}
|
||||||
onKeyUp={onKeyUp}
|
onChange={this.onChange}
|
||||||
onBlur={this.onBlur}
|
onKeyDown={this.onKeyDown}
|
||||||
onPaste={this.onPaste}
|
onKeyUp={onKeyUp}
|
||||||
style={style}
|
onBlur={this.onBlur}
|
||||||
/>
|
onPaste={this.onPaste}
|
||||||
|
style={style}
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
|
||||||
<div className={`autosuggest-textarea__suggestions ${suggestionsHidden || suggestions.isEmpty() ? '' : 'autosuggest-textarea__suggestions--visible'}`}>
|
<div className={`autosuggest-textarea__suggestions ${suggestionsHidden || suggestions.isEmpty() ? '' : 'autosuggest-textarea__suggestions--visible'}`}>
|
||||||
{suggestions.map((suggestion, i) => (
|
{suggestions.map((suggestion, i) => (
|
||||||
|
@ -6,6 +6,8 @@ import { FormattedMessage, injectIntl, defineMessages } from 'react-intl';
|
|||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
show: { id: 'column_header.show_settings', defaultMessage: 'Show settings' },
|
show: { id: 'column_header.show_settings', defaultMessage: 'Show settings' },
|
||||||
hide: { id: 'column_header.hide_settings', defaultMessage: 'Hide settings' },
|
hide: { id: 'column_header.hide_settings', defaultMessage: 'Hide settings' },
|
||||||
|
moveLeft: { id: 'column_header.moveLeft_settings', defaultMessage: 'Move column to the left' },
|
||||||
|
moveRight: { id: 'column_header.moveRight_settings', defaultMessage: 'Move column to the right' },
|
||||||
});
|
});
|
||||||
|
|
||||||
@injectIntl
|
@injectIntl
|
||||||
@ -101,8 +103,8 @@ export default class ColumnHeader extends React.PureComponent {
|
|||||||
|
|
||||||
moveButtons = (
|
moveButtons = (
|
||||||
<div key='move-buttons' className='column-header__setting-arrows'>
|
<div key='move-buttons' className='column-header__setting-arrows'>
|
||||||
<button className='text-btn column-header__setting-btn' onClick={this.handleMoveLeft}><i className='fa fa-chevron-left' /></button>
|
<button title={formatMessage(messages.moveLeft)} aria-label={formatMessage(messages.moveLeft)} className='text-btn column-header__setting-btn' onClick={this.handleMoveLeft}><i className='fa fa-chevron-left' /></button>
|
||||||
<button className='text-btn column-header__setting-btn' onClick={this.handleMoveRight}><i className='fa fa-chevron-right' /></button>
|
<button title={formatMessage(messages.moveRight)} aria-label={formatMessage(messages.moveRight)} className='text-btn column-header__setting-btn' onClick={this.handleMoveRight}><i className='fa fa-chevron-right' /></button>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
} else if (multiColumn) {
|
} else if (multiColumn) {
|
||||||
@ -133,7 +135,7 @@ export default class ColumnHeader extends React.PureComponent {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={wrapperClassName}>
|
<div className={wrapperClassName}>
|
||||||
<div role='heading' tabIndex={focusable && '0'} className={buttonClassName} aria-label={title} onClick={this.handleTitleClick}>
|
<h1 tabIndex={focusable && '0'} role='button' className={buttonClassName} aria-label={title} onClick={this.handleTitleClick}>
|
||||||
<i className={`fa fa-fw fa-${icon} column-header__icon`} />
|
<i className={`fa fa-fw fa-${icon} column-header__icon`} />
|
||||||
{title}
|
{title}
|
||||||
|
|
||||||
@ -141,7 +143,7 @@ export default class ColumnHeader extends React.PureComponent {
|
|||||||
{backButton}
|
{backButton}
|
||||||
{collapseButton}
|
{collapseButton}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</h1>
|
||||||
|
|
||||||
<div className={collapsibleClassName} tabIndex={collapsed && -1} onTransitionEnd={this.handleTransitionEnd}>
|
<div className={collapsibleClassName} tabIndex={collapsed && -1} onTransitionEnd={this.handleTransitionEnd}>
|
||||||
<div className='column-header__collapsible-inner'>
|
<div className='column-header__collapsible-inner'>
|
||||||
|
@ -19,12 +19,15 @@ export default class SettingText extends React.PureComponent {
|
|||||||
const { settings, settingKey, label } = this.props;
|
const { settings, settingKey, label } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<input
|
<label>
|
||||||
className='setting-text'
|
<span style={{ display: 'none' }}>{label}</span>
|
||||||
value={settings.getIn(settingKey)}
|
<input
|
||||||
onChange={this.handleChange}
|
className='setting-text'
|
||||||
placeholder={label}
|
value={settings.getIn(settingKey)}
|
||||||
/>
|
onChange={this.handleChange}
|
||||||
|
placeholder={label}
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,9 +52,10 @@ class Avatar extends ImmutablePureComponent {
|
|||||||
return (
|
return (
|
||||||
<Motion defaultStyle={{ radius: 90 }} style={{ radius: spring(isHovered ? 30 : 90, { stiffness: 180, damping: 12 }) }}>
|
<Motion defaultStyle={{ radius: 90 }} style={{ radius: spring(isHovered ? 30 : 90, { stiffness: 180, damping: 12 }) }}>
|
||||||
{({ radius }) =>
|
{({ radius }) =>
|
||||||
<a // eslint-disable-line jsx-a11y/anchor-has-content
|
<a
|
||||||
href={account.get('url')}
|
href={account.get('url')}
|
||||||
className='account__header__avatar'
|
className='account__header__avatar'
|
||||||
|
role='presentation'
|
||||||
target='_blank'
|
target='_blank'
|
||||||
rel='noopener'
|
rel='noopener'
|
||||||
style={{ borderRadius: `${radius}px`, backgroundImage: `url(${autoPlayGif || isHovered ? account.get('avatar') : account.get('avatar_static')})` }}
|
style={{ borderRadius: `${radius}px`, backgroundImage: `url(${autoPlayGif || isHovered ? account.get('avatar') : account.get('avatar_static')})` }}
|
||||||
@ -62,7 +63,9 @@ class Avatar extends ImmutablePureComponent {
|
|||||||
onMouseOut={this.handleMouseOut}
|
onMouseOut={this.handleMouseOut}
|
||||||
onFocus={this.handleMouseOver}
|
onFocus={this.handleMouseOver}
|
||||||
onBlur={this.handleMouseOut}
|
onBlur={this.handleMouseOut}
|
||||||
/>
|
>
|
||||||
|
<span style={{ display: 'none' }}>{account.get('acct')}</span>
|
||||||
|
</a>
|
||||||
}
|
}
|
||||||
</Motion>
|
</Motion>
|
||||||
);
|
);
|
||||||
|
@ -159,7 +159,10 @@ export default class ComposeForm extends ImmutablePureComponent {
|
|||||||
<div className='compose-form'>
|
<div className='compose-form'>
|
||||||
<Collapsable isVisible={this.props.spoiler} fullHeight={50}>
|
<Collapsable isVisible={this.props.spoiler} fullHeight={50}>
|
||||||
<div className='spoiler-input'>
|
<div className='spoiler-input'>
|
||||||
<input placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={this.props.spoiler_text} onChange={this.handleChangeSpoilerText} onKeyDown={this.handleKeyDown} type='text' className='spoiler-input__input' id='cw-spoiler-input' />
|
<label>
|
||||||
|
<span style={{ display: 'none' }}>{intl.formatMessage(messages.spoiler_placeholder)}</span>
|
||||||
|
<input placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={this.props.spoiler_text} onChange={this.handleChangeSpoilerText} onKeyDown={this.handleKeyDown} type='text' className='spoiler-input__input' id='cw-spoiler-input' />
|
||||||
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</Collapsable>
|
</Collapsable>
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ export default class NavigationBar extends ImmutablePureComponent {
|
|||||||
return (
|
return (
|
||||||
<div className='navigation-bar'>
|
<div className='navigation-bar'>
|
||||||
<Permalink href={this.props.account.get('url')} to={`/accounts/${this.props.account.get('id')}`}>
|
<Permalink href={this.props.account.get('url')} to={`/accounts/${this.props.account.get('id')}`}>
|
||||||
|
<span style={{ display: 'none' }}>{this.props.account.get('acct')}</span>
|
||||||
<Avatar src={this.props.account.get('avatar')} animate size={40} />
|
<Avatar src={this.props.account.get('avatar')} animate size={40} />
|
||||||
</Permalink>
|
</Permalink>
|
||||||
|
|
||||||
|
@ -52,15 +52,18 @@ export default class Search extends React.PureComponent {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='search'>
|
<div className='search'>
|
||||||
<input
|
<label>
|
||||||
className='search__input'
|
<span style={{ display: 'none' }}>{intl.formatMessage(messages.placeholder)}</span>
|
||||||
type='text'
|
<input
|
||||||
placeholder={intl.formatMessage(messages.placeholder)}
|
className='search__input'
|
||||||
value={value}
|
type='text'
|
||||||
onChange={this.handleChange}
|
placeholder={intl.formatMessage(messages.placeholder)}
|
||||||
onKeyUp={this.handleKeyDown}
|
value={value}
|
||||||
onFocus={this.handleFocus}
|
onChange={this.handleChange}
|
||||||
/>
|
onKeyUp={this.handleKeyDown}
|
||||||
|
onFocus={this.handleFocus}
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
|
||||||
<div role='button' tabIndex='0' className='search__icon' onClick={this.handleClear}>
|
<div role='button' tabIndex='0' className='search__icon' onClick={this.handleClear}>
|
||||||
<i className={`fa fa-search ${hasValue ? '' : 'active'}`} />
|
<i className={`fa fa-search ${hasValue ? '' : 'active'}`} />
|
||||||
|
@ -57,16 +57,19 @@ export default class UploadButton extends ImmutablePureComponent {
|
|||||||
return (
|
return (
|
||||||
<div className='compose-form__upload-button'>
|
<div className='compose-form__upload-button'>
|
||||||
<IconButton icon='camera' title={intl.formatMessage(messages.upload)} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />
|
<IconButton icon='camera' title={intl.formatMessage(messages.upload)} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />
|
||||||
<input
|
<label>
|
||||||
key={resetFileKey}
|
<span style={{ display: 'none' }}>{intl.formatMessage(messages.upload)}</span>
|
||||||
ref={this.setRef}
|
<input
|
||||||
type='file'
|
key={resetFileKey}
|
||||||
multiple={false}
|
ref={this.setRef}
|
||||||
accept={acceptContentTypes.toArray().join(',')}
|
type='file'
|
||||||
onChange={this.handleChange}
|
multiple={false}
|
||||||
disabled={disabled}
|
accept={acceptContentTypes.toArray().join(',')}
|
||||||
style={{ display: 'none' }}
|
onChange={this.handleChange}
|
||||||
/>
|
disabled={disabled}
|
||||||
|
style={{ display: 'none' }}
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -65,21 +65,21 @@ export default class Compose extends React.PureComponent {
|
|||||||
const { columns } = this.props;
|
const { columns } = this.props;
|
||||||
header = (
|
header = (
|
||||||
<nav className='drawer__header'>
|
<nav className='drawer__header'>
|
||||||
<Link to='/getting-started' className='drawer__tab' title={intl.formatMessage(messages.start)}><i role='img' className='fa fa-fw fa-asterisk' /></Link>
|
<Link to='/getting-started' className='drawer__tab' title={intl.formatMessage(messages.start)} aria-label={intl.formatMessage(messages.start)}><i role='img' className='fa fa-fw fa-asterisk' /></Link>
|
||||||
{!columns.some(column => column.get('id') === 'HOME') && (
|
{!columns.some(column => column.get('id') === 'HOME') && (
|
||||||
<Link to='/timelines/home' className='drawer__tab' title={intl.formatMessage(messages.home_timeline)}><i role='img' className='fa fa-fw fa-home' /></Link>
|
<Link to='/timelines/home' className='drawer__tab' title={intl.formatMessage(messages.home_timeline)} aria-label={intl.formatMessage(messages.home_timeline)}><i role='img' className='fa fa-fw fa-home' /></Link>
|
||||||
)}
|
)}
|
||||||
{!columns.some(column => column.get('id') === 'NOTIFICATIONS') && (
|
{!columns.some(column => column.get('id') === 'NOTIFICATIONS') && (
|
||||||
<Link to='/notifications' className='drawer__tab' title={intl.formatMessage(messages.notifications)}><i role='img' className='fa fa-fw fa-bell' /></Link>
|
<Link to='/notifications' className='drawer__tab' title={intl.formatMessage(messages.notifications)} aria-label={intl.formatMessage(messages.notifications)}><i role='img' className='fa fa-fw fa-bell' /></Link>
|
||||||
)}
|
)}
|
||||||
{!columns.some(column => column.get('id') === 'COMMUNITY') && (
|
{!columns.some(column => column.get('id') === 'COMMUNITY') && (
|
||||||
<Link to='/timelines/public/local' className='drawer__tab' title={intl.formatMessage(messages.community)}><i role='img' className='fa fa-fw fa-users' /></Link>
|
<Link to='/timelines/public/local' className='drawer__tab' title={intl.formatMessage(messages.community)} aria-label={intl.formatMessage(messages.community)}><i role='img' className='fa fa-fw fa-users' /></Link>
|
||||||
)}
|
)}
|
||||||
{!columns.some(column => column.get('id') === 'PUBLIC') && (
|
{!columns.some(column => column.get('id') === 'PUBLIC') && (
|
||||||
<Link to='/timelines/public' className='drawer__tab' title={intl.formatMessage(messages.public)}><i role='img' className='fa fa-fw fa-globe' /></Link>
|
<Link to='/timelines/public' className='drawer__tab' title={intl.formatMessage(messages.public)} aria-label={intl.formatMessage(messages.public)}><i role='img' className='fa fa-fw fa-globe' /></Link>
|
||||||
)}
|
)}
|
||||||
<a href='/settings/preferences' className='drawer__tab' title={intl.formatMessage(messages.preferences)}><i role='img' className='fa fa-fw fa-cog' /></a>
|
<a href='/settings/preferences' className='drawer__tab' title={intl.formatMessage(messages.preferences)} aria-label={intl.formatMessage(messages.preferences)}><i role='img' className='fa fa-fw fa-cog' /></a>
|
||||||
<a href='/auth/sign_out' className='drawer__tab' data-method='delete' title={intl.formatMessage(messages.logout)}><i role='img' className='fa fa-fw fa-sign-out' /></a>
|
<a href='/auth/sign_out' className='drawer__tab' data-method='delete' title={intl.formatMessage(messages.logout)} aria-label={intl.formatMessage(messages.logout)}><i role='img' className='fa fa-fw fa-sign-out' /></a>
|
||||||
</nav>
|
</nav>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -44,10 +44,34 @@ export default class ModalRoot extends React.PureComponent {
|
|||||||
window.addEventListener('keyup', this.handleKeyUp, false);
|
window.addEventListener('keyup', this.handleKeyUp, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentWillReceiveProps (nextProps) {
|
||||||
|
if (!!nextProps.type && !this.props.type) {
|
||||||
|
this.activeElement = document.activeElement;
|
||||||
|
|
||||||
|
this.getSiblings().forEach(sibling => sibling.setAttribute('inert', true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidUpdate (prevProps) {
|
||||||
|
if (!this.type && !!prevProps.type) {
|
||||||
|
this.getSiblings().forEach(sibling => sibling.removeAttribute('inert'));
|
||||||
|
this.activeElement.focus();
|
||||||
|
this.activeElement = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
componentWillUnmount () {
|
componentWillUnmount () {
|
||||||
window.removeEventListener('keyup', this.handleKeyUp);
|
window.removeEventListener('keyup', this.handleKeyUp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getSiblings = () => {
|
||||||
|
return Array(...this.node.parentElement.childNodes).filter(node => node !== this.node);
|
||||||
|
}
|
||||||
|
|
||||||
|
setRef = ref => {
|
||||||
|
this.node = ref;
|
||||||
|
}
|
||||||
|
|
||||||
willEnter () {
|
willEnter () {
|
||||||
return { opacity: 0, scale: 0.98 };
|
return { opacity: 0, scale: 0.98 };
|
||||||
}
|
}
|
||||||
@ -86,11 +110,11 @@ export default class ModalRoot extends React.PureComponent {
|
|||||||
willLeave={this.willLeave}
|
willLeave={this.willLeave}
|
||||||
>
|
>
|
||||||
{interpolatedStyles =>
|
{interpolatedStyles =>
|
||||||
<div className='modal-root'>
|
<div className='modal-root' ref={this.setRef}>
|
||||||
{interpolatedStyles.map(({ key, data: { type, props }, style }) => (
|
{interpolatedStyles.map(({ key, data: { type, props }, style }) => (
|
||||||
<div key={key} style={{ pointerEvents: visible ? 'auto' : 'none' }}>
|
<div key={key} style={{ pointerEvents: visible ? 'auto' : 'none' }}>
|
||||||
<div role='presentation' className='modal-root__overlay' style={{ opacity: style.opacity }} onClick={onClose} />
|
<div role='presentation' className='modal-root__overlay' style={{ opacity: style.opacity }} onClick={onClose} />
|
||||||
<div className='modal-root__container' style={{ opacity: style.opacity, transform: `translateZ(0px) scale(${style.scale})` }}>
|
<div role='dialog' className='modal-root__container' style={{ opacity: style.opacity, transform: `translateZ(0px) scale(${style.scale})` }}>
|
||||||
<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading} error={this.renderError} renderDelay={200}>
|
<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading} error={this.renderError} renderDelay={200}>
|
||||||
{(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />}
|
{(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />}
|
||||||
</BundleContainer>
|
</BundleContainer>
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "الخيط العام الموحد",
|
"column.public": "الخيط العام الموحد",
|
||||||
"column_back_button.label": "العودة",
|
"column_back_button.label": "العودة",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Публичен канал",
|
"column.public": "Публичен канал",
|
||||||
"column_back_button.label": "Назад",
|
"column_back_button.label": "Назад",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Línia de temps federada",
|
"column.public": "Línia de temps federada",
|
||||||
"column_back_button.label": "Enrere",
|
"column_back_button.label": "Enrere",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Gesamtes bekanntes Netz",
|
"column.public": "Gesamtes bekanntes Netz",
|
||||||
"column_back_button.label": "Zurück",
|
"column_back_button.label": "Zurück",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -61,6 +61,14 @@
|
|||||||
"defaultMessage": "Hide settings",
|
"defaultMessage": "Hide settings",
|
||||||
"id": "column_header.hide_settings"
|
"id": "column_header.hide_settings"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Move column to the left",
|
||||||
|
"id": "column_header.moveLeft_settings"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Move column to the right",
|
||||||
|
"id": "column_header.moveRight_settings"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"defaultMessage": "Unpin",
|
"defaultMessage": "Unpin",
|
||||||
"id": "column_header.unpin"
|
"id": "column_header.unpin"
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Federated timeline",
|
"column.public": "Federated timeline",
|
||||||
"column_back_button.label": "Back",
|
"column_back_button.label": "Back",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Fratara tempolinio",
|
"column.public": "Fratara tempolinio",
|
||||||
"column_back_button.label": "Reveni",
|
"column_back_button.label": "Reveni",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Historia federada",
|
"column.public": "Historia federada",
|
||||||
"column_back_button.label": "Atrás",
|
"column_back_button.label": "Atrás",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "نوشتههای همهجا",
|
"column.public": "نوشتههای همهجا",
|
||||||
"column_back_button.label": "بازگشت",
|
"column_back_button.label": "بازگشت",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Yleinen aikajana",
|
"column.public": "Yleinen aikajana",
|
||||||
"column_back_button.label": "Takaisin",
|
"column_back_button.label": "Takaisin",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Fil public global",
|
"column.public": "Fil public global",
|
||||||
"column_back_button.label": "Retour",
|
"column_back_button.label": "Retour",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Épingler",
|
"column_header.pin": "Épingler",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Retirer",
|
"column_header.unpin": "Retirer",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "בפרהסיה",
|
"column.public": "בפרהסיה",
|
||||||
"column_back_button.label": "חזרה",
|
"column_back_button.label": "חזרה",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Federalni timeline",
|
"column.public": "Federalni timeline",
|
||||||
"column_back_button.label": "Natrag",
|
"column_back_button.label": "Natrag",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Nyilvános",
|
"column.public": "Nyilvános",
|
||||||
"column_back_button.label": "Vissza",
|
"column_back_button.label": "Vissza",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Linimasa gabunggan",
|
"column.public": "Linimasa gabunggan",
|
||||||
"column_back_button.label": "Kembali",
|
"column_back_button.label": "Kembali",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Federata tempolineo",
|
"column.public": "Federata tempolineo",
|
||||||
"column_back_button.label": "Retro",
|
"column_back_button.label": "Retro",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Timeline federata",
|
"column.public": "Timeline federata",
|
||||||
"column_back_button.label": "Indietro",
|
"column_back_button.label": "Indietro",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "連合タイムライン",
|
"column.public": "連合タイムライン",
|
||||||
"column_back_button.label": "戻る",
|
"column_back_button.label": "戻る",
|
||||||
"column_header.hide_settings": "設定を隠す",
|
"column_header.hide_settings": "設定を隠す",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "ピン留めする",
|
"column_header.pin": "ピン留めする",
|
||||||
"column_header.show_settings": "設定を表示",
|
"column_header.show_settings": "設定を表示",
|
||||||
"column_header.unpin": "ピン留めを外す",
|
"column_header.unpin": "ピン留めを外す",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "연합 타임라인",
|
"column.public": "연합 타임라인",
|
||||||
"column_back_button.label": "돌아가기",
|
"column_back_button.label": "돌아가기",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "고정하기",
|
"column_header.pin": "고정하기",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "고정 해제",
|
"column_header.unpin": "고정 해제",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Globale tijdlijn",
|
"column.public": "Globale tijdlijn",
|
||||||
"column_back_button.label": "terug",
|
"column_back_button.label": "terug",
|
||||||
"column_header.hide_settings": "Instellingen verbergen",
|
"column_header.hide_settings": "Instellingen verbergen",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Vastmaken",
|
"column_header.pin": "Vastmaken",
|
||||||
"column_header.show_settings": "Instellingen tonen",
|
"column_header.show_settings": "Instellingen tonen",
|
||||||
"column_header.unpin": "Losmaken",
|
"column_header.unpin": "Losmaken",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Felles tidslinje",
|
"column.public": "Felles tidslinje",
|
||||||
"column_back_button.label": "Tilbake",
|
"column_back_button.label": "Tilbake",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Flux public global",
|
"column.public": "Flux public global",
|
||||||
"column_back_button.label": "Tornar",
|
"column_back_button.label": "Tornar",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Penjar",
|
"column_header.pin": "Penjar",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Despenjar",
|
"column_header.unpin": "Despenjar",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Globalna oś czasu",
|
"column.public": "Globalna oś czasu",
|
||||||
"column_back_button.label": "Wróć",
|
"column_back_button.label": "Wróć",
|
||||||
"column_header.hide_settings": "Ukryj ustawienia",
|
"column_header.hide_settings": "Ukryj ustawienia",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Przypnij",
|
"column_header.pin": "Przypnij",
|
||||||
"column_header.show_settings": "Pokaż ustawienia",
|
"column_header.show_settings": "Pokaż ustawienia",
|
||||||
"column_header.unpin": "Cofnij przypięcie",
|
"column_header.unpin": "Cofnij przypięcie",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Global",
|
"column.public": "Global",
|
||||||
"column_back_button.label": "Voltar",
|
"column_back_button.label": "Voltar",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Global",
|
"column.public": "Global",
|
||||||
"column_back_button.label": "Voltar",
|
"column_back_button.label": "Voltar",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Глобальная лента",
|
"column.public": "Глобальная лента",
|
||||||
"column_back_button.label": "Назад",
|
"column_back_button.label": "Назад",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Закрепить",
|
"column_header.pin": "Закрепить",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Открепить",
|
"column_header.unpin": "Открепить",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Federated timeline",
|
"column.public": "Federated timeline",
|
||||||
"column_back_button.label": "Back",
|
"column_back_button.label": "Back",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Federe zaman tüneli",
|
"column.public": "Federe zaman tüneli",
|
||||||
"column_back_button.label": "Geri",
|
"column_back_button.label": "Geri",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "Глобальна стрічка",
|
"column.public": "Глобальна стрічка",
|
||||||
"column_back_button.label": "Назад",
|
"column_back_button.label": "Назад",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "跨站公共时间轴",
|
"column.public": "跨站公共时间轴",
|
||||||
"column_back_button.label": "Back",
|
"column_back_button.label": "Back",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "跨站時間軸",
|
"column.public": "跨站時間軸",
|
||||||
"column_back_button.label": "返回",
|
"column_back_button.label": "返回",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
"column.public": "聯盟時間軸",
|
"column.public": "聯盟時間軸",
|
||||||
"column_back_button.label": "上一頁",
|
"column_back_button.label": "上一頁",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Pin",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Unpin",
|
||||||
|
Loading…
Reference in New Issue
Block a user