From 162a74029534b83bd5d5a65b17dd17e42d72e543 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 26 May 2019 00:38:26 +0900
Subject: [PATCH] Fix #4981

---
 src/client/app/common/views/components/mfm.ts  |  5 +----
 src/client/app/common/views/components/url.vue | 17 ++++++++++++-----
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/client/app/common/views/components/mfm.ts b/src/client/app/common/views/components/mfm.ts
index 7de29b2aad..fa798504c7 100644
--- a/src/client/app/common/views/components/mfm.ts
+++ b/src/client/app/common/views/components/mfm.ts
@@ -8,7 +8,7 @@ import { concat, sum } from '../../../../../prelude/array';
 import MkFormula from './formula.vue';
 import MkCode from './code.vue';
 import MkGoogle from './google.vue';
-import { host, url } from '../../../config';
+import { host } from '../../../config';
 import { preorderF, countNodesF } from '../../../../../prelude/tree';
 
 function sumTextsLength(ts: MfmForest): number {
@@ -175,9 +175,6 @@ export default Vue.component('misskey-flavored-markdown', {
 						props: {
 							url: token.node.props.url,
 							rel: 'nofollow noopener',
-							...(token.node.props.url.startsWith(url) ? {} : {
-								target: '_blank'
-							})
 						},
 						attrs: {
 							style: 'color:var(--mfmUrl);'
diff --git a/src/client/app/common/views/components/url.vue b/src/client/app/common/views/components/url.vue
index 2829812f99..078c816523 100644
--- a/src/client/app/common/views/components/url.vue
+++ b/src/client/app/common/views/components/url.vue
@@ -1,5 +1,5 @@
 <template>
-<component :is="self ? 'router-link' : 'a'" class="mk-url" :[attr]="self ? url.substr(local.length) : url" :rel="rel" :target="target">
+<component :is="hasRoute ? 'router-link' : 'a'" class="mk-url" :[attr]="hasRoute ? url.substr(local.length) : url" :rel="rel" :target="target">
 	<template v-if="!self">
 		<span class="schema">{{ schema }}//</span>
 		<span class="hostname">{{ hostname }}</span>
@@ -8,7 +8,7 @@
 	<span class="pathname" v-if="pathname != ''">{{ self ? pathname.substr(1) : pathname }}</span>
 	<span class="query">{{ query }}</span>
 	<span class="hash">{{ hash }}</span>
-	<fa icon="external-link-square-alt" v-if="!self"/>
+	<fa icon="external-link-square-alt" v-if="target === '_blank'"/>
 </component>
 </template>
 
@@ -18,8 +18,13 @@ import { toUnicode as decodePunycode } from 'punycode';
 import { url as local } from '../../../config';
 
 export default Vue.extend({
-	props: ['url', 'rel', 'target'],
+	props: ['url', 'rel'],
 	data() {
+		const isSelf = this.url.startsWith(local);
+		const hasRoute =
+			this.url.substr(local.length).startsWith('/@') ||
+			this.url.substr(local.length).startsWith('/notes/') ||
+			this.url.substr(local.length).startsWith('/pages/');
 		return {
 			local,
 			schema: null,
@@ -28,8 +33,10 @@ export default Vue.extend({
 			pathname: null,
 			query: null,
 			hash: null,
-			self: this.url.startsWith(local),
-			attr: this.url.startsWith(local) ? 'to' : 'href'
+			self: isSelf,
+			hasRoute: hasRoute,
+			attr: hasRoute ? 'to' : 'href',
+			target: hasRoute ? null : '_blank'
 		};
 	},
 	created() {