mirror of
https://gitee.com/butubb8/blowfish.git
synced 2025-12-05 14:17:50 +08:00
While we can't rewrite history, we can at least slow its growth. WebP with lower quality settings gives about 2x size reduction with acceptable visual results.
149 lines
4.1 KiB
JavaScript
149 lines
4.1 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();
|
|
|
|
}); |