From 765b0168eaaeb28550dfb698de0b6cec9f9c2113 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Wed, 10 Jun 2015 17:10:32 +0200 Subject: (Re-)implement default avatar using user initials 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. --- client/components/users/userAvatar.jade | 22 ++++++++++++++++++---- client/components/users/userAvatar.js | 21 +++++++++++++++++++++ client/components/users/userAvatar.styl | 24 +++++++++--------------- 3 files changed, 48 insertions(+), 19 deletions(-) (limited to 'client/components/users') diff --git a/client/components/users/userAvatar.jade b/client/components/users/userAvatar.jade index 9542f6c4..4c0e5c63 100644 --- a/client/components/users/userAvatar.jade +++ b/client/components/users/userAvatar.jade @@ -1,15 +1,22 @@ template(name="userAvatar") - .member.js-member(title="{{userData.profile.fullname}} ({{userData.username}})") + a.member.js-member(title="{{userData.profile.fullname}} ({{userData.username}})") if userData.profile.avatarUrl img.avatar.avatar-image(src=userData.profile.avatarUrl) + else + +userAvatarInitials(userId=userData._id) + if showStatus span.member-presence-status(class=presenceStatusClassName) span.member-type(class=memberType) +template(name="userAvatarInitials") + svg.avatar.avatar-initials(viewBox="0 0 {{viewPortWidth}} 15") + text(x="0" y="13")= initials + template(name="userPopup") .board-member-menu .mini-profile-info - +userAvatar(user=user) + +userAvatar(userId=user._id) .info h3.bottom a.js-profile(href="{{pathFor route='Profile' username=user.username}}")= user.profile.name @@ -25,8 +32,8 @@ template(name="changeAvatarPopup") ul.pop-over-list each uploadedAvatars li: a.js-select-avatar - .member: .avatar - img.avatar-image(src="{{url avatarUrlOptions}}") + .member + img.avatar.avatar-image(src="{{url avatarUrlOptions}}") | Uploaded avatar if isSelected i.fa.fa-check @@ -36,6 +43,13 @@ template(name="changeAvatarPopup") | Delete | - = original.name + li: a.js-select-initials + .member + +userAvatarInitials(userId=currentUser._id) + | Initials + if noAvatarUrl + i.fa.fa-check + p.sub-name Default avatar input.hide.js-upload-avatar-input(accept="image/*;capture=camera" type="file") button.full.js-upload-avatar i.fa.fa-upload diff --git a/client/components/users/userAvatar.js b/client/components/users/userAvatar.js index deae01cf..a02646c1 100644 --- a/client/components/users/userAvatar.js +++ b/client/components/users/userAvatar.js @@ -26,6 +26,18 @@ Template.userAvatar.helpers({ } }); +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'; @@ -49,6 +61,12 @@ BlazeComponent.extendComponent({ 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: { @@ -84,6 +102,9 @@ BlazeComponent.extendComponent({ 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); } diff --git a/client/components/users/userAvatar.styl b/client/components/users/userAvatar.styl index 1f249fcd..ed583288 100644 --- a/client/components/users/userAvatar.styl +++ b/client/components/users/userAvatar.styl @@ -5,11 +5,11 @@ avatar-radius = 50% .member border-radius: 3px display: block + position: relative float: left height: 30px width: @height margin: 0 4px 4px 0 - position: relative cursor: pointer user-select: none z-index: 1 @@ -17,26 +17,20 @@ avatar-radius = 50% border-radius: avatar-radius .avatar - height: 100% - width: @height - display: flex - align-items: center - justify-content: center overflow: hidden border-radius: avatar-radius - .avatar-initials - font-weight: bold - max-width: 100% - max-height: 100% - font-size: 14px - line-height: 200% + &.avatar-initials + height: 70% + width: @height + padding: 15% background-color: #dbdbdb color: #444444 + position: absolute - .avatar-image - max-width: 100% - max-height: 100% + &.avatar-image + height: 100% + width: @height .member-presence-status background-color: #b3b3b3 -- cgit v1.2.3-1-g7c22