add theme
Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 25 KiB |
BIN
app/javascript/images/logos/m_logo_dark.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
app/javascript/images/logos/m_logo_light.PNG
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
app/javascript/images/rabbit_ui_conversation.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
app/javascript/images/theme/bg_dark.png
Normal file
After Width: | Height: | Size: 2.3 MiB |
BIN
app/javascript/images/theme/bg_light.png
Normal file
After Width: | Height: | Size: 927 KiB |
BIN
app/javascript/images/theme/m_logo_dark.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
app/javascript/images/theme/m_logo_light.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
app/javascript/images/theme/wordmark_dark.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
app/javascript/images/theme/wordmark_light.png
Normal file
After Width: | Height: | Size: 24 KiB |
@ -193,12 +193,13 @@ export default class Dropdown extends PureComponent {
|
||||
id: id++,
|
||||
};
|
||||
|
||||
handleClick = ({ type }) => {
|
||||
handleClick = (e) => {
|
||||
if (this.state.id === this.props.openDropdownId) {
|
||||
this.handleClose();
|
||||
} else {
|
||||
this.props.onOpen(this.state.id, this.handleItemClick, type !== 'click');
|
||||
this.props.onOpen(this.state.id, this.handleItemClick, e.type !== 'click');
|
||||
}
|
||||
e.stopPropagation();
|
||||
};
|
||||
|
||||
handleClose = () => {
|
||||
|
@ -112,9 +112,15 @@ class Poll extends ImmutablePureComponent {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
handleVote = () => {
|
||||
handleStopProp = (e) =>{
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
handleVote = (e) => {
|
||||
e.stopPropagation();
|
||||
if (this.props.disabled) {
|
||||
return;
|
||||
}
|
||||
@ -122,15 +128,17 @@ class Poll extends ImmutablePureComponent {
|
||||
this.props.onVote(Object.keys(this.state.selected));
|
||||
};
|
||||
|
||||
handleRefresh = () => {
|
||||
handleRefresh = (e) => {
|
||||
e.stopPropagation();
|
||||
if (this.props.disabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.props.refresh();
|
||||
this.props.refresh(e);
|
||||
};
|
||||
|
||||
handleReveal = () => {
|
||||
handleReveal = (e) => {
|
||||
e.stopPropagation();
|
||||
this.setState({ revealed: true });
|
||||
}
|
||||
|
||||
@ -228,8 +236,8 @@ class Poll extends ImmutablePureComponent {
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='poll'>
|
||||
<ul>
|
||||
<div className='poll' onClick={this.handleStopProp}>
|
||||
<ul >
|
||||
{poll.get('options').map((option, i) => this.renderOption(option, i, showResults))}
|
||||
</ul>
|
||||
|
||||
|
@ -249,6 +249,14 @@ class Status extends ImmutablePureComponent {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
handleStatusClick = (e) => {
|
||||
if (e.button === 0 && !(e.ctrlKey || e.metaKey) && this.context.router) {
|
||||
e.preventDefault();
|
||||
this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`+`/${this.props.status.get('id')}`)
|
||||
}
|
||||
e.stopPropagation();
|
||||
};
|
||||
handleDeployPictureInPicture = (type, mediaProps) => {
|
||||
const { deployPictureInPicture } = this.props;
|
||||
const status = this._properStatus();
|
||||
@ -392,7 +400,7 @@ class Status extends ImmutablePureComponent {
|
||||
};
|
||||
|
||||
return (
|
||||
<HotKeys handlers={minHandlers}>
|
||||
<HotKeys handlers={minHandlers} >
|
||||
<div className='status__wrapper status__wrapper--filtered focusable' tabIndex={0} ref={this.handleRef}>
|
||||
<FormattedMessage id='status.filtered' defaultMessage='Filtered' />: {matchedFilters.join(', ')}.
|
||||
{' '}
|
||||
@ -550,7 +558,7 @@ class Status extends ImmutablePureComponent {
|
||||
|
||||
return (
|
||||
<HotKeys handlers={handlers}>
|
||||
<div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), unread, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef} data-nosnippet={status.getIn(['account', 'noindex'], true) || undefined}>
|
||||
<div onClick={this.handleStatusClick} className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), unread, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef} data-nosnippet={status.getIn(['account', 'noindex'], true) || undefined}>
|
||||
{prepend}
|
||||
|
||||
<div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), 'status--in-thread': !!rootId, 'status--first-in-thread': previousId && (!connectUp || connectToRoot), muted: this.props.muted })} data-id={status.get('id')}>
|
||||
|
@ -102,7 +102,24 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
'withDismiss',
|
||||
];
|
||||
|
||||
handleReplyClick = () => {
|
||||
|
||||
// handleReplyClick = () => {
|
||||
|
||||
// if (e.button === 0 && !(e.ctrlKey || e.metaKey) && this.context.router) {
|
||||
// e.preventDefault();
|
||||
// const { signedIn } = this.context.identity;
|
||||
|
||||
// if (signedIn) {
|
||||
// this.props.onReply(this.props.status, this.context.router.history);
|
||||
// } else {
|
||||
// this.props.onInteractionModal('reply', this.props.status);
|
||||
// }
|
||||
// }
|
||||
// e.stopPropagation()
|
||||
|
||||
// };
|
||||
|
||||
handleReplyClick = e => {
|
||||
const { signedIn } = this.context.identity;
|
||||
|
||||
if (signedIn) {
|
||||
@ -110,6 +127,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
} else {
|
||||
this.props.onInteractionModal('reply', this.props.status);
|
||||
}
|
||||
e.stopPropagation();
|
||||
};
|
||||
|
||||
handleShareClick = () => {
|
||||
@ -120,7 +138,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
});
|
||||
};
|
||||
|
||||
handleFavouriteClick = () => {
|
||||
handleFavouriteClick = e => {
|
||||
const { signedIn } = this.context.identity;
|
||||
|
||||
if (signedIn) {
|
||||
@ -128,6 +146,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
} else {
|
||||
this.props.onInteractionModal('favourite', this.props.status);
|
||||
}
|
||||
e.stopPropagation();
|
||||
};
|
||||
|
||||
handleReblogClick = e => {
|
||||
@ -138,10 +157,12 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
} else {
|
||||
this.props.onInteractionModal('reblog', this.props.status);
|
||||
}
|
||||
e.stopPropagation();
|
||||
};
|
||||
|
||||
handleBookmarkClick = () => {
|
||||
handleBookmarkClick = e => {
|
||||
this.props.onBookmark(this.props.status);
|
||||
e.stopPropagation();
|
||||
};
|
||||
|
||||
handleDeleteClick = () => {
|
||||
@ -233,6 +254,11 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
this.props.onFilter();
|
||||
};
|
||||
|
||||
handleActionbarClick = (e) => {
|
||||
console.log("dd")
|
||||
e.stopPropagation();
|
||||
};
|
||||
|
||||
render () {
|
||||
const { status, relationship, intl, withDismiss, withCounters, scrollKey } = this.props;
|
||||
const { signedIn, permissions } = this.context.identity;
|
||||
|
@ -217,7 +217,7 @@ class StatusContent extends PureComponent {
|
||||
|
||||
handleSpoilerClick = (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
e.stopPropagation();
|
||||
if (this.props.onExpandedToggle) {
|
||||
// The parent manages the state
|
||||
this.props.onExpandedToggle();
|
||||
|
@ -33,13 +33,13 @@ export default class NavigationBar extends ImmutablePureComponent {
|
||||
<div className='navigation-bar__profile'>
|
||||
<span>
|
||||
<Link to={`/@${username}`}>
|
||||
<strong className='navigation-bar__profile-account'>{displayName}</strong>
|
||||
<strong className='navigation-bar__profile-account display-name'>{displayName}</strong>
|
||||
</Link>
|
||||
</span>
|
||||
|
||||
<span>
|
||||
<Link to={`/@${username}`}>
|
||||
<strong className='navigation-bar__profile-account'>@{username}</strong>
|
||||
<strong className='navigation-bar__profile-account username'>@{username}</strong>
|
||||
</Link>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -11,7 +11,7 @@ import { connect } from 'react-redux';
|
||||
|
||||
import { debounce } from 'lodash';
|
||||
|
||||
import illustration from 'mastodon/../images/elephant_ui_conversation.svg';
|
||||
import illustration from 'mastodon/../images/rabbit_ui_conversation.png';
|
||||
import { fetchAccount } from 'mastodon/actions/accounts';
|
||||
import { focusCompose } from 'mastodon/actions/compose';
|
||||
import { closeOnboarding } from 'mastodon/actions/onboarding';
|
||||
|
@ -68,6 +68,10 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||
e.stopPropagation();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
handleOpenVideo = (options) => {
|
||||
this.props.onOpenVideo(this.props.status.getIn(['media_attachments', 0]), options);
|
||||
};
|
||||
@ -296,7 +300,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||
const expanded = !status.get('hidden') || status.get('spoiler_text').length === 0;
|
||||
|
||||
return (
|
||||
<div style={outerStyle}>
|
||||
<div style={outerStyle} >
|
||||
<div ref={this.setRef} className={classNames('detailed-status', { compact })}>
|
||||
{status.get('visibility') === 'direct' && (
|
||||
<div className='status__prepend'>
|
||||
|
@ -352,6 +352,9 @@ class Status extends ImmutablePureComponent {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
handleEditClick = (status, history) => {
|
||||
this.props.dispatch(editStatus(status.get('id'), history));
|
||||
};
|
||||
|
@ -623,7 +623,7 @@
|
||||
"server_banner.about_active_users": "30일 동안 이 서버를 사용한 사람들 (월간 활성 이용자)",
|
||||
"server_banner.active_users": "활성 사용자",
|
||||
"server_banner.administered_by": "관리자:",
|
||||
"server_banner.introduction": "{title}은 {WhippyEdition}으로 운영되는 마스토돈 인스턴스입니다. {WhippyEdition}은 오리지널 캐릭터의 교류를 목적으로 하는 커뮤니티를 위해 제공되고 있습니다.",
|
||||
"server_banner.introduction": "{title}은(는) {WhippyEdition}으로 운영되는 마스토돈 인스턴스입니다. {WhippyEdition}은 오리지널 캐릭터의 교류를 목적으로 하는 커뮤니티를 위해 제공되고 있습니다.",
|
||||
"server_banner.learn_more": "더 알아보기",
|
||||
"server_banner.server_stats": "서버 통계:",
|
||||
"sign_in_banner.create_account": "계정 생성",
|
||||
|
3
app/javascript/styles/bird-ui-dark.scss
Normal file
@ -0,0 +1,3 @@
|
||||
@import 'application';
|
||||
@import 'bird-ui/layout-single-column.scss';
|
||||
@import 'bird-ui/layout-multiple-columns.scss';
|
5
app/javascript/styles/bird-ui-light.scss
Normal file
@ -0,0 +1,5 @@
|
||||
@import 'mastodon-light/variables';
|
||||
@import 'application';
|
||||
@import 'mastodon-light/diff';
|
||||
@import 'bird-ui/layout-single-column.scss';
|
||||
@import 'bird-ui/layout-multiple-columns.scss';
|
4806
app/javascript/styles/bird-ui/layout-multiple-columns.scss
Normal file
4835
app/javascript/styles/bird-ui/layout-single-column.scss
Normal file
@ -678,3 +678,11 @@ img.logo--wordmark {
|
||||
img.logo--icon {
|
||||
content: url("../images/logos/logo_light.png");
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width: $no-gap-breakpoint - 1px) {
|
||||
.ui__header__logo img.logo {
|
||||
content: url("../images/logos/m_logo_light.png");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1040,7 +1040,7 @@ body > [data-popper-placement] {
|
||||
padding: 16px;
|
||||
min-height: 54px;
|
||||
border-bottom: 1px solid lighten($ui-base-color, 8%);
|
||||
cursor: auto;
|
||||
cursor: pointer;
|
||||
|
||||
@keyframes fade {
|
||||
0% {
|
||||
@ -1059,6 +1059,7 @@ body > [data-popper-placement] {
|
||||
.video-player,
|
||||
.audio-player,
|
||||
.attachment-list {
|
||||
max-height: 500px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
@ -1340,6 +1341,7 @@ body > [data-popper-placement] {
|
||||
.media-gallery,
|
||||
.video-player,
|
||||
.audio-player {
|
||||
max-height:unset;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
@ -1657,6 +1659,7 @@ a.account__display-name {
|
||||
line-height: 22px;
|
||||
margin-bottom: 16px;
|
||||
overflow: hidden;
|
||||
width: fit-content;
|
||||
|
||||
strong,
|
||||
span {
|
||||
@ -2487,8 +2490,15 @@ $ui-header-height: 55px;
|
||||
.error-column {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
|
||||
.ui__header__logo img.logo {
|
||||
content: url("../images/logos/m_logo_dark.png");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@media screen and (max-width: $no-gap-breakpoint - 285px - 1px) {
|
||||
$sidebar-width: 55px;
|
||||
|
||||
@ -2966,7 +2976,7 @@ $ui-header-height: 55px;
|
||||
}
|
||||
|
||||
.logo {
|
||||
height: 100px;
|
||||
height: 85px;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
@ -6311,7 +6321,6 @@ a.status-card {
|
||||
box-sizing: border-box;
|
||||
display: block;
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
|
||||
&--tall {
|
||||
|
3
app/javascript/styles/theme-ui-dark.scss
Normal file
@ -0,0 +1,3 @@
|
||||
@import 'application';
|
||||
@import 'theme-ui/layout-single-column.scss';
|
||||
@import 'theme-ui/layout-multiple-columns.scss';
|
5
app/javascript/styles/theme-ui-light.scss
Normal file
@ -0,0 +1,5 @@
|
||||
@import 'mastodon-light/variables';
|
||||
@import 'application';
|
||||
@import 'mastodon-light/diff';
|
||||
@import 'theme-ui/layout-single-column.scss';
|
||||
@import 'theme-ui/layout-multiple-columns.scss';
|
4839
app/javascript/styles/theme-ui/layout-multiple-columns.scss
Normal file
4886
app/javascript/styles/theme-ui/layout-single-column.scss
Normal file
@ -1733,11 +1733,11 @@ en:
|
||||
themes:
|
||||
contrast: Mastodon (High contrast)
|
||||
default: Mastodon Bird UI (Dark)
|
||||
mastodon-bird-ui-light: Mastodon Bird UI (Light)
|
||||
bird-ui-light: Mastodon Bird UI (Light)
|
||||
bird-ui-dark: Mastodon Bird UI (dark)
|
||||
mastodon-light: Mastodon (Light)
|
||||
mastodon-dark: Mastodon (Dark)
|
||||
mastodon-bird-ui-light-vanilla: Mastodon Bird UI - vanila (Light)
|
||||
mastodon-bird-ui-dark-vanilla: Mastodon Bird UI - vanila (dark)
|
||||
theme-ui-light: Mastodon Bird UI - vanila (dark)
|
||||
time:
|
||||
formats:
|
||||
default: "%b %d, %Y, %H:%M"
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
ko:
|
||||
about:
|
||||
about_mastodon_html: '미래의 소셜 네트워크: 광고 없음, 기업 감시 없음, 윤리적 설계, 탈중앙화! 여러분만의 데이터를 Mastodon으로 소유하세요!'
|
||||
about_mastodon_html: '휘핑 에디션 :: 오리지널 캐릭터의 교류를 목적으로 하는 커뮤니티를 위해 제공되는 마스토돈 에디션.'
|
||||
contact_missing: 미설정
|
||||
contact_unavailable: 없음
|
||||
hosted_on: "%{domain}에서 호스팅 되는 마스토돈"
|
||||
@ -1701,12 +1701,12 @@ ko:
|
||||
does_not_match_previous_name: 이전 이름과 맞지 않습니다
|
||||
themes:
|
||||
contrast: 마스토돈 (고대비)
|
||||
default: 휘핑 에디션 테마 (어두움)
|
||||
mastodon-bird-ui-light: 휘핑 에디션 테마 (밝음)
|
||||
default: 휘핑 에디션 커스텀 테마 (어두움)
|
||||
theme-ui-light: 휘핑 에디션 커스텀 테마 (밝음)
|
||||
mastodon-light: 마스토돈 (밝음)
|
||||
mastodon-dark: 마스토돈 (어두움)
|
||||
mastodon-bird-ui-light-vanilla: 파란새풍 테마 (밝음)
|
||||
mastodon-bird-ui-dark-vanilla: 파란새풍 테마 (어두움)
|
||||
bird-ui-light: 파란새풍 테마 (밝음)
|
||||
bird-ui-dark: 파란새풍 테마 (어두움)
|
||||
time:
|
||||
formats:
|
||||
default: "%Y-%m-%d %H:%M"
|
||||
|
@ -1,9 +1,9 @@
|
||||
# default: styles/mastodon-bird-ui-dark.scss
|
||||
default: styles/application.scss
|
||||
# mastodon-bird-ui-light: styles/mastodon-bird-ui-light.scss
|
||||
# bird-ui-light: styles/bird-ui-light.scss
|
||||
# bird-ui-dark: styles/bird-ui-dark.scss
|
||||
# # mastodon-dark: styles/application.scss
|
||||
default: styles/theme-ui-dark.scss
|
||||
theme-ui-light : styles/theme-ui-light.scss
|
||||
bird-ui-light: styles/bird-ui-light.scss
|
||||
bird-ui-dark: styles/bird-ui-dark.scss
|
||||
mastodon-dark: styles/application.scss
|
||||
mastodon-light: styles/mastodon-light.scss
|
||||
contrast: styles/contrast.scss
|
||||
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |