mirror of
https://github.com/flarum/core.git
synced 2025-10-13 07:54:25 +02:00
74 lines
2.3 KiB
JavaScript
74 lines
2.3 KiB
JavaScript
import Component from 'flarum/component';
|
|
import humanTime from 'flarum/utils/human-time';
|
|
import ItemList from 'flarum/utils/item-list';
|
|
import avatar from 'flarum/helpers/avatar';
|
|
import username from 'flarum/helpers/username';
|
|
import icon from 'flarum/helpers/icon';
|
|
import DropdownButton from 'flarum/components/dropdown-button';
|
|
import ActionButton from 'flarum/components/action-button';
|
|
import UserBio from 'flarum/components/user-bio';
|
|
import AvatarEditor from 'flarum/components/avatar-editor';
|
|
import listItems from 'flarum/helpers/list-items';
|
|
|
|
export default class UserCard extends Component {
|
|
view() {
|
|
var user = this.props.user;
|
|
var controls = this.controlItems().toArray();
|
|
|
|
return m('div.user-card', {className: this.props.className, style: 'background-color: '+user.color()}, [
|
|
m('div.darken-overlay'),
|
|
m('div.container', [
|
|
controls.length ? DropdownButton.component({
|
|
items: controls,
|
|
className: 'contextual-controls',
|
|
menuClass: 'pull-right',
|
|
buttonClass: this.props.controlsButtonClass
|
|
}) : '',
|
|
m('div.user-profile', [
|
|
m('h2.user-identity', this.props.editable
|
|
? [AvatarEditor.component({user, className: 'user-avatar'}), username(user)]
|
|
: m('a', {href: app.route('user', {username: user.username()}), config: m.route}, [
|
|
avatar(user, {className: 'user-avatar'}),
|
|
username(user)
|
|
])
|
|
),
|
|
m('ul.user-badges.badges', listItems(user.badges().toArray())),
|
|
m('ul.user-info', listItems(this.infoItems().toArray()))
|
|
])
|
|
])
|
|
]);
|
|
}
|
|
|
|
controlItems() {
|
|
var items = new ItemList();
|
|
|
|
return items;
|
|
}
|
|
|
|
infoItems() {
|
|
var items = new ItemList();
|
|
var user = this.props.user;
|
|
var online = user.online();
|
|
|
|
items.add('bio',
|
|
UserBio.component({
|
|
user,
|
|
editable: this.props.editable,
|
|
wrapperClass: 'block-item'
|
|
})
|
|
);
|
|
|
|
if (user.lastSeenTime()) {
|
|
items.add('lastSeen',
|
|
m('span.user-last-seen', {className: online ? 'online' : ''}, online
|
|
? [icon('circle'), ' Online']
|
|
: [icon('clock-o'), ' ', humanTime(user.lastSeenTime())])
|
|
);
|
|
}
|
|
|
|
items.add('joined', ['Joined ', humanTime(user.joinTime())]);
|
|
|
|
return items;
|
|
}
|
|
}
|