refactor: Extract well-known services

This commit is contained in:
syuilo 2020-08-07 11:27:37 +09:00
parent 2bdcd22ad4
commit 2d40a15d2b
3 changed files with 18 additions and 18 deletions

View file

@ -18,6 +18,7 @@
import Vue from 'vue';
import { toUnicode } from 'punycode';
import { host as localHost } from '../config';
import { wellKnownServices } from '../../well-known-services';
export default Vue.extend({
props: {
@ -37,12 +38,11 @@ export default Vue.extend({
},
computed: {
url(): string {
switch (this.host) {
case 'twitter.com':
case 'github.com':
return `https://${this.host}/${this.username}`;
default:
return `/${this.canonical}`;
const wellKnown = wellKnownServices.find(x => x[0] === this.host);
if (wellKnown) {
return wellKnown[1](this.username);
} else {
return `/${this.canonical}`;
}
},
canonical(): string {

View file

@ -3,6 +3,7 @@ import config from '../config';
import { intersperse } from '../prelude/array';
import { MfmForest, MfmTree } from './prelude';
import { IMentionedRemoteUsers } from '../models/entities/note';
import { wellKnownServices } from '../well-known-services';
export function toHtml(tokens: MfmForest | null, mentionedRemoteUsers: IMentionedRemoteUsers = []) {
if (tokens == null) {
@ -126,18 +127,13 @@ export function toHtml(tokens: MfmForest | null, mentionedRemoteUsers: IMentione
mention(token) {
const a = doc.createElement('a');
const { username, host, acct } = token.node.props;
switch (host) {
case 'github.com':
a.href = `https://github.com/${username}`;
break;
case 'twitter.com':
a.href = `https://twitter.com/${username}`;
break;
default:
const remoteUserInfo = mentionedRemoteUsers.find(remoteUser => remoteUser.username === username && remoteUser.host === host);
a.href = remoteUserInfo ? (remoteUserInfo.url ? remoteUserInfo.url : remoteUserInfo.uri) : `${config.url}/${acct}`;
a.className = 'u-url mention';
break;
const wellKnown = wellKnownServices.find(x => x[0] === host);
if (wellKnown) {
a.href = wellKnown[1](username);
} else {
const remoteUserInfo = mentionedRemoteUsers.find(remoteUser => remoteUser.username === username && remoteUser.host === host);
a.href = remoteUserInfo ? (remoteUserInfo.url ? remoteUserInfo.url : remoteUserInfo.uri) : `${config.url}/${acct}`;
a.className = 'u-url mention';
}
a.textContent = acct;
return a;

View file

@ -0,0 +1,4 @@
export const wellKnownServices = [
['twitter.com', username => `https://twitter.com/${username}`],
['github.com', username => `https://github.com/${username}`],
] as [string, (username: string) => string][];