summaryrefslogtreecommitdiff
path: root/pictures.rb
diff options
context:
space:
mode:
Diffstat (limited to 'pictures.rb')
-rwxr-xr-xpictures.rb83
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'>&lt;</a>"
+ html += "<a href='/pictures.html##{File.basename(album)}'>#{File.basename(album).gsub('_', ' ')}</a>"
+ html += "<a href='#{after}' class='navarrow'>&gt;</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