Improve avatar settings dialog
This commit is contained in:
+17
-4
@@ -7,13 +7,26 @@
|
||||
<h4 class="modal-title">Change your Avatar</h4>
|
||||
</div>
|
||||
<div class="modal-body settings-avatar-selector">
|
||||
<img id="previewAvatar" width="128" height="128" class="hand" ng-src="{{avatarChange.avatar.data || avatarChange.avatar.url}}" ng-click="avatarChange.showCustomAvatarSelector()"/>
|
||||
<input type="file" id="avatarFileInput" style="display: none" accept="image/png"/>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="useGravatar" ng-model="avatarChange.useGravatar" value="true_string">
|
||||
Use Gravatar
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="useGravatar" ng-model="avatarChange.useGravatar" value="">
|
||||
Use Custom Picture
|
||||
</label>
|
||||
</div>
|
||||
<div ng-hide="avatarChange.useGravatar" class="preview-avatar">
|
||||
<img id="previewAvatar" width="128" height="128" class="copy" ng-src="{{avatarChange.avatar.data || avatarChange.avatar.url}}" ng-click="avatarChange.showCustomAvatarSelector()"/>
|
||||
<input type="file" id="avatarFileInput" style="display: none" accept="image/png"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary pull-left" ng-click="avatarChange.clearAvatar()">Use Gravatar</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||
<button type="button" class="btn btn-success" ng-click="avatarChange.doChangeAvatar()" ng-disabled="avatarChange.busy"><i class="fa fa-circle-notch fa-spin" ng-show="avatarChange.busy"></i> Change</button>
|
||||
<button type="button" class="btn btn-success" ng-click="avatarChange.doChangeAvatar()" ng-disabled="avatarChange.busy || (avatarChange.useGravatarOrig === avatarChange.useGravatar && (avatarChange.useGravatar || !avatarChange.pictureChanged))"><i class="fa fa-circle-notch fa-spin" ng-show="avatarChange.busy"></i> Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+22
-22
@@ -101,6 +101,9 @@ angular.module('Application').controller('ProfileController', ['$scope', '$locat
|
||||
busy: false,
|
||||
error: {},
|
||||
avatar: null,
|
||||
useGravatar: '',
|
||||
useGravatarOrig: '',
|
||||
pictureChanged: false,
|
||||
|
||||
getBlobFromImg: function (img, callback) {
|
||||
var size = 256;
|
||||
@@ -137,9 +140,12 @@ angular.module('Application').controller('ProfileController', ['$scope', '$locat
|
||||
canvas.toBlob(callback);
|
||||
},
|
||||
|
||||
clearAvatar: function () {
|
||||
Client.clearAvatar(function (error) {
|
||||
if (error) return console.error(error);
|
||||
doChangeAvatar: function () {
|
||||
$scope.avatarChange.error.avatar = null;
|
||||
$scope.avatarChange.busy = true;
|
||||
|
||||
function done(error) {
|
||||
if (error) return console.error('Unable to change avatar.', error);
|
||||
|
||||
Client.refreshUserInfo(function (error) {
|
||||
if (error) return console.error(error);
|
||||
@@ -147,35 +153,29 @@ angular.module('Application').controller('ProfileController', ['$scope', '$locat
|
||||
$('#avatarChangeModal').modal('hide');
|
||||
$scope.avatarChange.avatarChangeReset();
|
||||
});
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
doChangeAvatar: function () {
|
||||
$scope.avatarChange.error.avatar = null;
|
||||
$scope.avatarChange.busy = true;
|
||||
|
||||
var img = document.getElementById('previewAvatar');
|
||||
$scope.avatarChange.avatar.file = $scope.avatarChange.getBlobFromImg(img, function (blob) {
|
||||
Client.changeAvatar(blob, function (error) {
|
||||
if (error) return console.error('Unable to change cloudron avatar.', error);
|
||||
|
||||
Client.refreshUserInfo(function (error) {
|
||||
if (error) return console.error(error);
|
||||
|
||||
$('#avatarChangeModal').modal('hide');
|
||||
$scope.avatarChange.avatarChangeReset();
|
||||
});
|
||||
if ($scope.avatarChange.useGravatar) {
|
||||
Client.clearAvatar(done);
|
||||
} else {
|
||||
var img = document.getElementById('previewAvatar');
|
||||
$scope.avatarChange.getBlobFromImg(img, function (blob) {
|
||||
Client.changeAvatar(blob, done);
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
setPreviewAvatar: function (avatar) {
|
||||
$scope.avatarChange.pictureChanged = true;
|
||||
$scope.avatarChange.avatar = avatar;
|
||||
},
|
||||
|
||||
avatarChangeReset: function () {
|
||||
$scope.avatarChange.error.avatar = null;
|
||||
$scope.avatarChange.avatar = {
|
||||
$scope.avatarChange.useGravatar = $scope.user.avatarUrl.indexOf('https://www.gravatar.com') === 0 ? 'true_string' : '';
|
||||
$scope.avatarChange.useGravatarOrig = $scope.avatarChange.useGravatar;
|
||||
$scope.avatarChange.pictureChanged = false;
|
||||
$scope.avatarChange.avatar = $scope.avatarChange.useGravatar ? {} : {
|
||||
url: $scope.user.avatarUrl
|
||||
};
|
||||
$scope.avatarChange.busy = false;
|
||||
|
||||
Reference in New Issue
Block a user