lib/onebox/engine/google_docs_onebox.rb in onebox-1.5.45 vs lib/onebox/engine/google_docs_onebox.rb in onebox-1.5.47
- old
+ new
@@ -1,108 +1,62 @@
module Onebox
module Engine
class GoogleDocsOnebox
include Engine
+ include LayoutSupport
- class << self
- def supported_endpoints
- %w(spreadsheets document forms presentation)
- end
+ def self.supported_endpoints
+ %w(spreadsheets document forms presentation)
+ end
- def embed_widths
- @embed_widths ||= {
- spreadsheets: 800,
- document: 800,
- presentation: 960,
- forms: 760,
- }
- end
-
- def embed_heights
- @embed_heights ||= {
- spreadsheets: 600,
- document: 600,
- presentation: 749,
- forms: 500,
- }
- end
-
- def short_types
- @shorttypes ||= {
- spreadsheets: :sheets,
- document: :docs,
- presentation: :slides,
- forms: :forms,
- }
- end
+ def self.short_types
+ @shorttypes ||= {
+ spreadsheets: :sheets,
+ document: :docs,
+ presentation: :slides,
+ forms: :forms,
+ }
end
matches_regexp /^(https?:)?\/\/(docs\.google\.com)\/(?<endpoint>(#{supported_endpoints.join('|')}))\/d\/((?<key>[\w-]*)).+$/
always_https
- def to_html
- if document?
- "<iframe class='gdocs-onebox document-onebox' src='https://docs.google.com/document/d/#{key}/pub?embedded=true' style='border: 0' width='#{width}' height='#{height}' frameborder='0' scrolling='yes'>#{placeholder_html}</iframe>"
- elsif spreadsheet?
- "<iframe class='gdocs-onebox spreadsheet-onebox' src='https://docs.google.com/spreadsheet/ccc?key=#{key}&usp=sharing&rm=minimal' style='border: 0' width='#{width}' height='#{height}' frameborder='0' scrolling='yes'>#{placeholder_html}</iframe>"
- elsif presentation?
- "<iframe class='gdocs-onebox presentation-onebox' src='https://docs.google.com/presentation/d/#{key}/embed?start=false&loop=false&delayms=3000' frameborder='0' width='#{width}' height='#{height}' allowfullscreen='true' mozallowfullscreen='true' webkitallowfullscreen='true'>#{placeholder_html}</iframe>"
- elsif forms?
- "<iframe class='gdocs-onebox forms-onebox' src='https://docs.google.com/forms/d/#{key}/viewform?embedded=true' width='#{width}' height='#{height}' frameborder='0' marginheight='0' marginwidth='0' scrolling='yes'>#{placeholder_html}</iframe>"
- end
- end
+ protected
- def placeholder_html
- <<HTML
-<div placeholder><div class='gdocs-onebox gdocs-onebox-splash' style='display:table-cell;vertical-align:middle;width:#{width}px;height:#{height}px'>
-<div style='text-align:center;'>
-<div class='gdocs-onebox-logo g-#{shorttype}-logo'></div>
-<p>Google #{shorttype.capitalize}</p>
-<p><a href="https://docs.google.com/#{doc_type}/d/#{key}">#{key}</a></p>
-</div></div></div>
-HTML
+ def data
+ og_data = get_og_data
+ result = { link: link,
+ title: og_data[:title],
+ description: og_data[:description],
+ type: shorttype
+ }
+ result
end
- protected
-
def doc_type
@doc_type ||= match[:endpoint].to_sym
end
def shorttype
GoogleDocsOnebox.short_types[doc_type]
end
- def width
- GoogleDocsOnebox.embed_widths[doc_type]
- end
-
- def height
- GoogleDocsOnebox.embed_heights[doc_type]
- end
-
- def spreadsheet?
- doc_type == :spreadsheets
- end
-
- def document?
- doc_type == :document
- end
-
- def presentation?
- doc_type == :presentation
- end
-
- def forms?
- doc_type == :forms
- end
-
- def key
- match[:key]
- end
-
def match
@match ||= @url.match(@@matcher)
end
+
+ def get_og_data
+ response = Onebox::Helpers.fetch_response(url)
+ html = Nokogiri::HTML(response.body)
+ og_data = {}
+ html.css('meta').each do |m|
+ if m.attribute('property') && m.attribute('property').to_s.match(/^og:/i)
+ m_content = m.attribute('content').to_s.strip
+ m_property = m.attribute('property').to_s.gsub('og:', '')
+ og_data[m_property.to_sym] = m_content
+ end
+ end
+ og_data
+ end
end
end
-end
\ No newline at end of file
+end