diff --git a/CHANGELOG b/CHANGELOG
index 7791b8c..2cab94b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
= Version 0.4
* Added project generator (ace-gen).
+ * Fixed filter for image thumbnails.
= Version 0.3
* Added LazyRendering mixin.
diff --git a/lib/ace/filters/image_thumbnailer.rb b/lib/ace/filters/image_thumbnailer.rb
index e952c17..b4d5774 100644
--- a/lib/ace/filters/image_thumbnailer.rb
+++ b/lib/ace/filters/image_thumbnailer.rb
@@ -3,37 +3,59 @@
require "ace/filters"
require "nokogiri"
+#
+#
+#
+
+# TODO:
+# class Post < Ace::Item
+# before Ace::ImageThumbnailerFilter, default_thumb_size: 550
+# end
module Ace
class ImageThumbnailerFilter < Filter
- def thumb_name(filename)
- filename.gsub(/\.([^\.]*)$/, '_thumb.\1')
+ def thumb_path(file_name)
+ @file_name ||= file_name
+ @thumb_path ||= file_name.gsub(/\.([^\.]*)$/, '_thumb.\1')
end
- def thumbnail_nodeset(filename, doc)
- a = Nokogiri::XML::Node.new 'a', doc
- img = Nokogiri::XML::Node.new 'img', doc
- a.set_attribute('href', filename)
- img.set_attribute('src', thumb_name(filename))
- img.parent = a
- a
+ def thumb_server_path
+ @thumb_path.sub("content", "")
end
-
- def make_thumbnail_image(filename, size)
- size ||= 20 # default size
- cmd = "convert content#{filename} -resize #{size} content#{thumb_name(filename)}"
- warn "~ make thumbnail with '#{cmd}'"
- system(cmd)
- raise "Error when converting image 'content#{filename}'" if $?.to_i != 0
+
+ def original_image_server_path
+ @file_name.sub("content", "")
+ end
+
+ def thumbnail_nodeset(file_name, doc)
+ link = Nokogiri::XML::Node.new("a", doc)
+ image = Nokogiri::XML::Node.new("img", doc)
+ link.set_attribute("href", original_image_server_path)
+ image.set_attribute("src", thumb_server_path)
+ image.parent = link
+ return link
end
def call(item, content)
- puts item.inspect
+ puts "~ [THUMB] #{item.original_path}"
doc = Nokogiri::HTML(content)
doc.css("thumbnail").each do |thumb|
- make_thumbnail_image thumb[:src], thumb[:size]
- thumb.replace thumbnail_nodeset(thumb[:src], doc)
+ original_file = "content/#{thumb[:src]}"
+ generate_thumbnail(original_file, thumb[:size] || 550)
+ thumb.replace(thumbnail_nodeset(original_file, doc))
end
doc.to_s
end
+
+ private
+ def generate_thumbnail(file_name, size)
+ unless File.exist?(thumb_path(file_name))
+ command = "convert #{file_name} -resize #{size} #{thumb_path(file_name)}"
+ warn "~ $ #{command}"
+ system(command)
+ raise "Error when converting image '#{file_name}'" if $?.to_i != 0
+ else
+ warn "~ File #{thumb_path(file_name)} already exists."
+ end
+ end
end
end
diff --git a/lib/ace/version.rb b/lib/ace/version.rb
index 9337881..ea8e5f2 100644
--- a/lib/ace/version.rb
+++ b/lib/ace/version.rb
@@ -1,5 +1,5 @@
# encoding: utf-8
module Ace
- VERSION = "0.4.1"
+ VERSION = "0.4.2"
end