summaryrefslogtreecommitdiff
path: root/src/web/app/desktop/scripts/update-avatar.js
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-02-18 17:56:27 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-02-18 17:56:27 +0900
commita83c19d1a59b19610de3b500fb1151628e46d472 (patch)
tree0cf527877d24e33854fc3e63b7bae644d7eb3f1f /src/web/app/desktop/scripts/update-avatar.js
parent:v: (diff)
downloadmisskey-a83c19d1a59b19610de3b500fb1151628e46d472.tar.gz
misskey-a83c19d1a59b19610de3b500fb1151628e46d472.tar.bz2
misskey-a83c19d1a59b19610de3b500fb1151628e46d472.zip
:v:
Diffstat (limited to 'src/web/app/desktop/scripts/update-avatar.js')
-rw-r--r--src/web/app/desktop/scripts/update-avatar.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/web/app/desktop/scripts/update-avatar.js b/src/web/app/desktop/scripts/update-avatar.js
new file mode 100644
index 0000000000..ad971f1b11
--- /dev/null
+++ b/src/web/app/desktop/scripts/update-avatar.js
@@ -0,0 +1,86 @@
+const riot = require('riot');
+const dialog = require('./dialog');
+const api = require('../../common/scripts/api');
+
+module.exports = (I, cb, file = null) => {
+ const fileSelected = file => {
+ const cropper = riot.mount(document.body.appendChild(document.createElement('mk-crop-window')), {
+ file: file,
+ title: 'アバターとして表示する部分を選択',
+ aspectRatio: 1 / 1
+ })[0];
+
+ cropper.on('cropped', blob => {
+ const data = new FormData();
+ data.append('i', I.token);
+ data.append('file', blob, file.name + '.cropped.png');
+
+ api(I, 'drive/folders/find', {
+ name: 'アイコン'
+ }).then(iconFolder => {
+ if (iconFolder.length === 0) {
+ api(I, 'drive/folders/create', {
+ name: 'アイコン'
+ }).then(iconFolder => {
+ uplaod(data, iconFolder);
+ });
+ } else {
+ uplaod(data, iconFolder[0]);
+ }
+ });
+ });
+
+ cropper.on('skiped', () => {
+ set(file);
+ });
+ };
+
+ const uplaod = (data, folder) => {
+ const progress = riot.mount(document.body.appendChild(document.createElement('mk-progress-dialog')), {
+ title: '新しいアバターをアップロードしています'
+ })[0];
+
+ if (folder) data.append('folder_id', folder.id);
+
+ const xhr = new XMLHttpRequest();
+ xhr.open('POST', CONFIG.api.url + '/drive/files/create', true);
+ xhr.onload = e => {
+ const file = JSON.parse(e.target.response);
+ progress.close();
+ set(file);
+ };
+
+ xhr.upload.onprogress = e => {
+ if (e.lengthComputable) progress.updateProgress(e.loaded, e.total);
+ };
+
+ xhr.send(data);
+ };
+
+ const set = file => {
+ api(I, 'i/update', {
+ avatar_id: file.id
+ }).then(i => {
+ dialog('<i class="fa fa-info-circle"></i>アバターを更新しました',
+ '新しいアバターが反映されるまで時間がかかる場合があります。',
+ [{
+ text: 'わかった'
+ }]);
+
+ if (cb) cb(i);
+ });
+ };
+
+ if (file) {
+ fileSelected(file);
+ } else {
+ const browser = riot.mount(document.body.appendChild(document.createElement('mk-select-file-from-drive-window')), {
+ multiple: false,
+ title: '<i class="fa fa-picture-o"></i>アバターにする画像を選択'
+ })[0];
+
+ browser.one('selected', file => {
+ fileSelected(file);
+ });
+ }
+};