import marked, { Renderer } from 'marked'; import hljs from 'highlight.js/lib/highlight'; import javascript from 'highlight.js/lib/languages/javascript'; import typescript from 'highlight.js/lib/languages/typescript'; hljs.registerLanguage('javascript', javascript); hljs.registerLanguage('typescript', typescript); async function run() { const div = document.getElementById('markdownReadme'); // Create your custom renderer. const renderer = new Renderer(); renderer.code = (code, language) => { // Check whether the given language is valid for highlight.js. const validLang = !!(language && hljs.getLanguage(language)); // Highlight only if the language is valid. const highlighted = validLang ? hljs.highlight(language, code).value : code; // Render the highlighted code with `hljs` class. return `
${highlighted}
`; }; marked.setOptions({ renderer }); if (div) { const response = await fetch(div.dataset['src'] || '../README.md'); const markdownText = await response.text(); div.innerHTML = marked(markdownText, { baseUrl: '../' }); restoreScroll(div); div.addEventListener('scroll', evt => { saveScroll(div); }); window.addEventListener('resize', evt => { saveScroll(div); }); } } const scrollKey = `${window.location.pathname}_scrolltop`; function saveScroll(div: HTMLElement) { window.localStorage.setItem(scrollKey, String(div.scrollTop)); } function restoreScroll(div: HTMLElement) { const scrollTop = window.localStorage.getItem(scrollKey); if (scrollTop) { div.scrollTop = parseInt(scrollTop); } } run();