From 8e349c368c40a4c71c0278a08a084c6b8688dcdb Mon Sep 17 00:00:00 2001 From: mgabdev <> Date: Fri, 1 May 2020 01:50:27 -0400 Subject: [PATCH] Progress --- app/javascript/gabsocial/actions/compose.js | 20 +- .../gabsocial/actions/notifications.js | 9 +- app/javascript/gabsocial/actions/popover.js | 20 +- .../gabsocial/assets/arrow_left_icon.js | 24 ++ .../gabsocial/assets/arrow_right_icon.js | 24 ++ app/javascript/gabsocial/components/avatar.js | 2 +- .../gabsocial/components/composer.js | 11 +- .../gabsocial/components/error_boundary.js | 137 +++++++++++- .../gabsocial/components/group_header.js | 19 +- app/javascript/gabsocial/components/icon.js | 4 + app/javascript/gabsocial/components/image.js | 4 +- .../gabsocial/components/link_footer.js | 3 +- .../gabsocial/components/media_gallery.js | 2 +- .../components/modal/block_domain_modal.js | 10 +- .../gabsocial/components/modal/boost_modal.js | 120 ++++------ .../components/modal/gif_picker_modal.js | 4 +- .../gabsocial/components/modal/media_modal.js | 209 +++++++++++------- .../gabsocial/components/modal/modal_root.js | 17 +- .../gabsocial/components/navigation_bar.js | 33 ++- .../gabsocial/components/notification.js | 11 +- .../components/panel/profile_info_panel.js | 5 +- .../components/panel/progress_panel.js | 2 + .../gabsocial/components/pill_item.js | 5 +- .../popover/emoji_picker_popover.js | 2 +- .../popover/group_options_popover.js | 93 +++++++- .../components/popover/popover_base.js | 98 ++++---- .../components/popover/popover_root.js | 105 +-------- .../popover/profile_options_popover.js | 8 +- .../popover/repost_options_popover.js | 103 +++++---- .../popover/status_options_popover.js | 191 ++++++++-------- .../popover/status_share_popover.js | 80 +++---- .../popover/status_visibility_popover.js | 22 +- .../gabsocial/components/progress_bar.js | 5 +- app/javascript/gabsocial/components/search.js | 6 +- .../gabsocial/components/sidebar.js | 15 +- .../components/sidebar_section_item.js | 7 +- app/javascript/gabsocial/components/status.js | 29 +-- .../gabsocial/components/status_action_bar.js | 21 +- .../components/status_action_bar_item.js | 43 ++-- .../gabsocial/components/status_card.js | 5 +- .../gabsocial/components/status_prepend.js | 12 +- .../gabsocial/components/tab_bar_item.js | 14 +- .../gabsocial/components/user_stat.js | 1 + app/javascript/gabsocial/constants.js | 2 +- .../gabsocial/containers/status_container.js | 44 +--- app/javascript/gabsocial/extra_polyfills.js | 2 +- .../gabsocial/features/blocked_accounts.js | 13 +- .../gabsocial/features/blocked_domains.js | 6 +- .../compose/components/gif_selector_button.js | 2 +- .../compose/components/media_upload_button.js | 2 +- .../components/rich_text_editor_button.js | 2 +- .../follow_requests/follow_requests.js | 56 +++-- .../gabsocial/features/followers.js | 6 +- .../gabsocial/features/following.js | 4 + .../gabsocial/features/groups_collection.js | 2 - .../gabsocial/features/home_timeline.js | 2 +- app/javascript/gabsocial/features/mutes.js | 12 +- app/javascript/gabsocial/features/status.js | 2 - app/javascript/gabsocial/initial_state.js | 1 + app/javascript/gabsocial/layouts/layout.js | 2 - app/javascript/gabsocial/locales/ast.json | 6 +- app/javascript/gabsocial/locales/bg.json | 22 +- .../gabsocial/locales/defaultMessages.json | 36 +-- app/javascript/gabsocial/locales/en.json | 24 +- app/javascript/gabsocial/locales/he.json | 6 +- app/javascript/gabsocial/locales/hi.json | 22 +- app/javascript/gabsocial/locales/hr.json | 8 +- app/javascript/gabsocial/locales/hu.json | 8 +- app/javascript/gabsocial/locales/hy.json | 8 +- app/javascript/gabsocial/locales/id.json | 8 +- app/javascript/gabsocial/locales/io.json | 14 +- app/javascript/gabsocial/locales/ka.json | 2 +- app/javascript/gabsocial/locales/lv.json | 10 +- app/javascript/gabsocial/locales/ms.json | 22 +- app/javascript/gabsocial/locales/no.json | 8 +- app/javascript/gabsocial/locales/sl.json | 10 +- app/javascript/gabsocial/locales/sr-Latn.json | 8 +- app/javascript/gabsocial/locales/sv.json | 2 +- app/javascript/gabsocial/locales/ta.json | 22 +- app/javascript/gabsocial/locales/th.json | 4 +- app/javascript/gabsocial/locales/uk.json | 4 +- app/javascript/gabsocial/locales/zh-CN.json | 2 +- app/javascript/gabsocial/locales/zh-HK.json | 2 +- .../gabsocial/pages/profile_page.js | 1 - app/javascript/gabsocial/reducers/compose.js | 6 +- .../gabsocial/reducers/notifications.js | 9 - .../gabsocial/reducers/user_lists.js | 74 ++++++- .../gabsocial/utils/resize_image.js | 53 ++++- app/javascript/packs/public.js | 1 - app/javascript/styles/global.css | 4 +- app/models/media_attachment.rb | 3 +- app/models/status.rb | 2 +- app/services/hashtag_query_service.rb | 8 +- app/services/post_status_service.rb | 2 +- app/services/vote_service.rb | 2 +- config/initializers/rack_attack.rb | 1 + config/locales/simple_form.en.yml | 4 +- config/locales/simple_form.en_GB.yml | 4 +- lib/gabsocial/migration_helpers.rb | 8 +- 99 files changed, 1268 insertions(+), 887 deletions(-) create mode 100644 app/javascript/gabsocial/assets/arrow_left_icon.js create mode 100644 app/javascript/gabsocial/assets/arrow_right_icon.js diff --git a/app/javascript/gabsocial/actions/compose.js b/app/javascript/gabsocial/actions/compose.js index 3629c266..352e538b 100644 --- a/app/javascript/gabsocial/actions/compose.js +++ b/app/javascript/gabsocial/actions/compose.js @@ -246,19 +246,20 @@ export function submitComposeFail(error) { return { type: COMPOSE_SUBMIT_FAIL, error: error, - }; -}; + } +} export function uploadCompose(files) { return function (dispatch, getState) { - if (!me) return; + if (!me) return - const uploadLimit = 4; - const media = getState().getIn(['compose', 'media_attachments']); + const uploadLimit = 4 + const media = getState().getIn(['compose', 'media_attachments']) + const pending = getState().getIn(['compose', 'pending_media_attachments']) const progress = new Array(files.length).fill(0); let total = Array.from(files).reduce((a, v) => a + v.size, 0); - if (files.length + media.size > uploadLimit) { + if (files.length + media.size + pending > uploadLimit) { // dispatch(showAlert(undefined, messages.uploadErrorLimit)); return; } @@ -273,7 +274,7 @@ export function uploadCompose(files) { for (const [i, f] of Array.from(files).entries()) { if (media.size + i > 3) break; - resizeImage(f).then(file => { + resizeImage(f).then((file) => { const data = new FormData(); data.append('file', file); // Account for disparity in size of original image and resized data @@ -285,7 +286,7 @@ export function uploadCompose(files) { dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total)); }, }).then(({ data }) => dispatch(uploadComposeSuccess(data))); - }).catch(error => dispatch(uploadComposeFail(error))); + }).catch(error => dispatch(uploadComposeFail(error, true))); }; }; }; @@ -318,10 +319,11 @@ export function changeUploadComposeSuccess(media) { }; }; -export function changeUploadComposeFail(error) { +export function changeUploadComposeFail(error, decrement = false) { return { type: COMPOSE_UPLOAD_CHANGE_FAIL, error: error, + decrement: decrement, skipLoading: true, }; }; diff --git a/app/javascript/gabsocial/actions/notifications.js b/app/javascript/gabsocial/actions/notifications.js index 52292228..95b23810 100644 --- a/app/javascript/gabsocial/actions/notifications.js +++ b/app/javascript/gabsocial/actions/notifications.js @@ -157,15 +157,10 @@ export function expandNotifications({ maxId } = {}, done = noOp) { return; } - console.log('activeFilter:', activeFilter) - // console.log('excludeTypesFromSettings(getState()):', excludeTypesFromSettings(getState())) - console.log('excludeTypesFromFilter(activeFilter):', excludeTypesFromFilter(activeFilter)) - - // : todo : - // filter verified and following here too const params = { max_id: maxId, exclude_types: activeFilter === 'all' ? null : excludeTypesFromFilter(activeFilter), + // : todo : ? // exclude_types: activeFilter === 'all' // ? excludeTypesFromSettings(getState()) // : excludeTypesFromFilter(activeFilter), @@ -180,8 +175,6 @@ export function expandNotifications({ maxId } = {}, done = noOp) { dispatch(expandNotificationsRequest(isLoadingMore)); - console.log("params:", params) - api(getState).get('/api/v1/notifications', { params }).then(response => { const next = getLinks(response).refs.find(link => link.rel === 'next'); diff --git a/app/javascript/gabsocial/actions/popover.js b/app/javascript/gabsocial/actions/popover.js index 39d5ae2f..f872fc03 100644 --- a/app/javascript/gabsocial/actions/popover.js +++ b/app/javascript/gabsocial/actions/popover.js @@ -2,10 +2,14 @@ export const POPOVER_OPEN = 'POPOVER_OPEN' export const POPOVER_CLOSE = 'POPOVER_CLOSE' export function openPopover(type, props) { - return { - type: POPOVER_OPEN, - popoverType: type, - popoverProps: props, + return function (dispatch, getState) { + const currentlyOpenPopover = getState().getIn(['popover', 'popoverType']) + + if (currentlyOpenPopover === type) { + dispatch(closePopover(type)) + } else { + dispatch(handleOpenPopover(type, props)) + } } } @@ -15,3 +19,11 @@ export function closePopover(type) { popoverType: type, } } + +const handleOpenPopover = (type, props) => { + return { + type: POPOVER_OPEN, + popoverType: type, + popoverProps: props, + } +} \ No newline at end of file diff --git a/app/javascript/gabsocial/assets/arrow_left_icon.js b/app/javascript/gabsocial/assets/arrow_left_icon.js new file mode 100644 index 00000000..abdd2da2 --- /dev/null +++ b/app/javascript/gabsocial/assets/arrow_left_icon.js @@ -0,0 +1,24 @@ +const ArrowLeftIcon = ({ + className = '', + size = '16px', + title = '', +}) => ( + + + + + +) + +export default ArrowLeftIcon \ No newline at end of file diff --git a/app/javascript/gabsocial/assets/arrow_right_icon.js b/app/javascript/gabsocial/assets/arrow_right_icon.js new file mode 100644 index 00000000..9bc8b1da --- /dev/null +++ b/app/javascript/gabsocial/assets/arrow_right_icon.js @@ -0,0 +1,24 @@ +const ArrowRightIcon = ({ + className = '', + size = '16px', + title = '', +}) => ( + + + + + +) + +export default ArrowRightIcon \ No newline at end of file diff --git a/app/javascript/gabsocial/components/avatar.js b/app/javascript/gabsocial/components/avatar.js index 7e7111f5..dedb939a 100644 --- a/app/javascript/gabsocial/components/avatar.js +++ b/app/javascript/gabsocial/components/avatar.js @@ -107,7 +107,7 @@ class Avatar extends ImmutablePureComponent { return ( {alt} diff --git a/app/javascript/gabsocial/components/composer.js b/app/javascript/gabsocial/components/composer.js index 91e68ec0..65d0c931 100644 --- a/app/javascript/gabsocial/components/composer.js +++ b/app/javascript/gabsocial/components/composer.js @@ -195,10 +195,13 @@ class Composer extends PureComponent { return (
- + { /** : todo : */ + !small && + + }
{ + const { stackTrace } = this.state; + const textarea = document.createElement('textarea'); + + textarea.textContent = stackTrace; + textarea.style.position = 'fixed'; + + document.body.appendChild(textarea); + + try { + textarea.select(); + document.execCommand('copy'); + } catch (e) { + // + } + + document.body.removeChild(textarea); + + this.setState({ copied: true }); + setTimeout(() => this.setState({ copied: false }), 700); + } + render() { - const { hasError } = this.state + const { hasError, copied } = this.state if (!hasError) return this.props.children - // : todo : custom error page - return ( -
-
- Return Home +
+
+
+ +
+ +

+ +

+ +
+
+
+ +
+ + + + + + + + + + + +
+ + {APP_NAME} ({version}) + + +
+ + + + + +
+
+ + + +
+ +
+
) diff --git a/app/javascript/gabsocial/components/group_header.js b/app/javascript/gabsocial/components/group_header.js index 1eac774b..0e2efaa6 100644 --- a/app/javascript/gabsocial/components/group_header.js +++ b/app/javascript/gabsocial/components/group_header.js @@ -14,7 +14,6 @@ import Text from './text' const messages = defineMessages({ join: { id: 'groups.join', defaultMessage: 'Join group' }, leave: { id: 'groups.leave', defaultMessage: 'Leave group' }, - share: { id: 'status.share', defaultMessage: 'Share' }, removed_accounts: { id: 'groups.removed_accounts', defaultMessage: 'Removed Accounts' }, group_archived: { id: 'group.detail.archived_group', defaultMessage: 'Archived group' }, group_admin: { id: 'groups.detail.role_admin', defaultMessage: 'You\'re an admin' } @@ -30,10 +29,6 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ } }, - onShare() { - - }, - onOpenGroupOptions() { }, @@ -53,7 +48,6 @@ class GroupHeader extends ImmutablePureComponent { group: ImmutablePropTypes.map, intl: PropTypes.object.isRequired, onToggleMembership: PropTypes.func.isRequired, - onShare: PropTypes.func.isRequired, onOpenGroupOptions: PropTypes.func.isRequired, relationships: ImmutablePropTypes.map, } @@ -67,7 +61,6 @@ class GroupHeader extends ImmutablePureComponent { const { group, intl, - onShare, onOpenGroupOptions, relationships, } = this.props @@ -130,17 +123,7 @@ class GroupHeader extends ImmutablePureComponent { } - +
+ + +
+
- ); + +
+ + {intl.formatMessage(messages.combo)} + +
+ +
+
+
+ ) } } diff --git a/app/javascript/gabsocial/components/modal/gif_picker_modal.js b/app/javascript/gabsocial/components/modal/gif_picker_modal.js index 2b05ef70..ce172394 100644 --- a/app/javascript/gabsocial/components/modal/gif_picker_modal.js +++ b/app/javascript/gabsocial/components/modal/gif_picker_modal.js @@ -86,8 +86,8 @@ class GifPickerModal extends PureComponent { this.props.handleFetchCategories() } - onChange = (e) => { - this.props.handleOnChange(e.target.value) + onChange = (value) => { + this.props.handleOnChange(value) } onHandleCloseModal = () => { diff --git a/app/javascript/gabsocial/components/modal/media_modal.js b/app/javascript/gabsocial/components/modal/media_modal.js index e9f1441c..f0886199 100644 --- a/app/javascript/gabsocial/components/modal/media_modal.js +++ b/app/javascript/gabsocial/components/modal/media_modal.js @@ -1,13 +1,12 @@ -import classNames from 'classnames' import { defineMessages, injectIntl } from 'react-intl' import ReactSwipeableViews from 'react-swipeable-views' import ImmutablePropTypes from 'react-immutable-proptypes' import ImmutablePureComponent from 'react-immutable-pure-component' +import { CX } from '../../constants' import Video from '../video' import ExtendedVideoPlayer from '../extended_video_player' import Button from '../button' import ImageLoader from '../image_loader' -import Icon from '../icon' const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -16,9 +15,7 @@ const messages = defineMessages({ viewContext: { id: 'lightbox.view_context', defaultMessage: 'View context' }, }) -export const previewState = 'previewMediaModal'; - -// : todo : +export const previewState = 'previewMediaModal' export default @injectIntl @@ -30,115 +27,158 @@ class MediaModal extends ImmutablePureComponent { index: PropTypes.number.isRequired, onClose: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, - }; + } static contextTypes = { router: PropTypes.object, - }; + } state = { index: null, navigationHidden: false, - }; + } + + updateOnProps = [ + 'media', + 'status', + 'index', + ] handleSwipe = (index) => { - this.setState({ index: index % this.props.media.size }); + this.setState({ index: index % this.props.media.size }) } handleNextClick = () => { - this.setState({ index: (this.getIndex() + 1) % this.props.media.size }); + this.setState({ index: (this.getIndex() + 1) % this.props.media.size }) } handlePrevClick = () => { - this.setState({ index: (this.props.media.size + this.getIndex() - 1) % this.props.media.size }); + this.setState({ index: (this.props.media.size + this.getIndex() - 1) % this.props.media.size }) } handleChangeIndex = (e) => { - const index = Number(e.currentTarget.getAttribute('data-index')); - this.setState({ index: index % this.props.media.size }); + const index = Number(e.currentTarget.getAttribute('data-index')) + this.setState({ index: index % this.props.media.size }) } handleKeyDown = (e) => { - switch(e.key) { - case 'ArrowLeft': - this.handlePrevClick(); - e.preventDefault(); - e.stopPropagation(); - break; - case 'ArrowRight': - this.handleNextClick(); - e.preventDefault(); - e.stopPropagation(); - break; + switch (e.key) { + case 'ArrowLeft': + this.handlePrevClick() + e.preventDefault() + e.stopPropagation() + break + case 'ArrowRight': + this.handleNextClick() + e.preventDefault() + e.stopPropagation() + break } } - componentDidMount () { - window.addEventListener('keydown', this.handleKeyDown, false); + componentDidMount() { + window.addEventListener('keydown', this.handleKeyDown, false) if (this.context.router) { - const history = this.context.router.history; + const history = this.context.router.history - history.push(history.location.pathname, previewState); + history.push(history.location.pathname, previewState) this.unlistenHistory = history.listen(() => { - this.props.onClose(); - }); + this.props.onClose() + }) } } - componentWillUnmount () { - window.removeEventListener('keydown', this.handleKeyDown); + componentWillUnmount() { + window.removeEventListener('keydown', this.handleKeyDown) if (this.context.router) { - this.unlistenHistory(); + this.unlistenHistory() if (this.context.router.history.location.state === previewState) { - this.context.router.history.goBack(); + this.context.router.history.goBack() } } } - getIndex () { - return this.state.index !== null ? this.state.index : this.props.index; + getIndex() { + return this.state.index !== null ? this.state.index : this.props.index } toggleNavigation = () => { this.setState(prevState => ({ navigationHidden: !prevState.navigationHidden, - })); - }; + })) + } handleStatusClick = e => { if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - e.preventDefault(); - this.context.router.history.push(`/${this.props.status.getIn(['account', 'acct'])}/posts/${this.props.status.get('id')}`); + e.preventDefault() + this.context.router.history.push(`/${this.props.status.getIn(['account', 'acct'])}/posts/${this.props.status.get('id')}`) } } - render () { - const { media, status, intl, onClose } = this.props; - const { navigationHidden } = this.state; + render() { + const { + media, + status, + intl, + onClose, + } = this.props + const { navigationHidden } = this.state - const index = this.getIndex(); - let pagination = []; + const index = this.getIndex() + let pagination = [] - const leftNav = media.size > 1 && ; - const rightNav = media.size > 1 && ; + const leftNav = media.size > 1 && ( + ); - }); + const btnClasses = CX({ + default: 1, + px5: 1, + py5: 1, + outlineNone: 1, + colorPrimary: 1, + circle: 1, + cursorPointer: 1, + bgPrimaryOpaque: i !== index, + bgPrimary: i === index, + }) + + return ( +
  • +
  • + ) + }) } const content = media.map((image) => { - const width = image.getIn(['meta', 'original', 'width']) || null; - const height = image.getIn(['meta', 'original', 'height']) || null; + const width = image.getIn(['meta', 'original', 'width']) || null + const height = image.getIn(['meta', 'original', 'height']) || null if (image.get('type') === 'image') { return ( @@ -151,9 +191,9 @@ class MediaModal extends ImmutablePureComponent { key={image.get('url')} onClick={this.toggleNavigation} /> - ); + ) } else if (image.get('type') === 'video') { - const { time } = this.props; + const { time } = this.props return (
    ) diff --git a/app/javascript/gabsocial/components/status_card.js b/app/javascript/gabsocial/components/status_card.js index 0e3a11f3..295ab075 100644 --- a/app/javascript/gabsocial/components/status_card.js +++ b/app/javascript/gabsocial/components/status_card.js @@ -2,6 +2,7 @@ import Immutable from 'immutable' import ImmutablePropTypes from 'react-immutable-proptypes' import ImmutablePureComponent from 'react-immutable-pure-component' import punycode from 'punycode' +import { DEFAULT_REL } from '../constants' import Icon from './icon' const IDNA_PREFIX = 'xn--' @@ -144,7 +145,7 @@ export default class Card extends ImmutablePureComponent { className={[_s.default, _s.displayFlex, _s.text, _s.noUnderline, _s.overflowWrapBreakWord, _s.colorPrimary, _s.fs15PX, _s.fontWeightMedium].join(' ')} href={card.get('url')} title={card.get('title')} - rel='noopener noreferrer' + rel={DEFAULT_REL} target='_blank' > {card.get('title')} @@ -229,7 +230,7 @@ export default class Card extends ImmutablePureComponent { {embed} diff --git a/app/javascript/gabsocial/components/status_prepend.js b/app/javascript/gabsocial/components/status_prepend.js index 7afdc3db..0cb38094 100644 --- a/app/javascript/gabsocial/components/status_prepend.js +++ b/app/javascript/gabsocial/components/status_prepend.js @@ -2,6 +2,8 @@ import { NavLink } from 'react-router-dom' import { injectIntl, defineMessages, FormattedMessage } from 'react-intl' import ImmutablePropTypes from 'react-immutable-proptypes' import ImmutablePureComponent from 'react-immutable-pure-component' +import { compactMode } from '../initial_state' +import { CX } from '../constants' import Icon from './icon' import Text from './text' @@ -39,8 +41,16 @@ class StatusPrepend extends ImmutablePureComponent { const iconId = isFeatured ? 'pin' : isPromoted ? 'star' : 'repost' + const containerClasses = CX({ + default: 1, + width100PC: 1, + alignItemsStart: 1, + borderBottom1PX: !compactMode, + borderColorSecondary: !compactMode, + }) + return ( -
    +
    { diff --git a/app/javascript/gabsocial/components/tab_bar_item.js b/app/javascript/gabsocial/components/tab_bar_item.js index dddbd008..918c070c 100644 --- a/app/javascript/gabsocial/components/tab_bar_item.js +++ b/app/javascript/gabsocial/components/tab_bar_item.js @@ -1,11 +1,8 @@ import { withRouter } from 'react-router-dom' -import classNames from 'classnames/bind' +import { CX } from '../constants' import Button from './button' import Text from './text' -// Bind CSS Modules global variable `_s` to classNames module -const cx = classNames.bind(_s) - /** * Renders a tab bar item component * @param {bool} [props.isLarge] - to style the tab bar larger @@ -27,7 +24,7 @@ class TabBarItem extends PureComponent { } state = { - isCurrent: -1, + isCurrent: false, } componentDidUpdate(prevProps) { @@ -55,10 +52,9 @@ class TabBarItem extends PureComponent { // Combine state, props, location to make absolutely // sure of active status. - const active = isActive || - (isCurrent === -1 ? to === location.pathname : false) + const active = isActive || to === location.pathname || isCurrent - const containerClasses = cx({ + const containerClasses = CX({ default: 1, height53PX: 1, noUnderline: 1, @@ -77,7 +73,7 @@ class TabBarItem extends PureComponent { mr2: !isLarge, }) - const textParentClasses = cx({ + const textParentClasses = CX({ default: 1, height100PC: 1, alignItemsCenter: 1, diff --git a/app/javascript/gabsocial/components/user_stat.js b/app/javascript/gabsocial/components/user_stat.js index a0a2978d..005efb20 100644 --- a/app/javascript/gabsocial/components/user_stat.js +++ b/app/javascript/gabsocial/components/user_stat.js @@ -14,6 +14,7 @@ export default class UserStat extends PureComponent { to: PropTypes.string.isRequired, value: PropTypes.oneOfType([ PropTypes.string, + PropTypes.number, PropTypes.object, ]).isRequired, } diff --git a/app/javascript/gabsocial/constants.js b/app/javascript/gabsocial/constants.js index 0086ed65..a1518738 100644 --- a/app/javascript/gabsocial/constants.js +++ b/app/javascript/gabsocial/constants.js @@ -1,7 +1,7 @@ import classNames from 'classnames/bind' export const CX = classNames.bind(_s) -export const APP_NAME = 'Gab' +export const APP_NAME = 'Gab Social' export const DEFAULT_REL = 'noopener noreferrer' diff --git a/app/javascript/gabsocial/containers/status_container.js b/app/javascript/gabsocial/containers/status_container.js index 73c1bff1..1edce1dd 100644 --- a/app/javascript/gabsocial/containers/status_container.js +++ b/app/javascript/gabsocial/containers/status_container.js @@ -39,8 +39,6 @@ const messages = defineMessages({ deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' }, replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, - quoteConfirm: { id: 'confirmations.quote.confirm', defaultMessage: 'Quote' }, - quoteMessage: { id: 'confirmations.quote.message', defaultMessage: 'Quoting now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, }); @@ -114,33 +112,18 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ }); }, - onRepost (targetRef, status, ) { + onRepost (targetRef, status, e) { if (!me) return dispatch(openModal('UNAUTHORIZED')) - dispatch(openPopover('REPOST_OPTIONS', { - status, - targetRef, - position: 'top', - })) - - // if (e.shiftKey || !boostModal) { - // this.onModalRepost(status); - // } else { - // dispatch(openModal('BOOST', { status, onRepost: this.onModalRepost })); - // } - - // dispatch((_, getState) => { - // const state = getState(); - // if (state.getIn(['compose', 'text']).trim().length !== 0) { - // dispatch(openModal('CONFIRM', { - // message: intl.formatMessage(messages.quoteMessage), - // confirm: intl.formatMessage(messages.quoteConfirm), - // onConfirm: () => dispatch(quoteCompose(status, router)), - // })); - // } else { - // dispatch(quoteCompose(status, router)); - // } - // }); + if (e.shiftKey) { + this.onModalRepost(status); + } else { + dispatch(openPopover('REPOST_OPTIONS', { + status, + targetRef, + position: 'top', + })) + } }, onModalRepost (status) { @@ -187,13 +170,6 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ } }, - onEmbed (status) { - // dispatch(openModal('EMBED', { - // url: status.get('url'), - // onError: error => dispatch(showAlertForError(error)), - // })); - }, - onDelete (status, history) { if (!me) return dispatch(openModal('UNAUTHORIZED')) diff --git a/app/javascript/gabsocial/extra_polyfills.js b/app/javascript/gabsocial/extra_polyfills.js index c2da75f7..47a1b6e3 100644 --- a/app/javascript/gabsocial/extra_polyfills.js +++ b/app/javascript/gabsocial/extra_polyfills.js @@ -2,6 +2,6 @@ import 'intersection-observer'; import 'requestidlecallback'; -import objectFitImages from 'object-fit-images'; +import objectFitImages from 'object-fit-images'; objectFitImages(); diff --git a/app/javascript/gabsocial/features/blocked_accounts.js b/app/javascript/gabsocial/features/blocked_accounts.js index ec51b9d0..ee31ea69 100644 --- a/app/javascript/gabsocial/features/blocked_accounts.js +++ b/app/javascript/gabsocial/features/blocked_accounts.js @@ -4,7 +4,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes' import debounce from 'lodash.debounce' import { fetchBlocks, expandBlocks } from '../actions/blocks' import Account from '../components/account' -import ColumnIndicator from '../components/column_indicator' import ScrollableList from '../components/scrollable_list' const messages = defineMessages({ @@ -14,6 +13,7 @@ const messages = defineMessages({ const mapStateToProps = (state) => ({ accountIds: state.getIn(['user_lists', 'blocks', 'items']), hasMore: !!state.getIn(['user_lists', 'blocks', 'next']), + isLoading: state.getIn(['user_lists', 'blocks', 'isLoading'], true), }) export default @@ -26,6 +26,7 @@ class Blocks extends ImmutablePureComponent { dispatch: PropTypes.func.isRequired, accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, + isLoading: PropTypes.bool, intl: PropTypes.object.isRequired, } @@ -41,13 +42,10 @@ class Blocks extends ImmutablePureComponent { const { intl, accountIds, - hasMore + hasMore, + isLoading, } = this.props - if (!accountIds) { - return - } - const emptyMessage = intl.formatMessage(messages.empty) return ( @@ -56,9 +54,10 @@ class Blocks extends ImmutablePureComponent { onLoadMore={this.handleLoadMore} hasMore={hasMore} emptyMessage={emptyMessage} + isLoading={isLoading} > { - accountIds.map(id => + !!accountIds && accountIds.map(id => ) } diff --git a/app/javascript/gabsocial/features/blocked_domains.js b/app/javascript/gabsocial/features/blocked_domains.js index 7aeb324e..9409c212 100644 --- a/app/javascript/gabsocial/features/blocked_domains.js +++ b/app/javascript/gabsocial/features/blocked_domains.js @@ -7,9 +7,9 @@ import ColumnIndicator from '../components/column_indicator' import List from '../components/list' const messages = defineMessages({ - heading: { id: 'column.domain_blocks', defaultMessage: 'Hidden domains' }, - unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' }, - emptyMessage: { id: 'empty_column.domain_blocks', defaultMessage: 'There are no hidden domains yet.' }, + heading: { id: 'column.domain_blocks', defaultMessage: 'Blocked domains' }, + unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' }, + emptyMessage: { id: 'empty_column.domain_blocks', defaultMessage: 'There are no blocked domains yet.' }, }); const mapDispatchToProps = (dispatch) => ({ diff --git a/app/javascript/gabsocial/features/compose/components/gif_selector_button.js b/app/javascript/gabsocial/features/compose/components/gif_selector_button.js index bef9e6a6..16c1ab99 100644 --- a/app/javascript/gabsocial/features/compose/components/gif_selector_button.js +++ b/app/javascript/gabsocial/features/compose/components/gif_selector_button.js @@ -5,7 +5,7 @@ import { openModal } from '../../../actions/modal' const messages = defineMessages({ marked: { id: 'compose_form.spoiler.marked', defaultMessage: 'Text is hidden behind warning' }, unmarked: { id: 'compose_form.spoiler.unmarked', defaultMessage: 'Text is not hidden' }, - title: { id: 'compose_form.spoiler.title', defaultMessage: 'Warning' }, + title: { id: 'compose_form.gif.title', defaultMessage: 'Insert gif' }, }) const mapStateToProps = (state) => ({ diff --git a/app/javascript/gabsocial/features/compose/components/media_upload_button.js b/app/javascript/gabsocial/features/compose/components/media_upload_button.js index 63892d30..274ee7dd 100644 --- a/app/javascript/gabsocial/features/compose/components/media_upload_button.js +++ b/app/javascript/gabsocial/features/compose/components/media_upload_button.js @@ -12,7 +12,7 @@ const messages = defineMessages({ const makeMapStateToProps = () => { const mapStateToProps = (state) => ({ acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']), - disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')), + disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size + state.getIn(['compose', 'pending_media_attachments']) > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')), unavailable: state.getIn(['compose', 'poll']) !== null, resetFileKey: state.getIn(['compose', 'resetFileKey']), }) diff --git a/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js b/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js index 4ae4ba9e..8687d124 100644 --- a/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js +++ b/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js @@ -5,7 +5,7 @@ import ComposeExtraButton from './compose_extra_button' const messages = defineMessages({ marked: { id: 'compose_form.spoiler.marked', defaultMessage: 'Text is hidden behind warning' }, unmarked: { id: 'compose_form.spoiler.unmarked', defaultMessage: 'Text is not hidden' }, - title: { id: 'compose_form.spoiler.title', defaultMessage: 'Warning' }, + title: { id: 'compose_form.rte.title', defaultMessage: 'Rich Text Editor' }, }) const mapStateToProps = (state) => ({ diff --git a/app/javascript/gabsocial/features/follow_requests/follow_requests.js b/app/javascript/gabsocial/features/follow_requests/follow_requests.js index ac7962c1..2d0d6a77 100644 --- a/app/javascript/gabsocial/features/follow_requests/follow_requests.js +++ b/app/javascript/gabsocial/features/follow_requests/follow_requests.js @@ -1,20 +1,23 @@ -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import ImmutablePropTypes from 'react-immutable-proptypes'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl' +import ImmutablePureComponent from 'react-immutable-pure-component' +import ImmutablePropTypes from 'react-immutable-proptypes' import debounce from 'lodash.debounce' -import { fetchFollowRequests, expandFollowRequests } from '../../actions/accounts'; -import ColumnIndicator from '../../components/column_indicator'; -import AccountAuthorize from './components/account_authorize'; -import ScrollableList from '../../components/scrollable_list'; +import { me } from '../../initial_state' +import { fetchFollowRequests, expandFollowRequests } from '../../actions/accounts' +import AccountAuthorize from './components/account_authorize' +import ScrollableList from '../../components/scrollable_list' const messages = defineMessages({ heading: { id: 'column.follow_requests', defaultMessage: 'Follow requests' }, -}); +}) const mapStateToProps = (state) => ({ accountIds: state.getIn(['user_lists', 'follow_requests', 'items']), + isLoading: state.getIn(['user_lists', 'follow_requests', 'isLoading'], true), hasMore: !!state.getIn(['user_lists', 'follow_requests', 'next']), -}); + locked: !!state.getIn(['accounts', me, 'locked']), + domain: state.getIn(['meta', 'domain']), +}) export default @connect(mapStateToProps) @@ -25,35 +28,48 @@ class FollowRequests extends ImmutablePureComponent { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, hasMore: PropTypes.bool, + locked: PropTypes.bool, + domain: PropTypes.string, + isLoading: PropTypes.bool, accountIds: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, - }; + } componentWillMount () { - this.props.dispatch(fetchFollowRequests()); + this.props.dispatch(fetchFollowRequests()) } handleLoadMore = debounce(() => { - this.props.dispatch(expandFollowRequests()); - }, 300, { leading: true }); + this.props.dispatch(expandFollowRequests()) + }, 300, { leading: true }) render () { - const { intl, accountIds, hasMore } = this.props; + const { intl, accountIds, hasMore, locked, domain, isLoading } = this.props - if (!accountIds) { - return (); - } + // : todo : + const unlockedPrependMessage = locked ? null : ( +
    + +
    + ); return ( } > - {accountIds.map(id => - - )} + { + !!accountIds && accountIds.map(id => + + ) + } ); } diff --git a/app/javascript/gabsocial/features/followers.js b/app/javascript/gabsocial/features/followers.js index f9d71eb3..a24c45ea 100644 --- a/app/javascript/gabsocial/features/followers.js +++ b/app/javascript/gabsocial/features/followers.js @@ -18,6 +18,7 @@ const mapStateToProps = (state, { account }) => { accountId, accountIds: state.getIn(['user_lists', 'followers', accountId, 'items']), hasMore: !!state.getIn(['user_lists', 'followers', accountId, 'next']), + isLoading: state.getIn(['user_lists', 'followers', accountId, 'isLoading'], true), } } @@ -39,6 +40,7 @@ class Followers extends ImmutablePureComponent { dispatch: PropTypes.func.isRequired, accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, + isLoading: PropTypes.bool, } componentWillMount() { @@ -67,7 +69,8 @@ class Followers extends ImmutablePureComponent { account, accountIds, hasMore, - intl + intl, + isLoading, } = this.props if (!account) return null @@ -83,6 +86,7 @@ class Followers extends ImmutablePureComponent { diff --git a/app/javascript/gabsocial/features/following.js b/app/javascript/gabsocial/features/following.js index fc8ee567..aa0586bc 100644 --- a/app/javascript/gabsocial/features/following.js +++ b/app/javascript/gabsocial/features/following.js @@ -18,6 +18,7 @@ const mapStateToProps = (state, { account }) => { accountId, accountIds: state.getIn(['user_lists', 'following', accountId, 'items']), hasMore: !!state.getIn(['user_lists', 'following', accountId, 'next']), + isLoading: state.getIn(['user_lists', 'following', accountId, 'isLoading'], true), } } @@ -39,6 +40,7 @@ class Following extends ImmutablePureComponent { account: ImmutablePropTypes.map, accountId: PropTypes.string, hasMore: PropTypes.bool, + isLoading: PropTypes.bool, } componentDidMount() { @@ -68,6 +70,7 @@ class Following extends ImmutablePureComponent { accountIds, hasMore, intl, + isLoading, } = this.props if (!account) return null @@ -83,6 +86,7 @@ class Following extends ImmutablePureComponent { diff --git a/app/javascript/gabsocial/features/groups_collection.js b/app/javascript/gabsocial/features/groups_collection.js index c2a4e09d..fc672624 100644 --- a/app/javascript/gabsocial/features/groups_collection.js +++ b/app/javascript/gabsocial/features/groups_collection.js @@ -38,8 +38,6 @@ class GroupsCollection extends ImmutablePureComponent { const halfCount = parseInt(groupIds.size / 2) - console.log("halfCount", halfCount) - return (
    diff --git a/app/javascript/gabsocial/features/home_timeline.js b/app/javascript/gabsocial/features/home_timeline.js index e2bffd55..2baf2bc0 100644 --- a/app/javascript/gabsocial/features/home_timeline.js +++ b/app/javascript/gabsocial/features/home_timeline.js @@ -4,7 +4,7 @@ import StatusList from '../components/status_list' const messages = defineMessages({ title: { id: 'column.home', defaultMessage: 'Home' }, - empty: { id: 'empty_column.home', defaultMessage: 'Your home timeline is empty. Start following other users to recieve their content here.' }, + empty: { id: 'empty_timeline.home', defaultMessage: 'Your home timeline is empty. Start following other users to recieve their content here.' }, }) const mapStateToProps = (state) => ({ diff --git a/app/javascript/gabsocial/features/mutes.js b/app/javascript/gabsocial/features/mutes.js index eb3012d1..8db82323 100644 --- a/app/javascript/gabsocial/features/mutes.js +++ b/app/javascript/gabsocial/features/mutes.js @@ -4,12 +4,12 @@ import ImmutablePropTypes from 'react-immutable-proptypes' import debounce from 'lodash.debounce' import { fetchMutes, expandMutes } from '../actions/mutes' import Account from '../components/account' -import ColumnIndicator from '../components/column_indicator' import ScrollableList from '../components/scrollable_list' const mapStateToProps = (state) => ({ accountIds: state.getIn(['user_lists', 'mutes', 'items']), hasMore: !!state.getIn(['user_lists', 'mutes', 'next']), + isLoading: state.getIn(['user_lists', 'mutes', 'isLoading'], true), }) export default @@ -22,6 +22,7 @@ class Mutes extends ImmutablePureComponent { dispatch: PropTypes.func.isRequired, hasMore: PropTypes.bool, accountIds: ImmutablePropTypes.list, + isLoading: PropTypes.bool, } componentWillMount() { @@ -33,21 +34,18 @@ class Mutes extends ImmutablePureComponent { }, 300, { leading: true }) render() { - const { hasMore, accountIds } = this.props - - if (!accountIds) { - return - } + const { hasMore, accountIds, isLoading } = this.props return ( } > { - accountIds.map(id => + accountIds && accountIds.map(id => ) } diff --git a/app/javascript/gabsocial/features/status.js b/app/javascript/gabsocial/features/status.js index 6312a724..c149ccb8 100644 --- a/app/javascript/gabsocial/features/status.js +++ b/app/javascript/gabsocial/features/status.js @@ -2,8 +2,6 @@ import StatusContainer from '../containers/status_container' export default class Status extends PureComponent { render() { - console.log("this.props:", this.props) - return ( ) diff --git a/app/javascript/gabsocial/initial_state.js b/app/javascript/gabsocial/initial_state.js index 22d1dfb0..bb840b14 100644 --- a/app/javascript/gabsocial/initial_state.js +++ b/app/javascript/gabsocial/initial_state.js @@ -26,5 +26,6 @@ export const promotions = initialState && initialState.promotions; export const unreadCount = getMeta('unread_count'); export const monthlyExpensesComplete = getMeta('monthly_expenses_complete'); export const favouritesCount = getMeta('favourites_count'); +export const compactMode = false; export default initialState; diff --git a/app/javascript/gabsocial/layouts/layout.js b/app/javascript/gabsocial/layouts/layout.js index 362bba2a..8ba86ed5 100644 --- a/app/javascript/gabsocial/layouts/layout.js +++ b/app/javascript/gabsocial/layouts/layout.js @@ -17,7 +17,6 @@ export default class Layout extends PureComponent { showBackBtn: PropTypes.bool, noSidebar: PropTypes.bool, noRightSidebar: PropTypes.bool, - noHeader: PropTypes.bool, noComposeButton: PropTypes.bool, } @@ -31,7 +30,6 @@ export default class Layout extends PureComponent { tabs, noSidebar, noRightSidebar, - noHeader, noComposeButton, } = this.props diff --git a/app/javascript/gabsocial/locales/ast.json b/app/javascript/gabsocial/locales/ast.json index a04de2a8..97bdba39 100644 --- a/app/javascript/gabsocial/locales/ast.json +++ b/app/javascript/gabsocial/locales/ast.json @@ -222,7 +222,7 @@ "lists.search": "Guetar ente la xente que sigues", "lists.subheading": "Les tos llistes", "loading_indicator.label": "Cargando...", - "media_gallery.toggle_visible": "Toggle visibility", + "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Nun s'alcontró", "missing_indicator.sublabel": "Esti recursu nun pudo alcontrase", "mute_modal.hide_notifications": "Hide notifications from this user?", @@ -282,9 +282,9 @@ "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", + "privacy.private.long": "Visible for your followers only", "privacy.private.short": "Namái siguidores", - "privacy.public.long": "Post to public timelines", + "privacy.public.long": "Visible for anyone on or off Gab", "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", diff --git a/app/javascript/gabsocial/locales/bg.json b/app/javascript/gabsocial/locales/bg.json index bccd4744..a0a0bffe 100644 --- a/app/javascript/gabsocial/locales/bg.json +++ b/app/javascript/gabsocial/locales/bg.json @@ -2,7 +2,7 @@ "account.add_or_remove_from_list": "Add or Remove from lists", "account.badges.bot": "Bot", "account.block": "Блокирай", - "account.block_domain": "Hide everything from {domain}", + "account.block_domain": "Block domain {domain}", "account.blocked": "Blocked", "account.direct": "Direct Message @{name}", "account.domain_blocked": "Domain hidden", @@ -30,14 +30,14 @@ "account.share": "Share @{name}'s profile", "account.show_reposts": "Show reposts from @{name}", "account.unblock": "Не блокирай", - "account.unblock_domain": "Unhide {domain}", + "account.unblock_domain": "Unblock domain {domain}", "account.unendorse": "Don't feature on profile", "account.unfollow": "Не следвай", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", - "boost_modal.combo": "You can press {combo} to skip this next time", + "boost_modal.combo": "You can press Shift + Repost to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", "bundle_column_error.title": "Network error", @@ -47,7 +47,7 @@ "column.blocks": "Blocked users", "column.community": "Community timeline", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Favorites", "column.follow_requests": "Follow requests", "column.home": "Начало", @@ -91,7 +91,7 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "Block entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", "confirmations.mute.confirm": "Mute", "confirmations.mute.message": "Are you sure you want to mute {name}?", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -222,7 +222,7 @@ "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "loading_indicator.label": "Зареждане...", - "media_gallery.toggle_visible": "Toggle visibility", + "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.hide_notifications": "Hide notifications from this user?", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Редактирай профил", "navigation_bar.favorites": "Favorites", "navigation_bar.filters": "Muted words", @@ -282,9 +282,9 @@ "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", + "privacy.private.long": "Visible for your followers only", "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", + "privacy.public.long": "Visible for anyone on or off Gab", "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "This post cannot be reposted", "status.copy": "Copy link to status", "status.delete": "Изтриване", diff --git a/app/javascript/gabsocial/locales/defaultMessages.json b/app/javascript/gabsocial/locales/defaultMessages.json index 3b872b5d..ae9029e8 100644 --- a/app/javascript/gabsocial/locales/defaultMessages.json +++ b/app/javascript/gabsocial/locales/defaultMessages.json @@ -125,7 +125,7 @@ { "descriptors": [ { - "defaultMessage": "Unhide {domain}", + "defaultMessage": "Unblock domain {domain}", "id": "account.unblock_domain" } ], @@ -170,7 +170,7 @@ { "descriptors": [ { - "defaultMessage": "Toggle visibility", + "defaultMessage": "Hide media", "id": "media_gallery.toggle_visible" }, { @@ -314,7 +314,7 @@ "id": "status.repost_private" }, { - "defaultMessage": "Un-repost", + "defaultMessage": "Remove Repost", "id": "status.cancel_repost_private" }, { @@ -435,7 +435,7 @@ { "descriptors": [ { - "defaultMessage": "Hide entire domain", + "defaultMessage": "Block entire domain", "id": "confirmations.domain_block.confirm" }, { @@ -523,7 +523,7 @@ "id": "confirmations.block.confirm" }, { - "defaultMessage": "Hide entire domain", + "defaultMessage": "Block entire domain", "id": "confirmations.domain_block.confirm" }, { @@ -621,11 +621,11 @@ "id": "account.media" }, { - "defaultMessage": "Hide everything from {domain}", + "defaultMessage": "Block domain {domain}", "id": "account.block_domain" }, { - "defaultMessage": "Unhide {domain}", + "defaultMessage": "Unblock domain {domain}", "id": "account.unblock_domain" }, { @@ -661,7 +661,7 @@ "id": "navigation_bar.blocks" }, { - "defaultMessage": "Hidden domains", + "defaultMessage": "Blocked domains", "id": "navigation_bar.domain_blocks" }, { @@ -785,7 +785,7 @@ "id": "navigation_bar.blocks" }, { - "defaultMessage": "Hidden domains", + "defaultMessage": "Blocked domains", "id": "navigation_bar.domain_blocks" }, { @@ -943,7 +943,7 @@ "id": "privacy.public.short" }, { - "defaultMessage": "Post to public timelines", + "defaultMessage": "Visible for anyone on or off Gab", "id": "privacy.public.long" }, { @@ -959,7 +959,7 @@ "id": "privacy.private.short" }, { - "defaultMessage": "Post to followers only", + "defaultMessage": "Visible for your followers only", "id": "privacy.private.long" }, { @@ -1191,15 +1191,15 @@ { "descriptors": [ { - "defaultMessage": "Hidden domains", + "defaultMessage": "Blocked domains", "id": "column.domain_blocks" }, { - "defaultMessage": "Unhide {domain}", + "defaultMessage": "Unblock domain {domain}", "id": "account.unblock_domain" }, { - "defaultMessage": "There are no hidden domains yet.", + "defaultMessage": "There are no blocked domains yet.", "id": "empty_column.domain_blocks" } ], @@ -1322,7 +1322,7 @@ "id": "navigation_bar.blocks" }, { - "defaultMessage": "Hidden domains", + "defaultMessage": "Blocked domains", "id": "navigation_bar.domain_blocks" }, { @@ -1962,7 +1962,7 @@ "id": "status.repost_private" }, { - "defaultMessage": "Un-repost", + "defaultMessage": "Remove Repost", "id": "status.cancel_repost_private" }, { @@ -2121,7 +2121,7 @@ { "descriptors": [ { - "defaultMessage": "Un-repost", + "defaultMessage": "Remove Repost", "id": "status.cancel_repost_private" }, { @@ -2129,7 +2129,7 @@ "id": "status.repost" }, { - "defaultMessage": "You can press {combo} to skip this next time", + "defaultMessage": "You can press Shift + Repost to skip this next time", "id": "boost_modal.combo" } ], diff --git a/app/javascript/gabsocial/locales/en.json b/app/javascript/gabsocial/locales/en.json index 24225f5d..7604f6ad 100644 --- a/app/javascript/gabsocial/locales/en.json +++ b/app/javascript/gabsocial/locales/en.json @@ -2,7 +2,7 @@ "account.add_or_remove_from_list": "Add or Remove from lists", "account.badges.bot": "Bot", "account.block": "Block @{name}", - "account.block_domain": "Hide everything from {domain}", + "account.block_domain": "Block domain {domain}", "account.blocked": "Blocked", "account.direct": "Direct message @{name}", "account.domain_blocked": "Domain hidden", @@ -30,14 +30,14 @@ "account.share": "Share @{name}'s profile", "account.show_reposts": "Show reposts from @{name}", "account.unblock": "Unblock @{name}", - "account.unblock_domain": "Unhide {domain}", + "account.unblock_domain": "Unblock domain {domain}", "account.unendorse": "Don't feature on profile", "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", - "boost_modal.combo": "You can press {combo} to skip this next time", + "boost_modal.combo": "You can press Shift + Repost to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", "bundle_column_error.title": "Network error", @@ -47,7 +47,7 @@ "column.blocks": "Blocked users", "column.community": "Community timeline", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Favorites", "column.follow_requests": "Follow requests", "column.home": "Home", @@ -92,7 +92,7 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "Block entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.mute.confirm": "Mute", "confirmations.mute.message": "Are you sure you want to mute {name}?", @@ -123,7 +123,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite gabs yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this gab yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -224,7 +224,7 @@ "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Toggle visibility", + "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.hide_notifications": "Hide notifications from this user?", @@ -234,7 +234,7 @@ "navigation_bar.compose": "Compose new gab", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Edit profile", "navigation_bar.favorites": "Favorites", "navigation_bar.filters": "Muted words", @@ -285,11 +285,11 @@ "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", + "privacy.private.long": "Visible for your followers only", "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", + "privacy.public.long": "Visible for anyone on or off Gab", "privacy.public.short": "Public", - "privacy.unlisted.long": "Do not post to public timelines", + "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", @@ -319,7 +319,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "This post cannot be reposted", "status.copy": "Copy link to status", "status.delete": "Delete", diff --git a/app/javascript/gabsocial/locales/he.json b/app/javascript/gabsocial/locales/he.json index 359fc295..742a591c 100644 --- a/app/javascript/gabsocial/locales/he.json +++ b/app/javascript/gabsocial/locales/he.json @@ -47,7 +47,7 @@ "column.blocks": "חסימות", "column.community": "ציר זמן מקומי", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "חיבובים", "column.follow_requests": "בקשות מעקב", "column.home": "בבית", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "טור הסביבה ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "עריכת פרופיל", "navigation_bar.favorites": "חיבובים", "navigation_bar.filters": "Muted words", diff --git a/app/javascript/gabsocial/locales/hi.json b/app/javascript/gabsocial/locales/hi.json index 337453aa..7423e91d 100644 --- a/app/javascript/gabsocial/locales/hi.json +++ b/app/javascript/gabsocial/locales/hi.json @@ -2,7 +2,7 @@ "account.add_or_remove_from_list": "Add or Remove from lists", "account.badges.bot": "Bot", "account.block": "Block @{name}", - "account.block_domain": "Hide everything from {domain}", + "account.block_domain": "Block domain {domain}", "account.blocked": "Blocked", "account.direct": "Direct message @{name}", "account.domain_blocked": "Domain hidden", @@ -30,14 +30,14 @@ "account.share": "Share @{name}'s profile", "account.show_reposts": "Show reposts from @{name}", "account.unblock": "Unblock @{name}", - "account.unblock_domain": "Unhide {domain}", + "account.unblock_domain": "Unblock domain {domain}", "account.unendorse": "Don't feature on profile", "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", - "boost_modal.combo": "You can press {combo} to skip this next time", + "boost_modal.combo": "You can press Shift + Repost to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", "bundle_column_error.title": "Network error", @@ -47,7 +47,7 @@ "column.blocks": "Blocked users", "column.community": "Community timeline", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Favorites", "column.follow_requests": "Follow requests", "column.home": "Home", @@ -91,7 +91,7 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "Block entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.mute.confirm": "Mute", "confirmations.mute.message": "Are you sure you want to mute {name}?", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -222,7 +222,7 @@ "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Toggle visibility", + "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.hide_notifications": "Hide notifications from this user?", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Edit profile", "navigation_bar.favorites": "Favorites", "navigation_bar.filters": "Muted words", @@ -282,9 +282,9 @@ "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", + "privacy.private.long": "Visible for your followers only", "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", + "privacy.public.long": "Visible for anyone on or off Gab", "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "This post cannot be reposted", "status.copy": "Copy link to status", "status.delete": "Delete", diff --git a/app/javascript/gabsocial/locales/hr.json b/app/javascript/gabsocial/locales/hr.json index 9833c0a4..0ca88f55 100644 --- a/app/javascript/gabsocial/locales/hr.json +++ b/app/javascript/gabsocial/locales/hr.json @@ -47,7 +47,7 @@ "column.blocks": "Blokirani korisnici", "column.community": "Lokalni timeline", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Favoriti", "column.follow_requests": "Zahtjevi za slijeđenje", "column.home": "Dom", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Lokalni timeline je prazan. Napiši nešto javno kako bi pokrenuo stvari!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Uredi profil", "navigation_bar.favorites": "Favoriti", "navigation_bar.filters": "Muted words", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "Ovaj post ne može biti repostan", "status.copy": "Copy link to status", "status.delete": "Obriši", diff --git a/app/javascript/gabsocial/locales/hu.json b/app/javascript/gabsocial/locales/hu.json index 61c64c09..89b5c49b 100644 --- a/app/javascript/gabsocial/locales/hu.json +++ b/app/javascript/gabsocial/locales/hu.json @@ -47,7 +47,7 @@ "column.blocks": "Letiltott felhasználók", "column.community": "Helyi idővonal", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Kedvencek", "column.follow_requests": "Követési kérések", "column.home": "Kezdőlap", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "A helyi idővonal üres. Írj egy publikus stástuszt, hogy elindítsd a labdát!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Profil szerkesztése", "navigation_bar.favorites": "Kedvencek", "navigation_bar.filters": "Muted words", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "Ezen státusz nem rebloggolható", "status.copy": "Copy link to status", "status.delete": "Törlés", diff --git a/app/javascript/gabsocial/locales/hy.json b/app/javascript/gabsocial/locales/hy.json index eca6e1ce..190806c4 100644 --- a/app/javascript/gabsocial/locales/hy.json +++ b/app/javascript/gabsocial/locales/hy.json @@ -47,7 +47,7 @@ "column.blocks": "Արգելափակված օգտատերեր", "column.community": "Տեղական հոսք", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Հավանածներ", "column.follow_requests": "Հետեւելու հայցեր", "column.home": "Հիմնական", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Տեղական հոսքը դատա՛րկ է։ Հրապարակային մի բան գրիր շարժիչը խոդ տալու համար։", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Խմբագրել անձնական էջը", "navigation_bar.favorites": "Հավանածներ", "navigation_bar.filters": "Muted words", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Արգելափակել @{name}֊ին", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "Այս թութը չի կարող տարածվել", "status.copy": "Copy link to status", "status.delete": "Ջնջել", diff --git a/app/javascript/gabsocial/locales/id.json b/app/javascript/gabsocial/locales/id.json index 2c6b307f..ae863e8f 100644 --- a/app/javascript/gabsocial/locales/id.json +++ b/app/javascript/gabsocial/locales/id.json @@ -47,7 +47,7 @@ "column.blocks": "Pengguna diblokir", "column.community": "Linimasa Lokal", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Favorit", "column.follow_requests": "Permintaan mengikuti", "column.home": "Beranda", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Linimasa lokal masih kosong. Tulis sesuatu secara publik dan buat roda berputar!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Ubah profil", "navigation_bar.favorites": "Favorit", "navigation_bar.filters": "Muted words", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "This post cannot be reposted", "status.copy": "Copy link to status", "status.delete": "Hapus", diff --git a/app/javascript/gabsocial/locales/io.json b/app/javascript/gabsocial/locales/io.json index de6c5d24..7f590c76 100644 --- a/app/javascript/gabsocial/locales/io.json +++ b/app/javascript/gabsocial/locales/io.json @@ -2,7 +2,7 @@ "account.add_or_remove_from_list": "Add or Remove from lists", "account.badges.bot": "Bot", "account.block": "Blokusar @{name}", - "account.block_domain": "Hide everything from {domain}", + "account.block_domain": "Block domain {domain}", "account.blocked": "Blocked", "account.direct": "Direct Message @{name}", "account.domain_blocked": "Domain hidden", @@ -30,7 +30,7 @@ "account.share": "Share @{name}'s profile", "account.show_reposts": "Show reposts from @{name}", "account.unblock": "Desblokusar @{name}", - "account.unblock_domain": "Unhide {domain}", + "account.unblock_domain": "Unblock domain {domain}", "account.unendorse": "Don't feature on profile", "account.unfollow": "Ne plus sequar", "account.unmute": "Ne plus celar @{name}", @@ -47,7 +47,7 @@ "column.blocks": "Blokusita uzeri", "column.community": "Lokala tempolineo", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Favorati", "column.follow_requests": "Demandi di sequado", "column.home": "Hemo", @@ -91,7 +91,7 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "Block entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", "confirmations.mute.confirm": "Mute", "confirmations.mute.message": "Are you sure you want to mute {name}?", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "La lokala tempolineo esas vakua. Skribez ulo publike por iniciar la agiveso!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Modifikar profilo", "navigation_bar.favorites": "Favorati", "navigation_bar.filters": "Muted words", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "This post cannot be reposted", "status.copy": "Copy link to status", "status.delete": "Efacar", diff --git a/app/javascript/gabsocial/locales/ka.json b/app/javascript/gabsocial/locales/ka.json index 9b4d0122..d592424a 100644 --- a/app/javascript/gabsocial/locales/ka.json +++ b/app/javascript/gabsocial/locales/ka.json @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "ლოკალური თაიმლაინი ცარიელია. დაწერეთ რაიმე ღიად ან ქენით რაიმე სხვა!", "empty_column.direct": "ჯერ პირდაპირი წერილები არ გაქვთ. როდესაც მიიღებთ ან გააგზავნით, გამოჩნდება აქ.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite gabs yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this gab yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", diff --git a/app/javascript/gabsocial/locales/lv.json b/app/javascript/gabsocial/locales/lv.json index 182a347b..9f540554 100644 --- a/app/javascript/gabsocial/locales/lv.json +++ b/app/javascript/gabsocial/locales/lv.json @@ -222,7 +222,7 @@ "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Toggle visibility", + "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.hide_notifications": "Hide notifications from this user?", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Edit profile", "navigation_bar.favorites": "Favorites", "navigation_bar.filters": "Muted words", @@ -282,9 +282,9 @@ "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", + "privacy.private.long": "Visible for your followers only", "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", + "privacy.public.long": "Visible for anyone on or off Gab", "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "This post cannot be reposted", "status.copy": "Copy link to status", "status.delete": "Delete", diff --git a/app/javascript/gabsocial/locales/ms.json b/app/javascript/gabsocial/locales/ms.json index 072fdbc6..2ac4375b 100644 --- a/app/javascript/gabsocial/locales/ms.json +++ b/app/javascript/gabsocial/locales/ms.json @@ -2,7 +2,7 @@ "account.add_or_remove_from_list": "Add or Remove from lists", "account.badges.bot": "Bot", "account.block": "Block @{name}", - "account.block_domain": "Hide everything from {domain}", + "account.block_domain": "Block domain {domain}", "account.blocked": "Blocked", "account.direct": "Direct message @{name}", "account.domain_blocked": "Domain hidden", @@ -30,14 +30,14 @@ "account.share": "Share @{name}'s profile", "account.show_reposts": "Show reposts from @{name}", "account.unblock": "Unblock @{name}", - "account.unblock_domain": "Unhide {domain}", + "account.unblock_domain": "Unblock domain {domain}", "account.unendorse": "Don't feature on profile", "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", - "boost_modal.combo": "You can press {combo} to skip this next time", + "boost_modal.combo": "You can press Shift + Repost to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", "bundle_column_error.title": "Network error", @@ -47,7 +47,7 @@ "column.blocks": "Blocked users", "column.community": "Community timeline", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Favorites", "column.follow_requests": "Follow requests", "column.home": "Home", @@ -91,7 +91,7 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "Block entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.mute.confirm": "Mute", "confirmations.mute.message": "Are you sure you want to mute {name}?", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -222,7 +222,7 @@ "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Toggle visibility", + "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.hide_notifications": "Hide notifications from this user?", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Edit profile", "navigation_bar.favorites": "Favorites", "navigation_bar.filters": "Muted words", @@ -282,9 +282,9 @@ "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", + "privacy.private.long": "Visible for your followers only", "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", + "privacy.public.long": "Visible for anyone on or off Gab", "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "This post cannot be reposted", "status.copy": "Copy link to status", "status.delete": "Delete", diff --git a/app/javascript/gabsocial/locales/no.json b/app/javascript/gabsocial/locales/no.json index 06c3d14b..b4cccee9 100644 --- a/app/javascript/gabsocial/locales/no.json +++ b/app/javascript/gabsocial/locales/no.json @@ -47,7 +47,7 @@ "column.blocks": "Blokkerte brukere", "column.community": "Lokal tidslinje", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Likt", "column.follow_requests": "Følgeforespørsler", "column.home": "Hjem", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Den lokale tidslinjen er tom. Skriv noe offentlig for å få snøballen til å rulle!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Rediger profil", "navigation_bar.favorites": "Favoritter", "navigation_bar.filters": "Muted words", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "Denne posten kan ikke fremheves", "status.copy": "Copy link to status", "status.delete": "Slett", diff --git a/app/javascript/gabsocial/locales/sl.json b/app/javascript/gabsocial/locales/sl.json index 4040b9c5..e33efb2e 100644 --- a/app/javascript/gabsocial/locales/sl.json +++ b/app/javascript/gabsocial/locales/sl.json @@ -222,7 +222,7 @@ "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Toggle visibility", + "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.hide_notifications": "Hide notifications from this user?", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Edit profile", "navigation_bar.favorites": "Favorites", "navigation_bar.filters": "Muted words", @@ -282,9 +282,9 @@ "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", + "privacy.private.long": "Visible for your followers only", "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", + "privacy.public.long": "Visible for anyone on or off Gab", "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "This post cannot be reposted", "status.copy": "Copy link to status", "status.delete": "Delete", diff --git a/app/javascript/gabsocial/locales/sr-Latn.json b/app/javascript/gabsocial/locales/sr-Latn.json index 9f603c0d..cc371464 100644 --- a/app/javascript/gabsocial/locales/sr-Latn.json +++ b/app/javascript/gabsocial/locales/sr-Latn.json @@ -47,7 +47,7 @@ "column.blocks": "Blokirani korisnici", "column.community": "Lokalna lajna", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Omiljeni", "column.follow_requests": "Zahtevi za praćenje", "column.home": "Početna", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Lokalna lajna je prazna. Napišite nešto javno da lajna produva!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Izmeni profil", "navigation_bar.favorites": "Omiljeni", "navigation_bar.filters": "Muted words", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "Ovaj status ne može da se podrži", "status.copy": "Copy link to status", "status.delete": "Obriši", diff --git a/app/javascript/gabsocial/locales/sv.json b/app/javascript/gabsocial/locales/sv.json index cad08aca..73516137 100644 --- a/app/javascript/gabsocial/locales/sv.json +++ b/app/javascript/gabsocial/locales/sv.json @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att få bollen att rulla!", "empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot kommer den att dyka upp här.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite gabs yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this gab yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", diff --git a/app/javascript/gabsocial/locales/ta.json b/app/javascript/gabsocial/locales/ta.json index ed4250bf..18642631 100644 --- a/app/javascript/gabsocial/locales/ta.json +++ b/app/javascript/gabsocial/locales/ta.json @@ -2,7 +2,7 @@ "account.add_or_remove_from_list": "Add or Remove from lists", "account.badges.bot": "Bot", "account.block": "Block @{name}", - "account.block_domain": "Hide everything from {domain}", + "account.block_domain": "Block domain {domain}", "account.blocked": "Blocked", "account.direct": "Direct message @{name}", "account.domain_blocked": "Domain hidden", @@ -30,14 +30,14 @@ "account.share": "Share @{name}'s profile", "account.show_reposts": "Show reposts from @{name}", "account.unblock": "Unblock @{name}", - "account.unblock_domain": "Unhide {domain}", + "account.unblock_domain": "Unblock domain {domain}", "account.unendorse": "Don't feature on profile", "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", - "boost_modal.combo": "You can press {combo} to skip this next time", + "boost_modal.combo": "You can press Shift + Repost to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", "bundle_column_error.title": "Network error", @@ -47,7 +47,7 @@ "column.blocks": "Blocked users", "column.community": "Community timeline", "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blocked domains", "column.favorites": "Favorites", "column.follow_requests": "Follow requests", "column.home": "Home", @@ -91,7 +91,7 @@ "confirmations.delete.message": "Are you sure you want to delete this status?", "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "Block entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.mute.confirm": "Mute", "confirmations.mute.message": "Are you sure you want to mute {name}?", @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -222,7 +222,7 @@ "lists.search": "Search among people you follow", "lists.subheading": "Your lists", "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Toggle visibility", + "media_gallery.toggle_visible": "Hide media", "missing_indicator.label": "Not found", "missing_indicator.sublabel": "This resource could not be found", "mute_modal.hide_notifications": "Hide notifications from this user?", @@ -232,7 +232,7 @@ "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blocked domains", "navigation_bar.edit_profile": "Edit profile", "navigation_bar.favorites": "Favorites", "navigation_bar.filters": "Muted words", @@ -282,9 +282,9 @@ "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", + "privacy.private.long": "Visible for your followers only", "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", + "privacy.public.long": "Visible for anyone on or off Gab", "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "This post cannot be reposted", "status.copy": "Copy link to status", "status.delete": "Delete", diff --git a/app/javascript/gabsocial/locales/th.json b/app/javascript/gabsocial/locales/th.json index 0af32acf..5d8242fb 100644 --- a/app/javascript/gabsocial/locales/th.json +++ b/app/javascript/gabsocial/locales/th.json @@ -37,7 +37,7 @@ "account.unmute_notifications": "เลิกปิดเสียงการแจ้งเตือนจาก @{name}", "alert.unexpected.message": "เกิดข้อผิดพลาดที่ไม่คาดคิด", "alert.unexpected.title": "อุปส์!", - "boost_modal.combo": "You can press {combo} to skip this next time", + "boost_modal.combo": "You can press Shift + Repost to skip this next time", "bundle_column_error.body": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้", "bundle_column_error.retry": "ลองอีกครั้ง", "bundle_column_error.title": "ข้อผิดพลาดเครือข่าย", @@ -91,7 +91,7 @@ "confirmations.delete.message": "คุณแน่ใจหรือไม่ว่าต้องการลบสถานะนี้?", "confirmations.delete_list.confirm": "ลบ", "confirmations.delete_list.message": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการนี้อย่างถาวร?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "Block entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", "confirmations.mute.confirm": "ปิดเสียง", "confirmations.mute.message": "คุณแน่ใจหรือไม่ว่าต้องการปิดเสียง {name}?", diff --git a/app/javascript/gabsocial/locales/uk.json b/app/javascript/gabsocial/locales/uk.json index 947ac05d..984083e9 100644 --- a/app/javascript/gabsocial/locales/uk.json +++ b/app/javascript/gabsocial/locales/uk.json @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Локальна стрічка пуста. Напишіть щось, щоб розігріти народ!", "empty_column.direct": "У вас ще немає прямих повідомлень. Коли ви відправите чи отримаєте якесь, воно з'явиться тут.", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", @@ -316,7 +316,7 @@ "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", - "status.cancel_repost_private": "Un-repost", + "status.cancel_repost_private": "Remove Repost", "status.cannot_repost": "Цей допис не може бути передмухнутий", "status.copy": "Copy link to status", "status.delete": "Видалити", diff --git a/app/javascript/gabsocial/locales/zh-CN.json b/app/javascript/gabsocial/locales/zh-CN.json index ef10bbd0..338c3084 100644 --- a/app/javascript/gabsocial/locales/zh-CN.json +++ b/app/javascript/gabsocial/locales/zh-CN.json @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "本站时间轴暂时没有内容,快嘟几个来抢头香啊!", "empty_column.direct": "你还没有使用过私信。当你发出或者收到私信时,它会在这里显示。", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", diff --git a/app/javascript/gabsocial/locales/zh-HK.json b/app/javascript/gabsocial/locales/zh-HK.json index 4fb6d5e0..a44e47f0 100644 --- a/app/javascript/gabsocial/locales/zh-HK.json +++ b/app/javascript/gabsocial/locales/zh-HK.json @@ -122,7 +122,7 @@ "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "本站時間軸暫時未有內容,快寫一點東西來搶頭香啊!", "empty_column.direct": "你沒有個人訊息。當你發出或接收個人訊息,就會在這裡出現。", - "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.domain_blocks": "There are no blocked domains yet.", "empty_column.favorited_statuses": "You don't have any favorite toots yet. When you favorite one, it will show up here.", "empty_column.favorites": "No one has favorited this toot yet. When someone does, they will show up here.", "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", diff --git a/app/javascript/gabsocial/pages/profile_page.js b/app/javascript/gabsocial/pages/profile_page.js index 15672d55..4b2f0702 100644 --- a/app/javascript/gabsocial/pages/profile_page.js +++ b/app/javascript/gabsocial/pages/profile_page.js @@ -62,7 +62,6 @@ class ProfilePage extends ImmutablePureComponent { } = this.props const name = !!account ? account.get('display_name_html') : '' - console.log("name:", name, account) return ( n - 1) if (prevSize === 0 && (state.get('default_sensitive') || state.get('spoiler'))) { map.set('sensitive', true); @@ -314,11 +316,11 @@ export default function compose(state = initialState, action) { case COMPOSE_UPLOAD_CHANGE_FAIL: return state.set('is_changing_upload', false); case COMPOSE_UPLOAD_REQUEST: - return state.set('is_uploading', true); + return state.set('is_uploading', true).update('pending_media_attachments', n => n + 1) case COMPOSE_UPLOAD_SUCCESS: return appendMedia(state, fromJS(action.media)); case COMPOSE_UPLOAD_FAIL: - return state.set('is_uploading', false); + return state.set('is_uploading', false).update('pending_media_attachments', n => action.decrement ? n - 1 : n); case COMPOSE_UPLOAD_UNDO: return removeMedia(state, action.media_id); case COMPOSE_UPLOAD_PROGRESS: diff --git a/app/javascript/gabsocial/reducers/notifications.js b/app/javascript/gabsocial/reducers/notifications.js index b0dbd6ae..d8b7b914 100644 --- a/app/javascript/gabsocial/reducers/notifications.js +++ b/app/javascript/gabsocial/reducers/notifications.js @@ -69,8 +69,6 @@ const expandNormalizedNotifications = (state, notifications, next) => { let items = ImmutableList() - console.log("notifications:", notifications) - notifications.forEach((n) => { const notification = notificationToMap(n) const statusId = notification.get('status') @@ -136,8 +134,6 @@ const expandNormalizedNotifications = (state, notifications, next) => { } } - console.log("final items: ", items) - return state.withMutations(mutable => { if (!items.isEmpty()) { mutable.update('items', list => { @@ -149,12 +145,8 @@ const expandNormalizedNotifications = (state, notifications, next) => { item => item !== null && compareId(item.get('id'), items.first().get('id')) > 0 ) - // console.log("firstIndex, lastIndex: ", firstIndex, lastIndex) - const pop = list.take(firstIndex).concat(items, list.skip(lastIndex)) - // console.log("pop:", pop) - return pop }) } @@ -224,7 +216,6 @@ export default function notifications(state = initialState, action) { case NOTIFICATIONS_FILTER_SET: return state.withMutations(mutable => { mutable.set('items', ImmutableList()).set('hasMore', true) - console.log("NOTIFICATIONS_FILTER_SET:", action.path, action.value) mutable.setIn(['filter', action.path], action.value) }) case NOTIFICATIONS_SCROLL_TOP: diff --git a/app/javascript/gabsocial/reducers/user_lists.js b/app/javascript/gabsocial/reducers/user_lists.js index dc80c7e3..744226ea 100644 --- a/app/javascript/gabsocial/reducers/user_lists.js +++ b/app/javascript/gabsocial/reducers/user_lists.js @@ -1,32 +1,52 @@ +import { Map as ImmutableMap, List as ImmutableList } from 'immutable' import { + FOLLOWERS_FETCH_REQUEST, FOLLOWERS_FETCH_SUCCESS, FOLLOWERS_EXPAND_SUCCESS, + FOLLOWERS_FETCH_FAIL, + FOLLOWERS_EXPAND_REQUEST, + FOLLOWERS_EXPAND_FAIL, + FOLLOWING_FETCH_REQUEST, + FOLLOWING_FETCH_FAIL, + FOLLOWING_EXPAND_REQUEST, FOLLOWING_FETCH_SUCCESS, FOLLOWING_EXPAND_SUCCESS, + FOLLOWING_EXPAND_FAIL, + FOLLOW_REQUESTS_FETCH_REQUEST, + FOLLOW_REQUESTS_FETCH_FAIL, + FOLLOW_REQUESTS_EXPAND_REQUEST, FOLLOW_REQUESTS_FETCH_SUCCESS, FOLLOW_REQUESTS_EXPAND_SUCCESS, + FOLLOW_REQUESTS_EXPAND_FAIL, FOLLOW_REQUEST_AUTHORIZE_SUCCESS, FOLLOW_REQUEST_REJECT_SUCCESS, -} from '../actions/accounts'; +} from '../actions/accounts' import { REPOSTS_FETCH_SUCCESS, -} from '../actions/interactions'; +} from '../actions/interactions' import { + BLOCKS_FETCH_REQUEST, BLOCKS_FETCH_SUCCESS, + BLOCKS_FETCH_FAIL, + BLOCKS_EXPAND_REQUEST, BLOCKS_EXPAND_SUCCESS, -} from '../actions/blocks'; + BLOCKS_EXPAND_FAIL, +} from '../actions/blocks' import { + MUTES_FETCH_REQUEST, MUTES_FETCH_SUCCESS, + MUTES_FETCH_FAIL, + MUTES_EXPAND_REQUEST, MUTES_EXPAND_SUCCESS, -} from '../actions/mutes'; -import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; + MUTES_EXPAND_FAIL, +} from '../actions/mutes' import { GROUP_MEMBERS_FETCH_SUCCESS, GROUP_MEMBERS_EXPAND_SUCCESS, GROUP_REMOVED_ACCOUNTS_FETCH_SUCCESS, GROUP_REMOVED_ACCOUNTS_EXPAND_SUCCESS, GROUP_REMOVED_ACCOUNTS_REMOVE_SUCCESS, -} from '../actions/groups'; +} from '../actions/groups' const initialState = ImmutableMap({ followers: ImmutableMap(), @@ -44,12 +64,18 @@ const normalizeList = (state, type, id, accounts, next) => { return state.setIn([type, id], ImmutableMap({ next, items: ImmutableList(accounts.map(item => item.id)), + isLoading: false, })); }; const appendToList = (state, type, id, accounts, next) => { return state.updateIn([type, id], map => { - return map.set('next', next).update('items', list => list.concat(accounts.map(item => item.id))); + return map + .set('next', next) + .set('isLoading', false) + .update('items', (list) => { + list.concat(accounts.map(item => item.id)) + }) }); }; @@ -59,16 +85,34 @@ export default function userLists(state = initialState, action) { return normalizeList(state, 'followers', action.id, action.accounts, action.next); case FOLLOWERS_EXPAND_SUCCESS: return appendToList(state, 'followers', action.id, action.accounts, action.next); + case FOLLOWERS_FETCH_REQUEST: + case FOLLOWERS_EXPAND_REQUEST: + return state.setIn(['followers', action.id, 'isLoading'], true); + case FOLLOWERS_FETCH_FAIL: + case FOLLOWERS_EXPAND_FAIL: + return state.setIn(['followers', action.id, 'isLoading'], false); case FOLLOWING_FETCH_SUCCESS: return normalizeList(state, 'following', action.id, action.accounts, action.next); case FOLLOWING_EXPAND_SUCCESS: return appendToList(state, 'following', action.id, action.accounts, action.next); + case FOLLOWING_FETCH_REQUEST: + case FOLLOWING_EXPAND_REQUEST: + return state.setIn(['following', action.id, 'isLoading'], true); + case FOLLOWING_FETCH_FAIL: + case FOLLOWING_EXPAND_FAIL: + return state.setIn(['following', action.id, 'isLoading'], false); case REPOSTS_FETCH_SUCCESS: return state.setIn(['reblogged_by', action.id], ImmutableList(action.accounts.map(item => item.id))); case FOLLOW_REQUESTS_FETCH_SUCCESS: - return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next); + return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next).setIn(['follow_requests', 'isLoading'], false); case FOLLOW_REQUESTS_EXPAND_SUCCESS: - return state.updateIn(['follow_requests', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next); + return state.updateIn(['follow_requests', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next).setIn(['follow_requests', 'isLoading'], false); + case FOLLOW_REQUESTS_FETCH_REQUEST: + case FOLLOW_REQUESTS_EXPAND_REQUEST: + return state.setIn(['follow_requests', 'isLoading'], true); + case FOLLOW_REQUESTS_FETCH_FAIL: + case FOLLOW_REQUESTS_EXPAND_FAIL: + return state.setIn(['follow_requests', 'isLoading'], false); case FOLLOW_REQUEST_AUTHORIZE_SUCCESS: case FOLLOW_REQUEST_REJECT_SUCCESS: return state.updateIn(['follow_requests', 'items'], list => list.filterNot(item => item === action.id)); @@ -76,10 +120,22 @@ export default function userLists(state = initialState, action) { return state.setIn(['blocks', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next); case BLOCKS_EXPAND_SUCCESS: return state.updateIn(['blocks', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next); + case BLOCKS_FETCH_REQUEST: + case BLOCKS_EXPAND_REQUEST: + return state.setIn(['blocks', 'isLoading'], true); + case BLOCKS_FETCH_FAIL: + case BLOCKS_EXPAND_FAIL: + return state.setIn(['blocks', 'isLoading'], false); case MUTES_FETCH_SUCCESS: return state.setIn(['mutes', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next); case MUTES_EXPAND_SUCCESS: return state.updateIn(['mutes', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next); + case MUTES_FETCH_REQUEST: + case MUTES_EXPAND_REQUEST: + return state.setIn(['mutes', 'isLoading'], true); + case MUTES_FETCH_FAIL: + case MUTES_EXPAND_FAIL: + return state.setIn(['mutes', 'isLoading'], false); case GROUP_MEMBERS_FETCH_SUCCESS: return normalizeList(state, 'groups', action.id, action.accounts, action.next); case GROUP_MEMBERS_EXPAND_SUCCESS: diff --git a/app/javascript/gabsocial/utils/resize_image.js b/app/javascript/gabsocial/utils/resize_image.js index 04e472a9..ef50f1e5 100644 --- a/app/javascript/gabsocial/utils/resize_image.js +++ b/app/javascript/gabsocial/utils/resize_image.js @@ -2,6 +2,45 @@ import EXIF from 'exif-js'; const MAX_IMAGE_PIXELS = 1638400; // 1280x1280px +const _browser_quirks = {}; + +// Some browsers will automatically draw images respecting their EXIF orientation +// while others won't, and the safest way to detect that is to examine how it +// is done on a known image. +// See https://github.com/w3c/csswg-drafts/issues/4666 +// and https://github.com/blueimp/JavaScript-Load-Image/commit/1e4df707821a0afcc11ea0720ee403b8759f3881 +const dropOrientationIfNeeded = (orientation) => new Promise(resolve => { + switch (_browser_quirks['image-orientation-automatic']) { + case true: + resolve(1); + break; + case false: + resolve(orientation); + break; + default: + // black 2x1 JPEG, with the following meta information set: + // - EXIF Orientation: 6 (Rotated 90° CCW) + const testImageURL = + 'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' + + 'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' + + 'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' + + 'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' + + 'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' + + 'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q=='; + const img = new Image(); + img.onload = () => { + const automatic = (img.width === 1 && img.height === 2); + _browser_quirks['image-orientation-automatic'] = automatic; + resolve(automatic ? 1 : orientation); + }; + img.onerror = () => { + _browser_quirks['image-orientation-automatic'] = false; + resolve(orientation); + }; + img.src = testImageURL; + } +}); + const getImageUrl = inputFile => new Promise((resolve, reject) => { if (window.URL && URL.createObjectURL) { try { @@ -38,7 +77,11 @@ const getOrientation = (img, type = 'image/png') => new Promise(resolve => { EXIF.getData(img, () => { const orientation = EXIF.getTag(img, 'Orientation'); - resolve(orientation); + if (orientation !== 1) { + dropOrientationIfNeeded(orientation).then(resolve).catch(() => resolve(orientation)); + } else { + resolve(orientation); + } }); }); @@ -67,6 +110,14 @@ const processImage = (img, { width, height, orientation, type = 'image/png' }) = context.drawImage(img, 0, 0, width, height); + // The Tor Browser and maybe other browsers may prevent reading from canvas + // and return an all-white image instead. Assume reading failed if the resized + // image is perfectly white. + const imageData = context.getImageData(0, 0, width, height); + if (imageData.data.every(value => value === 255)) { + throw 'Failed to read from canvas'; + } + canvas.toBlob(resolve, type); }); diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 50b89662..124b52d6 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -81,7 +81,6 @@ function main ( ) { }); const reactComponents = document.querySelectorAll('[data-component]'); - console.log("reactComponents:", reactComponents) if (reactComponents.length > 0) { import(/* webpackChunkName: "containers/media_container" */ '../gabsocial/containers/media_container') diff --git a/app/javascript/styles/global.css b/app/javascript/styles/global.css index aea84086..77490326 100644 --- a/app/javascript/styles/global.css +++ b/app/javascript/styles/global.css @@ -18,7 +18,7 @@ --fs_m: 1.0714285714rem; --fs_l: 1.1428571429rem; --fs_xl: 1.3571428571rem; - --fs_xxl: 1.7142857143; + --fs_xxl: 1.7142857143rem; } :root { @@ -372,6 +372,7 @@ body { .top0 { top: 0; } .top80PX { top: 80px; } .top60PC { top: 60%; } +.top50PC { top: 50%; } .bottom0 { bottom: 0; } .bottomAuto { bottom: auto; } @@ -425,6 +426,7 @@ body { .height1PX { height: 1px; } .maxWidth100PC { max-width: 100%; } +.maxWidth640PX { max-width: 640px; } .width100PC { width: 100%; } .width50PC { width: 50%; } diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index e2e9b3c6..c01d02c8 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -104,7 +104,8 @@ class MediaAttachment < ApplicationRecord validates :account, presence: true validates :description, length: { maximum: 420 }, if: :local? - + validates :file, presence: true, if: :local? + scope :attached, -> { where.not(status_id: nil).or(where.not(scheduled_status_id: nil)) } scope :unattached, -> { where(status_id: nil, scheduled_status_id: nil) } scope :local, -> { where(remote_url: '') } diff --git a/app/models/status.rb b/app/models/status.rb index ca2bdb94..0938b9f3 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -351,7 +351,7 @@ class Status < ApplicationRecord apply_timeline_filters(query, account, local_only) end - def as_tag_timeline(tag, account = nil, local_only = false) + def as_tag_timeline(tag, account = nil, local_only = true) query = timeline_scope(local_only).tagged_with(tag).without_replies apply_timeline_filters(query, account, local_only) diff --git a/app/services/hashtag_query_service.rb b/app/services/hashtag_query_service.rb index 5773d78c..c2f3910e 100644 --- a/app/services/hashtag_query_service.rb +++ b/app/services/hashtag_query_service.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class HashtagQueryService < BaseService + LIMIT_PER_MODE = 1 + def call(tag, params, account = nil, local = false) tags = tags_for(Array(tag.name) | Array(params[:any])).pluck(:id) all = tags_for(params[:all]) @@ -14,7 +16,7 @@ class HashtagQueryService < BaseService private - def tags_for(tags) - Tag.where(name: tags.map(&:downcase)) if tags.presence + def tags_for(names) + Tag.matching_name(Array(names).take(LIMIT_PER_MODE)) if names.present? end -end +end \ No newline at end of file diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index b50b2f00..73bb2f66 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -53,7 +53,7 @@ class PostStatusService < BaseService def preprocess_attributes! @text = @options.delete(:spoiler_text) if @text.blank? && @options[:spoiler_text].present? @visibility = @options[:visibility] || @account.user&.setting_default_privacy - @visibility = :unlisted if @visibility == :public && @account.silenced? + @visibility = :unlisted if @visibility&.to_sym == :public && @account.silenced? @scheduled_at = @options[:scheduled_at]&.to_datetime @scheduled_at = nil if scheduled_in_the_past? rescue ArgumentError diff --git a/app/services/vote_service.rb b/app/services/vote_service.rb index 81af9ef3..93697435 100644 --- a/app/services/vote_service.rb +++ b/app/services/vote_service.rb @@ -13,7 +13,7 @@ class VoteService < BaseService ApplicationRecord.transaction do @choices.each do |choice| - @votes << @poll.votes.create!(account: @account, choice: choice) + @votes << @poll.votes.create!(account: @account, choice: Integer(choice)) end end diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb index cd2b8839..3d2b89ac 100644 --- a/config/initializers/rack_attack.rb +++ b/config/initializers/rack_attack.rb @@ -44,6 +44,7 @@ class Rack::Attack /auth/sign_in /auth /auth/password + /auth/confirmation ).freeze PROTECTED_PATHS_REGEX = Regexp.union(PROTECTED_PATHS.map { |path| /\A#{Regexp.escape(path)}/ }) diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 25ce8426..6d578231 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -29,8 +29,8 @@ en: setting_aggregate_reblogs: Do not show new reposts for gabs that have been recently reposted (only affects newly-received reposts) setting_default_language: The language of your gabs can be detected automatically, but it's not always accurate setting_display_media_default: Hide media marked as sensitive - setting_display_media_hide_all: Always hide all media - setting_display_media_show_all: Always show media marked as sensitive + setting_display_media_hide_all: Always hide media + setting_display_media_show_all: Always show media setting_hide_network: Who you follow and who follows you will not be shown on your profile setting_noindex: Affects your public profile and status pages setting_show_application: The application you use to gab will be displayed in the detailed view of your gabs diff --git a/config/locales/simple_form.en_GB.yml b/config/locales/simple_form.en_GB.yml index 2a3f04fa..61d8b339 100644 --- a/config/locales/simple_form.en_GB.yml +++ b/config/locales/simple_form.en_GB.yml @@ -29,8 +29,8 @@ en_GB: setting_aggregate_reblogs: Do not show new reposts for gabs that have been recently reposted (only affects newly-received reposts) setting_default_language: The language of your gabs can be detected automatically, but it's not always accurate setting_display_media_default: Hide media marked as sensitive - setting_display_media_hide_all: Always hide all media - setting_display_media_show_all: Always show media marked as sensitive + setting_display_media_hide_all: Always hide media + setting_display_media_show_all: Always show media setting_hide_network: Who you follow and who follows you will not be shown on your profile setting_noindex: Affects your public profile and status pages setting_show_application: The application you use to gab will be displayed in the detailed view of your gabs diff --git a/lib/gabsocial/migration_helpers.rb b/lib/gabsocial/migration_helpers.rb index e09f59ad..5451ffca 100644 --- a/lib/gabsocial/migration_helpers.rb +++ b/lib/gabsocial/migration_helpers.rb @@ -886,16 +886,12 @@ module GabSocial Your database user is not allowed to create, drop, or execute triggers on the table #{table}. -If you are using PostgreSQL you can solve this by logging in to the GitLab +If you are using PostgreSQL you can solve this by logging in to the GabSocial database (#{dbname}) using a super user and running: ALTER USER #{user} WITH SUPERUSER -For MySQL you instead need to run: - - GRANT ALL PRIVILEGES ON *.* TO #{user}@'%' - -Both queries will grant the user super user permissions, ensuring you don't run +The query will grant the user super user permissions, ensuring you don't run into similar problems in the future (e.g. when new tables are created). EOF end