PageSourceSearch

https://umc-rb.ru/wp-content/plugins/max-messenger-buttons/assets/js/frontend.js?ver=1.1.0

js umc-rb.ru collected 2026-10-08 09:23:01 UTC 6,064 bytes, 195 lines download raw bytes

1/**
2 * Frontend JavaScript for MAX WIDGET.
3 */
4
5(function($) {
6    'use strict';
7
8    var MaxMessenger = {
9        init: function() {
10            this.setupFloatingWidget();
11            this.setupMessengerLinks();
12            this.detectMobile();
13        },
14
15        detectMobile: function() {
16            var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
17
18            if (isMobile) {
19                $('body').addClass('max-msg-mobile-device');
20            }
21
22            return isMobile;
23        },
24
25        setupFloatingWidget: function() {
26            var $floatBtn = $('#maxMsgFloatBtn');
27            var $floatMenu = $('#maxMsgFloatMenu');
28            var $menuClose = $('#maxMsgMenuClose');
29            var isMenuOpen = false;
30
31            if (!$floatBtn.length || !$floatMenu.length) {
32                return;
33            }
34
35            $floatBtn.on('click', function(e) {
36                e.preventDefault();
37                e.stopPropagation();
38
39                if (isMenuOpen) {
40                    MaxMessenger.closeFloatMenu($floatMenu, $floatBtn);
41                    isMenuOpen = false;
42                } else {
43                    MaxMessenger.openFloatMenu($floatMenu, $floatBtn);
44                    isMenuOpen = true;
45                }
46            });
47
48            $menuClose.on('click', function(e) {
49                e.preventDefault();
50                e.stopPropagation();
51                MaxMessenger.closeFloatMenu($floatMenu, $floatBtn);
52                isMenuOpen = false;
53            });
54
55            $(document).on('click', function(e) {
56                if (isMenuOpen && !$(e.target).closest('.max-msg-floating-widget').length) {
57                    MaxMessenger.closeFloatMenu($floatMenu, $floatBtn);
58                    isMenuOpen = false;
59                }
60            });
61
62            $(document).on('keydown', function(e) {
63                if (e.key === 'Escape' && isMenuOpen) {
64                    MaxMessenger.closeFloatMenu($floatMenu, $floatBtn);
65                    isMenuOpen = false;
66                }
67            });
68        },
69
70        openFloatMenu: function($menu, $button) {
71            $menu.fadeIn(220);
72            $button.attr('aria-expanded', 'true');
73        },
74
75        closeFloatMenu: function($menu, $button) {
76            $menu.fadeOut(180);
77            $button.attr('aria-expanded', 'false');
78        },
79
80        setupMessengerLinks: function() {
81            var self = this;
82
83            $(document).on('click', 'a[data-messenger]', function(e) {
84                var $link = $(this);
85                var messenger = $link.attr('data-messenger');
86                var href = $link.attr('href');
87
88                if (!messenger || !href || href === '#') {
89                    return;
90                }
91
92                e.preventDefault();
93                self.openMessenger(messenger, href);
94            });
95        },
96
97        openMessenger: function(messenger, url) {
98            var isMobile = this.detectMobile();
99
100            if (messenger === 'telegram') {
101                this.openTelegram(url, isMobile);
102            } else if (messenger === 'whatsapp') {
103                this.openWhatsApp(url, isMobile);
104            } else if (messenger === 'phone') {
105                window.location.href = url;
106            } else if (messenger === 'email') {
107                window.location.href = url;
108            } else {
109                window.open(url, '_blank', 'noopener');
110            }
111
112            this.trackClick(messenger, url);
113        },
114
115        openTelegram: function(url, isMobile) {
116            var username = url.replace('https://t.me/', '').split('?')[0];
117
118            if (isMobile) {
119                var appUrl = 'tg://resolve?domain=' + username;
120                var $iframe = $('<iframe>', {
121                    src: appUrl,
122                    style: 'display:none;'
123                }).appendTo('body');
124
125                setTimeout(function() {
126                    $iframe.remove();
127                }, 900);
128
129                setTimeout(function() {
130                    window.open(url, '_blank', 'noopener');
131                }, 500);
132            } else {
133                window.open(url, '_blank', 'noopener');
134            }
135        },
136
137        openWhatsApp: function(url, isMobile) {
138            if (!isMobile) {
139                window.open(url, '_blank', 'noopener');
140                return;
141            }
142
143            var isAndroid = /Android/i.test(navigator.userAgent);
144            var isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent);
145
146            if (!isAndroid && !isIOS) {
147                window.open(url, '_blank', 'noopener');
148                return;
149            }
150
151            var parts = url.split('?');
152            var number = parts[0].replace('https://wa.me/', '');
153            var message = '';
154
155            if (parts.length > 1) {
156                var params = new URLSearchParams(parts[1]);
157                message = params.get('text') || '';
158            }
159
160            var appUrl = 'whatsapp://send?phone=' + number;
161            if (message) {
162                appUrl += '&text=' + encodeURIComponent(message);
163            }
164
165            window.location.href = appUrl;
166
167            setTimeout(function() {
168                window.open(url, '_blank', 'noopener');
169            }, 1300);
170        },
171
172        trackClick: function(messenger, url) {
173            if (typeof gtag !== 'undefined') {
174                gtag('event', 'messenger_click', {
175                    messenger_type: messenger,
176                    messenger_url: url
177                });
178            }
179
180            if (typeof ym !== 'undefined' && typeof window.yaCounterId !== 'undefined') {
181                ym(window.yaCounterId, 'reachGoal', 'messenger_' + messenger);
182            }
183
184            if (window.console && console.log) {
185                console.log('MAX WIDGET:', messenger, url);
186            }
187        }
188    };
189
190    $(document).ready(function() {
191        MaxMessenger.init();
192    });
193
194    window.MaxMessenger = MaxMessenger;
195})(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.