PageSourceSearch

https://www.centraleyes.com/wp-content/plugins/ifso-trigger-events…/js/ifso-trigger-events-public.js?ver=1.13

js centraleyes.com collected 2026-09-25 03:52:25 UTC 19,696 bytes, 402 lines download raw bytes

1var ifso_initialized_modals = [];
2(function( $ ) {
3    ifso_scope.replaceLoadLaterTriggers = function (defer = false) {
4        var _this = this;
5        var toReplace = this.lookForLoadLaterTriggers(defer,false);
6        var triggers_with_events = [];
7        if (toReplace.length > 0) {
8            this.sendAjaxReq('render_ifso_shortcodes', {triggers: toReplace, pageload_referrer: referrer_for_pageload}, function (ret) {	//Referrer from if-so public
9                if (ret && ret !== null) {
10                    try {
11                        var data = JSON.parse(ret);
12                        $.each(data, function (tid, tval) {
13                            var tagsInDom = typeof(_this.lookForTriggerTags)==='function' ? _this.lookForTriggerTags(tid) : $('IfSoTrigger[tid="' + tid + '"]');
14                            tagsInDom.each(function (i, tag) {
15                                if (null !== tag.getAttribute('eventType')) {	//If the trigger has an Eventtype setup,add its data to the triggers_with_events array
16                                    var dataFromShortcode = {};
17                                    $.each(tag.attributes, function (i, attr) {
18                                        if (attr.name !== 'style') {
19                                            dataFromShortcode[attr.name] = attr.value;
20                                        }
21                                    })
22                                    dataFromShortcode.element = tag;
23                                    dataFromShortcode.content = tval;
24                                    triggers_with_events.push(dataFromShortcode);
25                                    return;
26                                }
27                               BaseTriggerCallback(tag,tval);
28                            })
29                        });
30                        if (triggers_with_events.length > 0) {
31                            ifso_scope.process_triggers_with_events(triggers_with_events);
32                        }
33                        DispatchTriggersLoaded();
34                    } catch (e) {
35                        console.error('Error fetching if-so triggers!');
36                        console.error(e);
37                    }
38                }
39            })
40        }
41    }
42
43    ifso_scope.process_triggers_with_events = function (triggers_with_events) {
44        var callback = function (element, content) {
45            BaseTriggerCallback(element,content);
46            DispatchTriggersLoaded();
47        };
48        var _this = this;
49        $.each(triggers_with_events, function (index, trigger) {
50            var eventType = trigger.eventtype;
51            if (typeof (_this.loadTriggerEvents[eventType]) !== 'undefined') {
52                _this.loadTriggerEvents[eventType](trigger, callback);
53            }
54            else{
55                BaseTriggerCallback(trigger.element,trigger.content);
56            }
57        });
58        ifso_after_trigger_events_processed();
59    }
60
61
62    ifso_scope.loadTriggerEvents = {
63        'scroll': function (trigger, callback) {
64            $(document).one('scroll', function () {
65                callback(trigger.element, trigger.content);
66            });
67        },
68
69        'click': function (trigger, callback) {
70            if (typeof (trigger.target) !== 'undefined') {
71                $(trigger.target).one('click', function () {
72                    callback(trigger.element, trigger.content);
73                });
74            }
75        },
76
77        'inactivity': function (trigger, callback) {
78            if (typeof (trigger.time) !== 'undefined') {
79                var timeCounter = 0;
80
81                var clearCounter = function () {
82                    timeCounter = 0;
83                };
84
85                addEventListener('mousemove', clearCounter);
86                addEventListener('keypress', clearCounter);
87
88                var inactivityInterval = setInterval(function () {
89                    timeCounter++;
90                    if (timeCounter >= trigger.time) {
91                        callback(trigger.element, trigger.content);
92                        removeEventListener('mousemove', clearCounter);
93                        removeEventListener('keypress', clearCounter);
94                        clearInterval(inactivityInterval);
95                    }
96                }, 1000);
97            }
98        },
99
100        'exit-intent': function (trigger, callback) {
101            var mouseleaveCB = function (e) {
102                if (e.relatedTarget === null) {
103                    if (e.clientY < 0) {
104                        setTimeout(function () {
105                            callback(trigger.element, trigger.content);
106                            document.removeEventListener('mouseout', mouseleaveCB);
107                        }, 250);
108                    }
109                }
110            };
111            document.addEventListener('mouseout', mouseleaveCB);
112        },
113
114        'delay': function(trigger,callback) {
115            if(trigger.delay && !isNaN(parseInt(trigger.delay))){
116                var delaySec = parseInt(trigger.delay) * 1000;
117                setTimeout(function(){
118                    callback(trigger.element,trigger.content);
119                },delaySec);
120            }
121            else{
122                callback(trigger.element,trigger.content);
123            }
124        },
125
126        'youtube' : function(trigger,callback){
127            if(trigger.target && document.querySelector(trigger.target)!==null){
128                var eventType = trigger.event ? trigger.event : 'play';
129                var target_el = document.querySelector(trigger.target).tagName.toLowerCase()==='iframe' ? document.querySelector(trigger.target) : document.querySelector(trigger.target).querySelector('iframe');
130                if(target_el!==null){
131                    if(typeof(ifso_scope['youtube-trigger-events'])==='undefined') ifso_scope['youtube-trigger-events'] = {};
132                    if(typeof(ifso_scope['youtube-trigger-events'][trigger.target])==='undefined') ifso_scope['youtube-trigger-events'][trigger.target] = {};
133                    if(typeof(ifso_scope['youtube-trigger-events']['callbacks'])==='undefined') ifso_scope['youtube-trigger-events']['callbacks'] = [];
134                    ifso_scope['youtube-trigger-events']['callbacks'].push(function(){
135                        if(typeof(ifso_scope['youtube-trigger-events'][trigger.target]['player'])==='undefined'){
136                            ifso_scope['youtube-trigger-events'][trigger.target]['player'] = new YT.Player(target_el);
137                        }
138                        ifso_scope['youtube-trigger-events'][trigger.target]['player'].addEventListener('onStateChange',function(e){
139                            if(trigger.element.parentElement===null) return;
140                            if(eventType==='play'){
141                                if(e.data===YT.PlayerState.PLAYING)
142                                    callback(trigger.element,trigger.content);
143                            }
144                            if(eventType==='pause'){
145                                if(e.data===YT.PlayerState.PAUSED)
146                                    callback(trigger.element,trigger.content);
147                            }
148                            if(eventType==='time-watched' || eventType==='time-reached'){
149                                var time = trigger.time ? parseInt(trigger.time) : 0;
150
151                                if(typeof(ifso_scope['youtube-trigger-events'][trigger.target][eventType])==='undefined') ifso_scope['youtube-trigger-events'][trigger.target][eventType] = {};
152                                if(e.data===YT.PlayerState.PLAYING){
153                                    if(eventType==='time-watched')
154                                        var now = typeof(ifso_scope['youtube-trigger-events'][trigger.target][eventType]['counter'])==='undefined' ? 0 : ifso_scope['youtube-trigger-events'][trigger.target][eventType]['counter'];
155                                    else
156                                        var now = parseInt(e.target.getCurrentTime());
157                                    ifso_scope['youtube-trigger-events'][trigger.target][eventType]['counter'] = now;
158                                    ifso_scope['youtube-trigger-events'][trigger.target][eventType]['interval'] = setInterval(function (){
159                                        ifso_scope['youtube-trigger-events'][trigger.target][eventType]['counter']++;
160                                        if(time<=ifso_scope['youtube-trigger-events'][trigger.target][eventType]['counter']){
161                                            callback(trigger.element,trigger.content);
162                                            clearInterval(ifso_scope['youtube-trigger-events'][trigger.target][eventType]['interval']);
163                                        }
164                                    },1000);
165                                }
166                                else
167                                    clearInterval(ifso_scope['youtube-trigger-events'][trigger.target][eventType]['interval']);
168                            }
169                        })
170                    });
171                }
172            }
173        },
174
175        'custom-event':function(trigger,callback){
176            if(trigger.eventname){
177                if(typeof(ifso_scope['custom-event-triggerEvents'])==='undefined') ifso_scope['custom-event-triggerEvents'] = [];
178                ifso_scope['custom-event-triggerEvents'].push(trigger);
179                document.addEventListener(trigger.eventname,function(){callback(trigger.element,trigger.content);});
180            }
181        }
182
183    };
184
185
186
187    var ifso_modal_initialized_event = document.createEvent('Event');
188    ifso_modal_initialized_event.initEvent('ifso_modal_initialized', true, true);
189
190    var modalsCreated = 0;
191    $( document ).ready(function() {
192        InitModals();
193        if(typeof(ifso_scope.DispatchAjaxContentLoaded)!=='undefined')
194            document.addEventListener("ifso_ajax_content_loaded",InitModals);
195        else
196            document.addEventListener("ifso_ajax_triggers_loaded",InitModals);
197    });
198
199    function InitModals(){
200        var tags = $('IfSoModalContent');
201        tags.each(function(index,el){
202            if(!el.classList.contains('ready')){
203                var content = el.innerHTML;
204                var className = (null!==el.getAttribute('classname')) ? el.getAttribute('classname').replace(' ' ,'_') : 'modal-'+modalsCreated++;
205                var closebtn = (null !== el.getAttribute('closebtn')) ? el.getAttribute('closebtn') : false;
206                var openbtn = (null !== el.getAttribute('openbtn')) ? el.getAttribute('openbtn') : false;
207                InitAndOpenModal(content,className,closebtn,openbtn);
208                el.classList.add('ready');
209            }
210        });
211    }
212
213    function InitAndOpenModal(content, className, closeWithButton = false,openWithButton = false){
214        if(content === '' || content === null || content.replaceAll(/\<ifsoTriggerAnalyticsEvent.*\>.*<\/ifsoTriggerAnalyticsEvent\>/gi,'')==='') return false;
215        var lockedModal = (!!closeWithButton);
216        var allowReopen = (!!openWithButton);
217        var dummyEl = document.createElement('div');
218        dummyEl.innerHTML = content;
219        dummyEl.className = 'ifso_modal_content';
220
221        var mod = new TinyModal(className,lockedModal);
222        mod.createModal(dummyEl);
223        mod.openModal();
224
225        if(lockedModal){
226            if(mod.mainElement.querySelector(closeWithButton)!==null){
227                mod.mainElement.querySelector(closeWithButton).addEventListener('click',function (){
228                    if(!allowReopen) mod.removeModal();
229                    else mod.closeModal();
230                });
231            }
232        }
233
234        if(allowReopen){
235            var reopenBtn = document.querySelector(openWithButton);
236            if(reopenBtn!==null){
237                reopenBtn.addEventListener('click',function(){
238                    mod.openModal();
239                });
240            }
241        }
242
243        ifso_initialized_modals.push(mod);
244        document.dispatchEvent(ifso_modal_initialized_event);
245
246        return mod;
247    }
248
249    function BaseTriggerCallback(element,content) {
250        if(element.getAttribute('prevent_default_rerender') && element.getAttribute('prevent_default_rerender')==='yes' && element.innerHTML===content) return;
251        if(element.getAttribute('display') && element.getAttribute('display') === 'modal') {
252            var className = (null !== element.getAttribute('classname')) ? element.getAttribute('classname').replace(' ', '_') : 'ifso_trigger_content_modal';
253            var closebtn = (null !== element.getAttribute('closebtn')) ? element.getAttribute('closebtn') : false;
254            var openbtn = (null !== element.getAttribute('openbtn')) ? element.getAttribute('openbtn') : false;
255            InitAndOpenModal(content, className, closebtn, openbtn);
256            element.outerHTML = '';
257        }
258        else {
259            element.outerHTML = content;
260        }
261
262        if(typeof(ifso_scope.evalScriptsFromHTML) === 'function')
263            ifso_scope.evalScriptsFromHTML(content);
264    }
265
266    function DispatchTriggersLoaded() {
267        if(typeof(ifso_scope.DispatchTriggersLoaded) === 'function')
268            ifso_scope.DispatchTriggersLoaded();
269    }
270
271    var redirectOnInteraction = function(el,rdrUrl,numberOfClicks,cname,cval,expires){
272        if($(el).hasClass('activated'))
273            return;
274        var ifsoJerkAnimations = document.getElementById('ifsoJerkAnimations');
275        if(ifsoJerkAnimations==null){
276            var cssText = '@keyframes jerkup{0%{transform:translateY(0);}50%{transform:translateY(-2px);}100%{transform:translateY(0);}}' +
277                '@keyframes jerkdown{0%{transform:translateY(0);}50%{transform:translateY(2px)}100%{transform:translateY(0);}}';
278            var cssEl = document.createElement('style');
279            cssEl.innerHTML = cssText;
280            cssEl.id = 'ifsoJerkAnimations';
281            var head = document.head || document.getElementsByTagName('head')[0];
282            head.appendChild(cssEl);
283            $(el).addClass('activated');
284        }
285        this.el = el;
286        this.rdrUrl = rdrUrl;
287        this.clicks = 0;
288        this.targetClicks = numberOfClicks;
289        this.cookieToSet = {'name':cname, 'value':cval, 'expires':expires};
290        this.realClickHandler = this.clickHandler.bind(this);
291        this.el.addEventListener('click',this.realClickHandler);
292    };
293    redirectOnInteraction.prototype = {
294        clickHandler : function () {
295            var animationToApply = (this.clicks%2===0) ? 'jerkup' : 'jerkdown';
296            this.el.style.animation = animationToApply + '  0.25s 3';
297            this.clicks++;
298            if(this.clicks>=this.targetClicks){
299                if(this.cookieToSet.name!=='')
300                    this.createCookie(this.cookieToSet.name,this.cookieToSet.value,this.cookieToSet.expires);
301                if(this.rdrUrl!=='')
302                    location.href = this.rdrUrl;
303                this.el.removeEventListener('click',this.realClickHandler);
304            }
305        },
306        createCookie : function(name, value, mins) {
307            var expires;
308            if (mins) {
309                var date = new Date();
310                date.setTime(date.getTime()+(mins*60*1000));
311                expires = "; expires="+date.toGMTString();
312            }
313            else {
314                expires = "";
315            }
316            document.cookie = name+"="+value+expires+"; path=/";
317        }
318    }
319    function initInteractionRedirects(){
320        var els = $('IfsoInteractRdr');
321        els.each(function (index,el) {
322            var clicks = el.getAttribute('clicks');
323            var url = el.getAttribute('url');
324            var cname = el.getAttribute('cname');
325            var cval = el.getAttribute('cval');
326            var expires = el.getAttribute('expires');
327            var n = new redirectOnInteraction(el,url,clicks,cname,cval,expires);
328        });
329    }
330
331    function isElementInViewport (el) {
332        if (typeof jQuery === "function" && el instanceof jQuery) {
333            el = el[0];
334        }
335        var rect = el.getBoundingClientRect();
336        return (
337            rect.top >= 0 &&
338            rect.left >= 0 &&
339            rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /* or $(window).height() */
340            rect.right <= (window.innerWidth || document.documentElement.clientWidth) /* or $(window).width() */
341        );
342    }
343    function scanCookieAdders(){
344        var elements = document.querySelectorAll('.ifso-add-cookie-on-view:not([done])');
345        elements = Array.prototype.slice.call(elements);
346        if(elements.length<=0) return;
347        for(var i=0;i<elements.length;i++){
348            if(isElementInViewport(elements[i])){
349                var cookiename = typeof(elements[i].getAttribute('cookiename'))==='string'? elements[i].getAttribute('cookiename') : 'ifso-viewed-element';
350                var cookieval = typeof (elements[i].id)==='string' && elements[i].id!=='' ? elements[i].id : '1';
351                var expiration = typeof (elements[i].getAttribute('expiration'))==='string' ? elements[i].getAttribute('expiration') : 365;
352                expiration = expiration==='session' || isNaN(parseInt(expiration)) ? false : parseInt(expiration);
353                ifso_scope.createCookie(cookiename,cookieval,expiration);
354                elements[i].setAttribute('done','yes');
355            }
356        }
357    }
358    function enableYoutubeIframesJSApi(){
359        var iframes = document.querySelectorAll('iframe.ifso-youtube, .ifso-youtube iframe');
360        iframes = Array.prototype.slice.call(iframes);
361        if(iframes.length<=0) return;
362        for(var i=0;i<iframes.length;i++){
363            if(iframes[i].getAttribute('ifso-ready')===null){
364                iframes[i].src = iframes[i].src+'&enablejsapi=1';
365                iframes[i].setAttribute("ifso-ready",'1');
366            }
367
368        }
369    }
370    function ifso_after_trigger_events_processed(){
371        if(typeof(ifso_scope['youtube-trigger-events'])!=='undefined'){
372            if(!ifso_scope['yt_iframe_api_loaded']){
373                ifso_scope['yt_iframe_api_loaded'] = true;
374                var imported_script = document.createElement('script');
375                imported_script.id = 'iframe-api-tag';
376                imported_script.src = 'https://www.youtube.com/iframe_api';
377                var firstScriptTag = document.getElementsByTagName('script')[0];
378                firstScriptTag.parentNode.insertBefore(imported_script, firstScriptTag);
379            }
380            window.onYouTubeIframeAPIReady = () => {
381                var cbks =  ifso_scope['youtube-trigger-events']['callbacks'];
382                for(var i=0;i<=cbks.length-1;i++){
383                    if(typeof(ifso_scope['youtube-trigger-events']['callbacks'][i])==='function')
384                        ifso_scope['youtube-trigger-events']['callbacks'][i]();
385                }
386            };
387        }
388    }
389    function init_extra_features(){
390        enableYoutubeIframesJSApi();
391        initInteractionRedirects();
392        scanCookieAdders();
393    }
394    $( document ).ready(function() {
395        init_extra_features();
396        if(typeof(ifso_scope.DispatchAjaxContentLoaded)!=='undefined')
397            document.addEventListener("ifso_ajax_content_loaded",init_extra_features);
398        else
399            document.addEventListener("ifso_ajax_triggers_loaded",init_extra_features);
400        document.addEventListener('scroll',scanCookieAdders);
401    });
402})( 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.