X-Git-Url: https://git.draconx.ca/gitweb/homepage.git/blobdiff_plain/c047dafad7bcb66a096284497eca6ef20ca1584d..eb8b04d03e5355826a8e4e53274faf24d2320cd3:/lib/helpers.rb diff --git a/lib/helpers.rb b/lib/helpers.rb index 77916dd..24d37e4 100644 --- a/lib/helpers.rb +++ b/lib/helpers.rb @@ -1,6 +1,6 @@ # Nick's web site: Ruby helpers for processing # -# Copyright © 2018-2021 Nick Bowler +# Copyright © 2018-2022 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 @@ -77,26 +77,31 @@ def counter(name = :default, item = @item) name.to_s.capitalize + " " + ($counters[item][name] += 1).to_s end -def img_rep_fallback(item, rep) - return rep unless item.reps[rep].raw_path.nil? - return :large +# Return a hash containing :src, :width and :height based on an image item rep. +def img_rep_attrs(item, rep) + rep = :large if item.reps[rep].raw_path.nil? + attrs = {} + + attrs[:src] ||= item_uri(item, rep: rep) + attrs[:width], attrs[:height] = FastImage.size(item.reps[rep].raw_path) + + return attrs end -def gallery_img(item, rep: :large, alt: nil, caption: nil) +def embed_img(item, rep: :large, caption: nil, block_attrs: {}, img_attrs: {}) return "[image not found]" unless item - alt ||= item[:title] - caption ||= alt + img_attrs[:alt] ||= item[:title] + caption ||= img_attrs[:alt] caption = caption.strip caption.gsub!(/\s+/, " ") - rep = img_rep_fallback(item, rep) - attrs = { :src => item_uri(item, rep: rep), :alt => item[:title] } - attrs[:width], attrs[:height] = FastImage.size(item.reps[rep].raw_path) + img_attrs = img_rep_attrs(item, rep).merge(img_attrs) + block_attrs[:href] = item_uri(item, rep: :info) b = Nokogiri::XML::Builder.new do |xml| - xml.a(:href => item_uri(item, rep: :info)) { - xml.img(attrs, "generate-gallery" => "generate-gallery") + xml.a(block_attrs) { + xml.img(img_attrs) unless caption.empty? xml << " ⁠" xml.small { xml << caption } @@ -106,6 +111,19 @@ def gallery_img(item, rep: :large, alt: nil, caption: nil) b.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::NO_DECLARATION) end +def gallery_img(item, rep: :medium, caption: nil, alt: nil) + attrs = { alt: alt, "generate-gallery" => "generate-gallery" } + embed_img(item, rep: rep, caption: caption, img_attrs: attrs) +end + +def floating_img(item, rep: :medium, caption: nil, alt: nil, left: nil) + battrs = { class: if left then "left" else "right" end } + attrs = { alt: alt } + + embed_img(item, rep: rep, caption: caption, + block_attrs: battrs, img_attrs: attrs) +end + def expand_copyright(copyright) result = { :years => {} }