PageSourceSearch

https://www.mango-office.ru/local/components/mango/menu/templates/top_main/script.js?179062662912359

js mango-office.ru collected 2026-10-01 12:08:52 UTC 12,359 bytes, 353 lines download raw bytes

1'use strict';
2
3(function ($) {
4    let MangoPageMenu = function (params = {}) {
5        const self = this;
6        for (let k in params) {
7            self[k]= params[k];
8        }
9        self.tmpContainer = $('.js-menu-tmp-container');
10        self.menuContainer = $('.js-menu-container');
11        self.header = $('.header');
12        self.pageContents = document.body;
13        self.searchWd = 40;
14
15        self.selMenuLCard = '.nvd__card';
16        self.selMenuLink = '.nvd__title';
17        self.selMenuInnerLink = '.nvd__inner a';
18
19        self.replacedFinallyTriggerName = 'topMenuIsReplacedFinally';
20
21        self.lastScrollTop = 0;
22
23        self.menuContainer.append(self.tmpContainer.html());
24        self.tmpContainer.remove();
25        $(document).trigger('topMenuIsReplaced');
26
27        $(document).on(self.replacedFinallyTriggerName, function () {
28            self.buildMenu();
29            self.menuContainer.find('.js-nav-wrapper').removeClass('oh');
30        });
31        if (self.ab_test !== false) {
32            self.navWrapper = $('.js-nav-wrapper');
33            self.navWrapper.hide();
34
35            $.ajax({
36                url: '/ajax_new/abtest.php',
37                method: 'POST',
38                data: {
39                    'xml_id': 'menu2024',
40                    'current_page': window.location.pathname,
41                    'menu_link': MangoVars.ACTIVE_MENU_LINK
42                        ? MangoVars.ACTIVE_MENU_LINK
43                        : '',
44                    'product_section_menu': self.product_section_menu
45                },
46                dataType: 'json',
47                success: function (response) {
48                    if (
49                        response.status === 'success'
50                        && response.hasOwnProperty('data')
51                    ) {
52                        self.navWrapper.remove();
53                        self.menuContainer.append($(response.data)); // Menu B
54                        self.navWrapper.show();
55
56                        if (typeof mgoTriggerEvent === 'function') {
57                            mgoTriggerEvent('menu2024');
58                        }
59                    } else {
60                        $('.js-nav-wrapper').show();
61
62                        if (typeof mgoTriggerEvent === 'function') {
63                            mgoTriggerEvent('menu2022');
64                        }
65                    }
66
67                    self.triggerEvent();
68                }
69            });
70        } else {
71            if (typeof mgoTriggerEvent === 'function') {
72                mgoTriggerEvent('menu2022');
73            }
74
75            self.triggerEvent();
76        }
77
78        $(document).on('click', '[href="/numbers_and_tariffs/"]', function (e) {
79            e.stopPropagation();
80            return false;
81        });
82
83        self.eventTimeoutHover();
84        self.eventUpdateBalance();
85        self.watchScroll();
86    };
87
88    MangoPageMenu.prototype.watchScroll = function () {
89        const self = this;
90        document.addEventListener("scroll", function() {
91            let st = window.scrollY || document.documentElement.scrollTop;
92            let header = document.querySelector('.header');
93
94            if (st > self.lastScrollTop && header) {
95                header.classList.add('scrolled');
96                self.pageContents.classList.add('narrow-header');
97            } else if (st < self.lastScrollTop && header) {
98                header.classList.remove('scrolled');
99                self.pageContents.classList.remove('narrow-header');
100            }
101            self.lastScrollTop = st <= 0 ? 0 : st;
102        }, false);
103    }
104
105    MangoPageMenu.prototype.processLinks = function ($menuWrapper, $lnks, wrapWd, $hamburgerLinks, cnt) {
106        const self = this;
107        let wd = 0;
108
109        $lnks.each(function () {
110            wd += $(this).width() + 24;
111        });
112
113        if (wrapWd <= wd) {
114            $menuWrapper.addClass('has-hamburger');
115            $lnks.first().addClass('invis');
116            $hamburgerLinks.first().removeClass('invis');
117            $lnks = $($lnks.get().slice(1));
118            $hamburgerLinks = $($hamburgerLinks.get().slice(1));
119            cnt += 1;
120            self.processLinks($menuWrapper, $lnks, wrapWd, $hamburgerLinks, cnt)
121        } else {
122            if (cnt === 0) {
123                $menuWrapper.removeClass('has-hamburger');
124            }
125        }
126    };
127
128    MangoPageMenu.prototype.resetLinks = function () {
129        const self = this;
130
131        let $menuWrapper = self.menuContainer.find('.js-nav-wrapper');
132        let $hamburgerLinks = $($menuWrapper.find('.hamburger-link').get().reverse());
133
134        $hamburgerLinks.addClass('invis');
135
136        let wrapWd = $menuWrapper.width();
137
138        if (wrapWd > 0) {
139            let $lnks = $($menuWrapper.find('.nav_item').get().reverse());
140
141            $lnks.removeClass('invis');
142
143            self.processLinks($menuWrapper, $lnks, wrapWd, $hamburgerLinks, 0);
144        }
145    };
146
147    MangoPageMenu.prototype.buildMenu = function () {
148        const self = this;
149
150        let $menuWrapper = self.menuContainer.find('.js-nav-wrapper');
151        $menuWrapper.append('<li class="nav_item_hamburger pos-a"><div class="nav_item-link"' + Mango.getDataElement('nav_item_hamburger') + '></div></li>');
152
153        let $menuLink = $menuWrapper.find('.nav_item_hamburger .nav_item-link');
154        $menuLink.append('<svg class="pos-a nav_hamburger"><use xlink:href="#icon--hamburger"></use></svg>
154' +
155            '<svg class="pos-a nav_hamburger-active"><use xlink:href="#icon--hamburger-active"></use></svg>')
156        $menuLink.append('<div class="nav_item_more pos-a"></div>');
157
158        let $moreMenu = $menuLink.find('.nav_item_more');
159
160        $menuWrapper.find('.nav_item').slice(3).each(function (i) {
161            let t = $(this);
162
163            if (!(t.hasClass('nav_parent'))) {
164                let $lnk = t.find('a').clone().addClass('hamburger-link');
165                if (Mango.getDataElement('check')) {
166                    $lnk.attr('data-element', 'hamburger-link-' + i);
167                }
168                $moreMenu.append($lnk);
169            } else {
170                let $linksWrap = $('<div class="hamburger-link"></div>');
171                let $lnk = t.find('.nav_item-link > a').clone()
172                    .addClass('block nav_item_more-toggle')
173                    .append('<i class="ui ui-arr-down text-gray va-middle"></i>');
174                let $more = $('<div class="nav_item_more-links"></div>');
175
176                $linksWrap.append($lnk).append($more);
177                $moreMenu.append($linksWrap);
178
179                t.find('.nav-simple a').each(function () {
180                    let a = $(this).clone().addClass('block');
181                    if (Mango.getDataElement('check')) {
182                        a.attr('data-element', 'top-nav-block-' + i);
183                    }
184                    $more.append(a);
185                })
186            }
187        });
188
189        $menuWrapper.find('.nav_item_more-toggle').click(function () {
190            $(this).toggleClass('active');
191            $(this).closest('.hamburger-link').find('.nav_item_more-links').toggleClass('active');
192            return false;
193        });
194
195        $menuWrapper.find('.nav-inner').each(function () {
196            if (!$(this).find('li').size()) {
197                $(this).remove();
198            }
199        });
200
201        self.resetLinks();
202        self.setCityCode();
203
204        $(window).resize(function () {
205            self.resetLinks();
206        });
207
208
209        document.addEventListener('click', function (event) {
210
211            let menuCard = event.target.closest(self.selMenuLCard);
212            let menuInnerLink = event.target.closest(self.selMenuInnerLink);
213
214            if (menuInnerLink) {
215                return;
216            } else if (menuCard) {
217                let menuLink =  menuCard.querySelector(self.selMenuLink);
218                location.href = menuLink.href;
219            }
220        });
221
222        if ($('[data-oscrollbar="init"]').length) {
223            $('[data-oscrollbar="init"]').overlayScrollbars({
224                overflowBehavior : {
225                    x: 'visible-hidden',
226                    y: 'scroll'
227                }
228            });
229        }
230
231    };
232
233    MangoPageMenu.prototype.setCityCode = function () {
234        const self = this;
235
236        let counter = 1;
237        let tmpInterval = setInterval(function () {
238            counter++;
239            if (counter > 15) {
240                clearInterval(tmpInterval);
241                return;
242            }
243            if (MangoVars.REGION_PHONE_CODE) {
244                self.menuContainer.find('.js-city-code').text('(' + MangoVars.REGION_PHONE_CODE + ')');
245                clearInterval(tmpInterval);
246            }
247        }, 100);
248    };
249
250    MangoPageMenu.prototype.eventTimeoutHover = function () {
251        const self = this;
252
253        let timeoutHoverId;
254
255        self.menuContainer.hoverIntent({
256            over: function () {
257                let $btn = $(this);
258                let ind = $btn.index();
259                let $parent = $(this).closest('.nav_item');
260
261                clearTimeout(timeoutHoverId);
262
263                $btn.on('click.menu', function () {
264                    return false;
265                });
266                timeoutHoverId = setTimeout(function () {
267                    $parent.find('.js-nav-btn, .js-nav-tb').removeClass('active');
268                    $btn.addClass('active');
269                    $parent.find('.js-nav-tb').eq(ind).addClass('active');
270
271                    setTimeout(function () {
272                        $btn.off('click.menu');
273                    }, 300);
274                }, 100);
275            },
276            selector: '.js-nav-btn',
277            timeout: 200
278        }).hoverIntent({
279            over: function () {
280                $(this).addClass('active');
281            },
282            out: function () {
283                $(this).removeClass('active');
284            },
285            selector: '.nav_item-link',
286            timeout: 200
287        }).hoverIntent({
288            over: function () {
289                let $btn = $(this);
290                let $parent = $(this).closest('.nvd__wrap');
291                let all = $parent.find('.nvd__item--parent');
292                let ind = $btn.index(all);
293
294                $parent.find('.js-nvd-itm, .nvd__submenu').removeClass('active');
295
296                if ($btn.hasClass('nvd__item--parent')) {
297                    $btn.addClass('active');
298                    $parent.find('.nvd__submenu').eq(ind).addClass('active');
299                }
300            },
301            selector: '.js-nvd-itm',
302            timeout: 200
303        }).hoverIntent({
304            out: function () {
305                $(this).find('.js-nvd-itm, .nvd__submenu').removeClass('active');
306            },
307            selector: '.nvd__wrap',
308            timeout: 200
309        });
310    };
311
312    MangoPageMenu.prototype.eventUpdateBalance = function () {
313        $('#updateBalance').click(function () {
314            const t = $(this);
315
316            if (t.hasClass('wait')) {
317                return false;
318            }
319            t.addClass('wait');
320
321            AJAX.send(
322                '/ajax_new/user.php',
323                {
324                    method: 'updateBalance'
325                },
326                function (response) {
327                    t.removeClass('wait');
328                    if (response.status === 'success') {
329                        $('#userBalance').text(response.data.balanceFormatted);
330                    } else {
331                        if (window.ERROR_REPORTER !== undefined && BX.message('mangoPush_debug')) {
332                            window.ERROR_REPORTER('Произошла ошибка при обновлении баланса.', MESSAGE_TYPE_ERROR);
333                        } else {
334                            console.log('Произошла ошибка при обновлении баланса.');
335                        }
336                    }
337                },
338                'json'
339            );
340            return false;
341        });
342    };
343
344    MangoPageMenu.prototype.triggerEvent = function () {
345        const self = this;
346
347        $(document).trigger(self.replacedFinallyTriggerName);
348        let event = new Event(self.replacedFinallyTriggerName);
349        document.dispatchEvent(event);
350    }
351
352    window.MangoPageMenu = MangoPageMenu;
353})(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.