From 67b3461c242e50a3248f99bb164d160db2823db1 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 26 May 2018 23:20:52 +0900
Subject: [PATCH] Better mention handling

---
 .../app/desktop/views/components/post-form.vue       | 12 ++++++++++++
 src/client/app/mobile/views/components/post-form.vue | 12 ++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 0696d4e82b..0e0848524a 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -49,6 +49,7 @@ import Vue from 'vue';
 import * as XDraggable from 'vuedraggable';
 import getKao from '../../../common/scripts/get-kao';
 import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
+import parse from '../../../../../text/parse';
 
 export default Vue.extend({
 	components: {
@@ -110,6 +111,17 @@ export default Vue.extend({
 			this.text = `@${this.reply.user.username}@${this.reply.user.host} `;
 		}
 
+		if (this.reply && this.reply.text != null) {
+			const ast = parse(this.reply.text);
+
+			ast.filter(t => t.type == 'mention').forEach(x => {
+				const mention = x.host ? `@${x.username}@${x.host}` : `@${x.username}`;
+				if (this.text.indexOf(`${mention} `) == -1) {
+					this.text += `${mention} `;
+				}
+			});
+		}
+
 		this.$nextTick(() => {
 			// 書きかけの投稿を復元
 			const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftId];
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index b3b5ffd502..55347b7e53 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -49,6 +49,7 @@ import Vue from 'vue';
 import * as XDraggable from 'vuedraggable';
 import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
 import getKao from '../../../common/scripts/get-kao';
+import parse from '../../../../../text/parse';
 
 export default Vue.extend({
 	components: {
@@ -78,6 +79,17 @@ export default Vue.extend({
 			this.text = `@${this.reply.user.username}@${this.reply.user.host} `;
 		}
 
+		if (this.reply && this.reply.text != null) {
+			const ast = parse(this.reply.text);
+
+			ast.filter(t => t.type == 'mention').forEach(x => {
+				const mention = x.host ? `@${x.username}@${x.host}` : `@${x.username}`;
+				if (this.text.indexOf(`${mention} `) == -1) {
+					this.text += `${mention} `;
+				}
+			});
+		}
+
 		this.$nextTick(() => {
 			this.focus();
 		});