utxo-prague/utils/update-docs.js

117 řádky
4.0 KiB
JavaScript
Surový Normální zobrazení Historie

2022-01-03 13:57:03 +01:00
import { UTXOEngine } from "./engine.js"
2022-01-03 08:48:00 +01:00
import { markdownTable } from 'https://cdn.skypack.dev/markdown-table@3?dts'
2022-01-03 13:57:03 +01:00
const utxo = new UTXOEngine({ silent: true })
2022-01-03 08:48:00 +01:00
await utxo.init()
// get 2022
const entry = utxo.entries['22']
2022-01-01 06:09:06 +01:00
// SPEAKERS
2022-01-03 08:48:00 +01:00
const speakers = entry.specs.speakers
2022-01-03 07:06:57 +01:00
const sortedSpeakers = speakers.sort((a, b) => a.name.localeCompare(b.name))
2022-01-03 08:48:00 +01:00
const tracks = entry.specs.tracks
2022-01-01 08:28:44 +01:00
const methods = {
// SPEAKERS - table
async speakersTableGen () {
const speakersTableArr = [[ 'Jméno', 'Organizace' ]]
2022-01-03 07:06:57 +01:00
for (const speaker of sortedSpeakers) {
2022-01-01 11:30:30 +01:00
const name = `**${speaker.name}**`
2022-01-01 08:28:44 +01:00
speakersTableArr.push([
2022-01-01 11:29:40 +01:00
(speaker.twitter ? `[${name}](https://twitter.com/${speaker.twitter})` : name) + (speaker.nickname ? ` (${speaker.nickname})` : ''),
2022-01-01 08:28:44 +01:00
speaker.orgs ? speaker.orgs.trim() : ''
])
}
2022-01-01 08:37:50 +01:00
const speakersTable = `Celkem přednášejících: **${speakers.length}**\n\n_(abecedně)_\n\n` + markdownTable(speakersTableArr)
2022-01-01 08:28:44 +01:00
//console.log(speakersTable)
return speakersTable
},
// SPEAKERS - leads
async speakersLeadsGen () {
const speakersLeadsArr = []
2022-01-03 07:06:57 +01:00
for (const speaker of sortedSpeakers.filter(speaker => speaker.lead)) {
2022-01-01 08:35:14 +01:00
const orgs = speaker.orgs ? `\n* ${speaker.orgs.trim('\n')}` : ''
2022-01-01 08:28:44 +01:00
const socials = []
if (speaker.twitter) {
socials.push(`Twitter: [@${speaker.twitter}](https://twitter.com/${speaker.twitter})`)
}
if (speaker.web) {
socials.push(`Web: [${speaker.web.name ? speaker.web.name : speaker.name}](${speaker.web.url})`)
}
2022-01-01 10:38:14 +01:00
const img = `![](https://spec.utxo.cz/22/photos/speakers/${speaker.id}-sm.png)`
2022-01-01 08:35:14 +01:00
const item = `### ${img} ${speaker.name}\n\n* ${speaker.bio.trim()}${orgs}\n* ${socials.join(', ')}`;
2022-01-01 08:28:44 +01:00
speakersLeadsArr.push(item)
}
const speakersLeads = `_(abecedně)_\n\n` + speakersLeadsArr.join('\n\n')
//console.log(speakersLeads)
return speakersLeads
},
// SPEAKERS - write file
async speakersBuild () {
const speakersDocFile = './docs/prednasejici.md'
const speakersText = await Deno.readTextFile(speakersDocFile)
2022-01-01 08:53:21 +01:00
let output = speakersText
output = output.replace(/## Významní hosté([\s\S]+)## Seznam/m, `## Významní hosté\n\n${await methods.speakersLeadsGen()}\n\n## Seznam`)
output = output.replace(/## Seznam všech přednášejících([\s\S]+)### Datový/m, `## Seznam všech přednášejících\n\n${await methods.speakersTableGen()}\n\n### Datový`)
2022-01-01 08:28:44 +01:00
await Deno.writeTextFile(speakersDocFile, output)
2022-01-01 10:04:14 +01:00
},
// TRACKS
async tracksGen () {
const output = []
for (const track of tracks) {
output.push(`<details>\n\n<summary>${track.name}</summary>\n\n${track.examples.trim()}\n\n</details>`)
}
return `Přednášky a workshopy budou rozděleny do **${tracks.length} tématických programových sekcí**. Níže naleznete jejich přehled a relevantní příklady.\n\n` + output.join('\n\n')
},
async tracksBuild () {
const sourceFile = './docs/hlavni-program.md'
const sourceText = await Deno.readTextFile(sourceFile)
let output = sourceText
output = output.replace(/## Programové sekce([\s\S]+)## Časová/m, `## Programové sekce\n\n${await methods.tracksGen()}\n\n## Časová`)
await Deno.writeTextFile(sourceFile, output)
2022-01-07 09:57:42 +01:00
},
// FAQs
async faqsGen () {
const output = []
for (const item of entry.specs.faqs) {
output.push(`<details>\n\n<summary>${item.question.trim()}</summary>\n\n${item.answer.trim()}\n\n</details>`)
}
return output.join("\n\n")
},
async faqsBuild () {
const docFile = './docs/faq.md'
const docText = await Deno.readTextFile(docFile)
const faqs = await this.faqsGen()
let output = docText
output = output.replace(/# FAQ[\s\S]+/m, `# FAQ\n\n${faqs}\n`)
// TODO replace
await Deno.writeTextFile(docFile, output)
2022-01-01 06:09:06 +01:00
}
}
2022-01-07 09:57:42 +01:00
2022-01-01 06:09:06 +01:00
2022-01-01 08:28:44 +01:00
if (!Deno.args[0]) {
await methods.speakersBuild()
2022-01-01 10:04:14 +01:00
await methods.tracksBuild()
2022-01-07 09:57:42 +01:00
await methods.faqsBuild()
2022-01-01 08:28:44 +01:00
console.log('done')
} else {
console.log(await methods[Deno.args[0]]())
}
2022-01-01 06:45:53 +01:00