Merge branch 'kb_development' into kb_migration
This commit is contained in:
commit
9e2390f3c9
57 changed files with 227 additions and 64 deletions
|
@ -55,6 +55,7 @@ export const defaultMediaVisibility = (status) => {
|
|||
const messages = defineMessages({
|
||||
public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },
|
||||
unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
|
||||
public_unlisted_short: { id: 'privacy.public_unlisted.short', defaultMessage: 'Public unlisted' },
|
||||
private_short: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
|
||||
direct_short: { id: 'privacy.direct.short', defaultMessage: 'Mentioned people only' },
|
||||
edited: { id: 'status.edited', defaultMessage: 'Edited {date}' },
|
||||
|
@ -506,6 +507,7 @@ class Status extends ImmutablePureComponent {
|
|||
const visibilityIconInfo = {
|
||||
'public': { icon: 'globe', text: intl.formatMessage(messages.public_short) },
|
||||
'unlisted': { icon: 'unlock', text: intl.formatMessage(messages.unlisted_short) },
|
||||
'public_unlisted': { icon: 'cloud', text: intl.formatMessage(messages.public_unlisted_short) },
|
||||
'private': { icon: 'lock', text: intl.formatMessage(messages.private_short) },
|
||||
'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },
|
||||
};
|
||||
|
|
|
@ -248,8 +248,8 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
const { signedIn, permissions } = this.context.identity;
|
||||
|
||||
const anonymousAccess = !signedIn;
|
||||
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
||||
const pinnableStatus = ['public', 'unlisted', 'private'].includes(status.get('visibility'));
|
||||
const publicStatus = ['public', 'unlisted', 'public_unlisted'].includes(status.get('visibility'));
|
||||
const pinnableStatus = ['public', 'unlisted', 'public_unlisted', 'private'].includes(status.get('visibility'));
|
||||
const mutingConversation = status.get('muted');
|
||||
const account = status.get('account');
|
||||
const writtenByMe = status.getIn(['account', 'id']) === me;
|
||||
|
@ -369,13 +369,17 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
<IconButton className='status__action-bar__button' title={intl.formatMessage(messages.hide)} icon='eye' onClick={this.handleHideClick} />
|
||||
);
|
||||
|
||||
const emojiPickerButton = (
|
||||
<IconButton className='status__action-bar__button' icon='smile-o' />
|
||||
);
|
||||
|
||||
return (
|
||||
<div className='status__action-bar'>
|
||||
<IconButton className='status__action-bar__button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} counter={status.get('replies_count')} obfuscateCount />
|
||||
<IconButton className={classNames('status__action-bar__button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} counter={withCounters ? status.get('reblogs_count') : undefined} />
|
||||
<IconButton className='status__action-bar__button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} counter={withCounters ? status.get('favourites_count') : undefined} />
|
||||
<IconButton className='status__action-bar__button bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} />
|
||||
<EmojiPickerDropdown onPickEmoji={this.handleEmojiPick} />
|
||||
<EmojiPickerDropdown onPickEmoji={this.handleEmojiPick} button={emojiPickerButton} />
|
||||
|
||||
{shareButton}
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ class StatusEmojiReactionsBar extends React.PureComponent {
|
|||
render () {
|
||||
const { emojiReactions } = this.props;
|
||||
|
||||
const emojiButtons = Array.from(emojiReactions).map((emoji, index) => (
|
||||
const emojiButtons = Array.from(emojiReactions).filter(emoji => emoji.get('count') != 0).map((emoji, index) => (
|
||||
<EmojiReactionButton
|
||||
key={index}
|
||||
name={emoji.get('name')}
|
||||
|
|
|
@ -217,7 +217,7 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
} else if (this.props.privacy === 'private' || this.props.privacy === 'direct') {
|
||||
publishText = <span className='compose-form__publish-private'><Icon id='lock' /> {intl.formatMessage(messages.publish)}</span>;
|
||||
} else {
|
||||
publishText = this.props.privacy !== 'unlisted' ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish);
|
||||
publishText = (this.props.privacy !== 'unlisted' && this.props.privacy !== 'public_unlisted') ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish);
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -12,6 +12,8 @@ const messages = defineMessages({
|
|||
public_long: { id: 'privacy.public.long', defaultMessage: 'Visible for all' },
|
||||
unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
|
||||
unlisted_long: { id: 'privacy.unlisted.long', defaultMessage: 'Visible for all, but opted-out of discovery features' },
|
||||
public_unlisted_short: { id: 'privacy.public_unlisted.short', defaultMessage: 'Public unlisted' },
|
||||
public_unlisted_long: { id: 'privacy.public_unlisted.long', defaultMessage: 'Visible for all without GTL' },
|
||||
private_short: { id: 'privacy.private.short', defaultMessage: 'Followers only' },
|
||||
private_long: { id: 'privacy.private.long', defaultMessage: 'Visible for followers only' },
|
||||
direct_short: { id: 'privacy.direct.short', defaultMessage: 'Mentioned people only' },
|
||||
|
@ -218,6 +220,7 @@ class PrivacyDropdown extends React.PureComponent {
|
|||
|
||||
this.options = [
|
||||
{ icon: 'globe', value: 'public', text: formatMessage(messages.public_short), meta: formatMessage(messages.public_long) },
|
||||
{ icon: 'cloud', value: 'public_unlisted', text: formatMessage(messages.public_unlisted_short), meta: formatMessage(messages.public_unlisted_long) },
|
||||
{ icon: 'unlock', value: 'unlisted', text: formatMessage(messages.unlisted_short), meta: formatMessage(messages.unlisted_long) },
|
||||
{ icon: 'lock', value: 'private', text: formatMessage(messages.private_short), meta: formatMessage(messages.private_long) },
|
||||
];
|
||||
|
|
|
@ -154,7 +154,7 @@ class Footer extends ImmutablePureComponent {
|
|||
render () {
|
||||
const { status, intl, withOpenButton } = this.props;
|
||||
|
||||
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
||||
const publicStatus = ['public', 'unlisted', 'public_unlisted'].includes(status.get('visibility'));
|
||||
const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';
|
||||
|
||||
let replyIcon, replyTitle;
|
||||
|
|
|
@ -13,6 +13,7 @@ import Icon from 'mastodon/components/icon';
|
|||
const messages = defineMessages({
|
||||
public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },
|
||||
unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
|
||||
public_unlisted_short: { id: 'privacy.public_unlisted.short', defaultMessage: 'Public unlisted' },
|
||||
private_short: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
|
||||
direct_short: { id: 'privacy.direct.short', defaultMessage: 'Mentioned people only' },
|
||||
});
|
||||
|
@ -43,6 +44,7 @@ class StatusCheckBox extends React.PureComponent {
|
|||
const visibilityIconInfo = {
|
||||
'public': { icon: 'globe', text: intl.formatMessage(messages.public_short) },
|
||||
'unlisted': { icon: 'unlock', text: intl.formatMessage(messages.unlisted_short) },
|
||||
'public_unlisted': { icon: 'cloud', text: intl.formatMessage(messages.public_unlisted_short) },
|
||||
'private': { icon: 'lock', text: intl.formatMessage(messages.private_short) },
|
||||
'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },
|
||||
};
|
||||
|
|
|
@ -190,8 +190,8 @@ class ActionBar extends React.PureComponent {
|
|||
const { status, relationship, intl } = this.props;
|
||||
const { signedIn, permissions } = this.context.identity;
|
||||
|
||||
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
||||
const pinnableStatus = ['public', 'unlisted', 'private'].includes(status.get('visibility'));
|
||||
const publicStatus = ['public', 'unlisted', 'public_unlisted'].includes(status.get('visibility'));
|
||||
const pinnableStatus = ['public', 'unlisted', 'public_unlisted', 'private'].includes(status.get('visibility'));
|
||||
const mutingConversation = status.get('muted');
|
||||
const account = status.get('account');
|
||||
const writtenByMe = status.getIn(['account', 'id']) === me;
|
||||
|
@ -267,6 +267,10 @@ class ActionBar extends React.PureComponent {
|
|||
<div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShare} /></div>
|
||||
);
|
||||
|
||||
const emojiPickerButton = (
|
||||
<IconButton icon='smile-o' />
|
||||
);
|
||||
|
||||
let replyIcon;
|
||||
if (status.get('in_reply_to_id', null) === null) {
|
||||
replyIcon = 'reply';
|
||||
|
@ -293,7 +297,7 @@ class ActionBar extends React.PureComponent {
|
|||
<div className='detailed-status__button' ><IconButton className={classNames({ reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} /></div>
|
||||
<div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /></div>
|
||||
<div className='detailed-status__button'><IconButton className='bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div>
|
||||
<div className='detailed-status__button'><EmojiPickerDropdown onPickEmoji={this.handleEmojiPick} /></div>
|
||||
<div className='detailed-status__button'><EmojiPickerDropdown onPickEmoji={this.handleEmojiPick} button={emojiPickerButton} /></div>
|
||||
|
||||
{shareButton}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ import EditedTimestamp from 'mastodon/components/edited_timestamp';
|
|||
const messages = defineMessages({
|
||||
public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },
|
||||
unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
|
||||
public_unlisted_short: { id: 'privacy.public_unlisted.short', defaultMessage: 'Public unlisted' },
|
||||
private_short: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
|
||||
direct_short: { id: 'privacy.direct.short', defaultMessage: 'Direct' },
|
||||
});
|
||||
|
@ -209,6 +210,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
|||
const visibilityIconInfo = {
|
||||
'public': { icon: 'globe', text: intl.formatMessage(messages.public_short) },
|
||||
'unlisted': { icon: 'unlock', text: intl.formatMessage(messages.unlisted_short) },
|
||||
'public_unlisted': { icon: 'cloud', text: intl.formatMessage(messages.public_unlisted_short) },
|
||||
'private': { icon: 'lock', text: intl.formatMessage(messages.private_short) },
|
||||
'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },
|
||||
};
|
||||
|
|
|
@ -20,6 +20,7 @@ const messages = defineMessages({
|
|||
reblog: { id: 'status.reblog', defaultMessage: 'Boost' },
|
||||
public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },
|
||||
unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
|
||||
public_unlisted_short: { id: 'privacy.public_unlisted.short', defaultMessage: 'Public unlisted' },
|
||||
private_short: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
|
||||
direct_short: { id: 'privacy.direct.short', defaultMessage: 'Direct' },
|
||||
});
|
||||
|
@ -87,6 +88,7 @@ class BoostModal extends ImmutablePureComponent {
|
|||
const visibilityIconInfo = {
|
||||
'public': { icon: 'globe', text: intl.formatMessage(messages.public_short) },
|
||||
'unlisted': { icon: 'unlock', text: intl.formatMessage(messages.unlisted_short) },
|
||||
'public_unlisted': { icon: 'cloud', text: intl.formatMessage(messages.public_unlisted_short) },
|
||||
'private': { icon: 'lock', text: intl.formatMessage(messages.private_short) },
|
||||
'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },
|
||||
};
|
||||
|
|
|
@ -460,6 +460,8 @@
|
|||
"privacy.private.short": "Followers only",
|
||||
"privacy.public.long": "Visible for all",
|
||||
"privacy.public.short": "Public",
|
||||
"privacy.public_unlisted.long": "Visible for all without GTL",
|
||||
"privacy.public_unlisted.short": "Public unlisted",
|
||||
"privacy.unlisted.long": "Visible for all, but opted-out of discovery features",
|
||||
"privacy.unlisted.short": "Unlisted",
|
||||
"privacy_policy.last_updated": "Last updated {date}",
|
||||
|
|
|
@ -458,9 +458,11 @@
|
|||
"privacy.direct.short": "指定された相手のみ",
|
||||
"privacy.private.long": "フォロワーのみ閲覧可",
|
||||
"privacy.private.short": "フォロワーのみ",
|
||||
"privacy.public.long": "誰でも閲覧可",
|
||||
"privacy.public.long": "誰でも閲覧可、全てのTL",
|
||||
"privacy.public.short": "公開",
|
||||
"privacy.unlisted.long": "誰でも閲覧可、サイレント",
|
||||
"privacy.public_unlisted.long": "誰でも閲覧可、ローカル+ホームTL",
|
||||
"privacy.public_unlisted.short": "ローカル公開",
|
||||
"privacy.unlisted.long": "誰でも閲覧可、ホームTL",
|
||||
"privacy.unlisted.short": "未収載",
|
||||
"privacy_policy.last_updated": "{date}に更新",
|
||||
"privacy_policy.title": "プライバシーポリシー",
|
||||
|
|
|
@ -218,7 +218,7 @@ const insertEmoji = (state, position, emojiData, needsSpace) => {
|
|||
};
|
||||
|
||||
const privacyPreference = (a, b) => {
|
||||
const order = ['public', 'unlisted', 'private', 'direct'];
|
||||
const order = ['public', 'public_unlisted', 'unlisted', 'private', 'direct'];
|
||||
return order[Math.max(order.indexOf(a), order.indexOf(b), 0)];
|
||||
};
|
||||
|
||||
|
|
|
@ -802,7 +802,8 @@ body > [data-popper-placement] {
|
|||
vertical-align: middle;
|
||||
object-fit: contain;
|
||||
margin: -0.2ex 0.15em 0.2ex;
|
||||
width: 16px;
|
||||
min-width: 16px;
|
||||
max-width: min(8em, 100%);
|
||||
height: 16px;
|
||||
|
||||
img {
|
||||
|
@ -878,7 +879,8 @@ body > [data-popper-placement] {
|
|||
}
|
||||
|
||||
.emojione {
|
||||
width: 20px;
|
||||
min-width: 20px;
|
||||
max-width: min(8em, 100%);
|
||||
height: 20px;
|
||||
margin: -3px 0 0;
|
||||
}
|
||||
|
@ -959,7 +961,8 @@ body > [data-popper-placement] {
|
|||
overflow-y: auto;
|
||||
|
||||
.emojione {
|
||||
width: 20px;
|
||||
min-width: 20px;
|
||||
max-width: min(8em, 100%);
|
||||
height: 20px;
|
||||
margin: -3px 0 0;
|
||||
}
|
||||
|
@ -1334,7 +1337,8 @@ body > [data-popper-placement] {
|
|||
line-height: 24px;
|
||||
|
||||
.emojione {
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
max-width: min(8em, 100%);
|
||||
height: 24px;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
|
@ -4122,6 +4126,10 @@ a.status-card.compact:hover {
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
.detailed-status__button .emoji-button {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.column-settings__outer {
|
||||
background: lighten($ui-base-color, 8%);
|
||||
padding: 15px;
|
||||
|
@ -5871,7 +5879,8 @@ a.status-card.compact:hover {
|
|||
line-height: 24px;
|
||||
|
||||
.emojione {
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
max-width: min(8em, 100%);
|
||||
height: 24px;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
|
@ -7222,7 +7231,8 @@ noscript {
|
|||
}
|
||||
|
||||
.emojione {
|
||||
width: 22px;
|
||||
min-width: 22px;
|
||||
max-width: min(8em, 100%);
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
|
|
|
@ -166,6 +166,11 @@
|
|||
.emoji-mart-category .emoji-mart-emoji {
|
||||
cursor: pointer;
|
||||
|
||||
&.emoji-mart-emoji-custom img {
|
||||
width: auto !important;
|
||||
min-width: 22px;
|
||||
}
|
||||
|
||||
span {
|
||||
z-index: 1;
|
||||
position: relative;
|
||||
|
|
|
@ -85,6 +85,13 @@
|
|||
sup {
|
||||
vertical-align: super;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.status__content__text {
|
||||
a.kmy-dangerous-link {
|
||||
color: red !important;
|
||||
}
|
||||
}
|
||||
|
||||
.reply-indicator__content {
|
||||
|
|
|
@ -299,7 +299,8 @@ a.table-action-link {
|
|||
margin-right: 10px;
|
||||
|
||||
.emojione {
|
||||
width: 32px;
|
||||
min-width: 32px;
|
||||
max-width: min(8em, 100%);
|
||||
height: 32px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,7 +36,8 @@
|
|||
font-weight: 400;
|
||||
|
||||
.emojione {
|
||||
width: 20px;
|
||||
min-width: 20px;
|
||||
max-width: min(8em, 100%);
|
||||
height: 20px;
|
||||
margin: -3px 0 0;
|
||||
margin-left: 0.075em;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue