46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
|
import hljs from 'highlight.js/lib/core';
|
||
|
import bash from 'highlight.js/lib/languages/bash';
|
||
|
|
||
|
hljs.registerLanguage('bash', bash);
|
||
|
|
||
|
const addStylesheet = function(url: string): void {
|
||
|
const link = document.createElement('link');
|
||
|
link.rel = 'stylesheet';
|
||
|
link.href = url;
|
||
|
document.head.appendChild(link);
|
||
|
};
|
||
|
|
||
|
const wrapAsCode = function(container: HTMLElement, language: string): HTMLElement {
|
||
|
const code = container.innerHTML.split('\n');
|
||
|
code.pop(); // Drop the line that actually runs this script, we don't need it now.
|
||
|
|
||
|
const codeElement = document.createElement('code');
|
||
|
codeElement.className = `language-${language}`;
|
||
|
codeElement.innerHTML = code.join('\n');
|
||
|
|
||
|
const pre = document.createElement('pre');
|
||
|
pre.appendChild(codeElement);
|
||
|
|
||
|
container.replaceChildren(pre);
|
||
|
return codeElement;
|
||
|
};
|
||
|
|
||
|
const addReadmeLink = function(codeblock: HTMLElement): void {
|
||
|
const span = document.createElement('span');
|
||
|
span.className = 'hljs-comment';
|
||
|
const readme = document.createElement('a');
|
||
|
readme.innerText = 'WHAT IS THIS';
|
||
|
readme.href = 'https://dots.00dani.me/README';
|
||
|
span.append('# ', readme);
|
||
|
|
||
|
codeblock.querySelector('span.hljs-meta + span.hljs-comment')?.replaceWith(span);
|
||
|
};
|
||
|
|
||
|
addStylesheet('/assets/css/style.css');
|
||
|
addStylesheet('/assets/css/code.css');
|
||
|
addStylesheet('/assets/css/monokai.min.css');
|
||
|
|
||
|
const codeblock = wrapAsCode(document.body, 'bash');
|
||
|
hljs.highlightElement(codeblock);
|
||
|
addReadmeLink(codeblock);
|