85 lines
2.7 KiB
JavaScript
85 lines
2.7 KiB
JavaScript
/**
|
|
This controller supports actions related to updating one's avatar
|
|
|
|
@class PreferencesAvatarController
|
|
@extends Discourse.ObjectController
|
|
@namespace Discourse
|
|
@module Discourse
|
|
**/
|
|
Discourse.PreferencesAvatarController = Discourse.ObjectController.extend({
|
|
uploading: false,
|
|
uploadProgress: 0,
|
|
uploadDisabled: Em.computed.or("uploading"),
|
|
useGravatar: Em.computed.not("use_uploaded_avatar"),
|
|
useUploadedAvatar: Em.computed.alias("use_uploaded_avatar"),
|
|
|
|
toggleUseUploadedAvatar: function(toggle) {
|
|
if (this.get("use_uploaded_avatar") !== toggle) {
|
|
var controller = this;
|
|
this.set("use_uploaded_avatar", toggle);
|
|
Discourse.ajax("/users/" + this.get("username") + "/preferences/avatar/toggle", { type: 'PUT', data: { use_uploaded_avatar: toggle }})
|
|
.then(function(result) { controller.set("avatar_template", result.avatar_template); });
|
|
}
|
|
},
|
|
|
|
uploadButtonText: function() {
|
|
return this.get("uploading") ? I18n.t("user.change_avatar.uploading") : I18n.t("user.change_avatar.upload");
|
|
}.property("uploading"),
|
|
|
|
uploadAvatar: function() {
|
|
var controller = this;
|
|
var $upload = $("#avatar-input");
|
|
|
|
// do nothing if no file is selected
|
|
if (Em.isEmpty($upload.val())) { return; }
|
|
|
|
this.set("uploading", true);
|
|
|
|
// define the upload endpoint
|
|
$upload.fileupload({
|
|
url: Discourse.getURL("/users/" + this.get("username") + "/preferences/avatar"),
|
|
dataType: "json",
|
|
timeout: 20000
|
|
});
|
|
|
|
// when there is a progression for the upload
|
|
$upload.on("fileuploadprogressall", function (e, data) {
|
|
var progress = parseInt(data.loaded / data.total * 100, 10);
|
|
controller.set("uploadProgress", progress);
|
|
});
|
|
|
|
// when the upload is successful
|
|
$upload.on("fileuploaddone", function (e, data) {
|
|
// set some properties
|
|
controller.setProperties({
|
|
has_uploaded_avatar: true,
|
|
use_uploaded_avatar: true,
|
|
avatar_template: data.result.url,
|
|
uploaded_avatar_template: data.result.url
|
|
});
|
|
});
|
|
|
|
// when there has been an error with the upload
|
|
$upload.on("fileuploadfail", function (e, data) {
|
|
Discourse.Utilities.displayErrorForUpload(data);
|
|
});
|
|
|
|
// when the upload is done
|
|
$upload.on("fileuploadalways", function (e, data) {
|
|
// prevent automatic upload when selecting a file
|
|
$upload.fileupload("destroy");
|
|
$upload.off();
|
|
// clear file input
|
|
$upload.val("");
|
|
// indicate upload is done
|
|
controller.setProperties({
|
|
uploading: false,
|
|
uploadProgress: 0
|
|
});
|
|
});
|
|
|
|
// *actually* launch the upload
|
|
$("#avatar-input").fileupload("add", { fileInput: $("#avatar-input") });
|
|
}
|
|
});
|