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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import moment from 'moment'
import Crowi from 'client/crowi'
type templatePatternKey = keyof Template['templatePattern']
export default class Template {
templatePattern: {
year: () => string
month: () => string
date: () => string
user: () => string
}
constructor(crowi: Crowi) {
this.templatePattern = {
year: this.getYear,
month: this.getMonth,
date: this.getDate,
user: this.getUser,
}
}
getYear(): string {
return moment().format('YYYY')
}
getMonth(): string {
return moment().format('YYYY/MM')
}
getDate(): string {
return moment().format('YYYY/MM/DD')
}
getUser() {
// FIXME
const user = window.crowi.getUser()
const username = user ? user.name : null
if (!username) {
return ''
}
return `/user/${username}`
}
parseTemplateString(templateString: string) {
let parsed = templateString
const templatePatternKeys = Object.keys(this.templatePattern) as templatePatternKey[]
templatePatternKeys.forEach(key => {
const k = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
const matcher = new RegExp(`{${k}}`, 'g')
if (parsed.match(matcher)) {
const replacer = this.templatePattern[key]()
parsed = parsed.replace(matcher, replacer)
}
})
return parsed
}
process(code: string, lang: string) {
const templateId = new Date().getTime().toString(16) + Math.floor(1000 * Math.random()).toString(16)
let pageName = lang
if (lang.match(':')) {
pageName = this.parseTemplateString(lang.split(':')[1])
}
code = this.parseTemplateString(code)
return `
<div class="page-template-builder">
<button class="template-create-button btn btn-secondary" data-template="${templateId}" data-path="${pageName}"><i class="mdi mdi-pencil-outline"></i> ${pageName}</button>
<pre><code id="${templateId}" class="lang-${lang}">${code}\n</code></pre></div>\n`
}
}
|