add = (tmpl) -> package.path ..= ";#{tmpl}.lua" package.moonpath ..= ";#{tmpl}.moon" add '?' add '?.server' add '?/init' add '?/init.server' require 'mmm' import tohtml from require 'mmm.component' import Browser from require 'mmm.mmmfs.browser' import get_meta, header, footer from require 'build.layout' -- usage: -- moon render_all.moon [db.sqlite3] { file } = arg export BROWSER render = (fileder, output) -> BROWSER = Browser fileder with io.open output, 'w' \write [[
]] \write " #{get_meta fileder} #{header} #{assert (tohtml BROWSER), "couldn't render BROWSER"} #{footer} " \write [[ ]] \write " " \close! import SQLStore from require 'mmm.mmmfs.drivers.sql' import Fileder, Key from require 'mmm.mmmfs.fileder' -- split filename into dirname + basename dir_base = (path) -> dir, base = path\match '(.-)([^/]-)$' if dir and #dir > 0 dir = dir\sub 1, #dir - 1 dir, base load_tree = (store, root='') -> fileders = setmetatable {}, __index: (path) => with val = Fileder {} .path = path rawset @, path, val root = fileders[root] root.facets['name: alpha'] = '' for fn, ft in store\list_facets root.path val = store\load_facet root.path, fn, ft root.facets[Key fn, ft] = val for path in store\list_all_fileders root.path fileder = fileders[path] parent, name = dir_base path fileder.facets['name: alpha'] = name table.insert fileders[parent].children, fileder for fn, ft in store\list_facets path val = store\load_facet path, fn, ft fileder.facets[Key fn, ft] = val root tree = load_tree SQLStore :name for fileder in coroutine.wrap tree\iterate print "rendering '#{fileder.path}'..." os.execute "mkdir -p 'out/#{fileder.path}'" render fileder, "out/#{fileder.path}/index.html"