diff --git a/app/javascript/flavours/glitch/components/account.jsx b/app/javascript/flavours/glitch/components/account.jsx
index 6342ef6f48..00bf537bbb 100644
--- a/app/javascript/flavours/glitch/components/account.jsx
+++ b/app/javascript/flavours/glitch/components/account.jsx
@@ -17,7 +17,6 @@ import { Avatar } from './avatar';
import { Button } from './button';
import { FollowersCounter } from './counters';
import { DisplayName } from './display_name';
-import { IconButton } from './icon_button';
import Permalink from './permalink';
import { RelativeTimestamp } from './relative_timestamp';
@@ -45,10 +44,7 @@ class Account extends ImmutablePureComponent {
intl: PropTypes.object.isRequired,
hidden: PropTypes.bool,
minimal: PropTypes.bool,
- actionIcon: PropTypes.string,
- actionTitle: PropTypes.string,
defaultAction: PropTypes.string,
- onActionClick: PropTypes.func,
withBio: PropTypes.bool,
};
@@ -76,12 +72,8 @@ class Account extends ImmutablePureComponent {
this.props.onMuteNotifications(this.props.account, false);
};
- handleAction = () => {
- this.props.onActionClick(this.props.account);
- };
-
render () {
- const { account, intl, hidden, withBio, onActionClick, actionIcon, actionTitle, defaultAction, size, minimal } = this.props;
+ const { account, intl, hidden, withBio, defaultAction, size, minimal } = this.props;
if (!account) {
return ;
@@ -98,9 +90,7 @@ class Account extends ImmutablePureComponent {
let buttons;
- if (actionIcon && onActionClick) {
- buttons = ;
- } else if (!actionIcon && account.get('id') !== me && account.get('relationship', null) !== null) {
+ if (account.get('id') !== me && account.get('relationship', null) !== null) {
const following = account.getIn(['relationship', 'following']);
const requested = account.getIn(['relationship', 'requested']);
const blocking = account.getIn(['relationship', 'blocking']);
diff --git a/app/javascript/flavours/glitch/components/column.jsx b/app/javascript/flavours/glitch/components/column.jsx
index e42a539052..22d6eabed7 100644
--- a/app/javascript/flavours/glitch/components/column.jsx
+++ b/app/javascript/flavours/glitch/components/column.jsx
@@ -12,7 +12,6 @@ export default class Column extends PureComponent {
static propTypes = {
children: PropTypes.node,
extraClasses: PropTypes.string,
- name: PropTypes.string,
label: PropTypes.string,
bindToDocument: PropTypes.bool,
};
@@ -62,10 +61,10 @@ export default class Column extends PureComponent {
}
render () {
- const { children, extraClasses, name, label } = this.props;
+ const { label, children, extraClasses } = this.props;
return (
-
+
{children}
);
diff --git a/app/javascript/flavours/glitch/components/status.jsx b/app/javascript/flavours/glitch/components/status.jsx
index 81cd30fd26..fe1229d8d8 100644
--- a/app/javascript/flavours/glitch/components/status.jsx
+++ b/app/javascript/flavours/glitch/components/status.jsx
@@ -79,6 +79,7 @@ class Status extends ImmutablePureComponent {
previousId: PropTypes.string,
nextInReplyToId: PropTypes.string,
rootId: PropTypes.string,
+ onClick: PropTypes.func,
onReply: PropTypes.func,
onFavourite: PropTypes.func,
onReblog: PropTypes.func,
@@ -109,7 +110,6 @@ class Status extends ImmutablePureComponent {
intl: PropTypes.object.isRequired,
cacheMediaWidth: PropTypes.func,
cachedMediaWidth: PropTypes.number,
- onClick: PropTypes.func,
scrollKey: PropTypes.string,
deployPictureInPicture: PropTypes.func,
settings: ImmutablePropTypes.map.isRequired,
diff --git a/app/javascript/flavours/glitch/containers/mastodon.jsx b/app/javascript/flavours/glitch/containers/mastodon.jsx
index 1ab20d0227..070e94fe8f 100644
--- a/app/javascript/flavours/glitch/containers/mastodon.jsx
+++ b/app/javascript/flavours/glitch/containers/mastodon.jsx
@@ -22,6 +22,7 @@ import { store } from 'flavours/glitch/store';
const title = process.env.NODE_ENV === 'production' ? siteTitle : `${siteTitle} (Dev)`;
const hydrateAction = hydrateStore(initialState);
+
store.dispatch(hydrateAction);
// check for deprecated local settings
@@ -71,8 +72,8 @@ export default class Mastodon extends PureComponent {
}
}
- shouldUpdateScroll (_, { location }) {
- return !(location.state?.mastodonModalKey);
+ shouldUpdateScroll (prevRouterProps, { location }) {
+ return !(location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey);
}
render () {
diff --git a/app/javascript/flavours/glitch/features/account/components/featured_tags.jsx b/app/javascript/flavours/glitch/features/account/components/featured_tags.jsx
index 4ddf0dc524..720acab43f 100644
--- a/app/javascript/flavours/glitch/features/account/components/featured_tags.jsx
+++ b/app/javascript/flavours/glitch/features/account/components/featured_tags.jsx
@@ -38,7 +38,7 @@ class FeaturedTags extends ImmutablePureComponent {
name={featuredTag.get('name')}
href={featuredTag.get('url')}
to={`/@${account.get('acct')}/tagged/${featuredTag.get('name')}`}
- uses={featuredTag.get('statuses_count')}
+ uses={featuredTag.get('statuses_count') * 1}
withGraph={false}
description={((featuredTag.get('statuses_count') * 1) > 0) ? intl.formatMessage(messages.lastStatusAt, { date: intl.formatDate(featuredTag.get('last_status_at'), { month: 'short', day: '2-digit' }) }) : intl.formatMessage(messages.empty)}
/>
diff --git a/app/javascript/flavours/glitch/features/account/components/header.jsx b/app/javascript/flavours/glitch/features/account/components/header.jsx
index c64bfb3b51..f0cfa0f813 100644
--- a/app/javascript/flavours/glitch/features/account/components/header.jsx
+++ b/app/javascript/flavours/glitch/features/account/components/header.jsx
@@ -11,7 +11,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import { Avatar } from 'flavours/glitch/components/avatar';
import { Button } from 'flavours/glitch/components/button';
-import { Icon } from 'flavours/glitch/components/icon';
+import { Icon } from 'flavours/glitch/components/icon';
import { IconButton } from 'flavours/glitch/components/icon_button';
import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';
import { autoPlayGif, me, domain } from 'flavours/glitch/initial_state';
diff --git a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx
index aaa872b0aa..87189ecf1b 100644
--- a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx
+++ b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx
@@ -76,7 +76,7 @@ export default class MediaItem extends ImmutablePureComponent {
if (['audio', 'video'].includes(attachment.get('type'))) {
content = (
: null;
return (
-
+
;
return (
-
+
;
return (
-
+
{
class CommunityTimeline extends PureComponent {
- static defaultProps = {
- onlyMedia: false,
- };
-
static contextTypes = {
identity: PropTypes.object,
};
+ static defaultProps = {
+ onlyMedia: false,
+ };
+
static propTypes = {
dispatch: PropTypes.func.isRequired,
columnId: PropTypes.string,
@@ -128,7 +128,7 @@ class CommunityTimeline extends PureComponent {
const pinned = !!columnId;
return (
-
+
-
- {this.props.account.get('acct')}
-
+
+ {username}
+
- @{this.props.account.get('acct')}
+ @{username}
{ profileLink !== undefined && (
diff --git a/app/javascript/flavours/glitch/features/compose/components/search.jsx b/app/javascript/flavours/glitch/features/compose/components/search.jsx
index ed717f215b..64732068ed 100644
--- a/app/javascript/flavours/glitch/features/compose/components/search.jsx
+++ b/app/javascript/flavours/glitch/features/compose/components/search.jsx
@@ -92,25 +92,6 @@ class Search extends PureComponent {
}
};
- handleBlur = () => {
- this.setState({ expanded: false, selectedOption: -1 });
- };
-
- handleFocus = () => {
- const { onShow, singleColumn } = this.props;
-
- this.setState({ expanded: true, selectedOption: -1 });
- onShow();
-
- if (this.searchForm && !singleColumn) {
- const { left, right } = this.searchForm.getBoundingClientRect();
-
- if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) {
- this.searchForm.scrollIntoView();
- }
- }
- };
-
handleKeyDown = (e) => {
const { selectedOption } = this.state;
const options = searchEnabled ? this._getOptions().concat(this.defaultOptions) : this._getOptions();
@@ -161,8 +142,23 @@ class Search extends PureComponent {
}
};
- findTarget = () => {
- return this.searchForm;
+ handleFocus = () => {
+ const { onShow, singleColumn } = this.props;
+
+ this.setState({ expanded: true, selectedOption: -1 });
+ onShow();
+
+ if (this.searchForm && !singleColumn) {
+ const { left, right } = this.searchForm.getBoundingClientRect();
+
+ if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) {
+ this.searchForm.scrollIntoView();
+ }
+ }
+ };
+
+ handleBlur = () => {
+ this.setState({ expanded: false, selectedOption: -1 });
};
handleHashtagClick = () => {
diff --git a/app/javascript/flavours/glitch/features/compose/components/search_results.jsx b/app/javascript/flavours/glitch/features/compose/components/search_results.jsx
index e8379a9326..af7b8a6c7b 100644
--- a/app/javascript/flavours/glitch/features/compose/components/search_results.jsx
+++ b/app/javascript/flavours/glitch/features/compose/components/search_results.jsx
@@ -5,7 +5,7 @@ import { FormattedMessage } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import { Icon } from 'flavours/glitch/components/icon';
+import { Icon } from 'flavours/glitch/components/icon';
import { LoadMore } from 'flavours/glitch/components/load_more';
import { SearchSection } from 'flavours/glitch/features/explore/components/search_section';
@@ -69,6 +69,7 @@ class SearchResults extends ImmutablePureComponent {
);
}
+
return (
diff --git a/app/javascript/flavours/glitch/features/favourited_statuses/index.jsx b/app/javascript/flavours/glitch/features/favourited_statuses/index.jsx
index 9c745be813..1a19a03afa 100644
--- a/app/javascript/flavours/glitch/features/favourited_statuses/index.jsx
+++ b/app/javascript/flavours/glitch/features/favourited_statuses/index.jsx
@@ -77,7 +77,7 @@ class Favourites extends ImmutablePureComponent {
const emptyMessage = ;
return (
-
+
+
)}
/>
+
+
- ))}
+ )).reverse()}
{announcements.size > 1 && (
diff --git a/app/javascript/flavours/glitch/features/getting_started/index.jsx b/app/javascript/flavours/glitch/features/getting_started/index.jsx
index e803c4949c..ea2537482b 100644
--- a/app/javascript/flavours/glitch/features/getting_started/index.jsx
+++ b/app/javascript/flavours/glitch/features/getting_started/index.jsx
@@ -173,7 +173,7 @@ class GettingStarted extends ImmutablePureComponent {
}
return (
-
+
{!multiColumn && signedIn && }
diff --git a/app/javascript/flavours/glitch/features/home_timeline/index.jsx b/app/javascript/flavours/glitch/features/home_timeline/index.jsx
index d3547ed3be..20351833a0 100644
--- a/app/javascript/flavours/glitch/features/home_timeline/index.jsx
+++ b/app/javascript/flavours/glitch/features/home_timeline/index.jsx
@@ -196,7 +196,7 @@ class HomeTimeline extends PureComponent {
}
return (
-
+
;
return (
-
+
diff --git a/app/javascript/flavours/glitch/features/onboarding/share.jsx b/app/javascript/flavours/glitch/features/onboarding/share.jsx
index a313ee2e8d..488096654c 100644
--- a/app/javascript/flavours/glitch/features/onboarding/share.jsx
+++ b/app/javascript/flavours/glitch/features/onboarding/share.jsx
@@ -13,7 +13,7 @@ import SwipeableViews from 'react-swipeable-views';
import Column from 'flavours/glitch/components/column';
import ColumnBackButton from 'flavours/glitch/components/column_back_button';
-import { Icon } from 'flavours/glitch/components/icon';
+import { Icon } from 'flavours/glitch/components/icon';
import { me, domain } from 'flavours/glitch/initial_state';
import ArrowSmallRight from './components/arrow_small_right';
diff --git a/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.jsx b/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.jsx
index 51d7c10668..28dab45dcb 100644
--- a/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.jsx
+++ b/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.jsx
@@ -122,8 +122,8 @@ class Footer extends ImmutablePureComponent {
}
};
- _performReblog = (privacy) => {
- const { dispatch, status } = this.props;
+ _performReblog = (status, privacy) => {
+ const { dispatch } = this.props;
dispatch(reblog(status, privacy));
};
@@ -135,7 +135,7 @@ class Footer extends ImmutablePureComponent {
if (status.get('reblogged')) {
dispatch(unreblog(status));
} else if ((e && e.shiftKey) || !boostModal) {
- this._performReblog();
+ this._performReblog(status);
} else {
dispatch(initBoostModal({ status, onReblog: this._performReblog }));
}
diff --git a/app/javascript/flavours/glitch/features/public_timeline/index.jsx b/app/javascript/flavours/glitch/features/public_timeline/index.jsx
index 8c373d99ab..79719fd2db 100644
--- a/app/javascript/flavours/glitch/features/public_timeline/index.jsx
+++ b/app/javascript/flavours/glitch/features/public_timeline/index.jsx
@@ -133,7 +133,7 @@ class PublicTimeline extends PureComponent {
const pinned = !!columnId;
return (
-
+
-
·
+
+ ·
+
} />
@@ -61,3 +63,5 @@ export default class StatusCheckBox extends PureComponent {
}
}
+
+export default StatusCheckBox;
diff --git a/app/javascript/flavours/glitch/features/status/components/action_bar.jsx b/app/javascript/flavours/glitch/features/status/components/action_bar.jsx
index 766ba55f33..a8d9ad3c69 100644
--- a/app/javascript/flavours/glitch/features/status/components/action_bar.jsx
+++ b/app/javascript/flavours/glitch/features/status/components/action_bar.jsx
@@ -58,13 +58,13 @@ class ActionBar extends PureComponent {
onReblog: PropTypes.func.isRequired,
onFavourite: PropTypes.func.isRequired,
onBookmark: PropTypes.func.isRequired,
- onMute: PropTypes.func,
- onMuteConversation: PropTypes.func,
- onBlock: PropTypes.func,
onDelete: PropTypes.func.isRequired,
onEdit: PropTypes.func.isRequired,
onDirect: PropTypes.func.isRequired,
onMention: PropTypes.func.isRequired,
+ onMute: PropTypes.func,
+ onBlock: PropTypes.func,
+ onMuteConversation: PropTypes.func,
onReport: PropTypes.func,
onPin: PropTypes.func,
onEmbed: PropTypes.func,
@@ -112,14 +112,14 @@ class ActionBar extends PureComponent {
this.props.onMute(this.props.status.get('account'));
};
- handleConversationMuteClick = () => {
- this.props.onMuteConversation(this.props.status);
- };
-
handleBlockClick = () => {
this.props.onBlock(this.props.status);
};
+ handleConversationMuteClick = () => {
+ this.props.onMuteConversation(this.props.status);
+ };
+
handleReport = () => {
this.props.onReport(this.props.status);
};
diff --git a/app/javascript/flavours/glitch/features/status/components/card.jsx b/app/javascript/flavours/glitch/features/status/components/card.jsx
index a64314efa3..4e7ccf96f9 100644
--- a/app/javascript/flavours/glitch/features/status/components/card.jsx
+++ b/app/javascript/flavours/glitch/features/status/components/card.jsx
@@ -3,13 +3,13 @@ import { PureComponent } from 'react';
import { FormattedMessage } from 'react-intl';
-import classnames from 'classnames';
+import classNames from 'classnames';
import Immutable from 'immutable';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { Blurhash } from 'flavours/glitch/components/blurhash';
-import { Icon } from 'flavours/glitch/components/icon';
+import { Icon } from 'flavours/glitch/components/icon';
import { useBlurhash } from 'flavours/glitch/initial_state';
import { decode as decodeIDNA } from 'flavours/glitch/utils/idna';
@@ -148,7 +148,7 @@ export default class Card extends PureComponent {
const provider = card.get('provider_name').length === 0 ? decodeIDNA(getHostname(card.get('url'))) : card.get('provider_name');
const horizontal = (!compact && card.get('width') > card.get('height')) || card.get('type') !== 'link' || embedded;
const interactive = card.get('type') !== 'link';
- const className = classnames('status-card', { horizontal, compact, interactive });
+ const className = classNames('status-card', { horizontal, compact, interactive });
const title = interactive ? {card.get('title')} : {card.get('title')};
const language = card.get('language') || '';
@@ -171,15 +171,17 @@ export default class Card extends PureComponent {
let embed = '';
let canvas = (
);
+
const thumbnailDescription = card.get('image_description');
const thumbnail = ;
+
let spoilerButton = (
);
+
spoilerButton = (
-
+
{spoilerButton}
);
@@ -209,15 +212,14 @@ export default class Card extends PureComponent {
{canvas}
{thumbnail}
- {revealed && (
+ {revealed ? (
- )}
- {!revealed && spoilerButton}
+ ) : spoilerButton}
);
}
diff --git a/app/javascript/flavours/glitch/features/status/components/detailed_status.jsx b/app/javascript/flavours/glitch/features/status/components/detailed_status.jsx
index bf41aa931d..a5908e6da2 100644
--- a/app/javascript/flavours/glitch/features/status/components/detailed_status.jsx
+++ b/app/javascript/flavours/glitch/features/status/components/detailed_status.jsx
@@ -12,7 +12,7 @@ import { AnimatedNumber } from 'flavours/glitch/components/animated_number';
import AttachmentList from 'flavours/glitch/components/attachment_list';
import EditedTimestamp from 'flavours/glitch/components/edited_timestamp';
import { getHashtagBarForStatus } from 'flavours/glitch/components/hashtag_bar';
-import { Icon } from 'flavours/glitch/components/icon';
+import { Icon } from 'flavours/glitch/components/icon';
import PictureInPicturePlaceholder from 'flavours/glitch/components/picture_in_picture_placeholder';
import VisibilityIcon from 'flavours/glitch/components/status_visibility_icon';
import PollContainer from 'flavours/glitch/containers/poll_container';
diff --git a/app/javascript/flavours/glitch/features/ui/components/columns_area.jsx b/app/javascript/flavours/glitch/features/ui/components/columns_area.jsx
index f1e7baf8dd..05a02ae6ce 100644
--- a/app/javascript/flavours/glitch/features/ui/components/columns_area.jsx
+++ b/app/javascript/flavours/glitch/features/ui/components/columns_area.jsx
@@ -75,7 +75,7 @@ export default class ColumnsArea extends ImmutablePureComponent {
this.isRtlLayout = document.getElementsByTagName('body')[0].classList.contains('rtl');
}
- componentWillUpdate(nextProps) {
+ UNSAFE_componentWillUpdate(nextProps) {
if (this.props.singleColumn !== nextProps.singleColumn && nextProps.singleColumn) {
this.node.removeEventListener('wheel', this.handleWheel);
}
diff --git a/app/javascript/flavours/glitch/features/ui/components/media_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/media_modal.jsx
index 676659c53d..9fc51e620c 100644
--- a/app/javascript/flavours/glitch/features/ui/components/media_modal.jsx
+++ b/app/javascript/flavours/glitch/features/ui/components/media_modal.jsx
@@ -96,6 +96,7 @@ class MediaModal extends ImmutablePureComponent {
componentDidMount () {
window.addEventListener('keydown', this.handleKeyDown, false);
+
this._sendBackgroundColor();
}