From 8c9d3e4c2d5b02359f18de76c10685044995d741 Mon Sep 17 00:00:00 2001 From: YoheiZuho Date: Mon, 12 Aug 2019 17:07:21 +0000 Subject: [PATCH] =?UTF-8?q?Markdown=E3=81=AE=E5=86=8D=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/announcement_icon_button.js | 90 +++++++++++++ .../compose/components/announcements.js | 127 ++++++++++++++++++ .../containers/announcements_container.js | 11 ++ .../mastodon/features/compose/index.js | 2 + app/javascript/styles/application.scss | 1 + app/javascript/styles/astarte.scss | 59 ++++++++ app/lib/formatter_markdown.rb | 2 +- 7 files changed, 291 insertions(+), 1 deletion(-) create mode 100644 app/javascript/mastodon/components/announcement_icon_button.js create mode 100644 app/javascript/mastodon/features/compose/components/announcements.js create mode 100644 app/javascript/mastodon/features/compose/containers/announcements_container.js create mode 100644 app/javascript/styles/astarte.scss diff --git a/app/javascript/mastodon/components/announcement_icon_button.js b/app/javascript/mastodon/components/announcement_icon_button.js new file mode 100644 index 000000000..0de58c6f7 --- /dev/null +++ b/app/javascript/mastodon/components/announcement_icon_button.js @@ -0,0 +1,90 @@ +import React from 'react'; +import Motion from 'react-motion/lib/Motion'; +import spring from 'react-motion/lib/spring'; +import PropTypes from 'prop-types'; + +class IconButton extends React.PureComponent { + + static propTypes = { + className: PropTypes.string, + title: PropTypes.string.isRequired, + icon: PropTypes.string.isRequired, + onClick: PropTypes.func, + size: PropTypes.number, + active: PropTypes.bool, + style: PropTypes.object, + activeStyle: PropTypes.object, + disabled: PropTypes.bool, + inverted: PropTypes.bool, + animate: PropTypes.bool, + overlay: PropTypes.bool, + }; + + static defaultProps = { + size: 18, + active: false, + disabled: false, + animate: false, + overlay: false, + }; + + handleClick = (e) => { + e.preventDefault(); + + if (!this.props.disabled) { + this.props.onClick(e); + } + } + + render () { + const style = { + fontSize: `${this.props.size}px`, + width: `${this.props.size * 1.28571429}px`, + height: `${this.props.size * 1.28571429}px`, + lineHeight: `${this.props.size}px`, + ...this.props.style, + ...(this.props.active ? this.props.activeStyle : {}), + }; + + const classes = ['icon-button']; + + if (this.props.active) { + classes.push('active'); + } + + if (this.props.disabled) { + classes.push('disabled'); + } + + if (this.props.inverted) { + classes.push('inverted'); + } + + if (this.props.overlay) { + classes.push('overlayed'); + } + + if (this.props.className) { + classes.push(this.props.className); + } + + return ( + + {({ rotate }) => +