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 |
!!! 5 |
||||||
%html |
%html |
||||||
%head |
%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 |
%title |
||||||
= "#{yield(:page_title)} - " if content_for?(:page_title) |
= "#{yield(:page_title)} - " if content_for?(:page_title) |
||||||
Mastodon |
Mastodon |
||||||
|
|
||||||
= stylesheet_link_tag 'application', media: 'all' |
= stylesheet_link_tag 'application', media: 'all' |
||||||
= csrf_meta_tags |
= csrf_meta_tags |
||||||
|
|
||||||
= yield :header_tags |
= yield :header_tags |
||||||
|
|
||||||
%body{ class: @body_classes } |
%body{ class: @body_classes } |
||||||
= content_for?(:content) ? yield(:content) : yield |
= content_for?(:content) ? yield(:content) : yield |
||||||
|
Loading…
Reference in new issue