summaryrefslogtreecommitdiff
path: root/src/web/app/desktop/scripts/update-banner.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-11-13 18:05:35 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-11-13 18:05:35 +0900
commitbc9a8283c66d7588f931d4b802f7ab1fa7aa3226 (patch)
treecac529d136737c95b1656564756da8c4ae84df32 /src/web/app/desktop/scripts/update-banner.ts
parent:v: (diff)
downloadmisskey-bc9a8283c66d7588f931d4b802f7ab1fa7aa3226.tar.gz
misskey-bc9a8283c66d7588f931d4b802f7ab1fa7aa3226.tar.bz2
misskey-bc9a8283c66d7588f931d4b802f7ab1fa7aa3226.zip
なんかもうめっちゃ変えた
Diffstat (limited to 'src/web/app/desktop/scripts/update-banner.ts')
-rw-r--r--src/web/app/desktop/scripts/update-banner.ts87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/web/app/desktop/scripts/update-banner.ts b/src/web/app/desktop/scripts/update-banner.ts
new file mode 100644
index 0000000000..23a671c44d
--- /dev/null
+++ b/src/web/app/desktop/scripts/update-banner.ts
@@ -0,0 +1,87 @@
+import * as riot from 'riot';
+import CONFIG from '../../common/scripts/config';
+import dialog from './dialog';
+import api from '../../common/scripts/api';
+
+export default (I, cb, file = null) => {
+ const fileSelected = file => {
+ const cropper = (riot as any).mount(document.body.appendChild(document.createElement('mk-crop-window')), {
+ file: file,
+ title: 'バナーとして表示する部分を選択',
+ aspectRatio: 16 / 9
+ })[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 => {
+ upload(data, iconFolder);
+ });
+ } else {
+ upload(data, iconFolder[0]);
+ }
+ });
+ });
+
+ cropper.on('skipped', () => {
+ set(file);
+ });
+ };
+
+ const upload = (data, folder) => {
+ const progress = (riot as any).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.apiUrl + '/drive/files/create', true);
+ xhr.onload = e => {
+ const file = JSON.parse((e.target as any).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', {
+ banner_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 as any).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);
+ });
+ }
+};