212 lines
6.2 KiB
JavaScript
212 lines
6.2 KiB
JavaScript
|
// .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(" ");
|
||
|
}
|