(function($) { "use strict"; /** * * RoyalSlider video module * @version 1.1.1: * * 1.0.3: * - Added rsOnDestroyVideoElement event * * 1.0.4: * - Added wmode=transparent to default YouTube video embed code * * 1.0.5 * - Fixed bug: HTMl5 YouTube player sometimes keeps playing in ie9 after closing * * 1.0.6 * - A bit lightened Vimeo and YouTube regex * * 1.0.7 * - Minor optimizations * - Added autoHideCaption option * * 1.0.9 * - Fixed error that could appear if updateSliderSize method is called directly after video close * * 1.1.0 * - Video is now removed in rsAfterSlideChange event to avoid transition lag * - Fixed bug that could cause appearing of arrows with auto-hide * * 1.1.1 * - Added option disableCSS3inFF */ $.extend($.rsProto, { _initVideo: function() { var self = this; self._videoDefaults = { autoHideArrows: true, autoHideControlNav: false, autoHideBlocks: false, autoHideCaption: false, disableCSS3inFF: true, youTubeCode: '', vimeoCode: '' }; self.st.video = $.extend({}, self._videoDefaults, self.st.video); self.ev.on('rsBeforeSizeSet', function() { if(self._isVideoPlaying) { setTimeout(function() { var content = self._currHolder; content = content.hasClass('rsVideoContainer') ? content : content.find('.rsVideoContainer'); if(self._videoFrameHolder) { self._videoFrameHolder.css({ width: content.width(), height: content.height() }); } }, 32); } }); var isFF = self._browser.mozilla; self.ev.on('rsAfterParseNode', function(e, content, obj) { var jqcontent = $(content), tempEl, hasVideo; if(obj.videoURL) { if(self.st.video.disableCSS3inFF && !hasVideo && isFF) { hasVideo = true; self._useCSS3Transitions = self._use3dTransform = false; } var wrap = $('
'), playBtn = $('
'); if(jqcontent.hasClass('rsImg')) { obj.content = wrap.append(jqcontent).append(playBtn); } else { obj.content.find('.rsImg').wrap(wrap).after(playBtn); } } }); self.ev.on('rsAfterSlideChange', function() { self.stopVideo(); }); }, toggleVideo: function() { var self = this; if(!self._isVideoPlaying) { return self.playVideo(); } else { return self.stopVideo(); } }, playVideo: function() { var self = this; if(!self._isVideoPlaying) { var currSlide = self.currSlide; if(!currSlide.videoURL) { return false; } var content = self._currVideoContent = currSlide.content; var url = currSlide.videoURL, videoId, regExp, match; if( url.match(/youtu\.be/i) || url.match(/youtube\.com/i) ) { regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; match = url.match(regExp); if (match && match[7].length==11){ videoId = match[7]; } if(videoId !== undefined) { self._videoFrameHolder = self.st.video.youTubeCode.replace("%id%", videoId); } } else if(url.match(/vimeo\.com/i)) { regExp = /(www\.)?vimeo.com\/(\d+)($|\/)/; match = url.match(regExp); if(match) { videoId = match[2]; } if(videoId !== undefined) { self._videoFrameHolder = self.st.video.vimeoCode.replace("%id%", videoId); } } self.videoObj = $(self._videoFrameHolder); self.ev.trigger('rsOnCreateVideoElement', [url]); if(self.videoObj.length) { self._videoFrameHolder = $('
'); self._videoFrameHolder.find('.rsPreloader').after(self.videoObj); content = content.hasClass('rsVideoContainer') ? content : content.find('.rsVideoContainer'); self._videoFrameHolder.css({ width: content.width(), height: content.height() }).find('.rsCloseVideoBtn').off('click.rsv').on('click.rsv', function(e) { self.stopVideo(); e.preventDefault(); e.stopPropagation(); return false; }); content.append(self._videoFrameHolder); if(self.isIPAD) { content.addClass('rsIOSVideo'); } self._toggleHiddenClass(false); setTimeout(function() { self._videoFrameHolder.addClass('rsVideoActive'); }, 10); self.ev.trigger('rsVideoPlay'); self._isVideoPlaying = true; } return true; } return false; }, stopVideo: function() { var self = this; if(self._isVideoPlaying) { if(self.isIPAD) { self.slider.find('.rsCloseVideoBtn').remove(); } self._toggleHiddenClass(true); setTimeout(function() { self.ev.trigger('rsOnDestroyVideoElement', [self.videoObj]); var ifr = self._videoFrameHolder.find('iframe'); if(ifr.length) { try { ifr.attr('src', ""); } catch(ex) { } } self._videoFrameHolder.remove(); self._videoFrameHolder = null; }, 16); self.ev.trigger('rsVideoStop'); self._isVideoPlaying = false; return true; } return false; }, _toggleHiddenClass: function(remove) { var arr = [], self = this, vst = self.st.video; if(vst.autoHideArrows) { if(self._arrowLeft) { arr.push(self._arrowLeft, self._arrowRight); self._arrowsAutoHideLocked = !remove; } if(self._fsBtn) { arr.push(self._fsBtn); } } if(vst.autoHideControlNav && self._controlNav) { arr.push(self._controlNav); } if(vst.autoHideBlocks && self.currSlide.animBlocks) { arr.push(self.currSlide.animBlocks); } if(vst.autoHideCaption && self.globalCaption) { arr.push(self.globalCaption); } if(arr.length) { for(var i = 0; i < arr.length; i++) { if(!remove) { arr[i].addClass('rsHidden'); } else { arr[i].removeClass('rsHidden'); } } } } }); $.rsModules.video = $.rsProto._initVideo; })(jQuery);