about summary refs log tree commit diff
path: root/app/javascript/mastodon/components/button.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/javascript/mastodon/components/button.js')
-rw-r--r--app/javascript/mastodon/components/button.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/app/javascript/mastodon/components/button.js b/app/javascript/mastodon/components/button.js
new file mode 100644
index 000000000..1063e0289
--- /dev/null
+++ b/app/javascript/mastodon/components/button.js
@@ -0,0 +1,50 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+class Button extends React.PureComponent {
+
+  constructor (props, context) {
+    super(props, context);
+    this.handleClick = this.handleClick.bind(this);
+  }
+
+  handleClick (e) {
+    if (!this.props.disabled) {
+      this.props.onClick();
+    }
+  }
+
+  render () {
+    const style = {
+      display: this.props.block ? 'block' : 'inline-block',
+      width: this.props.block ? '100%' : 'auto',
+      padding: `0 ${this.props.size / 2.25}px`,
+      height: `${this.props.size}px`,
+      lineHeight: `${this.props.size}px`
+    };
+
+    return (
+      <button className={`button ${this.props.secondary ? 'button-secondary' : ''}`} disabled={this.props.disabled} onClick={this.handleClick} style={{ ...style, ...this.props.style }}>
+        {this.props.text || this.props.children}
+      </button>
+    );
+  }
+
+}
+
+Button.propTypes = {
+  text: PropTypes.node,
+  onClick: PropTypes.func,
+  disabled: PropTypes.bool,
+  block: PropTypes.bool,
+  secondary: PropTypes.bool,
+  size: PropTypes.number,
+  style: PropTypes.object,
+  children: PropTypes.node
+};
+
+Button.defaultProps = {
+  size: 36
+};
+
+export default Button;