From a541e937ca8b299092d0dc7f45d8f0b66ecc0131 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 24 Aug 2016 21:08:00 +0200 Subject: More styling for statuses --- .../javascripts/components/components/avatar.jsx | 17 +++++++ .../components/components/display_name.jsx | 22 +++++++++ .../components/components/relative_timestamp.jsx | 55 ++++++++++++++++++++++ .../javascripts/components/components/status.jsx | 23 +++++++-- 4 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 app/assets/javascripts/components/components/avatar.jsx create mode 100644 app/assets/javascripts/components/components/display_name.jsx create mode 100644 app/assets/javascripts/components/components/relative_timestamp.jsx (limited to 'app/assets/javascripts') diff --git a/app/assets/javascripts/components/components/avatar.jsx b/app/assets/javascripts/components/components/avatar.jsx new file mode 100644 index 000000000..7db3eeff7 --- /dev/null +++ b/app/assets/javascripts/components/components/avatar.jsx @@ -0,0 +1,17 @@ +const Avatar = React.createClass({ + + propTypes: { + src: React.PropTypes.string.isRequired + }, + + render () { + return ( +
+ +
+ ); + } + +}); + +export default Avatar; diff --git a/app/assets/javascripts/components/components/display_name.jsx b/app/assets/javascripts/components/components/display_name.jsx new file mode 100644 index 000000000..97db31707 --- /dev/null +++ b/app/assets/javascripts/components/components/display_name.jsx @@ -0,0 +1,22 @@ +import ImmutablePropTypes from 'react-immutable-proptypes'; + +const DisplayName = React.createClass({ + propTypes: { + account: ImmutablePropTypes.map.isRequired + }, + + render () { + var displayName = this.props.account.get('display_name', this.props.account.get('username')); + var acct = this.props.account.get('acct'); + var url = this.props.account.get('url'); + + return ( + + {displayName} {acct} + + ); + } + +}); + +export default DisplayName; diff --git a/app/assets/javascripts/components/components/relative_timestamp.jsx b/app/assets/javascripts/components/components/relative_timestamp.jsx new file mode 100644 index 000000000..3216d0a0d --- /dev/null +++ b/app/assets/javascripts/components/components/relative_timestamp.jsx @@ -0,0 +1,55 @@ +import moment from 'moment'; + +moment.updateLocale('en', { + relativeTime : { + future: "in %s", + past: "%s ago", + s: "s", + m: "a minute", + mm: "%dm", + h: "an hour", + hh: "%dh", + d: "a day", + dd: "%dd", + M: "a month", + MM: "%dm", + y: "a year", + yy: "%dy" + } +}); + +const RelativeTimestamp = React.createClass({ + getInitialState () { + return { + text: '' + }; + }, + + propTypes: { + timestamp: React.PropTypes.string.isRequired + }, + + componentWillMount () { + this._updateMomentText(); + this.interval = setInterval(this._updateMomentText, 6000); + }, + + componentWillUnmount () { + clearInterval(this.interval); + }, + + _updateMomentText () { + this.setState({ text: moment(this.props.timestamp).fromNow() }); + }, + + render () { + return ( + + {this.state.text} + + ); + } + +}); + +export default RelativeTimestamp; diff --git a/app/assets/javascripts/components/components/status.jsx b/app/assets/javascripts/components/components/status.jsx index 68c1efaad..e54bc8c04 100644 --- a/app/assets/javascripts/components/components/status.jsx +++ b/app/assets/javascripts/components/components/status.jsx @@ -1,17 +1,32 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; +import Avatar from './avatar'; +import DisplayName from './display_name'; +import RelativeTimestamp from './relative_timestamp'; const Status = React.createClass({ propTypes: { status: ImmutablePropTypes.map.isRequired }, - render: function() { + render () { var content = { __html: this.props.status.get('content') }; + var status = this.props.status; return ( -
-
{this.props.status.getIn(['account', 'username'])}
-
+
+ + +
+
+
+ +
+ + +
+ +
+
); } -- cgit