Files
docsify/tests/helpers/docsifyInit.js
T

79 lines
2.0 KiB
JavaScript

const stripIndent = require('common-tags/lib/stripIndent');
const { serverIP, serverPort } = require('./server.js');
async function docsifyInit(page, options) {
const defaults = {
config: {},
content: '',
coverpage: '',
navbar: '',
sidebar: '',
routes: [[]],
style: '',
styleURLs: ['/lib/themes/vue.css'],
script: '',
scriptURLs: [],
url: `http://${serverIP}:${serverPort}`,
};
const settings = {
...defaults,
...options,
};
// Routes - General
if (settings.routes.length > 0 && typeof settings.routes[0] === 'string') {
settings.routes = [settings.routes];
}
settings.routes.forEach(async ([urlGlob, response]) => {
if (urlGlob && response) {
if (typeof response === 'string') {
response = {
body: stripIndent`${response}`,
};
}
await page.route(urlGlob, route => route.fulfill(response));
}
});
// Routes - Docsify Markdown
[
[settings.content, '**/README.md'],
[settings.coverpage, '**/_coverpage.md', { coverpage: true }],
[settings.navbar, '**/_navbar.md', { loadNavbar: true }],
[settings.sidebar, '**/_sidebar.md', { loadSidebar: true }],
].forEach(async ([markdown, urlGlob, config]) => {
if (markdown) {
if (config) {
Object.assign(settings.config, config);
}
await page.route(urlGlob, route =>
route.fulfill({
contentType: 'text/markdown',
body: stripIndent`${markdown}`,
})
);
}
});
// Load URL
await page.goto(settings.url);
// Docsify configuration
if (Object.keys(settings.config).length > 0) {
await page.evaluate(config => {
Object.assign(window.$docsify, config);
}, settings.config);
}
// CSS
settings.styleURLs.forEach(async url => await page.addStyleTag({ url }));
// JavaScript (must load/resolve sequentially)
settings.scriptURLs.push(settings.docsifyURL);
for (const url of settings.scriptURLs) {
await page.addScriptTag({ url });
}
}
module.exports = docsifyInit;