revolution.extension.video.js 44 KB

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