parent
a41c3487bd
commit
ef2b50c9ac
@ -0,0 +1,67 @@ |
||||
import ImmutablePropTypes from 'react-immutable-proptypes'; |
||||
import PureRenderMixin from 'react-addons-pure-render-mixin'; |
||||
import IconButton from './icon_button'; |
||||
import Dropdown, { DropdownTrigger, DropdownContent } from 'react-simple-dropdown'; |
||||
|
||||
const StatusActionBar = React.createClass({ |
||||
propTypes: { |
||||
status: ImmutablePropTypes.map.isRequired, |
||||
onReply: React.PropTypes.func, |
||||
onFavourite: React.PropTypes.func, |
||||
onReblog: React.PropTypes.func, |
||||
onDelete: React.PropTypes.func |
||||
}, |
||||
|
||||
mixins: [PureRenderMixin], |
||||
|
||||
handleReplyClick () { |
||||
this.props.onReply(this.props.status); |
||||
}, |
||||
|
||||
handleFavouriteClick () { |
||||
this.props.onFavourite(this.props.status); |
||||
}, |
||||
|
||||
handleReblogClick () { |
||||
this.props.onReblog(this.props.status); |
||||
}, |
||||
|
||||
handleDeleteClick(e) { |
||||
e.preventDefault(); |
||||
this.props.onDelete(this.props.status); |
||||
}, |
||||
|
||||
render () { |
||||
const { status, me } = this.props; |
||||
let menu = ''; |
||||
|
||||
if (status.getIn(['account', 'id']) === me) { |
||||
menu = ( |
||||
<ul> |
||||
<li><a href='#' onClick={this.handleDeleteClick}>Delete</a></li> |
||||
</ul> |
||||
); |
||||
} |
||||
|
||||
return ( |
||||
<div style={{ marginTop: '10px', overflow: 'hidden' }}> |
||||
<div style={{ float: 'left', marginRight: '18px'}}><IconButton title='Reply' icon='reply' onClick={this.handleReplyClick} /></div> |
||||
<div style={{ float: 'left', marginRight: '18px'}}><IconButton active={status.get('reblogged')} title='Reblog' icon='retweet' onClick={this.handleReblogClick} /></div> |
||||
<div style={{ float: 'left', marginRight: '18px'}}><IconButton active={status.get('favourited')} title='Favourite' icon='star' onClick={this.handleFavouriteClick} /></div> |
||||
|
||||
<div onClick={e => e.stopPropagation()} style={{ width: '18px', height: '18px', float: 'left' }}> |
||||
<Dropdown> |
||||
<DropdownTrigger className='icon-button' style={{ fontSize: '18px', lineHeight: '18px', width: '18px', height: '18px' }}> |
||||
<i className='fa fa-fw fa-ellipsis-h' /> |
||||
</DropdownTrigger> |
||||
|
||||
<DropdownContent>{menu}</DropdownContent> |
||||
</Dropdown> |
||||
</div> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
}); |
||||
|
||||
export default StatusActionBar; |
@ -1,12 +1,19 @@ |
||||
!!! 5 |
||||
%html |
||||
%head |
||||
%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/ |
||||
%meta{:content => 'text/html; charset=UTF-8', 'http-equiv' => 'Content-Type'}/ |
||||
%meta{:charset => 'utf-8'}/ |
||||
%meta{:name => 'viewport', :content => 'width=device-width, initial-scale=1'}/ |
||||
%meta{'http-equiv' => 'X-UA-Compatible', :content => 'IE=edge'}/ |
||||
|
||||
%title |
||||
= "#{yield(:page_title)} - " if content_for?(:page_title) |
||||
Mastodon |
||||
|
||||
= stylesheet_link_tag 'application', media: 'all' |
||||
= csrf_meta_tags |
||||
|
||||
= yield :header_tags |
||||
|
||||
%body{ class: @body_classes } |
||||
= content_for?(:content) ? yield(:content) : yield |
||||
|
Loading…
Reference in new issue