From 90cf0d32b59fcf66d08b9a697fa939a8a112c211 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Thu, 2 May 2019 18:48:48 +0900
Subject: [PATCH 01/13] Update README.md [AUTOGEN] (#4827)

---
 README.md | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 1fae71df4e..bd4f0a045e 100644
--- a/README.md
+++ b/README.md
@@ -121,7 +121,6 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1.png?token-time=2145916800&token-hash=FMV7cPKBD1TU2WTbl1jg6AcdKSvTb2BSFcDhgc-EO8w%3D" alt="gutfuckllc" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1.png?token-time=2145916800&token-hash=9nEQje_eMvUjq9a7L3uBqW-MQbS-rRMaMgd7UYVoFNM%3D" alt="mydarkstar" width="100"></td>
 <td><img src="https://c8.patreon.com/2/200/12718187" alt="Peter G." width="100"></td>
-<td><img src="https://c8.patreon.com/2/200/18833336" alt="itiradi" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1.jpe?token-time=2145916800&token-hash=UQRWf01TwHDV4Cls1K0YAOAjM29ssif7hLVq0ESQ0hs%3D" alt="nemu" width="100"></td>
 <td><img src="https://c8.patreon.com/2/200/17866454" alt="sikyosyounin" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3.png?token-time=2145916800&token-hash=KjfQL8nf3AIf6WqzLshBYAyX44piAqOAZiYXgZS_H6A%3D" alt="YUKIMOCHI" width="100"></td>
@@ -132,7 +131,6 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 <td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
 <td><a href="https://www.patreon.com/mydarkstar">mydarkstar</a></td>
 <td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
-<td><a href="https://www.patreon.com/user?u=18833336">itiradi</a></td>
 <td><a href="https://www.patreon.com/user?u=13039004">nemu</a></td>
 <td><a href="https://www.patreon.com/user?u=17866454">sikyosyounin</a></td>
 <td><a href="https://www.patreon.com/yukimochi">YUKIMOCHI</a></td>
@@ -167,7 +165,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
 </tr></table>
 
-**Last updated:** Wed, 24 Apr 2019 05:56:07 UTC
+**Last updated:** Wed, 01 May 2019 10:33:06 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From 7c1bc1d6bc607eebf7bbc20324833ac2b349a81b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Thu, 2 May 2019 19:44:59 +0900
Subject: [PATCH 02/13] Update README.md [AUTOGEN] (#4832)

---
 README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index bd4f0a045e..97667d1ac0 100644
--- a/README.md
+++ b/README.md
@@ -140,32 +140,32 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 </tr></table>
 <table><tr>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17880724/311738c8a48f4a6b9443c2445a75adde/1.jpe?token-time=2145916800&token-hash=CPxGQhKIlEaa6WUcgbyHixyKEhakiw9RFdOhsIJBQ_o%3D" alt="takimura" width="100"></td>
-<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17195955/be45e5e14c3e48b2bee0456c84e19df4/4.jpe?token-time=2145916800&token-hash=UslrPVM-8TXOe8AapuNiaFYjcIJgPNcU-fKpGbfGJNI%3D" alt="Damillora" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/16900731/83884b38afc74d4cbe83c30a13b10edd/1.png?token-time=2145916800&token-hash=R5Tog8RWg0rguRoCIoir3lThokrdPvs8Utfikhc0nhY%3D" alt="Atsuko Tominaga" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/3.png?token-time=2145916800&token-hash=FTm3WVom4dJ9NwWMU4OpCL_8Yc13WiwEbKrDPyTZTPs%3D" alt="natalie" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1.jpe?token-time=2145916800&token-hash=EWxXhVbZYH7KB4IDT3joc8TbIg8zPO40x1r5IDn3R7c%3D" alt="Hiratake" width="100"></td>
+<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/2384390/5681180e1efb46a8b28e0e8d4c8b9037/1.jpg?token-time=2145916800&token-hash=SJcMy-Q1BcS940-LFUVOMfR7-5SgrzsEQGhYb3yowFk%3D" alt="CG" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18072312/98e894d960314fa7bc236a72a39488fe/1.jpe?token-time=2145916800&token-hash=qA8j97lIZNc-74AuZ0p4F3ms6sKPeKjtNt2vEuwpsyo%3D" alt="Hekovic" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1.jpeg?token-time=2145916800&token-hash=L55UhJ0rcuNAH3w_ryeeGN4hC6taoOixyAhraEi0bzw%3D" alt="dansup" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1.jpeg?token-time=2145916800&token-hash=d8jBQLMOHD87KtXs5C9fk1o58DMF73pQ-dYH3uZJPBE%3D" alt="Gargron" width="100"></td>
-<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1.png?token-time=2145916800&token-hash=hBayGfOmQH3kRMdNnDe4oCZD_9fsJWSt29xXR3KRMVk%3D" alt="Nokotaro Takeda" width="100"></td>
 </tr><tr>
 <td><a href="https://www.patreon.com/takimura">takimura</a></td>
-<td><a href="https://www.patreon.com/damillora">Damillora</a></td>
 <td><a href="https://www.patreon.com/user?u=16900731">Atsuko Tominaga</a></td>
 <td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
 <td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
+<td><a href="https://www.patreon.com/Corset">CG</a></td>
 <td><a href="https://www.patreon.com/hekovic">Hekovic</a></td>
 <td><a href="https://www.patreon.com/dansup">dansup</a></td>
 <td><a href="https://www.patreon.com/mastodon">Gargron</a></td>
-<td><a href="https://www.patreon.com/takenoko">Nokotaro Takeda</a></td>
 </tr></table>
 <table><tr>
+<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1.png?token-time=2145916800&token-hash=hBayGfOmQH3kRMdNnDe4oCZD_9fsJWSt29xXR3KRMVk%3D" alt="Nokotaro Takeda" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1.jpeg?token-time=2145916800&token-hash=vGe7wXGqmA8Q7m-kDNb6fyGdwk-Dxk4F-ut8ZZu51RM%3D" alt="Takashi Shibuya" width="100"></td>
 </tr><tr>
+<td><a href="https://www.patreon.com/takenoko">Nokotaro Takeda</a></td>
 <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
 </tr></table>
 
-**Last updated:** Wed, 01 May 2019 10:33:06 UTC
+**Last updated:** Thu, 02 May 2019 09:49:12 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From 289c76a8020477d0361bdc5b5dadc06b2df75a9a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 3 May 2019 08:22:44 +0900
Subject: [PATCH 03/13] Disable ServiceWorker

---
 src/client/app/mios.ts |  7 ++++---
 src/client/app/sw.js   | 36 ------------------------------------
 2 files changed, 4 insertions(+), 39 deletions(-)

diff --git a/src/client/app/mios.ts b/src/client/app/mios.ts
index 191b72e5bf..3ebee35804 100644
--- a/src/client/app/mios.ts
+++ b/src/client/app/mios.ts
@@ -173,9 +173,10 @@ export default class MiOS extends EventEmitter {
 
 			// Init service worker
 			if (this.shouldRegisterSw) {
-				this.getMeta().then(data => {
-					this.registerSw(data.swPublickey);
-				});
+				// #4813
+				//this.getMeta().then(data => {
+				//	this.registerSw(data.swPublickey);
+				//});
 			}
 		};
 
diff --git a/src/client/app/sw.js b/src/client/app/sw.js
index ccf6dc818e..92f2ac8284 100644
--- a/src/client/app/sw.js
+++ b/src/client/app/sw.js
@@ -3,12 +3,6 @@
  */
 
 import composeNotification from './common/scripts/compose-notification';
-import { erase } from '../../prelude/array';
-
-// キャッシュするリソース
-const cachee = [
-	'/'
-];
 
 // インストールされたとき
 self.addEventListener('install', ev => {
@@ -16,31 +10,9 @@ self.addEventListener('install', ev => {
 
 	ev.waitUntil(Promise.all([
 		self.skipWaiting(), // Force activate
-		caches.open(_VERSION_).then(cache => cache.addAll(cachee)) // Cache
 	]));
 });
 
-// アクティベートされたとき
-self.addEventListener('activate', ev => {
-	// Clean up old caches
-	ev.waitUntil(
-		caches.keys().then(keys => Promise.all(
-			erase(_VERSION_, keys)
-				.map(key => caches.delete(key))
-		))
-	);
-});
-
-// リクエストが発生したとき
-self.addEventListener('fetch', ev => {
-	ev.respondWith(
-		// キャッシュがあるか確認してあればそれを返す
-		caches.match(ev.request).then(response =>
-			response || fetch(ev.request)
-		)
-	);
-});
-
 // プッシュ通知を受け取ったとき
 self.addEventListener('push', ev => {
 	// クライアント取得
@@ -59,11 +31,3 @@ self.addEventListener('push', ev => {
 		});
 	}));
 });
-
-self.addEventListener('message', ev => {
-	if (ev.data == 'clear') {
-		caches.keys().then(keys => {
-			for (const key of keys) caches.delete(key);
-		});
-	}
-});

From 5553c3fb179b32550fb5e202b009c58fbb4ad8ac Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 3 May 2019 08:27:46 +0900
Subject: [PATCH 04/13] Improve usability

---
 .../page-editor/page-editor.container.vue         | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/client/app/common/views/components/page-editor/page-editor.container.vue b/src/client/app/common/views/components/page-editor/page-editor.container.vue
index 4127cd39e0..a3a501afb4 100644
--- a/src/client/app/common/views/components/page-editor/page-editor.container.vue
+++ b/src/client/app/common/views/components/page-editor/page-editor.container.vue
@@ -1,12 +1,15 @@
 <template>
-<div class="cpjygsrt" :class="{ error: error != null, warn: warn != null, draggable }">
-	<header class="drag-handle">
+<div class="cpjygsrt" :class="{ error: error != null, warn: warn != null }">
+	<header>
 		<div class="title"><slot name="header"></slot></div>
 		<div class="buttons">
 			<slot name="func"></slot>
 			<button v-if="removable" @click="remove()">
 				<fa :icon="faTrashAlt"/>
 			</button>
+			<button v-if="draggable" class="drag-handle">
+				<fa :icon="faBars"/>
+			</button>
 			<button @click="toggleContent(!showBody)">
 				<template v-if="showBody"><fa icon="angle-up"/></template>
 				<template v-else><fa icon="angle-down"/></template>
@@ -23,6 +26,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import { faBars } from '@fortawesome/free-solid-svg-icons';
 import { faTrashAlt } from '@fortawesome/free-regular-svg-icons';
 import i18n from '../../../../i18n';
 
@@ -54,7 +58,7 @@ export default Vue.extend({
 	data() {
 		return {
 			showBody: this.expanded,
-			faTrashAlt
+			faTrashAlt, faBars
 		};
 	},
 	methods: {
@@ -124,9 +128,8 @@ export default Vue.extend({
 				&:active
 					color var(--faceTextButtonActive)
 
-	&.draggable
-		> header
-			cursor move
+			.drag-handle
+				cursor move
 
 	> .warn
 		color #b19e49

From 55e6cae2401fe9e9dfc1d663995c0fee35753d18 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 3 May 2019 09:16:31 +0900
Subject: [PATCH 05/13] Fix #4834

---
 src/services/drive/add-file.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index 4cb36adbfc..c67ee475a8 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -393,6 +393,8 @@ export default async function(
 
 		if (isLink) {
 			file.url = url;
+			file.thumbnailUrl = url;
+			file.webpublicUrl = url;
 		}
 	}
 

From 8367c7dd496f47289c2be7ae8ed659f04c512462 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Fri, 3 May 2019 14:32:09 +0900
Subject: [PATCH 06/13] Update README.md [AUTOGEN] (#4837)

---
 README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 97667d1ac0..8fab1cd43a 100644
--- a/README.md
+++ b/README.md
@@ -140,6 +140,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 </tr></table>
 <table><tr>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17880724/311738c8a48f4a6b9443c2445a75adde/1.jpe?token-time=2145916800&token-hash=CPxGQhKIlEaa6WUcgbyHixyKEhakiw9RFdOhsIJBQ_o%3D" alt="takimura" width="100"></td>
+<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17195955/be45e5e14c3e48b2bee0456c84e19df4/4.jpe?token-time=2145916800&token-hash=UslrPVM-8TXOe8AapuNiaFYjcIJgPNcU-fKpGbfGJNI%3D" alt="Damillora" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/16900731/83884b38afc74d4cbe83c30a13b10edd/1.png?token-time=2145916800&token-hash=R5Tog8RWg0rguRoCIoir3lThokrdPvs8Utfikhc0nhY%3D" alt="Atsuko Tominaga" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/3.png?token-time=2145916800&token-hash=FTm3WVom4dJ9NwWMU4OpCL_8Yc13WiwEbKrDPyTZTPs%3D" alt="natalie" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1.jpe?token-time=2145916800&token-hash=EWxXhVbZYH7KB4IDT3joc8TbIg8zPO40x1r5IDn3R7c%3D" alt="Hiratake" width="100"></td>
@@ -149,6 +150,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1.jpeg?token-time=2145916800&token-hash=d8jBQLMOHD87KtXs5C9fk1o58DMF73pQ-dYH3uZJPBE%3D" alt="Gargron" width="100"></td>
 </tr><tr>
 <td><a href="https://www.patreon.com/takimura">takimura</a></td>
+<td><a href="https://www.patreon.com/damillora">Damillora</a></td>
 <td><a href="https://www.patreon.com/user?u=16900731">Atsuko Tominaga</a></td>
 <td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
 <td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
@@ -165,7 +167,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
 </tr></table>
 
-**Last updated:** Thu, 02 May 2019 09:49:12 UTC
+**Last updated:** Thu, 02 May 2019 17:26:06 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From e7c515da9adb28c85a6e274f7392c9072199adaa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Fri, 3 May 2019 14:34:41 +0900
Subject: [PATCH 07/13] Update README.md [AUTOGEN] (#4839)

---
 README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8fab1cd43a..1ee61e225d 100644
--- a/README.md
+++ b/README.md
@@ -118,6 +118,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 <td><a href="https://www.patreon.com/user?u=16869916">見当かなみ</a></td>
 </tr></table>
 <table><tr>
+<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18899730/6a22797f68254034a854d69ea2445fc8/1.png?token-time=2145916800&token-hash=b_uj57yxo5VzkSOUS7oXE_762dyOTB_oxzbO6lFNG3k%3D" alt="YuzuRyo61" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1.png?token-time=2145916800&token-hash=FMV7cPKBD1TU2WTbl1jg6AcdKSvTb2BSFcDhgc-EO8w%3D" alt="gutfuckllc" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1.png?token-time=2145916800&token-hash=9nEQje_eMvUjq9a7L3uBqW-MQbS-rRMaMgd7UYVoFNM%3D" alt="mydarkstar" width="100"></td>
 <td><img src="https://c8.patreon.com/2/200/12718187" alt="Peter G." width="100"></td>
@@ -128,6 +129,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/19356899/496b4681d33b4520bd7688e0fd19c04d/2.jpeg?token-time=2145916800&token-hash=_sTj3dUBOhn9qwiJ7F19Qd-yWWfUqJC_0jG1h0agEqQ%3D" alt="sheeta.s" width="100"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13737140/1adf7835017d479280d90fe8d30aade2/1.png?token-time=2145916800&token-hash=0pdle8h5pDZrww0BDOjdz6zO-HudeGTh36a3qi1biVU%3D" alt="Satsuki Yanagi" width="100"></td>
 </tr><tr>
+<td><a href="https://www.patreon.com/Yuzulia">YuzuRyo61</a></td>
 <td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
 <td><a href="https://www.patreon.com/mydarkstar">mydarkstar</a></td>
 <td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
@@ -167,7 +169,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
 <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
 </tr></table>
 
-**Last updated:** Thu, 02 May 2019 17:26:06 UTC
+**Last updated:** Fri, 03 May 2019 05:33:07 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From 001969efaf5c747d78192563d3b3bd09c3cf23e9 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 3 May 2019 14:49:22 +0900
Subject: [PATCH 08/13] Improve usability

---
 .../common/views/components/page-editor/page-editor.blocks.vue  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/common/views/components/page-editor/page-editor.blocks.vue b/src/client/app/common/views/components/page-editor/page-editor.blocks.vue
index 894feb34cc..266b6d6b21 100644
--- a/src/client/app/common/views/components/page-editor/page-editor.blocks.vue
+++ b/src/client/app/common/views/components/page-editor/page-editor.blocks.vue
@@ -1,5 +1,5 @@
 <template>
-<x-draggable tag="div" :list="blocks" handle=".drag-handle" :group="{ name: 'blocks' }" animation="150">
+<x-draggable tag="div" :list="blocks" handle=".drag-handle" :group="{ name: 'blocks' }" animation="150" swap-threshold="0.5">
 	<component v-for="block in blocks" :is="'x-' + block.type" :value="block" @input="updateItem" @remove="removeItem" :key="block.id" :ai-script="aiScript"/>
 </x-draggable>
 </template>

From 9d1ed1eb0dfce53aa0db7f33f376774b1521a5ae Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Fri, 3 May 2019 18:33:25 +0900
Subject: [PATCH 09/13] Some import and export fixes (#4842)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Fix: Mastodon v2.8.0 のフォローリストがインポートできない

* Fix: エクスポートリクエストに失敗してもエラーが出ない (#4821)

* エクスポートファイルでは同一ハッシュチェックをしないように
---
 .../views/components/settings/profile.vue       | 17 +++++++++++------
 src/queue/processors/db/export-blocking.ts      |  2 +-
 src/queue/processors/db/export-following.ts     |  2 +-
 src/queue/processors/db/export-mute.ts          |  2 +-
 src/queue/processors/db/export-notes.ts         |  2 +-
 src/queue/processors/db/export-user-lists.ts    |  2 +-
 src/queue/processors/db/import-following.ts     |  3 ++-
 7 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/src/client/app/common/views/components/settings/profile.vue b/src/client/app/common/views/components/settings/profile.vue
index c1ecfafe16..a22fd6df98 100644
--- a/src/client/app/common/views/components/settings/profile.vue
+++ b/src/client/app/common/views/components/settings/profile.vue
@@ -290,12 +290,17 @@ export default Vue.extend({
 				this.exportTarget == 'mute' ? 'i/export-mute' :
 				this.exportTarget == 'blocking' ? 'i/export-blocking' :
 				this.exportTarget == 'user-lists' ? 'i/export-user-lists' :
-				null, {});
-
-			this.$root.dialog({
-				type: 'info',
-				text: this.$t('export-requested')
-			});
+				null, {}).then(() => {
+					this.$root.dialog({
+						type: 'info',
+						text: this.$t('export-requested')
+					});
+				}).catch((e: any) => {
+					this.$root.dialog({
+						type: 'error',
+						text: e.message
+					});
+				});
 		},
 
 		doImport() {
diff --git a/src/queue/processors/db/export-blocking.ts b/src/queue/processors/db/export-blocking.ts
index c4b8c9438d..0504ab8c30 100644
--- a/src/queue/processors/db/export-blocking.ts
+++ b/src/queue/processors/db/export-blocking.ts
@@ -85,7 +85,7 @@ export async function exportBlocking(job: Bull.Job, done: any): Promise<void> {
 	logger.succ(`Exported to: ${path}`);
 
 	const fileName = 'blocking-' + dateFormat(new Date(), 'yyyy-mm-dd-HH-MM-ss') + '.csv';
-	const driveFile = await addFile(user, path, fileName);
+	const driveFile = await addFile(user, path, fileName, null, null, true);
 
 	logger.succ(`Exported to: ${driveFile.id}`);
 	cleanup();
diff --git a/src/queue/processors/db/export-following.ts b/src/queue/processors/db/export-following.ts
index 9fab5bb21a..996ef6310d 100644
--- a/src/queue/processors/db/export-following.ts
+++ b/src/queue/processors/db/export-following.ts
@@ -85,7 +85,7 @@ export async function exportFollowing(job: Bull.Job, done: any): Promise<void> {
 	logger.succ(`Exported to: ${path}`);
 
 	const fileName = 'following-' + dateFormat(new Date(), 'yyyy-mm-dd-HH-MM-ss') + '.csv';
-	const driveFile = await addFile(user, path, fileName);
+	const driveFile = await addFile(user, path, fileName, null, null, true);
 
 	logger.succ(`Exported to: ${driveFile.id}`);
 	cleanup();
diff --git a/src/queue/processors/db/export-mute.ts b/src/queue/processors/db/export-mute.ts
index b957b48b20..5531553220 100644
--- a/src/queue/processors/db/export-mute.ts
+++ b/src/queue/processors/db/export-mute.ts
@@ -85,7 +85,7 @@ export async function exportMute(job: Bull.Job, done: any): Promise<void> {
 	logger.succ(`Exported to: ${path}`);
 
 	const fileName = 'mute-' + dateFormat(new Date(), 'yyyy-mm-dd-HH-MM-ss') + '.csv';
-	const driveFile = await addFile(user, path, fileName);
+	const driveFile = await addFile(user, path, fileName, null, null, true);
 
 	logger.succ(`Exported to: ${driveFile.id}`);
 	cleanup();
diff --git a/src/queue/processors/db/export-notes.ts b/src/queue/processors/db/export-notes.ts
index d03a216a59..94a4302e05 100644
--- a/src/queue/processors/db/export-notes.ts
+++ b/src/queue/processors/db/export-notes.ts
@@ -108,7 +108,7 @@ export async function exportNotes(job: Bull.Job, done: any): Promise<void> {
 	logger.succ(`Exported to: ${path}`);
 
 	const fileName = 'notes-' + dateFormat(new Date(), 'yyyy-mm-dd-HH-MM-ss') + '.json';
-	const driveFile = await addFile(user, path, fileName);
+	const driveFile = await addFile(user, path, fileName, null, null, true);
 
 	logger.succ(`Exported to: ${driveFile.id}`);
 	cleanup();
diff --git a/src/queue/processors/db/export-user-lists.ts b/src/queue/processors/db/export-user-lists.ts
index 5cd978c1aa..447cdaa174 100644
--- a/src/queue/processors/db/export-user-lists.ts
+++ b/src/queue/processors/db/export-user-lists.ts
@@ -62,7 +62,7 @@ export async function exportUserLists(job: Bull.Job, done: any): Promise<void> {
 	logger.succ(`Exported to: ${path}`);
 
 	const fileName = 'user-lists-' + dateFormat(new Date(), 'yyyy-mm-dd-HH-MM-ss') + '.csv';
-	const driveFile = await addFile(user, path, fileName);
+	const driveFile = await addFile(user, path, fileName, null, null, true);
 
 	logger.succ(`Exported to: ${driveFile.id}`);
 	cleanup();
diff --git a/src/queue/processors/db/import-following.ts b/src/queue/processors/db/import-following.ts
index 8de3193e46..ff4ff6b6ab 100644
--- a/src/queue/processors/db/import-following.ts
+++ b/src/queue/processors/db/import-following.ts
@@ -35,7 +35,8 @@ export async function importFollowing(job: Bull.Job, done: any): Promise<void> {
 		linenum++;
 
 		try {
-			const { username, host } = parseAcct(line.trim());
+			const acct = line.split(',')[0].trim();
+			const { username, host } = parseAcct(acct);
 
 			let target = isSelfHost(host!) ? await Users.findOne({
 				host: null,

From 0e764a2b3e2aed345750b87f4a77bee345598c69 Mon Sep 17 00:00:00 2001
From: Satsuki Yanagi <17376330+u1-liquid@users.noreply.github.com>
Date: Fri, 3 May 2019 18:38:19 +0900
Subject: [PATCH 10/13] Fix external service authentication (#4846)

---
 migration/1556746559567-UserProfile.ts | 23 +++++++++++++++++++++++
 src/models/entities/user-profile.ts    | 12 ++++++------
 src/server/api/service/discord.ts      |  8 ++------
 src/server/api/service/github.ts       |  8 ++------
 src/server/api/service/twitter.ts      |  8 ++------
 5 files changed, 35 insertions(+), 24 deletions(-)
 create mode 100644 migration/1556746559567-UserProfile.ts

diff --git a/migration/1556746559567-UserProfile.ts b/migration/1556746559567-UserProfile.ts
new file mode 100644
index 0000000000..719f8e1ae0
--- /dev/null
+++ b/migration/1556746559567-UserProfile.ts
@@ -0,0 +1,23 @@
+import {MigrationInterface, QueryRunner} from "typeorm";
+
+export class UserProfile1556746559567 implements MigrationInterface {
+
+    public async up(queryRunner: QueryRunner): Promise<any> {
+        await queryRunner.query(`UPDATE "user_profile" SET github = FALSE`);
+        await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "githubId"`);
+        await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "githubId" VARCHAR(64)`);
+        await queryRunner.query(`UPDATE "user_profile" SET discord = FALSE`);
+        await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordExpiresDate"`);
+        await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "discordExpiresDate" VARCHAR(64)`);
+    }
+
+    public async down(queryRunner: QueryRunner): Promise<any> {
+        await queryRunner.query(`UPDATE "user_profile" SET github = FALSE`);
+        await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "githubId"`);
+        await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "githubId" INTEGER`);
+        await queryRunner.query(`UPDATE "user_profile" SET discord = FALSE`);
+        await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordExpiresDate"`);
+        await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "discordExpiresDate" INTEGER`);
+    }
+
+}
diff --git a/src/models/entities/user-profile.ts b/src/models/entities/user-profile.ts
index a2d7b8d2c2..16e5d5b9e0 100644
--- a/src/models/entities/user-profile.ts
+++ b/src/models/entities/user-profile.ts
@@ -144,10 +144,10 @@ export class UserProfile {
 	})
 	public githubAccessToken: string | null;
 
-	@Column('integer', {
-		nullable: true, default: null,
+	@Column('varchar', {
+		length: 64, nullable: true, default: null,
 	})
-	public githubId: number | null;
+	public githubId: string | null;
 
 	@Column('varchar', {
 		length: 64, nullable: true, default: null,
@@ -169,10 +169,10 @@ export class UserProfile {
 	})
 	public discordRefreshToken: string | null;
 
-	@Column('integer', {
-		nullable: true, default: null,
+	@Column('varchar', {
+		length: 64, nullable: true, default: null,
 	})
-	public discordExpiresDate: number | null;
+	public discordExpiresDate: string | null;
 
 	@Column('varchar', {
 		length: 64, nullable: true, default: null,
diff --git a/src/server/api/service/discord.ts b/src/server/api/service/discord.ts
index ac4d9a5601..29da17dd9e 100644
--- a/src/server/api/service/discord.ts
+++ b/src/server/api/service/discord.ts
@@ -203,12 +203,8 @@ router.get('/dc/cb', async ctx => {
 		}
 
 		const profile = await UserProfiles.createQueryBuilder()
-			.where('discord @> :discord', {
-				discord: {
-					id: id,
-				},
-			})
-			.andWhere('userHost IS NULL')
+			.where('"discordId" = :id', { id: id })
+			.andWhere('"userHost" IS NULL')
 			.getOne();
 
 		if (profile == null) {
diff --git a/src/server/api/service/github.ts b/src/server/api/service/github.ts
index 4f287406d1..de1e15f079 100644
--- a/src/server/api/service/github.ts
+++ b/src/server/api/service/github.ts
@@ -193,12 +193,8 @@ router.get('/gh/cb', async ctx => {
 		}
 
 		const link = await UserProfiles.createQueryBuilder()
-			.where('github @> :github', {
-				github: {
-					id: id,
-				},
-			})
-			.andWhere('userHost IS NULL')
+			.where('"githubId" = :id', { id: id })
+			.andWhere('"userHost" IS NULL')
 			.getOne();
 
 		if (link == null) {
diff --git a/src/server/api/service/twitter.ts b/src/server/api/service/twitter.ts
index 3a5800f00b..55369d0aee 100644
--- a/src/server/api/service/twitter.ts
+++ b/src/server/api/service/twitter.ts
@@ -141,12 +141,8 @@ router.get('/tw/cb', async ctx => {
 		const result = await twAuth!.done(JSON.parse(twCtx), ctx.query.oauth_verifier);
 
 		const link = await UserProfiles.createQueryBuilder()
-			.where('twitter @> :twitter', {
-				twitter: {
-					userId: result.userId,
-				},
-			})
-			.andWhere('userHost IS NULL')
+			.where('"twitterUserId" = :id', { id: result.userId })
+			.andWhere('"userHost" IS NULL')
 			.getOne();
 
 		if (link == null) {

From 4b68abd963031a28e19a8cd2f626e8ba91427b0b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 3 May 2019 18:48:40 +0900
Subject: [PATCH 11/13] =?UTF-8?q?=E5=89=B2=E3=81=A3=E3=81=9F=E4=BD=99?=
 =?UTF-8?q?=E3=82=8A=E3=82=92=E6=B1=82=E3=82=81=E3=82=8B=E9=96=A2=E6=95=B0?=
 =?UTF-8?q?=E3=82=92MisskeyPages=E3=81=AB=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml              | 4 ++++
 src/misc/aiscript/evaluator.ts | 1 +
 src/misc/aiscript/index.ts     | 1 +
 3 files changed, 6 insertions(+)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 5d85819d54..6aac41c7d8 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1982,6 +1982,10 @@ pages:
       _divide:
         arg1: "A"
         arg2: "B"
+      remind: "÷ 割った余り"
+      _remind:
+        arg1: "A"
+        arg2: "B"
       eq: "AとBが同じ"
       _eq:
         arg1: "A"
diff --git a/src/misc/aiscript/evaluator.ts b/src/misc/aiscript/evaluator.ts
index 2bc866dc43..6beb320442 100644
--- a/src/misc/aiscript/evaluator.ts
+++ b/src/misc/aiscript/evaluator.ts
@@ -160,6 +160,7 @@ export class ASEvaluator {
 			subtract: (a: number, b: number) => a - b,
 			multiply: (a: number, b: number) => a * b,
 			divide: (a: number, b: number) => a / b,
+			remind: (a: number, b: number) => a % b,
 			strLen: (a: string) => a.length,
 			strPick: (a: string, b: number) => a[b - 1],
 			strReplace: (a: string, b: string, c: string) => a.split(b).join(c),
diff --git a/src/misc/aiscript/index.ts b/src/misc/aiscript/index.ts
index 711cfb41eb..1ce09b7bdb 100644
--- a/src/misc/aiscript/index.ts
+++ b/src/misc/aiscript/index.ts
@@ -57,6 +57,7 @@ export const funcDefs: Record<string, { in: any[]; out: any; category: string; i
 	subtract:        { in: ['number', 'number'],           out: 'number',      category: 'operation',  icon: faMinus, },
 	multiply:        { in: ['number', 'number'],           out: 'number',      category: 'operation',  icon: faTimes, },
 	divide:          { in: ['number', 'number'],           out: 'number',      category: 'operation',  icon: faDivide, },
+	remind:          { in: ['number', 'number'],           out: 'number',      category: 'operation',  icon: faDivide, },
 	eq:              { in: [0, 0],                         out: 'boolean',     category: 'comparison', icon: faEquals, },
 	notEq:           { in: [0, 0],                         out: 'boolean',     category: 'comparison', icon: faNotEqual, },
 	gt:              { in: ['number', 'number'],           out: 'boolean',     category: 'comparison', icon: faGreaterThan, },

From 6b473e3a5c04dc1c75543d591c1b6f4ce4362801 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 3 May 2019 18:55:24 +0900
Subject: [PATCH 12/13] Fix #4840

---
 src/models/repositories/user.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts
index eab3acc8e7..68a742d35f 100644
--- a/src/models/repositories/user.ts
+++ b/src/models/repositories/user.ts
@@ -127,6 +127,7 @@ export class UserRepository extends Repository<User> {
 				pinnedNotes: Notes.packMany(pins.map(pin => pin.noteId), meId, {
 					detail: true
 				}),
+				twoFactorEnabled: profile!.twoFactorEnabled,
 			} : {}),
 
 			...(opts.detail && meId === user.id ? {
@@ -135,7 +136,6 @@ export class UserRepository extends Repository<User> {
 				autoWatch: profile!.autoWatch,
 				alwaysMarkNsfw: profile!.alwaysMarkNsfw,
 				carefulBot: profile!.carefulBot,
-				twoFactorEnabled: profile!.twoFactorEnabled,
 				hasUnreadMessagingMessage: MessagingMessages.count({
 					where: {
 						recipientId: user.id,

From bf54e58873594b703123ba53e5e8ee4a4538dc17 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 3 May 2019 18:58:09 +0900
Subject: [PATCH 13/13] 11.10.0

---
 CHANGELOG.md | 79 ++++++++++++++++++++++++++++++++--------------------
 package.json |  2 +-
 2 files changed, 50 insertions(+), 31 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 94ffe4f2b4..962ce57eb1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,37 @@ If you encounter any problems with updating, please try the following:
 1. `npm run clean` or `npm run cleanall`
 2. Retry update (Don't forget `npm i`)
 
+Migration
+------------------------------
+#### 1
+`ormconfig.json`という名前で、Misskeyのインストール場所(package.jsonとかがあるディレクトリ)に新たなファイルを作る。中身は次のようにします:
+``` json
+{
+	"type": "postgres",
+	"host": "PostgreSQLのホスト",
+	"port": 5432,
+	"username": "PostgreSQLのユーザー名",
+	"password": "PostgreSQLのパスワード",
+	"database": "PostgreSQLのデータベース名",
+	"entities": ["src/models/entities/*.ts"],
+	"migrations": ["migration/*.ts"],
+	"cli": {
+		"migrationsDir": "migration"
+	}
+}
+```
+上記の各種PostgreSQLの設定(ポートも)は、設定ファイルに書いてあるものをコピーしてください。
+
+#### 2
+```
+npm i -g ts-node
+```
+
+#### 3
+```
+ts-node ./node_modules/typeorm/cli.js migration:run
+```
+
 How to migrate to v11 from v10
 ------------------------------
 ### 移行の注意点
@@ -42,6 +73,23 @@ mongodb:
 8. master ブランチに戻す
 9. enjoy
 
+11.10.0 (2019/05/03)
+-------------------
+### 注意
+このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
+
+### Improvements
+* MisskeyPagesに割った余りを求める関数を追加
+* Mastodon v2.8.0 のフォローリストをインポートできるように
+* エクスポートリクエストに失敗したらエラーを表示するように
+* エクスポートファイルでは同一ハッシュチェックをしないように
+
+### Fixes
+* 2段階認証を設定するとログインできなくなる問題を修正
+* ファイルをアップロードできないことがある問題を修正
+* リモートファイルをキャッシュしない設定だとサムネイル時にオリジナル画像が表示されない問題を修正
+* 外部サービス連携の不具合を修正
+
 11.9.0 (2019/05/02)
 -------------------
 ### Improvements
@@ -104,36 +152,7 @@ mongodb:
 11.5.0 (2019/04/29)
 -------------------
 ### 注意
-このアップデートを適用した後、プロセスを起動(もしくは再起動)する前にまず以下の手順を実行してください
-
-#### 1
-`ormconfig.json`という名前で、Misskeyのインストール場所(package.jsonとかがあるディレクトリ)に新たなファイルを作る。中身は次のようにします:
-``` json
-{
-	"type": "postgres",
-	"host": "PostgreSQLのホスト",
-	"port": 5432,
-	"username": "PostgreSQLのユーザー名",
-	"password": "PostgreSQLのパスワード",
-	"database": "PostgreSQLのデータベース名",
-	"entities": ["src/models/entities/*.ts"],
-	"migrations": ["migration/*.ts"],
-	"cli": {
-		"migrationsDir": "migration"
-	}
-}
-```
-上記の各種PostgreSQLの設定(ポートも)は、設定ファイルに書いてあるものをコピーしてください。
-
-#### 2
-```
-npm i -g ts-node
-```
-
-#### 3
-```
-ts-node ./node_modules/typeorm/cli.js migration:run
-```
+このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](migration)の手順を実行してください
 
 ### New features
 #### MisskeyPages
diff --git a/package.json b/package.json
index d1a51e6ea2..27a6b60a5e 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "11.9.0",
+	"version": "11.10.0",
 	"codename": "daybreak",
 	"repository": {
 		"type": "git",