1(function () { 2 function shouldShowGate() { 3 var settings = (window.EVF_PLAYER_GATE && EVF_PLAYER_GATE.ads) || {}; 4 return !!Number(settings.enable_preroll_gate); 5 } 6 7 function loadIframe(player) { 8 var url = player.dataset.evfEmbedUrl; 9 if (!url) { 10 return; 11 } 12 try { 13 var parsed = new URL(url, window.location.href); 14 parsed.searchParams.set('autoplay', '1'); 15 url = parsed.toString(); 16 } catch (error) { 17 url += (url.indexOf('?') === -1 ? '?' : '&') + 'autoplay=1'; 18 } 19 player.innerHTML = '<iframe title="VK Video" src="' + url.replace(/"/g, '"') + '" allow="autoplay; encrypted-media; fullscreen; picture-in-picture" allowfullscreen loading="eager"></iframe>'; 20 player.dataset.evfLoaded = '1'; 21 } 22 23 function extractPrerollSlotId(html) { 24 var template = document.createElement('div'); 25 template.innerHTML = html || ''; 26 var slot = template.querySelector('[id^="SRTB_"]'); 27 return slot ? slot.id : ''; 28 } 29 30 function rerunSapeRtbScripts() { 31 var sources = []; 32 document.querySelectorAll('script[src*="cdn-rtb.sape.ru/rtb-b/js/"]').forEach(function (script) { 33 var src = script.src || ''; 34 if (!src || sources.indexOf(src) !== -1) { 35 return; 36 } 37 sources.push(src); 38 }); 39 sources.forEach(function (src) { 40 var script = document.createElement('script'); 41 script.async = true; 42 script.type = 'text/javascript'; 43 script.dataset.evfRtbRerun = '1'; 44 script.src = src + (src.indexOf('?') === -1 ? '?' : '&') + 'evf_rerun=' + Date.now(); 45 document.body.appendChild(script); 46 }); 47 } 48 49 function mountPrerollAd(target) { 50 var frameUrl = (window.EVF_PLAYER_GATE && EVF_PLAYER_GATE.prerollFrameUrl) || ''; 51 if (frameUrl) { 52 var iframe = document.createElement('iframe'); 53 try { 54 var parsedFrameUrl = new URL(frameUrl, window.location.href); 55 parsedFrameUrl.searchParams.set('evf_t', String(Date.now())); 56 iframe.src = parsedFrameUrl.toString(); 57 } catch (error) { 58 iframe.src = frameUrl + (frameUrl.indexOf('?') === -1 ? '?' : '&') + 'evf_t=' + Date.now(); 59 } 60 iframe.className = 'evf-ad-frame'; 61 iframe.title = 'Advertisement'; 62 iframe.loading = 'eager'; 63 iframe.referrerPolicy = 'strict-origin-when-cross-origin'; 64 target.innerHTML = ''; 65 target.appendChild(iframe); 66 return; 67 } 68 69 var html = (window.EVF_PLAYER_GATE && EVF_PLAYER_GATE.prerollHtml) || ''; 70 var slotId = extractPrerollSlotId(html); 71 if (slotId) { 72 var existing = document.getElementById(slotId); 73 if (existing && !existing.closest('.evf-preroll-overlay')) { 74 var oldCard = existing.closest('.evf-ad-card'); 75 target.appendChild(existing); 76 if (oldCard) { 77 oldCard.classList.add('evf-ad-card--empty', 'evf-ad-card--moved'); 78 } 79 window.setTimeout(rerunSapeRtbScripts, 50); 80 return; 81 } 82 } 83 target.innerHTML = html; 84 window.setTimeout(rerunSapeRtbScripts, 50); 85 } 86 87 function showGate(player) { 88 var settings = (window.EVF_PLAYER_GATE && EVF_PLAYER_GATE.ads) || {}; 89 var skipAfter = Math.max(0, Number(settings.skip_after_seconds == null ? 5 : settings.skip_after_seconds)); 90 var minSeconds = Math.max(0, Number(settings.minimum_display_seconds == null ? 3 : settings.minimum_display_seconds)); 91 player.dataset.evfGate = '1'; 92 var overlay = document.createElement('div'); 93 overlay.className = 'evf-preroll-overlay'; 94 overlay.innerHTML = '<div class="evf-preroll-overlay__panel"><div class="evf-preroll-overlay__ad"></div>' + 95 '<div class="evf-preroll-overlay__controls"><span data-evf-preroll-countdown></span><button type="button" data-evf-preroll-skip disabled>Skip</button></div></div>'; 96 player.appendChild(overlay); 97 mountPrerollAd(overlay.querySelector('.evf-preroll-overlay__ad')); 98 var skip = overlay.querySelector('[data-evf-preroll-skip]'); 99 var countdown = overlay.querySelector('[data-evf-preroll-countdown]');
100 var elapsed = 0; 101 var timer = setInterval(function () { 102 elapsed++; 103 var remaining = Math.max(0, skipAfter - elapsed); 104 countdown.textContent = remaining ? 'Skip in ' + remaining + 's' : ''; 105 if (elapsed >= minSeconds && elapsed >= skipAfter) { 106 skip.disabled = false; 107 skip.textContent = 'Continue'; 108 } 109 }, 1000); 110 skip.addEventListener('click', function () { 111 clearInterval(timer); 112 overlay.remove(); 113 delete player.dataset.evfGate; 114 loadIframe(player); 115 }); 116 } 117 118 document.addEventListener('click', function (event) { 119 var button = event.target.closest('.evf-play-button'); 120 if (!button) { 121 return; 122 } 123 var player = button.closest('[data-evf-player]'); 124 if (!player || player.dataset.evfLoaded || player.dataset.evfGate) { 125 return; 126 } 127 var behavior = (window.EVF_PLAYER_GATE && EVF_PLAYER_GATE.playBehavior) || 'inline_preroll'; 128 if (behavior === 'single_page' && !button.closest('.evf-single__player')) { 129 var targetUrl = player.dataset.evfSingleUrl; 130 if (!targetUrl) { 131 var card = button.closest('.evf-video-card'); 132 var link = card ? card.querySelector('.evf-video-card__title a') : null; 133 targetUrl = link ? link.href : ''; 134 } 135 if (targetUrl) { 136 window.location.href = targetUrl; 137 } 138 return; 139 } 140 if (behavior === 'inline_direct') { 141 loadIframe(player); 142 return; 143 } 144 if (shouldShowGate()) { 145 showGate(player); 146 } else { 147 loadIframe(player); 148 } 149 }); 150})();
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.