mirror of
https://github.com/glitch-soc/mastodon.git
synced 2025-02-13 14:13:48 -05:00
[Glitch] Add link from Web UI for Hashtags to the Moderation UI
Port eef8d2c8552ec72f71fb6ff09cb095405ea40439 to glitch-soc Co-authored-by: Eugen Rochko <eugen@zeonfederated.com> Signed-off-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
parent
f441e3db4e
commit
170f76c82c
@ -4,12 +4,17 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
|||||||
|
|
||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
|
|
||||||
|
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
||||||
import { Button } from 'flavours/glitch/components/button';
|
import { Button } from 'flavours/glitch/components/button';
|
||||||
import { ShortNumber } from 'flavours/glitch/components/short_number';
|
import { ShortNumber } from 'flavours/glitch/components/short_number';
|
||||||
|
import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';
|
||||||
|
import { withIdentity } from 'flavours/glitch/identity_context';
|
||||||
|
import { PERMISSION_MANAGE_TAXONOMIES } from 'flavours/glitch/permissions';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' },
|
followHashtag: { id: 'hashtag.follow', defaultMessage: 'Follow hashtag' },
|
||||||
unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' },
|
unfollowHashtag: { id: 'hashtag.unfollow', defaultMessage: 'Unfollow hashtag' },
|
||||||
|
adminModeration: { id: 'hashtag.admin_moderation', defaultMessage: 'Open moderation interface for #{name}' },
|
||||||
});
|
});
|
||||||
|
|
||||||
const usesRenderer = (displayNumber, pluralReady) => (
|
const usesRenderer = (displayNumber, pluralReady) => (
|
||||||
@ -45,11 +50,18 @@ const usesTodayRenderer = (displayNumber, pluralReady) => (
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => {
|
export const HashtagHeader = withIdentity(injectIntl(({ tag, intl, disabled, onClick, identity }) => {
|
||||||
if (!tag) {
|
if (!tag) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { signedIn, permissions } = identity;
|
||||||
|
const menu = [];
|
||||||
|
|
||||||
|
if (signedIn && (permissions & PERMISSION_MANAGE_TAXONOMIES) === PERMISSION_MANAGE_TAXONOMIES ) {
|
||||||
|
menu.push({ text: intl.formatMessage(messages.adminModeration, { name: tag.get("name") }), href: `/admin/tags/${tag.get('id')}` });
|
||||||
|
}
|
||||||
|
|
||||||
const [uses, people] = tag.get('history').reduce((arr, day) => [arr[0] + day.get('uses') * 1, arr[1] + day.get('accounts') * 1], [0, 0]);
|
const [uses, people] = tag.get('history').reduce((arr, day) => [arr[0] + day.get('uses') * 1, arr[1] + day.get('accounts') * 1], [0, 0]);
|
||||||
const dividingCircle = <span aria-hidden>{' · '}</span>;
|
const dividingCircle = <span aria-hidden>{' · '}</span>;
|
||||||
|
|
||||||
@ -57,7 +69,10 @@ export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => {
|
|||||||
<div className='hashtag-header'>
|
<div className='hashtag-header'>
|
||||||
<div className='hashtag-header__header'>
|
<div className='hashtag-header__header'>
|
||||||
<h1>#{tag.get('name')}</h1>
|
<h1>#{tag.get('name')}</h1>
|
||||||
<Button onClick={onClick} text={intl.formatMessage(tag.get('following') ? messages.unfollowHashtag : messages.followHashtag)} disabled={disabled} />
|
<div className='hashtag-header__header__buttons'>
|
||||||
|
{ menu.length > 0 && <DropdownMenuContainer disabled={menu.length === 0} items={menu} icon='ellipsis-v' iconComponent={MoreHorizIcon} size={24} direction='right' /> }
|
||||||
|
<Button onClick={onClick} text={intl.formatMessage(tag.get('following') ? messages.unfollowHashtag : messages.followHashtag)} disabled={disabled} />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@ -69,7 +84,7 @@ export const HashtagHeader = injectIntl(({ tag, intl, disabled, onClick }) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
});
|
}));
|
||||||
|
|
||||||
HashtagHeader.propTypes = {
|
HashtagHeader.propTypes = {
|
||||||
tag: ImmutablePropTypes.map,
|
tag: ImmutablePropTypes.map,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
export const PERMISSION_INVITE_USERS = 0x0000000000010000;
|
export const PERMISSION_INVITE_USERS = 0x0000000000010000;
|
||||||
export const PERMISSION_MANAGE_USERS = 0x0000000000000400;
|
export const PERMISSION_MANAGE_USERS = 0x0000000000000400;
|
||||||
|
export const PERMISSION_MANAGE_TAXONOMIES = 0x0000000000000100;
|
||||||
export const PERMISSION_MANAGE_FEDERATION = 0x0000000000000020;
|
export const PERMISSION_MANAGE_FEDERATION = 0x0000000000000020;
|
||||||
|
|
||||||
export const PERMISSION_MANAGE_REPORTS = 0x0000000000000010;
|
export const PERMISSION_MANAGE_REPORTS = 0x0000000000000010;
|
||||||
|
@ -8529,7 +8529,7 @@ noscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.icon-button {
|
.icon-button {
|
||||||
border: 1px solid lighten($ui-base-color, 12%);
|
border: 1px solid var(--background-border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
@ -10487,6 +10487,30 @@ noscript {
|
|||||||
line-height: 33px;
|
line-height: 33px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__buttons {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
|
||||||
|
.button {
|
||||||
|
flex-shrink: 1;
|
||||||
|
white-space: nowrap;
|
||||||
|
min-width: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-button {
|
||||||
|
border: 1px solid var(--background-border-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
box-sizing: content-box;
|
||||||
|
padding: 5px;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user