mirror of
https://github.com/nunocoracao/blowfish.git
synced 2026-01-30 16:31:52 +01:00
152 lines
4.2 KiB
JavaScript
152 lines
4.2 KiB
JavaScript
const fs = require("fs");
|
|
const crypto = require("crypto");
|
|
const puppeteer = require("puppeteer");
|
|
|
|
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 = {};
|
|
|
|
function generateDirName(seed) {
|
|
var hash = crypto.createHash("md5");
|
|
hash.update(seed);
|
|
var dir = hash.digest("hex");
|
|
return dir;
|
|
}
|
|
|
|
async function convert(text, from, to) {
|
|
var options = {
|
|
from: from,
|
|
to: to,
|
|
};
|
|
if (!cache[to]) cache[to] = {};
|
|
if (cache[to][text]) return cache[to][text];
|
|
var 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 = "";
|
|
if (elements[0].indexOf("tags") != -1) {
|
|
translatedTags = [];
|
|
for (var j in tags) {
|
|
var tempTag = await convert(tags[j], defaultLang, targetLang);
|
|
translatedTags.push(tempTag);
|
|
}
|
|
var trasnlatedTagsString = translatedTags.join(", ");
|
|
newElement = elements[0] + ": [" + trasnlatedTagsString + "]";
|
|
} else {
|
|
newElement = array[i];
|
|
}
|
|
} else {
|
|
newElement = array[i];
|
|
}
|
|
translatedBlock += newElement + "\n";
|
|
}
|
|
return translatedBlock;
|
|
}
|
|
|
|
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();
|
|
});
|