]> git.draconx.ca Git - homepage.git/blobdiff - lib/helpers.rb
M48T59Y battery replacement
[homepage.git] / lib / helpers.rb
index 77916dd29492582da2081c4a4a116b7e32105ee1..24d37e4ef33407db32c07153b055ccbb60f8ad6f 100644 (file)
@@ -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 << " &#x2060;"
                 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 => {} }