From f8ecf87bc560f5ac0fc1eeb97537dfc76daad9de Mon Sep 17 00:00:00 2001 From: s-ol Date: Wed, 7 Nov 2018 16:22:50 +1100 Subject: add $order mechanism --- mmm/mmmfs/fs.server.moon | 22 +++++++++++++++++++++- root/$order | 4 ++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 root/$order diff --git a/mmm/mmmfs/fs.server.moon b/mmm/mmmfs/fs.server.moon index 5b0d45d..a1f5293 100644 --- a/mmm/mmmfs/fs.server.moon +++ b/mmm/mmmfs/fs.server.moon @@ -1,4 +1,5 @@ import Fileder from require 'mmm.mmmfs.fileder' +import opairs from require 'mmm.ordered' require 'lfs' readfile = (name) -> @@ -21,20 +22,39 @@ load_fileder = (path='root/', name='') -> path ..= '/' unless '/' == path\sub -1 with Fileder 'name: alpha': name + order = nil + children = {} + for entry in lfs.dir path continue if entry == '.' or entry == '..' continue if entry == 'init.moon' + if entry == '$order' + order = [line for line in io.lines path .. entry] + continue + attr = lfs.attributes path .. entry switch attr.mode when 'file' key, value = load_property path, entry .props[key] = value when 'directory' - table.insert .children, load_fileder path, entry + children[entry] = load_fileder path, entry else error "unknown file type: #{attr.mode}" + if order + -- order from order file + for i, name in pairs order + child = assert children[name], "child in $order but not fs: #{name} of #{path}" + table.insert .children, child + children[name] = nil + + -- sort remainder alphabeticalally + for name, child in opairs children + table.insert .children, child + warn "child #{name} of #{path} not in $order!" if order + { :load_property :load_fileder diff --git a/root/$order b/root/$order new file mode 100644 index 0000000..eda69e3 --- /dev/null +++ b/root/$order @@ -0,0 +1,4 @@ +articles +experiments +animations +meta -- cgit v1.2.3