PageSourceSearch

https://www.tristargroup.net/modules/gavias_sliderlayer/vendor/rev…/revolution.extension.video.min.js?v=1.x

js tristargroup.net collected 2026-10-06 14:00:10 UTC 45,429 bytes, 1,218 lines download raw bytes

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

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.