From 3c7b71018b4c0df9b9adee56b1ff7b89e9785631 Mon Sep 17 00:00:00 2001 From: palomahnhp Date: Sun, 20 Mar 2016 20:14:49 +0100 Subject: [PATCH] embed video in proposal show --- app/assets/javascripts/application.js | 2 ++ app/assets/javascripts/embed_video.js.coffee | 7 +++++ app/helpers/embed_videos_helper.rb | 30 ++++++++++++++++++++ app/views/proposals/show.html.erb | 3 +- spec/features/proposals_spec.rb | 23 +++++++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 app/assets/javascripts/embed_video.js.coffee create mode 100644 app/helpers/embed_videos_helper.rb diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 7fc81e03e..a688ae0b3 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -42,6 +42,7 @@ //= require suggest //= require forms //= require valuation_spending_proposal_form +//= require embed_video var initialize_modules = function() { App.Comments.initialize(); @@ -59,6 +60,7 @@ var initialize_modules = function() { App.Suggest.initialize(); App.Forms.initialize(); App.ValuationSpendingProposalForm.initialize(); + App.EmbedVideo.initialize(); }; $(function(){ diff --git a/app/assets/javascripts/embed_video.js.coffee b/app/assets/javascripts/embed_video.js.coffee new file mode 100644 index 000000000..85c18ac8e --- /dev/null +++ b/app/assets/javascripts/embed_video.js.coffee @@ -0,0 +1,7 @@ +App.EmbedVideo = + + initialize: -> + $('#js-embedded-video').each -> + code = $(this).data("video-code") + $('#js-embedded-video').html(code) + \ No newline at end of file diff --git a/app/helpers/embed_videos_helper.rb b/app/helpers/embed_videos_helper.rb new file mode 100644 index 000000000..b53aeef21 --- /dev/null +++ b/app/helpers/embed_videos_helper.rb @@ -0,0 +1,30 @@ +module EmbedVideosHelper + + def embedded_video_code + link = @proposal.video_url + if link.match(/vimeo.*/) + server = "Vimeo" + elsif link.match(/youtu*.*/) + server = "YouTube" + end + + if server == "Vimeo" + regExp = /vimeo.*(staffpicks\/|channels\/|videos\/|video\/|\/)([^#\&\?]*).*/ + src = "https://player.vimeo.com/video/" + elsif server == "YouTube" + regExp = /youtu.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/ + src = "https://www.youtube.com/embed/" + end + + if regExp + match = link.match(regExp) + end + + if match and match[2] + '' + else + '' + end + end + +end \ No newline at end of file diff --git a/app/views/proposals/show.html.erb b/app/views/proposals/show.html.erb index 3a7434d75..a686cba36 100644 --- a/app/views/proposals/show.html.erb +++ b/app/views/proposals/show.html.erb @@ -62,7 +62,8 @@ - <% end %> +
+ <% end %>

<%= @proposal.question %>

diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 2d2804233..bde574935 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -87,6 +87,29 @@ feature 'Proposals' do end end + context "Embedded video" do + scenario "Show YouTube video" do + proposal = create(:proposal, video_url: "http://www.youtube.com/watch?v=a7UFm6ErMPU") + visit proposal_path(proposal) + expect(page).to have_selector("div[id='js-embedded-video']") + expect(page.html).to include 'https://www.youtube.com/embed/a7UFm6ErMPU' + end + + scenario "Show Vimeo video" do + proposal = create(:proposal, video_url: "https://vimeo.com/7232823" ) + visit proposal_path(proposal) + expect(page).to have_selector("div[id='js-embedded-video']") + expect(page.html).to include 'https://player.vimeo.com/video/7232823' + end + + scenario "Dont show video" do + proposal = create(:proposal, video_url: nil) + + visit proposal_path(proposal) + expect(page).to_not have_selector("div[id='js-embedded-video']") + end + end + scenario 'Social Media Cards' do proposal = create(:proposal)