1
0
mirror of https://github.com/flarum/core.git synced 2025-08-21 23:56:33 +02:00

Compare commits

...

6 Commits

Author SHA1 Message Date
David Wheatley
2e57891e4d Update Button.less 2021-10-28 15:20:59 +01:00
David Wheatley
b614373a43 Apply suggestions from code review 2021-10-17 01:06:09 +01:00
David Wheatley
11a827fdb5 Remove focus removal from PR 2021-09-20 22:49:57 +01:00
David Wheatley
fb98050dea Merge branch 'master' into dw/3020-convert-link-to-button 2021-09-20 22:46:42 +01:00
David Wheatley
8d7ca415a5 Don't use box shadow mixin 2021-08-12 18:23:23 +02:00
David Wheatley
4eb1928b02 Replace dead links with buttons 2021-08-12 18:23:08 +02:00
7 changed files with 89 additions and 30 deletions

View File

@@ -107,9 +107,13 @@ export default class DiscussionListItem extends Component {
text={app.translator.trans('core.forum.discussion_list.started_text', { user, ago: humanTime(discussion.createdAt()) })} text={app.translator.trans('core.forum.discussion_list.started_text', { user, ago: humanTime(discussion.createdAt()) })}
position="right" position="right"
> >
<Link className="DiscussionListItem-author" href={user ? app.route.user(user) : '#'}> {user ? (
<Link className="DiscussionListItem-author" href={app.route.user(user)}>
{avatar(user, { title: '' })} {avatar(user, { title: '' })}
</Link> </Link>
) : (
<span className="DiscussionListItem-author">{avatar(user, { title: '' })}</span>
)}
</Tooltip> </Tooltip>
<ul className="DiscussionListItem-badges badges">{listItems(discussion.badges().toArray())}</ul> <ul className="DiscussionListItem-badges badges">{listItems(discussion.badges().toArray())}</ul>

View File

@@ -125,11 +125,17 @@ export default class LogInModal extends Modal {
footer() { footer() {
return [ return [
<p className="LogInModal-forgotPassword"> <p className="LogInModal-forgotPassword">
<a onclick={this.forgotPassword.bind(this)}>{app.translator.trans('core.forum.log_in.forgot_password_link')}</a> <Button class="Button Button--reset" onclick={this.forgotPassword.bind(this)}>
{app.translator.trans('core.forum.log_in.forgot_password_link')}
</Button>
</p>, </p>,
app.forum.attribute('allowSignUp') ? ( app.forum.attribute('allowSignUp') ? (
<p className="LogInModal-signUp">{app.translator.trans('core.forum.log_in.sign_up_text', { a: <a onclick={this.signUp.bind(this)} /> })}</p> <p className="LogInModal-signUp">
{app.translator.trans('core.forum.log_in.sign_up_text', {
a: <Button class="Button Button--reset" onclick={this.signUp.bind(this)} />,
})}
</p>
) : ( ) : (
'' ''
), ),

View File

@@ -2,6 +2,7 @@ import app from '../../forum/app';
import Component from '../../common/Component'; import Component from '../../common/Component';
import humanTime from '../../common/helpers/humanTime'; import humanTime from '../../common/helpers/humanTime';
import fullTime from '../../common/helpers/fullTime'; import fullTime from '../../common/helpers/fullTime';
import Button from '../../common/components/Button';
/** /**
* The `PostMeta` component displays the time of a post, and when clicked, shows * The `PostMeta` component displays the time of a post, and when clicked, shows
@@ -29,9 +30,9 @@ export default class PostMeta extends Component {
return ( return (
<div className="Dropdown PostMeta"> <div className="Dropdown PostMeta">
<a className="Dropdown-toggle" onclick={selectPermalink} data-toggle="dropdown"> <Button className="Button Button--reset Dropdown-toggle" onclick={selectPermalink} data-toggle="dropdown">
{humanTime(time)} {humanTime(time)}
</a> </Button>
<div className="Dropdown-menu dropdown-menu"> <div className="Dropdown-menu dropdown-menu">
<span className="PostMeta-number">{app.translator.trans('core.forum.post.number_tooltip', { number: post.number() })}</span>{' '} <span className="PostMeta-number">{app.translator.trans('core.forum.post.number_tooltip', { number: post.number() })}</span>{' '}

View File

@@ -1,5 +1,6 @@
import app from '../../forum/app'; import app from '../../forum/app';
import Component from '../../common/Component'; import Component from '../../common/Component';
import Button from '../../common/components/Button';
import icon from '../../common/helpers/icon'; import icon from '../../common/helpers/icon';
import formatNumber from '../../common/utils/formatNumber'; import formatNumber from '../../common/utils/formatNumber';
import ScrollListener from '../../common/utils/ScrollListener'; import ScrollListener from '../../common/utils/ScrollListener';
@@ -62,9 +63,9 @@ export default class PostStreamScrubber extends Component {
<div className="Dropdown-menu dropdown-menu"> <div className="Dropdown-menu dropdown-menu">
<div className="Scrubber"> <div className="Scrubber">
<a className="Scrubber-first" onclick={this.goToFirst.bind(this)}> <Button className="Button Button--reset Scrubber-first" onclick={this.goToFirst.bind(this)}>
{icon('fas fa-angle-double-up')} {app.translator.trans('core.forum.post_scrubber.original_post_link')} {icon('fas fa-angle-double-up')} {app.translator.trans('core.forum.post_scrubber.original_post_link')}
</a> </Button>
<div className="Scrubber-scrollbar"> <div className="Scrubber-scrollbar">
<div className="Scrubber-before" /> <div className="Scrubber-before" />
@@ -82,9 +83,9 @@ export default class PostStreamScrubber extends Component {
</div> </div>
</div> </div>
<a className="Scrubber-last" onclick={this.goToLast.bind(this)}> <Button className="Button Button--reset Scrubber-last" onclick={this.goToLast.bind(this)}>
{icon('fas fa-angle-double-down')} {app.translator.trans('core.forum.post_scrubber.now_link')} {icon('fas fa-angle-double-down')} {app.translator.trans('core.forum.post_scrubber.now_link')}
</a> </Button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -24,21 +24,21 @@ export default class SignUpModal extends Modal {
/** /**
* The value of the username input. * The value of the username input.
* *
* @type {Function} * @type {Stream<string>}
*/ */
this.username = Stream(this.attrs.username || ''); this.username = Stream(this.attrs.username || '');
/** /**
* The value of the email input. * The value of the email input.
* *
* @type {Function} * @type {Stream<string>}
*/ */
this.email = Stream(this.attrs.email || ''); this.email = Stream(this.attrs.email || '');
/** /**
* The value of the password input. * The value of the password input.
* *
* @type {Function} * @type {Stream<string>}
*/ */
this.password = Stream(this.attrs.password || ''); this.password = Stream(this.attrs.password || '');
} }
@@ -128,7 +128,9 @@ export default class SignUpModal extends Modal {
footer() { footer() {
return [ return [
<p className="SignUpModal-logIn">{app.translator.trans('core.forum.sign_up.log_in_text', { a: <a onclick={this.logIn.bind(this)} /> })}</p>, <p className="SignUpModal-logIn">
{app.translator.trans('core.forum.sign_up.log_in_text', { a: <Button class="Button Button--reset" onclick={this.logIn.bind(this)} /> })}
</p>,
]; ];
} }

View File

@@ -63,7 +63,8 @@
&:active, &:active,
&.active, &.active,
.open > &.Dropdown-toggle { .open > &.Dropdown-toggle {
.box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125)); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
outline: none;
} }
&.disabled, &.disabled,
@@ -117,35 +118,57 @@
} }
} }
.Button--square { .Button--square {
padding-left: 9px; padding-left: 9px;
padding-right: 9px; padding-right: 9px;
} }
.Button--rounded { .Button--rounded {
border-radius: 18px; border-radius: 18px;
} }
.Button--flat { .Button--flat {
background: transparent; background: transparent;
border-radius: 18px; border-radius: 18px;
} }
.Button--link {
background: transparent !important;
&:hover { .Button--link {
background: transparent !important; color: @control-color;
color: @link-color; background: unset !important;
}
&:active, &:active,
&.active, &:hover,
&:focus, &:focus,
&.focus,
.open > &.Dropdown-toggle { .open > &.Dropdown-toggle {
background: transparent !important;
box-shadow: none;
color: @link-color; color: @link-color;
box-shadow: none;
background: unset !important;
} }
} }
.Button--reset {
padding: 0;
margin: 0;
display: inline;
text-align: unset;
color: @link-color;
background: none;
vertical-align: unset;
white-space: unset;
line-height: unset;
.user-select(auto);
width: auto !important;
&:active,
&:hover,
&:focus,
.open > &.Dropdown-toggle {
color: @link-color;
background: unset !important;
box-shadow: none;
}
}
.Button--text { .Button--text {
background: transparent !important; background: transparent !important;
padding: 0; padding: 0;
@@ -161,6 +184,7 @@
box-shadow: none; box-shadow: none;
} }
} }
.Button--primary { .Button--primary {
.Button--color(@body-bg, @primary-color, 'button-primary'); .Button--color(@body-bg, @primary-color, 'button-primary');
font-weight: bold; font-weight: bold;
@@ -171,9 +195,11 @@
display: none; display: none;
} }
} }
.Button--danger { .Button--danger {
.Button--color(@control-danger-color, @control-danger-bg, 'control-danger'); .Button--color(@control-danger-color, @control-danger-bg, 'control-danger');
} }
.Button--more { .Button--more {
padding: 2px 4px; padding: 2px 4px;
line-height: 1; line-height: 1;
@@ -182,6 +208,7 @@
margin: 0; margin: 0;
} }
} }
.Button--block { .Button--block {
display: block; display: block;
width: 100%; width: 100%;
@@ -193,6 +220,7 @@
margin-top: 5px; margin-top: 5px;
} }
} }
// Little round icon buttons // Little round icon buttons
.Button--icon { .Button--icon {
width: 36px; width: 36px;
@@ -208,6 +236,7 @@
margin: 0; margin: 0;
} }
} }
.SessionDropdown .Dropdown-toggle { .SessionDropdown .Dropdown-toggle {
border-radius: 18px; border-radius: 18px;
@@ -216,16 +245,20 @@
.Avatar--size(24px); .Avatar--size(24px);
} }
} }
.Button-icon { .Button-icon {
margin-right: 7px; margin-right: 7px;
} }
.Button-icon, .Button-icon,
.Button-caret { .Button-caret {
font-size: 14px; font-size: 14px;
} }
.Button-caret { .Button-caret {
margin-left: 7px; margin-left: 7px;
} }
.Button-badge { .Button-badge {
font-size: 12px; font-size: 12px;
font-weight: bold; font-weight: bold;

View File

@@ -7,11 +7,17 @@
font-size: 14px; font-size: 14px;
margin-right: 2px; margin-right: 2px;
} }
&:hover, &:focus { &:hover,
&:focus {
text-decoration: none; text-decoration: none;
color: @link-color; color: @link-color;
} }
} }
&-first,
&-last {
color: @control-color;
}
} }
.Scrubber-scrollbar { .Scrubber-scrollbar {
margin: 8px 0 8px 3px; margin: 8px 0 8px 3px;
@@ -21,14 +27,20 @@
cursor: pointer; cursor: pointer;
.user-select(none); .user-select(none);
} }
.Scrubber-before, .Scrubber-after { .Scrubber-before,
.Scrubber-after {
border-left: 1px solid @control-bg; border-left: 1px solid @control-bg;
} }
.Scrubber-unread { .Scrubber-unread {
position: absolute; position: absolute;
border-left: 1px solid lighten(@muted-color, 10%); border-left: 1px solid lighten(@muted-color, 10%);
width: 100%; width: 100%;
background-image: linear-gradient(to right, @control-bg, fade(@control-bg, 0) 10px, fade(@control-bg, 0)); background-image: linear-gradient(
to right,
@control-bg,
fade(@control-bg, 0) 10px,
fade(@control-bg, 0)
);
display: flex; display: flex;
align-items: center; align-items: center;
color: @muted-color; color: @muted-color;