refactor: Extract well-known services
This commit is contained in:
		
							parent
							
								
									2bdcd22ad4
								
							
						
					
					
						commit
						2d40a15d2b
					
				
					 3 changed files with 18 additions and 18 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue