From f0fec654ff4c533f16a4f2e9e30d19d102f94a63 Mon Sep 17 00:00:00 2001
From: rinsuki <428rinsuki+git@gmail.com>
Date: Sun, 17 Jun 2018 15:58:23 +0900
Subject: [PATCH] fix #1726

---
 src/remote/activitypub/misc/get-note-html.ts |  2 +-
 src/text/html.ts                             | 12 +++++++-----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/remote/activitypub/misc/get-note-html.ts b/src/remote/activitypub/misc/get-note-html.ts
index 5bca4eed62..33dd381689 100644
--- a/src/remote/activitypub/misc/get-note-html.ts
+++ b/src/remote/activitypub/misc/get-note-html.ts
@@ -6,7 +6,7 @@ import config from '../../../config';
 export default function(note: INote) {
 	if (note.text == null) return null;
 
-	let html = toHtml(parse(note.text));
+	let html = toHtml(parse(note.text), note.mentionedRemoteUsers);
 
 	if (note.poll != null) {
 		const url = `${config.url}/notes/${note._id}`;
diff --git a/src/text/html.ts b/src/text/html.ts
index 70b341689a..a51406ca85 100644
--- a/src/text/html.ts
+++ b/src/text/html.ts
@@ -1,8 +1,9 @@
 import { lib as emojilib } from 'emojilib';
 import { JSDOM } from 'jsdom';
 import config from '../config';
+import { INote } from '../models/note';
 
-const handlers = {
+const handlers: {[key: string]: (window: any, token: any, mentionedRemoteUsers: INote["mentionedRemoteUsers"]) => void} = {
 	bold({ document }, { bold }) {
 		const b = document.createElement('b');
 		b.textContent = bold;
@@ -44,9 +45,10 @@ const handlers = {
 		document.body.appendChild(a);
 	},
 
-	mention({ document }, { content }) {
+	mention({ document }, { content, username, host }, mentionedRemoteUsers) {
 		const a = document.createElement('a');
-		a.href = `${config.url}/${content}`;
+		const remoteUserInfo = mentionedRemoteUsers.find(remoteUser => remoteUser.username === username && remoteUser.host === host);
+		a.href = remoteUserInfo ? remoteUserInfo.uri : `${config.url}/${content}`;
 		a.textContent = content;
 		document.body.appendChild(a);
 	},
@@ -88,11 +90,11 @@ const handlers = {
 	}
 };
 
-export default tokens => {
+export default (tokens, mentionedRemoteUsers: INote["mentionedRemoteUsers"] = []) => {
 	const { window } = new JSDOM('');
 
 	for (const token of tokens) {
-		handlers[token.type](window, token);
+		handlers[token.type](window, token, mentionedRemoteUsers);
 	}
 
 	return `<p>${window.document.body.innerHTML}</p>`;