X-Git-Url: http://git.draconx.ca/gitweb/homepage.git/blobdiff_plain/5aa756ee68dc2134b6acac8a66af2f1c14521721:/layouts/listing.xhtml..e7306bc0bbfea36e6414684b00ad4ef1c7269aed:/layouts/static/gitweb/gitweb.js diff --git a/layouts/listing.xhtml b/layouts/listing.xhtml deleted file mode 100644 index 406e42b..0000000 --- a/layouts/listing.xhtml +++ /dev/null @@ -1,192 +0,0 @@ -<% -# Nick's web site: Generate directory listing. -# -# Copyright © 2021 Nick Bowler -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see - -mydir = rep_uri - -files = {} -@items.find_all(@item[:pattern]).each do |item| - t = item[:updated_at] - - item.reps.each do |rep| - next if rep == @rep - - p = rep_uri(rep) - d, f = File.split(p) - next unless "#{d}/" == mydir - - if p =~ %r{/$} - displaysize = Dir.children(File.dirname(rep.raw_path)).length - 1 - size = displaysize - 1000000 - type = :DIR - else - size = File.size(rep.raw_path) - displaysize = human_filesize(size) - type = nil - end - - files[f] = { - 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 } -end - -def render_entry(files, key) - f = files[key] - return <<~EOF - #{if f[:type] - "#{f[:type]}" - end} - #{ - if key == ".." then "[Parent Directory]" else key end - } - #{f[:displaytime]} - #{f[:displaysize]} - EOF -end -%> -
- - - - - - - - - - - - - - - - - -<%= - parentrow = if files[".."] then "#{render_entry(files, "..")}" end - files.delete("..") - if parentrow then "#{parentrow}" end -%> -<% -by_name = files.keys.sort{ |a, b| strverscmp(a, b) } -by_name.each_index do |i| - entry = render_entry(files, by_name[i]) - if i+1 == by_name.length - entry.sub!(%r{(.*)}m, - "\\1") - end -%> - <%= entry %> -<% end %> - - - -<% -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 -%> - <%= parentrow %> -<% -end -evenmap = (0..(lists.length-1)).map { false } -even = false - -while not (elems = lists.map(&:first)).compact.empty? - matches = (0..(lists.length-1)).to_a.keep_if { |x| evenmap[x] == even } - if !matches.empty? - elems = elems.values_at(*matches).compact - mode = elems.group_by{|a| a}.max{|a, b| a[1].length <=> b[1].length}[0] - matches = [] - - lists.each_index do |i| - if evenmap[i] == even and lists[i].first.eql? mode - lists[i].shift - evenmap[i] ^= true - evenmap[i] = nil if lists[i].empty? - - matches << i - end - end -%> - - <%= render_entry(files, mode) %> - -<% - else -%> - -<% - end - - even ^= true -end -%> - - -
- - - - - - - - - - - - - - - -
-