discourse/lib/oneboxer/handlebars_onebox.rb

61 lines
1.5 KiB
Ruby
Raw Normal View History

2013-02-06 03:16:51 +08:00
require 'open-uri'
require_dependency 'oneboxer/base_onebox'
module Oneboxer
class HandlebarsOnebox < BaseOnebox
unless defined? MAX_TEXT
MAX_TEXT = 500
end
2013-02-06 03:16:51 +08:00
def self.template_path(template_name)
2013-02-06 03:16:51 +08:00
"#{Rails.root}/lib/oneboxer/templates/#{template_name}.hbrs"
end
def template_path(template_name)
HandlebarsOnebox.template_path(template_name)
end
2013-02-06 03:16:51 +08:00
def template
template_name = self.class.name.underscore
template_name.gsub!(/oneboxer\//, '')
template_path(template_name)
end
def default_url
"<a href='#{@url}' target='_blank'>#{@url}</a>"
end
def http_params
{'User-Agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3'}
end
2013-06-13 07:39:18 +08:00
def fetch_html
open(translate_url, http_params).read
end
2013-02-06 03:16:51 +08:00
def onebox
2013-06-13 07:39:18 +08:00
html = fetch_html
2013-02-06 03:16:51 +08:00
args = parse(html)
return default_url unless args.present?
args[:original_url] = @url
args[:lang] = @lang || ""
args[:favicon] = ActionController::Base.helpers.image_path(self.class.favicon_file) if self.class.favicon_file.present?
2013-03-02 07:46:55 +08:00
args[:host] = nice_host
2013-02-06 03:16:51 +08:00
HandlebarsOnebox.generate_onebox(template,args)
2013-02-06 03:16:51 +08:00
rescue => ex
# If there's an exception, just embed the link
2013-02-26 00:42:20 +08:00
raise ex if Rails.env.development?
default_url
2013-02-06 03:16:51 +08:00
end
def self.generate_onebox(template, args)
Mustache.render(File.read(template), args)
end
2013-02-06 03:16:51 +08:00
end
end