satelito

Static [web] site (or page) generator (ssg) made with Lua script.
git clone git://soucy.cc/satelito.git
Log | Files | Refs | README

model.lua (2373B)


      1 -- @module model
      2 local model = {}
      3 --
      4 local lfs = require 'lfs' -- luafilesystem
      5 local lume = require 'satelito.lib.lume.lume'
      6 local dirtree = require 'satelito.dirtree'
      7 local file = require 'satelito.file'
      8 local markdown = require 'discount' -- lua-discount
      9 
     10 function model.set(filepath, config, contentdir)
     11   local pagemeta = file.get_metafile(filepath) or {}
     12   local time_created
     13 
     14   -- If required properties are nil
     15   if pagemeta.title == nil then
     16     pagemeta.title = file.get_basename(filepath):match('(.+)%..*')
     17   end
     18 
     19   if pagemeta.date == nil then
     20     pagemeta.date = os.date('%Y-%m-%d', lfs.attributes(filepath).change)
     21   end
     22 
     23   if pagemeta.datetime == nil then
     24     pagemeta.datetime = os.date('%H:%M:%S', lfs.attributes(filepath).change)
     25   end
     26   --
     27   time_created = (pagemeta.date..pagemeta.datetime):gsub('%W','')
     28 
     29   -- Path properties
     30   pagemeta.relpath = file.get_relpath(filepath, contentdir)
     31 
     32   -- Link properties
     33   pagemeta.rellink = file.get_rellink(filepath, contentdir)
     34   pagemeta.permalink = file.get_permalink(filepath, contentdir, config.siteurl)
     35   pagemeta.exportlink = file.get_exportlink(filepath, contentdir, config.paths.public_html)
     36   pagemeta.dirlink = file.get_permalink(filepath, contentdir, config.siteurl):match("(.*/)")
     37 
     38   -- Time properties
     39   pagemeta.time_created = time_created
     40   pagemeta.time_modification = lfs.attributes(filepath).modification
     41   pagemeta.time_modified_child = file.get_lastmodified(lume.array(dirtree.get(file.get_dirname(filepath))))
     42 
     43   -- Unique page ID for the Atom feed
     44   pagemeta.id = 'tag:' .. config.siteurl:match('^%w+://([^/]+)') .. ',' .. pagemeta.date .. ':' .. pagemeta.rellink
     45 
     46   -- HTML content
     47   if file.is_markdown(filepath) then
     48     pagemeta.content = markdown(file.read(filepath))
     49   elseif file.is_html(filepath) then
     50     pagemeta.content = file.read(filepath)
     51   end
     52 
     53   -- List and Feed
     54   if file.is_index(filepath) and pagemeta.list ~= false then
     55     pagemeta.list = file.get_collection(filepath, contentdir)
     56   end
     57 
     58   -- Templates
     59   pagemeta.template = pagemeta.template or pagemeta.posttype or 'default'
     60   pagemeta.layout = pagemeta.layout or 'layout'
     61   pagemeta.head = pagemeta.head or 'head'
     62   pagemeta.nav = pagemeta.nav or 'navigation'
     63   pagemeta.footer = pagemeta.footer or 'footer'
     64   pagemeta.feed = pagemeta.feed or 'feed.xml'
     65 
     66   return lume.extend({}, config, pagemeta)
     67 end
     68 
     69 return model