discourse/plugins/lazyYT/plugin.rb

52 lines
1.7 KiB
Ruby
Raw Normal View History

2014-07-22 10:39:32 +08:00
# name: lazyYT
# about: Uses the lazyYT plugin to lazy load Youtube videos
2015-01-27 20:30:07 +08:00
# version: 1.0.1
2014-07-22 10:39:32 +08:00
# authors: Arpit Jalan
# url: https://github.com/discourse/discourse/tree/master/plugins/lazyYT
2014-07-22 10:39:32 +08:00
# javascript
register_asset "javascripts/lazyYT.js"
register_asset "javascripts/jquery.iframetracker.js"
2014-07-22 10:39:32 +08:00
# stylesheet
register_asset "stylesheets/lazyYT.css"
2014-07-28 14:20:08 +08:00
register_asset "stylesheets/lazyYT_mobile.scss", :mobile
2014-07-22 10:39:32 +08:00
# freedom patch YouTube Onebox
class Onebox::Engine::YoutubeOnebox
include Onebox::Engine
alias_method :yt_onebox_to_html, :to_html
2014-07-22 10:39:32 +08:00
def to_html
if video_id && !params['list']
video_width = (params['width'] && params['width'].to_i <= 695) ? params['width'] : 480 # embed width
video_height = (params['height'] && params['height'].to_i <= 500) ? params['height'] : 270 # embed height
# Put in the LazyYT div instead of the iframe
2016-01-30 19:32:48 +08:00
escaped_title = ERB::Util.html_escape(video_title)
"<div class=\"lazyYT\" data-youtube-id=\"#{video_id}\" data-youtube-title=\"#{escaped_title}\" data-width=\"#{video_width}\" data-height=\"#{video_height}\" data-parameters=\"#{embed_params}\"></div>"
2014-07-22 10:39:32 +08:00
else
yt_onebox_to_html
2014-07-22 10:39:32 +08:00
end
end
2014-07-26 21:11:21 +08:00
2014-07-22 10:39:32 +08:00
end
after_initialize do
Email::Styles.register_plugin_style do |fragment|
# YouTube onebox can't go in emails, so replace them with clickable links
fragment.css('.lazyYT').each do |i|
begin
src = "https://www.youtube.com/embed/#{i['data-youtube-id']}?autoplay=1&#{i['data-parameters']}"
src_uri = URI(src)
display_src = "https://#{src_uri.host}#{src_uri.path}"
i.replace "<p><a href='#{src_uri.to_s}'>#{display_src}</a><p>"
rescue URI::InvalidURIError
# If the URL is weird, remove it
i.remove
end
end
end
end