PageSourceSearch

https://www.e1.ru/health/pharma/static/js/adv/mobileFullscreen.js?v=e3436934

js e1.ru collected 2026-10-01 06:32:51 UTC 6,535 bytes, 221 lines download raw bytes

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.