mirror of
https://github.com/danbulant/Nertivia-Client
synced 2026-06-24 17:11:43 +00:00
reverted message formatter
This commit is contained in:
parent
7f801ccdbd
commit
8904a9254b
2 changed files with 37 additions and 37 deletions
|
|
@ -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!",
|
||||||
|
|
|
||||||
|
|
@ -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 => /.+?&(.+?)/.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, "&")
|
.replace(/&/g, "&")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue