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"> </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.