fix: improve scripts and js

This commit is contained in:
Nuno Coração
2025-06-20 23:24:40 +01:00
parent 1f49f8f89f
commit 8c42d127ff
7 changed files with 228 additions and 207 deletions

View File

@@ -1,151 +1,139 @@
const fs = require("fs");
const fs = require("fs/promises");
const crypto = require("crypto");
const puppeteer = require("puppeteer");
const translate = require("@iamtraction/google-translate");
const configDir = "./exampleSite/config/_default";
const defaultLang = "en";
const usersFolderPath = "./exampleSite/content/users/";
const translate = require("@iamtraction/google-translate");
var targetLangs = [];
const configFiles = fs.readdirSync(configDir);
configFiles.forEach((file) => {
if (file.indexOf("languages.") > -1) {
var lang = file.split(".")[1];
if (lang != defaultLang) {
targetLangs.push(lang);
}
}
});
const indexFiles = fs.readdirSync(usersFolderPath);
for (var i in targetLangs) {
var targetFile = "_index." + targetLangs[i] + ".md";
if (indexFiles.indexOf(targetFile) == -1) {
fs.copyFileSync(usersFolderPath + "_index.md", usersFolderPath + targetFile);
}
}
let rawdata = fs.readFileSync(usersFolderPath + "users.json");
let users = JSON.parse(rawdata);
let userDict = {};
for (var i in users) {
userDict[generateDirName(users[i].url)] = true;
}
const files = fs.readdirSync(usersFolderPath);
for (file in files) {
let stats = fs.statSync(usersFolderPath + files[file]);
if (files[file] != "users.json" && files[file].indexOf("_index.") == -1) {
if (stats.isDirectory()) {
if (!userDict[files[file]]) {
console.log("deleting: ", files[file]);
fs.rmdirSync(usersFolderPath + files[file], { recursive: true, force: true });
}
} else {
console.log("deleting: ", files[file]);
fs.unlinkSync(usersFolderPath + files[file]);
}
}
}
var cache = {};
let cache = {};
function generateDirName(seed) {
var hash = crypto.createHash("md5");
const hash = crypto.createHash("md5");
hash.update(seed);
var dir = hash.digest("hex");
return dir;
return hash.digest("hex");
}
async function convert(text, from, to) {
var options = {
from: from,
to: to,
};
const options = { from, to };
if (!cache[to]) cache[to] = {};
if (cache[to][text]) return cache[to][text];
var translated_text = await translate(text, options);
const translated_text = await translate(text, options);
cache[to][text] = translated_text.text;
return translated_text.text;
}
async function translateFrontMatterTags(block, targetLang, tags) {
var array = block.split("\n");
var translatedBlock = "";
for (var i = 0; i < array.length; i++) {
if (array[i].indexOf(":") > -1) {
var elements = array[i].split(":");
var newElement = "";
const array = block.split("\n");
let translatedBlock = "";
for (const line of array) {
let newElement = line;
if (line.indexOf(":") > -1) {
const elements = line.split(":");
if (elements[0].indexOf("tags") != -1) {
translatedTags = [];
for (var j in tags) {
var tempTag = await convert(tags[j], defaultLang, targetLang);
const translatedTags = [];
for (const tag of tags) {
const tempTag = await convert(tag, defaultLang, targetLang);
translatedTags.push(tempTag);
}
var trasnlatedTagsString = translatedTags.join(", ");
const trasnlatedTagsString = translatedTags.join(", ");
newElement = elements[0] + ": [" + trasnlatedTagsString + "]";
} else {
newElement = array[i];
}
} else {
newElement = array[i];
}
translatedBlock += newElement + "\n";
}
return translatedBlock;
}
puppeteer
.launch({
(async () => {
const targetLangs = [];
const configFiles = await fs.readdir(configDir);
for (const file of configFiles) {
if (file.indexOf("languages.") > -1) {
const lang = file.split(".")[1];
if (lang !== defaultLang) {
targetLangs.push(lang);
}
}
}
const indexFiles = await fs.readdir(usersFolderPath);
for (const lang of targetLangs) {
const targetFile = `_index.${lang}.md`;
if (!indexFiles.includes(targetFile)) {
await fs.copyFile(
usersFolderPath + "_index.md",
usersFolderPath + targetFile
);
}
}
const rawdata = await fs.readFile(usersFolderPath + "users.json", "utf8");
const users = JSON.parse(rawdata);
const userDict = {};
for (const user of users) {
userDict[generateDirName(user.url)] = true;
}
const files = await fs.readdir(usersFolderPath);
for (const file of files) {
const stats = await fs.stat(usersFolderPath + file);
if (file !== "users.json" && file.indexOf("_index.") === -1) {
if (stats.isDirectory()) {
if (!userDict[file]) {
console.log("deleting: ", file);
await fs.rm(usersFolderPath + file, { recursive: true, force: true });
}
} else {
console.log("deleting: ", file);
await fs.unlink(usersFolderPath + file);
}
}
}
const browser = await puppeteer.launch({
defaultViewport: {
width: 1280,
height: 800,
},
})
.then(async (browser) => {
const page = await browser.newPage();
for (var i in users) {
var userMDFile =
'---\n\
title: "' +
users[i].title +
'"\n\
tags: [' +
users[i].tags +
']\n\
externalUrl: "' +
users[i].url +
'"\n\
weight: ' +
(i + 1) +
"\n\
showDate: false\n\
showAuthor: false\n\
showReadingTime: false\n\
showEdit: false\n\
showLikes: false\n\
showViews: false\n\
layoutBackgroundHeaderSpace: false\n\
\r---\n";
var dir = usersFolderPath + generateDirName(users[i].url);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
console.log(i, users[i].title);
fs.writeFileSync(dir + "/index.md", userMDFile);
for (var j in targetLangs) {
var content = await translateFrontMatterTags(userMDFile, targetLangs[j], users[i].tags);
fs.writeFileSync(dir + "/index." + targetLangs[j] + ".md", content);
}
await page.goto(users[i].url);
await page.screenshot({ path: dir + "/feature.jpg", type: "webp", quality: 50 });
}
}
await browser.close();
});
const page = await browser.newPage();
for (let i = 0; i < users.length; i++) {
const user = users[i];
const userMDFile =
"---\n" +
` title: "${user.title}"\n` +
` tags: [${user.tags}]\n` +
` externalUrl: "${user.url}"\n` +
` weight: ${i + 1}\n` +
" showDate: false\n" +
" showAuthor: false\n" +
" showReadingTime: false\n" +
" showEdit: false\n" +
" showLikes: false\n" +
" showViews: false\n" +
" layoutBackgroundHeaderSpace: false\n" +
" \r---\n";
const dir = usersFolderPath + generateDirName(user.url);
try {
await fs.access(dir);
} catch {
await fs.mkdir(dir);
}
console.log(i, user.title);
await fs.writeFile(dir + "/index.md", userMDFile);
for (const lang of targetLangs) {
const content = await translateFrontMatterTags(userMDFile, lang, user.tags);
await fs.writeFile(dir + `/index.${lang}.md`, content);
}
await page.goto(user.url);
await page.screenshot({ path: dir + "/feature.jpg", type: "webp", quality: 50 });
}
await browser.close();
})();