Fix the thumbnailer.
This commit is contained in:
parent
58321ef82b
commit
96fa313ccc
5
bin/ace
5
bin/ace
|
@ -43,12 +43,11 @@ rules.rules.each do |klass, files|
|
|||
if File.binread(file).match(/^-{3,5}\s*$/) # TODO: this should be a filter or lazy-loaded
|
||||
puts "~ Read #{file} with parse"
|
||||
raw_item = Ace::RawItem.new(file).tap(&:parse)
|
||||
item = klass.create(raw_item.metadata, raw_item.content)
|
||||
item = klass.create(raw_item.metadata, raw_item.content, file)
|
||||
else
|
||||
puts "~ Read #{file} without parse"
|
||||
item = klass.create(Hash.new, File.read(file))
|
||||
item = klass.create(Hash.new, File.read(file), file)
|
||||
end
|
||||
item.original_path = file
|
||||
end
|
||||
end
|
||||
|
||||
|
|
16
lib/ace.rb
16
lib/ace.rb
|
@ -37,6 +37,11 @@ module Ace
|
|||
self.content = pieces[2..-1].join.strip
|
||||
end
|
||||
|
||||
set_timestamps_in_metadata
|
||||
end
|
||||
|
||||
private
|
||||
def set_timestamps_in_metadata
|
||||
self.metadata[:created_at] ||= File.ctime(self.path)
|
||||
self.metadata[:updated_at] ||= File.mtime(self.path)
|
||||
end
|
||||
|
@ -89,16 +94,17 @@ module Ace
|
|||
self.after_filters << filter.new(*args)
|
||||
end
|
||||
|
||||
def self.create(metadata, content)
|
||||
self.new(metadata, content).tap(&:register)
|
||||
def self.create(*args)
|
||||
self.new(*args).tap(&:register)
|
||||
end
|
||||
|
||||
# Content can be anything, not just a string.
|
||||
attr_accessor :metadata, :content
|
||||
attr_accessor :original_path
|
||||
def initialize(metadata, content)
|
||||
@metadata = metadata
|
||||
@content = content
|
||||
def initialize(metadata, content, original_path)
|
||||
@metadata = metadata
|
||||
@content = content
|
||||
@original_path = original_path
|
||||
end
|
||||
|
||||
def config
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
require "ace/filters"
|
||||
require "nokogiri"
|
||||
|
||||
# <thumbnail src="assets/img/motivation-sheet.jpg" />
|
||||
# <thumbnail src="assets/img/motivation-sheet.jpg" size="550" />
|
||||
# <thumbnail src="assets/img/motivation-sheet.jpg" size="550x20" />
|
||||
# <thumbnail src="/assets/img/motivation-sheet.jpg" />
|
||||
# <thumbnail src="/assets/img/motivation-sheet.jpg" size="550" />
|
||||
# <thumbnail src="/assets/img/motivation-sheet.jpg" size="550x20" />
|
||||
|
||||
# TODO:
|
||||
# class Post < Ace::Item
|
||||
|
@ -14,24 +14,15 @@ require "nokogiri"
|
|||
|
||||
module Ace
|
||||
class ImageThumbnailerFilter < Filter
|
||||
def thumb_path(file_name)
|
||||
@file_name ||= file_name
|
||||
@thumb_path ||= file_name.gsub(/content\/(.+)\.([^\.]*)$/, 'output/\1_thumb.\2')
|
||||
def to_thumb(path)
|
||||
path.to_s.sub(/\.(\w+)$/, '_thumb.\1')
|
||||
end
|
||||
|
||||
def thumb_server_path
|
||||
@thumb_path.sub("content", "")
|
||||
end
|
||||
|
||||
def original_image_server_path
|
||||
@file_name.sub("content", "")
|
||||
end
|
||||
|
||||
def thumbnail_nodeset(file_name, doc)
|
||||
def thumbnail_nodeset(link, 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)
|
||||
link.set_attribute("href", link)
|
||||
image.set_attribute("src", to_thumb(link))
|
||||
image.parent = link
|
||||
return link
|
||||
end
|
||||
|
@ -40,22 +31,23 @@ module Ace
|
|||
puts "~ [THUMB] #{item.original_path}"
|
||||
doc = Nokogiri::HTML(content)
|
||||
doc.css("thumbnail").each do |thumb|
|
||||
original_file = "content/#{thumb[:src]}"
|
||||
generate_thumbnail(original_file, thumb[:size] || 550)
|
||||
thumb.replace(thumbnail_nodeset(original_file, doc))
|
||||
original_image_path = "content" + thumb[:src]
|
||||
thumbnail_path = to_thumb("output" + thumb[:src])
|
||||
generate_thumbnail(original_image_path, thumbnail_path, thumb[:src], thumb[:size] || 550)
|
||||
thumb.replace(thumbnail_nodeset(thumb[:src], 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)}"
|
||||
def generate_thumbnail(original_path, thumbnail_path, link, size)
|
||||
unless File.exist?(thumbnail_path)
|
||||
command = "convert #{original_path} -resize #{size} #{thumbnail_path}"
|
||||
warn "~ $ #{command}"
|
||||
system(command)
|
||||
raise "Error when converting image '#{file_name}'" if $?.to_i != 0
|
||||
raise "Error when converting image '#{original_path}'" if $?.to_i != 0
|
||||
else
|
||||
warn "~ File #{thumb_path(file_name)} already exists."
|
||||
warn "~ File #{thumbnail_path} already exists."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue