(function ($) { var RADIO_SETTINGS_TOGGLE = { inputSel: 'dgwt-wcas-options-toggle input[type=radio]', groupSel: 'dgwt_wcas_settings-group', reloadChoices: function (name) { var _this = this, $group = $('[name="' + name + '"]').closest('.' + _this.groupSel), value = $('[name="' + name + '"]:checked').val(), currentClass = ''; _this.hideAll($group); value = value.replace('_', '-'); if (value.length > 0) { currentClass = 'wcas-opt-' + value; } if ($('.' + currentClass).length > 0) { $('.' + currentClass).fadeIn(); } }, hideAll: function ($group) { $group.find('tr[class*="wcas-opt-"]').hide(); }, registerListeners: function () { var _this = this; $('.' + _this.inputSel).on('change', function () { _this.reloadChoices($(this).attr('name')); }); }, init: function () { var _this = this, $sel = $('.' + _this.inputSel + ':checked'); if ($sel.length > 0) { _this.registerListeners(); $sel.each(function () { _this.reloadChoices($(this).attr('name')); }); } } }; var CHECKBOX_SETTINGS_TOGGLE = { inputSel: 'dgwt-wcas-options-cb-toggle input[type=checkbox]', groupSel: 'dgwt_wcas_settings-group', reloadChoices: function ($el) { var _this = this, checked = $el.is(':checked'), groupClass = _this.getGroupSelector($el); $('.' + groupClass + ':not(.dgwt-wcas-options-cb-toggle)').hide(); if (checked) { $('.' + groupClass).each(function () { if (!( $(this).hasClass('js-dgwt-wcas-adv-settings') && $('.js-dgwt-wcas-adv-settings-toggle').hasClass('woocommerce-input-toggle--disabled') ) ) { $(this).fadeIn(); } }); } }, getGroupSelector($el) { var $row = $el.closest('.dgwt-wcas-options-cb-toggle'), className = '', classList = $row.attr('class').split(/\s+/); $.each(classList, function (index, item) { if (item.indexOf('js-dgwt-wcas-cbtgroup-') !== -1) { className = item; } }); return className; }, registerListeners: function () { var _this = this; $(document).on('change', '.' + _this.inputSel, function () { _this.reloadChoices($(this)); }); }, refresh: function () { var _this = this, $sel = $('.' + _this.inputSel); if ($sel.length > 0) { $sel.each(function () { var checked = $(this).is(':checked'), groupClass = _this.getGroupSelector($(this)); if (checked) { $('.' + groupClass).fadeIn(); } else { $('.' + groupClass + ':not(.dgwt-wcas-options-cb-toggle)').hide(); } }); } }, init: function () { var _this = this, $sel = $('.' + _this.inputSel); if ($sel.length > 0) { _this.registerListeners(); $sel.each(function () { _this.reloadChoices($(this)); }); } } }; var CHECKBOX_SETTINGS_TOGGLE_SIBLING = { inputSel: 'js-dgwt-wcas-options-toggle-sibling input[type=checkbox]', toogleSibling: function ($el) { var _this = this; var checked = $el.is(':checked'); if (checked) { $el.closest('label').next().fadeIn(); } else { $el.closest('label').next().hide(); } }, registerListeners: function () { var _this = this; $(document).on('change', '.' + _this.inputSel, function () { _this.toogleSibling($(this)); }); }, init: function () { var _this = this; var $sel = $('.' + _this.inputSel); if ($sel.length > 0) { _this.registerListeners(); $sel.each(function () { _this.toogleSibling($(this)); }); } } }; var CONDITIONAL_LAYOUT_SETTINGS = { layoutSelect: "select[id*='search_layout']", overlayMobile: "input[id*='enable_mobile_overlay']", switchLayoutBreakpoint: "input[id*='mobile_breakpoint']", mobileOverlayBreakpoint: "input[id*='mobile_overlay_breakpoint']", searchIconColor: "input[id*='search_icon_color']", $layoutSelectEl: null, $overlayMobileEl: null, $switchLayoutBreakpointEl: null, $mobileOverlayBreakpointEl: null, $searchIconColorEl: null, setConditions: function () { var _this = this, layoutVal = _this.$layoutSelectEl.find('option:selected').val(), overlayOnMobileVal = _this.$overlayMobileEl.is(':checked'), hasAdvSettings = $('.js-dgwt-wcas-adv-settings-toggle').hasClass('woocommerce-input-toggle--enabled'); _this.hideOption(_this.$switchLayoutBreakpointEl); _this.hideOption(_this.$mobileOverlayBreakpointEl); _this.hideOption(_this.$searchIconColorEl); $("input[id*='bg_search_icon_color']").closest('tr').show(); switch (layoutVal) { case 'icon': if (hasAdvSettings) { _this.showOption(_this.$searchIconColorEl); } break; case 'icon-flexible': case 'icon-flexible-inv': if (hasAdvSettings) { _this.showOption(_this.$switchLayoutBreakpointEl); _this.showOption(_this.$searchIconColorEl); } break; default: if (hasAdvSettings) { $("input[id*='bg_search_icon_color']").closest('tr').hide(); } break; } if (overlayOnMobileVal) { _this.showOption(_this.$mobileOverlayBreakpointEl); } }, hideOption: function ($el) { $el.closest('tr').hide(); }, showOption: function ($el) { $el.closest('tr').show(); }, registerListeners: function () { var _this = this; _this.$layoutSelectEl.on('change', function () { _this.setConditions(); }); _this.$overlayMobileEl.on('change', function () { _this.setConditions(); }); }, init: function () { var _this = this, $layoutSelectEl = $(_this.layoutSelect); if ($layoutSelectEl.length > 0) { _this.$layoutSelectEl = $layoutSelectEl; _this.$overlayMobileEl = $(_this.overlayMobile); _this.$switchLayoutBreakpointEl = $(_this.switchLayoutBreakpoint); _this.$mobileOverlayBreakpointEl = $(_this.mobileOverlayBreakpoint); _this.$searchIconColorEl = $(_this.searchIconColor); _this.registerListeners(); setTimeout(function () { _this.setConditions(); }, 400); } } }; var AJAX_BUILD_INDEX = { actionTriggerClass: 'js-ajax-build-index', actionStopTriggerClass: 'js-ajax-stop-build-index', indexingWrapperClass: 'js-dgwt-wcas-indexing-wrapper', indexerTabProgressClass: 'js-dgwt-wcas-indexer-tab-progress', indexerTabErrorClass: 'js-dgwt-wcas-indexer-tab-error', indexerMenuErrorClass: 'dgwt-wcas-menu-warning-icon', getWrapper: function () { var _this = this; return $('.' + _this.indexingWrapperClass).closest('.dgwt-wcas-settings-info'); }, registerListeners: function () { var _this = this; $(document).on('click', '.' + _this.actionTriggerClass, function (e) { e.preventDefault(); var $btn = $(this); $btn.attr('disabled', 'disabled'); $('.dgwt-wcas-settings-info').addClass('wcas-ajax-build-index-wait'); $('.' + _this.indexerTabErrorClass).removeClass('active'); $('.' + _this.indexerTabProgressClass).addClass('active'); var emergency = $btn.hasClass('js-ajax-build-index-emergency') ? true : false; if (emergency) { $('.dgwt-wcas-indexing-header__title').text('[Emergency mode] Wait... Indexing in progress'); $('.dgwt-wcas-indexing-header__troubleshooting, .dgwt-wcas-indexing-header__actions, .js-dgwt-wcas-indexer-details').hide(); } $.ajax({ url: ajaxurl, type: 'post', data: { action: 'dgwt_wcas_build_index', emergency: emergency, _wpnonce: dgwt_wcas.nonces.build_index, }, success: function (response) { if (typeof response != 'undefined' && response.success) { _this.getWrapper().html(response.data.html); _this.heartbeat(); } }, complete: function () { $btn.removeAttr('disabled'); $('.dgwt-wcas-settings-info').removeClass('wcas-ajax-build-index-wait'); if (emergency) { window.location.reload(); } } }); }) $(document).on('click', '.' + _this.actionStopTriggerClass, function (e) { e.preventDefault(); var $btn = $(this); $btn.attr('disabled', 'disabled'); _this.getWrapper().attr('data-stopping', '1'); $.ajax({ url: ajaxurl, type: 'post', data: { action: 'dgwt_wcas_stop_build_index', _wpnonce: dgwt_wcas.nonces.stop_build_index, }, success: function (response) { if (typeof response != 'undefined' && response.success) { _this.getWrapper().html(response.data.html); _this.heartbeat(); } }, complete: function () { _this.getWrapper().attr('data-stopping', '0'); } }); }) }, heartbeat: function () { var _this = this; setTimeout(function () { $.ajax({ url: ajaxurl, type: 'post', data: { action: 'dgwt_wcas_build_index_heartbeat', _wpnonce: dgwt_wcas.nonces.build_index_heartbeat, }, success: function (response) { if (typeof response != 'undefined' && response.success) { if (_this.getWrapper().attr('data-stopping') === '1') { return; } _this.getWrapper().html(response.data.html); if (response.data.loop) { _this.heartbeat(); } else { $('.' + _this.indexerTabProgressClass).removeClass('active'); if (response.data.status === 'error') { $('.' + _this.indexerTabErrorClass).addClass('active'); } else if (response.data.status === 'completed') { $('.' + _this.indexerMenuErrorClass).remove(); } } if (!response.data.loop && response.data.refresh_once.length > 0) { // If refresh cookie non exist and Troubleshooting tab is hidden then reload if ( !document.cookie.split(';').some(function (item) { return item.trim().indexOf('dgwt_wcas_refresh_once=' + response.data.refresh_once) === 0; }) && $('#dgwt_wcas_troubleshooting-tab').css('display') === 'none' ) { document.cookie = 'dgwt_wcas_refresh_once=' + response.data.refresh_once; location.reload(); } } } } }); }, 1000); }, detailsToggle: function () { var _this = this, display; $(document).on('click', '.js-dgwt-wcas-indexing-details-trigger', function (e) { e.preventDefault(); var $details = $('.js-dgwt-wcas-indexer-details'); if ($details.hasClass('show')) { $details.removeClass('show'); $details.addClass('hide'); $('.js-dgwt-wcas-indexing__showd').addClass('show').removeClass('hide'); $('.js-dgwt-wcas-indexing__hided').addClass('hide').removeClass('show'); display = false; } else { $details.addClass('show'); $details.removeClass('hide'); $('.js-dgwt-wcas-indexing__showd').addClass('hide').removeClass('show'); $('.js-dgwt-wcas-indexing__hided').addClass('show').removeClass('hide'); display = true; } $.ajax({ url: ajaxurl, type: 'post', data: { action: 'dgwt_wcas_index_details_toggle', display: display } }); }); }, init: function () { var _this = this; _this.registerListeners(); if ($('.' + _this.indexingWrapperClass).length > 0 && typeof dgwt_wcas['is_premium'] !== 'undefined') { _this.heartbeat(); } _this.detailsToggle(); } }; var SELECTIZE = { init: function () { var _this = this; if ($('.dgwt-wcas-selectize').length > 0) { $.ajax({ url: ajaxurl, data: { action: 'dgwt_wcas_settings_list_custom_fields', _wpnonce: $('.dgwt-wcas-selectize').data('security') }, success: function (res) { if (typeof res != 'undefined' && typeof res.data != 'undefined') { _this.initSelectize(res.data); } } }); } }, initSelectize: function (loadedOptions) { var $inputs = $('.dgwt-wcas-selectize'); if ($inputs.length > 0) { $inputs.each(function () { var $input = $(this); var optionsRaw = $input.data('options'); var options = loadedOptions; if (optionsRaw.length > 0) { optionsRaw = JSON.parse('["' + decodeURI(optionsRaw.replace(/&/g, "\",\"").replace(/=/g, "\",\"")) + '"]'); var lastKey = ''; optionsRaw.forEach(function (el, i) { if ((i + 1) % 2 === 0) { var obj = {value: el, label: lastKey}; options.push(obj); lastKey = ''; } lastKey = el; }); } $(this).selectize({ persist: false, maxItems: null, valueField: 'key', labelField: 'label', searchField: ['value', 'label'], options: options, create: function (input) { return { value: input.key, label: input.label } }, load: function (query, callback) { if (!query.length) return callback(); $.ajax({ url: ajaxurl, data: { action: 'dgwt_wcas_settings_list_custom_fields', _wpnonce: $input.data('security') }, error: function () { callback(); }, success: function (res) { callback(res.data); } }); } }); }); } } }; var TOOLTIP = { init: function () { var _this = this; var $tooltips = $('.js-dgwt-wcas-tooltip'); if ($tooltips.length > 0) { $tooltips.each(function () { var element = $(this)[0]; var contentEl = $(this).data('tooltip-html-el'); var placement = $(this).data('tooltip-placement'); if (contentEl) { const instance = new DgwtWcasTooltip(element, { title: $('.' + contentEl + ' > .dgwt-wcas-tooltip-wrapper')[0], placement: placement, trigger: "hover", html: true }); } }); } } }; var ADVANCED_SETTINGS = { advClass: 'js-dgwt-wcas-adv-settings', highlightClass: 'dgwt-wcas-opt-highlight', transClass: 'dgwt-wcas-opt-transition', init: function () { var _this = this; _this.clickListener(); _this.setStartingState(); }, clickListener: function () { var _this = this; $(document).on('click', '.js-dgwt-wcas-settings__advanced', function () { var $toggleEl = $('.js-dgwt-wcas-adv-settings-toggle'), choice; if ($toggleEl.hasClass('woocommerce-input-toggle--disabled')) { choice = 'show'; } else { choice = 'hide'; } _this.saveChoice(choice); }); }, setStartingState: function () { var _this = this, $options = $('.' + _this.advClass); if ($options.length > 0) { var showAdvanced = $('.js-dgwt-wcas-adv-settings-toggle').hasClass('woocommerce-input-toggle--enabled'); if (!showAdvanced) { $options.hide(); } else { $options.show(); CHECKBOX_SETTINGS_TOGGLE.refresh(); } } }, saveChoice: function (choice) { var _this = this; $('.js-dgwt-wcas-settings__advanced').append('<span class="dgwt-wcas-adv-settings-saving">saving...</span>'); $.ajax({ url: ajaxurl, data: { _wpnonce: dgwt_wcas.nonces.advanced_options_switch, action: 'dgwt_wcas_adv_settings', adv_settings_value: choice } }).done(function (data) { $('.dgwt-wcas-adv-settings-saving').remove(); }); var $el = $('.js-dgwt-wcas-adv-settings-toggle'); if (choice === 'show') { $el.removeClass('woocommerce-input-toggle--disabled'); $el.addClass('woocommerce-input-toggle--enabled'); } if (choice === 'hide') { $el.removeClass('woocommerce-input-toggle--enabled'); $el.addClass('woocommerce-input-toggle--disabled'); } _this.toggleAdvancedOpt(choice); }, toggleAdvancedOpt: function (action) { var _this = this, $options = $('.' + _this.advClass); if ($options.length > 0) { $options.addClass(_this.highlightClass); $options.addClass(_this.transClass); if (action === 'show') { $options.fadeIn(500, function () { setTimeout(function () { $options.removeClass(_this.highlightClass); setTimeout(function () { $options.removeClass(_this.transClass); CHECKBOX_SETTINGS_TOGGLE.refresh(); CONDITIONAL_LAYOUT_SETTINGS.setConditions(); }, 500) }, 500); }); } if (action === 'hide') { setTimeout(function () { $options.removeClass(_this.transClass); $options.fadeOut(500, function () { $options.removeClass(_this.highlightClass); }); }, 500); } } }, }; var STATS_INTERFACE = { placeholderClass: 'js-dgwt-wcas-stats-placeholder', placeholderClassLoaded: 'js-dgwt-wcas-stats-placeholder-loaded', preloaderClass: 'dgwt-wcas-stats-preloader', settingsGroupSel: '#dgwt_wcas_analytics', criticalSearchesLoadMoreClass: 'js-dgwt-wcas-critical-searches-load-more', autocompleteWithResultsLoadMoreClass: 'js-dgwt-wcas-autocomplete-with-results-load-more', searchPageWithResultsLoadMoreClass: 'js-dgwt-wcas-search-page-with-results-load-more', checkPhraseStatusClass: 'js-dgwt-wcas-stats-critical-check', checkPhraseStatusInitClass: 'js-dgwt-wcas-stats-critical-check-init', rowLoadingClass: 'dgwt-wcas-analytics-row-loading', languageSwitcherClass: 'js-dgwt-wcas-analytics-lang', excludePhraseClass: 'js-dgwt-wcas-analytics-exclude-phrase', checkIndexerAction: 'js-dgwt-wcas-analytics-check-indexer', resetAnalyticsAction: 'js-dgwt-wcas-analytics-reset', analyticsExportCSVAction: 'js-dgwt-wcas-analytics-export-csv', init: function () { var _this = this; // Do nothing if the analytics module is disabled if (typeof dgwt_wcas.analytics == 'undefined' || !dgwt_wcas.analytics.enabled) { return; } _this.interfaceLoaderListener(); }, interfaceLoaderListener: function () { var _this = this, $languageSelectorEl = $('.' + _this.languageSwitcherClass); $(document).on('dgwt_wcas_settings_group_active', function (event, el) { if ($(el).length > 0 && el.id === 'dgwt_wcas_analytics') { if (!_this.isLoaded()) { _this.loadInterface(); } } }); if ($languageSelectorEl.length > 0) { $languageSelectorEl.on('change', function () { var $canvas = $('.' + _this.placeholderClass); if ($canvas.length > 0) { $canvas.html(''); _this.loadInterface(); } }); } }, isLoaded: function () { var _this = this; return $('.' + _this.placeholderClassLoaded).length > 0; }, showPreloader: function () { var _this = this, $placeholder = $('.' + _this.placeholderClass), html = '<img class="' + _this.preloaderClass + '" src="' + dgwt_wcas.analytics.images.placeholder + '" />'; if ($placeholder.length) { $placeholder.append(html); } }, loadInterface: function () { var _this = this, $lang = $('.' + _this.languageSwitcherClass + ' option:selected'); _this.showPreloader(); var data = { 'action': 'dgwt_wcas_load_stats_interface', '_wpnonce': dgwt_wcas.analytics.nonce.analytics_load_interface }; if ($lang.length > 0) { data.lang = $lang.val(); } $.post( ajaxurl, data, function (response) { var $el = $('.' + _this.placeholderClass); if (typeof response == 'object' && response.success && $el.length > 0) { $el.addClass(_this.placeholderClassLoaded); $el.html(response.data.html); _this.loadCheckCriticalSearchesListeners(); _this.loadMoreListeners(); _this.resetStatsListener(); _this.exportStatsListener(); } } ); }, loadCheckCriticalSearchesListeners: function () { var _this = this, $elements = $('.' + _this.checkPhraseStatusClass + ':not(.' + _this.checkPhraseStatusInitClass + ')'); // Critical searches - check status $elements.on('click', function (e) { e.preventDefault(); $(e.target).after('<img src="' + dgwt_wcas.images.admin_preloader_url + '" />'); _this.checkPhraseStatus($(e.target)); }) $elements.each(function () { $(this).addClass(_this.checkPhraseStatusInitClass); }); }, loadMoreListeners: function () { var _this = this; // Critical searches - load more $('.' + _this.criticalSearchesLoadMoreClass).on('click', function (e) { e.preventDefault(); $(this).before('<img src="' + dgwt_wcas.images.admin_preloader_url + '" />'); $(this).closest('tr').addClass(_this.rowLoadingClass); _this.loadMoreCriticalSearches(); }) // Autocomplete with results - load more $('.' + _this.autocompleteWithResultsLoadMoreClass).on('click', function (e) { e.preventDefault(); _this.loadMorePhrases('autocomplete', $(e.target)); }) // Search page with results - load more $('.' + _this.searchPageWithResultsLoadMoreClass).on('click', function (e) { e.preventDefault(); _this.loadMorePhrases('search-page', $(e.target)); }) }, resetStatsListener: function () { var _this = this; $('.' + _this.resetAnalyticsAction).on('click', function (e) { var $el = $(this); e.preventDefault(); if (confirm(dgwt_wcas.analytics.labels.reset_stats_confirm)) { var data = { 'action': 'dgwt_wcas_reset_stats', '_wpnonce': dgwt_wcas.analytics.nonce.reset_stats }; $el.next().addClass('loading'); $.post( ajaxurl, data, function (response) { location.reload(); } ); } }) }, exportStatsListener: function () { var _this = this, $lang = $('.' + _this.languageSwitcherClass + ' option:selected'); $('.' + _this.analyticsExportCSVAction).on('click', function (e) { var $el = $(this); e.preventDefault(); var url = new URL(dgwt_wcas.adminurl); url.searchParams.append('action', 'dgwt_wcas_export_stats_csv'); url.searchParams.append('context', $(this).data('context')); url.searchParams.append('_wpnonce', dgwt_wcas.analytics.nonce.export_stats_csv); if ($lang.length > 0) { url.searchParams.append('lang', $lang.val()); } window.location = url; }) }, checkPhraseStatus: function ($el) { var _this = this, $lang = $('.' + _this.languageSwitcherClass + ' option:selected'); var data = { 'action': 'dgwt_wcas_check_critical_phrase', 'phrase': $el.closest('tr').find('td:nth-child(2)').text(), '_wpnonce': dgwt_wcas.analytics.nonce.check_critical_phrase }; if ($lang.length > 0) { data.lang = $lang.val(); } $.post( ajaxurl, data, function (response) { if (typeof response == 'object' && response.success) { var $row = $el.closest('tr'); $el.closest('td').html(response.data.html); var $excludeEl = $row.find('.' + _this.excludePhraseClass); var $checkIndexerEl = $row.find('.' + _this.checkIndexerAction); // Critical searches - exclude phrase if ($excludeEl.length > 0) { $excludeEl.on('click', function (e) { e.preventDefault(); var html = '<p>Processing...</p>'; $(e.target).closest('td').html(html); _this.excludePhrase($row); }) } // Check the indexer status if ($checkIndexerEl.length > 0) { $('.' + _this.checkIndexerAction).on('click', function (e) { e.preventDefault(); var $tab = $('#dgwt_wcas_performance-tab'); if ($tab.length > 0) { $tab[0].click(); $([document.documentElement, document.body]).animate({ scrollTop: 0 }, 1000); } }) } } } ); }, excludePhrase: function ($el) { var _this = this, $lang = $('.' + _this.languageSwitcherClass + ' option:selected'); var data = { 'action': 'dgwt_wcas_exclude_critical_phrase', 'phrase': $el.find('td:nth-child(2)').text(), '_wpnonce': dgwt_wcas.analytics.nonce.exclude_critical_phrase }; if ($lang.length > 0) { data.lang = $lang.val(); } $.post( ajaxurl, data, function (response) { if (typeof response == 'object' && response.success) { $el.addClass('dgwt-wcas-analytics-disable-row'); $el.find('td:last-child').html(response.data); } } ); }, loadMoreCriticalSearches: function () { var _this = this, $lang = $('.' + _this.languageSwitcherClass + ' option:selected'); var data = { 'action': 'dgwt_wcas_laod_more_critical_searches', 'loaded': $('.js-dgwt-wcas-critical-searches-row').length, '_wpnonce': dgwt_wcas.analytics.nonce.load_more_critical_searches }; if ($lang.length > 0) { data.lang = $lang.val(); } $.post( ajaxurl, data, function (response) { if (typeof response == 'object' && response.success) { var $loadMoreRow = $('.' + _this.criticalSearchesLoadMoreClass).closest('tr'); if (response.data.html.length > 0) { $loadMoreRow.before(response.data.html); } if (response.data.more > 0) { $loadMoreRow.removeClass(_this.rowLoadingClass); $loadMoreRow.find('img').remove(); $('.' + _this.criticalSearchesLoadMoreClass + ' span:first-child').text(response.data.more_label); } else { $loadMoreRow.remove(); } _this.loadCheckCriticalSearchesListeners(); } } ); }, loadMorePhrases: function (context, $el) { var _this = this, $lang = $('.' + _this.languageSwitcherClass + ' option:selected'); $el.before('<img src="' + dgwt_wcas.images.admin_preloader_url + '" />'); $el.closest('tr').addClass(_this.rowLoadingClass); if (context === 'autocomplete') { var data = { 'action': 'dgwt_wcas_laod_more_autocomplete', 'loaded': $('.js-dgwt-wcas-autocomplete-row').length, '_wpnonce': dgwt_wcas.analytics.nonce.load_more_autocomplete }; } else { var data = { 'action': 'dgwt_wcas_laod_more_search_page', 'loaded': $('.js-dgwt-wcas-search-page-row').length, '_wpnonce': dgwt_wcas.analytics.nonce.load_more_search_page }; } if ($lang.length > 0) { data.lang = $lang.val(); } $.post( ajaxurl, data, function (response) { if (typeof response == 'object' && response.success) { var $tBody = $el.closest('tbody'); $tBody.html(response.data.html); } } ); }, }; window.DGWT_WCAS_SEARCH_PREVIEW = { previewWrapper: {}, searchWrapp: {}, suggestionWrapp: {}, searchInput: {}, animateTypingInterval: null, init: function () { var _this = this; _this.previewWrapper = $('.js-dgwt-wcas-preview'); _this.searchWrapp = $('.js-dgwt-wcas-search-wrapp'); _this.suggestionWrapp = $('.js-dgwt-wcas-suggestions-wrapp'); _this.detailsWrapp = $('.js-dgwt-wcas-details-wrapp'); _this.searchInput = $('.js-dgwt-wcas-search-input'); _this.onChangeHandler(); _this.onColorHandler(); _this.onTypeHandler(); _this.disableSubmit(); _this.noResultsHandler(); _this.fixSizesInit(); _this.keepPreviewVisible(); _this.animationController(); }, isChecked: function ($el) { return $el.length > 0 && $el.is(':checked') ? true : false; }, isColor: function (color) { return (typeof color === 'string' && color.length === 7 && color.charAt(0) === '#'); }, camelCase: function (string) { var pieces = string.split('_'); var camelCase = ''; for (var i = 0; i < pieces.length; i++) { camelCase += pieces[i].charAt(0).toUpperCase() + pieces[i].slice(1); } return camelCase; }, disableSubmit: function () { var timeout, $tooltip; $('.js-dgwt-wcas-preview-source').on('click', function (e) { e.preventDefault(); var relativeX = e.pageX - 100, relativeY = e.pageY + 10, tooltipHTML = '<div class="dgwt-wcas-click-alert">' + window.dgwt_wcas.adminLabels.preview + '</div>'; if (typeof timeout != 'undefined') { clearTimeout(timeout); if ($tooltip) { $tooltip.remove(); } } $('body').append(tooltipHTML); $tooltip = $('.dgwt-wcas-click-alert'); $tooltip.css({left: relativeX, top: relativeY}); $('.dgwt-wcas-preview-source').addClass('dgwt-wcas-preview-source-no-click'); timeout = setTimeout(function () { $tooltip.fadeOut(500, function () { $(this).remove(); $('.dgwt-wcas-preview-source').removeClass('dgwt-wcas-preview-source-no-click'); }); }, 2000); }); }, noResultsHandler: function () { var _this = this, suggestionsTarget = '.js-dgwt-wcas-preview .dgwt-wcas-suggestion:not(.js-dgwt-wcas-suggestion-nores)', noresTarget = '.js-dgwt-wcas-suggestion-nores', target = "textarea[id*='search_no_results_text']"; $(document).on('focus', target, function () { $(suggestionsTarget).addClass('dgwt-wcas-hide'); $(noresTarget).removeClass('dgwt-wcas-hide'); _this.detailsWrapp.addClass('dgwt-wcas-hide'); _this.suggestionWrapp.addClass('dgwt-wcas-preview-nores'); }); $(document).on('blur', target, function () { $(suggestionsTarget).removeClass('dgwt-wcas-hide'); $(noresTarget).addClass('dgwt-wcas-hide'); _this.detailsWrapp.removeClass('dgwt-wcas-hide'); _this.suggestionWrapp.removeClass('dgwt-wcas-preview-nores'); }); }, onChangeHandler: function () { var _this = this, options = [ 'show_submit_button', 'max_form_width', 'search_style', 'search_layout', 'show_product_image', 'show_product_sku', 'show_product_desc', 'show_product_price', 'show_matching_categories', 'show_categories_images', 'show_matching_tags', 'show_matching_brands', 'show_brands_images', 'show_matching_posts', 'show_matching_pages', 'show_grouped_results', 'suggestions_limit', 'show_details_box' ]; for (var i = 0; i < options.length; i++) { var tag = ['search_style', 'search_layout'].includes(options[i]) ? 'select' : 'input', selector = tag + "[id='dgwt_wcas_settings\\[" + options[i] + "\\]']", altSelector = tag + "[id^='dgwt_wcas_settings'][data-option-trigger='" + options[i] + "']", $el = $(selector), $altEl = $(altSelector), methodToCall = 'onChange' + _this.camelCase(options[i]); if (typeof _this[methodToCall] == 'function' && $el.length > 0) { _this[methodToCall]($el, $el.val()); $(document).on('change', selector, function () { methodToCall = $(this).attr('id').replace(']', '').replace('dgwt_wcas_settings[', ''); methodToCall = 'onChange' + _this.camelCase(methodToCall); if (typeof (_this[methodToCall]) === 'function') { _this[methodToCall]($(this), this.value); } }); } else if (typeof _this[methodToCall] == 'function' && $altEl.length > 0) { _this[methodToCall]($altEl, $altEl.val()); $(document).on('change', altSelector, function () { methodToCall = $(this).data('option-trigger'); methodToCall = 'onChange' + _this.camelCase(methodToCall); if (typeof (_this[methodToCall]) === 'function') { _this[methodToCall]($(this), this.value); } }); } else { // Fallback for methods related to non-existing elements (eg. brands) _this[methodToCall]('', ''); } } }, onColorHandler: function () { var _this = this, options = [ 'search_icon_color', 'bg_input_underlay_color', 'bg_input_color', 'text_input_color', 'border_input_color', 'bg_submit_color', 'text_submit_color', 'sug_bg_color', 'sug_hover_color', 'sug_text_color', 'sug_highlight_color', 'sug_border_color' ]; for (var i = 0; i < options.length; i++) { var selector = "input[id*='" + options[i] + "']"; var $el = $(selector), methodToCall = 'onColor' + _this.camelCase(options[i]); _this[methodToCall]($el, $el.val()); $(document).on("change", selector, function () { methodToCall = $(this).attr('id').replace(']', '').replace('dgwt_wcas_settings[', ''); methodToCall = 'onColor' + _this.camelCase(methodToCall); _this[methodToCall]($(this), this.value); }); } }, onColorChangeHandler: function ($el, value) { var _this = this, methodToCall = $el.attr('id').replace(']', '').replace('dgwt_wcas_settings[', ''); methodToCall = 'onColor' + _this.camelCase(methodToCall); _this[methodToCall]($el, value); }, onTypeHandler: function () { var _this = this, options = [ 'search_submit_text', 'search_placeholder', 'search_no_results_text', 'search_see_all_results_text' ]; for (var i = 0; i < options.length; i++) { var elType = options[i] === 'search_no_results_text' ? 'textarea' : 'input', selector = elType + "[id*='" + options[i] + "']", $el = $(selector), methodToCall = 'onType' + _this.camelCase(options[i],); _this[methodToCall]($el, $el.val()); $(document).on("input", selector, function (a) { methodToCall = $(a.target).attr('id').replace(']', '').replace('dgwt_wcas_settings[', ''); methodToCall = 'onType' + _this.camelCase(methodToCall); _this[methodToCall]($(a.target), this.value); }); } }, onChangeMaxFormWidth: function ($el, value) { var _this = this; if (value.length > 0 && value != '0') { _this.searchWrapp.css('max-width', value + 'px'); _this.suggestionWrapp.css('max-width', value + 'px'); } else { _this.searchWrapp.css('max-width', '100%'); _this.suggestionWrapp.css('max-width', '100%'); } _this.onChangeShowDetailsBox($("input[id*='show_details_box']")); }, onChangeShowSubmitButton: function ($el, value) { var _this = this, $submit = $('.js-dgwt-wcas-search-submit'); if (_this.isChecked($el)) { _this.searchWrapp.addClass('dgwt-wcas-has-submit'); _this.searchWrapp.removeClass('dgwt-wcas-no-submit'); $submit.show(); $('.dgwt-wcas-sf-wrapp > .dgwt-wcas-ico-magnifier').hide(); var $textSubmitBgEl = $("input[id*='bg_submit_color']"); var $textSubmitTextEl = $("input[id*='text_submit_color']"); _this.onColorBgSubmitColor($textSubmitBgEl, $textSubmitBgEl.val()); _this.onColorTextSubmitColor($textSubmitTextEl, $textSubmitTextEl.val()); setTimeout(function () { _this.positionPreloader(); }, 10); } else { _this.searchWrapp.addClass('dgwt-wcas-no-submit'); _this.searchWrapp.removeClass('dgwt-wcas-has-submit'); $submit.hide(); $('.dgwt-wcas-sf-wrapp > .dgwt-wcas-ico-magnifier').show(); _this.positionPreloader(); } }, onChangeShowProductImage: function ($el, value) { var _this = this, $imageWrapp = $('.js-dgwt-wcas-si'), $contentWrapp = $('.js-dgwt-wcas-content-wrapp'); if (_this.isChecked($el)) { _this.suggestionWrapp.addClass('dgwt-wcas-has-img'); $('.dgwt-wcas-suggestion-product > .dgwt-wcas-st').remove(); $('.dgwt-wcas-suggestion-product > .dgwt-wcas-sp').remove(); $contentWrapp.show(); $imageWrapp.show(); } else { _this.suggestionWrapp.removeClass('dgwt-wcas-has-img'); $contentWrapp.each(function () { $(this).closest('.dgwt-wcas-suggestion-product').append($(this).html()); }); $contentWrapp.hide(); $imageWrapp.hide(); } }, onChangeShowProductSku: function ($el, value) { var _this = this, $skuWrapp = $('.js-dgwt-wcas-sku'); if (_this.isChecked($el)) { _this.suggestionWrapp.addClass('dgwt-wcas-has-sku'); $skuWrapp.show(); } else { _this.suggestionWrapp.removeClass('dgwt-wcas-has-sku'); $skuWrapp.hide(); } }, onChangeShowProductDesc: function ($el, value) { var _this = this, $descWrapp = $('.js-dgwt-wcas-sd'); if (_this.isChecked($el)) { _this.suggestionWrapp.addClass('dgwt-wcas-has-desc'); $descWrapp.show(); } else { _this.suggestionWrapp.removeClass('dgwt-wcas-has-desc'); $descWrapp.hide(); } }, onChangeShowProductPrice: function ($el, value) { var _this = this, $priceWrapp = $('.js-dgwt-wcas-sp'); if (_this.isChecked($el)) { _this.suggestionWrapp.addClass('dgwt-wcas-has-price'); $priceWrapp.show(); } else { _this.suggestionWrapp.removeClass('dgwt-wcas-has-price'); $priceWrapp.hide(); } }, onChangeShowMatchingCategories: function ($el, value) { var _this = this, $headline = $('.dgwt-wcas-suggestion-headline-cat'), $items = $('.dgwt-wcas-suggestion-cat'); if (_this.isChecked($el)) { $headline.show(); $items.show(); $items.removeClass('js-dgwt-wcas-suggestion-hidden'); _this.onChangeShowGroupedResults($("input[id*='show_grouped_results']")); } else { $headline.hide(); $items.hide(); $items.addClass('js-dgwt-wcas-suggestion-hidden'); } var $limitInput = $("input[id*='suggestions_limit']"); _this.onChangeSuggestionsLimit($limitInput, $limitInput.val()); }, onChangeShowCategoriesImages: function ($el, value) { var _this = this, $contentWrapp = $('.js-dgwt-wcas-suggestion-cat'); if (_this.isChecked($el)) { $contentWrapp.addClass('dgwt-wcas-has-img'); } else { $contentWrapp.removeClass('dgwt-wcas-has-img'); } }, onChangeShowMatchingTags: function ($el, value) { var _this = this, $headline = $('.dgwt-wcas-suggestion-headline-tag'), $items = $('.dgwt-wcas-suggestion-tag'); if (_this.isChecked($el)) { $headline.show(); $items.show(); $items.removeClass('js-dgwt-wcas-suggestion-hidden'); _this.onChangeShowGroupedResults($("input[id*='show_grouped_results']")); } else { $headline.hide(); $items.hide(); $items.addClass('js-dgwt-wcas-suggestion-hidden'); } var $limitInput = $("input[id*='suggestions_limit']"); _this.onChangeSuggestionsLimit($limitInput, $limitInput.val()); }, onChangeShowMatchingBrands: function ($el, value) { var _this = this, $headline = $('.dgwt-wcas-suggestion-headline-brand'), $items = $('.dgwt-wcas-suggestion-brand'); if (_this.isChecked($el)) { $headline.show(); $items.show(); $items.removeClass('js-dgwt-wcas-suggestion-hidden'); _this.onChangeShowGroupedResults($("input[id*='show_grouped_results']")); } else { $headline.hide(); $items.hide(); $items.addClass('js-dgwt-wcas-suggestion-hidden'); } var $limitInput = $("input[id*='suggestions_limit']"); _this.onChangeSuggestionsLimit($limitInput, $limitInput.val()); }, onChangeShowBrandsImages: function ($el, value) { var _this = this, $contentWrapp = $('.js-dgwt-wcas-suggestion-brand'); if (_this.isChecked($el)) { $contentWrapp.addClass('dgwt-wcas-has-img'); } else { $contentWrapp.removeClass('dgwt-wcas-has-img'); } }, onChangeShowMatchingPosts: function ($el, value) { var _this = this, $headline = $('.dgwt-wcas-suggestion-headline-post'), $items = $('.dgwt-wcas-suggestion-post'); if (_this.isChecked($el)) { $headline.show(); $items.show(); $items.removeClass('js-dgwt-wcas-suggestion-hidden'); _this.onChangeShowGroupedResults($("input[id*='show_grouped_results']")); } else { $headline.hide(); $items.hide(); $items.addClass('js-dgwt-wcas-suggestion-hidden'); } var $limitInput = $("input[id*='suggestions_limit']"); _this.onChangeSuggestionsLimit($limitInput, $limitInput.val()); }, onChangeShowMatchingPages: function ($el, value) { var _this = this, $headline = $('.dgwt-wcas-suggestion-headline-page'), $items = $('.dgwt-wcas-suggestion-page'); if (_this.isChecked($el)) { $headline.show(); $items.show(); $items.removeClass('js-dgwt-wcas-suggestion-hidden'); _this.onChangeShowGroupedResults($("input[id*='show_grouped_results']")); } else { $headline.hide(); $items.hide(); $items.addClass('js-dgwt-wcas-suggestion-hidden'); } var $limitInput = $("input[id*='suggestions_limit']"); _this.onChangeSuggestionsLimit($limitInput, $limitInput.val()); }, onChangeShowGroupedResults: function ($el, value) { var _this = this, $directHeadlines = $('.dgwt-wcas-st--direct-headline'), $headlines = $('.dgwt-wcas-suggestion-headline'); if (_this.isChecked($el)) { $directHeadlines.addClass('dgwt-wcas-hidden'); _this.suggestionWrapp.addClass('dgwt-wcas-has-headings'); $('.dgwt-wcas-suggestion-headline').show(); if (!_this.isChecked($("input[data-option-trigger='show_matching_categories']"))) { $('.dgwt-wcas-suggestion-headline-cat').hide(); } if (!_this.isChecked($("input[data-option-trigger='show_matching_tags']"))) { $('.dgwt-wcas-suggestion-headline-tag').hide(); } if (!_this.isChecked($("input[data-option-trigger='show_matching_brands']"))) { $('.dgwt-wcas-suggestion-headline-brand').hide(); } if (!_this.isChecked($("input[id*='show_matching_posts']"))) { $('.dgwt-wcas-suggestion-headline-post').hide(); } if (!_this.isChecked($("input[id*='show_matching_pages']"))) { $('.dgwt-wcas-suggestion-headline-page').hide(); } } else { $directHeadlines.removeClass('dgwt-wcas-hidden'); $headlines.hide(); _this.suggestionWrapp.removeClass('dgwt-wcas-has-headings'); } }, onChangeSuggestionsLimit: function ($el, value) { setTimeout(function () { var _this = this, i = 0, limit = 7, $duplicated = $('.dgwt-wcas-suggestion-duplicated'), types = ['brand', 'cat', 'tag', 'post', 'page', 'product']; if (value.length > 0 && value != '0') { limit = Math.abs(value); } if ($duplicated.length > 0) { $duplicated.remove(); } var prototypes = []; for (i = 0; i < types.length; i++) { var prototype = $('.dgwt-wcas-suggestion-' + types[i] + ':not(.js-dgwt-wcas-suggestion-hidden)'); if (prototype.length > 0) { prototypes.push(prototype); } } var total = prototypes.length; if (prototypes.length > 0) { var slots = limit - prototypes.length; var lastProtoypeIndex = prototypes.length - 1; while (slots > 0) { var $cloned = prototypes[lastProtoypeIndex].clone(); $cloned.addClass('dgwt-wcas-suggestion-duplicated'); $cloned.removeClass('dgwt-wcas-suggestion-selected'); prototypes[lastProtoypeIndex].after($cloned); total++ lastProtoypeIndex--; if (lastProtoypeIndex < 0) { lastProtoypeIndex = prototypes.length - 1; } slots--; } } if (total > limit) { $el.val(total); } }, 10); }, onChangeShowDetailsBox: function ($el, value) { var _this = this; if (_this.isChecked($el)) { _this.detailsWrapp.show(); _this.searchWrapp.addClass('dgwt-wcas-is-detail-box'); _this.previewWrapper.addClass('dgwt-wcas-is-details'); _this.previewWrapper.addClass('dgwt-wcas-details-right'); setTimeout(function () { $('.dgwt-wcas-suggestion-product:not(.dgwt-wcas-suggestion-duplicated)').addClass('dgwt-wcas-suggestion-selected'); var $visibleSearchWrapp = $('.js-dgwt-wcas-preview-bar-example'); var searchWidth = $visibleSearchWrapp.width(); if (searchWidth >= 550) { _this.previewWrapper.addClass('dgwt-wcas-full-width'); var realWidth = getComputedStyle($visibleSearchWrapp[0]).width; realWidth = Math.round(parseFloat(realWidth.replace('px', ''))); if (realWidth % 2 == 0) { _this.suggestionWrapp.css('width', Math.round(realWidth / 2)); _this.detailsWrapp.css('width', Math.round(realWidth / 2)); } else { _this.suggestionWrapp.css('width', Math.floor(realWidth / 2)); _this.detailsWrapp.css('width', Math.ceil(realWidth / 2)); } } else { _this.suggestionWrapp.width(_this.searchWrapp.width()); } }, 10); } else { _this.detailsWrapp.hide(); _this.searchWrapp.removeClass('dgwt-wcas-is-detail-box'); _this.previewWrapper.removeClass('dgwt-wcas-is-details'); _this.previewWrapper.removeClass('dgwt-wcas-details-right'); _this.previewWrapper.removeClass('dgwt-wcas-full-width'); $('.dgwt-wcas-suggestion-product').removeClass('dgwt-wcas-suggestion-selected'); _this.suggestionWrapp.css('width', ''); _this.detailsWrapp.css('width', ''); } }, onChangeSearchStyle: function ($el, value) { var _this = this, themes = ['solaris', 'pirx', 'pirx-compact'], $inputSubmitButton = $('input[id*="show_submit_button"]'), $inputSubmitBgColor = $('label[for*="bg_submit_color"]'), i; $('.dgwt-wcas-ico-magnifier').addClass('dgwt-wcas-hidden'); for (i = 0; i < themes.length; i++) { $('.js-dgwt-wcas-preview').removeClass('dgwt-wcas-open-' + themes[i]); $('.js-dgwt-wcas-search-wrapp').removeClass('dgwt-wcas-style-' + themes[i]); } $('.js-dgwt-wcas-ico-magnifier-' + value).removeClass('dgwt-wcas-hidden'); $('.js-dgwt-wcas-preview').addClass('dgwt-wcas-open-' + value); $('.js-dgwt-wcas-search-wrapp').addClass('dgwt-wcas-style-' + value); if (value === 'pirx-compact') { $('.js-dgwt-wcas-search-wrapp').addClass('dgwt-wcas-style-pirx'); $('.js-dgwt-wcas-ico-magnifier-pirx').removeClass('dgwt-wcas-hidden'); } $('label[for*="bg_input_underlay_color"]').closest('tr').removeClass('dgwt-wcas-hidden'); if (value === 'solaris') { $('label[for*="bg_input_underlay_color"]').closest('tr').addClass('dgwt-wcas-hidden'); $('label[for*="show_submit_button"] .js-dgwt-wcas-tooltip').addClass('dgwt-wcas-hidden'); $('label[for*="search_submit_text"]').closest('tr').removeClass('dgwt-wcas-hidden'); $('input[id*="search_submit_text"]').prop("disabled", false); $inputSubmitBgColor.closest('tr').removeClass('dgwt-wcas-hidden'); $('label[for*="text_submit_color"] > span:nth-child(1)').removeClass('dgwt-wcas-hidden'); $('label[for*="text_submit_color"] > span:nth-child(2)').addClass('dgwt-wcas-hidden'); $inputSubmitButton.prop("disabled", false); $('.js-dgwt-wcas-submit-button-pirx-tooltip').removeClass('dgwt-wcas-hidden'); $('.dgwt-wcas-sf-wrapp').css('background-color', ''); var $biucPicker = $('input[id*="bg_input_underlay_color"]').closest('tr').find('.wp-picker-clear'); if ($biucPicker.length > 0) { $biucPicker[0].click(); } setTimeout(function () { _this.positionPreloader(); }, 300); } if (value === 'pirx' || value === 'pirx-compact') { $('label[for*="show_submit_button"] .js-dgwt-wcas-tooltip').removeClass('dgwt-wcas-hidden'); $('label[for*="search_submit_text"]').closest('tr').addClass('dgwt-wcas-hidden'); $('input[id*="search_submit_text"]').prop("disabled", true); $('label[for*="bg_submit_color"]').closest('tr').addClass('dgwt-wcas-hidden'); $('label[for*="text_submit_color"] > span:nth-child(2)').removeClass('dgwt-wcas-hidden'); $('label[for*="text_submit_color"] > span:nth-child(1)').addClass('dgwt-wcas-hidden'); $('input[id*="search_submit_text"]').val(''); var $cPicker = $inputSubmitBgColor.closest('tr').find('.wp-picker-clear'); if ($cPicker.length > 0) { $cPicker[0].click(); } _this.onColorBgSubmitColor(); if (!$inputSubmitButton.is(':checked')) { $inputSubmitButton[0].click(); } $inputSubmitButton.prop("disabled", true); _this.onTypeSearchSubmitText($('input[id*="search_submit_text"]'), ''); setTimeout(function () { _this.positionPreloader(); }, 10); } }, onChangeSearchLayout: function ($el, value) { var _this = this, $labels = $('.js-dgwt-wcas-preview-device-info'), $barExample = $('.js-dgwt-wcas-preview-bar-example'), $iconExample = $('.js-dgwt-wcas-preview-icon-example'), i; $('.js-dgwt-wcas-preview-device-info > span').addClass('dgwt-wcas-hidden'); $iconExample.removeClass('dgwt-wcas-preview-icon-only'); switch (value) { case 'classic': $labels.addClass('dgwt-wcas-hidden'); $barExample.removeClass('dgwt-wcas-hidden'); $iconExample.addClass('dgwt-wcas-hidden'); break; case 'icon': $labels.addClass('dgwt-wcas-hidden'); $barExample.addClass('dgwt-wcas-hidden'); $iconExample.removeClass('dgwt-wcas-hidden'); $('.dgwt-wcas-search-form').removeClass('dgwt-wcas-hidden'); $('.dgwt-wcas-search-icon-arrow').removeClass('dgwt-wcas-hidden'); $iconExample.addClass('dgwt-wcas-preview-icon-only'); break; case 'icon-flexible': $labels.removeClass('dgwt-wcas-hidden'); $barExample.removeClass('dgwt-wcas-hidden'); $iconExample.removeClass('dgwt-wcas-hidden'); $iconExample.find('.dgwt-wcas-search-form').addClass('dgwt-wcas-hidden'); $iconExample.find('.dgwt-wcas-search-icon-arrow').addClass('dgwt-wcas-hidden'); $('.js-dgwt-wcas-preview-device-info[data-device="desktop"] span:nth-child(2)').removeClass('dgwt-wcas-hidden'); $('.js-dgwt-wcas-preview-device-info[data-device="mobile"] span:nth-child(1)').removeClass('dgwt-wcas-hidden'); break; case 'icon-flexible-inv': $labels.removeClass('dgwt-wcas-hidden'); $barExample.removeClass('dgwt-wcas-hidden'); $iconExample.removeClass('dgwt-wcas-hidden'); $iconExample.find('.dgwt-wcas-search-form').addClass('dgwt-wcas-hidden'); $iconExample.find('.dgwt-wcas-search-icon-arrow').addClass('dgwt-wcas-hidden'); $('.js-dgwt-wcas-preview-device-info[data-device="desktop"] span:nth-child(1)').removeClass('dgwt-wcas-hidden'); $('.js-dgwt-wcas-preview-device-info[data-device="mobile"] span:nth-child(2)').removeClass('dgwt-wcas-hidden'); break; } }, onColorSearchIconColor: function ($el, value) { var _this = this; if (_this.isColor(value)) { _this.searchWrapp.find('.dgwt-wcas-ico-magnifier-handler path').css('fill', value); } else { _this.searchWrapp.find('.dgwt-wcas-ico-magnifier-handler path').css('fill', ''); } }, onColorBgInputColor: function ($el, value) { var _this = this; if (_this.isColor(value)) { _this.searchInput.css('background-color', value); } else { _this.searchInput.css('background-color', ''); } }, onColorBgInputUnderlayColor: function ($el, value) { var _this = this, $underlayEl = $('.dgwt-wcas-style-pirx .dgwt-wcas-sf-wrapp'); if (_this.isColor(value)) { $underlayEl.css('background-color', value); } else { $underlayEl.css('background-color', ''); } }, onColorTextInputColor: function ($el, value) { var _this = this, styleClass = 'dgwt-wcas-preview-placeholder-style'; if (_this.isColor(value)) { var style = '<style class="' + styleClass + '">'; style += '.dgwt-wcas-search-input {color:' + value + '!important;}'; style += '.dgwt-wcas-ico-magnifier path {fill:' + value + '}'; style += '</style>'; $('head').append(style); _this.searchInput.css('color', value); } else { _this.searchInput.css('color', ''); var $styleEl = $('.' + styleClass); if ($styleEl.length > 0) { $styleEl.remove(); } } }, onColorBorderInputColor: function ($el, value) { var _this = this; if (_this.isColor(value)) { _this.searchInput.css('border-color', value); } else { _this.searchInput.css('border-color', ''); } }, onColorBgSubmitColor: function ($el, value) { var _this = this, styleClass = 'dgwt-wcas-preview-submit-style', submitEnabled = this.isChecked($("input[id*='show_submit_button']")); if (submitEnabled && _this.isColor(value)) { var style = '<style class="' + styleClass + '">'; style += '.dgwt-wcas-search-submit::before{border-color: transparent ' + value + '!important;}'; style += '.dgwt-wcas-search-submit:hover::before{border-right-color: ' + value + '!important;}'; style += '.dgwt-wcas-search-submit:focus::before{border-right-color: ' + value + '!important;}'; style += '.dgwt-wcas-search-submit{background-color: ' + value + '!important;}'; style += '.dgwt-wcas-om-bar .dgwt-wcas-om-return{background-color: ' + value + '!important;}'; style += '</style>'; $('head').append(style); } else { var $styleEl = $('.' + styleClass); if ($styleEl.length > 0) { $styleEl.remove(); } } }, onColorTextSubmitColor: function ($el, value) { var _this = this, submitEnabled = this.isChecked($("input[id*='show_submit_button']")); if (submitEnabled && _this.isColor(value)) { $('.js-dgwt-wcas-search-submit').css('color', value); $('.dgwt-wcas-search-submit .dgwt-wcas-ico-magnifier path').css('fill', value); } else { _this.searchInput.css('background-color', ''); $('.js-dgwt-wcas-search-submit').css('color', ''); $('.dgwt-wcas-search-submit .dgwt-wcas-ico-magnifier path').css('fill', ''); } }, onColorSugBgColor: function ($el, value) { var _this = this, styleClass = 'dgwt-wcas-preview-sugbgcol-style'; if (_this.isColor(value)) { var style = '<style class="' + styleClass + '">'; style += '.dgwt-wcas-suggestions-wrapp,'; style += '.dgwt-wcas-details-wrapp'; style += '{background-color: ' + value + '!important;}'; style += '</style>'; $('head').append(style); } else { var $styleEl = $('.' + styleClass); if ($styleEl.length > 0) { $styleEl.remove(); } } }, onColorSugHoverColor: function ($el, value) { var _this = this; if (_this.isColor(value)) { setTimeout(function () { $('.dgwt-wcas-suggestion-selected').css('background-color', value); }, 50); } else { $('.dgwt-wcas-suggestion-selected').css('background-color', ''); } }, onColorSugTextColor: function ($el, value) { var _this = this, styleClass = 'dgwt-wcas-preview-sugtextcol-style'; if (_this.isColor(value)) { var style = '<style class="' + styleClass + '">'; style += '.dgwt-wcas-suggestions-wrapp *,'; style += '.dgwt-wcas-details-wrapp *,'; style += '.dgwt-wcas-sd,'; style += '.dgwt-wcas-suggestion *'; style += '{color: ' + value + '!important;}'; style += '</style>'; $('head').append(style); } else { var $styleEl = $('.' + styleClass); if ($styleEl.length > 0) { $styleEl.remove(); } } }, onColorSugHighlightColor: function ($el, value) { var _this = this, styleClass = 'dgwt-wcas-preview-sughighlight-style'; if (_this.isColor(value)) { var style = '<style class="' + styleClass + '">'; style += '.dgwt-wcas-st strong,'; style += '.dgwt-wcas-sd strong'; style += '{color: ' + value + '!important;}'; style += '</style>'; $('head').append(style); } else { var $styleEl = $('.' + styleClass); if ($styleEl.length > 0) { $styleEl.remove(); } } }, onColorSugBorderColor: function ($el, value) { var _this = this, styleClass = 'dgwt-wcas-preview-sugborder-style'; if (_this.isColor(value)) { var style = '<style class="' + styleClass + '">'; style += '.dgwt-wcas-suggestions-wrapp,'; style += '.dgwt-wcas-details-wrapp,'; style += '.dgwt-wcas-suggestion,'; style += '.dgwt-wcas-datails-title,'; style += '.dgwt-wcas-details-more-products'; style += '{border-color: ' + value + '!important;}'; style += '</style>'; $('head').append(style); } else { var $styleEl = $('.' + styleClass); if ($styleEl.length > 0) { $styleEl.remove(); } } }, onTypeSearchSubmitText: function ($el, value) { var _this = this, $label = $('.js-dgwt-wcas-search-submit-l'), $icon = $('.js-dgwt-wcas-search-submit-m'); if (value.length > 0) { $label.text(value); $label.show(); $icon.hide(); } else { $label.text(''); $label.hide(); $icon.show(); } _this.positionPreloader(); }, onTypeSearchPlaceholder: function ($el, value) { var _this = this; if (value.length == 0) { value = dgwt_wcas.labels.search_placeholder; } _this.searchInput.attr('placeholder', value); }, onTypeSearchNoResultsText: function ($el, value) { var _this = this, html = value; if (value.length == 0) { try { html = JSON.parse(dgwt_wcas.labels.no_results); // Fix invalid HTML var tmpEl = document.createElement('div'); tmpEl.innerHTML = html; html = tmpEl.innerHTML; } catch (e) { } } if (_this.isHTMLPossiblyDangerous(html)) { html = 'You used invalid HTML tags or attributes!'; } $('.js-dgwt-wcas-suggestion-nores').html(html); }, onTypeSearchSeeAllResultsText: function ($el, value) { if (value.length == 0) { value = dgwt_wcas.labels.show_more; } $('.js-dgwt-wcas-st-more-label').text(value); }, positionPreloader: function () { var $submit = $('.js-dgwt-wcas-search-wrapp:not(.dgwt-wcas-hidden) .js-dgwt-wcas-search-submit'), visible = $submit.is(":visible"), style = $("select[id*='search_style'] option:selected").val(), right = ($submit.width() + 35); if (style === 'pirx' || style === 'pirx-compact') { right = 38; } if (!visible && style === 'solaris') { right = 7; } $('.dgwt-wcas-preloader').css('right', right + 'px'); }, fixSizesInit: function () { var _this = this; $(document).on('click', '#dgwt_wcas_autocomplete-tab', function () { _this.onChangeShowDetailsBox($("input[id*='show_details_box']")); }); }, keepPreviewVisible: function () { var $movingEl = $('.js-dgwt-wcas-preview-inner'), $startEl = $('.js-dgwt-wcas-preview'), $endEl = $('.js-dgwt-wcas-preview-source'), $boundaryEl = $('.dgwt-eq-settings-form'); $(window).on('scroll.autocomplete', function () { var currentTop = $(document).scrollTop(), topEdge = $startEl[0].getBoundingClientRect().top, breakPoint = topEdge - 40; if (breakPoint < 0) { var offset = (-1 * breakPoint) < 1 ? 0 : (-1 * breakPoint), bottomLimit = $endEl.offset().top + $endEl.outerHeight(false), boundaryBottom = Math.floor($boundaryEl.offset().top + $boundaryEl.outerHeight(false)) - 90; if (bottomLimit <= boundaryBottom) { $movingEl.css('top', offset + 'px'); } else { if ((currentTop + 40) < $movingEl.offset().top) { var tmp = $movingEl.css('top').replace(/px/i, '') - 10; $movingEl.css('top', tmp + 'px'); } } } else { $movingEl.css('top', 0); } }); }, animationController: function () { var that = this; $(window).on('load', function () { var $searchBarSettings = $('#dgwt_wcas_form_body-tab'); if ($searchBarSettings.length && $searchBarSettings.hasClass('nav-tab-active')) { that.startAnimateTyping(); } }); $('.dgwt_wcas_settings-nav-tab-wrapper > a').on('click', function () { if ($(this).attr('id') === 'dgwt_wcas_form_body-tab') { that.stopAnimateTyping(); that.startAnimateTyping(); } else { that.stopAnimateTyping(); } }); $('.dgwt_wcas_settings-nav-tab-wrapper > a').on('click', function () { if ($(this).attr('id') === 'dgwt_wcas_form_body-tab') { that.stopAnimateTyping(); that.startAnimateTyping(); } else { that.stopAnimateTyping(); } }); $('input[id*="search_placeholder"]').on('focus', function () { that.stopAnimateTyping(); _this.searchInput.val(''); }); $('input[id*="search_placeholder"]').on('blur', function () { that.startAnimateTyping(); }); }, getSearchLayout: function () { return $("select[id*='search_layout'] option:selected").val(); }, startAnimateTyping: function () { var that = this, frame = 0, $wrapp = $('.js-dgwt-wcas-search-wrapp'), $searchBar = $('.js-dgwt-wcas-search-input'), $iconStyleForm = $('.js-dgwt-wcas-preview-icon-example .dgwt-wcas-search-form'), $iconStyleArrow = $('.js-dgwt-wcas-preview-icon-example .dgwt-wcas-search-icon-arrow'), $iconStyleIcon = $('.js-dgwt-wcas-preview-icon-example .dgwt-wcas-search-icon'), $closeEl = $('.dgwt-wcas-preloader'), closeSvg = $('.js-dgwt-wcas-preview-elements-close').html(); // TODO [refactor] shorten it using a recursive function that.animateTypingInterval = setInterval(function () { frame++; if (that.getSearchLayout() === 'icon') { if (frame === 1) { $iconStyleForm.addClass('dgwt-wcas-hidden'); $iconStyleArrow.addClass('dgwt-wcas-hidden'); } if (frame === 6) { $iconStyleIcon.addClass('dgwt-wcas-search-icon-handler-click'); } if (frame === 7) { $iconStyleIcon.removeClass('dgwt-wcas-search-icon-handler-click'); $iconStyleForm.removeClass('dgwt-wcas-hidden'); $iconStyleArrow.removeClass('dgwt-wcas-hidden'); } } if (frame === 10) { $searchBar.val('f'); $wrapp.addClass('dgwt-wcas-search-filled'); $wrapp.addClass('dgwt-wcas-search-focused'); $closeEl.addClass('dgwt-wcas-close'); } if (frame === 11) { $searchBar.val('fi'); } if (frame === 12) { $searchBar.val('fib'); $closeEl.append(closeSvg); that.positionPreloader(); } if (frame === 13) { $searchBar.val('fibo'); } if (frame === 14) { $searchBar.val('fibo '); } if (frame === 15) { $searchBar.val('fibo s'); } if (frame === 16) { $searchBar.val('fibo se'); } if (frame === 17) { $searchBar.val('fibo sea'); } if (frame === 18) { $searchBar.val('fibo sear'); } if (frame === 19) { $searchBar.val('fibo searc'); } if (frame === 20) { $searchBar.val('fibo search'); } if (frame === 30) { $searchBar.val('fibo searc'); } if (frame === 31) { $searchBar.val('fibo sear'); } if (frame === 32) { $searchBar.val('fibo sea'); } if (frame === 33) { $searchBar.val('fibo se'); } if (frame === 34) { $searchBar.val('fibo s'); } if (frame === 35) { $searchBar.val('fibo '); } if (frame === 36) { $searchBar.val('fibo'); } if (frame === 37) { $searchBar.val('fib'); } if (frame === 38) { $searchBar.val('fi'); $closeEl.removeClass('dgwt-wcas-close'); } if (frame === 39) { $searchBar.val('f'); } if (frame === 40) { $searchBar.val(''); $closeEl.html(''); $wrapp.removeClass('dgwt-wcas-search-filled'); } if (frame === 45) { frame = 0; } }, 200); }, stopAnimateTyping: function () { var that = this, $wrapp = $('.js-dgwt-wcas-search-wrapp'), $searchBar = $('.js-dgwt-wcas-search-input'), $closeEl = $('.dgwt-wcas-preloader'); $closeEl.removeClass('dgwt-wcas-close'); $searchBar.val(''); $closeEl.html(''); $wrapp.removeClass('dgwt-wcas-search-filled'); clearInterval(that.animateTypingInterval); }, isHTMLPossiblyDangerous: function (html) { var i, suspicious = false; suspiciousStrings = [ 'data:text/html', 'javascript:', 'xlink:href', 'function(', '<script', '<embed', '<iframe', '<form', 'background:url', 'onclick', 'document.' ]; for (i = 0; i < suspiciousStrings.length; i++) { if (html.indexOf(suspiciousStrings[i]) !== -1) { suspicious = true; break; } } return suspicious; } }; var TROUBLESHOOTING = { settingsTab: '#dgwt_wcas_troubleshooting-tab', noIssuesClass: '.js-dgwt-wcas-troubleshooting-no-issues', counterClass: '.js-dgwt-wcas-troubleshooting-count', issuesListClass: '.js-dgwt-wcas-troubleshooting-issues', progressBar: '.dgwt-wcas-troubleshooting-wrapper .progress_bar', progressBarInner: '.dgwt-wcas-troubleshooting-wrapper .progress-bar-inner', fixOutofstockButtonName: 'dgwt-wcas-fix-out-of-stock-relationships', maintenanceAnalyticsButtonName: 'dgwt-wcas-maintenance-analytics', switchAlternativeEndpoint: 'dgwt-wcas-switch-alternative-endpoint', asyncActionButtonNameBegining: 'dgwt-wcas-async-action-', init: function () { var _this = this; if (typeof dgwt_wcas['troubleshooting'] === 'undefined') { return; } const count = dgwt_wcas['troubleshooting']['tests']['issues']['critical'] + dgwt_wcas['troubleshooting']['tests']['issues']['recommended']; if (count > 0) { $(_this.counterClass).text(count).addClass('active'); $(_this.settingsTab).addClass('enabled'); } if (dgwt_wcas.troubleshooting.tests.results_async.length > 0) { $.each(dgwt_wcas.troubleshooting.tests.results_async, function () { _this.appendIssue(this, false); }); } if (dgwt_wcas.troubleshooting.tests.direct.length > 0) { $.each(dgwt_wcas.troubleshooting.tests.direct, function () { _this.appendIssue(this, false); }); } if (dgwt_wcas.troubleshooting.tests.async.length > 0) { _this.maybeRunNextAsyncTest(); } $(document).on('click', 'input[name="' + _this.fixOutofstockButtonName + '"]', function (e) { $('input[name="' + _this.fixOutofstockButtonName + '"]').attr('disabled', 'disabled').next().addClass('loading'); var data = { 'action': 'dgwt_wcas_troubleshooting_fix_outofstock', '_wpnonce': dgwt_wcas.troubleshooting.nonce.troubleshooting_fix_outofstock }; $.post( ajaxurl, data, function () { location.reload(); } ); return false; }); $(document).on('click', 'input[name="' + _this.maintenanceAnalyticsButtonName + '"]', function (e) { $('input[name="' + _this.maintenanceAnalyticsButtonName + '"]').attr('disabled', 'disabled').next().addClass('loading'); var data = { 'action': 'dgwt_wcas_troubleshooting_maintenance_analytics', '_wpnonce': dgwt_wcas.troubleshooting.nonce.troubleshooting_maintenance_analytics }; $.post( ajaxurl, data, function () { location.reload(); } ); return false; }); $(document).on('click', 'input[name="' + _this.switchAlternativeEndpoint + '"]', function (e) { var action = parseInt($(this).data('switch')) === 1 ? 'enable' : 'disable'; $('input[name="' + _this.switchAlternativeEndpoint + '"]').attr('disabled', 'disabled').next().addClass('loading'); var data = { 'action': 'dgwt_wcas_troubleshooting_switch_alternative_endpoint', '_wpnonce': dgwt_wcas.troubleshooting.nonce.troubleshooting_switch_alternative_endpoint, 'switch': action, }; $.post( ajaxurl, data, function () { location.reload(); } ); return false; }); $(document).on('click', 'input[name^="' + _this.asyncActionButtonNameBegining + '"]', function (e) { var $el = $(this); $el.attr('disabled', 'disabled').next('.dgwt-wcas-ajax-loader').addClass('loading'); var data = { 'action': 'dgwt_wcas_troubleshooting_async_action', 'internal_action': $el.data('internal-action'), 'meta': $el.data('meta'), '_wpnonce': dgwt_wcas.troubleshooting.nonce.troubleshooting_async_action }; $.post( ajaxurl, data, function (response) { var success = typeof response.success === 'boolean' ? response.success : false; var timeout = 0; if (typeof response.data.message === "string" && response.data.message.length > 0) { $el.next() .next('.dgwt-wcas-async-action-message') .text(response.data.message) .removeClass('success') .removeClass('error') .addClass(success ? 'success' : 'error'); timeout = 500; } var url = window.location.href; if (url.lastIndexOf("#") > 0) { url = url.substring(0, url.lastIndexOf("#")); } if (typeof response.data.args === "object") { url = wp.url.addQueryArgs(url, response.data.args); } setTimeout(function () { window.location = url; }, timeout); } ); return false; }); $(document).on('change', '#dgwt-wcas-send-reports-in-feature', function () { $('#dgwt-wcas-async-action-send-indexer-failure-report').data('meta', JSON.stringify({'auto_send': $(this).is(':checked')})); }); }, appendIssue: function (issue, incrementCounter) { var _this = this; var template = wp.template('dgwt-wcas-troubleshooting-issue'), issueWrapper = $(_this.issuesListClass + '-' + issue.status), count; if (issue.status === 'good') { return; } $(_this.noIssuesClass).hide(); if (incrementCounter) { dgwt_wcas.troubleshooting.tests.issues[issue.status]++; } count = dgwt_wcas.troubleshooting.tests.issues['critical'] + dgwt_wcas.troubleshooting.tests.issues['recommended']; if (count > 0) { $(_this.counterClass).text(count).addClass('active'); $(_this.settingsTab).addClass('enabled'); } $(issueWrapper).append(template(issue)); }, maybeRunNextAsyncTest: function () { var _this = this; if (dgwt_wcas.troubleshooting.tests.async.length > 0) { $.each(dgwt_wcas.troubleshooting.tests.async, function () { var data = { 'action': 'dgwt_wcas_troubleshooting_test', 'test': this.test, '_wpnonce': dgwt_wcas.troubleshooting.nonce.troubleshooting_async_test }; if (this.completed) { return true; } this.completed = true; $(_this.progressBar).show(); $.post( ajaxurl, data, function (response) { if (response.success) { _this.appendIssue(response.data, true) } _this.maybeRunNextAsyncTest(); } ); return false; }); } _this.recalculateProgression(); }, recalculateProgression: function () { var _this = this; var total = dgwt_wcas.troubleshooting.tests.async.length; var completed = 0; $.each(dgwt_wcas.troubleshooting.tests.async, function () { if (this.completed) { completed++; } }); var progress = Math.ceil((completed / total) * 100); $(_this.progressBarInner).css('width', progress + '%'); if (progress === 100) { setTimeout(function () { $(_this.progressBar).slideUp(); }, 2000); } }, } var MOVE_OPTIONS = { moveOptionClass: '.js-dgwt-wcas-move-option', init: function () { var optionsToMove = $(this.moveOptionClass); if (optionsToMove.length > 0) { $.each(optionsToMove, function (index, el) { var moveDest = $('#' + $(el).data('move-dest').replace(/(:|\.|\[|\])/g, '\\$1')); if (moveDest.length > 0) { if ($(el).closest('tr').hasClass('dgwt-wcas-premium-only')) { $(el).addClass('dgwt-wcas-premium-only'); } $(el).clone().appendTo(moveDest.closest('td fieldset')); } $(el).closest('tr').remove(); }); } } } var SETTINGS_FILTERS_RULES = { init: function () { if (typeof Vue == 'undefined') { return; } var productSearchSettings = function ({nonce, options, type}) { return { persist: false, maxItems: null, valueField: 'key', labelField: 'label', searchField: ['label'], options: options, preload: true, create: function (input) { return { value: input.key, label: input.label } }, load: function (query, callback) { $.ajax({ url: ajaxurl, method: 'POST', data: { action: 'dgwt_wcas_settings_search_terms', query: query, type: type, _wpnonce: nonce }, error: function () { callback(); }, success: function (res) { callback(res.data); } }); } }; }; Vue.component('dgwt-wcas-rule', { template: '#dgwt-wcas-settings-filters-rules-rule', components: { Selectize }, props: ['securitynonce', 'rule', 'rules', 'index'], data() { return { isSelectActive: true, } }, computed: { ruleValue(value) { return this.rule.group; }, }, watch: { rule: { handler: function () { this.$emit('update:rule', this.index); }, deep: true, }, ruleValue() { // Reset values on group change var vm = this; this.$emit('change:group', this.index); this.isSelectActive = false; setTimeout(function () { vm.isSelectActive = true; }, 0); }, }, methods: { deleteRule() { this.$emit('delete:rule', this.index) }, getSelectizeSettings(type) { var options = (typeof dgwt_wcas_filters_rules_selected_options[type] === 'undefined') ? [] : dgwt_wcas_filters_rules_selected_options[type]; return productSearchSettings({nonce: this.securitynonce, type: type, options: options}); }, }, }); var FiltersRules = new Vue({ el: '#dgwt-wcas-settings-filters-rules', components: { Selectize }, data() { return { rules: [] } }, mounted() { try { const rules = JSON.parse(this.$refs['dgwt-wcas-settings-filters-rules-ref'].value); $.each(rules, function (index, rule) { rules[index].key = Math.random(); }); this.rules = rules; } catch (e) { } this.updateInput(); }, methods: { addRule() { this.rules.push({group: '', values: [], key: Math.random()}); this.updateInput(); }, changeGroup(index) { this.rules[index].values = []; this.updateInput(); }, deleteRule(index) { this.rules = this.rules.filter(function (item, itemIndex) { return itemIndex !== index; }); this.updateInput(); }, updateInput() { const rules = JSON.parse(JSON.stringify(this.rules)); this.$refs['dgwt-wcas-settings-filters-rules-ref'].value = JSON.stringify(rules.map(function (rule) { if (typeof (rule['key'] !== 'undefined')) { delete (rule['key']); } return rule; })); } }, }); } }; function automateSettingsColspan() { var $el = $('.js-dgwt-wcas-sgs-autocolspan'); if ($el.length > 0) { $el.find('td').attr('colspan', 2); } } function moveOuterBorderOption() { var $elToMove = $('.js-dgwt-wcas-settings-margin-nob'); if ($elToMove.length > 0) { $elToMove.each(function () { var $wrapp = $(this).find('td .dgwt-wcas-fieldset'); if ($wrapp.length > 0) { var $parent = $(this).prev('.js-dgwt-wcas-settings-margin'); if ($parent.length > 0) { var classList = $(this).attr('class').split(/\s+/); var className = ''; $.each(classList, function (index, item) { if (item.indexOf('js-dgwt-wcas-cbtgroup-') !== -1) { className = item; } }); var $clone = $wrapp.clone(true, true); $clone.addClass('dgwt-wcas-settings-margin-nob'); if (className) { $clone.addClass(className); } $clone.appendTo($parent.find('td')); $(this).remove(); } } }); } } $(document).ready(function () { moveOuterBorderOption(); RADIO_SETTINGS_TOGGLE.init(); CHECKBOX_SETTINGS_TOGGLE.init(); CONDITIONAL_LAYOUT_SETTINGS.init(); automateSettingsColspan(); AJAX_BUILD_INDEX.init(); SELECTIZE.init(); TOOLTIP.init(); ADVANCED_SETTINGS.init(); TROUBLESHOOTING.init(); MOVE_OPTIONS.init(); CHECKBOX_SETTINGS_TOGGLE_SIBLING.init(); STATS_INTERFACE.init(); SETTINGS_FILTERS_RULES.init(); window.DGWT_WCAS_SEARCH_PREVIEW.init(); }); })(jQuery);