1(function () { 2 var FULLSCREEN_ADUNIT_NAME = 'fullscreen'; 3 var FULLSCREEN_2_ADUNIT_NAME = 'fullscreen-2'; 4 var ROTATION_COOKIE_NAME = 'is_fullscreen_adunit_rotated'; 5 var DISABLED_FULLSCREEN_COOKIE_NAME = 'jtnews_fullscreen_disabled'; 6 var COUNTER_FULLSCREEN_COOKIE_NAME = 'jtnews_fullscreen_counter'; 7 var FULLSCREEN_MAX_SHOW_TIMES = 2; 8 var DATE_DIFF_FOR_FULLSCREEN_RESET = 3 * 60 * 60 * 1000; 9 var hasRenderedMobileFullscreen = false; 10 var fullscreenSlot = null; 11 var currentFullscreenAdunit = null; 12 13 function getCookie(name) { 14 var match = document.cookie.match( 15 new RegExp('(?:^|; )' + name.replace(/([.$?*|{}()[\]\\/+^])/g, '\\$1') + '=([^;]*)') 16 ); 17 18 return match ? decodeURIComponent(match[1]) : null; 19 } 20 21 function setCookie(name, value, maxAgeMs) { 22 var cookie = name + '=' + encodeURIComponent(value) + '; path=/'; 23 24 if (typeof maxAgeMs === 'number') { 25 cookie += '; max-age=' + Math.floor(maxAgeMs / 1000); 26 } 27 28 document.cookie = cookie; 29 } 30 31 function getFullscreenShowCount() { 32 var current = Number(getCookie(COUNTER_FULLSCREEN_COOKIE_NAME)); 33 34 if (isNaN(current) || current < 0) { 35 return 0; 36 } 37 38 return current; 39 } 40 41 function disableFullscreen() { 42 setCookie( 43 DISABLED_FULLSCREEN_COOKIE_NAME, 44 'true', 45 DATE_DIFF_FOR_FULLSCREEN_RESET 46 ); 47 } 48 49 function isFullscreenDisabled() { 50 if (getCookie(DISABLED_FULLSCREEN_COOKIE_NAME) === 'true') { 51 window.console.warn('[E1 fullscreen] disabled by max limit', FULLSCREEN_MAX_SHOW_TIMES); 52 return true; 53 } 54 55 // ÐаÑиÑа: ÑÑÑÑÑик Ñже на лимиÑе, а disabled-кÑÐºÑ Ñдалили/не запиÑали. 56 if (getFullscreenShowCount() >= FULLSCREEN_MAX_SHOW_TIMES) { 57 disableFullscreen(); 58 window.console.warn('[E1 fullscreen] disabled by max limit', FULLSCREEN_MAX_SHOW_TIMES); 59 return true; 60 } 61 62 return false; 63 } 64 65 function incrementFullscreenCounter() { 66 var current = getFullscreenShowCount() + 1; 67 68 setCookie( 69 COUNTER_FULLSCREEN_COOKIE_NAME, 70 String(current), 71 DATE_DIFF_FOR_FULLSCREEN_RESET 72 ); 73 74 if (current >= FULLSCREEN_MAX_SHOW_TIMES) { 75 disableFullscreen(); 76 } 77 } 78 79 function resolveFullscreenAdunit() { 80 var rotated = getCookie(ROTATION_COOKIE_NAME); 81 82 if (rotated === 'true') { 83 return FULLSCREEN_2_ADUNIT_NAME; 84 } 85 86 if (rotated === 'false') { 87 return FULLSCREEN_ADUNIT_NAME; 88 } 89 90 return Math.random() < 0.5 ? FULLSCREEN_2_ADUNIT_NAME : FULLSCREEN_ADUNIT_NAME; 91 } 92 93 function markAdunitRotated(adunit) { 94 setCookie( 95 ROTATION_COOKIE_NAME, 96 adunit === FULLSCREEN_ADUNIT_NAME ? 'true' : 'false' 97 ); 98 } 99 100 function canShowMobileFullscreen() { 101 return !isFullscreenDisabled(); 102 } 103 104 function getContainer(adunit) { 105 var container = document.getElementById(adunit); 106 107 if (container) { 108 return container; 109 } 110 111 if (!document.body) { 112 window.console.warn('[E1 fullscreen] document.body is not available'); 113 114 return null; 115 } 116 117 container = document.createElement('div'); 118 container.id = adunit; 119 document.body.appendChild(container); 120 121 return container; 122 } 123 124 function cleanupMobileFullscreen(creativeManager) { 125 var container; 126 127 if ( 128 fullscreenSlot 129 && creativeManager 130 && typeof creativeManager.destroySlot === 'function' 131 ) { 132 creativeManager.destroySlot(fullscreenSlot); 133 fullscreenSlot = null; 134 } 135 136 if (currentFullscreenAdunit) { 137 container = document.getElementById(currentFullscreenAdunit); 138 if (container && container.parentNode) { 139 container.parentNode.removeChild(container); 140 } 141 currentFullscreenAdunit = null; 142 } 143 144 hasRenderedMobileFullscreen = false;
145 } 146 147 function renderMobileFullscreen(creativeManager) { 148 var container; 149 var adunit; 150 151 if (hasRenderedMobileFullscreen || !canShowMobileFullscreen()) { 152 return; 153 } 154 155 if (!creativeManager || typeof creativeManager.createSlot !== 'function') { 156 window.console.warn('[E1 fullscreen] createSlot is not available on creativeManager'); 157 158 return; 159 } 160 161 adunit = resolveFullscreenAdunit(); 162 hasRenderedMobileFullscreen = true; 163 currentFullscreenAdunit = adunit; 164 container = getContainer(adunit); 165 166 if (!container) { 167 hasRenderedMobileFullscreen = false; 168 currentFullscreenAdunit = null; 169 170 return; 171 } 172 173 creativeManager.ready.then(function () { 174 return creativeManager.createSlot({ 175 container: container, 176 adunit: adunit, 177 params: { 178 priority: 1, 179 type: 'fullscreen', 180 } 181 }); 182 }).then(function (slot) { 183 if (!slot) { 184 window.console.warn('[E1 fullscreen] Failed to create fullscreen slot'); 185 cleanupMobileFullscreen(creativeManager); 186 187 return; 188 } 189 190 fullscreenSlot = slot; 191 192 if (typeof slot.on === 'function') { 193 slot.on('display', function () { 194 markAdunitRotated(adunit); 195 incrementFullscreenCounter(); 196 }); 197 slot.on('error', function () { 198 cleanupMobileFullscreen(creativeManager); 199 }); 200 slot.on('stub', function () { 201 cleanupMobileFullscreen(creativeManager); 202 }); 203 } 204 205 return slot.refresh(); 206 }).catch(function (error) { 207 window.console.warn('[E1 fullscreen] Failed to render fullscreen', error); 208 cleanupMobileFullscreen(creativeManager); 209 }); 210 } 211 212 function initMobileFullscreen() { 213 window.onHSMCreativeManagerReady.push(function (creativeManager) { 214 renderMobileFullscreen(creativeManager); 215 }); 216 } 217 218 if (window.isMobile) { 219 initMobileFullscreen(); 220 } 221})();
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.