Skip to content

Commit 4721f49

Browse files
BounceyQuincyLarson
authored andcommitted
[WIP]DevDocs-ify SideNav (freeCodeCamp#129)
* Drill down menu * Update site title on navigation and add canonical link * remove shouldComponentUpdate * Fix SQL alter table article and normalise * Refactor for Feedback
1 parent bca2574 commit 4721f49

File tree

22 files changed

+715
-436
lines changed

22 files changed

+715
-436
lines changed

Diff for: .babelrc

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"presets": ["es2015", "react"]
3+
}

Diff for: _normaliseArticles.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ function info(str, colour = 'red') {
1313
const metaRE = /---[\W\w]*?---\n*?/;
1414
const isAFileRE = /(\.md|\.jsx?|\.html?)$/;
1515
const shouldBeIgnoredRE = /^(\_|\.)/;
16-
const isAStubRE = /This\sis\sa\sstub\.\s\[Help\sour\scommunity\sexpand\sit\]/;
16+
const isAStubRE = /This\sis\sa\sstub.+?Help\sour\scommunity\sexpand\sit/;
1717
const markdownLinkRE = /\!?\[.*?\]\(.+?\)/g;
1818
const httpsRE = /https?\:\/\//;
1919

Diff for: gatsby-browser.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import React from 'react';
2+
import PropTypes from 'prop-types';
3+
import { BrowserRouter as Router } from 'react-router-dom';
4+
import { Provider } from 'react-redux';
5+
6+
import store from './src/store';
7+
8+
const propTypes = {
9+
children: PropTypes.node.isRequired
10+
};
11+
12+
exports.replaceRouterComponent = ({ history }) => {
13+
14+
const ConnectedRouterWrapper = ({ children }) => (
15+
<Provider store={ store }>
16+
<Router history={ history }>{ children }</Router>
17+
</Provider>
18+
);
19+
ConnectedRouterWrapper.displayName = 'ConnectRouterWrapper';
20+
ConnectedRouterWrapper.propTypes = propTypes;
21+
22+
return ConnectedRouterWrapper;
23+
};
24+

Diff for: gatsby-srr.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import React from 'react';
2+
import { Provider } from 'react-redux';
3+
import { renderToString } from 'react-dom/server';
4+
5+
import store from './src/store';
6+
7+
exports.replaceRenderer = ({ bodyComponent, replaceBodyHTMLString }) => {
8+
9+
const ConnectedBody = () => (
10+
<Provider store={ store }>
11+
{ bodyComponent }
12+
</Provider>
13+
);
14+
replaceBodyHTMLString(renderToString(<ConnectedBody/>));
15+
};

Diff for: package.json

+22-15
Original file line numberDiff line numberDiff line change
@@ -13,32 +13,41 @@
1313
"eslint-plugin-jsx-a11y": "^5.0.3",
1414
"eslint-plugin-react": "^7.0.0",
1515
"fs-extra": "^3.0.1",
16-
"gatsby": "^1.0.1",
17-
"gatsby-link": "^1.0.1",
16+
"gatsby": "^1.6.6",
17+
"gatsby-link": "^1.6.5",
1818
"gatsby-plugin-react-helmet": "^1.0.1",
19-
"gatsby-plugin-sharp": "^1.0.0-beta.7",
19+
"gatsby-plugin-sharp": "^1.6.0",
2020
"gatsby-plugin-sitemap": "^1.2.0",
21-
"gatsby-remark-copy-linked-files": "^1.0.0-beta.6",
22-
"gatsby-remark-images": "^1.0.0-beta.6",
23-
"gatsby-remark-prismjs": "^1.0.0-beta.6",
24-
"gatsby-remark-responsive-iframe": "^1.0.0-beta.6",
25-
"gatsby-remark-smartypants": "^1.0.0-beta.6",
26-
"gatsby-source-filesystem": "^1.0.0-beta.6",
27-
"gatsby-transformer-remark": "^1.0.0-beta.6",
21+
"gatsby-remark-copy-linked-files": "^1.5.0",
22+
"gatsby-remark-images": "^1.5.0",
23+
"gatsby-remark-prismjs": "^1.2.0",
24+
"gatsby-remark-responsive-iframe": "^1.4.1",
25+
"gatsby-remark-smartypants": "^1.4.1",
26+
"gatsby-source-filesystem": "^1.4.1",
27+
"gatsby-transformer-remark": "^1.6.3",
2828
"react": "^15.6.1",
2929
"react-bootstrap": "^0.31.0",
3030
"react-dom": "^15.6.1",
3131
"react-freecodecamp-search": "^0.2.5",
32+
"react-redux": "^5.0.5",
3233
"react-typography": "^0.15.0",
34+
"redux": "^3.7.2",
35+
"redux-actions": "^2.2.1",
36+
"redux-create-types": "0.0.1",
3337
"rx": "^4.1.0",
3438
"typography": "^0.15.8",
3539
"typography-breakpoint-constants": "^0.14.0",
3640
"typography-plugin-code": "^0.15.9"
3741
},
3842
"devDependencies": {
43+
"babel-cli": "^6.24.1",
44+
"babel-preset-es2015": "^6.24.1",
45+
"babel-preset-react": "^6.24.1",
3946
"chalk": "^2.0.1",
4047
"gh-pages": "^0.12.0",
41-
"pre-commit": "^1.2.2"
48+
"pre-commit": "^1.2.2",
49+
"redux-devtools-extension": "^2.13.2",
50+
"warning": "^3.0.0"
4251
},
4352
"keywords": [
4453
"freeCodeCamp",
@@ -48,10 +57,8 @@
4857
"license": "MIT",
4958
"main": "n/a",
5059
"scripts": {
51-
"build": "node seed && gatsby build",
52-
"deploy": "node seed && gatsby build --prefix-paths && gh-pages -d public",
53-
"dev": "node seed && gatsby develop",
54-
"format": "prettier --trailing-comma es5 --no-semi --single-quote --write \"pages/*.js\" \"utils/*.js\" \"wrappers/*.js\" \"html.js\"",
60+
"build": "node seed && node --max_old_space_size=4096 ./node_modules/.bin/gatsby build",
61+
"dev": "node seed && node --max_old_space_size=4096 ./node_modules/.bin/gatsby develop",
5562
"lint": "eslint --ext .js,.jsx --ignore-path .gitignore .",
5663
"normalise": "node _normaliseArticles.js",
5764
"test": "echo \"Error: no test specified\" && exit 1"

Diff for: src/components/NavPanel.jsx

-59
This file was deleted.

Diff for: src/components/SideNav.jsx

-63
This file was deleted.

Diff for: src/components/NavItem.jsx renamed to src/components/nav/NavItem.jsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import React from 'react';
22
import PropTypes from 'prop-types';
33
import Link from 'gatsby-link';
44

5+
import { navItemLi, navItemTitle } from './sideNav.module.css';
6+
57
const propTypes = {
68
path: PropTypes.string,
79
router: PropTypes.object,
@@ -11,9 +13,9 @@ const propTypes = {
1113
function NavItem(props) {
1214
const { path, title } = props;
1315
return (
14-
<li role='presentation'>
16+
<li className={ navItemLi } role='presentation'>
1517
<Link role='presentation' to={ path }>
16-
<span>{ title }</span>
18+
<span className={ navItemTitle }>{ title }</span>
1719
</Link>
1820
</li>
1921
);

Diff for: src/components/nav/NavPanel.jsx

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import React, { PureComponent } from 'react';
2+
import PropTypes from 'prop-types';
3+
import Panel from 'react-bootstrap/lib/Panel';
4+
5+
import {
6+
body,
7+
caret,
8+
expanded,
9+
navPanelUl,
10+
panel,
11+
title as titleStyle
12+
} from './sideNav.module.css';
13+
14+
const propTypes = {
15+
children: PropTypes.any,
16+
handleClick: PropTypes.func.isRequired,
17+
isExpanded: PropTypes.bool,
18+
path: PropTypes.string,
19+
title: PropTypes.string
20+
};
21+
22+
23+
class NavPanel extends PureComponent {
24+
constructor() {
25+
super();
26+
27+
this.renderHeader = this.renderHeader.bind(this);
28+
this.handleHeaderClick = this.handleHeaderClick.bind(this);
29+
}
30+
31+
handleHeaderClick() {
32+
const { push } = this.context.router.history;
33+
const { path } = this.props;
34+
this.props.handleClick(path);
35+
push(path);
36+
}
37+
38+
renderHeader(isExpanded, title) {
39+
return (
40+
<div className={ titleStyle } onClick={ this.handleHeaderClick }>
41+
<span
42+
className={
43+
'caret ' +
44+
(
45+
isExpanded ?
46+
`${caret} ${expanded}` :
47+
caret
48+
)
49+
}
50+
/>
51+
<span>
52+
{ title }
53+
</span>
54+
</div>
55+
);
56+
}
57+
58+
render() {
59+
const { children, isExpanded, title } = this.props;
60+
return (
61+
<Panel
62+
bsClass={ `${panel} panel` }
63+
collapsible={ true }
64+
expanded={ isExpanded }
65+
header={ this.renderHeader(isExpanded, title) }
66+
>
67+
<div className={ isExpanded ? body : '' }>
68+
<ul className={ navPanelUl }>
69+
{ children }
70+
</ul>
71+
</div>
72+
</Panel>
73+
);
74+
}
75+
}
76+
NavPanel.contextTypes = {
77+
router: PropTypes.object
78+
};
79+
NavPanel.displayName = 'NavPanel';
80+
NavPanel.propTypes = propTypes;
81+
82+
export default NavPanel;

0 commit comments

Comments
 (0)