mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2025-03-14 09:45:42 +00:00

* 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>
94 lines
3.9 KiB
JavaScript
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');
|
|
}
|
|
});
|
|
});
|