refactor: Extract well-known services
This commit is contained in:
parent
2bdcd22ad4
commit
2d40a15d2b
|
@ -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,11 +38,10 @@ export default Vue.extend({
|
|||
},
|
||||
computed: {
|
||||
url(): string {
|
||||
switch (this.host) {
|
||||
case 'twitter.com':
|
||||
case 'github.com':
|
||||
return `https://${this.host}/${this.username}`;
|
||||
default:
|
||||
const wellKnown = wellKnownServices.find(x => x[0] === this.host);
|
||||
if (wellKnown) {
|
||||
return wellKnown[1](this.username);
|
||||
} else {
|
||||
return `/${this.canonical}`;
|
||||
}
|
||||
},
|
||||
|
|
|
@ -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 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';
|
||||
break;
|
||||
}
|
||||
a.textContent = acct;
|
||||
return a;
|
||||
|
|
4
src/well-known-services.ts
Normal file
4
src/well-known-services.ts
Normal 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][];
|
Loading…
Reference in a new issue