PageSourceSearch

https://avtovokzal31.ru/assets/55d13606/js/mobile-apps-popup.js?v=1791514409

js avtovokzal31.ru collected 2026-10-09 02:53:56 UTC 3,037 bytes, 124 lines download raw bytes

1(function () {
2    'use strict';
3
4    var bodyLockClass = 'ew-mobile-apps-popup-body-lock';
5
6    function forEach(nodes, callback) {
7        Array.prototype.forEach.call(nodes, callback);
8    }
9
10    function findClosest(element, selector) {
11        while (element && element !== document) {
12            if (matches(element, selector)) {
13                return element;
14            }
15
16            element = element.parentNode;
17        }
18
19        return null;
20    }
21
22    function matches(element, selector) {
23        var matcher = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;
24
25        if (!matcher) {
26            return false;
27        }
28
29        return matcher.call(element, selector);
30    }
31
32    function toggleBodyLock() {
33        var hasOpenedPopup = false;
34
35        forEach(document.querySelectorAll('.ew-mobile-apps-popup'), function (popup) {
36            if (!popup.hidden) {
37                hasOpenedPopup = true;
38            }
39        });
40
41        if (hasOpenedPopup) {
42            document.body.classList.add(bodyLockClass);
43            return;
44        }
45
46        document.body.classList.remove(bodyLockClass);
47    }
48
49    function openPopup(popup) {
50        if (!popup) {
51            return;
52        }
53
54        popup.hidden = false;
55        popup.setAttribute('aria-hidden', 'false');
56        toggleBodyLock();
57    }
58
59    function closePopup(popup) {
60        if (!popup) {
61            return;
62        }
63
64        popup.hidden = true;
65        popup.setAttribute('aria-hidden', 'true');
66        toggleBodyLock();
67    }
68
69    document.addEventListener('click', function (event) {
70        var trigger = findClosest(event.target, '[data-mobile-apps-popup-open]');
71
72        if (!trigger) {
73            return;
74        }
75
76        var targetSelector = trigger.getAttribute('data-mobile-apps-popup-open');
77        var popup = document.querySelector(targetSelector);
78
79        event.preventDefault();
80        openPopup(popup);
81    });
82
83    document.addEventListener('click', function (event) {
84        var closeButton = findClosest(event.target, '[data-mobile-apps-popup-close]');
85
86        if (!closeButton) {
87            return;
88        }
89
90        var popup = findClosest(closeButton, '.ew-mobile-apps-popup');
91
92        event.preventDefault();
93        closePopup(popup);
94    });
95
96    document.addEventListener('keydown', function (event) {
97        if (event.key !== 'Escape' && event.keyCode !== 27) {
98            return;
99        }
100
101        forEach(document.querySelectorAll('.ew-mobile-apps-popup'), function (popup) {
102            if (popup.hidden) {
103                return;
104            }
105
106            closePopup(popup);
107        });
108    });
109
110    document.addEventListener('DOMContentLoaded', function () {
111        var isHidden = sessionStorage.getItem('ew-mobile-apps-popup')
112
113        if (isHidden) {
114            return;
115        }
116
117        var popup = document.getElementById('ew-mobile-apps-popup');
118
119        openPopup(popup);
120
121        sessionStorage.setItem('ew-mobile-apps-popup', 'true')
122    });
123
124})();

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.