From 56a4f3a3f8efafe7981b74fc23d688ee632e1636 Mon Sep 17 00:00:00 2001 From: bohung Date: Mon, 12 Sep 2022 22:41:44 +0800 Subject: [PATCH] Fix bug. --- app/models/ad_image.rb | 14 +- .../_ad_banner_widget2_video.html.erb | 352 +++++++++--------- 2 files changed, 187 insertions(+), 179 deletions(-) diff --git a/app/models/ad_image.rb b/app/models/ad_image.rb index 7662d33..129042f 100644 --- a/app/models/ad_image.rb +++ b/app/models/ad_image.rb @@ -91,9 +91,17 @@ class AdImage def embed_url uri = URI.parse(self.youtube) rescue nil if !uri.nil? && uri.host == "www.youtube.com" - params = CGI.parse(uri.query) - v = params['v'].first - return "//www.youtube.com/embed/#{v}" + if uri.path.start_with?('/embed/') + return self.youtube.sub(/http(s|):\/\//,'//') + else + params = CGI.parse(uri.query.to_s) + v = params.blank? ? nil : params['v'].first + if v.blank? + return "" + else + return "//www.youtube.com/embed/#{v}" + end + end else return "" end diff --git a/modules/ad_banner/_ad_banner_widget2_video.html.erb b/modules/ad_banner/_ad_banner_widget2_video.html.erb index 0c16c9d..4f4cb4b 100644 --- a/modules/ad_banner/_ad_banner_widget2_video.html.erb +++ b/modules/ad_banner/_ad_banner_widget2_video.html.erb @@ -171,193 +171,193 @@ $("*[data-yt-binded=0]").each(function(){ init_yt_banner(this); }) -if (typeof onYouTubeIframeAPIReady !== 'function'){ - $(document).ready(function() { - $(document).on('touchstart click mousedown',".jarallax-video-audio",function(){ - $(this).trigger('click'); + if (typeof onYouTubeIframeAPIReady !== 'function'){ + $(document).ready(function() { + $(document).on('touchstart click mousedown',".jarallax-video-audio",function(){ + $(this).trigger('click'); + }); }); - }); - if(window.yt_players == undefined) - window.yt_players = {}; - function find_out_yt_event_list_key(yt_player){ - var defalt_key = 'o'; - var all_keys = Object.keys(yt_player).filter(function(s){return s.length == 1}); - var prop_nums_thresh = 6; - if(all_keys.indexOf(defalt_key) != -1){ - if((yt_player[defalt_key] instanceof Object) && Object.keys(yt_player[defalt_key]).length > prop_nums_thresh){ - return defalt_key; - } - } - var event_key; - all_keys.forEach(function(k){ - if((yt_player[k] instanceof Object) && Object.keys(yt_player[k]).length > prop_nums_thresh){ - event_key = k; - return false; - } - }) - return event_key; - } - function find_out_yt_event_list_count_key(yt_player, event_list_key){ - var defalt_key = 'v'; - var all_keys = Object.keys(yt_player).filter(function(s){return s.length == 1}); - var equal_count = yt_player[event_list_key].length; - if(all_keys.indexOf(defalt_key) != -1){ - if(yt_player[defalt_key] == equal_count){ - return defalt_key; - } - } - var count_key; - all_keys.forEach(function(k){ - if(yt_player[k] == equal_count){ - count_key = k; - return false; - } - }) - return count_key; - } - function find_out_yt_event_list_array_key(event_dict){ - var defalt_key = 'i'; - var all_keys = Object.keys(event_dict); - if(all_keys.indexOf(defalt_key) != -1){ - var tmp = event_dict[defalt_key]; - if(Array.isArray(tmp) && tmp.indexOf('onStateChange') != -1){ - return defalt_key; - } - } - var array_key; - all_keys.forEach(function(k){ - var tmp = event_dict[k]; - if(Array.isArray(tmp) && tmp.indexOf('onStateChange') != -1){ - array_key = k; - return false; - } - }) - return array_key; - } - function find_out_yt_event_relation_key(event_dict, is_obj){ // is_obj = true => store event idx array. false => store whether event init(true or false) - var defalt_key = 'j'; - var all_keys = Object.keys(event_dict); - if(all_keys.indexOf(defalt_key) != -1){ - var tmp = event_dict[defalt_key]; - if((tmp instanceof Object) && tmp['onStateChange']){ - if(!is_obj || (tmp['onStateChange'] instanceof Object)){ + if(window.yt_players == undefined) + window.yt_players = {}; + function find_out_yt_event_list_key(yt_player){ + var defalt_key = 'o'; + var all_keys = Object.keys(yt_player).filter(function(s){return s.length == 1}); + var prop_nums_thresh = 6; + if(all_keys.indexOf(defalt_key) != -1){ + if((yt_player[defalt_key] instanceof Object) && Object.keys(yt_player[defalt_key]).length > prop_nums_thresh){ return defalt_key; } } - } - var relation_key; - all_keys.forEach(function(k){ - var tmp = event_dict[k]; - if((tmp instanceof Object) && tmp['onStateChange']){ - if(!is_obj || (tmp['onStateChange'] instanceof Object)){ - relation_key = k; + var event_key; + all_keys.forEach(function(k){ + if((yt_player[k] instanceof Object) && Object.keys(yt_player[k]).length > prop_nums_thresh){ + event_key = k; return false; } - } - }) - return relation_key; - } - function onYouTubeIframeAPIReady(){ - $(".w-ba-banner").on('cycle-post-initialize', function(){ - init_banner(this); - }); - function init_banner(banner){ - var $banner = $(banner); - $banner.find('.w-ad-banner__slide').each(function(j, banner__slide){ - init_yt_banner(banner__slide); }) - var iframes = $banner.find("iframe"); - if(iframes.length > 0){ - var id = $banner.attr("data-subpart-id"); - if(yt_players[id] == undefined) - yt_players[id] = {}; - var remove_ids = []; - Object.keys(yt_players[id]).forEach(function(k){ - var yt_player = yt_players[id][k]; - if($(yt_player.getIframe()).length == 0){ - yt_player.destroy(); - remove_ids.push(k); - } - }) - remove_ids.forEach(function(k){ - delete yt_players[id][k]; - }) - iframes.each(function(i,iframe){ - var yt_id = $(iframe).attr("id"); - var yt_player = yt_players[id][$(iframe).attr("id")]; - if(yt_player){ - }else{ - yt_player = new YT.Player($(iframe).attr("id"), { - events: { - 'onReady': function(event){ - var yt_player = event.target; - var height = $(yt_player.getIframe()).height(); - var banner_wrap = $(iframe).parents('.w-ba-banner__wrap').eq(0); - var carousel_wrap = banner_wrap.find(".cycle-carousel-wrap"); - if(carousel_wrap.length){ - carousel_wrap.css("top","3em"); - height += parseInt(carousel_wrap.css('font-size')) * 3; - } - banner_wrap.height(height).css({"padding-bottom":"","padding-top":""}); - var init_key = find_out_yt_event_relation_key(yt_player, false); - if(init_key){ - delete yt_player[init_key].onStateChange; - } - else{ - console.log("{onReady: true, onStateChange: true} missing!"); - } - var event_list_key = find_out_yt_event_list_key(yt_player); - if(event_list_key){ - var event_dict = yt_player[event_list_key]; - var array_key = find_out_yt_event_list_array_key(event_dict); - var count_key = find_out_yt_event_list_count_key(event_dict, array_key); - var relation_key = find_out_yt_event_relation_key(event_dict, true); - var onStateChange_idx = event_dict[relation_key].onStateChange; - onStateChange_idx.reverse(); - var event_size = 3; - onStateChange_idx.forEach(function(start_idx){ - event_dict[array_key].splice(start_idx,event_size); - }); - event_dict[relation_key].onStateChange = []; - event_dict[count_key] = event_dict[array_key].length; - yt_player.addEventListener('onStateChange',onPlayerStateChange); - banner_wrap.trigger('resize'); - }else{ - console.log("YT player changes its variables!") - } - {{extra_ready_script}} - }, - 'onStateChange': onPlayerStateChange - } - }); - yt_players[id][$(iframe).attr("id")] = yt_player; - $(iframe).data("yt_player",yt_player); - } - }) + return event_key; + } + function find_out_yt_event_list_count_key(yt_player, event_list_key){ + var defalt_key = 'v'; + var all_keys = Object.keys(yt_player).filter(function(s){return s.length == 1}); + var equal_count = yt_player[event_list_key].length; + if(all_keys.indexOf(defalt_key) != -1){ + if(yt_player[defalt_key] == equal_count){ + return defalt_key; + } } + var count_key; + all_keys.forEach(function(k){ + if(yt_player[k] == equal_count){ + count_key = k; + return false; + } + }) + return count_key; } - $(".w-ba-banner").each(function(i,banner){ - init_banner(banner); - }) - } - function onPlayerStateChange(event){ - var iframe = $(event.target.getIframe()), - cyclediv = iframe.parents("div.cycle-slideshow"); - var widget = cyclediv.parents('.ba-banner-widget-youtube'); - if(event.data == YT.PlayerState.PLAYING || event.data == YT.PlayerState.BUFFERING){ - cyclediv[0].need_resume = !(cyclediv.hasClass("cycle-paused")); - cyclediv.cycle("pause"); - widget.find('.banner-pager,.controlplay,.button-mid,.ad-overlay,.banner-overlay').css('visibility','hidden') - ad_audio_button(iframe.parents(".w-ad-banner__slide").eq(0),false); - }else if(event.data == YT.PlayerState.UNSTARTED || event.data == YT.PlayerState.PAUSED || event.data == YT.PlayerState.ENDED){ - if(cyclediv[0].need_resume) - cyclediv.cycle("resume"); - widget.find('.banner-pager,.controlplay,.button-mid,.ad-overlay,.banner-overlay').css('visibility','') - ad_audio_button(iframe.parents(".w-ad-banner__slide").eq(0),true); + function find_out_yt_event_list_array_key(event_dict){ + var defalt_key = 'i'; + var all_keys = Object.keys(event_dict); + if(all_keys.indexOf(defalt_key) != -1){ + var tmp = event_dict[defalt_key]; + if(Array.isArray(tmp) && tmp.indexOf('onStateChange') != -1){ + return defalt_key; + } + } + var array_key; + all_keys.forEach(function(k){ + var tmp = event_dict[k]; + if(Array.isArray(tmp) && tmp.indexOf('onStateChange') != -1){ + array_key = k; + return false; + } + }) + return array_key; + } + function find_out_yt_event_relation_key(event_dict, is_obj){ // is_obj = true => store event idx array. false => store whether event init(true or false) + var defalt_key = 'j'; + var all_keys = Object.keys(event_dict); + if(all_keys.indexOf(defalt_key) != -1){ + var tmp = event_dict[defalt_key]; + if((tmp instanceof Object) && tmp['onStateChange']){ + if(!is_obj || (tmp['onStateChange'] instanceof Object)){ + return defalt_key; + } + } + } + var relation_key; + all_keys.forEach(function(k){ + var tmp = event_dict[k]; + if((tmp instanceof Object) && tmp['onStateChange']){ + if(!is_obj || (tmp['onStateChange'] instanceof Object)){ + relation_key = k; + return false; + } + } + }) + return relation_key; + } + function onYouTubeIframeAPIReady(){ + $(".w-ba-banner").on('cycle-post-initialize', function(){ + init_banner(this); + }); + function init_banner(banner){ + var $banner = $(banner); + $banner.find('.w-ad-banner__slide').each(function(j, banner__slide){ + init_yt_banner(banner__slide); + }) + var iframes = $banner.find("iframe"); + if(iframes.length > 0){ + var id = $banner.attr("data-subpart-id"); + if(yt_players[id] == undefined) + yt_players[id] = {}; + var remove_ids = []; + Object.keys(yt_players[id]).forEach(function(k){ + var yt_player = yt_players[id][k]; + if($(yt_player.getIframe()).length == 0){ + yt_player.destroy(); + remove_ids.push(k); + } + }) + remove_ids.forEach(function(k){ + delete yt_players[id][k]; + }) + iframes.each(function(i,iframe){ + var yt_id = $(iframe).attr("id"); + var yt_player = yt_players[id][$(iframe).attr("id")]; + if(yt_player){ + }else{ + yt_player = new YT.Player($(iframe).attr("id"), { + events: { + 'onReady': function(event){ + var yt_player = event.target; + var height = $(yt_player.getIframe()).height(); + var banner_wrap = $(iframe).parents('.w-ba-banner__wrap').eq(0); + var carousel_wrap = banner_wrap.find(".cycle-carousel-wrap"); + if(carousel_wrap.length){ + carousel_wrap.css("top","3em"); + height += parseInt(carousel_wrap.css('font-size')) * 3; + } + banner_wrap.height(height).css({"padding-bottom":"","padding-top":""}); + var init_key = find_out_yt_event_relation_key(yt_player, false); + if(init_key){ + delete yt_player[init_key].onStateChange; + } + else{ + console.log("{onReady: true, onStateChange: true} missing!"); + } + var event_list_key = find_out_yt_event_list_key(yt_player); + if(event_list_key){ + var event_dict = yt_player[event_list_key]; + var array_key = find_out_yt_event_list_array_key(event_dict); + var count_key = find_out_yt_event_list_count_key(event_dict, array_key); + var relation_key = find_out_yt_event_relation_key(event_dict, true); + var onStateChange_idx = event_dict[relation_key].onStateChange; + onStateChange_idx.reverse(); + var event_size = 3; + onStateChange_idx.forEach(function(start_idx){ + event_dict[array_key].splice(start_idx,event_size); + }); + event_dict[relation_key].onStateChange = []; + event_dict[count_key] = event_dict[array_key].length; + yt_player.addEventListener('onStateChange',onPlayerStateChange); + banner_wrap.trigger('resize'); + }else{ + console.log("YT player changes its variables!") + } + {{extra_ready_script}} + }, + 'onStateChange': onPlayerStateChange + } + }); + yt_players[id][$(iframe).attr("id")] = yt_player; + $(iframe).data("yt_player",yt_player); + } + }) + } + } + $(".w-ba-banner").each(function(i,banner){ + init_banner(banner); + }) + } + function onPlayerStateChange(event){ + var iframe = $(event.target.getIframe()), + cyclediv = iframe.parents("div.cycle-slideshow"); + var widget = cyclediv.parents('.ba-banner-widget-youtube'); + if(event.data == YT.PlayerState.PLAYING || event.data == YT.PlayerState.BUFFERING){ + cyclediv[0].need_resume = !(cyclediv.hasClass("cycle-paused")); + cyclediv.cycle("pause"); + widget.find('.banner-pager,.controlplay,.button-mid,.ad-overlay,.banner-overlay').css('visibility','hidden') + ad_audio_button(iframe.parents(".w-ad-banner__slide").eq(0),false); + }else if(event.data == YT.PlayerState.UNSTARTED || event.data == YT.PlayerState.PAUSED || event.data == YT.PlayerState.ENDED){ + if(cyclediv[0].need_resume) + cyclediv.cycle("resume"); + widget.find('.banner-pager,.controlplay,.button-mid,.ad-overlay,.banner-overlay').css('visibility','') + ad_audio_button(iframe.parents(".w-ad-banner__slide").eq(0),true); + } + {{extra_state_chnage_script}} } - {{extra_state_chnage_script}} } -} $(document).ready(function(){ window.onYouTubePlayerAPIReady = function() { onYouTubeIframeAPIReady.apply(this,arguments);