X-Git-Url: https://git.draconx.ca/gitweb/homepage.git/blobdiff_plain/c0c02f966518a01585b1f43bf5bdf35551c70e28..bc4daa2900c702913be7dc3e46441b192f44772a:/layouts/listing.xhtml diff --git a/layouts/listing.xhtml b/layouts/listing.xhtml index aad5608..406e42b 100644 --- a/layouts/listing.xhtml +++ b/layouts/listing.xhtml @@ -30,50 +30,163 @@ files = {} next unless "#{d}/" == mydir if p =~ %r{/$} - sz = Dir.children(File.dirname(rep.raw_path)).length - 1 - type = "DIR" + displaysize = Dir.children(File.dirname(rep.raw_path)).length - 1 + size = displaysize - 1000000 + type = :DIR else - sz = human_filesize(File.size(rep.raw_path)) + size = File.size(rep.raw_path) + displaysize = human_filesize(size) type = nil end files[f] = { - mtime: if t then t.getutc.strftime "%Y-%m-%d %H:%M UTC" end, - size: sz, + sorttime: if t then t.to_f else 0.0 end, + displaytime: if t then t.getutc.strftime "%Y-%m-%d %H:%M UTC" end, + displaysize: displaysize, + size: size, type: type, } end end if @items["#{File.dirname(mydir)}/index.lst"] - files[".."] = { type: "UP" } + files[".."] = { type: :UP } +end + +def render_entry(files, key) + f = files[key] + return <<~EOF +
Name | Last Modified | Size | |
---|---|---|---|
+ | + + + + + | ++ + + + + | ++ + + + + | +
-<% if files[key][:type] %>
-
-
-
+<%=
+ parentrow = if files[".."] then "#{render_entry(files, "..")}" end
+ files.delete("..")
+ if parentrow then " | |||
<%= - if key == ".." then "[Parent Directory]" else key end - %> | -<%= files[key][:mtime] %> | -<%= files[key][:size] %> | + + + +<% +def meta_cmp(files, key, a, b) + av, bv = files[a][key], files[b][key] + return av <=> bv if av != bv + return strverscmp(a, b) +end + +by_date = files.keys.sort { |a, b| meta_cmp(files, :sorttime, a, b) } +by_size = files.keys.sort { |a, b| meta_cmp(files, :size, a, b) } + +listnames = [ "namerev", "date", "daterev", "size", "sizerev" ] +lists = [ by_name.reverse, by_date, by_date.reverse, by_size, by_size.reverse ] +if parentrow +%> +|