2015-04-25 20:58:39 +08:00
|
|
|
import Model from 'flarum/model'
|
|
|
|
import stringToColor from 'flarum/utils/string-to-color';
|
|
|
|
import ItemList from 'flarum/utils/item-list';
|
|
|
|
import computed from 'flarum/utils/computed';
|
2015-05-06 09:55:19 +08:00
|
|
|
import Badge from 'flarum/components/badge';
|
2015-04-25 20:58:39 +08:00
|
|
|
|
|
|
|
class User extends Model {}
|
|
|
|
|
2015-07-04 10:54:48 +08:00
|
|
|
User.prototype.username = Model.attribute('username');
|
|
|
|
User.prototype.email = Model.attribute('email');
|
|
|
|
User.prototype.isConfirmed = Model.attribute('isConfirmed');
|
|
|
|
User.prototype.password = Model.attribute('password');
|
|
|
|
User.prototype.avatarUrl = Model.attribute('avatarUrl');
|
|
|
|
User.prototype.bio = Model.attribute('bio');
|
|
|
|
User.prototype.bioHtml = Model.attribute('bioHtml');
|
|
|
|
User.prototype.preferences = Model.attribute('preferences');
|
2015-04-25 20:58:39 +08:00
|
|
|
|
2015-07-04 10:54:48 +08:00
|
|
|
User.prototype.groups = Model.hasMany('groups');
|
2015-04-25 20:58:39 +08:00
|
|
|
|
2015-07-04 10:54:48 +08:00
|
|
|
User.prototype.joinTime = Model.attribute('joinTime', Model.transformDate);
|
|
|
|
User.prototype.lastSeenTime = Model.attribute('lastSeenTime', Model.transformDate);
|
2015-04-25 20:58:39 +08:00
|
|
|
User.prototype.online = function() { return this.lastSeenTime() > moment().subtract(5, 'minutes').toDate(); };
|
2015-07-04 10:54:48 +08:00
|
|
|
User.prototype.readTime = Model.attribute('readTime', Model.transformDate);
|
|
|
|
User.prototype.unreadNotificationsCount = Model.attribute('unreadNotificationsCount');
|
2015-04-25 20:58:39 +08:00
|
|
|
|
2015-07-04 10:54:48 +08:00
|
|
|
User.prototype.discussionsCount = Model.attribute('discussionsCount');
|
|
|
|
User.prototype.commentsCount = Model.attribute('commentsCount');
|
2015-04-25 20:58:39 +08:00
|
|
|
;
|
2015-07-04 10:54:48 +08:00
|
|
|
User.prototype.canEdit = Model.attribute('canEdit');
|
|
|
|
User.prototype.canDelete = Model.attribute('canDelete');
|
2015-04-25 20:58:39 +08:00
|
|
|
|
|
|
|
User.prototype.color = computed('username', 'avatarUrl', 'avatarColor', function(username, avatarUrl, avatarColor) {
|
|
|
|
if (avatarColor) {
|
|
|
|
return 'rgb('+avatarColor[0]+', '+avatarColor[1]+', '+avatarColor[2]+')';
|
|
|
|
} else if (avatarUrl) {
|
|
|
|
var image = new Image();
|
|
|
|
var user = this;
|
|
|
|
image.onload = function() {
|
|
|
|
var colorThief = new ColorThief();
|
|
|
|
user.avatarColor = colorThief.getColor(this);
|
|
|
|
user.freshness = new Date();
|
|
|
|
m.redraw();
|
|
|
|
};
|
|
|
|
image.src = avatarUrl;
|
|
|
|
return '';
|
|
|
|
} else {
|
|
|
|
return '#'+stringToColor(username);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2015-05-06 09:55:19 +08:00
|
|
|
User.prototype.badges = function() {
|
|
|
|
var items = new ItemList();
|
|
|
|
|
|
|
|
this.groups().forEach(group => {
|
|
|
|
if (group.id() != 3) {
|
|
|
|
items.add('group'+group.id(),
|
|
|
|
Badge.component({
|
|
|
|
label: group.nameSingular(),
|
|
|
|
icon: group.icon(),
|
|
|
|
style: {backgroundColor: group.color()}
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return items;
|
|
|
|
}
|
2015-04-25 20:58:39 +08:00
|
|
|
|
|
|
|
export default User;
|