mirror of
https://github.com/flarum/framework.git
synced 2024-12-01 14:20:47 +08:00
a9ded36b57
- Get rid of Bootstrap (except we still rely on some JS) - Use BEM class names - Rework variables/theme config - Fix various bugs, including some on mobile The CSS is still not ideal – it needs to be cleaned up some more. But that can be a focus for after beta.
55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
import Component from 'flarum/Component';
|
|
import icon from 'flarum/helpers/icon';
|
|
import extract from 'flarum/utils/extract';
|
|
|
|
/**
|
|
* The `Button` component defines an element which, when clicked, performs an
|
|
* action. The button may have the following special props:
|
|
*
|
|
* - `icon` The name of the icon class. If specified, the button will be given a
|
|
* 'has-icon' class name.
|
|
* - `disabled` Whether or not the button is disabled. If truthy, the button
|
|
* will be given a 'disabled' class name, and any `onclick` handler will be
|
|
* removed.
|
|
*
|
|
* All other props will be assigned as attributes on the button element.
|
|
*
|
|
* Note that a Button has no default class names. This is because a Button can
|
|
* be used to represent any generic clickable control, like a menu item.
|
|
*/
|
|
export default class Button extends Component {
|
|
view() {
|
|
const attrs = Object.assign({}, this.props);
|
|
|
|
delete attrs.children;
|
|
|
|
attrs.className = (attrs.className || '');
|
|
|
|
const iconName = extract(attrs, 'icon');
|
|
if (iconName) attrs.className += ' hasIcon';
|
|
|
|
const disabled = extract(attrs, 'disabled');
|
|
if (disabled) {
|
|
attrs.className += ' disabled';
|
|
delete attrs.onclick;
|
|
}
|
|
|
|
return <button {...attrs}>{this.getButtonContent()}</button>;
|
|
}
|
|
|
|
/**
|
|
* Get the template for the button's content.
|
|
*
|
|
* @return {*}
|
|
* @protected
|
|
*/
|
|
getButtonContent() {
|
|
const iconName = this.props.icon;
|
|
|
|
return [
|
|
iconName ? icon(iconName, {className: 'Button-icon'}) : '',
|
|
this.props.children ? <span className="Button-label">{this.props.children}</span> : ''
|
|
];
|
|
}
|
|
}
|