All files / client/util/LangProcessor PlantUML.ts

0% Statements 0/13
0% Branches 0/6
0% Functions 0/3
0% Lines 0/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45                                                                                         
import CrowiUtil from 'client/crowi'
import plantuml from 'plantuml-encoder'
import * as crypto from 'crypto'
import crowi from 'client/util/Crowi'
 
export default class PlantUML {
  crowi: crowi
 
  constructor(crowi: crowi) {
    this.crowi = crowi
  }
 
  generateId(token: string) {
    const hasher = crypto.createHash('md5')
    hasher.update(token)
    return hasher.digest('hex')
  }
 
  process(code: string, lang: string) {
    const { env } = this.crowi.getConfig()
 
    if (!env || !env.PLANTUML_URI) {
      return `<pre class="wiki-code"><code>${CrowiUtil.escape(code)}\n</code></pre>`
    }
 
    let plantumlUri = env.PLANTUML_URI
    if (plantumlUri.substr(-1) !== '/') {
      plantumlUri += '/'
    }
    const id = this.generateId(code + lang)
    const encoded = plantuml.encode(`@startuml
 
skinparam monochrome true
 
${code}
@enduml`)
 
    return `
      <div id="${id}" class="plantuml noborder">
        <img src="${plantumlUri}svg/${encoded}">
      </div>
    `
  }
}