mirror of
https://github.com/flarum/framework.git
synced 2025-04-02 23:19:04 +08:00
64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
import Component from 'flarum/component';
|
|
import UserCard from 'flarum/components/user-card';
|
|
import avatar from 'flarum/helpers/avatar';
|
|
import username from 'flarum/helpers/username';
|
|
import listItems from 'flarum/helpers/list-items';
|
|
|
|
/**
|
|
Component for the username/avatar in a post header.
|
|
*/
|
|
export default class PostHeaderUser extends Component {
|
|
constructor(props) {
|
|
super(props);
|
|
|
|
this.showCard = m.prop(false);
|
|
}
|
|
|
|
view() {
|
|
var post = this.props.post;
|
|
var user = post.user();
|
|
|
|
return m('div.post-user', {config: this.onload.bind(this)}, [
|
|
m('h3',
|
|
user ? [
|
|
m('a', {href: app.route('user', {username: user.username()}), config: m.route}, [
|
|
avatar(user),
|
|
username(user)
|
|
]),
|
|
m('ul.badges', listItems(user.badges().toArray()))
|
|
] : [
|
|
avatar(),
|
|
username()
|
|
]
|
|
),
|
|
user && this.showCard()
|
|
? UserCard.component({user, className: 'user-card-popover fade', controlsButtonClass: 'btn btn-default btn-icon btn-sm btn-naked'})
|
|
: ''
|
|
]);
|
|
}
|
|
|
|
onload(element, isInitialized) {
|
|
if (isInitialized) { return; }
|
|
|
|
this.element(element);
|
|
|
|
var component = this;
|
|
var timeout;
|
|
this.$().bind('mouseover', '> a, .user-card', function() {
|
|
clearTimeout(timeout);
|
|
timeout = setTimeout(function() {
|
|
component.showCard(true);
|
|
m.redraw();
|
|
setTimeout(() => component.$('.user-card').addClass('in'));
|
|
}, 250);
|
|
}).bind('mouseout', '> a, .user-card', function() {
|
|
clearTimeout(timeout);
|
|
timeout = setTimeout(function() {
|
|
component.$('.user-card').removeClass('in').one('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function() {
|
|
component.showCard(false);
|
|
});
|
|
}, 250);
|
|
});
|
|
}
|
|
}
|