wip
This commit is contained in:
parent
b334a048bf
commit
963d5c1a69
2 changed files with 69 additions and 2 deletions
|
|
@ -19,7 +19,6 @@ module MarkdownifyHelper
|
||||||
render_options[:filter_html] = true
|
render_options[:filter_html] = true
|
||||||
render_options[:hard_wrap] ||= true
|
render_options[:hard_wrap] ||= true
|
||||||
|
|
||||||
|
|
||||||
# This ugly little hack basically means
|
# This ugly little hack basically means
|
||||||
# "Give me the rawest contents of target available"
|
# "Give me the rawest contents of target available"
|
||||||
if target.respond_to?(:raw_message)
|
if target.respond_to?(:raw_message)
|
||||||
|
|
@ -34,8 +33,10 @@ module MarkdownifyHelper
|
||||||
|
|
||||||
#renderer = Redcarpet::Render::HTML.new(render_options)
|
#renderer = Redcarpet::Render::HTML.new(render_options)
|
||||||
if render_options[:oembed]
|
if render_options[:oembed]
|
||||||
|
puts "oembed"
|
||||||
renderer = Diaspora::Markdownify::HTMLwithOEmbed.new(render_options)
|
renderer = Diaspora::Markdownify::HTMLwithOEmbed.new(render_options)
|
||||||
else
|
else
|
||||||
|
puts "not oembed"
|
||||||
renderer = Diaspora::Markdownify::HTML.new(render_options)
|
renderer = Diaspora::Markdownify::HTML.new(render_options)
|
||||||
end
|
end
|
||||||
markdown = Redcarpet::Markdown.new(renderer, markdown_options)
|
markdown = Redcarpet::Markdown.new(renderer, markdown_options)
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,74 @@ module Diaspora
|
||||||
include ActionView::Helpers::TagHelper
|
include ActionView::Helpers::TagHelper
|
||||||
|
|
||||||
def autolink(link, type)
|
def autolink(link, type)
|
||||||
auto_link(link, :link => :urls)
|
auto_link(link, :link => :urls, :html => { :target => "_blank" })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class HTMLwithOEmbed < Redcarpet::Render::HTML
|
||||||
|
include ActionView::Helpers::UrlHelper
|
||||||
|
include ActionView::Helpers::TextHelper
|
||||||
|
include ActionView::Helpers::TagHelper
|
||||||
|
include ActionView::Helpers::AssetTagHelper
|
||||||
|
include ActionView::Helpers::RawOutputHelper
|
||||||
|
|
||||||
|
def autolink(link, type)
|
||||||
|
#auto_link(link, :link => :urls, :html => { :target => "_blank" })
|
||||||
|
|
||||||
|
title = link
|
||||||
|
url = auto_link(link, :link => :urls).scan(/href=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?/).first.first
|
||||||
|
url = CGI::unescapeHTML(url)
|
||||||
|
|
||||||
|
# SECURITY NOTICE! CROSS-SITE SCRIPTING!
|
||||||
|
# these endpoints may inject html code into our page
|
||||||
|
secure_endpoints = [::OEmbed::Providers::Youtube.endpoint,
|
||||||
|
::OEmbed::Providers::Viddler.endpoint,
|
||||||
|
::OEmbed::Providers::Qik.endpoint,
|
||||||
|
::OEmbed::Providers::Revision3.endpoint,
|
||||||
|
::OEmbed::Providers::Hulu.endpoint,
|
||||||
|
::OEmbed::Providers::Vimeo.endpoint,
|
||||||
|
'http://soundcloud.com/oembed',
|
||||||
|
]
|
||||||
|
|
||||||
|
# note that 'trusted_endpoint_url' is the only information
|
||||||
|
# in OEmbed that we can trust. anything else may be spoofed!
|
||||||
|
cache = OEmbedCache.find_by_url(url)
|
||||||
|
if not cache.nil? and cache.data.has_key?('type')
|
||||||
|
case cache.data['type']
|
||||||
|
when 'video', 'rich'
|
||||||
|
if secure_endpoints.include?(cache.data['trusted_endpoint_url']) and cache.data.has_key?('html')
|
||||||
|
rep = raw(cache.data['html'])
|
||||||
|
elsif cache.data.has_key?('thumbnail_url')
|
||||||
|
img_options = {}
|
||||||
|
img_options.merge!({:height => cache.data['thumbnail_height'],
|
||||||
|
:width => cache.data['thumbnail_width']}) if cache.data.has_key?('thumbnail_width') and cache.data.has_key?('thumbnail_height')
|
||||||
|
img_options[:alt] = cache.data['title'] if cache.data.has_key?('title')
|
||||||
|
rep = link_to(image_tag(cache.data['thumbnail_url'], img_options),
|
||||||
|
url, :target => '_blank')
|
||||||
|
end
|
||||||
|
|
||||||
|
when 'photo'
|
||||||
|
if cache.data.has_key?('url')
|
||||||
|
img_options = {}
|
||||||
|
img_options.merge!({:height => cache.data['height'],
|
||||||
|
:width => cache.data['width']}) if cache.data.has_key?('width') and cache.data.has_key?('height')
|
||||||
|
img_options[:alt] = cache.data['title'] if cache.data.has_key?('title')
|
||||||
|
rep = link_to(image_tag(cache.data['url'], img_options),
|
||||||
|
url, :target => '_blank')
|
||||||
|
end
|
||||||
|
else
|
||||||
|
puts "mega derp"
|
||||||
|
end
|
||||||
|
|
||||||
|
title = cache.data['title'] \
|
||||||
|
if cache.data.has_key?('title') and \
|
||||||
|
not cache.data['title'].blank?
|
||||||
|
end
|
||||||
|
|
||||||
|
rep ||= link_to(title, url, :target => '_blank') if rep.blank?
|
||||||
|
return rep
|
||||||
|
end
|
||||||
|
end
|
||||||
|
>>>>>>> wip
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue