require 'open-uri'
module Lipsiadmin
module View
module Helpers
module FrontendHelper
# Set the title of the page and append at the end the name of the project
# Usefull for google & c.
def title(text)
content_for(:title) { text + " - #{AppConfig.project}" }
end
# Set the meta description of the page
# Usefull for google & c.
def description(text)
content_for(:description) { text }
end
# Set the meta keywords of the page
# Usefull for google & c.
def keywords(text)
content_for(:keywords) { text }
end
# Override the default image tag with a special option
# resize that crop/resize on the fly the image
# and store them in uploads/thumb directory.
#
def image_tag(source, options = {})
options.symbolize_keys!
# We set here the upload path
upload_path = "uploads/thumbs"
# Now we can create a thumb on the fly
if options[:resize]
begin
geometry = options.delete(:resize)
filename = File.basename(source)
new_filename = "#{geometry}_#{filename}".downcase.gsub(/#/, '')
# Checking if we have just process them (we don't want to do the same job two times)
if File.exist?("#{Rails.root}/public/#{upload_path}/#{new_filename}")
options[:src] = "/#{upload_path}/#{new_filename}"
else # We need to create the thumb
FileUtils.mkdir("#{Rails.root}/tmp") unless File.exist?("#{Rails.root}/tmp")
# We create a temp file of the original file
# Notice that we can download them from an url! So this Image can reside anywhere on the web
if source =~ /#{URI.regexp}/
tmp = File.new("#{Rails.root}/tmp/#{filename}", "w")
tmp.write open(source).read
tmp.close
else # If the image is local
tmp = File.open(File.join("#{Rails.root}/public", path_to_image(source).gsub(/\?+\d*/, "")))
end
# Now we generate a thumb with our Thumbnail Processor (based on Paperclip)
thumb = Lipsiadmin::Attachment::Thumbnail.new(tmp, :geometry => geometry).make
# We check if our dir exists
FileUtils.mkdir_p("#{Rails.root}/public/#{upload_path}") unless File.exist?("#{Rails.root}/public/#{upload_path}")
# Now we put the image in our public path
File.open("#{Rails.root}/public/#{upload_path}/#{new_filename}", "w") do |f|
f.write thumb.read
end
# Finally we return the new image path
options[:src] = "/#{upload_path}/#{new_filename}"
end
rescue Exception => e
options[:src] = path_to_image(source)
ensure
File.delete(tmp.path) if tmp && tmp.path =~ /#{Rails.root}\/tmp/
File.delete(thumb.path) if thumb
end
end
if size = options.delete(:size)
options[:width], options[:height] = size.split("x") if size =~ %r{^\d+x\d+$}
end
options[:src] ||= path_to_image(source)
options[:alt] ||= File.basename(options[:src], '.*').
split('.').first.to_s.capitalize
if mouseover = options.delete(:mouseover)
options[:onmouseover] = "this.src='#{image_path(mouseover)}'"
options[:onmouseout] = "this.src='#{image_path(options[:src])}'"
end
tag("img", options)
end
end
end
end
end