diff --git a/lib/generate_layout.js b/lib/generate_layout.js index 6f3dde4..da12e85 100644 --- a/lib/generate_layout.js +++ b/lib/generate_layout.js @@ -1,6 +1,4 @@ -module.exports = (tree, manifest) => { - let navigation = generateNavigation(tree); - +module.exports = (navigation, manifest) => { return (page, content) => ` @@ -19,34 +17,3 @@ module.exports = (tree, manifest) => { `; }; - -// TODO: Implement a real generateNavigation function -function generateNavigation(tree) { - return ``; -} - -// function generateNavigation(pages) { -// if(pages.length === 0) { -// return ""; -// } - -// let lis = pages.map(page => -// `
  • ${generateTitle(page)}${generateNavigation(page.children)}
  • `). -// join("\n"); - -// return ``; -// } - -// function generateTitle(page) { -// return page.file ? `${page.heading}` : -// `${page.heading}`; -// } diff --git a/lib/navigation.js b/lib/navigation.js new file mode 100644 index 0000000..365ec00 --- /dev/null +++ b/lib/navigation.js @@ -0,0 +1,30 @@ +module.exports = class Navigation { + constructor({ baseURI }) { + this.baseURI = baseURI; + } + + generate(tree) { + let nodes = tree.children; + if(!nodes) { + return ""; + } + + let result = []; + + for(let element of nodes.values()) { + result.push(this.item(element, this.generate(element))); + } + + return this.list(result); + } + + // generate the markup for a node and its rendered children, overwrite at will + item(node, children) { + return `
  • ${node.title}${children}
  • `; + } + + // generate the markup for a list of nodes, overwrite at will + list(renderedNodes) { + return ``; + } +}; diff --git a/lib/site.js b/lib/site.js index a15a2d7..9a2b66c 100644 --- a/lib/site.js +++ b/lib/site.js @@ -7,6 +7,7 @@ let path = require("path"); let { promisify } = require("util"); let PageRenderer = require("./page_renderer"); let generateLayout = require("./generate_layout"); +let Navigation = require("./navigation"); let writeFile = promisify(fs.writeFile); @@ -75,7 +76,8 @@ module.exports = class Site { await Promise.all(preperations); - let layout = generateLayout(tree, this.assetManager.manifest); + let navigation = new Navigation({ baseURI: this.baseURI }); + let layout = generateLayout(navigation.generate(tree), this.assetManager.manifest); let pageRenderer = new PageRenderer({ renderers, layout }); let writes = tree.map(async page => { diff --git a/test/expectations/atoms/button/index.html b/test/expectations/atoms/button/index.html index 256f32d..9224965 100644 --- a/test/expectations/atoms/button/index.html +++ b/test/expectations/atoms/button/index.html @@ -8,16 +8,7 @@ - +

    Button

    My favorite button:

    diff --git a/test/expectations/atoms/index.html b/test/expectations/atoms/index.html index 9734dbb..7c72e30 100644 --- a/test/expectations/atoms/index.html +++ b/test/expectations/atoms/index.html @@ -8,16 +8,7 @@ - +

    Atoms

    indivisible units

    diff --git a/test/expectations/atoms/strong/index.html b/test/expectations/atoms/strong/index.html index f3100a7..3d22b7b 100644 --- a/test/expectations/atoms/strong/index.html +++ b/test/expectations/atoms/strong/index.html @@ -8,16 +8,7 @@ - +

    strong

    This is how we flex around here.

    diff --git a/test/expectations/index.html b/test/expectations/index.html index dbfd893..9ad5641 100644 --- a/test/expectations/index.html +++ b/test/expectations/index.html @@ -8,16 +8,7 @@ - +

    My Style Guide

    welcome to your style guide

    diff --git a/test/test_navigation.js b/test/test_navigation.js new file mode 100644 index 0000000..83f0bc3 --- /dev/null +++ b/test/test_navigation.js @@ -0,0 +1,16 @@ +/* global describe, it */ +let generatePageTree = require("../lib/tree"); +let Navigation = require("../lib/navigation"); +let { assertSame, fixturesPath, fixturesDir } = require("./util"); + +describe("navigation", () => { + it("should generate a navigation", async () => { + let descriptors = require(fixturesPath("pages.js")); + let tree = generatePageTree(descriptors, fixturesDir); + await Promise.all(tree.map(async page => page.load())); + + let navigation = new Navigation({ baseURI: "/" }); + let result = navigation.generate(tree); + assertSame(result, ''); + }); +}); diff --git a/test/test_site.js b/test/test_site.js index 354872a..247da3b 100644 --- a/test/test_site.js +++ b/test/test_site.js @@ -25,7 +25,7 @@ describe("site model", () => { it("generates HTML files", async () => { let config = { source: require(fixturesPath("./pages.js")), - target: "./dist" // FIXME: use temporary directory instead + target: "./dist" }; let site = new Site(config, assetManager);