edu-dis-labs-private/docs/.vuepress/config-other.js

212 lines
6.2 KiB
JavaScript
Raw Normal View History

2021-08-30 18:54:57 +03:00
// .vuepress/config.js
// missing markdownItAds boostnote admonitions
const fs = require('fs')
const path = require('path')
const util = require('util')
module.exports = {
base: '/vuepress-theme-cool-starter/',
theme: 'cool',
//dest: 'dist',
head: [
['link', { rel: 'icon', href: '/faviconCustom.ico' }],
['link', { rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css' }],
['link', {href: 'https://fonts.googleapis.com/icon?family=Material+Icons', rel :'stylesheet'}]
],
plugins: [
'@vuepress/last-updated',
'@vuepress/back-to-top',
'@vuepress/pwa'
],
themeConfig: {
// logo: './myAvatar.png',
sidebar: genSideBar('.'),
sidebarDepth: 2,
displayAllHeaders: true, // Default: false themeConfig: {
nav: genNavBarList(),
lastUpdated: 'Last Updated', // string | boolean
// Assumes GitHub. Can also be a full GitLab url.
repo: 'FriendlyUser/vuepress-theme-cool-starter',
// Customising the header label
// Defaults to "GitHub"/"GitLab"/"Bitbucket" depending on `themeConfig.repo`
repoLabel: 'Contribute!',
// Optional options for generating "Edit this page" link
// if your docs are in a different repo from your main project:
//docsRepo: 'FriendlyUser/markdown-notes-template',
// if your docs are not at the root of the repo:
//docsDir: 'docs',
// if your docs are in a specific branch (defaults to 'master'):
docsBranch: 'gh-pages',
// defaults to false, set to true to enable
editLinks: true,
// custom text for edit link. Defaults to "Edit this page"
editLinkText: 'Help us improve this page!'
},
title: 'Vuepress Theme Cool Starter',
description: 'Example project to get started with the vuepress-theme-cool',
configureWebpack: {
resolve: {
alias: {
'@alias': '../img'
}
}
},
plugins: {
'@vuepress/pwa': { serviceWorker: true,
updatePopup: {
message: "New content is available.",
buttonText: "Refresh"
}
}
},
markdown: {
extendMarkdown: md => {
md.set({ html: true })
md.use(require('markdown-it-katex'))
md.use(require('markdown-it-plantuml'))
md.use(require('markdown-it-admonition'))
md.use(require('markdown-it-task-lists'))
}
}
}
// Helper functions
function fromDir(startPath,filter,callback){
//console.log('Starting from dir '+startPath+'/');
if (!fs.existsSync(startPath)){
console.log("no dir ",startPath);
return;
}
var files=fs.readdirSync(startPath);
for(var i=0;i<files.length;i++){
var filename=path.join(startPath,files[i]);
var stat = fs.lstatSync(filename);
if (stat.isDirectory()){
fromDir(filename,filter,callback); //recurse
}
else if (filter.test(filename)) callback(filename);
};
};
function getDirectories(path) {
return fs.readdirSync(path).filter(function (file) {
if (file != '.vuepress') {
return fs.statSync(path+'/'+file).isDirectory();
}
});
}
function getFilesInDir(directoryName) {
var files = []
// sidebar settings
const relPath = path.join('docs', directoryName)
fromDir(relPath,/\.md$/,function(filename){
console.log('-- found: ',filename);
files.push(filename)
});
return files
}
// Base file names with removed file extensions
function getFilesInDirBase(directoryName) {
var files = []
// sidebar settings
const relPath = path.join('docs', directoryName)
fromDir(relPath,/\.md$/,function(filename){
let baseName = path.basename(filename)
// this it will fail on files without extension, see https://stackoverflow.com/questions/4250364/how-to-trim-a-file-extension-from-a-string-in-javascript
baseName = baseName.split('.').slice(0, -1).join('.')
// Add README as '', and everything else as standard
if (baseName.toUpperCase() == 'README') {
files.push('Home')
}
else {
files.push(baseName)
}
});
return files
}
// pass in the folder relative to the folder docs
function genSideBarConfigFolder (titleName, directoryName) {
const rawFilePaths = getFilesInDirBase(directoryName)
return [
{
title: titleName,
collapsable: true,
children: rawFilePaths
}
]
}
function genSideBar (directoryName) {
const dirNames = getFilesInDirBase(directoryName)
let markdownArray = []
for (var i = 0; i < dirNames.length; i++) {
let stringValue = dirNames[i].toString()
if(stringValue === 'Home' || stringValue === '') {
markdownArray.push('')
} else {
markdownArray.push(stringValue)
}
}
const sideBarConfig = {
'/': markdownArray
}
console.log(sideBarConfig)
return sideBarConfig
}
// doesn't work, fix later, can't figure out how to generate { text: link:} recursively? Or maybe have another function that returns text: link
function genNavBarList() {
let dirNames = []
// navbar settings
dirNames = getFilesInDirBase('.')
let navBarNames = [];
var numOfDirs = dirNames.length;
for (var i = 0; i < numOfDirs; i++) {
let stringValue = dirNames[i].toString()
// convert - to capitialization
stringValue = transformToUpperCase(stringValue)
let linkValue = '/'
if (stringValue !== 'Home') {
linkValue = `/${stringValue}/`
}
// @todo change loop to iterate for nested directories
if (true) {
navBarNames.push(genNavBarItem(stringValue,linkValue))
}
// last entry
else {
//navBarNames = navBarNames + "{ text : \'" + stringValue + "\', " + "link: " + "\'/" + stringValue + "/\'}, \n";
}
}
return navBarNames
}
function genNavBarItem(textValue, linkValue) {
return {
text: textValue,
link: linkValue
}
}
function transformToUpperCase(str) {
let upperString = str
upperString = upperString.replace(/-/g, ' ');
upperString = upperString.split(" ");
for (var i = 0, x = upperString.length; i < x; i++) {
upperString[i] = upperString[i][0].toUpperCase() + upperString[i].substr(1);
}
return upperString.join(" ");
}