;(function($) { $(function() { var $document = $(document); var $window = $(window); var $DOM_body = $('body').addClass('js-document-loaded'); /** * Класс для "Живого поиска" */ var AjaxSearch = function(params) { params = $.extend({ /* @var DOM_input {DOM}: Поле поиска */ DOM_input : null, /* @var eventName {String}: Название события */ eventName : 'change', /* @var queryDelay {Integer}: Задержка меджу запросами */ queryDelay : 1000, /* @var success {Function}: Обработка успешного запроса */ success : null, /* @var error {Function}: Обработка ошибки */ error : null, /* @var complete {Function}: Завершение зарпоса */ complete : null, /* @var ajaxParamsProcess {Function}: Обработка параметров запроса перед лтправкой */ ajaxParams : null }, params); var self = this; var $DOM_input = $(params.DOM_input); /* * @var allowedSending {Boolean}: Разрешение на отправку */ this.allowedSending = true; /* * @var ajaxParams {Object}: Параметры запроса */ this.ajaxParams = { data: { action: 'ajax_search' }, dataType: 'json', type: 'post', success: typeof params.success == 'function' ? params.success : null, error: typeof params.error == 'function' ? params.error : null, complete: typeof params.complete == 'function' ? params.complete : null, url: '/wp-admin/admin-ajax.php' } /* * Отправка запроса */ this.send = function() { var ajaxParams = self.ajaxParams; var fieldValue = $DOM_input.val(); ajaxParams.data[$DOM_input.attr('name')] = fieldValue; ajaxParams = (typeof params.ajaxParamsProcess == 'function') ? params.ajaxParamsProcess(ajaxParams) : ajaxParams; if (typeof params.beforeSubmit == 'function') params.beforeSubmit(fieldValue); var result = self.allowedSending ? $.ajax(ajaxParams) : false; self.allowedSending = true; return result; } /* * Получить адрес страницы с результатами запроса */ this.getResultPageUrl = function(value) { return document.location.origin +'?s='+ encodeURIComponent(value); } /* * Навешивание обработчиков */ var queryTimer; var bindEvents = function() { $DOM_input.on(params.eventName + '.ajaxSearch', function() { var delay = params.queryDelay; if (params.queryDelay) { if (typeof queryTimer != 'undefined') clearTimeout(queryTimer); } else { delay = 1; } queryTimer = setTimeout(function() { self.send(); }, params.queryDelay); }) } bindEvents(); } /* * Менеджер для управления мобильным меню */ var MobileCase = function(params) { params = $.extend({ name: '', elemSelector: '' }, params) var self = this; var $DOM_case = $(params.elemSelector); var $DOM_close_btn = $DOM_case.find('.mobile-case__close-btn'); /** * Состояние мобильного меню */ this.isOpened = false; this.open = function() { $DOM_body.addClass('mobile-case-is-opened'); $DOM_case.addClass('mobile-case_opened'); this.isOpened = true; } this.close = function() { $DOM_body.removeClass('mobile-case-is-opened'); $DOM_case.removeClass('mobile-case_opened'); this.isOpened = false; } $DOM_close_btn.on('click.close-mobile-case', function(event) { event.preventDefault ? event.preventDefault() : event.returnValue = false; self.close(); }) } var $DOM_header = $('.header'); if ($DOM_header.length) { var $DOM_header_menu_wrap = $('.header-menu__wrap'); var $DOM_header_menu_wrap_full = $('.header-menu__wrap-full'); var $DOM_main_logo = $('.header .header-logo'); $DOM_header_menu_wrap_full.height($DOM_header_menu_wrap_full.outerHeight()); var headerManager = new (function() { var self = this; /* * @var _lastScrollPos {Integer}: Промежуточная переменная для хранения последней позиции сколла */ var _lastScrollPos = null; /* -------------------- * SCROLL * --------------------*/ /* * @var scroll {Object}: Параметры окна при прокрутке */ this.scroll = { lastScrollPos: null, scrollTop: null }; /* * Возвращает параметры прокрутки */ this.getScrollOpts = function() { var scroll = self.scroll; scroll.scrollTop = $window.scrollTop(); scroll.lastScrollPos = _lastScrollPos === null ? scroll.scrollTop : _lastScrollPos; _lastScrollPos = scroll.scrollTop; scroll.scrollDelta = scroll.scrollTop - scroll.lastScrollPos; scroll.scrollDeltaAbs = Math.abs(scroll.scrollDelta); scroll.direction = scroll.scrollDelta <= 0 ? scroll.scrollDelta < 0 ? 'up' : '' : 'down'; return scroll; } /* * Перемещение элемента по оси Y * * @param element {DOM}: Элемент который необходимо передвинуть * @param offset {Integer}: Смещение */ this.moveY = function(element, offset) { var value = 'translate3d(0px, '+ offset +'px, 0px)'; $(element).css({ '-webkit-transform': value, 'transform': value }) } /* * Задает позиционирование меню в зависимости от положения прокрутки ('fixed' | 'static') */ this.positionMenu = function() { var scrollTop = $window.scrollTop(); /* @var scrollEdge {Integer}: Позиция, при которой нужно фиксировать меню */ var scrollEdge = $window.get(0).innerWidth < 768 ? 0 : $DOM_main_logo.outerHeight(); scrollTop <= scrollEdge ? $DOM_header_menu_wrap.removeClass('menu-fixed') : $DOM_header_menu_wrap.addClass('menu-fixed'); } /** * Отображение меню на экране. * @example: При прокрутке вниз будет прятаться за областью видимости экрана, при прокрутке вверх покажется. */ this.menuVisibleControl = function() { if ($DOM_header_menu_wrap.is('.menu-fixed') || $window.get(0).width < 768) { if (self.scroll.direction == '') return ''; /* @var offset {Integer}: Смещение меню */ var offset = 0; switch(self.scroll.direction) { case 'down': offset = $DOM_header_menu_wrap.position().top - self.scroll.scrollDeltaAbs; offset = offset < -$DOM_header_menu_wrap.outerHeight() ? -$DOM_header_menu_wrap.outerHeight() : offset; break; case 'up': offset = $DOM_header_menu_wrap.position().top + self.scroll.scrollDeltaAbs; if ( offset > 0 ) { offset = 0; } break; } self.moveY($DOM_header_menu_wrap.get(0), offset); } } }); /* * Управление logo-sticky */ $document.on('scroll', function(event) { // Обновление параметров прокрутки headerManager.getScrollOpts(); // Позиционирование меню headerManager.positionMenu(); // Отображение меню на экране в зависимости от стороны прокрутки headerManager.menuVisibleControl(); }); /** * "Мобильное меню" */ var $DOM_mobile_menu_btn = $('.mobile-menu__btn'); var $DOM_mobile_menu = $('.mobile-menu'); var mobileMenu = new MobileCase({ elemSelector: '.mobile-case.mobile-menu' }); $DOM_mobile_menu_btn.on('click', function(event) { event.preventDefault ? event.preventDefault() : event.returnValue = false; mobileMenu.open(); }) /** * "Мобильный поиск" * Открывается из мобильного меню */ var $DOM_mobile_search_btn = $('.mobile-case__search-btn'); // Триггер открытия поиска var $DOM_mobile_search = $('.mobile-search-case'); // Мобильный поиск (mobile case) var mobileSearchCase = new MobileCase({ elemSelector: '.mobile-case.mobile-search-case' }); $DOM_mobile_search_btn.on('click', function(event) { event.preventDefault ? event.preventDefault() : event.returnValue = false; // "Мобильный поиск" открывается из "Мобильного меню". поэтому перед открытием "Мобильного поиска" необходимо закрыть "Мобильное меню" mobileMenu.close(); mobileSearchCase.open(); }) /* * Живой поиск в "mobile case" */ var $DOM_live_search_input_mob = $('#mobile-search-input'); var $DOM_serachResult_mob = $('.mobile-sr'); var $DOM_loader = $DOM_mobile_search.find('.mobile-search__loader'); var buttonCode = '
'; var loaderManager = new (function() { var speed = 'fast'; this.show = function() { $DOM_loader.fadeIn(speed); } this.hide = function() { $DOM_loader.fadeOut(speed); } }); var ajaxSearch = new AjaxSearch({ DOM_input: $DOM_live_search_input_mob.get(0), eventName: 'keyup', queryDelay: 800, success: function(data, textStatus, xhr) { var content = data.ext.length ? data.ext.join('') : ''+ data.message +'
'; var href = document.location.origin +'?s='+ encodeURIComponent($DOM_live_search_input_mob.val()); var button = data.ext.length ? buttonCode.replace(/\%href\%/, href) : ''; $DOM_serachResult_mob .empty() .append(content) .append(button); }, error: function(xhr, textStatus, errorThrow) { console.log(errorThrow); }, ajaxParamsProcess: function(ajaxParams) { return ajaxParams; }, complete: function(xhr, textStatus) { loaderManager.hide(); }, beforeSubmit: function(value) { ajaxSearch.allowedSending = (value != ''); if (ajaxSearch.allowedSending) { loaderManager.show(); } } }); /** * Поиск ОТКЛЮЧЕН на desctop-версии (Перенесен в сайдбар) * 05.06.2017 16:25 * TODO: Удалить если не нужно. Так же удалить стили для desctop-search из файла style.css при ненадобности */ var desctopSeachIsEnable = false; if (desctopSeachIsEnable) { /** * Поиск на desctop */ var $DOM_search_btn_desc = $('.header-search__button'); var $DOM_desctop_search_input = $('.desctop-search__input'); var $DOM_desctop_search = $('.desctop-search'); var $DOM_desctop_search_result = $('.desctop-search__result'); var $DOM_desctop_search_result_btn = $('.desctop-search__result-button'); var descButtonCode = ' '; var desctopSearch = new (function() { var self = this; this.isOpened = false; this.open = function() { $DOM_desctop_search.addClass('desctop-search_opened'); this.isOpened = true; } this.close = function() { $DOM_desctop_search.removeClass('desctop-search_opened') this.isOpened = false; } this.showResult = function(data) { if (data && data.length) { self.fillResult(data); var href = ajaxSearch_desc.getResultPageUrl($DOM_desctop_search_input.val()); self.showButton('Показать все результаты'); return true; } else { $DOM_desctop_search_result.addClass('desctop-search__result_empty').empty(); self.showButton('Результатов нет'); return false; } } /* * Заполнение результатов запроса */ this.fillResult = function(data) { $DOM_desctop_search_result .removeClass('desctop-search__result_empty') .empty() .append(data); } /* * Показать кнопку * * @var text {String}: Содержимое для отображения */ this.showButton = function(text) { if (text) { $DOM_desctop_search_result_btn.empty().html(text); //$DOM_desctop_search_result.append($(code)); } $DOM_desctop_search_result_btn.css({display: 'block'}); } /* * Скрыть кнопку */ this.hideButton = function() { $DOM_desctop_search_result_btn.css({display: 'none'}); } }); $DOM_search_btn_desc.on('click.desctopSearch', function() { desctopSearch.isOpened ? desctopSearch.close() : desctopSearch.open(); }); var ajaxSearch_desc = new AjaxSearch({ DOM_input: $DOM_desctop_search_input.get(0), eventName: 'keyup', queryDelay: 800, success: function(data, textStatus, xhr) { if (data && data.ext) { /*var content = data.ext.length ? data.ext.join('') : ''+ data.message +'
';*/ desctopSearch.showResult(data.ext); } }, error: function(xhr, textStatus, errorThrow) { console.log(errorThrow); }, ajaxParamsProcess: function(ajaxParams) { return ajaxParams; }, beforeSubmit: function(value) { ajaxSearch_desc.allowedSending = (value != ''); } }); } } }); })(jQuery); jQuery(document).ready(function($){ // Алфавитка в рубрике Препараты $('.cat-table li:first-child').addClass('current'); $('.alphabet .alphabet__item:first-child').addClass('active'); $('.cat-table li').click(function() { $('.cat-table li').removeClass('current'); $(this).addClass('current'); var linum = $(this).data('num'); $('.alphabet .alphabet__item').removeClass('active'); $('.alphabet .alphabet__item[data-num='+linum+']').addClass('active'); }); $(".analog-preparations").bxSlider({ slideWidth: 200, minSlides: 1, maxSlides: 3, slideMargin: 10, infiniteLoop: false, hideControlOnEnd: true, adaptiveHeight: true, }); $(window).on('scroll', function() { if ( $(".bbq-widget-fixed").length ) { var difference_fixed_footer = $(".footer").offset().top - $(".bbq-widget-fixed").offset().top - $(".bbq-widget-fixed").height() - 266; if ( difference_fixed_footer < 0 ) { $(".bbq-widget-fixed").css("top", difference_fixed_footer + 20 + "px"); } } }); // Загрузка следующего поста ajax if ( $('.first-article123').length ) { var footerY = 9999; $(window).on('scroll', function() { if ( !$('.single-add-finish').length ) { footerY = $('.footer').offset().top; console.log(footerY); if ( $(window).scrollTop() + $(window).height() > footerY ) { if ( !$('.loading-footer').length ) { console.log("obj"); $('.footer').addClass('loading-footer'); $('.footer').before('