diff --git a/.babelrc b/.babelrc index 5686105..69f50c4 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,3 @@ { - "presets": ["latest"] + "presets": ["latest", "stage-0"] } diff --git a/package.json b/package.json index 978f5c1..f01b098 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,10 @@ "async": "2.1.4", "babel-cli": "6.22.2", "babel-preset-latest": "6.22.0", + "babel-preset-stage-0": "6.22.0", "front-matter": "2.1.1", "fs-extra": "2.0.0", - "marked": "0.3.6" + "marked": "0.3.6", + "walk": "2.3.9" } } diff --git a/radar/v1/languages-and-frameworks/react.md b/radar/2016-02-01/languages-and-frameworks/react.md similarity index 100% rename from radar/v1/languages-and-frameworks/react.md rename to radar/2016-02-01/languages-and-frameworks/react.md diff --git a/radar/v1/methods-and-patterns/foo.md b/radar/2016-02-01/methods-and-patterns/foo.md similarity index 100% rename from radar/v1/methods-and-patterns/foo.md rename to radar/2016-02-01/methods-and-patterns/foo.md diff --git a/radar/v1/platforms-and-aoe-services/bar.md b/radar/2016-02-01/platforms-and-aoe-services/bar.md similarity index 100% rename from radar/v1/platforms-and-aoe-services/bar.md rename to radar/2016-02-01/platforms-and-aoe-services/bar.md diff --git a/radar/v1/tools/grunt.md b/radar/2016-02-01/tools/grunt.md similarity index 100% rename from radar/v1/tools/grunt.md rename to radar/2016-02-01/tools/grunt.md diff --git a/radar/2016-02-02/languages-and-frameworks/react.md b/radar/2016-02-02/languages-and-frameworks/react.md new file mode 100644 index 0000000..c4fa91a --- /dev/null +++ b/radar/2016-02-02/languages-and-frameworks/react.md @@ -0,0 +1,27 @@ +--- +layout: post +title: "React" +ring: adopt +--- + +Hier steht eine Einleitung über *React* - super "cool" + +Hier noch ein [link](http://www.google.de) zu google + + + +Hier steht der Rest! + +History +------- + +{% include + history-entry.html + ring="trial" + date="2017-12-10" + content="This is a history entry + + - Foo + - Bar + " +%} diff --git a/radar/2016-02-02/languages-and-frameworks/vue.md b/radar/2016-02-02/languages-and-frameworks/vue.md new file mode 100644 index 0000000..c4fa91a --- /dev/null +++ b/radar/2016-02-02/languages-and-frameworks/vue.md @@ -0,0 +1,27 @@ +--- +layout: post +title: "React" +ring: adopt +--- + +Hier steht eine Einleitung über *React* - super "cool" + +Hier noch ein [link](http://www.google.de) zu google + + + +Hier steht der Rest! + +History +------- + +{% include + history-entry.html + ring="trial" + date="2017-12-10" + content="This is a history entry + + - Foo + - Bar + " +%} diff --git a/radar/2016-02-02/methods-and-patterns/foo.md b/radar/2016-02-02/methods-and-patterns/foo.md new file mode 100644 index 0000000..a4290df --- /dev/null +++ b/radar/2016-02-02/methods-and-patterns/foo.md @@ -0,0 +1,8 @@ +--- +layout: post +title: "Foo" +ring: trial +new: true +--- + +Foo diff --git a/radar/2016-02-02/tools/grunt.md b/radar/2016-02-02/tools/grunt.md new file mode 100644 index 0000000..c93b129 --- /dev/null +++ b/radar/2016-02-02/tools/grunt.md @@ -0,0 +1,17 @@ +--- +layout: post +title: "Grunt" +ring: hold +new: true +--- + +Hier steht was über *Grunt* + +Hier noch ein [link](http://www.google.de) zu google + + + +Hier steht der Rest! + +History +------- diff --git a/scripts/create.js b/scripts/create.js index 3639aca..fd9d59a 100644 --- a/scripts/create.js +++ b/scripts/create.js @@ -9,27 +9,44 @@ import { srcPath, distPath, } from './file'; +import { + getTree, + createRadar, +} from './radar'; -const fileName = srcPath('v1/tools/grunt.md'); -console.log('<<< start creating files'); - -waterfall([ - (callback) => { - readFile(fileName, 'utf8', callback); - }, - (data, callback) => { - const item = frontmatter(data); - const html = marked(item.body); - - outputFile(distPath('test3.html'), html, callback); - } - ], - (err, results) => { - if (!err) { - console.log('done creating files >>>'); - } else { - console.error(err); - } +(async () => { + try { + const tree = await getTree(); + // console.log(JSON.stringify(tree, null, 2)); + const radar = await createRadar(tree); + console.log(JSON.stringify(radar, null, 2)); + } catch(e) { + console.error('error:', e); } -); +})() + +// +// const fileName = srcPath('v1/tools/grunt.md'); +// +// console.log('<<< start creating files'); +// +// waterfall([ +// (callback) => { +// readFile(fileName, 'utf8', callback); +// }, +// (data, callback) => { +// const item = frontmatter(data); +// const html = marked(item.body); +// +// outputFile(distPath('test3.html'), html, callback); +// } +// ], +// (err, results) => { +// if (!err) { +// console.log('done creating files >>>'); +// } else { +// console.error(err); +// } +// } +// ); diff --git a/scripts/radar.js b/scripts/radar.js new file mode 100644 index 0000000..476edf5 --- /dev/null +++ b/scripts/radar.js @@ -0,0 +1,141 @@ +import { walk } from 'walk'; +import fs, { readFileSync } from 'fs-extra'; +import path from 'path'; +import frontmatter from 'front-matter'; +import marked from 'marked'; +import waterfall from 'async/waterfall'; +import { srcPath } from './file'; + +export const getTree = () => ( + new Promise((resolve, reject) => { + const walker = walk(srcPath(), { followLinks: false }); + let radar = {}; + + walker.on("file", (root, fileStat, next) => { + if (isMarkdownFile(fileStat.name)) { + radar = addItemToRadar(radar, path.resolve(root, fileStat.name)) + } + next(); + }); + + walker.on("errors", (root, nodeStatsArray, next) => { + nodeStatsArray.forEach(function (n) { + console.error("[ERROR] " + n.name) + console.error(n.error.message || (n.error.code + ": " + n.error.path)); + }); + next(); + }); + + walker.on("end", () => { + resolve(radar); + }); + }) +); + +const isMarkdownFile = (name) => name.match(/\.md$/); + +const addItemToRadar = (radar, pathName) => { + const item = createItemFromPath(pathName); + return { + ...radar, + [item.version]: addItemToVersion(radar[item.version] || {}, item), + } +}; + +const addItemToVersion = (version, item) => { + return { + ...version, + [item.quadrant]: addItemToQuadrant(version[item.quadrant] || {}, item), + }; +}; + +const addItemToQuadrant = (quadrant, item) => { + return { + ...quadrant, + [item.name]: item.path, + }; +}; + +const createItemFromPath = (pathName) => { + const [version, quadrant, fileName] = pathName.split('/').slice(-3); + return { + version, + quadrant, + path: pathName, + name: fileName.substr(0, fileName.length - 3), + }; +}; + +export const createRadar = async (tree) => { + const versionNames = Object.keys(tree).sort(); + const radar = versionNames.reduce((radar, versionName) => { + return updateRadarWithVersion(radar, versionName, tree); + }, {}); + + return readItemsDataFromFiles(radar); +}; + +const updateRadarWithVersion = (radar, versionName, tree) => { + const version = tree[versionName]; + const quadrantNames = Object.keys(version); + return quadrantNames.reduce((updatedRadar, quadrantName) => { + return { + ...updatedRadar, + [quadrantName]: updateQuadrantWithVersion(updatedRadar[quadrantName] || {}, quadrantName, versionName, tree), + } + }, radar); +}; + +const updateQuadrantWithVersion = (quadrant, quadrantName, versionName, tree) => { + const quadrantInNewVersion = tree[versionName][quadrantName]; + const fileNames = Object.keys(quadrantInNewVersion); + return fileNames.reduce((updatedQuadrant, fileName) => { + return { + ...updatedQuadrant, + [fileName]: updateItemWithVersion(updatedQuadrant[fileName], fileName, quadrantName, versionName, tree), + } + }, quadrant); +}; + +const updateItemWithVersion = (file = { revision: 0, files: [] }, fileName, quadrantName, versionName, tree) => { + const fileInNewVersion = tree[versionName][quadrantName][fileName]; + return { + files: file.files.concat([{ + version: versionName, + file: fileInNewVersion, + }]), + }; +}; + +const readItemsDataFromFiles = (radar) => { + return Object.entries(radar).reduce((newRadar, [quadrantName, quadrant]) => { + return { + ...newRadar, + [quadrantName]: Object.entries(quadrant).reduce((newQuadrant, [itemName, item]) => { + return { + ...newQuadrant, + [itemName]: { + revisions: item.files.length, + data: mergeDataFromFiles(item.files) + }, + }; + }, {}), + } + }, {}); +}; + +const mergeDataFromFiles = (files) => { + const frontmatters = getFrontmatterForAllFiles(files); + console.log() + return frontmatters; +}; + +const getFrontmatterForAllFiles = (files) => { + return files.map(({ file }) => { + return getFrontmatter(file); + }) +}; + +const getFrontmatter = (fileName) => { + return frontmatter(readFileSync(fileName, 'utf8')); +};