This commit is contained in:
Artur Gurgul 2024-10-17 23:51:03 +02:00
parent d086c1d493
commit 0f1d41a991
30 changed files with 1013 additions and 1536 deletions

170
site
View file

@ -1,170 +0,0 @@
const fs = require('fs')
const pug = require('pug')
const path = require('path')
function removeDirectorySync(directory) {
try {
fs.rmSync(directory, { recursive: true, force: true })
console.log("Directory and its contents removed.")
} catch (err) {
console.error(`Error removing directory: ${err.message}`)
}
}
function readConfig() {
const fileContents = fs.readFileSync('.site/config.yaml', 'utf8')
return yaml.load(fileContents)
}
function compile(template, content, output) {
if (template == null) {
console.error("Template is not defined")
return
}
const compiledFunction = pug.compileFile(`.site/templates/${template}.pug`);
const data = {
...content,
site: {posts: []}
}
const dirname = path.dirname(output)
if (!fs.existsSync(dirname)) {
fs.mkdirSync(dirname, { recursive: true })
}
const html = compiledFunction(data)
fs.writeFileSync(output, html)
console.log(`HTML has been rendered and saved to ${output}`);
}
function compileData(template, content, output) {
const compiledFunction = pug.compileFile(`.sajt/layouts/${template}.pug`);
const dirname = path.dirname(output)
if (!fs.existsSync(dirname)) {
fs.mkdirSync(dirname, { recursive: true })
}
const html = compiledFunction(content)
fs.writeFileSync(output, html)
console.log(`HTML has been rendered and saved to ${output}`);
}
function readMetadata(ignore) {
let htmlExtension = "html"
let list = getAllFilesWithExtension('.',".md", ignore)
.map(f => { return {
pathMD: f,
type: "md",
data: {},
md: parseMD(f)
}})
// sites needs to include data from header
list = list.concat(
getAllFilesWithExtension('.',".yml", ignore)
.map(f => { return {
pathMD: f,
type: "yml",
data: parseYML(f),
md: {meta: {}}
}})
)
for(const site of list) {
//console.log(site.md.meta.path)
// TODO: data can set default path
if (site.md.meta?.path != null && site.md.meta?.path != undefined) {
site.path = path.join("/", site.md.meta.path)
} else {
const parsedPath = path.parse(site.pathMD)
const basePath = path.join("/", parsedPath.dir, parsedPath.name)
site.path = basePath
}
// add proper extension
const parsedPath = path.parse(site.path)
parsedPath.ext = htmlExtension.startsWith('.') ? htmlExtension : `.${htmlExtension}`
parsedPath.base = `${parsedPath.name}${parsedPath.ext}`
site.path = path.format(parsedPath)
// add dirs metadata
const dirArray = pathToArray(site.path)
site.fileName = dirArray.pop()
dirArray.shift()
site.dir = dirArray
site.meta = site.md.meta
site.hidden = site.data.hidden || false
}
return list
}
const buildFolder = './.build'
//loadTemplate()
//parseMD()
let config = readConfig()
const serverConfig = {
host: config.remote.host,
port: 22,
username: config.remote.user,
privateKey: privateKey,
path: config.remote.path
}
removeDirectorySync(buildFolder)
copyDirectory("./.site/static", path.join(buildFolder, "static"))
let data = readMetadata()
let pages = data.map(site => {
return {
title: site.meta.title,
url: site.path
}
})
for(const site of data) {
if (site.type == "md") {
compile(site.meta.layout,
{
content: site.md.content,
title: site.meta.title,
hidden: false,
pages
},
path.join(buildFolder, site.path))
} else if (site.type == "yml") {
let data = {...site.data}
delete data.layout
parseMarkdown(data)
compileData(site.data.layout,
{data, pages, hidden: data.hidden},
path.join(buildFolder, site.path))
}
}
//console.log(readMetadata())
// sajt
uploadDirectory(serverConfig, buildFolder)