Skip to content
This repository was archived by the owner on Apr 3, 2022. It is now read-only.

Commit 6cb56a0

Browse files
committed
Inject version picker into the header of docs
1 parent 9885551 commit 6cb56a0

File tree

2 files changed

+129
-14
lines changed

2 files changed

+129
-14
lines changed

build.sh

+20-14
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
CLONE_URL=https://github.com/sequelize/sequelize.git
22
REPO_NAME=sequelize
33
BUILD_DIR=site
4+
VERSIONS=("v7" "v6" "v5" "v4" "v3")
5+
VERSIONS_JOINED=$(IFS=,; echo "${VERSIONS[*]}")
46

57
build_branch () {
6-
git checkout $1
7-
8+
VERSION=$1
9+
10+
git checkout $VERSION
811
npm install
912
npm run docs
1013
git stash
11-
12-
rm -rf ../$1
13-
if [ $1 == "v3" ];then
14+
rm -rf ../$VERSION
15+
16+
if [ $VERSION == "v3" ];then
1417
mkdocs build --clean
15-
mv ./site ../$BUILD_DIR/$1
18+
mv ./site ../$BUILD_DIR/$VERSION
1619
else
17-
if [ $1 == "main" ]; then
20+
node ../build/inject-version-picker.js \
21+
--current=$VERSION \
22+
--versions=$VERSIONS_JOINED \
23+
--path=./esdoc
24+
25+
if [ $VERSION == "main" ]; then
1826
mkdir ../$BUILD_DIR/master
1927
cp -r ./esdoc/* ../$BUILD_DIR/master/
2028
fi
21-
22-
mv ./esdoc ../$BUILD_DIR/$1
29+
30+
mv ./esdoc ../$BUILD_DIR/$VERSION
2331
fi
2432
}
2533

@@ -29,8 +37,6 @@ git clone $CLONE_URL
2937
cd $REPO_NAME
3038

3139
build_branch main
32-
build_branch v7
33-
build_branch v6
34-
build_branch v5
35-
build_branch v4
36-
build_branch v3
40+
for version in ${VERSIONS[@]}; do
41+
build_branch $version
42+
done

build/inject-version-picker.js

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
const { execFileSync } = require("child_process");
2+
const fs = require("fs");
3+
const [_node, _script, ...args] = process.argv;
4+
5+
let CURRENT_VERSION = args.find((arg) => arg.startsWith("--current="));
6+
let VERSIONS = args.find((arg) => arg.startsWith("--versions="));
7+
let BUILD_PATH = args.find((arg) => arg.startsWith("--path="));
8+
9+
if (!CURRENT_VERSION || !VERSIONS || !BUILD_PATH) {
10+
console.error(
11+
`
12+
Invalid call format! Use the following instead:
13+
14+
node build/inject-version-picker.js --current=v6 --versions=v3,v4,v5,v6 --path=esdocs/
15+
`
16+
);
17+
process.exit(1);
18+
} else {
19+
CURRENT_VERSION = CURRENT_VERSION.replace("--current=", "");
20+
VERSIONS = VERSIONS.replace("--versions=", "").split(",");
21+
BUILD_PATH = BUILD_PATH.replace("--path=", "");
22+
}
23+
24+
console.info(
25+
`Injecting version picker into ${BUILD_PATH} for current version ${CURRENT_VERSION} ...`
26+
);
27+
28+
findHtmlFiles(BUILD_PATH).forEach(injectVersionPicker);
29+
30+
/////////////
31+
// Helpers //
32+
/////////////
33+
34+
function buildVersionPicker() {
35+
function buildVersionEntry(version) {
36+
return `
37+
<li>
38+
<a href="/${version}\">Switch to ${version}</a>
39+
</li>
40+
`;
41+
}
42+
43+
const css = `
44+
<style>
45+
#version-picker {
46+
cursor: pointer;
47+
}
48+
49+
#version-picker:hover ul {
50+
display: block;
51+
}
52+
53+
#version-picker ul {
54+
display: none;
55+
z-index: 100;
56+
background: white;
57+
padding: 0;
58+
list-style-type: none;
59+
border: 1px solid #ddd;
60+
}
61+
62+
#version-picker ul li {
63+
list-style-type: none;
64+
padding: 0 10px;
65+
}
66+
67+
#version-picker ul li:hover {
68+
background: #eee;
69+
}
70+
</style>
71+
`;
72+
73+
const html = `
74+
<div id="version-picker">
75+
Docs ${CURRENT_VERSION}
76+
<ul>
77+
${VERSIONS.map(buildVersionEntry).join("")}
78+
</ul>
79+
</div>
80+
${css}
81+
`;
82+
83+
return html
84+
.split("\n")
85+
.map((line) => line.trim())
86+
.join("");
87+
}
88+
89+
function findHtmlFiles(path) {
90+
const fileList = execFileSync("find", [path]).toString();
91+
92+
return fileList.split("\n").filter((file) => file.endsWith(".html"));
93+
}
94+
95+
function injectVersionPicker(file) {
96+
const fileContents = fs.readFileSync(file).toString();
97+
const versionPicker = buildVersionPicker();
98+
99+
console.info(
100+
`Injecting version picker for ${CURRENT_VERSION} into ${file} ...`
101+
);
102+
103+
const newFileContents = fileContents.replace(
104+
/<\/header>/s,
105+
`${versionPicker}</header>`
106+
);
107+
108+
fs.writeFileSync(file, newFileContents);
109+
}

0 commit comments

Comments
 (0)