v0.0.2
This commit is contained in:
parent
d086c1d493
commit
0f1d41a991
30 changed files with 1013 additions and 1536 deletions
170
site
170
site
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue