Skip to content

Commit f610fdd

Browse files
Merge pull request glitch-soc#2858 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 28966fa
2 parents 440b695 + 0b1310f commit f610fdd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+407
-649
lines changed

Gemfile.lock

+4-4
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,16 @@ GEM
100100
attr_required (1.0.2)
101101
awrence (1.2.1)
102102
aws-eventstream (1.3.0)
103-
aws-partitions (1.977.0)
104-
aws-sdk-core (3.208.0)
103+
aws-partitions (1.978.0)
104+
aws-sdk-core (3.209.0)
105105
aws-eventstream (~> 1, >= 1.3.0)
106106
aws-partitions (~> 1, >= 1.651.0)
107107
aws-sigv4 (~> 1.9)
108108
jmespath (~> 1, >= 1.6.1)
109-
aws-sdk-kms (1.93.0)
109+
aws-sdk-kms (1.94.0)
110110
aws-sdk-core (~> 3, >= 3.207.0)
111111
aws-sigv4 (~> 1.5)
112-
aws-sdk-s3 (1.165.0)
112+
aws-sdk-s3 (1.166.0)
113113
aws-sdk-core (~> 3, >= 3.207.0)
114114
aws-sdk-kms (~> 1)
115115
aws-sigv4 (~> 1.5)

app/controllers/concerns/web_app_controller_concern.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def set_app_body_class
3131
def redirect_unauthenticated_to_permalinks!
3232
return if user_signed_in? # NOTE: Different from upstream because we allow moved users to log in
3333

34-
permalink_redirector = PermalinkRedirector.new(request.path)
34+
permalink_redirector = PermalinkRedirector.new(request.original_fullpath)
3535
return if permalink_redirector.redirect_path.blank?
3636

3737
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?

app/javascript/flavours/glitch/actions/notification_groups.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,15 @@ function dispatchAssociatedRecords(
6868
dispatch(importFetchedStatuses(fetchedStatuses));
6969
}
7070

