2013-02-05 14:16:51 -05:00
|
|
|
require 'open-uri'
|
|
|
|
require_dependency 'oneboxer/handlebars_onebox'
|
|
|
|
|
|
|
|
module Oneboxer
|
|
|
|
|
|
|
|
class OembedOnebox < HandlebarsOnebox
|
|
|
|
|
|
|
|
MAX_TEXT = 500
|
|
|
|
|
|
|
|
def oembed_endpoint
|
|
|
|
@url
|
|
|
|
end
|
2013-02-25 11:42:20 -05:00
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
def template
|
|
|
|
template_path('oembed_onebox')
|
|
|
|
end
|
|
|
|
|
|
|
|
def onebox
|
|
|
|
|
|
|
|
parsed = JSON.parse(open(oembed_endpoint).read)
|
|
|
|
|
|
|
|
# If it's a video, just embed the iframe
|
|
|
|
if %w(video rich).include?(parsed['type'])
|
|
|
|
|
|
|
|
# Return a preview of the thumbnail url, since iframes don't do well on previews
|
|
|
|
preview = nil
|
|
|
|
preview = "<img src='#{parsed['thumbnail_url']}'>" if parsed['thumbnail_url'].present?
|
|
|
|
return [parsed['html'], preview]
|
|
|
|
end
|
|
|
|
|
|
|
|
if %w(image photo).include?(parsed['type'])
|
|
|
|
return BaseOnebox.image_html(parsed['url'] || parsed['thumbnail_url'], parsed['title'], parsed['web_page'] || @url)
|
|
|
|
end
|
|
|
|
|
|
|
|
parsed['html'] ||= parsed['abstract']
|
2013-03-01 18:46:55 -05:00
|
|
|
parsed['host'] = nice_host
|
2013-02-05 14:16:51 -05:00
|
|
|
|
|
|
|
|
|
|
|
Mustache.render(File.read(template), parsed)
|
|
|
|
rescue OpenURI::HTTPError
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|