This commit is contained in:
rinsuki 2018-06-17 15:58:23 +09:00
parent 4e04e5e0c0
commit f0fec654ff
2 changed files with 8 additions and 6 deletions

View File

@ -6,7 +6,7 @@ import config from '../../../config';
export default function(note: INote) { export default function(note: INote) {
if (note.text == null) return null; if (note.text == null) return null;
let html = toHtml(parse(note.text)); let html = toHtml(parse(note.text), note.mentionedRemoteUsers);
if (note.poll != null) { if (note.poll != null) {
const url = `${config.url}/notes/${note._id}`; const url = `${config.url}/notes/${note._id}`;

View File

@ -1,8 +1,9 @@
import { lib as emojilib } from 'emojilib'; import { lib as emojilib } from 'emojilib';
import { JSDOM } from 'jsdom'; import { JSDOM } from 'jsdom';
import config from '../config'; 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 }) { bold({ document }, { bold }) {
const b = document.createElement('b'); const b = document.createElement('b');
b.textContent = bold; b.textContent = bold;
@ -44,9 +45,10 @@ const handlers = {
document.body.appendChild(a); document.body.appendChild(a);
}, },
mention({ document }, { content }) { mention({ document }, { content, username, host }, mentionedRemoteUsers) {
const a = document.createElement('a'); 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; a.textContent = content;
document.body.appendChild(a); document.body.appendChild(a);
}, },
@ -88,11 +90,11 @@ const handlers = {
} }
}; };
export default tokens => { export default (tokens, mentionedRemoteUsers: INote["mentionedRemoteUsers"] = []) => {
const { window } = new JSDOM(''); const { window } = new JSDOM('');
for (const token of tokens) { for (const token of tokens) {
handlers[token.type](window, token); handlers[token.type](window, token, mentionedRemoteUsers);
} }
return `<p>${window.document.body.innerHTML}</p>`; return `<p>${window.document.body.innerHTML}</p>`;