71+
const supportedGroupedNotificationTypes = ['favourite', 'reblog'];
72+
7173
export const fetchNotifications = createDataLoadingThunk(
7274
'notificationGroups/fetch',
7375
async (_params, { getState }) =>
74-
apiFetchNotificationGroups({ exclude_types: getExcludedTypes(getState()) }),
76+
apiFetchNotificationGroups({
77+
grouped_types: supportedGroupedNotificationTypes,
78+
exclude_types: getExcludedTypes(getState()),
79+
}),
7580
({ notifications, accounts, statuses }, { dispatch }) => {
7681
dispatch(importFetchedAccounts(accounts));
7782
dispatch(importFetchedStatuses(statuses));
@@ -93,6 +98,7 @@ export const fetchNotificationsGap = createDataLoadingThunk(
9398
'notificationGroups/fetchGap',
9499
async (params: { gap: NotificationGap }, { getState }) =>
95100
apiFetchNotificationGroups({
101+
grouped_types: supportedGroupedNotificationTypes,
96102
max_id: params.gap.maxId,
97103
exclude_types: getExcludedTypes(getState()),
98104
}),
@@ -109,6 +115,7 @@ export const pollRecentNotifications = createDataLoadingThunk(
109115
'notificationGroups/pollRecentNotifications',
110116
async (_params, { getState }) => {
111117
return apiFetchNotificationGroups({
118+
grouped_types: supportedGroupedNotificationTypes,
112119
max_id: undefined,
113120
exclude_types: getExcludedTypes(getState()),
114121
// In slow mode, we don't want to include notifications that duplicate the already-displayed ones

app/javascript/flavours/glitch/api/notifications.ts

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export const apiFetchNotifications = async (
3131

3232
export const apiFetchNotificationGroups = async (params?: {
3333
url?: string;
34+
grouped_types?: string[];
3435
exclude_types?: string[];
3536
max_id?: string;
3637
since_id?: string;

app/javascript/flavours/glitch/components/status_action_bar.jsx

+35-23
Original file line numberDiff line numberDiff line change
@@ -315,36 +315,48 @@ class StatusActionBar extends ImmutablePureComponent {
315315
}
316316

317317
const filterButton = this.props.onFilter && (
318-
<IconButton className='status__action-bar-button' title={intl.formatMessage(messages.hide)} icon='eye' iconComponent={VisibilityIcon} onClick={this.handleHideClick} />
318+
<div className='status__action-bar__button-wrapper'>
319+
<IconButton className='status__action-bar-button' title={intl.formatMessage(messages.hide)} icon='eye' iconComponent={VisibilityIcon} onClick={this.handleHideClick} />
320+
</div>
319321
);
320322

321323
return (
322324
<div className='status__action-bar'>
323-
<IconButton
324-
className='status__action-bar-button'
325-
title={replyTitle}
326-
icon={replyIcon}
327-
iconComponent={replyIconComponent}
328-
onClick={this.handleReplyClick}
329-
counter={showReplyCount ? status.get('replies_count') : undefined}
330-
obfuscateCount
331-
/>
332-
<IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon={reblogIcon} iconComponent={reblogIconComponent} onClick={this.handleReblogClick} counter={withCounters ? status.get('reblogs_count') : undefined} />
333-
<IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' iconComponent={status.get('favourited') ? StarIcon : StarBorderIcon} onClick={this.handleFavouriteClick} counter={withCounters ? status.get('favourites_count') : undefined} />
334-
<IconButton className='status__action-bar-button bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' iconComponent={status.get('bookmarked') ? BookmarkIcon : BookmarkBorderIcon} onClick={this.handleBookmarkClick} />
325+
<div className='status__action-bar__button-wrapper'>
326+
<IconButton
327+
className='status__action-bar-button'
328+
title={replyTitle}
329+
icon={replyIcon}
330+
iconComponent={replyIconComponent}
331+
onClick={this.handleReplyClick}
332+
counter={showReplyCount ? status.get('replies_count') : undefined}
333+
obfuscateCount
334+
/>
335+
</div>
336+
<div className='status__action-bar__button-wrapper'>
337+
<IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon={reblogIcon} iconComponent={reblogIconComponent} onClick={this.handleReblogClick} counter={withCounters ? status.get('reblogs_count') : undefined} />
338+
</div>
339+
<div className='status__action-bar__button-wrapper'>
340+
<IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' iconComponent={status.get('favourited') ? StarIcon : StarBorderIcon} onClick={this.handleFavouriteClick} counter={withCounters ? status.get('favourites_count') : undefined} />
341+
</div>
342+
<div className='status__action-bar__button-wrapper'>
343+
<IconButton className='status__action-bar-button bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' iconComponent={status.get('bookmarked') ? BookmarkIcon : BookmarkBorderIcon} onClick={this.handleBookmarkClick} />
344+
</div>
335345

336346
{filterButton}
337347

338-
<DropdownMenuContainer
339-
scrollKey={scrollKey}
340-
status={status}
341-
items={menu}
342-
icon='ellipsis-h'
343-
size={18}
344-
iconComponent={MoreHorizIcon}
345-
direction='right'
346-
ariaLabel={intl.formatMessage(messages.more)}
347-
/>
348+
<div className='status__action-bar__button-wrapper'>
349+
<DropdownMenuContainer
350+
scrollKey={scrollKey}
351+
status={status}
352+
items={menu}
353+
icon='ellipsis-h'
354+
size={18}
355+
iconComponent={MoreHorizIcon}
356+
direction='right'
357+
ariaLabel={intl.formatMessage(messages.more)}
358+
/>
359+
</div>
348360

349361
<div className='status__action-bar-spacer' />
350362
<a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener'>

app/javascript/flavours/glitch/features/ui/index.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ class SwitchingColumnsArea extends PureComponent {
196196
{redirect}
197197

198198
{singleColumn ? <Redirect from='/deck' to='/home' exact /> : null}
199-
{singleColumn && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={pathName.slice(5)} /> : null}
199+
{singleColumn && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={{...this.props.location, pathname: pathName.slice(5)}} /> : null}
200200
{/* Redirect old bookmarks (without /deck) with home-like routes to the advanced interface */}
201201
{!singleColumn && pathName === '/getting-started' ? <Redirect from='/getting-started' to='/deck/getting-started' exact /> : null}
202202
{!singleColumn && pathName === '/home' ? <Redirect from='/home' to='/deck/getting-started' exact /> : null}

app/javascript/flavours/glitch/styles/components.scss

+14-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
&:disabled,
9494
&.disabled {
9595
background-color: $ui-primary-color;
96-
cursor: default;
96+
cursor: not-allowed;
9797
}
9898

9999
&.copyable {
@@ -299,6 +299,10 @@
299299
}
300300
}
301301

302+
&--with-counter {
303+
padding-inline-end: 4px;
304+
}
305+
302306
&__counter {
303307
display: block;
304308
width: auto;
@@ -1516,6 +1520,15 @@ body > [data-popper-placement] {
15161520
}
15171521
}
15181522

1523+
&__action-bar__button-wrapper {
1524+
flex-basis: 0;
1525+
flex-grow: 1;
1526+
1527+
&:last-child {
1528+
flex-grow: 0;
1529+
}
1530+
}
1531+
15191532
&--first-in-thread {
15201533
border-top: 1px solid var(--background-border-color);
15211534
}

app/javascript/mastodon/actions/notification_groups.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,15 @@ function dispatchAssociatedRecords(
6868
dispatch(importFetchedStatuses(fetchedStatuses));
6969
}
7070

71+
const supportedGroupedNotificationTypes = ['favourite', 'reblog'];
72+
7173
export const fetchNotifications = createDataLoadingThunk(
7274
'notificationGroups/fetch',
7375
async (_params, { getState }) =>
74-
apiFetchNotificationGroups({ exclude_types: getExcludedTypes(getState()) }),
76+
apiFetchNotificationGroups({
77+
grouped_types: supportedGroupedNotificationTypes,
78+
exclude_types: getExcludedTypes(getState()),
79+
}),
7580
({ notifications, accounts, statuses }, { dispatch }) => {
7681
dispatch(importFetchedAccounts(accounts));
7782
dispatch(importFetchedStatuses(statuses));
@@ -93,6 +98,7 @@ export const fetchNotificationsGap = createDataLoadingThunk(
9398
'notificationGroups/fetchGap',
9499
async (params: { gap: NotificationGap }, { getState }) =>
95100
apiFetchNotificationGroups({
101+
grouped_types: supportedGroupedNotificationTypes,
96102
max_id: params.gap.maxId,
97103
exclude_types: getExcludedTypes(getState()),
98104
}),
@@ -109,6 +115,7 @@ export const pollRecentNotifications = createDataLoadingThunk(
109115
'notificationGroups/pollRecentNotifications',
110116
async (_params, { getState }) => {
111117
return apiFetchNotificationGroups({
118+
grouped_types: supportedGroupedNotificationTypes,
112119
max_id: undefined,
113120
exclude_types: getExcludedTypes(getState()),
114121
// In slow mode, we don't want to include notifications that duplicate the already-displayed ones

app/javascript/mastodon/api/notifications.ts

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export const apiFetchNotifications = async (
3131

3232
export const apiFetchNotificationGroups = async (params?: {
3333
url?: string;
34+
grouped_types?: string[];
3435
exclude_types?: string[];
3536
max_id?: string;
3637
since_id?: string;

app/javascript/mastodon/components/status_action_bar.jsx

+23-14
Original file line numberDiff line numberDiff line change
@@ -375,20 +375,29 @@ class StatusActionBar extends ImmutablePureComponent {
375375

376376
return (
377377
<div className='status__action-bar'>
378-
<IconButton className='status__action-bar__button' title={replyTitle} icon={isReply ? 'reply' : replyIcon} iconComponent={isReply ? ReplyIcon : replyIconComponent} onClick={this.handleReplyClick} counter={status.get('replies_count')} />
379-
<IconButton className={classNames('status__action-bar__button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' iconComponent={reblogIconComponent} onClick={this.handleReblogClick} counter={withCounters ? status.get('reblogs_count') : undefined} />
380-
<IconButton className='status__action-bar__button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' iconComponent={status.get('favourited') ? StarIcon : StarBorderIcon} onClick={this.handleFavouriteClick} counter={withCounters ? status.get('favourites_count') : undefined} />
381-
<IconButton className='status__action-bar__button bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' iconComponent={status.get('bookmarked') ? BookmarkIcon : BookmarkBorderIcon} onClick={this.handleBookmarkClick} />
382-
383-
<DropdownMenuContainer
384-
scrollKey={scrollKey}
385-
status={status}
386-
items={menu}
387-
icon='ellipsis-h'
388-
iconComponent={MoreHorizIcon}
389-
direction='right'
390-
title={intl.formatMessage(messages.more)}
391-
/>
378+
<div className='status__action-bar__button-wrapper'>
379+
<IconButton className='status__action-bar__button' title={replyTitle} icon={isReply ? 'reply' : replyIcon} iconComponent={isReply ? ReplyIcon : replyIconComponent} onClick={this.handleReplyClick} counter={status.get('replies_count')} />
380+
</div>
381+
<div className='status__action-bar__button-wrapper'>
382+
<IconButton className={classNames('status__action-bar__button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' iconComponent={reblogIconComponent} onClick={this.handleReblogClick} counter={withCounters ? status.get('reblogs_count') : undefined} />
383+
</div>
384+
<div className='status__action-bar__button-wrapper'>
385+
<IconButton className='status__action-bar__button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' iconComponent={status.get('favourited') ? StarIcon : StarBorderIcon} onClick={this.handleFavouriteClick} counter={withCounters ? status.get('favourites_count') : undefined} />
386+
</div>
387+
<div className='status__action-bar__button-wrapper'>
388+
<IconButton className='status__action-bar__button bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' iconComponent={status.get('bookmarked') ? BookmarkIcon : BookmarkBorderIcon} onClick={this.handleBookmarkClick} />
389+
</div>
390+
<div className='status__action-bar__button-wrapper'>
391+
<DropdownMenuContainer
392+
scrollKey={scrollKey}
393+
status={status}
394+
items={menu}
395+
icon='ellipsis-h'
396+
iconComponent={MoreHorizIcon}
397+
direction='right'
398+
title={intl.formatMessage(messages.more)}
399+
/>
400+
</div>
392401
</div>
393402
);
394403
}

app/javascript/mastodon/features/ui/index.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ class SwitchingColumnsArea extends PureComponent {
186186
{redirect}
187187

188188
{singleColumn ? <Redirect from='/deck' to='/home' exact /> : null}
189-
{singleColumn && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={pathName.slice(5)} /> : null}
189+
{singleColumn && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={{...this.props.location, pathname: pathName.slice(5)}} /> : null}
190190
{/* Redirect old bookmarks (without /deck) with home-like routes to the advanced interface */}
191191
{!singleColumn && pathName === '/getting-started' ? <Redirect from='/getting-started' to='/deck/getting-started' exact /> : null}
192192
{!singleColumn && pathName === '/home' ? <Redirect from='/home' to='/deck/getting-started' exact /> : null}

app/javascript/mastodon/locales/fr-CA.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
"compose_form.publish": "Publier",
165165
"compose_form.publish_form": "Publier",
166166
"compose_form.reply": "Répondre",
167-
"compose_form.save_changes": "Mis à jour",
167+
"compose_form.save_changes": "Mettre à jour",
168168
"compose_form.spoiler.marked": "Enlever l'avertissement de contenu",
169169
"compose_form.spoiler.unmarked": "Ajouter un avertissement de contenu",
170170
"compose_form.spoiler_placeholder": "Avertissement de contenu (optionnel)",

app/javascript/mastodon/locales/fr.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
"compose_form.publish": "Publier",
165165
"compose_form.publish_form": "Nouvelle publication",
166166
"compose_form.reply": "Répondre",
167-
"compose_form.save_changes": "Mis à jour",
167+
"compose_form.save_changes": "Mettre à jour",
168168
"compose_form.spoiler.marked": "Enlever l’avertissement de contenu",
169169
"compose_form.spoiler.unmarked": "Ajouter un avertissement de contenu",
170170
"compose_form.spoiler_placeholder": "Avertissement de contenu (optionnel)",

0 commit comments

Comments
 (0)