simplex-chat/website/customize_docs_frontmatter.js
Evgeny Poberezkin 3419ce293b
website: downloads page (#3088)
* website: downloads page

* link

* website: fix h2 headers issue

* website: fix sidebar issue

* website: fix language changer for downloads page in navbar

* update, add security assessment section

---------

Co-authored-by: M Sarmad Qadeer <MSarmadQadeer@gmail.com>
2023-09-21 09:28:12 +01:00

94 lines
3.9 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const matter = require('gray-matter');
const directoryPath = path.resolve(__dirname, 'src/docs');
const langFolder = 'lang';
const enFiles = {};
function traverseDirectory(directory, currentLanguage = 'en', result = {}, callback) {
const filesAndDirectories = fs.readdirSync(directory);
filesAndDirectories.forEach((fileOrDirectoryName) => {
const fullPath = path.join(directory, fileOrDirectoryName);
if (fs.statSync(fullPath).isDirectory()) {
// If the subdirectory is inside the 'lang' folder, update the current language
if (directory.endsWith('/lang')) {
currentLanguage = fileOrDirectoryName;
}
// Recursively traverse the subdirectories
traverseDirectory(fullPath, currentLanguage, result, callback);
} else {
// Process the file only if it has the '.md' extension
if (path.extname(fullPath) === '.md') {
// Add the language to the file's language array or create a new array if it doesn't exist
const fileName = path.basename(fullPath, '.md');
if (!result[fileName]) {
result[fileName] = [];
}
result[fileName].push(currentLanguage);
}
if (callback) {
callback(fullPath, currentLanguage);
}
}
});
return result;
}
const fileLanguageMapping = traverseDirectory(directoryPath);
// Update the frontmatter of each Markdown file
Object.entries(fileLanguageMapping).forEach(([fileName, languages]) => {
// Find and update the frontmatter of each Markdown file
traverseDirectory(directoryPath, null, {}, (fullPath, currentLanguage) => {
if (path.basename(fullPath) === `${fileName}.md`) {
// Read the existing frontmatter
const fileContent = fs.readFileSync(fullPath, 'utf-8');
const parsedMatter = matter(fileContent);
const relativePath = path.relative(directoryPath, fullPath);
// Calculate the permalink based on the file's location
const linkPath = path.relative(directoryPath, fullPath).replace(/\.md$/, '.html');
const permalink = `/docs/${linkPath}`.toLowerCase();
if (fileName === 'JOIN_TEAM') {
parsedMatter.data.active_jobs = true;
}
if (!parsedMatter.data.permalink) parsedMatter.data.permalink = permalink;
// Update the frontmatter with the new languages list
parsedMatter.data.supportedLangsForDoc = languages;
// Add the layout value
if (!parsedMatter.data.layout) parsedMatter.data.layout = 'layouts/doc.html';
if (fullPath.startsWith(path.join(directoryPath, langFolder))) {
// Non-English files
const [language, ...rest] = relativePath.split(path.sep).slice(1);
const enFilePath = path.join(directoryPath, ...rest);
if (enFiles[enFilePath]) {
const enRevision = new Date(enFiles[enFilePath].revision);
const currentRevision = new Date(parsedMatter.data.revision);
const isOld = currentRevision < enRevision;
// Add the version value
parsedMatter.data.version = isOld ? 'old' : 'new';
}
} else {
// English files
enFiles[fullPath] = { revision: parsedMatter.data.revision };
// Add the version value
parsedMatter.data.version = 'new';
}
// Save the updated frontmatter and content back to the file
const updatedFileContent = matter.stringify(parsedMatter.content, parsedMatter.data);
fs.writeFileSync(fullPath, updatedFileContent, 'utf-8');
}
});
});