Add option to show only local toots in timeline preview (#6292)

* Add option to show only local toots in timeline preview
Right know, toots from all the known fediverse are shown in the main
page of an instance. That however doesn't reflect the instance itself.
With this option the admin may choose to display only local toots so
that users checking the instance get a better idea of internal
conversations.

* Fix issues pointed by codeclimate and eslint

* Add default message for community timeline

* Update pl.yml
This commit is contained in:
Renato "Lond" Cerqueira 2018-02-04 06:00:10 +01:00 committed by Eugen Rochko
parent 26f21fd5a0
commit 4e4f1b0dcb
11 changed files with 111 additions and 3 deletions

View file

@ -31,7 +31,7 @@ class AboutController < ApplicationController
def initial_state_params def initial_state_params
{ {
settings: {}, settings: { known_fediverse: Setting.show_known_fediverse_at_about_page },
token: current_session&.token, token: current_session&.token,
} }
end end

View file

@ -19,6 +19,7 @@ module Admin
min_invite_role min_invite_role
activity_api_enabled activity_api_enabled
peers_api_enabled peers_api_enabled
show_known_fediverse_at_about_page
).freeze ).freeze
BOOLEAN_SETTINGS = %w( BOOLEAN_SETTINGS = %w(
@ -28,6 +29,7 @@ module Admin
show_staff_badge show_staff_badge
activity_api_enabled activity_api_enabled
peers_api_enabled peers_api_enabled
show_known_fediverse_at_about_page
).freeze ).freeze
UPLOAD_SETTINGS = %w( UPLOAD_SETTINGS = %w(

View file

@ -6,6 +6,7 @@ import { hydrateStore } from '../actions/store';
import { IntlProvider, addLocaleData } from 'react-intl'; import { IntlProvider, addLocaleData } from 'react-intl';
import { getLocale } from '../locales'; import { getLocale } from '../locales';
import PublicTimeline from '../features/standalone/public_timeline'; import PublicTimeline from '../features/standalone/public_timeline';
import CommunityTimeline from '../features/standalone/community_timeline';
import HashtagTimeline from '../features/standalone/hashtag_timeline'; import HashtagTimeline from '../features/standalone/hashtag_timeline';
import initialState from '../initial_state'; import initialState from '../initial_state';
@ -23,17 +24,24 @@ export default class TimelineContainer extends React.PureComponent {
static propTypes = { static propTypes = {
locale: PropTypes.string.isRequired, locale: PropTypes.string.isRequired,
hashtag: PropTypes.string, hashtag: PropTypes.string,
showPublicTimeline: PropTypes.bool.isRequired,
};
static defaultProps = {
showPublicTimeline: initialState.settings.known_fediverse,
}; };
render () { render () {
const { locale, hashtag } = this.props; const { locale, hashtag, showPublicTimeline } = this.props;
let timeline; let timeline;
if (hashtag) { if (hashtag) {
timeline = <HashtagTimeline hashtag={hashtag} />; timeline = <HashtagTimeline hashtag={hashtag} />;
} else { } else if (showPublicTimeline) {
timeline = <PublicTimeline />; timeline = <PublicTimeline />;
} else {
timeline = <CommunityTimeline />;
} }
return ( return (

View file

@ -0,0 +1,74 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import StatusListContainer from '../../ui/containers/status_list_container';
import {
refreshCommunityTimeline,
expandCommunityTimeline,
} from '../../../actions/timelines';
import Column from '../../../components/column';
import ColumnHeader from '../../../components/column_header';
import { defineMessages, injectIntl } from 'react-intl';
import { connectCommunityStream } from '../../../actions/streaming';
const messages = defineMessages({
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' },
});
@connect()
@injectIntl
export default class CommunityTimeline extends React.PureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
};
handleHeaderClick = () => {
this.column.scrollTop();
}
setRef = c => {
this.column = c;
}
componentDidMount () {
const { dispatch } = this.props;
dispatch(refreshCommunityTimeline());
this.disconnect = dispatch(connectCommunityStream());
}
componentWillUnmount () {
if (this.disconnect) {
this.disconnect();
this.disconnect = null;
}
}
handleLoadMore = () => {
this.props.dispatch(expandCommunityTimeline());
}
render () {
const { intl } = this.props;
return (
<Column ref={this.setRef}>
<ColumnHeader
icon='users'
title={intl.formatMessage(messages.title)}
onClick={this.handleHeaderClick}
/>
<StatusListContainer
timelineId='community'
loadMore={this.handleLoadMore}
scrollKey='standalone_public_timeline'
trackScroll={false}
/>
</Column>
);
}
}

View file

@ -1230,6 +1230,15 @@
], ],
"path": "app/javascript/mastodon/features/public_timeline/index.json" "path": "app/javascript/mastodon/features/public_timeline/index.json"
}, },
{
"descriptors": [
{
"defaultMessage": "A look inside...",
"id": "standalone.public_title"
}
],
"path": "app/javascript/mastodon/features/standalone/community_timeline/index.json"
},
{ {
"descriptors": [ "descriptors": [
{ {

View file

@ -34,6 +34,8 @@ class Form::AdminSettings
:activity_api_enabled=, :activity_api_enabled=,
:peers_api_enabled, :peers_api_enabled,
:peers_api_enabled=, :peers_api_enabled=,
:show_known_fediverse_at_about_page,
:show_known_fediverse_at_about_page=,
to: Setting to: Setting
) )
end end

View file

@ -18,6 +18,9 @@
.fields-group .fields-group
= f.input :timeline_preview, as: :boolean, wrapper: :with_label, label: t('admin.settings.timeline_preview.title'), hint: t('admin.settings.timeline_preview.desc_html') = f.input :timeline_preview, as: :boolean, wrapper: :with_label, label: t('admin.settings.timeline_preview.title'), hint: t('admin.settings.timeline_preview.desc_html')
.fields-group
= f.input :show_known_fediverse_at_about_page, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_known_fediverse_at_about_page.title'), hint: t('admin.settings.show_known_fediverse_at_about_page.desc_html')
.fields-group .fields-group
= f.input :show_staff_badge, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_staff_badge.title'), hint: t('admin.settings.show_staff_badge.desc_html') = f.input :show_staff_badge, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_staff_badge.title'), hint: t('admin.settings.show_staff_badge.desc_html')

View file

@ -290,6 +290,9 @@ en:
open: open:
desc_html: Allow anyone to create an account desc_html: Allow anyone to create an account
title: Open registration title: Open registration
show_known_fediverse_at_about_page:
desc_html: When toggled, it will show toots from all the known fediverse on preview. Otherwise it will only show local toots.
title: Show known fediverse on timeline preview
show_staff_badge: show_staff_badge:
desc_html: Show a staff badge on a user page desc_html: Show a staff badge on a user page
title: Show staff badge title: Show staff badge

View file

@ -291,6 +291,9 @@ pl:
open: open:
desc_html: Pozwól każdemu na założenie konta desc_html: Pozwól każdemu na założenie konta
title: Otwarta rejestracja title: Otwarta rejestracja
show_known_fediverse_at_about_page:
desc_html: Jeśli włączone, podgląd instancji będzie wyświetlał wpisy z całego Fediwersum. W innym przypadku, będą wyświetlane tylko lokalne wpisy.
title: Pokazuj wszystkie znane wpisy na podglądzie instancji
show_staff_badge: show_staff_badge:
desc_html: Pokazuj odznakę uprawnień na stronie profilu użytkownika desc_html: Pokazuj odznakę uprawnień na stronie profilu użytkownika
title: Pokazuj odznakę administracji title: Pokazuj odznakę administracji

View file

@ -290,6 +290,9 @@ pt-BR:
open: open:
desc_html: Permitir que qualquer um crie uma conta desc_html: Permitir que qualquer um crie uma conta
title: Cadastro aberto title: Cadastro aberto
show_known_fediverse_at_about_page:
desc_html: Quando ligado, vai mostrar toots de todo o fediverso conhecido na prévia da timeline. Senão, mostra somente toots locais.
title: Mostrar fediverso conhecido na prévia da timeline
show_staff_badge: show_staff_badge:
desc_html: Mostrar uma insígnia de Equipe na página de usuário desc_html: Mostrar uma insígnia de Equipe na página de usuário
title: Mostrar insígnia de equipe title: Mostrar insígnia de equipe

View file

@ -49,6 +49,7 @@ defaults: &defaults
bootstrap_timeline_accounts: '' bootstrap_timeline_accounts: ''
activity_api_enabled: true activity_api_enabled: true
peers_api_enabled: true peers_api_enabled: true
show_known_fediverse_at_about_page: true
development: development:
<<: *defaults <<: *defaults