PageSourceSearch

https://moyakuhna.ru/local/templates/moyakuhna/js/scripts.js

js moyakuhna.ru collected 2026-10-07 19:28:33 UTC 11,957 bytes, 313 lines download raw bytes

1function MK_APP() {
2    return {
3        init() {
4            $('body').on('click', '[data-mk-show-form]', function(){
5                window.MK_APP.showForm($(this).data('mk-show-form') || 'message', $(this))
6            });
7
8        },
9
10        initAccordion() {
11            $('.map_mark .map_mark_info_icon').click(function(){
12                var p = $(this).parent().parent();
13                p.find('.popperTooltip').appendTo(p).toggle();
14            });
15        },
16
17        initPopover() {
18            var popoverItem = $('.popover-hover-item');
19            const popperOptions = {
20                placement: 'bottom',
21                modifiers: [
22                    {
23                        name: 'flip',
24                        options: {
25                            fallbackPlacements: ['top', 'right'],
26                        },
27                    },
28                ],
29            }
30
31            $(popoverItem).each(function(){
32                const ref = this;
33                const popup = $(ref).find('.popperTooltip')[0];
34                const popperInstance = Popper.createPopper(ref, popup, popperOptions);
35
36                function show() {
37                    popup.setAttribute('data-show', '');
38                    popperInstance.update();
39                }
40
41                function hide() {
42                    popup.removeAttribute('data-show');
43                }
44
45                const showEvents = ['mouseenter', 'focus'];
46                const hideEvents = ['mouseleave', 'blur'];
47
48                showEvents.forEach((event) => {
49                    ref.addEventListener(event, show);
50                });
51
52                hideEvents.forEach((event) => {
53                    ref.addEventListener(event, hide);
54                });
55            });
56        },
57
58        toggleFavoriteButton(btn, show) {
59            if(show) {
60                btn.addClass('active').data('action', 'delete');
61            } else {
62                btn.removeClass('active').data('action', 'add');
63            }
64        },
65
66        activateFavoriteButton(btn, show) {
67            this.toggleFavoriteButton(btn, show);
68
69            btn.off("click"); // prevent multiple triggering
70            btn.click(function(){
71                var link = $(this),
72                    id = link.data('product_id');
73
74                if(!id)
75                    return false;
76
77                $.post("/ajax/bookmark.php", {PRODUCT_ID: id, ACTION: link.data('action')}, function( data ) {
78
79                    var header_favorites = $('.js-favorites-count');
80                    if(data.result) {
81                        //header_favorites.text(data.count);
82                        header_favorites.toggleClass('active', data.count !== 0);
83                        var all_product_bookmark_links = $('.bookmark_link[data-product_id='+id+']');
84
85                        if(link.data('action')==="delete") {
86                            all_product_bookmark_links.data('action', 'add');
87                            all_product_bookmark_links.removeClass('active');
88
89                            //update favorites page
90                            if($('.bx-favorites .bookmark_link[data-product_id='+id+']').length > 0) {
91                                $('.bx-favorites .bookmark_link[data-product_id='+id+']').closest('.catalog-list--item').fadeOut(500, function(){ $(this).remove();});
92                            }
93                        }else{
94                            all_product_bookmark_links.data('action', 'delete');
95                            all_product_bookmark_links.addClass('active');
96                        }
97                    }
98
99                }, 'json');
100
101                return false;
102            });
103        },
104
105        initCategoryProductSwiper() {
106            if (document.querySelector('.mk-kitchens-hits-list__slider')) {
107                document.querySelectorAll('.mk-kitchens-hits-list__slider').forEach((item) => {
108                    const hitsSlider = new Swiper(item, {
109                        loop: false,
110                        lazy: true,
111                        slidesPerView: 1,
112                        navigation: {
113                            prevEl: item.querySelector('.swiper-button-prev'),
114                            nextEl: item.querySelector('.swiper-button-next')
115                        }
116
117                    });
118                });
119            }
120        },
121
122        showForm(formId, btn) {
123            var form = $('#mkModalForm'), title = 'Заказать звонок', btnTitle= 'Отправить';
124
125            form.find('[data-mk-form-comment]').text('');
126            form.find('[data-mk-form-dropzone]').hide();
127            form.find('[data-mk-form-id]').val(formId);
128
129            if (formId === "project") {
130                this.initDropzone('mk-form-dropzone');
131                form.find('[data-mk-form-dropzone]').show();
132            }
133
134            if(btn) {
135                title = btn.text().trim();
136                if(btn.data('title')) {
137                    title = btn.data('title');
138                }
139                if(btn.data('comment')) {
140                    form.find('[data-mk-form-comment]').html(btn.data('comment'));
141                }
142                btnTitle = btn.data('btn-title') || title;
143            }
144
145            form.find('[data-mk-form-name]').val(title);
146            form.find('[data-mk-form-submit]').html(btnTitle);
147            form.find('[data-mk-form-header]').html(title);
148            var modal = bootstrap.Modal.getOrCreateInstance(form[0])
149            modal.show();
150        },
151
152        initDropzone(id) {
153            var element = $("#"+id);
154            let dropzoneControl = element[0].dropzone;
155            if (typeof dropzoneControl !== "undefined") {
156               return;
157            }
158
159            let myDropzone = new Dropzone("#"+id, {
160                url: "/ajax/upload_file.php",
161                paramName: "files",
162                maxFilesize: 100,
163                maxFiles: 10,
164                parallelUploads: 10,
165                dictDefaultMessage:"Прикрепить файл",
166                dictFallbackMessage:"К сожалению, ваш браузер не поддерживает Drag'n'Drop",
167                dictFallbackText:"Пожалуйста, воспользуйтесь старой доброй формой для загрузки",
168                dictFileTooBig:"Файл слишком большой ({{filesize}}MB). Максимальный допустимый размер файла {{maxFilesize}}MB",
169                dictInvalidFileType:"Вы не можете загружать файлы этого типа.",
170                dictResponseError:"Произошла ошибка при загрузке файла. Попробуйте еще раз. Если ошибка будет повторяться - передайте эту информацию администратору сайта: Код ошибки {{statusCode}}",
171                dictCancelUpload:"Отменить загрузку",
172                dictUploadCanceled:"Загрузка отменена",
173                dictCancelUploadConfirmation:"Уверены, что хотите прервать загрузку?",
174                dictRemoveFile:"Удалить файл",
175                dictMaxFilesExceeded:"Превышен лимит количества файлов. Вы можете загрузить не более {{maxFiles}}",
176                acceptedFiles: 'image/jpeg, image/png, application/pdf'
177            });
178            myDropzone.on("success", function(file, responseText) {
179                let input = $('[data-dropzone-result='+id+']');
180                input.val(input.val()+responseText.file+ " ; \n")
181            });
182        },
183
184        initGoToTop() {
185			$("[data-item=up]").click(function() {
186			  window.scrollTo({ top: 0, behavior: 'smooth' });
187			  return false;
188			});
189        },
190
191        sendGoal(goalName) {
192			if (typeof ym !== 'function') {
193				return true;
194			}
195			
196			ym(ym.a[0][0], 'reachGoal', goalName);
197			
198			return true;
199        }
200    }
201}
202
203window.MK_APP = MK_APP();
204Dropzone.autoDiscover = false;
205
206function myOnResize(event) {
207	$(".mk-calc-float-button:not(.mk-calc-float-button-always-visible)").toggleClass("mk-calc-float-button-hidden", document.body.clientWidth < 576);
208}
209
210$(function(){
211    window.MK_APP.init();
212    window.MK_APP.initGoToTop();
213
214    window.MK_APP.initCategoryProductSwiper();
215
216    $("[data-ajax-form]").submit(function(e){
217        e.preventDefault();
218
219        var form = $(this);
220        var btns = form.find('[type=submit]');
221
222        $.ajax({
223            type: "POST",
224            url: '/ajax/form.php',
225            dataType: 'json',
226            data: form.serialize() + "&url=https://moyakuhna.ru/",
227            beforeSend: function() {
228                btns.prop('disabled', true);
229                btns.append('<span class="spinner-border spinner-border-sm" data-loading role="status" aria-hidden="true"></span>');
230
231                form.find('[data-form-error], [data-form-success]').remove();
232            },
233            success: function(data)
234            {
235                if (data.success) {
236					MK_APP.sendGoal('FORM');
237                    form[0].reset();
238
239
240					if(form.find('.dropzone').length > 0) {
241						let dropzoneControl = form.find('.dropzone')[0].dropzone;
242						if (typeof dropzoneControl !== "undefined") {
243							dropzoneControl.removeAllFiles(true);
244						}
245                    }
246
247
248                    let s = form.data('show-modal-after-send');
249                    if (s && s.length > 0) {
250                        $('.modal').modal('hide');
251
252                        var myModalEl = document.querySelector(s)
253                        var modal = bootstrap.Modal.getOrCreateInstance(myModalEl)
254                        modal.show();
255                    } else {
256                        let message = data.message ? data.message : 'Форма успешно отправлена';
257                        $('<div class="alert alert-success" role="alert" data-form-success>'+message+'</div>').insertBefore(btns.last());
258                    }
259                } else {
260                    $( "<div class='alert alert-danger' role=\"alert\" data-form-error>Ошибка отправки формы</div>" ).insertBefore(btns.last());
261                }
262            },
263            error: function(xhr, status, error)
264            {
265                let err = JSON.parse(xhr.responseText),
266                    message = err.message ? 'Ошибка отправки формы: ' + err.message: 'Ошибка отправки формы';
267                $( "<div class='alert alert-danger' role=\"alert\" data-form-error>"+message+"</div>" ).insertBefore(btns.last());
268            },
269            complete: function() {
270                btns.prop('disabled', false);
271                btns.find('[data-loading]').remove();
272            }
273        });
274
275        return false;
276    })
277	
278	$(".can-collapse").each(function(){
279		var lineHeight = 24;
280		var collapsed = $(this);
281		if (collapsed.height() > lineHeight*2) {
282			collapsed.addClass("collapsed");
283			collapsed.after($("<div class='show-collapsed'>Развернуть</div>").click(function(){
284				collapsed.removeClass("collapsed");
285				collapsed.height("auto");
286				$(this).remove();
287			}));
288			collapsed.height(lineHeight * 3);
289		}
290	})
291
292    if (document.querySelector('#mkMobileTags')) {
293        const mkMobileTags = new Swiper(document.querySelector('#mkMobileTags'), {
294            loop: false,
295            init: false,
296            slidesPerView: 'auto',
297            spaceBetween: 16,
298        });
299
300        if(window.innerWidth < 768) {
301            mkMobileTags.init();
302        }
303        window.addEventListener('resize', ()=>{
304            if(window.innerWidth < 768) {
305                mkMobileTags.init();
306            }
307        });
308
309    }
310	
311	myOnResize();
312	window.addEventListener('resize', myOnResize, true);
313})

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.