diff --git a/common/config.js b/common/config.js
new file mode 100644
index 0000000..d848b4a
--- /dev/null
+++ b/common/config.js
@@ -0,0 +1,18 @@
+export const getPageNames = (radar) => {
+ return [
+ 'index',
+ 'overview',
+ 'help',
+ 'foo/bar',
+ ]
+}
+
+const mappings = {
+ 'languages-and-frameworks': 'Languages & Frameworks',
+ 'methods-and-patterns': 'Methods & Patterns',
+ 'platforms-and-aoe-services': 'Platforms and AOE Services',
+ 'tools': 'Tools',
+};
+
+
+const formatRelease = (release) => moment(release, 'YYYY-MM-DD').format('MMM YYYY');
diff --git a/tasks/file.js b/common/file.js
similarity index 84%
rename from tasks/file.js
rename to common/file.js
index 4ff8f38..61de168 100644
--- a/tasks/file.js
+++ b/common/file.js
@@ -1,3 +1,4 @@
+import { outputFile } from 'fs-extra';
import path from 'path';
import { walk } from 'walk';
@@ -13,10 +14,6 @@ export const staticPath = (...pathInSrc) => (
relativePath('static-pages', ...pathInSrc)
);
-export const templatesPath = (...pathInSrc) => (
- relativePath('templates', ...pathInSrc)
-);
-
export const stylesPath = (...pathInSrc) => (
relativePath('styles', ...pathInSrc)
);
@@ -37,10 +34,6 @@ export const getAllMarkdownFiles = (folder) => (
getAllFiles(folder, isMarkdownFile)
);
-export const getAllPugFiles = (folder) => (
- getAllFiles(folder, isPugFile)
-);
-
const getAllFiles = (folder, predicate) => (
new Promise((resolve, reject) => {
const walker = walk(folder, { followLinks: false });
@@ -69,4 +62,14 @@ const getAllFiles = (folder, predicate) => (
const isMarkdownFile = (name) => name.match(/\.md$/);
-const isPugFile = (name) => name.match(/\.pug$/);
+export const save = (html, fileName) => (
+ new Promise((resolve, reject) => (
+ outputFile(distPath(fileName), html, (err, data) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(data);
+ }
+ })
+ ))
+);
diff --git a/tasks/radar.js b/common/radar.js
similarity index 80%
rename from tasks/radar.js
rename to common/radar.js
index 203c94c..20bccae 100644
--- a/tasks/radar.js
+++ b/common/radar.js
@@ -7,11 +7,6 @@ import {
distPath,
getAllMarkdownFiles,
} from './file';
-import {
- item as itemTemplate,
- quadrant as quadrantTemplate,
- vars,
-} from './template';
export const createRadar = async (tree) => {
const fileNames = (await getAllMarkdownFiles(radarPath()));
@@ -182,50 +177,6 @@ const revisionCreatesNewHistoryEntry = (revision) => {
typeof revision.ring !== 'undefined';
};
-export const outputRadar = ({ items }) => {
- const quadrants = groupByQuadrants(items);
-
- Object.entries(quadrants).map(([quadrantName, quadrant]) => (
- outputQuadrantPage(quadrantName, quadrant)
- ));
-
- return Promise.all(
- items.map(async (item) => {
-
- // Object.entries(quadrant).map(([itemName, item]) => (
- new Promise((resolve, reject) => {
- outputFile(distPath(item.quadrant, `${item.name}.html`), itemTemplate(vars({
- itemsInRing: quadrants[item.quadrant][item.ring],
- item,
- })), (err, data) => {
- if (err) {
- reject(err);
- } else {
- resolve(data);
- }
- })
- })
- // ))
- })
- );
-};
-
-
-const outputQuadrantPage = (quadrantName, quadrant) => (
- new Promise((resolve, reject) => {
- outputFile(distPath(`${quadrantName}.html`), quadrantTemplate(vars({
- quadrantName,
- quadrant,
- })), (err, data) => {
- if (err) {
- reject(err);
- } else {
- resolve(data);
- }
- })
- })
-)
-
const flagWithIsNew = (items, allReleases) => (
items.map((item) => ({
...item,
diff --git a/components/PageOverview.js b/components/PageOverview.js
deleted file mode 100644
index 62276d3..0000000
--- a/components/PageOverview.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import HeroHeadline from './HeroHeadline';
-
-export default function PageOverview() {
- return (
-
- Overview
-
- );
-}
diff --git a/js/client.js b/js/client.js
new file mode 100644
index 0000000..a5b7a49
--- /dev/null
+++ b/js/client.js
@@ -0,0 +1,25 @@
+import React from 'react'
+import { render } from 'react-dom'
+import { createStore } from 'redux'
+import { Provider } from 'react-redux'
+import App from './components/App'
+
+const appReducer = (state = {}, action) => {
+ return state;
+}
+
+// Grab the state from a global variable injected into the server-generated HTML
+const preloadedState = window.__TECHRADAR__;
+
+// Allow the passed state to be garbage-collected
+delete window.__TECHRADAR__;
+
+// Create Redux store with initial state
+const store = createStore(appReducer, preloadedState)
+
+render(
+
+
+ ,
+ document.getElementById('root')
+)
diff --git a/components/App.js b/js/components/App.js
similarity index 100%
rename from components/App.js
rename to js/components/App.js
diff --git a/components/Header.js b/js/components/Header.js
similarity index 100%
rename from components/Header.js
rename to js/components/Header.js
diff --git a/js/components/HeadlineGroup.js b/js/components/HeadlineGroup.js
new file mode 100644
index 0000000..31dc2a2
--- /dev/null
+++ b/js/components/HeadlineGroup.js
@@ -0,0 +1,9 @@
+import React from 'react';
+
+export default function({ children }) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/components/HeroHeadline.js b/js/components/HeroHeadline.js
similarity index 100%
rename from components/HeroHeadline.js
rename to js/components/HeroHeadline.js
diff --git a/components/PageHelp.js b/js/components/PageHelp.js
similarity index 100%
rename from components/PageHelp.js
rename to js/components/PageHelp.js
diff --git a/components/PageIndex.js b/js/components/PageIndex.js
similarity index 100%
rename from components/PageIndex.js
rename to js/components/PageIndex.js
diff --git a/js/components/PageOverview.js b/js/components/PageOverview.js
new file mode 100644
index 0000000..146a1bf
--- /dev/null
+++ b/js/components/PageOverview.js
@@ -0,0 +1,86 @@
+import React from 'react';
+import classNames from 'classnames';
+import HeadlineGroup from './HeadlineGroup';
+import HeroHeadline from './HeroHeadline';
+
+const rings = ['all', 'assess', 'trial', 'hold', 'adopt'];
+
+class PageOverview extends React.Component {
+
+ constructor(...args) {
+ super(...args);
+ this.state = {
+ ring: rings[0],
+ };
+ }
+
+ handleRingClick = (ring) => (e) => {
+ e.preventDefault();
+
+ this.setState({
+ ...this.state,
+ ring,
+ });
+ }
+
+ isRingActive(ringName) {
+ return this.state.ring === ringName;
+ }
+
+ render() {
+ return (
+
+
+ Technologies Overview
+
+
+
+ {
+ rings.map(ringName => (
+
+ ))
+ }
+
+
+
+
+
+ );
+ }
+}
+
+export default PageOverview;
diff --git a/components/Router.js b/js/components/Router.js
similarity index 100%
rename from components/Router.js
rename to js/components/Router.js
diff --git a/js/radar.js b/js/radar.js
deleted file mode 100644
index 835736e..0000000
--- a/js/radar.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import filter from './filter';
-import details from './details';
-import applyPjax from './pjax';
-
-const enhanceComponent = (selector, enhancer, fromPjax = false) => {
- const $filter = [].slice.call(document.querySelectorAll(selector));
- $filter.map((e) => enhancer(e, fromPjax));
-}
-
-const enhanceComponents = (fromPjax) => {
- enhanceComponent('.js--filter', filter, fromPjax);
- enhanceComponent('.js--details', details, fromPjax);
-}
-
-applyPjax();
-
-enhanceComponents();
-document.addEventListener("pjax:success", () => enhanceComponents(true));
diff --git a/tasks/static.js b/js/server.js
similarity index 51%
rename from tasks/static.js
rename to js/server.js
index 0c8eaee..ee98b61 100644
--- a/tasks/static.js
+++ b/js/server.js
@@ -1,30 +1,14 @@
-import { outputFile } from 'fs-extra';
import React from 'react';
import { renderToString } from 'react-dom/server';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
-import { distPath } from './file';
-import App from '../components/App';
+import App from './components/App';
const appReducer = (state = {}, action) => {
return state;
}
-const getPageNames = (radar) => {
- return [
- 'index',
- 'overview',
- 'help',
- 'foo/bar',
- ]
-}
-
-export const renderApp = (radar) => {
- const pageNames = getPageNames(radar);
- pageNames.map(pageName => renderPage(radar, pageName))
-}
-
export const renderPage = (radar, pageName) => {
// Create a new Redux store instance
const store = createStore(appReducer, {
@@ -43,10 +27,10 @@ export const renderPage = (radar, pageName) => {
const preloadedState = store.getState()
// Send the rendered page back to the client
- const fullHtml = renderFullPage(html, preloadedState);
+ return renderFullPage(html, preloadedState);
// Save file
- save(fullHtml, pageName);
+ // return save(fullHtml, pageName);
}
const renderFullPage = (html, preloadedState) => {
@@ -59,34 +43,10 @@ const renderFullPage = (html, preloadedState) => {
${html}