revolution.extension.actions.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. /********************************************
  2. * REVOLUTION 5.4.2 EXTENSION - ACTIONS
  3. * @version: 2.1.0 (15.05.2017)
  4. * @requires jquery.themepunch.revolution.js
  5. * @author ThemePunch
  6. *********************************************/
  7. (function($) {
  8. "use strict";
  9. var _R = jQuery.fn.revolution,
  10. _ISM = _R.is_mobile(),
  11. extension = { alias:"Actions Min JS",
  12. name:"revolution.extensions.actions.min.js",
  13. min_core: "5.4.5",
  14. version:"2.1.0"
  15. };
  16. ///////////////////////////////////////////
  17. // EXTENDED FUNCTIONS AVAILABLE GLOBAL //
  18. ///////////////////////////////////////////
  19. jQuery.extend(true,_R, {
  20. checkActions : function(_nc,opt,as) {
  21. if (_R.compare_version(extension).check==="stop") return false;
  22. checkActions_intern(_nc,opt,as);
  23. }
  24. });
  25. //////////////////////////////////////////
  26. // - INITIALISATION OF ACTIONS - //
  27. //////////////////////////////////////////
  28. var checkActions_intern = function(_nc,opt,as) {
  29. if (as)
  30. jQuery.each(as,function(i,a) {
  31. a.delay = parseInt(a.delay,0)/1000;
  32. _nc.addClass("tp-withaction");
  33. // LISTEN TO ESC TO EXIT FROM FULLSCREEN
  34. if (!opt.fullscreen_esclistener) {
  35. if (a.action=="exitfullscreen" || a.action=="togglefullscreen") {
  36. jQuery(document).keyup(function(e) {
  37. if (e.keyCode == 27 && jQuery('#rs-go-fullscreen').length>0)
  38. _nc.trigger(a.event);
  39. });
  40. opt.fullscreen_esclistener = true;
  41. }
  42. }
  43. var tnc = a.layer == "backgroundvideo" ? jQuery(".rs-background-video-layer") : a.layer == "firstvideo" ? jQuery(".tp-revslider-slidesli").find('.tp-videolayer') : jQuery("#"+a.layer);
  44. // NO NEED EXTRA TOGGLE CLASS HANDLING
  45. if (jQuery.inArray(a.action,["toggleslider","toggle_mute_video","toggle_global_mute_video","togglefullscreen"])!=-1) {
  46. _nc.data('togglelisteners',true);
  47. }
  48. // COLLECT ALL TOGGLE TRIGGER TO CONNECT THEM WITH TRIGGERED LAYER
  49. switch (a.action) {
  50. case "togglevideo":
  51. jQuery.each(tnc,function(i,_tnc) {
  52. _tnc = jQuery(_tnc);
  53. var videotoggledby = _tnc.data('videotoggledby');
  54. if (videotoggledby == undefined)
  55. videotoggledby = new Array();
  56. videotoggledby.push(_nc);
  57. _tnc.data('videotoggledby',videotoggledby)
  58. });
  59. break;
  60. case "togglelayer":
  61. jQuery.each(tnc,function(i,_tnc) {
  62. _tnc = jQuery(_tnc);
  63. var layertoggledby = _tnc.data('layertoggledby');
  64. if (layertoggledby == undefined)
  65. layertoggledby = new Array();
  66. layertoggledby.push(_nc);
  67. _tnc.data('layertoggledby',layertoggledby);
  68. _tnc.data('triggered_startstatus',a.layerstatus);
  69. });
  70. break;
  71. case "toggle_mute_video":
  72. jQuery.each(tnc,function(i,_tnc) {
  73. _tnc = jQuery(_tnc);
  74. var videomutetoggledby = _tnc.data('videomutetoggledby');
  75. if (videomutetoggledby == undefined)
  76. videomutetoggledby = new Array();
  77. videomutetoggledby.push(_nc);
  78. _tnc.data('videomutetoggledby',videomutetoggledby);
  79. });
  80. break;
  81. case "toggle_global_mute_video":
  82. jQuery.each(tnc,function(i,_tnc) {
  83. _tnc = jQuery(_tnc);
  84. var videomutetoggledby = _tnc.data('videomutetoggledby');
  85. if (videomutetoggledby == undefined)
  86. videomutetoggledby = new Array();
  87. videomutetoggledby.push(_nc);
  88. _tnc.data('videomutetoggledby',videomutetoggledby);
  89. });
  90. break;
  91. case "toggleslider":
  92. if (opt.slidertoggledby == undefined) opt.slidertoggledby = new Array();
  93. opt.slidertoggledby.push(_nc);
  94. break;
  95. case "togglefullscreen":
  96. if (opt.fullscreentoggledby == undefined) opt.fullscreentoggledby = new Array();
  97. opt.fullscreentoggledby.push(_nc);
  98. break;
  99. }
  100. _nc.on(a.event,function() {
  101. if (a.event==="click" && _nc.hasClass("tp-temporarydisabled")) return false;
  102. var tnc = a.layer == "backgroundvideo" ? jQuery(".active-revslide .slotholder .rs-background-video-layer") : a.layer == "firstvideo" ? jQuery(".active-revslide .tp-videolayer").first() : jQuery("#"+a.layer);
  103. if (a.action=="stoplayer" || a.action=="togglelayer" || a.action=="startlayer") {
  104. if (tnc.length>0) {
  105. var _ = tnc.data();
  106. if (_.clicked_time_stamp !==undefined) {
  107. if ((new Date().getTime() - _.clicked_time_stamp)>150) {
  108. clearTimeout(_.triggerdelayIn);
  109. clearTimeout(_.triggerdelayOut);
  110. }
  111. }
  112. _.clicked_time_stamp = new Date().getTime();
  113. if (a.action=="startlayer" || (a.action=="togglelayer" && tnc.data('animdirection')!="in")) {
  114. _.animdirection= "in";
  115. _.triggerstate = "on";
  116. _R.toggleState(_.layertoggledby);
  117. if (_R.playAnimationFrame) {
  118. clearTimeout(_.triggerdelayIn);
  119. _.triggerdelayIn = setTimeout(function() {
  120. _R.playAnimationFrame({caption:tnc,opt:opt,frame:"frame_0", triggerdirection:"in", triggerframein:"frame_0", triggerframeout:"frame_999"});
  121. },(a.delay*1000));
  122. }
  123. } else
  124. if (a.action=="stoplayer" || (a.action=="togglelayer" && tnc.data('animdirection')!="out")) {
  125. _.animdirection= "out";
  126. _.triggered= true;
  127. _.triggerstate = "off";
  128. if (_R.stopVideo) _R.stopVideo(tnc,opt);
  129. _R.unToggleState(_.layertoggledby);
  130. if (_R.endMoveCaption) {
  131. clearTimeout(_.triggerdelayOut);
  132. _.triggerdelayOut = setTimeout(function() {
  133. _R.playAnimationFrame({caption:tnc,opt:opt,frame:"frame_999", triggerdirection:"out", triggerframein:"frame_0", triggerframeout:"frame_999"});
  134. },(a.delay*1000));
  135. }
  136. }
  137. }
  138. } else {
  139. if (_ISM && (a.action=='playvideo' || a.action=='stopvideo' || a.action=='togglevideo' || a.action=='mutevideo' || a.action=='unmutevideo' || a.action=='toggle_mute_video' || a.action=='toggle_global_mute_video')) {
  140. actionSwitches(tnc,opt,a,_nc);
  141. } else {
  142. a.delay = a.delay === "NaN" || a.delay ===NaN ? 0 : a.delay;
  143. punchgs.TweenLite.delayedCall(a.delay,function() {
  144. actionSwitches(tnc,opt,a,_nc);
  145. },[tnc,opt,a,_nc]);
  146. }
  147. }
  148. });
  149. switch (a.action) {
  150. case "togglelayer":
  151. case "startlayer":
  152. case "playlayer":
  153. case "stoplayer":
  154. var tnc = jQuery("#"+a.layer),
  155. d = tnc.data();
  156. if (tnc.length>0 && d!==undefined && ((d.frames!==undefined && d.frames[0].delay!="bytrigger") || (d.frames===undefined && d.start!=="bytrigger"))) {
  157. d.triggerstate="on";
  158. //d.animdirection="in";
  159. }
  160. break;
  161. }
  162. })
  163. }
  164. function getScrollRoot(){
  165. var html = document.documentElement, body = document.body,
  166. cacheTop = ((typeof window.pageYOffset !== "undefined") ? window.pageYOffset : null) || body.scrollTop || html.scrollTop, // cache the window's current scroll position
  167. root;
  168. html.scrollTop = body.scrollTop = cacheTop + (cacheTop > 0) ? -1 : 1;
  169. root = (html.scrollTop !== cacheTop) ? html : body;
  170. root.scrollTop = cacheTop;
  171. return root;
  172. }
  173. var actionSwitches = function(tnc,opt,a,_nc) {
  174. switch (a.action) {
  175. case "scrollbelow":
  176. a.speed = a.speed!==undefined ? a.speed : 400;
  177. a.ease = a.ease!==undefined ? a.ease : punchgs.Power2.easeOut;
  178. _nc.addClass("tp-scrollbelowslider");
  179. _nc.data('scrolloffset',a.offset);
  180. _nc.data('scrolldelay',a.delay);
  181. _nc.data('scrollspeed',a.speed);
  182. _nc.data('scrollease',a.ease);
  183. var off=getOffContH(opt.fullScreenOffsetContainer) || 0,
  184. aof = parseInt(a.offset,0) || 0;
  185. off = off - aof || 0;
  186. opt.scrollRoot = jQuery(document);
  187. var sobj = {_y:opt.scrollRoot.scrollTop()};
  188. punchgs.TweenLite.to(sobj,a.speed/1000,{_y:(opt.c.offset().top+(jQuery(opt.li[0]).height())-off), ease:a.ease, onUpdate:function() { opt.scrollRoot.scrollTop(sobj._y)}})
  189. break;
  190. case "callback":
  191. eval(a.callback);
  192. break;
  193. case "jumptoslide":
  194. switch (a.slide.toLowerCase()) {
  195. case "+1":
  196. case "next":
  197. opt.sc_indicator="arrow";
  198. _R.callingNewSlide(opt.c,1);
  199. break;
  200. case "previous":
  201. case "prev":
  202. case "-1":
  203. opt.sc_indicator="arrow";
  204. _R.callingNewSlide(opt.c,-1);
  205. break;
  206. default:
  207. var ts = jQuery.isNumeric(a.slide) ? parseInt(a.slide,0) : a.slide;
  208. _R.callingNewSlide(opt.c,ts);
  209. break;
  210. }
  211. break;
  212. case "simplelink":
  213. window.open(a.url,a.target);
  214. break;
  215. case "toggleslider":
  216. opt.noloopanymore=0;
  217. if (opt.sliderstatus=="playing") {
  218. opt.c.revpause();
  219. opt.forcepause_viatoggle = true;
  220. _R.unToggleState(opt.slidertoggledby);
  221. }
  222. else {
  223. opt.forcepause_viatoggle = false;
  224. opt.c.revresume();
  225. _R.toggleState(opt.slidertoggledby);
  226. }
  227. break;
  228. case "pauseslider":
  229. opt.c.revpause();
  230. _R.unToggleState(opt.slidertoggledby);
  231. break;
  232. case "playslider":
  233. opt.noloopanymore=0;
  234. opt.c.revresume();
  235. _R.toggleState(opt.slidertoggledby);
  236. break;
  237. case "playvideo":
  238. if (tnc.length>0)
  239. _R.playVideo(tnc,opt);
  240. break;
  241. case "stopvideo":
  242. if (tnc.length>0)
  243. if (_R.stopVideo) _R.stopVideo(tnc,opt);
  244. break;
  245. case "togglevideo":
  246. if (tnc.length>0)
  247. if (!_R.isVideoPlaying(tnc,opt))
  248. _R.playVideo(tnc,opt);
  249. else
  250. if (_R.stopVideo) _R.stopVideo(tnc,opt);
  251. break;
  252. case "mutevideo":
  253. if (tnc.length>0)
  254. _R.muteVideo(tnc,opt);
  255. break;
  256. case "unmutevideo":
  257. if (tnc.length>0)
  258. if (_R.unMuteVideo) _R.unMuteVideo(tnc,opt);
  259. break;
  260. case "toggle_mute_video":
  261. if (tnc.length>0)
  262. if (_R.isVideoMuted(tnc,opt)) {
  263. _R.unMuteVideo(tnc,opt);
  264. } else {
  265. if (_R.muteVideo) _R.muteVideo(tnc,opt);
  266. }
  267. _nc.toggleClass('rs-toggle-content-active');
  268. break;
  269. case "toggle_global_mute_video":
  270. if (opt.globalmute === true) {
  271. opt.globalmute = false;
  272. if (opt.playingvideos != undefined && opt.playingvideos.length>0) {
  273. jQuery.each(opt.playingvideos,function(i,_nc) {
  274. if (_R.unMuteVideo) _R.unMuteVideo(_nc,opt);
  275. });
  276. }
  277. } else {
  278. opt.globalmute = true;
  279. if (opt.playingvideos != undefined && opt.playingvideos.length>0) {
  280. jQuery.each(opt.playingvideos,function(i,_nc) {
  281. if (_R.muteVideo) _R.muteVideo(_nc,opt);
  282. });
  283. }
  284. }
  285. _nc.toggleClass('rs-toggle-content-active');
  286. break;
  287. case "simulateclick":
  288. if (tnc.length>0) tnc.click();
  289. break;
  290. case "toggleclass":
  291. if (tnc.length>0)
  292. if (!tnc.hasClass(a.classname))
  293. tnc.addClass(a.classname);
  294. else
  295. tnc.removeClass(a.classname);
  296. break;
  297. case "gofullscreen":
  298. case "exitfullscreen":
  299. case "togglefullscreen":
  300. if (jQuery('.rs-go-fullscreen').length>0 && (a.action=="togglefullscreen" || a.action=="exitfullscreen")) {
  301. jQuery('.rs-go-fullscreen').removeClass("rs-go-fullscreen");
  302. var gf = opt.c.closest('.forcefullwidth_wrapper_tp_banner').length>0 ? opt.c.closest('.forcefullwidth_wrapper_tp_banner') : opt.c.closest('.rev_slider_wrapper');
  303. opt.minHeight = opt.oldminheight;
  304. opt.infullscreenmode = false;
  305. opt.c.revredraw();
  306. jQuery(window).trigger("resize");
  307. _R.unToggleState(opt.fullscreentoggledby);
  308. } else
  309. if (jQuery('.rs-go-fullscreen').length==0 && (a.action=="togglefullscreen" || a.action=="gofullscreen")) {
  310. var gf = opt.c.closest('.forcefullwidth_wrapper_tp_banner').length>0 ? opt.c.closest('.forcefullwidth_wrapper_tp_banner') : opt.c.closest('.rev_slider_wrapper');
  311. gf.addClass("rs-go-fullscreen");
  312. opt.oldminheight = opt.minHeight;
  313. opt.minHeight = jQuery(window).height();
  314. opt.infullscreenmode = true;
  315. opt.c.revredraw();
  316. jQuery(window).trigger("resize");
  317. _R.toggleState(opt.fullscreentoggledby);
  318. }
  319. break;
  320. default:
  321. var obj = {};
  322. obj.event = a;
  323. obj.layer = _nc;
  324. opt.c.trigger('layeraction',[obj]);
  325. break;
  326. }
  327. }
  328. var getOffContH = function(c) {
  329. if (c==undefined) return 0;
  330. if (c.split(',').length>1) {
  331. var oc = c.split(","),
  332. a =0;
  333. if (oc)
  334. jQuery.each(oc,function(index,sc) {
  335. if (jQuery(sc).length>0)
  336. a = a + jQuery(sc).outerHeight(true);
  337. });
  338. return a;
  339. } else {
  340. return jQuery(c).height();
  341. }
  342. return 0;
  343. }
  344. })(jQuery);