feat: Multiple book improvements
- Format spell tables like they are in the book - Add permalinks to headers - Formatting - Book-wide search
This commit is contained in:
49
scripts/spells-to-html.js
Normal file
49
scripts/spells-to-html.js
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('node:fs')
|
||||
const path = require('node:path')
|
||||
const { parse } = require('yaml')
|
||||
|
||||
const ymlPath = path.join(__dirname, "..", "data", "spells.yml");
|
||||
const data = parse(fs.readFileSync(ymlPath, "utf8"));
|
||||
|
||||
const columns = ["name", "cost", "targets", "duration"];
|
||||
|
||||
const myEscape = (s) =>
|
||||
String(s ?? "")
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">");
|
||||
|
||||
const generateTable = (spells, class_) => {
|
||||
const rows = spells
|
||||
.filter((elem) => elem.class === class_)
|
||||
.map(
|
||||
(spell) =>
|
||||
` <tr>\n${columns.map((col) => ` <td>${myEscape(spell[col])}</td>`).join("\n")}\n </tr><tr><td colspan="4">${spell["description"]}</td></tr>`,
|
||||
)
|
||||
.join("\n");
|
||||
|
||||
const headers = columns
|
||||
.map((col) => ` <th>${col.charAt(0).toUpperCase() + col.slice(1)}</th>`)
|
||||
.join("\n");
|
||||
|
||||
return `<table>
|
||||
<thead>
|
||||
<tr>
|
||||
${headers}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
${rows}
|
||||
</tbody>
|
||||
</table>
|
||||
`;
|
||||
};
|
||||
|
||||
["arcanist", "chimerist", "elementalist", "entropist", "spiritist"].forEach(
|
||||
(class_) => {
|
||||
process.stdout.write(`<h2>${class_} Spells</h2>\n`)
|
||||
process.stdout.write(generateTable(data.spells, class_));
|
||||
},
|
||||
);
|
||||
Reference in New Issue
Block a user