72 lines
1.6 KiB
Lua
72 lines
1.6 KiB
Lua
local fun = require 'fun'
|
|
local json = require 'cjson'
|
|
local restia = require 'restia'
|
|
local scaffold = require 'scaffold'
|
|
local shapeshift = require 'shapeshift'
|
|
|
|
-- Project-specific stuff
|
|
local rss = require 'feed.rss'
|
|
local atom = require 'feed.atom'
|
|
local paramparser = require 'paramparser'
|
|
local params = paramparser(...)
|
|
package.loaded.params = params
|
|
local config = require 'config'
|
|
local pages = require 'pages'
|
|
local templates = require 'templates'
|
|
local posts = require 'posts'
|
|
|
|
local tree = {}
|
|
|
|
for i, path in ipairs(params.copy) do
|
|
scaffold.deep(tree, path, scaffold.readdir(path))
|
|
end
|
|
|
|
local function render(name, data)
|
|
return templates.main(templates[name], data)
|
|
end
|
|
|
|
local function page(name, data)
|
|
return templates.main(pages[name], data)
|
|
end
|
|
|
|
-- Render Posts
|
|
for idx, post in ipairs(posts) do
|
|
local body = tostring(render("post", post))
|
|
|
|
scaffold.deep(tree, post.path, body)
|
|
end
|
|
|
|
scaffold.deep(tree, "feeds/all.rss.xml", rss(posts))
|
|
scaffold.deep(tree, "feeds/all.atom.xml", atom(posts))
|
|
|
|
if params.delete then
|
|
restia.utils.delete(params.output)
|
|
end
|
|
|
|
local function transform(tab)
|
|
return function(data)
|
|
local success, result = shapeshift.table(tab, "keep")(data)
|
|
return result
|
|
end
|
|
end
|
|
|
|
local function drop() return true, nil end
|
|
|
|
-- Generate Post Metadata
|
|
tree["posts.json"] = json.encode(
|
|
fun
|
|
.iter(posts)
|
|
:map(transform {
|
|
body = drop;
|
|
head = shapeshift.table({ file = drop }, 'keep');
|
|
})
|
|
:totable()
|
|
)
|
|
|
|
tree["index.html"] = tostring(page("index", tree["posts.json"]))
|
|
|
|
if params.cname then
|
|
tree.CNAME = params.cname
|
|
end
|
|
|
|
scaffold.builddir(params.output, tree)
|