generated from AdobeDocs/dev-docs-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuildNavigation.js
106 lines (85 loc) · 3.08 KB
/
buildNavigation.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
const path = require('path');
const fs = require('node:fs');
// regex to find sections:
// subPages:((\s* .*)*)
const { siteMetadata, pathPrefix } = require('./gatsby-config.js');
try {
if(!pathPrefix) {
throw new TypeError("pathPrefix not found");
}
let topNavMarkdown = ``;
// TODO: prob need url fixer from gatsby theme
// home link defines the first link defaults to Products
// can be hidden
// siteMetadata.versions
// siteMetadata.home
topNavMarkdown += `- pathPrefix:\n`;
topNavMarkdown += ` - ${pathPrefix}\n`;
if (siteMetadata.home) {
topNavMarkdown += '\n- home:\n';
topNavMarkdown += ` - [${siteMetadata.home.title}](${siteMetadata.home.path})\n`;
if(siteMetadata.home.hidden) {
topNavMarkdown += ` - hidden\n`;
}
}
if (siteMetadata.versions) {
topNavMarkdown += '\n- versions:\n';
siteMetadata.versions.forEach((versionItem) => {
let isSelectedText = versionItem.selected ? `selected` : '';
let versionPathText = versionItem.path ? versionItem.path : '/';
topNavMarkdown += ` - [${versionItem.title}](${versionPathText}) ${isSelectedText}\n`;
});
}
if(siteMetadata.pages) {
topNavMarkdown += `\n- pages:\n`;
}
siteMetadata.pages?.forEach((navItem) => {
//let pathText = navItem.path ? navItem.path : '';
if(navItem.path) {
topNavMarkdown += ` - [${navItem.title}](${navItem.path})\n`;
} else {
topNavMarkdown += ` - ${navItem.title}\n`;
navItem.menu.forEach((menuItem) =>{
topNavMarkdown += ` - [${menuItem.title}](${menuItem.path})\n`;
});
}
});
if(siteMetadata.subPages) {
topNavMarkdown += `\n- subPages:\n`;
let sideNavMarkdown = ``;
let depth = 1;
sideNavMarkdown += buildSideNavRecursively(siteMetadata.subPages, depth);
topNavMarkdown += sideNavMarkdown;
}
let configFilePath = path.resolve(__dirname + '/src/pages/config.md');
fs.writeFileSync(configFilePath, topNavMarkdown);
console.log(`Generated file: ${configFilePath}`);
} catch (err) {
console.error(err);
}
// subpages menu should only appear on the subpages path
// need to check paths to
function buildSideNavRecursively(sideNav, depth) {
let sideNavMarkdown = '';
for (var k in sideNav) {
let header = sideNav[k].header ? 'header' : '';
sideNavMarkdown += `${insertSpace(depth)}- [${sideNav[k].title}](${sideNav[k].path}) ${header}\n`;
if (sideNav[k].pages) {
sideNavMarkdown += buildSideNavRecursively(sideNav[k].pages, depth+1);
}
}
return sideNavMarkdown;
}
function insertSpace(indentLevel) {
let spaces = ``;
for(var i=0; i<indentLevel; i++){
spaces += ` `
}
return spaces;
}
// src/pages/topNav.md
// src/pages/sideNav.md
// src/pages/get-started/sideNav.md
// go through each subPages and find each path that relates to a subfolder
// title with path only
// header setting