reverted message formatter

This commit is contained in:
supertiger1234 2019-07-25 11:32:45 +01:00
parent 7f801ccdbd
commit 8904a9254b
2 changed files with 37 additions and 37 deletions

View file

@ -14,6 +14,17 @@
const config = [ const config = [
{
version: 5.5,
title: "Oopsies!",
shortTitle: "",
date: "25/07/2019",
headColor: "rgba(15, 65, 70, 0.77)",
fix: [
'Removed codeblock highlighter due to some problems. Will be back in the future.',
],
},
{ {
version: 5.4, version: 5.4,
title: "Bug Fixes!", title: "Bug Fixes!",

View file

@ -2,8 +2,6 @@ import Formatter from 'futoji'
import twemoji from 'twemoji' import twemoji from 'twemoji'
import emojiParser from '@/utils/emojiParser'; import emojiParser from '@/utils/emojiParser';
import config from "@/config.js"; import config from "@/config.js";
import hljs from 'highlight.js'
import { escape as escapeHTML, unescape as unescapeHTML } from 'validator'
const futoji = new Formatter(); const futoji = new Formatter();
const emojiFormatter = new Formatter(); const emojiFormatter = new Formatter();
@ -13,23 +11,24 @@ emojiFormatter.addTransformer({
symbol: ':', symbol: ':',
padding: false, padding: false,
recursive: false, recursive: false,
validate: text => /.+?&(.+?)/.test(text), validate: text => /.+?&(.+?)/.test(text),
transformer: owo transformer: owo
}) })
function owo (text) { function owo (text) {
const split = escapeHTML(text).split('&'); const split = text.split('&');
if (!split || split.length <= 1) return `:${text}:`; if (!split || split.length <= 1) return `:${text}:`;
const url = split[split.length - 1].slice(4); const url = split[split.length - 1].slice(4);
return `<img class="emoji" draggable="false" alt=":${split[0]}:" src="${config.domain + "/files/" + url}">` return `<img class="emoji" draggable="false" alt=":${split[0]}:" src="${config.domain + "/files/" + url}">`
} }
futoji.addTransformer({ futoji.addTransformer({
name: 'custom emoji', name: 'custom emoji',
symbol: ':', symbol: ':',
padding: false, padding: false,
recursive: false, recursive: false,
validate: text => /.+?&amp;(.+?)/.test(text), validate: text => /.+?&(.+?)/.test(text),
transformer: text => { transformer: text => {
const formattedInner = emojiFormatter.format(text); const formattedInner = emojiFormatter.format(text);
return owo(formattedInner); return owo(formattedInner);
@ -37,85 +36,80 @@ futoji.addTransformer({
} }
}) })
futoji.addTransformer({ futoji.addTransformer({
name: 'url', name: 'url',
open: 'http', open: 'http',
close: ' ', close: ' ',
recursive: false, recursive: false,
validate: text => /(https?:\/\/[^\s]+)/g.test('http' + text), validate: text => /(https?:\/\/[^\s]+)/g.test('http' + text),
transformer: text => '<a class="msg-link" target="_blank" href="http' + escapeHTML(text) + '">http' + escapeHTML(text) + '</a> ' transformer: text => '<a class="msg-link" target="_blank" href="http' + text + '">http' + text + '</a> '
}) })
futoji.addTransformer({ futoji.addTransformer({
name: 'bold-and-italic', name: 'bold-and-italic',
symbol: '***', symbol: '***',
transformer: text => `<strong><em>${escapeHTML(text)}</em></strong>` transformer: text => `<strong><em>${text}</em></strong>`
}) })
futoji.addTransformer({ futoji.addTransformer({
name: 'bold', name: 'bold',
symbol: '**', symbol: '**',
transformer: text => `<strong>${escapeHTML(text)}</strong>` transformer: text => `<strong>${text}</strong>`
}) })
futoji.addTransformer({ futoji.addTransformer({
name: 'italic', name: 'italic',
symbol: '*', symbol: '*',
transformer: text => `<em>${escapeHTML(text)}</em>` transformer: text => `<em>${text}</em>`
}) })
futoji.addTransformer({ futoji.addTransformer({
name: 'underline', name: 'underline',
symbol: '__', symbol: '__',
transformer: text => `<u>${escapeHTML(text)}</u>` transformer: text => `<u>${text}</u>`
}) })
futoji.addTransformer({ futoji.addTransformer({
name: 'italic', name: 'italic',
symbol: '_', symbol: '_',
transformer: text => `<em>${escapeHTML(text)}</em>` transformer: text => `<em>${text}</em>`
}) })
futoji.addTransformer({ futoji.addTransformer({
name: 'srike', name: 'srike',
symbol: '~~', symbol: '~~',
transformer: text => `<s>${escapeHTML(text).trim()}</s>` transformer: text => `<s>${text.trim()}</s>`
}) })
futoji.addTransformer({ futoji.addTransformer({
name: 'code-block', name: 'code-block',
symbol: '```', symbol: '```',
recursive: false, recursive: false,
transformer: text => { transformer: text => `<div class="codeblock"><code>${formatCode(text).trim()}</code></div>`,
let formatted = formatCode(text)
let highlighted
if(formatted.lang.length === 0) {
return `<div class="codeblock"><code>${escapeHTML(formatted.code)}</code></div>`
} else if(hljs.listLanguages().includes(formatted.lang)) {
highlighted = hljs.highlight(formatted.lang, formatted.code, true)
} else {
highlighted = hljs.highlightAuto(formatted.code)
}
return `<div class="codeblock"><code lang="${escapeHTML(highlighted.language)}">${highlighted.value}</code></div>`
}
}) })
futoji.addTransformer({ futoji.addTransformer({
name: 'code', name: 'code',
symbol: '`', symbol: '`',
recursive: false, recursive: false,
transformer: text => `<code>${escapeHTML(text)}</code>`, transformer: text => `<code>${text}</code>`,
}) })
export default (message) => { export default (message) => {
message = futoji.format(escapeHtml(message + ' ')).trim(); message = futoji.format(escapeHtml(message + ' ')).trim();
message = emojiParser.replaceEmojis(message); message = emojiParser.replaceEmojis(message);
return message; return message;
} }
/** /**
* format code to get language and code * format code to add syntax highlighting
*/ */
function formatCode(text) { function formatCode(text) {
// matches if word until newline // matches if word until newline
@ -126,19 +120,14 @@ function formatCode(text) {
let language = nameRegex.exec(text)[1] let language = nameRegex.exec(text)[1]
let newText = text.replace(nameRegex, '') let newText = text.replace(nameRegex, '')
return { // TODO: format newText with language
lang: language,
code: newText return newText
}
} }
return { return text
lang: '',
code: text.replace(/^\n/, '')
}
} }
// todo: replace with well tested / faster method
function escapeHtml(unsafe) { function escapeHtml(unsafe) {
return unsafe return unsafe
.replace(/&/g, "&amp;") .replace(/&/g, "&amp;")