diff --git a/static-pages/index.pug b/static-pages/index.pug index baaf1e3..16910ad 100644 --- a/static-pages/index.pug +++ b/static-pages/index.pug @@ -1,7 +1,7 @@ extends ../templates/default-page.pug block vars - - var title='Overview' + - var title='AOE Technology Radar' block content .headline-group @@ -11,11 +11,7 @@ block content = ' ' | March 2017 div.quadrant-grid - //- - pre - = JSON.stringify(radar, 0, 2) - - each quadrant, quadrantName in radar + each quadrant, quadrantName in groupByQuadrants(radar) .quadrant-grid__quadrant .quadrant-section .quadrant-section__header diff --git a/static-pages/overview.pug b/static-pages/overview.pug new file mode 100644 index 0000000..cd913b3 --- /dev/null +++ b/static-pages/overview.pug @@ -0,0 +1,12 @@ +extends ../templates/default-page.pug + +block vars + - var title='Technologies Overview' + +block content + .headline-group + .hero-headline + | Technologies Overview + div.item-index + each items, letter in groupByFirstLetter(radar) + .item-index__letter= letter diff --git a/tasks/build.js b/tasks/build.js index 004af6d..2ec328b 100644 --- a/tasks/build.js +++ b/tasks/build.js @@ -14,7 +14,7 @@ import { outputRadar(radar); // const radarByQuadrants = groupByQuadrants(radar); - createStatic(radar.quadrants); + createStatic(radar); console.log('Built radar'); // console.log(JSON.stringify(radar, null, 2)); diff --git a/tasks/radar.js b/tasks/radar.js index 2ff20f4..c5e9de5 100644 --- a/tasks/radar.js +++ b/tasks/radar.js @@ -20,12 +20,7 @@ export const createRadar = async (tree) => { const items = createItems(revisions); const flaggedItems = flagWithIsNew(items, allReleases); - const quadrants = groupByQuadrants(flaggedItems); - - return { - items: flaggedItems, - quadrants, - } + return flaggedItems; }; export const groupByQuadrants = (items) => ( @@ -35,6 +30,25 @@ export const groupByQuadrants = (items) => ( }), {}) ); +const addItemToQuadrant = (quadrant = {}, item) => ({ + ...quadrant, + [item.attributes.ring]: addItemToRing(quadrant[item.attributes.ring], item), +}); + +export const groupByFirstLetter = (items) => ( + items.reduce((letterIned, item) => ({ + ...letterIned, + [getFirstLetter(item)]: addItemToFirstLetterIndex(letterIned[getFirstLetter(item)], item), + }), {}) +); + +const addItemToFirstLetterIndex = (letterIned = [], item) => ([ + ...letterIned, + item, +]); + +export const getFirstLetter = (item) => item.attributes.title.substr(0,1).toUpperCase(); + const createRevisionsFromFiles = (fileNames) => ( Promise.all(fileNames.map((fileName) => { @@ -147,10 +161,13 @@ const revisionCreatesNewHistoryEntry = (revision) => { typeof revision.attributes.ring !== 'undefined'; }; -export const outputRadar = ({ quadrants, items }) => { - Object.entries(quadrants).map(async ([quadrantName, quadrant]) => ( - await outputQuadrantPage(quadrantName, quadrant) +export const outputRadar = (items) => { + const quadrants = groupByQuadrants(items); + + Object.entries(quadrants).map(([quadrantName, quadrant]) => ( + outputQuadrantPage(quadrantName, quadrant) )); + return Promise.all( items.map(async (item) => { @@ -199,11 +216,6 @@ const isNewItem = (item, allReleases) => { return item.revisions[0].release === allReleases[allReleases.length-1] } -const addItemToQuadrant = (quadrant = {}, item) => ({ - ...quadrant, - [item.attributes.ring]: addItemToRing(quadrant[item.attributes.ring], item), -}); - const addItemToRing = (ring = [], item) => ([ ...ring, item, diff --git a/tasks/template.js b/tasks/template.js index c9e627d..be4f4e4 100644 --- a/tasks/template.js +++ b/tasks/template.js @@ -1,5 +1,6 @@ import pug from 'pug'; import { relativePath } from './file'; +import { groupByQuadrants, groupByFirstLetter } from './radar'; const templateFolder = 'templates'; @@ -14,6 +15,8 @@ export const vars = (vars) => ({ return mappings[text.trim()] || '-'; }, + groupByQuadrants, + groupByFirstLetter, ...vars, }) diff --git a/templates/default-page.pug b/templates/default-page.pug index 93ca524..bfea78e 100644 --- a/templates/default-page.pug +++ b/templates/default-page.pug @@ -13,9 +13,9 @@ block body .branding__content .nav .nav__item - a.icon-link(href='/') How to Use Technology Radar? + a.icon-link(href='/howto.html') How to Use Technology Radar? .nav__item - a.icon-link(href='/') Technologies Overview + a.icon-link(href='/overview.html') Technologies Overview .page__content block content if !noFooter