Andy Stark d0f5bad894 [ADF-2679] Added first tutorials (#3186)
* [ADF-2679] Updated tutorial index script and added the first few tutorials

* [ADF-2679] Minor fixes to README and index script
2018-04-13 14:50:29 +01:00

142 lines
3.9 KiB
TypeScript

import * as fs from "fs";
import * as path from "path";
import * as replaceSection from "mdast-util-heading-range";
import * as remark from "remark";
import * as stringify from "remark-stringify";
import * as frontMatter from "remark-frontmatter";
import * as yaml from "js-yaml";
import * as combyne from "combyne";
import * as unist from "../unistHelpers";
const tutFolder = path.resolve("..", "docs", "tutorials");
const templateFolder = path.resolve(".", "config", "DocProcessor", "templates");
const userGuideFolder = path.resolve("..", "docs", "user-guide");
export function initPhase(aggData) {}
export function readPhase(tree, pathname, aggData) {}
export function aggPhase(aggData) {
let indexDocData = getIndexDocData();
let templateName = path.resolve(templateFolder, "tutIndex.combyne");
let templateSource = fs.readFileSync(templateName, "utf8");
let template = combyne(templateSource);
let mdText = template.render(indexDocData);
mdText = mdText.replace(/^ +\|/mg, "|");
let newSection = remark().data("settings", {paddedTable: false, gfm: false}).parse(mdText.trim()).children;
let tutIndexFile = path.resolve(tutFolder, "README.md");
let tutIndexText = fs.readFileSync(tutIndexFile, "utf8");
let tutIndexMD = remark().data("settings", {paddedTable: false, gfm: false}).parse(tutIndexText);
replaceSection(tutIndexMD, "Tutorials", (before, section, after) => {
newSection.unshift(before);
newSection.push(after);
return newSection;
});
fs.writeFileSync(tutIndexFile, remark().use(frontMatter, {type: 'yaml', fence: '---'}).data("settings", {paddedTable: false, gfm: false}).stringify(tutIndexMD));
}
export function updatePhase(tree, pathname, aggData) {
return false;
}
function getIndexDocData() {
let indexFile = path.resolve(userGuideFolder, "summary.json");
let summaryArray = JSON.parse(fs.readFileSync(indexFile, "utf8"));
let indexArray = [];
summaryArray.forEach(element => {
if (element["title"] === "Tutorials") {
indexArray = element["children"];
}
});
let result = {
tuts: []
};
indexArray.forEach(element => {
let tutData = { link: element["file"] };
let tutFile = path.resolve(tutFolder, element["file"]);
let tutFileText = fs.readFileSync(tutFile, "utf8");
let tutMD = remark().use(frontMatter, ["yaml"]).parse(tutFileText);
let metadata = getDocMetadata(tutMD);
if (metadata["Level"]){
tutData["level"] = metadata["Level"];
} else {
tutData["level"] = "";
}
let briefDesc = getFirstParagraph(tutMD);
let briefDescText = remark()
.use(frontMatter, {type: 'yaml', fence: '---'})
.data("settings", {paddedTable: false, gfm: false})
.stringify(briefDesc);
tutData["briefDesc"] = briefDescText;
let title = getFirstHeading(tutMD);
let titleText = remark()
.use(frontMatter, {type: 'yaml', fence: '---'})
.data("settings", {paddedTable: false, gfm: false})
.stringify(title.children[0]);
tutData["title"] = titleText;
result.tuts.push(tutData);
});
return result;
}
function getDocMetadata(tree) {
if (tree.children[0].type == "yaml") {
return yaml.load(tree.children[0].value);
} else {
return {};
}
}
function getFirstParagraph(tree) {
let s = 0;
for (;(s < tree.children.length) && !unist.isParagraph(tree.children[s]); s++) {}
if (s < tree.children.length) {
return tree.children[s];
} else {
return null;
}
}
function getFirstHeading(tree) {
let s = 0;
for (;(s < tree.children.length) && !unist.isHeading(tree.children[s]); s++) {}
if (s < tree.children.length) {
return tree.children[s];
} else {
return null;
}
}