On MeTV Now
The Love Boat
Up Next:
6:00PM
Up Next:
'); $videoEl.append('' + '' + ''); setTimeout(function(){ $('.mute-overlay').on('touchstart click', function(e){ if(e.handled === false) return; e.stopPropagation(); e.preventDefault(); e.handled = true; player.muted(false); //console.log("volumee " + WVM.activePlayer.volume()); $(this).hide(); $(this).css('display', 'none'); var currentTime = player.currentTime(); if(currentTime < 3){ player.currentTime(0); } var adsManager = player.ima.getAdsManager(); adsManager.setVolume(player.volume()); }); $('.video-close-floating').on('click', function(){ WVM['player_state' + videoId]['CANCEL_FLOATING'] = true; WVM.IS_FLOATING = false; window.dispatchEvent(WVM.FloatEventEnd); $('#media-container-' + videoId).css('width', "100%"); $('#media-container-' + videoId).removeClass('floating-video'); $('#media-placeholder-' + videoId).css('display', 'none'); player.pause(); WVM.NO_FLOAT_COOKIE(); var adsManager = player.ima.getAdsManager(); if(adsManager){ adsManager.pause(); } }); if(hideClose){ setTimeout(function(){ $('.video-close-floating').css('display', 'none'); $('.video-close-floating').remove(); }, 500); } }, 500); } else{ //wait 500 sec call again setTimeout(function(){ WVM.addMuteButton(videoId, player, hideClose); }, 500); } }; WVM.addFloatingAbility = function(videoId, player){ var deviceName = 'desktop'; if($('#media-container-' + videoId).length > 0){ if(deviceName == 'desktop'){ WVM.VIDEO_TOP = $('#media-container-' + videoId).offset().top; }else{ WVM.VIDEO_TOP = $('#media-container-' + videoId).offset().top - $('.next-dropdown-accordion').height(); } if(deviceName == 'desktop'){ WVM.VIDEO_HEIGHT = $('#html5-video-' + videoId).outerHeight(); }else{ WVM.VIDEO_HEIGHT = $('#html5-video-' + videoId).outerHeight(); } WVM.CONTAINER_HEIGHT = $('#media-container-' + videoId).height(); //console.log("container height: " + WVM.CONTAINER_HEIGHT); $(window).on( "resize", function() { if(deviceName == 'desktop'){ WVM.VIDEO_TOP = $('#media-container-' + videoId).offset().top; }else{ WVM.VIDEO_TOP = $('#media-container-' + videoId).offset().top - $('.next-dropdown-accordion').height(); } if(deviceName == 'desktop'){ WVM.VIDEO_HEIGHT = $('#html5-video-' + videoId).outerHeight(); }else{ WVM.VIDEO_HEIGHT = $('#html5-video-' + videoId).outerHeight(); } WVM.CONTAINER_HEIGHT = $('#media-container-' + videoId).height(); console.log("container height: " + WVM.CONTAINER_HEIGHT); }); //console.log("VIDEOTOP: " + WVM.VIDEO_TOP); //console.log("VIDEOHEIGHT: " + WVM.VIDEO_HEIGHT); $(window).on( "scroll", function() { if(!WVM.IS_FLOATING){ if(deviceName == 'desktop'){ WVM.CONTAINER_HEIGHT = $('#media-container-' + videoId).height(); }else{ WVM.CONTAINER_HEIGHT = $('#media-container-' + videoId + " .hlsvideo-wrapper").height() + $('#media-container-' + videoId + " .now-playing-container").height(); } } //var top = $('#media-container-' + videoId).offset().top; var offset = WVM.VIDEO_TOP + (WVM.VIDEO_HEIGHT / 2); var offsetBack = WVM.VIDEO_TOP; var changed = false; //console.log("VIDEOTOP: " + WVM.VIDEO_TOP); //console.log("VIDEOHEIGHT: " + WVM.VIDEO_HEIGHT); //console.log("scrolltop " + $(window).scrollTop()); //only float if playing var isPlaying = WVM['player_state' + videoId]['IS_PLAYING'] || WVM['player_state' + videoId]['AD_IS_PLAYING']; if(isPlaying){ $('.vjs-loading-spinner').hide(); } var offsetFloatAd = 99999999; if(deviceName == 'desktop' && $('#float_anchor').length > 0){ offsetFloatAd = $('#float_anchor').offset().top - WVM.VIDEO_HEIGHT; //console.log("float anchor offset top " + offsetFloatAd); } if($(window).scrollTop() > offset && isPlaying && !WVM['player_state' + videoId]['CANCEL_FLOATING']){ $('#media-placeholder-' + videoId).height(WVM.CONTAINER_HEIGHT); $('#media-placeholder-' + videoId).css('display', 'block'); if(!WVM.IS_FLOATING){ changed = true; window.dispatchEvent(WVM.FloatEventStart); } WVM.IS_FLOATING = true; $('#media-container-' + videoId).addClass('floating-video'); //set right var sWidth = window.innerWidth || document.documentElement.clientWidth; var sHeight = window.innerHeight || document.documentElement.clientHeight; if(sWidth > 700 && WADS.IS_STICKING){ $('#media-container-' + videoId).addClass('desktop-ad-is-sticky'); }else if(!WADS.IS_STICKING){ $('#media-container-' + videoId).removeClass('desktop-ad-is-sticky'); } if(sWidth <= 700 && WADS.IS_STICKING){ $('#media-container-' + videoId).addClass('mobile-ad-is-sticky'); }else if(sWidth <= 700 && !WADS.IS_STICKING){ $('#media-container-' + videoId).removeClass('mobile-ad-is-sticky'); } if(deviceName == 'desktop' || sWidth > 900){ var leftPos2 = $('aside').get(0).getBoundingClientRect().left; var leftPos = $('aside').offset().left - 50; $('#media-container-' + videoId).css('left', leftPos + "px"); var newWidth = Math.floor(sWidth / 3.5); $('#media-container-' + videoId).css('width', newWidth + "px"); } else{ $('#media-container-' + videoId).css('width', "100% !important"); if(!WVM['player_state' + videoId]['PROMO_PLAYER']){ $('#media-container-' + videoId + ' .now-playing-container').css('display', 'block'); $('#media-container-' + videoId + ' .next-dropdown-accordion').css('display', 'block'); } } if(sWidth < 900 && sWidth > 500 && WVM['player_state' + videoId]['PROMO_PLAYER']){ $('#media-container-' + videoId).addClass('floating-video'); $('#media-container-' + videoId).addClass('mobile-container'); $('#media-container-' + videoId).addClass('promo-playlist'); } //floating-video $('#media-container-' + videoId + " " + '.page-carousel-wrapper').hide(); setTimeout(function(){ var hWrapper = $('.floating-video .hlsvideo-wrapper').height(); var npWidth = $('.floating-video .now-playing-container').height(); var ndWidth = $('.floating-video .next-dropdown-header').height() + 20; var scrollerHeight = sHeight - (hWrapper + npWidth + ndWidth); scrollerHeight = 180; //scrollerHeight = parseInt(scrollerHeight * 0.5); if(WVM.device_name == 'desktop'){ $('#media-container-' + videoId + " " + " .mobile-list-videos").height(scrollerHeight); } }, 100); } if($(window).scrollTop() < offsetBack || $(window).scrollTop() > offsetFloatAd){ if(WVM.IS_FLOATING){ changed = true; window.dispatchEvent(WVM.FloatEventEnd); } WVM.IS_FLOATING = false; $('#media-container-' + videoId).css('width', "100%"); $('#media-container-' + videoId).removeClass('desktop-ad-is-sticky'); $('#media-container-' + videoId).removeClass('mobile-ad-is-sticky'); $('#media-container-' + videoId).removeClass('floating-video'); $('#media-placeholder-' + videoId).css('display', 'none'); $('#media-container-' + videoId + ' .now-playing-container').css('display', 'block'); if(WVM['player_state' + videoId]['PROMO_PLAYER']){ $('#media-container-' + videoId + ' .now-playing-container').css('display', 'none'); $('#media-container-' + videoId + ' .next-dropdown-accordion').css('display', 'none'); } } if($('#next-dropdown-accordion-button-' + videoId).find('i').hasClass('fa-chevron-up')){ if(deviceName == "desktop" && !$('#media-container-' + videoId).hasClass('floating-video')){ $('#media-container-' + videoId + " " + '.page-carousel-wrapper').show(); $('#media-container-' + videoId + " " + '.mobile-list-wrapper').hide(); //console.log("showing desktop"); if(!WVM.player_state225169['CAROUSEL_INIT']){ WVM.setupCarousel(videoId); } }else{ if(changed){ //default closed for mobile/floating player $('#next-dropdown-accordion-button-' + videoId).find('i').removeClass('fa-chevron-up'); $('#next-dropdown-accordion-button-' + videoId).find('i').addClass('fa-chevron-down'); $('#media-container-' + videoId + " " + '.page-carousel-wrapper').hide(); $('#media-container-' + videoId + " " + '.mobile-list-wrapper').hide(); var currVideoId = WVM['player_state' + videoId]['VIDEO_ID']; if(currVideoId == '9999999999'){ currVideoId = WVM.playlist_ids[0]; } var nextVideoId = WVM.getNextPlaylistIndex(currVideoId); var myTitle = WVM.getPlaylistData(videoId, currVideoId, 'noprefixtitle'); $('#video-slider-nexttitle' + videoId).css('display', 'inline'); $('#video-slider-nexttitle' + videoId).html(myTitle); }else{ $('#media-container-' + videoId + " " + '.page-carousel-wrapper').hide(); $('#media-container-' + videoId + " " + '.mobile-list-wrapper').show(); } } }else{ $('#media-container-' + videoId + " " + '.page-carousel-wrapper').hide(); $('#media-container-' + videoId + " " + '.mobile-list-wrapper').hide(); } } ); $('#media-container-' + videoId + ' .video-close').on('click',function(){ //set back to paused and stop floating WVM['player_state' + videoId]['CANCEL_FLOATING'] = true; WVM.IS_FLOATING = false; window.dispatchEvent(WVM.FloatEventEnd); $('#media-container-' + videoId).css('width', "100%"); $('#media-container-' + videoId).removeClass('desktop-ad-is-sticky'); $('#media-container-' + videoId).removeClass('mobile-ad-is-sticky'); $('#media-container-' + videoId).removeClass('floating-video'); $('#media-placeholder-' + videoId).css('display', 'none'); WVM.NO_FLOAT_COOKIE(); player.pause(); player.ima.getAdsManager().pause(); }); } }; WVM.setupCarousel = function(fullVideoId, player){ // initialize Masonry after all images have loaded //alert("setting up carousel"); console.log("setting up carousel on desktop"); $('#page-carousel-' + fullVideoId).css('display', 'block'); WVM['player_state' + fullVideoId]['CAROUSEL_INIT'] = true; if($('#page-carousel-' + fullVideoId).length > 0){ var container = document.querySelector('#page-carousel-' + fullVideoId); imagesLoaded( container, function() { var screenWidth = window.innerWidth || document.documentElement.clientWidth; if(screenWidth > 850){ //alert("setting up carousel3"); WVM.IS_DESKTOP = true; $('#page-carousel-' + fullVideoId + ' .page-carousel-lg-slides').css('display', 'block'); WVM['player_settings' + fullVideoId].slider = $('#page-carousel-' + fullVideoId).owlCarousel({ loop: false, center: false, nav: false, dots: false, autoplay: false, autoplayHoverPause: true, margin: 25, responsiveClass: true, animateOut: 'slideOutDown', animateIn: 'flipInX', navText : ["",""], responsive:{ 0:{ items:3 } } }); }else{ WVM.IS_DESKTOP = false; $('.page-carousel-wrapper').css('display', 'block'); } }); } }; WVM.setupToggleButton = function(fullVideoId, player){ if($('.nextplay-switch-' + fullVideoId).length > 0){ new DG.OnOffSwitchAuto({ cls:'.nextplay-switch-' + fullVideoId, height: 24, trackColorOn:'#F9F9F9', trackColorOff:'#222', textColorOn: '#222', textColorOff: '#222', textOn:'On', textOff:'Off', listener:function(name, checked){ var theVal = 1; if(!checked){ theVal = 0; } $.ajax({ url: '/ajax/update_autoplay_video/', data: { autoplay_on: theVal }, type: 'POST', dataType: 'json', success: function(data) { WVM['player_settings' + fullVideoId]['autoplay'] = checked; }, error : function(){ console.log("Error loading video"); } }); } }); } }; WVM.setupAccordionButton = function(fullVideoId){ var deviceName = 'desktop'; $('#next-dropdown-accordion-button-' + fullVideoId).on('click', function(){ if($(this).find('i').hasClass('fa-chevron-up')){ //hide $(this).find('i').removeClass('fa-chevron-up'); $(this).find('i').addClass('fa-chevron-down'); if(deviceName == "desktop" && !$('#media-container-' + fullVideoId).hasClass('floating-video')){ $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').slideUp(); $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').hide(); }else{ $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').slideUp(); $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').hide(); } var currVideoId = WVM['player_state' + fullVideoId]['VIDEO_ID']; if(currVideoId == '9999999999'){ currVideoId = WVM.playlist_ids[0]; } var nextVideoId = WVM.getNextPlaylistIndex(currVideoId); //playerId, mediaId, fieldName var myTitle = WVM.getPlaylistData(fullVideoId, nextVideoId, 'noprefixtitle'); //alert("Getting title " + myTitle); $('#video-slider-nexttitle' + fullVideoId).css('display', 'inline'); $('#video-slider-nexttitle' + fullVideoId).html(myTitle); }else{ //expand $(this).find('i').addClass('fa-chevron-up'); $(this).find('i').removeClass('fa-chevron-down'); $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').css('display', 'block'); if(deviceName == "desktop" && !$('#media-container-' + fullVideoId).hasClass('floating-video')){ $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').css('display', 'block'); $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').slideDown(); $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').hide(); if(!WVM.player_state225169['CAROUSEL_INIT']){ WVM.setupCarousel(fullVideoId); } }else{ $('#media-container-' + fullVideoId + " " + '.mobile-list-wrapper').slideDown(); $('#media-container-' + fullVideoId + " " + '.page-carousel-wrapper').hide(); if(!$('#media-container-' + fullVideoId).hasClass('floating-video')){ if(!WVM.player_state225169['CAROUSEL_INIT']){ WVM.setupCarousel(fullVideoId); } } } $('#video-slider-nexttitle' + fullVideoId).css('display', 'none'); } }); var currVideoId = WVM['player_state' + fullVideoId]['VIDEO_ID']; if(currVideoId == '9999999999'){ currVideoId = WVM.playlist_ids[0]; } //console.log("current Video " + currVideoId); var nextVideoId = WVM.getNextPlaylistIndex(currVideoId); var myTitle = WVM.getPlaylistData(fullVideoId, nextVideoId, 'noprefixtitle'); //console.log("setting title " + myTitle); $('#video-slider-nexttitle' + fullVideoId).css('display', 'inline'); $('#video-slider-nexttitle' + fullVideoId).html(myTitle); }; WVM.sendbeacon = function(action, nonInteraction, value, eventLabel) { if(WCS.ONLY_CONTENT || WEBVIEW.is_webview){ WEBVIEW.log_stats("video-" + action, value, WCS.THREAD_URL); var eventCategory = 'app_video'; if (window.gtag) { gtag('event', action, { 'event_category': eventCategory, 'event_label': eventLabel, 'value': value, 'non_interaction': nonInteraction }); } }else{ console.log('test'); var eventCategory = 'video'; if (window.gtag) { gtag('event', action, { 'event_category': eventCategory, 'event_label': eventLabel, 'value': value, 'non_interaction': nonInteraction }); } } }; WVM.getNextPlaylistIndex = function(mediaId, returnArrayIndex){ var currId = null; if(mediaId == null){ return null; } var found = false; for(var x =0; x < WVM.playlist_ids.length; x++){ var myMediaId = WVM.playlist_ids[x]; if(myMediaId == mediaId){ found = true; currId = myMediaId; break; } } var nextId = x + 1; if(nextId < WVM.playlist_ids.length && currId !== null){ if(!returnArrayIndex){ return WVM.playlist_ids[nextId]; }else{ return nextId; } } return null; }; WVM.getPlaylistArrayId = function(mediaId){ for(var x =0; x < WVM.playlist_ids.length; x++){ var myMediaId = WVM.playlist_ids[x]; if(myMediaId == mediaId){ return x; } } return null; }; //unimportant stuff like tracking... don't put anything platform specific here WVM.finishPlayer = function(player, playerState, playerSettings){ var percentsPlayedInterval = 25; //player.off('ready'); player.on('ready', function(){ playerState.PLAYER_READY = true; }); //player.off(['waiting', 'pause']); player.on(['waiting', 'pause'], function() { playerState.IS_PLAYING = false; $('.vjs-loading-spinner').removeClass('badspinner'); }); //player.off('playing'); player.on('playing', function() { console.log('playing'); }); player.on('loadedmetadata', function(){ if(playerState.PLAYER_META){ return; } playerState.PLAYER_META = true; var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } if(!playerState.PROMO_PLAYER){ WVM.sendbeacon("loadedmetadata", true, currId, playerState.VIDEO_TITLE); }else{ WVM.sendbeacon("promoloadedmetadata", true, currId, playerState.VIDEO_TITLE); } }); //player.off('adstart'); player.on('adstart', function(){ console.log("starting ads"); WVM.lastAdRequest = new Date().getTime() / 1000; playerState.AD_IS_PLAYING = true; playerState.PLAYED_AD = true; var currId = playerState.VIDEO_ID if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } if(!playerState.PROMO_PLAYER){ WVM.sendbeacon("adstart", true, currId, playerState.VIDEO_TITLE); } else{ WVM.sendbeacon("promoadstart", true, currId, playerState.VIDEO_TITLE); } }); //player.off('adend'); player.on('adend', function(){ var playPromise = null; console.log("ad end"); playerState.AD_IS_PLAYING = false; setTimeout(function(){ if(!playerState.IS_PLAYING || player.paused()){ } }, 500); WVM.lastAdRequest = new Date().getTime() / 1000; var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } if(!playerState.PROMO_PLAYER){ WVM.sendbeacon("adend", true, currId, playerState.VIDEO_TITLE); } else{ WVM.sendbeacon("promoadend", true, currId, playerState.VIDEO_TITLE); } }); //player.off('timeupdate'); player.on('timeupdate', function(){ playerState.IS_PLAYING = true; var fullDuration = this.duration() * 1000; var fullCurrent = this.currentTime() * 1000; var rand = parseInt(Math.random() * 100); //console.log("timeupdate " + fullCurrent + " out of " + fullDuration); if(rand > 20){ if(fullDuration > 1 && ((fullDuration - fullCurrent) > 1) && !$('.vjs-loading-spinner').hasClass('badspinner')){ console.log("hiding spinner"); $('.vjs-loading-spinner').addClass('badspinner'); } } var duration_time = Math.floor(this.duration()); //this is a hack because the end video event is not firing... var current_time = Math.floor(this.currentTime()); if ( current_time > 0 && ( fullCurrent >= (fullDuration - 10) )){ var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } var newMediaId = WVM.getNextPlaylistIndex(currId); //if(playerSettings.autoplay_next && newMediaId){ if(newMediaId){ if('desktop' == "iphone" && playerState.AD_ERROR){ console.log("skipped timeupdate end"); }else{ WVM.load_video(newMediaId, true, playerState.ORIGINAL_ID); } } } if(!playerState.START_SENT){ if(!playerState.PROMO_PLAYER){ WVM.sendbeacon('start', true, currId, playerState.VIDEO_TITLE); }else{ WVM.sendbeacon('promostart', true, currId, playerState.VIDEO_TITLE); } playerState.START_SENT = true; } var currentTime, duration, percent, percentPlayed, _i; currentTime = Math.round(this.currentTime()); duration = Math.round(this.duration()); percentPlayed = Math.round(currentTime / duration * 100); for (percent = _i = 0; _i <= 99; percent = _i += percentsPlayedInterval) { if (percentPlayed >= percent && __indexOf.call(playerState['PERCENTS_TRACKED'], percent) < 0) { if (percentPlayed !== 0) { if(!playerState.PROMO_PLAYER){ WVM.sendbeacon('percent-' + percent, true, currId, playerState.VIDEO_TITLE); } else{ WVM.sendbeacon('promopercent-' + percent, true, currId, playerState.VIDEO_TITLE); } } if (percentPlayed > 0) { playerState['PERCENTS_TRACKED'].push(percent); } } } }); //player.off('ended'); player.on('ended', function(){ console.log("ended"); playerState.IS_PLAYING = false; var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } if(!playerState.PROMO_PLAYER){ WVM.sendbeacon("complete", true, currId, playerState.VIDEO_TITLE); } else{ WVM.sendbeacon("promocomplete", true, currId, playerState.VIDEO_TITLE); } console.log("current id " + currId); console.log("playlist ids"); console.log(WVM.playlist_ids); var newMediaId = WVM.getNextPlaylistIndex(currId); //if(playerSettings.autoplay_next && newMediaId){ if(newMediaId){ WVM.load_video(newMediaId, true, playerState.ORIGINAL_ID); }else{ var videoId = playerState.ORIGINAL_ID; WVM['player_state' + videoId]['CANCEL_FLOATING'] = true; WVM.IS_FLOATING = false; window.dispatchEvent(WVM.FloatEventEnd); $('#media-container-' + videoId).css('width', "100%"); $('#media-container-' + videoId).removeClass('floating-video'); $('#media-placeholder-' + videoId).css('display', 'none'); console.log("Playlist complete (no more videos)"); } }); //player.off('adserror'); player.on('adserror', function(e){ //$('#ima-ad-container').remove(); WVM.lastAdRequest = new Date().getTime() / 1000; console.log(e); console.log("ads error"); var errMessage = e['data']['AdError']['l']; playerState.AD_IS_PLAYING = false; playerState.IS_PLAYING = false; // && errMessage == 'The VAST response document is empty.' if(!playerState.AD_ERROR){ var dTime = new Date().getTime(); WVM.firstPrerollTagUrl = WVM.getFirstPrerollUrl(); //console.log("not calling backup ad tag url: " + WVM.adTagUrl); /* WVM.activePlayer.ima.changeAdTag(WVM.adTagUrl + "?" + dTime); WVM.activePlayer.ima.requestAds(); //reload src WVM.activePlayer.src({ src: masterSrc, type: 'video/mp4' }); //firefox *really* hates this load event WVM.activePlayer.load(); */ } playerState.AD_ERROR = true; }); //player.off('error'); player.on('error', function(event) { if (player.error().code === 4) { player.error(null); // clear out the old error player.options().sources.shift(); // drop the highest precedence source console.log("now doing src"); console.log(player.options().sources[0]); player.src(player.options().sources[0]); // retry return; } }); //player.off('volumechange'); player.on('volumechange', function(event) { console.log(event); var theHeight = $('#media-container-' + playerState.ORIGINAL_ID + ' .vjs-volume-level').css('height'); var cssVolume = 0; if(theHeight){ cssVolume = parseInt(theHeight.replace('%', '')); } var theVolume = player.volume(); if(theVolume > 0.0 || cssVolume > 0){ $('#media-container-' + playerState.ORIGINAL_ID + ' .mute-overlay').css('display', 'none'); }else{ $('#media-container-' + playerState.ORIGINAL_ID + ' .mute-overlay').css('display', 'block'); } }); //WVM.reinitRawEvents(playerState.ORIGINAL_ID); //setInterval(function(){ // WVM.reinitRawEvents(playerState.ORIGINAL_ID); //}, 2000); WVM.allPlayers.push(player); } if(!WVM.rawCompleteEvent){ WVM.rawCompleteEvent = function(e){ var playerState = WVM['player_state225169']; }; } if(!WVM.rawTimeupdateEvent){ WVM.rawTimeupdateEvent = function(e){ var playerState = WVM['player_state225169']; var rawVideoElem = document.getElementById('html5-video-' + playerState['ORIGINAL_ID'] + '_html5_api'); var fullCurrent = rawVideoElem.currentTime * 1000; var fullDuration = rawVideoElem.duration * 1000; var current_time = Math.floor(rawVideoElem.currentTime); console.log("raw timeupdate: " + fullCurrent + " out of " + fullDuration); if ( current_time > 0 && ( fullCurrent >= (fullDuration - 50) )){ var currId = playerState.VIDEO_ID; if(currId == '9999999999'){ currId = WVM.playlist_ids[0]; } var newMediaId = WVM.getNextPlaylistIndex(currId); if(newMediaId){ console.log("loading new video from rawtimeupdate"); WVM.load_video(newMediaId, true, playerState.ORIGINAL_ID); } } if(!$('.vjs-loading-spinner').hasClass('badspinner')){ $('.vjs-loading-spinner').addClass('badspinner') } }; } WVM.reinitRawEvents = function(playerId){ var playerState = WVM['player_state' + playerId]; var rawVideoElem = document.getElementById('html5-video-' + WVM['player_state' + playerId]['ORIGINAL_ID'] + '_html5_api'); //COMPLETE EENT if( WVM['player_state' + playerId].COMPLETE_EVENT){ rawVideoElem.removeEventListener('ended', WVM.rawCompleteEvent, false); } rawVideoElem.addEventListener('ended', WVM.rawCompleteEvent, false); //TIME UPDATE EVENT if( WVM['player_state' + playerId].TIMEUPDATE_EVENT){ rawVideoElem.removeEventListener('ended', WVM.rawTimeupdateEvent, false); } rawVideoElem.addEventListener('ended', WVM.rawTimeupdateEvent, false); WVM['player_state' + playerId].COMPLETE_EVENT = true; WVM['player_state' + playerId].TIMEUPDATE_EVENT = true; };
As an expert in web development and JavaScript, I can recognize that the provided code is related to the implementation of a video player on a website. The code appears to be written in JavaScript and utilizes the Video.js library for handling video playback. The player seems to have additional features such as floating video, ad handling, and various UI elements.
Let's break down some of the key concepts used in the code:
-
Video.js Library:
- Video.js is a popular open-source JavaScript framework for creating custom video players. It provides a customizable player with support for HTML5 video playback.
-
Floating Video:
- The code contains functionality for making the video player "float" on the page as the user scrolls. This is achieved by adjusting the CSS properties of the player container based on the user's scroll position.
-
Ad Handling:
- The code includes events for handling ads, such as 'adstart' and 'adend.' It interacts with the IMA (Interactive Media Ads) SDK for managing video ads within the player.
-
Responsive Design:
- The player is designed to be responsive, with different layouts and styles based on the device's screen width. It adapts its appearance for both desktop and mobile devices.
-
Event Handling:
- The code extensively uses event listeners to respond to various player events like 'timeupdate,' 'ended,' 'volumechange,' and 'resize.' These events are crucial for tracking the player's state and triggering specific actions.
-
Dynamic CSS Manipulation:
- The code dynamically adjusts the CSS properties of the video player and its components based on the device's characteristics, such as screen width. This ensures a responsive and visually appealing layout.
-
Carousel Setup:
- There is code related to setting up a carousel, presumably for displaying a playlist or related videos. The carousel is initialized using the Owl Carousel library.
-
Ajax Requests:
- The code uses AJAX requests to communicate with the server. For example, there's an AJAX call to update the autoplay setting for the video.
-
Toggle Switch:
- The code sets up a toggle switch (On/Off switch) to control the autoplay feature. It listens for changes in the switch state and makes an AJAX request to update the server accordingly.
-
Error Handling:
- There are error-handling mechanisms in place, such as retrying the video source if an error occurs during playback and logging error messages to the console.
Understanding and implementing such a video player requires expertise in JavaScript, CSS, and web development frameworks like Video.js and Owl Carousel. It also involves knowledge of responsive design principles and AJAX for server communication.