Add Ace::ImageThumbnailerFilter
in haml template use %thumbnail{src: "/images/image.png"} or with defined thumbnail size %thumbnail{src: "/images/image.png", size: "20x30"}
This commit is contained in:
parent
2733d81533
commit
b5ae0a7562
1 changed files with 39 additions and 0 deletions
39
lib/ace/filters/image_thumbnailer.rb
Normal file
39
lib/ace/filters/image_thumbnailer.rb
Normal file
|
@ -0,0 +1,39 @@
|
|||
# encoding: utf-8
|
||||
|
||||
require "ace/filters"
|
||||
require "nokogiri"
|
||||
|
||||
module Ace
|
||||
class ImageThumbnailerFilter < Filter
|
||||
def thumb_name(filename)
|
||||
filename.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
|
||||
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
|
||||
end
|
||||
|
||||
def call(item, content)
|
||||
puts item.inspect
|
||||
doc = Nokogiri::HTML(content)
|
||||
doc.css("thumbnail").each do |thumb|
|
||||
make_thumbnail_image thumb[:src], thumb[:size]
|
||||
thumb.replace thumbnail_nodeset(thumb[:src], doc)
|
||||
end
|
||||
doc.to_s
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue