1
0
mirror of https://github.com/hack-chat/main.git synced 2024-03-22 13:20:33 +08:00

Merge pull request #76 from OpSimple/patch-1

Modified the way to apply syntax highlighting
This commit is contained in:
marzavec 2019-08-13 10:18:21 -05:00 committed by GitHub
commit 327ac793e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -33,7 +33,7 @@ var frontpage = [
"Formatting:",
"Whitespace is preserved, so source code can be pasted verbatim.",
"Surround LaTeX with a dollar sign for inline style $\\zeta(2) = \\pi^2/6$, and two dollars for display. $$\\int_0^1 \\int_0^1 \\frac{1}{1-xy} dx dy = \\frac{\\pi^2}{6}$$",
"For syntax highlight, the first line of the code block must begin with #<format> where <format> can be html, js or any known format.",
"For syntax highlight, wrap the code like: ```<language> <the code>``` where <language> is any known programming language.",
"",
"Current Github: https://github.com/hack-chat",
"Legacy GitHub: https://github.com/AndrewBelt/hack.chat",
@ -368,33 +368,38 @@ function pushMessage(args) {
var textEl = document.createElement('pre');
textEl.classList.add('text');
textEl.textContent = args.text || '';
textEl.innerHTML = textEl.innerHTML.replace(/(\?|https?:\/\/)\S+?(?=[,.!?:)]?\s|$)/g, parseLinks);
if ($('#syntax-highlight').checked && textEl.textContent.indexOf('#') == 0) {
var lang = textEl.textContent.split(/\s+/g)[0].replace('#', '');
var codeEl = document.createElement('code');
codeEl.classList.add(lang);
var content = textEl.textContent.replace('#' + lang, '');
codeEl.textContent = content.trim();
hljs.highlightBlock(codeEl);
textEl.innerHTML = '';
textEl.appendChild(codeEl);
} else if ($('#parse-latex').checked) {
// Temporary hotfix for \rule spamming, see https://github.com/Khan/KaTeX/issues/109
textEl.innerHTML = textEl.innerHTML.replace(/\\rule|\\\\\s*\[.*?\]/g, '');
try {
renderMathInElement(textEl, {
delimiters: [
{ left: "$$", right: "$$", display: true },
{ left: "$", right: "$", display: false },
]
})
} catch (e) {
console.warn(e);
}
textEl.textContent = args.text || '';
if($('#syntax-highlight').checked && textEl.textContent.includes('```')) {
var textParts = textEl.textContent.split('```');
var ignore = 0;
textEl.innerHTML = '';
for(var i=0; i< textParts.length; i++) {
if(i==ignore) {
textEl.innerHTML += parseLatex(textParts[i]);
continue;
}
var lang = textParts[i].split(/\s+/g)[0];
if(lang == '') {
textEl.innerHTML += parseLatex('```' + textParts[i]);
continue;
}
var codeEl = document.createElement('code');
codeEl.classList.add(lang);
codeEl.textContent = textParts[i].replace(lang, '').trim();
hljs.highlightBlock(codeEl);
textEl.innerHTML += codeEl.outerHTML.toString();
ignore = i+1;
}
} else {
var parsed = parseLatex(textEl.textContent);
if(parsed != null)
textEl.innerHTML = parsed;
}
textEl.innerHTML = textEl.innerHTML.replace(/(\?|https?:\/\/)\S+?(?=[,.!?:)]?\s|$)/g, parseLinks);
messageEl.appendChild(textEl);
// Scroll to bottom
@ -408,6 +413,27 @@ function pushMessage(args) {
updateTitle();
}
function parseLatex(str) {
if ($('#parse-latex').checked) {
// Temporary hotfix for \rule spamming, see https://github.com/Khan/KaTeX/issues/109
str = str.replace(/\\rule|\\\\\s*\[.*?\]/g, '');
var holEl = document.createElement('p');
holEl.textContent = str;
try {
renderMathInElement(holEl, {
delimiters: [
{ left: "$$", right: "$$", display: true },
{ left: "$", right: "$", display: false },
]
});
return holEl.innerHTML.toString();
} catch (e) {
console.warn(e);
}
}
return null;
}
function insertAtCursor(text) {
var input = $('#chatinput');
var start = input.selectionStart || 0;