Newer
Older
navi-1 / webclient / src / utils / sourceHighlight.js
@Eugene Sukhodolskiy Eugene Sukhodolskiy on 30 Apr 1009 bytes Add artifact source previews
import hljs from 'highlight.js'

const EXTENSION_LANGUAGE = {
  css: 'css',
  htm: 'xml',
  html: 'xml',
  js: 'javascript',
  json: 'json',
  md: 'markdown',
  scad: 'openscad',
  svg: 'xml',
  ts: 'typescript',
  xml: 'xml',
}

const CONTENT_TYPE_LANGUAGE = {
  html: 'xml',
  svg: 'xml',
  stl: 'openscad',
}

function languageOrPlaintext(language) {
  return language && hljs.getLanguage(language) ? language : 'plaintext'
}

function extensionOf(value) {
  const clean = String(value || '').split('?')[0].split('#')[0]
  return clean.includes('.') ? clean.split('.').pop().toLowerCase() : ''
}

export function sourceLanguage(item = {}) {
  const filename = item.source_filename || item.filename || item.url || ''
  const language = EXTENSION_LANGUAGE[extensionOf(filename)] || CONTENT_TYPE_LANGUAGE[item.content_type]
  return languageOrPlaintext(language)
}

export function highlightSource(source, language) {
  return hljs.highlight(source || '', { language: languageOrPlaintext(language) }).value
}