145 lines
4.7 KiB
JavaScript
145 lines
4.7 KiB
JavaScript
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
module.exports = {
|
|
lang: "en-US",
|
|
title: 'Profectus',
|
|
description: 'A game engine that grows with you.',
|
|
head: [
|
|
['link', { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,400;0,600;1,400' }],
|
|
['link', { rel: 'apple-touch-icon', sizes: '180x180', href: '/apple-touch-icon.png' }],
|
|
['link', { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicon-32x32.png' }],
|
|
['link', { rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicon-16x16.png' }],
|
|
['link', { rel: 'manifest', href: '/site.webmanifest' }],
|
|
['script', { defer: true, 'data-domain': 'moddingtree.com', src: 'https://plausible.io/js/plausible.js' }],
|
|
['meta', { name: 'og:description', content: 'A game engine that grows with you' }],
|
|
['meta', { name: 'og:image', content: '/Logo.png' }]
|
|
],
|
|
themeConfig: {
|
|
repo: 'profectus-engine/profectus-docs',
|
|
docsDir: 'docs',
|
|
docsBranch: 'main',
|
|
editLinks: true,
|
|
editLinkText: 'Edit this page on GitHub',
|
|
lastUpdated: 'Last Updated',
|
|
nav: [
|
|
{ text: "Guide", link: "/guide/", activeMatch: "^/guide/" },
|
|
{ text: "API", link: "/api/", activeMatch: "^/api/" },
|
|
{ text: "Forums", link: "https://forums.moddingtree.com" },
|
|
{ text: "Discord", link: "https://discord.gg/F3xveHV" },
|
|
{ text: "Github", link: "https://github.com/profectus-engine/Profectus" }
|
|
],
|
|
sidebar: {
|
|
"/guide/": [
|
|
{
|
|
text: "Getting Started",
|
|
children: [
|
|
{ text: "Introduction", link: "/guide/" },
|
|
{ text: "Setting Up", link: "/guide/setup" },
|
|
{ text: "Updating Profectus", link: "/guide/updating" },
|
|
{ text: "Example Projects", link: "/guide/examples" }
|
|
]
|
|
},
|
|
{
|
|
text: "Creating Your Project",
|
|
children: [
|
|
{ text: "Project Info", link: "/guide/project-info" },
|
|
{ text: "Project Entry", link: "/guide/project-entry" },
|
|
{ text: "Changelog", link: "/guide/changelog" },
|
|
{ text: "Themes", link: "/guide/themes" },
|
|
{ text: "Utilities", link: "/guide/utils" }
|
|
]
|
|
},
|
|
{
|
|
text: "Important Concepts",
|
|
children: [
|
|
{ text: "Layers", link: "/guide/layers" },
|
|
{ text: "Features", link: "/guide/features" },
|
|
{ text: "Coercable Components", link: "/guide/coercable" },
|
|
{ text: "Reactivity", link: "/guide/reactivity" }
|
|
]
|
|
},
|
|
{
|
|
text: "Advanced Concepts",
|
|
children: [
|
|
{ text: "Creating Features", link: "/guide/creating-features" },
|
|
{ text: "Dynamic Layers", link: "/guide/dynamic-layers" }
|
|
]
|
|
}
|
|
],
|
|
"/api/": generateAPISidebar()
|
|
}
|
|
}
|
|
}
|
|
|
|
function generateAPISidebar() {
|
|
const sidebar = [];
|
|
|
|
console.log(path.resolve("./docs/api/modules"))
|
|
const modules = fs.readdirSync("./docs/api/modules");
|
|
modules.forEach(file => {
|
|
const moduleSidebar = { text: camelToTitle(file), children: [] };
|
|
sidebar.push(moduleSidebar)
|
|
walk(path.join("./docs/api/modules", file), moduleSidebar.children);
|
|
});
|
|
|
|
const componentFolders = [];
|
|
walk("./docs/api/components", componentFolders);
|
|
sidebar.unshift({
|
|
text: "Components",
|
|
children: componentFolders
|
|
});
|
|
|
|
walk("./docs/api/features", sidebar.find(item => item.text === "Features").children);
|
|
|
|
sort(sidebar);
|
|
|
|
return sidebar;
|
|
}
|
|
|
|
function sort(sidebar) {
|
|
sidebar.filter(sidebar => !!sidebar.children).forEach(item => sort(item.children));
|
|
sidebar.sort((a, b) => {
|
|
if (a.children && !b.children) {
|
|
return -1;
|
|
} else if (!a.children && b.children) {
|
|
return 1;
|
|
} else if (a.text > b.text) {
|
|
return 1;
|
|
} else if (a.text < b.text) {
|
|
return -1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
});
|
|
}
|
|
|
|
function walk(dir, sidebar) {
|
|
const files = fs.readdirSync(dir);
|
|
files.forEach(file => {
|
|
const resolvedFile = path.join(dir, file);
|
|
const stat = fs.statSync(resolvedFile);
|
|
if (stat.isDirectory()) {
|
|
let folder = sidebar.find(item => item.text === camelToTitle(file));
|
|
if (!folder) {
|
|
folder = {
|
|
text: camelToTitle(file),
|
|
children: []
|
|
};
|
|
sidebar.push(folder);
|
|
}
|
|
walk(resolvedFile, folder.children);
|
|
} else {
|
|
sidebar.push({ text: camelToTitle(file.substr(0, file.length - 3)), link: "/" + resolvedFile.substr(5, resolvedFile.length - 8).replace(/\\/g, "/") + ".html" });
|
|
}
|
|
});
|
|
}
|
|
|
|
function camelToTitle(camel) {
|
|
if (camel === "break_eternity") {
|
|
return "Break Eternity";
|
|
}
|
|
let title = camel.replace(/([A-Z])/g, " $1");
|
|
title = title.charAt(0).toUpperCase() + title.slice(1);
|
|
return title;
|
|
}
|