|
9 | 9 | var React = require('react');
|
10 | 10 | import { toSlug } from './Header';
|
11 | 11 |
|
12 |
| -// thisPageID is the id of the rendering page |
| 12 | +export default ({ site, page, firstURL }) => |
| 13 | + <div className="nav-docs"> |
| 14 | + {getCategories(site, page.dir, firstURL).map(category => |
| 15 | + <SidebarForCategory pageID={page.id} category={category} key={category.name} /> |
| 16 | + )} |
| 17 | + </div> |
| 18 | + |
| 19 | +// pageID is the id of the rendering page |
13 | 20 | // category is the category object to render a sidebar for
|
14 |
| -function sidebarForCategory(thisPageID, category) { |
15 |
| - var listItems = []; |
16 |
| - for (var page of category.links) { |
17 |
| - |
| 21 | +function SidebarForCategory({ pageID, category }) { |
| 22 | + const listItems = category.links.map(page => { |
18 | 23 | const shouldOpenInNewWindow = page.url.slice(0, 4) === 'http';
|
19 | 24 | const target = shouldOpenInNewWindow ? '_blank' : null;
|
20 | 25 | const rel = shouldOpenInNewWindow ? 'noopener noreferrer' : null;
|
21 | 26 |
|
22 |
| - var marginLeft = page.indent ? 20 : 0; |
23 |
| - |
24 |
| - // Sublinks to any page sub-parts |
25 |
| - var sublinkUL = page.sublinks && |
26 |
| - <ul>{page.sublinks.split(',').map(sublink => |
27 |
| - <li key={sublink}> |
28 |
| - <a target={target} rel={rel} href={page.url + '#' + toSlug(sublink)}> |
29 |
| - {sublink} |
30 |
| - </a> |
31 |
| - </li> |
32 |
| - )}</ul>; |
33 |
| - |
34 | 27 | // Link for the main page overall
|
35 |
| - listItems.push( |
| 28 | + return ( |
36 | 29 | <li key={page.permalink}>
|
37 | 30 | <a
|
38 | 31 | target={target}
|
39 | 32 | rel={rel}
|
40 |
| - style={{marginLeft: marginLeft}} |
41 |
| - className={page.id === thisPageID ? 'active' : ''} |
| 33 | + style={{ marginLeft: page.indent ? 20 : 0 }} |
| 34 | + className={page.id === pageID ? 'active' : null} |
42 | 35 | href={page.url}>
|
43 | 36 | {page.sidebarTitle || page.title}
|
44 | 37 | </a>
|
45 |
| - {sublinkUL} |
| 38 | + {page.sublinks && // Sublinks to any page sub-parts |
| 39 | + <ul> |
| 40 | + {page.sublinks.split(',').map(sublink => |
| 41 | + <li key={sublink}> |
| 42 | + <a target={target} rel={rel} href={page.url + '#' + toSlug(sublink)}> |
| 43 | + {sublink} |
| 44 | + </a> |
| 45 | + </li> |
| 46 | + )} |
| 47 | + </ul> |
| 48 | + } |
46 | 49 | </li>
|
47 | 50 | );
|
48 |
| - } |
| 51 | + }); |
49 | 52 |
|
50 | 53 | return (
|
51 |
| - <div key={category.name}> |
| 54 | + <div> |
52 | 55 | <h3>{category.name}</h3>
|
53 | 56 | <ul>{listItems}</ul>
|
54 | 57 | </div>
|
55 | 58 | );
|
56 | 59 | }
|
57 | 60 |
|
58 |
| -var DocsSidebar = React.createClass({ |
59 |
| - render: function() { |
60 |
| - return <div className="nav-docs"> |
61 |
| - {getCategories(this.props.site, this.props.page.dir, this.props.firstURL).map((category) => |
62 |
| - sidebarForCategory(this.props.page.id, category) |
63 |
| - )} |
64 |
| - </div>; |
65 |
| - } |
66 |
| -}); |
67 |
| - |
68 | 61 | // If firstURL is provided, it's the URL (starting with /) of the
|
69 | 62 | // first page to put on the sidebar.
|
70 | 63 | function getCategories(site, dir, firstURL) {
|
@@ -127,5 +120,3 @@ function getCategories(site, dir, firstURL) {
|
127 | 120 |
|
128 | 121 | return categories;
|
129 | 122 | }
|
130 |
| - |
131 |
| -module.exports = DocsSidebar; |
0 commit comments