global.twemoji = require('twemoji').default const prodDir = require('../../package').corifeus["prod-dir"]; global.twemoji.base = `${prodDir}/twemoji/`; global.htmlEncode = require('js-htmlencode') const hljs = require('highlight.js/lib/core'); hljs.registerLanguage('conf', require('highlight.js/lib/languages/nginx')); hljs.registerLanguage('xml', require('highlight.js/lib/languages/xml')); hljs.registerLanguage('css', require('highlight.js/lib/languages/css')); hljs.registerLanguage('cmake', require('highlight.js/lib/languages/cmake')); hljs.registerLanguage('dockerfile', require('highlight.js/lib/languages/dockerfile')); hljs.registerLanguage('Dockerfile', require('highlight.js/lib/languages/dockerfile')); hljs.registerLanguage('less', require('highlight.js/lib/languages/less')); hljs.registerLanguage('scss', require('highlight.js/lib/languages/scss')); hljs.registerLanguage('yaml', require('highlight.js/lib/languages/yaml')); hljs.registerLanguage('yml', require('highlight.js/lib/languages/yaml')); hljs.registerLanguage('powershell', require('highlight.js/lib/languages/powershell')); hljs.registerLanguage('javascript', require('highlight.js/lib/languages/javascript')); hljs.registerLanguage('js', require('highlight.js/lib/languages/javascript')); hljs.registerLanguage('json', require('highlight.js/lib/languages/json')); hljs.registerLanguage('bash', require('highlight.js/lib/languages/shell')); hljs.registerLanguage('sh', require('highlight.js/lib/languages/shell')); hljs.registerLanguage('php', require('highlight.js/lib/languages/php')); hljs.registerLanguage('shell', require('highlight.js/lib/languages/shell')); hljs.registerLanguage('cmd', require('highlight.js/lib/languages/shell')); hljs.registerLanguage('typescript', require('highlight.js/lib/languages/typescript')); hljs.registerLanguage('ts', require('highlight.js/lib/languages/typescript')); hljs.registerLanguage('python', require('highlight.js/lib/languages/python')); hljs.registerLanguage('py', require('highlight.js/lib/languages/python')); const { marked } = require('marked') global.marked = marked const markdownRenderer = new marked.Renderer(); global.gitlist.markdownRenderer = markdownRenderer; const kebabCase = require('lodash/kebabCase') markdownRenderer.heading = (token) => { //console.log('token heading', token) // console.log('text', text,) // console.log('raw', raw) // text, level, raw const text = token.text; let level = token.depth; const raw = token.raw level = level + 2; const ref = kebabCase(text).replace(/[^\x00-\xFF]/g, ""); const id = ref + '-parent'; const hover = ` onmouseenter="document.getElementById('${ref}').style.display = 'inline'" onmouseleave="document.getElementById('${ref}').style.display = 'none'" `; const element = `
${text} #
`; return element } markdownRenderer.strong = (token) => { return `${token.text}`; } markdownRenderer.link = (token) => { console.log('token link', token) const title = token.title let href = token.href let text = token.text if (token.tokens.length === 1) { if (token.tokens[0].type === 'image') { const imageToken = token.tokens[0] //console.log('image token', imageToken) text = markdownRenderer.image(imageToken); } else if (token.tokens[0].type === 'strong') { const strongToken = token.tokens[0] //console.log('strong token', strongToken) text = markdownRenderer.strong(strongToken); } } let a; if (href.startsWith('https:/') || href.startsWith('http:/')) { a = '' + text + ''; } else { // /ramdisk.git/tree/master/artifacts/ //console.log(href) const start = gitlist.basepath + '/' + gitlist.repo + (href.endsWith('/') ? '/tree/' : '/blob/') + gitlist.branch + '/'; if (!location.pathname.startsWith(start)) { href = start + href; } else { const url = new URL(location); let path = url.pathname.split('/'); path.pop(); path = path.join('/'); href = path + '/' + href; } a = '' + text + ''; } return a; } markdownRenderer.image = (token) => { //console.log('token image', token) // href, title, text let {href, title, text} = token; title = title || ''; text = text || ''; let resultText = title; if (text !== '') { if (title !== '') { resultText += ' - '; } resultText += text; } if (!href.startsWith('https:/') && !href.startsWith('http:/')) { const start = gitlist.basepath + '/' + gitlist.repo + '/raw/' + gitlist.branch + '/'; if (!location.pathname.startsWith(start)) { href = start + href; } else { const url = new URL(location); let path = url.pathname.split('/'); path.pop(); path = path.join('/'); href = path + '/' + href; } } const result = '' + htmlEncode(resultText) + ''; //console.warn('result image', result) return result; }; let codeIndex = 0; markdownRenderer.code = (token) => { //console.log('token code', token) // code, language //console.warn('code', token) const code = token.text; let language = token.lang; if (language === undefined) { language = 'text'; } language = language.toLowerCase() if ((hljs.getLanguage(language) === 'undefined' || hljs.getLanguage(language) === undefined) && language !== 'text' && language !== 'txt') { console.error(`Please add highlight.js as a language (could be a marked error as well, sometimes it thinks a language): ${language} We are not loading everything, since it is about 500kb`) } language = language === 'text' || language === 'txt' || language === undefined ? 'html' : language; const validLang = !!(language && hljs.getLanguage(language)); const highlighted = validLang ? hljs.highlight(code, { language: language, }).value : code; codeIndex++; return `
${highlighted}
` //return `
${highlighted}
`; }; markdownRenderer.codespan = (token) => { //console.log('token codespan', token) //console.warn('codespan', token) const code = token.text const lang = 'html'; const highlighted = hljs.highlight(code, { language: lang, }).value; return `${highlighted}`; } window.gitlist.markdownRenderer = markdownRenderer;