revolution.extension.video.js 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396
  1. /********************************************
  2. * REVOLUTION 5.4.6.3 EXTENSION - VIDEO FUNCTIONS
  3. * @version: 2.1.8 (01.11.2017)
  4. * @requires jquery.themepunch.revolution.js
  5. * @author ThemePunch
  6. *********************************************/
  7. (function($) {
  8. "use strict";
  9. var _R = jQuery.fn.revolution,
  10. _ISM = _R.is_mobile(),
  11. _ANDROID = _R.is_android(),
  12. extension = { alias:"Video Min JS",
  13. name:"revolution.extensions.video.min.js",
  14. min_core: "5.4.6.3",
  15. version:"2.1.8"
  16. };
  17. ///////////////////////////////////////////
  18. // EXTENDED FUNCTIONS AVAILABLE GLOBAL //
  19. ///////////////////////////////////////////
  20. jQuery.extend(true,_R, {
  21. preLoadAudio : function(li,opt) {
  22. if (_R.compare_version(extension).check==="stop") return false;
  23. li.find('.tp-audiolayer').each(function() {
  24. var element = jQuery(this),
  25. obj = {};
  26. if (element.find('audio').length===0) {
  27. obj.src = element.data('videomp4') !=undefined ? element.data('videomp4') : '',
  28. obj.pre = element.data('videopreload') || '';
  29. if (element.attr('id')===undefined) element.attr('audio-layer-'+Math.round(Math.random()*199999));
  30. obj.id = element.attr('id');
  31. obj.status = "prepared";
  32. obj.start = jQuery.now();
  33. obj.waittime = element.data('videopreloadwait')*1000 || 5000;
  34. if (obj.pre=="auto" || obj.pre=="canplaythrough" || obj.pre=="canplay" || obj.pre=="progress") {
  35. if (opt.audioqueue===undefined) opt.audioqueue = [];
  36. opt.audioqueue.push(obj);
  37. _R.manageVideoLayer(element,opt);
  38. }
  39. }
  40. });
  41. },
  42. preLoadAudioDone : function(nc,opt,event) {
  43. if (opt.audioqueue && opt.audioqueue.length>0)
  44. jQuery.each(opt.audioqueue,function(i,obj) {
  45. if (nc.data('videomp4') === obj.src && (obj.pre === event || obj.pre==="auto")) {
  46. obj.status = "loaded";
  47. }
  48. });
  49. },
  50. resetVideo : function(_nc,opt,preset) {
  51. var _ = _nc.data();
  52. switch (_.videotype) {
  53. case "youtube":
  54. var player=_.player;
  55. try{
  56. if (_.forcerewind=="on") { //Removed Force Rewind Protection for Handy here !!!
  57. var s = getStartSec(_nc.data('videostartat')),
  58. wasdead = s==-1 ? true : false,
  59. forceseek = _.bgvideo===1 || _nc.find('.tp-videoposter').length>0 ? true : false;
  60. if (_.player!=undefined) {
  61. //if ((s!==0 && !wasdead) || forceseek) {
  62. s= s==-1 ? 0 : s;
  63. _.player.seekTo(s);
  64. _.player.pauseVideo();
  65. //}
  66. }
  67. }
  68. } catch(e) {}
  69. if (_nc.find('.tp-videoposter').length==0 && _.bgvideo!==1 && preset!==true)
  70. punchgs.TweenLite.to(_nc.find('iframe'),0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
  71. break;
  72. case "vimeo":
  73. var f = _nc.data('vimeoplayer');
  74. try{
  75. if (_.forcerewind=="on") { //Removed Force Rewind Protection for Handy here !!!
  76. var s = getStartSec(_.videostartat),
  77. ct = 0,
  78. wasdead = s==-1 ? true : false,
  79. forceseek = _.bgvideo===1 || _nc.find('.tp-videoposter').length>0 ? true : false;
  80. s= s==-1 ? 0 : s;
  81. //if ((s!==0 && !wasdead) || forceseek) {
  82. f.seekTo(s);
  83. f.pause();
  84. //}
  85. }
  86. } catch(e) {}
  87. if (_nc.find('.tp-videoposter').length==0 && _.bgvideo!==1 && preset!==true)
  88. punchgs.TweenLite.to(_nc.find('iframe'),0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
  89. break;
  90. case "html5":
  91. if (_ISM && _.disablevideoonmobile==1) return false;
  92. var tag = _.audio=="html5" ? "audio" : "video",
  93. jvideo = _nc.find(tag),
  94. video = jvideo[0];
  95. punchgs.TweenLite.to(jvideo,0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
  96. if (_.forcerewind=="on" && !_nc.hasClass("videoisplaying")) {
  97. try{
  98. var s = getStartSec(_.videostartat);
  99. video.currentTime = s == -1 ? 0 : s;
  100. } catch(e) {}
  101. }
  102. if (_.volume=="mute" || _R.lastToggleState(_nc.videomutetoggledby) || opt.globalmute===true)
  103. video.muted = true;
  104. break;
  105. }
  106. },
  107. isVideoMuted : function(_nc,opt) {
  108. var muted = false,
  109. _ = _nc.data();
  110. switch (_.videotype) {
  111. case "youtube":
  112. try{
  113. var player=_.player;
  114. muted = player.isMuted();
  115. } catch(e) {}
  116. break;
  117. case "vimeo":
  118. try{
  119. // var f = _.vimeoplayer;
  120. if (_.volume=="mute")
  121. muted = true;
  122. } catch(e) {}
  123. break;
  124. case "html5":
  125. var tag = _.audio=="html5" ? "audio" : "video",
  126. jvideo = _nc.find(tag),
  127. video = jvideo[0];
  128. if (video.muted)
  129. muted = true;
  130. break;
  131. }
  132. return muted;
  133. },
  134. muteVideo : function(_nc,opt) {
  135. var _ = _nc.data();
  136. switch (_.videotype) {
  137. case "youtube":
  138. try{
  139. var player=_.player;
  140. player.mute();
  141. } catch(e) {}
  142. break;
  143. case "vimeo":
  144. try{
  145. var f = _nc.data('vimeoplayer');
  146. _nc.data('volume',"mute");
  147. f.setVolume(0);
  148. } catch(e) {}
  149. break;
  150. case "html5":
  151. var tag = _.audio=="html5" ? "audio" : "video",
  152. jvideo = _nc.find(tag),
  153. video = jvideo[0];
  154. video.muted = true;
  155. break;
  156. }
  157. },
  158. unMuteVideo : function(_nc,opt) {
  159. if (opt.globalmute===true) return;
  160. var _ = _nc.data();
  161. switch (_.videotype) {
  162. case "youtube":
  163. try{
  164. var player=_.player;
  165. player.unMute();
  166. } catch(e) {}
  167. break;
  168. case "vimeo":
  169. try{
  170. var f = _nc.data('vimeoplayer');
  171. _nc.data('volume',"1");
  172. f.setVolume(1);
  173. } catch(e) {}
  174. break;
  175. case "html5":
  176. var tag = _.audio=="html5" ? "audio" : "video",
  177. jvideo = _nc.find(tag),
  178. video = jvideo[0];
  179. video.muted = false;
  180. break;
  181. }
  182. },
  183. stopVideo : function(_nc,opt) {
  184. var _ = _nc.data();
  185. if (!opt.leaveViewPortBasedStop)
  186. opt.lastplayedvideos = [];
  187. opt.leaveViewPortBasedStop = false;
  188. switch (_.videotype) {
  189. case "youtube":
  190. //if (_ISM) return;
  191. try{
  192. var player=_.player;
  193. if (player.getPlayerState()===2 || player.getPlayerState()===5) return;
  194. player.pauseVideo();
  195. _.youtubepausecalled = true;
  196. setTimeout(function() {
  197. _.youtubepausecalled=false;
  198. },80);
  199. } catch(e) {
  200. console.log("Issue at YouTube Video Pause:");
  201. console.log(e);
  202. }
  203. break;
  204. case "vimeo":
  205. try{
  206. var f = _nc.data('vimeoplayer');
  207. f.pause();
  208. _.vimeopausecalled = true;
  209. setTimeout(function() {
  210. _.vimeopausecalled=false;
  211. },80);
  212. } catch(e) {
  213. console.log("Issue at Vimeo Video Pause:");
  214. console.log(e);
  215. }
  216. break;
  217. case "html5":
  218. var tag = _.audio=="html5" ? "audio" : "video",
  219. jvideo = _nc.find(tag),
  220. video = jvideo[0];
  221. if (jvideo!=undefined && video!=undefined) {
  222. video.pause();
  223. }
  224. break;
  225. }
  226. },
  227. playVideo : function(_nc,opt) {
  228. clearTimeout(_nc.data('videoplaywait'));
  229. var _ = _nc.data();
  230. switch (_.videotype) {
  231. case "youtube":
  232. if (_nc.find('iframe').length==0) {
  233. _nc.append(_nc.data('videomarkup'));
  234. addVideoListener(_nc,opt,true);
  235. } else {
  236. if (_.player.playVideo !=undefined) {
  237. var s = getStartSec(_nc.data('videostartat')),
  238. ct = _.player.getCurrentTime();
  239. if (_nc.data('nextslideatend-triggered')==1) {
  240. ct=-1;
  241. _nc.data('nextslideatend-triggered',0);
  242. }
  243. if (s!=-1 && s>ct) _.player.seekTo(s);
  244. if (_.youtubepausecalled!==true)
  245. _.player.playVideo();
  246. } else {
  247. _nc.data('videoplaywait',setTimeout(function() {
  248. if (_.youtubepausecalled!==true) _R.playVideo(_nc,opt);
  249. },50));
  250. }
  251. }
  252. break;
  253. case "vimeo":
  254. if (_nc.find('iframe').length==0) {
  255. _nc.removeData('vimeoplayer');
  256. _nc.append(_nc.data('videomarkup'));
  257. addVideoListener(_nc,opt,true);
  258. } else {
  259. if (_nc.hasClass("rs-apiready")) {
  260. var id = _nc.find('iframe').attr("id"),
  261. f;
  262. if(!_nc.data('vimeoplayer')) {
  263. f = new Vimeo.Player(id);
  264. _nc.data('vimeoplayer', f);
  265. }
  266. else {
  267. f = _nc.data('vimeoplayer');
  268. }
  269. /*
  270. if (!f.hasOwnProperty('play')) {
  271. _nc.data('videoplaywait',setTimeout(function() {
  272. if (_.vimeopausecalled!==true)
  273. _R.playVideo(_nc,opt);
  274. },50));
  275. */
  276. //} else {
  277. setTimeout(function() {
  278. f.play();
  279. var s = getStartSec(_nc.data('videostartat')),
  280. ct = _nc.data('currenttime');
  281. if (_nc.data('nextslideatend-triggered')==1) {
  282. ct=-1;
  283. _nc.data('nextslideatend-triggered',0);
  284. }
  285. if (s!=-1 && s>ct) f.seekTo(s);
  286. },510);
  287. //}
  288. } else {
  289. _nc.data('videoplaywait',setTimeout(function() {
  290. if (_.vimeopausecalled!==true)
  291. _R.playVideo(_nc,opt);
  292. },50));
  293. }
  294. }
  295. break;
  296. case "html5":
  297. //if (_ISM && _nc.data('disablevideoonmobile')==1) return false;
  298. var tag = _.audio=="html5" ? "audio" : "video",
  299. jvideo = _nc.find(tag),
  300. video = jvideo[0],
  301. html5vid = jvideo.parent();
  302. if (html5vid.data('metaloaded') != 1) {
  303. addEvent(video,'loadedmetadata',function(_nc) {
  304. _R.resetVideo(_nc,opt);
  305. video.play();
  306. var s = getStartSec(_nc.data('videostartat')),
  307. ct = video.currentTime;
  308. if (_nc.data('nextslideatend-triggered')==1) {
  309. ct=-1;
  310. _nc.data('nextslideatend-triggered',0);
  311. }
  312. if (s!=-1 && s>ct) video.currentTime = s;
  313. }(_nc));
  314. } else {
  315. video.play();
  316. var s = getStartSec(_nc.data('videostartat')),
  317. ct = video.currentTime;
  318. if (_nc.data('nextslideatend-triggered')==1) {
  319. ct=-1;
  320. _nc.data('nextslideatend-triggered',0);
  321. }
  322. if (s!=-1 && s>ct) video.currentTime = s;
  323. }
  324. break;
  325. }
  326. },
  327. isVideoPlaying : function(_nc,opt) {
  328. var ret = false;
  329. if (opt.playingvideos != undefined) {
  330. jQuery.each(opt.playingvideos,function(i,nc) {
  331. if (_nc.attr('id') == nc.attr('id'))
  332. ret = true;
  333. });
  334. }
  335. return ret;
  336. },
  337. removeMediaFromList : function(_nc,opt) {
  338. remVidfromList(_nc,opt);
  339. },
  340. prepareCoveredVideo : function(asprat,opt,nextcaption) {
  341. var ifr = nextcaption.find('iframe, video'),
  342. wa = asprat.split(':')[0],
  343. ha = asprat.split(':')[1],
  344. li = nextcaption.closest('.tp-revslider-slidesli'),
  345. od = li.width()/li.height(),
  346. vd = wa/ha,
  347. nvh = (od/vd)*100,
  348. nvw = (vd/od)*100;
  349. if (od>vd)
  350. punchgs.TweenLite.to(ifr,0.001,{height:nvh+"%", width:"100%", top:-(nvh-100)/2+"%",left:"0px",position:"absolute"});
  351. else
  352. punchgs.TweenLite.to(ifr,0.001,{width:nvw+"%", height:"100%", left:-(nvw-100)/2+"%",top:"0px",position:"absolute"});
  353. if (!ifr.hasClass("resizelistener")) {
  354. ifr.addClass("resizelistener");
  355. jQuery(window).resize(function() {
  356. clearTimeout(ifr.data('resizelistener'));
  357. ifr.data('resizelistener',setTimeout(function() {
  358. _R.prepareCoveredVideo(asprat,opt,nextcaption);
  359. },30));
  360. })
  361. }
  362. },
  363. checkVideoApis : function(_nc,opt,addedApis) {
  364. var httpprefix = location.protocol === 'https:' ? "https" : "http";
  365. if ((_nc.data('ytid')!=undefined || _nc.find('iframe').length>0 && _nc.find('iframe').attr('src').toLowerCase().indexOf('youtube')>0)) opt.youtubeapineeded = true;
  366. if ((_nc.data('ytid')!=undefined || _nc.find('iframe').length>0 && _nc.find('iframe').attr('src').toLowerCase().indexOf('youtube')>0) && addedApis.addedyt==0) {
  367. opt.youtubestarttime = jQuery.now();
  368. addedApis.addedyt=1;
  369. var s = document.createElement("script");
  370. s.src = "https://www.youtube.com/iframe_api"; /* Load Player API*/
  371. var before = document.getElementsByTagName("script")[0],
  372. loadit = true;
  373. jQuery('head').find('*').each(function(){
  374. if (jQuery(this).attr('src') == "https://www.youtube.com/iframe_api")
  375. loadit = false;
  376. });
  377. if (loadit) before.parentNode.insertBefore(s, before);
  378. }
  379. if ((_nc.data('vimeoid')!=undefined || _nc.find('iframe').length>0 && _nc.find('iframe').attr('src').toLowerCase().indexOf('vimeo')>0)) opt.vimeoapineeded = true;
  380. if ((_nc.data('vimeoid')!=undefined || _nc.find('iframe').length>0 && _nc.find('iframe').attr('src').toLowerCase().indexOf('vimeo')>0) && addedApis.addedvim==0) {
  381. opt.vimeostarttime = jQuery.now();
  382. addedApis.addedvim=1;
  383. var f = document.createElement("script"),
  384. before = document.getElementsByTagName("script")[0],
  385. loadit = true;
  386. f.src = "https://player.vimeo.com/api/player.js"; /* Load Player API*/
  387. jQuery('head').find('*').each(function(){
  388. if (jQuery(this).attr('src') == "https://player.vimeo.com/api/player.js")
  389. loadit = false;
  390. });
  391. if (loadit)
  392. before.parentNode.insertBefore(f, before);
  393. }
  394. return addedApis;
  395. },
  396. manageVideoLayer : function(_nc,opt,recalled,internrecalled) {
  397. if (_R.compare_version(extension).check==="stop") return false;
  398. // YOUTUBE AND VIMEO LISTENRES INITIALISATION
  399. var _ = _nc.data(),
  400. vida = _.videoattributes,
  401. vidytid = _.ytid,
  402. vimeoid = _.vimeoid,
  403. videopreload = _.videopreload === "auto" || _.videopreload === "canplay" || _.videopreload === "canplaythrough" || _.videopreload === "progress" ? "auto" : _.videopreload,
  404. videomp = _.videomp4,
  405. videowebm = _.videowebm,
  406. videoogv = _.videoogv,
  407. videoafs = _.allowfullscreenvideo,
  408. videocontrols = _.videocontrols,
  409. httpprefix = "http",
  410. videoloop = _.videoloop=="loop" ? "loop" : _.videoloop=="loopandnoslidestop" ? "loop" : "",
  411. videotype = (videomp!=undefined || videowebm!=undefined) ? "html5" :
  412. (vidytid!=undefined && String(vidytid).length>1) ? "youtube" :
  413. (vimeoid!=undefined && String(vimeoid).length>1) ? "vimeo" : "none",
  414. tag = _.audio=="html5" ? "audio" : "video",
  415. newvideotype = (videotype=="html5" && _nc.find(tag).length==0) ? "html5" :
  416. (videotype=="youtube" && _nc.find('iframe').length==0) ? "youtube" :
  417. (videotype=="vimeo" && _nc.find('iframe').length==0) ? "vimeo" : "none";
  418. // VideLoop reset if Next Slide at End is set !
  419. videoloop = _.nextslideatend === true ? "" : videoloop;
  420. _.videotype = videotype;
  421. // ADD HTML5 VIDEO IF NEEDED
  422. switch (newvideotype) {
  423. case "html5":
  424. if (videocontrols!="controls") videocontrols="";
  425. var tag = "video";
  426. //_nc.data('audio',"html5");
  427. if (_.audio=="html5") {
  428. tag = "audio";
  429. _nc.addClass("tp-audio-html5");
  430. }
  431. /*
  432. JASON:
  433. HTML5 Video Mod
  434. */
  435. // var _funcs = opt.fallbacks.allowHTML5AutoPlayOnAndroid ? "muted playsinline" : "";
  436. var _funcs = '';
  437. if(tag === 'video') {
  438. if (_R.is_mobile() || _R.isSafari11()) { /* updated to account for Safari 11 */
  439. if(_.autoplay === 'on' || _.autoplay === 'true' || _.autoplay === true) {
  440. _funcs = 'muted playsinline autoplay';
  441. }
  442. else if(_.videoinline == true || _.videoinline === 'true' || _.videoinline === 1) {
  443. _funcs += ' playsinline';
  444. }
  445. }
  446. }
  447. var apptxt = '<'+tag+' '+_funcs+' style="object-fit:cover;background-size:cover;visible:hidden;width:100%; height:100%" class="" '+videoloop+' preload="'+videopreload+'">';
  448. if (videopreload=="auto") opt.mediapreload = true;
  449. //if (_.videoposter!=undefined) apptxt = apptxt + 'poster="'+_nc.data('videoposter')+'">';
  450. if (videowebm!=undefined && _R.get_browser().toLowerCase()=="firefox") apptxt = apptxt + '<source src="'+videowebm+'" type="video/webm" />';
  451. if (videomp!=undefined) apptxt = apptxt + '<source src="'+videomp+'" type="video/mp4" />';
  452. if (videoogv!=undefined) apptxt = apptxt + '<source src="'+videoogv+'" type="video/ogg" />';
  453. apptxt = apptxt + '</'+tag+'>';
  454. var hfm ="";
  455. if (videoafs==="true" || videoafs===true)
  456. hfm = '<div class="tp-video-button-wrap"><button type="button" class="tp-video-button tp-vid-full-screen">Full-Screen</button></div>';
  457. if (videocontrols=="controls")
  458. apptxt = apptxt + ('<div class="tp-video-controls">'+
  459. '<div class="tp-video-button-wrap"><button type="button" class="tp-video-button tp-vid-play-pause">Play</button></div>'+
  460. '<div class="tp-video-seek-bar-wrap"><input type="range" class="tp-seek-bar" value="0"></div>'+
  461. '<div class="tp-video-button-wrap"><button type="button" class="tp-video-button tp-vid-mute">Mute</button></div>'+
  462. '<div class="tp-video-vol-bar-wrap"><input type="range" class="tp-volume-bar" min="0" max="1" step="0.1" value="1"></div>'+
  463. hfm+
  464. '</div>');
  465. _nc.data('videomarkup',apptxt)
  466. _nc.append(apptxt);
  467. // START OF HTML5 VIDEOS
  468. if ((_ISM && _nc.data('disablevideoonmobile')==1) ||_R.isIE(8)) _nc.find(tag).remove();
  469. // ADD HTML5 VIDEO CONTAINER
  470. _nc.find(tag).each(function(i) {
  471. var video = this,
  472. jvideo = jQuery(this);
  473. if (!jvideo.parent().hasClass("html5vid"))
  474. jvideo.wrap('<div class="html5vid" style="position:relative;top:0px;left:0px;width:100%;height:100%; overflow:hidden;"></div>');
  475. var html5vid = jvideo.parent();
  476. if (html5vid.data('metaloaded') != 1) {
  477. addEvent(video,'loadedmetadata',function(_nc) {
  478. htmlvideoevents(_nc,opt);
  479. _R.resetVideo(_nc,opt);
  480. }(_nc));
  481. }
  482. });
  483. break;
  484. case "youtube":
  485. httpprefix = "https";
  486. /* if (location.protocol === 'https:')
  487. httpprefix = "https"; */
  488. if (videocontrols=="none") {
  489. vida = vida.replace("controls=1","controls=0");
  490. if (vida.toLowerCase().indexOf('controls')==-1)
  491. vida = vida+"&controls=0";
  492. }
  493. if (_.videoinline===true || _.videoinline==="true" || _.videoinline===1 || _nc.hasClass('rs-background-video-layer'))
  494. vida = vida + "&playsinline=1";
  495. var s = getStartSec(_nc.data('videostartat')),
  496. e = getStartSec(_nc.data('videoendat'));
  497. if (s!=-1) vida=vida+"&start="+s;
  498. if (e!=-1) vida=vida+"&end="+e;
  499. // CHECK VIDEO ORIGIN, AND EXTEND WITH WWW IN CASE IT IS MISSING !
  500. var orig = vida.split('origin='+httpprefix+'://'),
  501. vida_new = "";
  502. if (orig.length>1) {
  503. vida_new = orig[0]+'origin='+httpprefix+'://';
  504. if (self.location.href.match(/www/gi) && !orig[1].match(/www/gi))
  505. vida_new=vida_new+"www."
  506. vida_new=vida_new+orig[1];
  507. } else {
  508. vida_new = vida;
  509. }
  510. var yafv = videoafs==="true" || videoafs===true ? "allowfullscreen" : "";
  511. _nc.data('videomarkup','<iframe type="text/html" src="'+httpprefix+'://www.youtube.com/embed/'+vidytid+'?'+vida_new+'" '+yafv+' width="100%" height="100%" style="opacity:0;visibility:hidden;width:100%;height:100%"></iframe>');
  512. break;
  513. case "vimeo":
  514. // if (location.protocol === 'https:')
  515. httpprefix = "https";
  516. _nc.data('videomarkup','<iframe src="'+httpprefix+'://player.vimeo.com/video/'+vimeoid+'?'+vida+'" webkitallowfullscreen mozallowfullscreen allowfullscreen width="100%" height="100%" style="opacity:0;visibility:hidden;100%;height:100%"></iframe>');
  517. break;
  518. }
  519. //if (videotype=="vimeo" || videotype=="youtube") {
  520. // IF VIDEOPOSTER EXISTING
  521. var noposteronmobile = _ISM && _nc.data('noposteronmobile')=="on";
  522. if (_.videoposter!=undefined && _.videoposter.length>2 && !noposteronmobile) {
  523. if (_nc.find('.tp-videoposter').length==0)
  524. _nc.append('<div class="tp-videoposter noSwipe" style="cursor:pointer; position:absolute;top:0px;left:0px;width:100%;height:100%;z-index:3;background-image:url('+_.videoposter+'); background-size:cover;background-position:center center;"></div>');
  525. if (_nc.find('iframe').length==0)
  526. _nc.find('.tp-videoposter').click(function() {
  527. _R.playVideo(_nc,opt);
  528. if (_ISM) {
  529. if (_nc.data('disablevideoonmobile')==1) return false;
  530. punchgs.TweenLite.to(_nc.find('.tp-videoposter'),0.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut});
  531. punchgs.TweenLite.to(_nc.find('iframe'),0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
  532. }
  533. })
  534. } else {
  535. if (_ISM && _nc.data('disablevideoonmobile')==1) return false;
  536. if (_nc.find('iframe').length==0 && (videotype=="youtube" || videotype=="vimeo")) {
  537. _nc.removeData('vimeoplayer');
  538. _nc.append(_nc.data('videomarkup'));
  539. addVideoListener(_nc,opt,false);
  540. }
  541. }
  542. // ADD DOTTED OVERLAY IF NEEDED
  543. if (_nc.data('dottedoverlay')!="none" && _nc.data('dottedoverlay')!=undefined && _nc.find('.tp-dottedoverlay').length!=1)
  544. _nc.append('<div class="tp-dottedoverlay '+_nc.data('dottedoverlay')+'"></div>');
  545. _nc.addClass("HasListener");
  546. if (_nc.data('bgvideo')==1) {
  547. punchgs.TweenLite.set(_nc.find('video, iframe'),{autoAlpha:0});
  548. }
  549. }
  550. });
  551. //////////////////////////////////////////////////////
  552. // * Revolution Slider - VIDEO / API FUNCTIONS //
  553. // * @version: 1.0 (30.10.2014) //
  554. // * @author ThemePunch //
  555. //////////////////////////////////////////////////////
  556. function getStartSec(st) {
  557. return st == undefined ? -1 :jQuery.isNumeric(st) ? st : st.split(":").length>1 ? parseInt(st.split(":")[0],0)*60 + parseInt(st.split(":")[1],0) : st;
  558. };
  559. // - VIMEO ADD EVENT /////
  560. var addEvent = function(element, eventName, callback) {
  561. if (element.addEventListener)
  562. element.addEventListener(eventName, callback, {capture:false,passive:true});
  563. else
  564. element.attachEvent(eventName, callback, {capture:false,passive:true});
  565. };
  566. var getVideoDatas = function(p,t,d) {
  567. var a = {};
  568. a.video = p;
  569. a.videotype = t;
  570. a.settings = d;
  571. return a;
  572. }
  573. var addVideoListener = function(_nc,opt,startnow) {
  574. var _=_nc.data(),
  575. ifr = _nc.find('iframe'),
  576. frameID = "iframe"+Math.round(Math.random()*100000+1),
  577. loop = _.videoloop,
  578. pforv = loop != "loopandnoslidestop";
  579. loop = loop =="loop" || loop =="loopandnoslidestop";
  580. // CARE ABOUT ASPECT RATIO
  581. if (_nc.data('forcecover')==1) {
  582. _nc.removeClass("fullscreenvideo").addClass("coverscreenvideo");
  583. var asprat = _nc.data('aspectratio');
  584. if (asprat!=undefined && asprat.split(":").length>1) {
  585. // console.log("i")
  586. _R.prepareCoveredVideo(asprat,opt,_nc);
  587. }
  588. }
  589. if (_nc.data('bgvideo')==1) {
  590. var asprat = _nc.data('aspectratio');
  591. if (asprat!=undefined && asprat.split(":").length>1) {
  592. // console.log("ak")
  593. _R.prepareCoveredVideo(asprat,opt,_nc);
  594. }
  595. }
  596. // IF LISTENER DOES NOT EXIST YET
  597. ifr.attr('id',frameID);
  598. if (startnow) _nc.data('startvideonow',true);
  599. if (_nc.data('videolistenerexist')!==1) {
  600. switch (_.videotype) {
  601. // YOUTUBE LISTENER
  602. case "youtube":
  603. var player = new YT.Player(frameID, {
  604. events: {
  605. "onStateChange": function(event) {
  606. var container = _nc.closest('.tp-simpleresponsive'),
  607. videorate = _.videorate,
  608. videostart = _nc.data('videostart'),
  609. fsmode = checkfullscreenEnabled();
  610. if (event.data == YT.PlayerState.PLAYING) {
  611. punchgs.TweenLite.to(_nc.find('.tp-videoposter'),0.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut});
  612. punchgs.TweenLite.to(_nc.find('iframe'),0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
  613. if (_nc.data('volume')=="mute" || _R.lastToggleState(_nc.data('videomutetoggledby')) || opt.globalmute===true) {
  614. player.mute();
  615. } else {
  616. player.unMute();
  617. player.setVolume(parseInt(_nc.data('volume'),0) || 75);
  618. }
  619. opt.videoplaying=true;
  620. addVidtoList(_nc,opt);
  621. if (pforv)
  622. opt.c.trigger('stoptimer');
  623. else
  624. opt.videoplaying=false;
  625. opt.c.trigger('revolution.slide.onvideoplay',getVideoDatas(player,"youtube",_nc.data()));
  626. _R.toggleState(_.videotoggledby);
  627. } else {
  628. if (event.data==0 && loop) {
  629. //player.playVideo();
  630. var s = getStartSec(_nc.data('videostartat'));
  631. if (s!=-1) player.seekTo(s);
  632. player.playVideo();
  633. _R.toggleState(_.videotoggledby);
  634. }
  635. if (!fsmode && (event.data==0 || event.data==2) && ((_nc.data('showcoveronpause')=="on" && _nc.find('.tp-videoposter').length>0) || (_nc.data('bgvideo')===1 && _nc.find('.rs-fullvideo-cover').length>0))) {
  636. if (_nc.data('bgvideo')===1)
  637. punchgs.TweenLite.to(_nc.find('.rs-fullvideo-cover'),0.1,{autoAlpha:1,force3D:"auto",ease:punchgs.Power3.easeInOut});
  638. else
  639. punchgs.TweenLite.to(_nc.find('.tp-videoposter'),0.1,{autoAlpha:1,force3D:"auto",ease:punchgs.Power3.easeInOut});
  640. punchgs.TweenLite.to(_nc.find('iframe'),0.1,{autoAlpha:0,ease:punchgs.Power3.easeInOut});
  641. }
  642. if ((event.data!=-1 && event.data!=3)) {
  643. opt.videoplaying=false;
  644. opt.tonpause = false;
  645. remVidfromList(_nc,opt);
  646. container.trigger('starttimer');
  647. opt.c.trigger('revolution.slide.onvideostop',getVideoDatas(player,"youtube",_nc.data()));
  648. if (opt.currentLayerVideoIsPlaying==undefined || opt.currentLayerVideoIsPlaying.attr("id") == _nc.attr("id"))
  649. _R.unToggleState(_.videotoggledby);
  650. }
  651. if (event.data==0 && _nc.data('nextslideatend')==true) {
  652. exitFullscreen();
  653. _nc.data('nextslideatend-triggered',1);
  654. opt.c.revnext();
  655. remVidfromList(_nc,opt);
  656. } else {
  657. remVidfromList(_nc,opt);
  658. opt.videoplaying=false;
  659. container.trigger('starttimer');
  660. opt.c.trigger('revolution.slide.onvideostop',getVideoDatas(player,"youtube",_nc.data()));
  661. if (opt.currentLayerVideoIsPlaying==undefined || opt.currentLayerVideoIsPlaying.attr("id") == _nc.attr("id"))
  662. _R.unToggleState(_.videotoggledby);
  663. }
  664. }
  665. },
  666. 'onReady': function(event) {
  667. /*
  668. Jason, YouTube Autoplay
  669. */
  670. var playerMuted,
  671. isVideoMobile = _R.is_mobile(),
  672. isVideoLayer = _nc.hasClass('tp-videolayer');
  673. if(isVideoMobile || _R.isSafari11()) {
  674. var isLayerAutoPlay = isVideoLayer && _nc.data('autoplay') !== 'off';
  675. if(_nc.hasClass('rs-background-video-layer') || isLayerAutoPlay) {
  676. var isSpecial = isVideoMobile && isVideoLayer;
  677. if(!isSpecial) {
  678. playerMuted = true;
  679. player.setVolume(0);
  680. _nc.data('volume', 'mute');
  681. player.mute();
  682. clearTimeout(_nc.data('mobilevideotimr'));
  683. _nc.data('mobilevideotimr', setTimeout(function() {player.playVideo();}, 500));
  684. }
  685. }
  686. }
  687. if(!playerMuted && _nc.data('volume')=="mute") {
  688. player.setVolume(0);
  689. player.mute();
  690. }
  691. var videorate = _.videorate,
  692. videostart = _nc.data('videostart');
  693. _nc.addClass("rs-apiready");
  694. if (videorate!=undefined)
  695. event.target.setPlaybackRate(parseFloat(videorate));
  696. // PLAY VIDEO IF THUMBNAIL HAS BEEN CLICKED
  697. _nc.find('.tp-videoposter').unbind("click");
  698. _nc.find('.tp-videoposter').click(function() {
  699. if (!_ISM) {
  700. player.playVideo();
  701. }
  702. })
  703. if (_nc.data('startvideonow')) {
  704. _.player.playVideo();
  705. var s = getStartSec(_nc.data('videostartat'));
  706. if (s!=-1) _.player.seekTo(s);
  707. //_nc.find('.tp-videoposter').click();
  708. }
  709. _nc.data('videolistenerexist',1);
  710. }
  711. }
  712. });
  713. _nc.data('player',player);
  714. break;
  715. // VIMEO LISTENER
  716. case "vimeo":
  717. var isrc = ifr.attr('src'),
  718. queryParameters = {}, queryString = isrc,
  719. re = /([^&=]+)=([^&]*)/g, m;
  720. // Creates a map with the query string parameters
  721. while (m = re.exec(queryString)) {
  722. queryParameters[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
  723. }
  724. if (queryParameters['player_id']!=undefined)
  725. isrc = isrc.replace(queryParameters['player_id'],frameID);
  726. else
  727. isrc=isrc+"&player_id="+frameID;
  728. try{ isrc = isrc.replace('api=0','api=1'); } catch(e) {}
  729. // isrc=isrc+"&api=1";
  730. var isVideoMobile = _R.is_mobile(),
  731. deviceCheck = isVideoMobile || _R.isSafari11(),
  732. isVideoBg = _nc.hasClass('rs-background-video-layer');
  733. // adds "playsinline" to the video from the Vimeo side
  734. // will work for both "pro/plus" and regular videos
  735. // only works on desktop for some reason
  736. if(deviceCheck && isVideoBg) isrc += '&background=1';
  737. ifr.attr('src',isrc);
  738. var player = _nc.find('iframe')[0],
  739. vimcont = jQuery('#'+frameID),
  740. f;
  741. if(!_nc.data('vimeoplayer')) {
  742. f = new Vimeo.Player(frameID);
  743. _nc.data('vimeoplayer', f);
  744. }
  745. else {
  746. f = _nc.data('vimeoplayer');
  747. }
  748. if(deviceCheck) {
  749. var toMute;
  750. if(isVideoBg) {
  751. toMute = true;
  752. }
  753. else {
  754. var isAutoplay = _nc.data('autoplay');
  755. if(isAutoplay === 'on' || isAutoplay === 'true' || isAutoplay === true) {
  756. if(isVideoMobile) _nc.data('autoplay', false);
  757. toMute = true;
  758. }
  759. }
  760. if(toMute) {
  761. f.setVolume(0);
  762. _nc.data('volume', 'mute');
  763. }
  764. }
  765. _nc.addClass("rs-apiready");
  766. f.on('play', function(data) {
  767. _nc.data('nextslidecalled',0);
  768. punchgs.TweenLite.to(_nc.find('.tp-videoposter'),0.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut});
  769. punchgs.TweenLite.to(_nc.find('iframe'),0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
  770. opt.c.trigger('revolution.slide.onvideoplay',getVideoDatas(f,"vimeo",_nc.data()));
  771. opt.videoplaying=true;
  772. addVidtoList(_nc,opt);
  773. if (pforv)
  774. opt.c.trigger('stoptimer');
  775. else
  776. opt.videoplaying=false;
  777. if (_nc.data('volume')=="mute" || _R.lastToggleState(_nc.data('videomutetoggledby')) || opt.globalmute===true)
  778. f.setVolume(0);
  779. else
  780. f.setVolume(parseInt(_nc.data('volume'),0)/100 || 0.75);
  781. _R.toggleState(_.videotoggledby);
  782. });
  783. f.on('playProgress',function(data) {
  784. var et = getStartSec(_nc.data('videoendat'))
  785. _nc.data('currenttime',data.seconds);
  786. if (et!=0 && (Math.abs(et-data.seconds) <0.3 && et>data.seconds) && _nc.data('nextslidecalled') != 1) {
  787. if (loop) {
  788. f.play();
  789. var s = getStartSec(_nc.data('videostartat'));
  790. if (s!=-1) f.seekTo(s);
  791. } else {
  792. if (_nc.data('nextslideatend')==true) {
  793. _nc.data('nextslideatend-triggered',1);
  794. _nc.data('nextslidecalled',1);
  795. opt.c.revnext();
  796. }
  797. f.pause();
  798. }
  799. }
  800. });
  801. f.on('finish', function(data) {
  802. remVidfromList(_nc,opt);
  803. opt.videoplaying=false;
  804. opt.c.trigger('starttimer');
  805. opt.c.trigger('revolution.slide.onvideostop',getVideoDatas(f,"vimeo",_nc.data()));
  806. if (_nc.data('nextslideatend')==true) {
  807. _nc.data('nextslideatend-triggered',1);
  808. opt.c.revnext();
  809. }
  810. if (opt.currentLayerVideoIsPlaying==undefined || opt.currentLayerVideoIsPlaying.attr("id") == _nc.attr("id"))
  811. _R.unToggleState(_.videotoggledby);
  812. });
  813. f.on('pause', function(data) {
  814. if (((_nc.data('showcoveronpause')=="on" && _nc.find('.tp-videoposter').length>0) || (_nc.data('bgvideo')===1 && _nc.find('.rs-fullvideo-cover').length>0))) {
  815. if (_nc.data('bgvideo')===1)
  816. punchgs.TweenLite.to(_nc.find('.rs-fullvideo-cover'),0.1,{autoAlpha:1,force3D:"auto",ease:punchgs.Power3.easeInOut});
  817. else
  818. punchgs.TweenLite.to(_nc.find('.tp-videoposter'),0.1,{autoAlpha:1,force3D:"auto",ease:punchgs.Power3.easeInOut});
  819. punchgs.TweenLite.to(_nc.find('iframe'),0.1,{autoAlpha:0,ease:punchgs.Power3.easeInOut});
  820. }
  821. opt.videoplaying=false;
  822. opt.tonpause = false;
  823. remVidfromList(_nc,opt);
  824. opt.c.trigger('starttimer');
  825. opt.c.trigger('revolution.slide.onvideostop',getVideoDatas(f,"vimeo",_nc.data()));
  826. if (opt.currentLayerVideoIsPlaying==undefined || opt.currentLayerVideoIsPlaying.attr("id") == _nc.attr("id"))
  827. _R.unToggleState(_.videotoggledby);
  828. });
  829. _nc.find('.tp-videoposter').unbind("click");
  830. _nc.find('.tp-videoposter').click(function() {
  831. if (!_ISM) {
  832. f.play();
  833. return false;
  834. }
  835. })
  836. if (_nc.data('startvideonow')) {
  837. f.play();
  838. var s = getStartSec(_nc.data('videostartat'));
  839. if (s!=-1) f.seekTo(s);
  840. }
  841. _nc.data('videolistenerexist',1);
  842. if(isVideoBg) f.play();
  843. break;
  844. }
  845. } else {
  846. var s = getStartSec(_nc.data('videostartat'));
  847. switch (_.videotype) {
  848. // YOUTUBE LISTENER
  849. case "youtube":
  850. if (startnow) {
  851. _.player.playVideo();
  852. if (s!=-1) _.player.seekTo()
  853. }
  854. break;
  855. case "vimeo":
  856. if (startnow) {
  857. var f = _nc.data('vimeoplayer');
  858. f.play();
  859. if (s!=-1) f.seekTo(s);
  860. }
  861. break;
  862. }
  863. }
  864. }
  865. var exitFullscreen = function() {
  866. if(document.exitFullscreen) {
  867. document.exitFullscreen();
  868. } else if(document.mozCancelFullScreen) {
  869. document.mozCancelFullScreen();
  870. } else if(document.webkitExitFullscreen) {
  871. document.webkitExitFullscreen();
  872. }
  873. }
  874. var checkfullscreenEnabled = function() {
  875. try{
  876. // FF provides nice flag, maybe others will add support for this later on?
  877. if(window['fullScreen'] !== undefined) {
  878. return window.fullScreen;
  879. }
  880. // 5px height margin, just in case (needed by e.g. IE)
  881. var heightMargin = 5;
  882. if(jQuery.browser.webkit && /Apple Computer/.test(navigator.vendor)) {
  883. // Safari in full screen mode shows the navigation bar,
  884. // which is 40px
  885. heightMargin = 42;
  886. }
  887. return screen.width == window.innerWidth &&
  888. Math.abs(screen.height - window.innerHeight) < heightMargin;
  889. } catch(e) {
  890. }
  891. }
  892. ///////////////////////////////////////// HTML5 VIDEOS ///////////////////////////////////////////
  893. var htmlvideoevents = function(_nc,opt,startnow) {
  894. if (_ISM && _nc.data('disablevideoonmobile')==1) return false;
  895. var _ = _nc.data(),
  896. tag = _.audio=="html5" ? "audio" : "video",
  897. jvideo = _nc.find(tag),
  898. video = jvideo[0],
  899. html5vid = jvideo.parent(),
  900. loop = _.videoloop,
  901. pforv = loop != "loopandnoslidestop";
  902. loop = loop =="loop" || loop =="loopandnoslidestop";
  903. html5vid.data('metaloaded',1);
  904. // FIRST TIME LOADED THE HTML5 VIDEO
  905. if (_nc.data('bgvideo')==1 && (_.videoloop==="none" || _.videoloop===false))
  906. pforv = false;
  907. //PLAY, STOP VIDEO ON CLICK OF PLAY, POSTER ELEMENTS
  908. if (jvideo.attr('control') == undefined ) {
  909. if (_nc.find('.tp-video-play-button').length==0 && !_ISM)
  910. _nc.append('<div class="tp-video-play-button"><i class="revicon-right-dir"></i><span class="tp-revstop">&nbsp;</span></div>');
  911. _nc.find('video, .tp-poster, .tp-video-play-button').click(function() {
  912. if (_nc.hasClass("videoisplaying"))
  913. video.pause();
  914. else
  915. video.play();
  916. })
  917. }
  918. // PRESET FULLCOVER VIDEOS ON DEMAND
  919. if (_nc.data('forcecover')==1 || _nc.hasClass('fullscreenvideo') || _nc.data('bgvideo')==1) {
  920. if (_nc.data('forcecover')==1 || _nc.data('bgvideo')==1) {
  921. html5vid.addClass("fullcoveredvideo");
  922. var asprat = _nc.data('aspectratio') || "4:3";
  923. _R.setSize(opt);
  924. _R.prepareCoveredVideo(asprat,opt,_nc);
  925. }
  926. else
  927. html5vid.addClass("fullscreenvideo");
  928. }
  929. // FIND CONTROL BUTTONS IN VIDEO, AND ADD EVENT LISTENERS ON THEM
  930. var playButton = _nc.find('.tp-vid-play-pause')[0],
  931. muteButton = _nc.find('.tp-vid-mute')[0],
  932. fullScreenButton = _nc.find('.tp-vid-full-screen')[0],
  933. seekBar = _nc.find('.tp-seek-bar')[0],
  934. volumeBar = _nc.find('.tp-volume-bar')[0];
  935. if (playButton!=undefined) {
  936. // Event listener for the play/pause button
  937. addEvent(playButton,"click", function() {
  938. if (video.paused == true)
  939. video.play();
  940. else
  941. video.pause();
  942. });
  943. }
  944. if (muteButton!=undefined) {
  945. // Event listener for the mute button
  946. addEvent(muteButton,"click", function() {
  947. if (video.muted == false) {
  948. video.muted = true;
  949. muteButton.innerHTML = "Unmute";
  950. } else {
  951. video.muted = false;
  952. muteButton.innerHTML = "Mute";
  953. }
  954. });
  955. }
  956. if (fullScreenButton!=undefined) {
  957. // Event listener for the full-screen button
  958. if (fullScreenButton)
  959. addEvent(fullScreenButton,"click", function() {
  960. if (video.requestFullscreen) {
  961. video.requestFullscreen();
  962. } else if (video.mozRequestFullScreen) {
  963. video.mozRequestFullScreen(); // Firefox
  964. } else if (video.webkitRequestFullscreen) {
  965. video.webkitRequestFullscreen(); // Chrome and Safari
  966. }
  967. });
  968. }
  969. if (seekBar !=undefined) {
  970. // Event listener for the seek bar
  971. addEvent(seekBar,"change", function() {
  972. var time = video.duration * (seekBar.value / 100);
  973. video.currentTime = time;
  974. });
  975. // Pause the video when the seek handle is being dragged
  976. addEvent(seekBar,"mousedown", function() {
  977. _nc.addClass("seekbardragged");
  978. video.pause();
  979. });
  980. // Play the video when the seek handle is dropped
  981. addEvent(seekBar,"mouseup", function() {
  982. _nc.removeClass("seekbardragged");
  983. video.play();
  984. });
  985. }
  986. addEvent(video,"canplaythrough", function() {
  987. _R.preLoadAudioDone(_nc,opt,"canplaythrough");
  988. });
  989. addEvent(video,"canplay", function() {
  990. _R.preLoadAudioDone(_nc,opt,"canplay");
  991. });
  992. addEvent(video,"progress", function() {
  993. _R.preLoadAudioDone(_nc,opt,"progress");
  994. });
  995. // Update the seek bar as the video plays
  996. addEvent(video,"timeupdate", function() {
  997. var value = (100 / video.duration) * video.currentTime,
  998. et = getStartSec(_nc.data('videoendat')),
  999. cs =video.currentTime;
  1000. if (seekBar != undefined)
  1001. seekBar.value = value;
  1002. if (et!=0 && et!=-1 && (Math.abs(et-cs) <=0.3 && et>cs) && _nc.data('nextslidecalled') != 1) {
  1003. if (loop) {
  1004. video.play();
  1005. var s = getStartSec(_nc.data('videostartat'));
  1006. if (s!=-1) video.currentTime = s;
  1007. } else {
  1008. if (_nc.data('nextslideatend')==true) {
  1009. _nc.data('nextslideatend-triggered',1);
  1010. _nc.data('nextslidecalled',1);
  1011. opt.just_called_nextslide_at_htmltimer = true;
  1012. opt.c.revnext();
  1013. setTimeout(function() {
  1014. opt.just_called_nextslide_at_htmltimer = false;
  1015. },1000);
  1016. }
  1017. video.pause();
  1018. }
  1019. }
  1020. });
  1021. if (volumeBar != undefined) {
  1022. // Event listener for the volume bar
  1023. addEvent(volumeBar,"change", function() {
  1024. // Update the video volume
  1025. video.volume = volumeBar.value;
  1026. });
  1027. }
  1028. // VIDEO EVENT LISTENER FOR "PLAY"
  1029. addEvent(video,"play",function() {
  1030. _nc.data('nextslidecalled',0);
  1031. var vol = _nc.data('volume');
  1032. vol = vol!=undefined && vol!="mute" ?parseFloat(vol)/100 : vol;
  1033. // JASON
  1034. // if (!_ANDROID) {
  1035. if (!_R.is_mobile() && !_R.isSafari11()) {
  1036. if (opt.globalmute===true)
  1037. video.muted = true;
  1038. else
  1039. video.muted = false;
  1040. if (vol>1) vol = vol/100;
  1041. if (vol=="mute")
  1042. video.muted=true;
  1043. else
  1044. if (vol!=undefined)
  1045. video.volume = vol;
  1046. }
  1047. _nc.addClass("videoisplaying");
  1048. var tag = _.audio=="html5" ? "audio" : "video";
  1049. addVidtoList(_nc,opt);
  1050. if (!pforv || tag=="audio") {
  1051. opt.videoplaying=false;
  1052. if (tag!="audio") opt.c.trigger('starttimer');
  1053. opt.c.trigger('revolution.slide.onvideostop',getVideoDatas(video,"html5",_));
  1054. } else {
  1055. opt.videoplaying=true;
  1056. opt.c.trigger('stoptimer');
  1057. opt.c.trigger('revolution.slide.onvideoplay',getVideoDatas(video,"html5",_));
  1058. }
  1059. punchgs.TweenLite.to(_nc.find('.tp-videoposter'),0.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut});
  1060. punchgs.TweenLite.to(_nc.find(tag),0.3,{autoAlpha:1,display:"block",ease:punchgs.Power3.easeInOut});
  1061. var playButton = _nc.find('.tp-vid-play-pause')[0],
  1062. muteButton = _nc.find('.tp-vid-mute')[0];
  1063. if (playButton!=undefined)
  1064. playButton.innerHTML = "Pause";
  1065. if (muteButton!=undefined && video.muted)
  1066. muteButton.innerHTML = "Unmute";
  1067. _R.toggleState(_.videotoggledby);
  1068. });
  1069. // VIDEO EVENT LISTENER FOR "PAUSE"
  1070. addEvent(video,"pause",function(e) {
  1071. var tag = _.audio=="html5" ? "audio" : "video",
  1072. fsmode = checkfullscreenEnabled();
  1073. if (!fsmode && _nc.find('.tp-videoposter').length>0 && _nc.data('showcoveronpause')=="on" && !_nc.hasClass("seekbardragged")) {
  1074. punchgs.TweenLite.to(_nc.find('.tp-videoposter'),0.3,{autoAlpha:1,force3D:"auto",ease:punchgs.Power3.easeInOut});
  1075. punchgs.TweenLite.to(_nc.find(tag),0.3,{autoAlpha:0,ease:punchgs.Power3.easeInOut});
  1076. }
  1077. _nc.removeClass("videoisplaying");
  1078. opt.videoplaying=false;
  1079. remVidfromList(_nc,opt);
  1080. if (tag!="audio") opt.c.trigger('starttimer');
  1081. opt.c.trigger('revolution.slide.onvideostop',getVideoDatas(video,"html5",_nc.data()));
  1082. var playButton = _nc.find('.tp-vid-play-pause')[0];
  1083. if (playButton!=undefined)
  1084. playButton.innerHTML = "Play";
  1085. if (opt.currentLayerVideoIsPlaying==undefined || opt.currentLayerVideoIsPlaying.attr("id") == _nc.attr("id"))
  1086. _R.unToggleState(_.videotoggledby);
  1087. });
  1088. // VIDEO EVENT LISTENER FOR "END"
  1089. addEvent(video,"ended",function() {
  1090. exitFullscreen();
  1091. remVidfromList(_nc,opt);
  1092. opt.videoplaying=false;
  1093. remVidfromList(_nc,opt);
  1094. if (tag!="audio") opt.c.trigger('starttimer');
  1095. opt.c.trigger('revolution.slide.onvideostop',getVideoDatas(video,"html5",_nc.data()));
  1096. if (_nc.data('nextslideatend')===true && video.currentTime>0) {
  1097. if (!opt.just_called_nextslide_at_htmltimer==true) {
  1098. _nc.data('nextslideatend-triggered',1);
  1099. opt.c.revnext();
  1100. opt.just_called_nextslide_at_htmltimer = true;
  1101. }
  1102. setTimeout(function() {
  1103. opt.just_called_nextslide_at_htmltimer = false;
  1104. },1500)
  1105. }
  1106. _nc.removeClass("videoisplaying");
  1107. });
  1108. }
  1109. var addVidtoList = function(_nc,opt) {
  1110. if (opt.playingvideos == undefined) opt.playingvideos = new Array();
  1111. // STOP OTHER VIDEOS
  1112. if (_nc.data('stopallvideos')) {
  1113. if (opt.playingvideos != undefined && opt.playingvideos.length>0) {
  1114. opt.lastplayedvideos = jQuery.extend(true,[],opt.playingvideos);
  1115. jQuery.each(opt.playingvideos,function(i,_nc) {
  1116. _R.stopVideo(_nc,opt);
  1117. });
  1118. }
  1119. }
  1120. opt.playingvideos.push(_nc);
  1121. opt.currentLayerVideoIsPlaying = _nc;
  1122. }
  1123. var remVidfromList = function(_nc,opt) {
  1124. if (opt.playingvideos != undefined && jQuery.inArray(_nc,opt.playingvideos)>=0)
  1125. opt.playingvideos.splice(jQuery.inArray(_nc,opt.playingvideos),1);
  1126. }
  1127. })(jQuery);