diff options
Diffstat (limited to 'pictures.rb')
-rwxr-xr-x | pictures.rb | 83 |
1 files changed, 64 insertions, 19 deletions
diff --git a/pictures.rb b/pictures.rb index 33c7ec6..246b0c5 100755 --- a/pictures.rb +++ b/pictures.rb @@ -1,37 +1,82 @@ #!/usr/bin/env ruby -require 'json' require_relative 'lib' +require 'fileutils' PICTURE_PATH = '/srv/media/pictures' WEBP_PATH = File.join PICTURE_PATH, 'webp' TXT_PATH = File.join PICTURE_PATH, 'txt' -COLLECTION_PATH = File.join PICTURE_PATH, 'collections' +ALBUM_PATH = File.join PICTURE_PATH, 'albums' -PICTURE_URL = 'https://media.pdp8.info/pictures' +PICTURE_URL = File.join MEDIA_URL, 'pictures' WEBP_URL = File.join PICTURE_URL, 'webp' +THUMB_URL = File.join PICTURE_URL, 'thumb' JPEG_URL = File.join PICTURE_URL, 'jpeg' +def meta(img, album) + basename = File.basename(img, File.extname(img)) + path = File.join(WEBP_PATH, basename + '.webp') + { + basename: basename, + webp: File.join(WEBP_URL, basename + '.webp'), + txt: File.join(TXT_PATH, basename + '.txt'), + src: File.join(JPEG_URL, basename + File.extname(img)), + thumb: File.join(THUMB_URL, basename + '.webp'), + href: File.join('/pictures', File.basename(album), + File.basename(img, File.extname(img)) + '.html') + } +end + +albums = Dir[File.join ALBUM_PATH, '*'].sort_by { |a| File.mtime a }.reverse + +albums.each do |album| + www_dir = File.join('/srv/www/pdp8-test/pictures', File.basename(album)) + FileUtils.mkdir_p www_dir + images = File.readlines(album, chomp: true) + n = images.size + images.each_with_index do |img, i| + before = meta(images[(i - 1) % n], album)[:href] + after = meta(images[(i + 1) % n], album)[:href] + meta = meta img, album + + html = File.read(File.join(SNIPPETS, 'head.html')) + html += nav 'pictures' + html += "<div class='slide'>" + html += '<img ' + html += "alt='#{File.read(meta[:txt])}' " if File.exist?(meta[:txt]) + html += "src='#{meta[:webp]}'>" + html += "<div class='slidenav'>" + html += "<a href='#{before}' class='navarrow'><</a>" + html += "<a href='/pictures.html##{File.basename(album)}'>#{File.basename(album).gsub('_', ' ')}</a>" + html += "<a href='#{after}' class='navarrow'>></a>" + html += '</div>' + html += '</div>' + html += File.read(File.join(SNIPPETS, 'tail.html')) + html_file = File.join(www_dir, File.basename(img, File.extname(img)) + '.html') + File.open(html_file, 'w+') { |f| f.puts html } + puts `tidy -iqm -w 0 #{html_file} 2>&1` + end +end + html = File.read(File.join(SNIPPETS, 'head.html')) html += nav 'pictures' - -Dir[File.join COLLECTION_PATH, '*'] - .sort_by { |c| File.mtime c } - .reverse.each do |collection| - html += "<div class='post'>" - html += "<h1>#{collection.gsub('_', ' ')}</h1>\n" - File.readlines(collection, chomp: true).each do |line| - basename = File.basename(line, File.extname(line)) - path = File.join(WEBP_PATH, basename + '.webp') - url = File.join(WEBP_URL, basename + '.webp') - alt = File.read(File.join(TXT_PATH, basename, '.txt')) - src = File.join(JPEG_URL, basename + File.extname(url)) - w, h = `/etc/profiles/per-user/ch/bin/identify -format "%w %h" #{path}`.chomp.split(' ') - html += "<a href='#{src}'><img loading='lazy' width='#{w}' height='#{h}' " - html += "alt='#{alt}' src='#{url}'></a>" +albums.each do |album| + www_dir = File.join('/srv/www/pdp8-test/pictures', File.basename(album)) + FileUtils.mkdir_p www_dir + images = File.readlines(album, chomp: true) + n = images.size + html += "<div class='post' id='#{File.basename album}'>" + html += "<h1><a href='#{meta(images.first, + album)[:href]}'>#{File.basename(album).gsub('_', ' ')}</a></h1>\n" + html += "<div class='gallery'>" + images.each_with_index do |img, _i| + meta = meta img, album + html += "<a href='#{meta[:href]}'><img class='thumb' loading='lazy' width='150' height='100' " + html += "alt='#{File.read(meta[:txt])}' " if File.exist?(meta[:txt]) + html += "src='#{meta[:thumb]}'></a>" end html += '</div>' + html += '</div>' end - html += File.read(File.join(SNIPPETS, 'tail.html')) print_html 'pictures', html |