mirror of
https://github.com/wekan/wekan.git
synced 2026-02-04 07:31:47 +01:00
We use a embedded svg to scale the initials text to its container size. The user is free to overwrite its initials in the profile form.
113 lines
2.9 KiB
JavaScript
113 lines
2.9 KiB
JavaScript
Meteor.subscribe('my-avatars');
|
|
|
|
Template.userAvatar.helpers({
|
|
userData: function() {
|
|
return Users.findOne(this.userId, {
|
|
fields: {
|
|
profile: 1,
|
|
username: 1
|
|
}
|
|
});
|
|
},
|
|
|
|
memberType: function() {
|
|
var user = Users.findOne(this.userId);
|
|
return user && user.isBoardAdmin() ? 'admin' : 'normal';
|
|
},
|
|
|
|
presenceStatusClassName: function() {
|
|
var userPresence = Presences.findOne({ userId: this.userId });
|
|
if (! userPresence)
|
|
return 'disconnected';
|
|
else if (Session.equals('currentBoard', userPresence.state.currentBoardId))
|
|
return 'active';
|
|
else
|
|
return 'idle';
|
|
}
|
|
});
|
|
|
|
Template.userAvatarInitials.helpers({
|
|
initials: function() {
|
|
var user = Users.findOne(this.userId);
|
|
return user && user.getInitials();
|
|
},
|
|
|
|
viewPortWidth: function() {
|
|
var user = Users.findOne(this.userId);
|
|
return (user && user.getInitials().length || 1) * 12;
|
|
}
|
|
});
|
|
|
|
BlazeComponent.extendComponent({
|
|
template: function() {
|
|
return 'changeAvatarPopup';
|
|
},
|
|
|
|
avatarUrlOptions: function() {
|
|
return {
|
|
auth: false,
|
|
brokenIsFine: true
|
|
};
|
|
},
|
|
|
|
uploadedAvatars: function() {
|
|
return Avatars.find({userId: Meteor.userId()});
|
|
},
|
|
|
|
isSelected: function() {
|
|
var userProfile = Meteor.user().profile;
|
|
var avatarUrl = userProfile && userProfile.avatarUrl;
|
|
var currentAvatarUrl = this.currentData().url(this.avatarUrlOptions());
|
|
return avatarUrl === currentAvatarUrl;
|
|
},
|
|
|
|
noAvatarUrl: function() {
|
|
var userProfile = Meteor.user().profile;
|
|
var avatarUrl = userProfile && userProfile.avatarUrl;
|
|
return ! avatarUrl;
|
|
},
|
|
|
|
setAvatar: function(avatarUrl) {
|
|
Meteor.users.update(Meteor.userId(), {
|
|
$set: {
|
|
'profile.avatarUrl': avatarUrl
|
|
}
|
|
});
|
|
},
|
|
|
|
events: function() {
|
|
return [{
|
|
'click .js-upload-avatar': function() {
|
|
this.$('.js-upload-avatar-input').click();
|
|
},
|
|
'change .js-upload-avatar-input': function(evt) {
|
|
var self = this;
|
|
var file, fileUrl;
|
|
|
|
FS.Utility.eachFile(evt, function(f) {
|
|
file = Avatars.insert(new FS.File(f));
|
|
fileUrl = file.url(self.avatarUrlOptions());
|
|
});
|
|
var fetchAvatarInterval = window.setInterval(function() {
|
|
$.ajax({
|
|
url: fileUrl,
|
|
success: function() {
|
|
self.setAvatar(file.url(self.avatarUrlOptions()));
|
|
window.clearInterval(fetchAvatarInterval);
|
|
}
|
|
});
|
|
}, 100);
|
|
},
|
|
'click .js-select-avatar': function() {
|
|
var avatarUrl = this.currentData().url(this.avatarUrlOptions());
|
|
this.setAvatar(avatarUrl);
|
|
},
|
|
'click .js-select-initials': function() {
|
|
this.setAvatar('');
|
|
},
|
|
'click .js-delete-avatar': function() {
|
|
Avatars.remove(this.currentData()._id);
|
|
}
|
|
}];
|
|
}
|
|
}).register('changeAvatarPopup');
|