oont-contents/plugins/webappick-product-feed-for-woocommerce/admin/js/woo-feed-admin.js
2025-03-31 21:42:48 +02:00

1713 lines
53 KiB
JavaScript

// noinspection JSUnresolvedletiable
/**!
* WooFeed Scripts
* @version 3.3.6
* @package WooFeed
* @copyright 2020 WebAppick
*
*/
/* global ajaxurl, wpAjax, postboxes, pagenow, alert, deleteUserSetting, typenow, adminpage, thousandsSeparator, decimalPoint, isRtl */
// noinspection JSUnresolvedVariable
(function ($, window, document, wpAjax, opts) {
"use strict";
/**
* All of the code for your admin-facing JavaScript source
* should reside in this file.
*
* Note: It has been assumed you will write jQuery code here, so the
* $ function reference has been prepared for usage within the scope
* of this function.
*
* This enables you to define handlers, for when the DOM is ready:
*/
/**
* disable element utility
*
* @since 3.1.9
*
* @param {*} status
* @returns {$|HTMLElement}
*/
$.fn.disabled = function (status) {
$(this).each(function () {
let self = $(this),
prop = 'disabled';
if (typeof self.prop(prop) !== 'undefined') {
self.prop(prop, status === void 0 || status === true);
} else {
!0 === status ? self.addClass(prop) : self.removeClass(prop);
}
});
return self; // method chaining
};
/**
* Check if a HTMLElement or jQuery is disabled
*/
$.fn.isDisabled = function () {
let self = $(this),
prop = 'disabled';
return typeof self.prop(prop) !== 'undefined' ? self.prop(prop) : self.hasClass(prop);
};
/**
* Clear Tooltip for clip board js
* @param {Object} event
*/
const clearTooltip = (event) => {
$(event.currentTarget).removeClass((index, className) => (className.match(/\btooltipped-\S+/g) || []).join(' ')).removeClass('tooltipped').removeAttr('aria-label');
};
const showTooltip = (elem, msg) => {
$(elem).addClass('tooltipped tooltipped-s').attr('aria-label', msg);
};
const fallbackMessage = (action) => {
let actionMsg,
actionKey = action === 'cut' ? 'X' : 'C';
if (/iPhone|iPad/i.test(navigator.userAgent)) {
actionMsg = 'No support :(';
} else if (/Mac/i.test(navigator.userAgent)) {
actionMsg = 'Press ⌘-' + actionKey + ' to ' + action;
} else {
actionMsg = 'Press Ctrl-' + actionKey + ' to ' + action;
}
return actionMsg;
};
/**
* Alias of jQuery.extend()
* @param {Object} _default
* @param {Object} _args
*/
const extend = (_default, _args) => $.extend(true, {}, _default, _args);
/*
* Handles product attributes
*
* @since 4.4.18
* */
class WooFeedCustomFields {
constructor(field, status, isTaxonomy) {
this.productCustomFields(field, status, isTaxonomy);
}
cacheClear() {
let data = {
action: 'woo_feed_product_attribute_cache_remove',
nonce: wpf_ajax_obj.ajax.nonce,
};
$.ajax({
method: 'POST',
url: wpf_ajax_obj.wpf_ajax_url,
data
});
}
productCustomFields(field, status = false, isTaxonomy) {
let data = {
action: 'woo_feed_custom_fields_status_change',
nonce: wpf_ajax_obj.ajax.nonce,
field,
status,
isTaxonomy
};
$.ajax({
method: 'POST',
url: wpf_ajax_obj.wpf_ajax_url,
data,
success: (response) => {
if (response.success) {
this.cacheClear();
} else {
console.log(response);
}
$('#' + field + '-switcher').closest('td').find('.switch-loader').hide();
}
});
}
}
/*
* Handles product categories
*
* @since 4.4.39
* */
class WooFeedMapCategories {
wooFeed_get_google_categories() {
wpAjax.send('get_google_categories', {
type: 'GET',
data: {
_ajax_nonce: opts.nonce,
action: "get_google_categories",
// provider: provider
}
}).then(function (response) {
$('.selectize-google-category').selectize({
valueField: 'value',
labelField: 'text',
placeholder: 'Select a category',
searchField: ['value', 'text'],
options: response,
render: {
option: (data, escape) => `<div class="item wapk-selectize-item">${escape(data.value + ' - ' + data.text)}</div>`,
item: (data, escape) => `<div class="item wapk-selectize-item">${escape(data.value + ' - ' + data.text)}</div>`
}
});
//remove spinner element
$('.woo-feed-cat-map-spinner').remove();
}).fail(helper.ajax_fail);
}
wooFeed_get_facebook_categories() {
// get facebook categories
wpAjax.send('get_facebook_categories', {
type: 'GET',
data: {
_ajax_nonce: opts.nonce,
action: "get_facebook_categories",
// provider: provider
}
}).then(function (response) {
$('.selectize-google-category').selectize({
valueField: 'value',
labelField: 'text',
placeholder: 'Select a Facebook category',
searchField: ['value', 'text'],
options: response,
render: {
option: (data, escape) => `<div class="item wapk-selectize-item">${escape(data.value + ' - ' + data.text)}</div>`,
item: (data, escape) => `<div class="item wapk-selectize-item">${escape(data.value + ' - ' + data.text)}</div>`
}
});
//remove spinner element
$('.woo-feed-cat-map-spinner').remove();
}).fail(helper.ajax_fail);
}
}
let $copyBtn,
clipboard,
googleCategories,
facebookCategories,
helper = {
in_array: (needle, haystack) => {
try {
return haystack.indexOf(needle) !== -1;
} catch (e) {
return false;
}
},
selectize_render_item: (data, escape) => `<div class="item wapk-selectize-item">${escape(data.text)}</div>`, // phpcs:ignore WordPressVIPMinimum.JS.StringConcat.Found,
ajax_fail: e => {
console.warn(e);
alert(e.hasOwnProperty('statusText') && e.hasOwnProperty('status') ? opts.ajax.error + '\n' + e.statusText + ' (' + e.status + ')' : e);
},
/**
* Initialize Sortable
* @param {$|HTMLElement} el
* @param {object} config
* @param {int|boolean} column
* @param {function} onDrop
* @return {$|HTMLElement}
*/
sortable: (el, config, column, onDrop) => {
return (el || $('.sorted_table')).each(function () {
let self = $(this),
column_count = self.find('tbody > tr:eq(0) > td').length || column || 9;
self.wf_sortable(extend({
containerSelector: 'table',
itemPath: '> tbody',
itemSelector: 'tr',
handle: 'i.wf_sortedtable',
placeholder: `<tr class="placeholder"><td colspan="${column_count}"></td></tr>`,
onDrop: ($item, container, _super, event) => {
$item.removeClass(container.group.options.draggedClass).removeAttr('style');
$("body").removeClass(container.group.options.bodyClass);
// var numb = $item.find(".wf_mattributes").attr("name").replace(/\D/g, "");
$item.find("input.wf_attributes").attr("name", "default[" + numb + "]");
if (onDrop && 'function' === typeof (onDrop)) {
onDrop($item, container, _super, event);
}
},
}, config));
});
},
selectize: (el, config) => {
return (el || $('select.selectize')).not('.selectized').not('.selectize-google-category').each(function () {
let self = $(this);
self.selectize(extend({
create: self.data('create') || false,
plugins: self.data('plugins') ? self.data('plugins').split(',').map(function (s) {
return s.trim();
}) : [],
//['remove_button'],
render: {
item: helper.selectize_render_item
}
}, config));
});
},
fancySelect: (el, config) => {
return (el || $('select.fancySelect')).not('.FancySelectInit').each(function () {
let self = $(this);
self.fancySelect(extend({
maxItemShow: 3
}, config));
});
},
reindex_config_table: () => {
$('#table-1').find('tbody tr').each((x, el) => {
$(el).find('[name]').each((x1, el) => {
$(el).attr('name', $(el).attr('name').replace(/(\[\d\])/g, `[${x}]`));
});
});
},
common: () => {
helper.sortable($('.sorted_table'), {}, 9, helper.reindex_config_table);
helper.selectize();
helper.fancySelect($('.outputType'));
// Init fancy select after getting output_types from API in new UI.
wp.hooks.addAction('init_fancy_select', 'fancy_select', function () {
let data = helper.fancySelect($('.ctx-outputType'));
helper.fancySelect($('.ctx-postStatus'));
});
// wp.hooks.addAction('test_select_add', 'test', function (options) {
// let fancySelect = $('.my-select');
// // fancySelect.fancySelect();
// // fancySelect.append(options);
// // fancySelect.trigger('update.fs');
//
// fancySelect.fancySelect({
// optionTemplate: function(optionEl) {
// return optionEl.text() + '<div class="icon-' + optionEl.data('icon') + '"></div>';
// }
// }
// });
//
// });
},
/**
* Set locale storage data for CTX Feed
* @param dataName
* @param data
* @param shouldStringify
* @param addToParent
* @param parentName
*/
setLocalStorage: (dataName, data, shouldStringify = true, addToParent = true, parentName = 'ctxFeedData') => {
if (shouldStringify) {
data = JSON.stringify(data);
}
if (addToParent) {
let prevData = window.localStorage.getItem(parentName);
if (null !== prevData) {
prevData = JSON.parse(window.localStorage.getItem(parentName));
prevData[dataName] = data
window.localStorage.setItem(parentName, JSON.stringify(prevData));
} else {
window.localStorage.setItem(parentName, JSON.stringify({[dataName]: data}));
}
} else {
if (shouldStringify) {
window.localStorage.setItem(dataName, JSON.stringify(data));
} else {
window.localStorage.setItem(dataName, data);
}
}
},
/**
* clear localstorage data.
* @param dataName
* @param innerChildren
* @param hasParent
* @param parentName
* @returns {boolean}
* //TODO: if innerChildren has length delete inner children through loop.
*/
clearLocalStorage: (dataName, innerChildren = [], hasParent = true, parentName = 'ctxFeedData') => {
let tempData = null;
let hasDeleted = false;
// if dataName is innerChild of parentName
if (hasParent) {
tempData = window.localStorage.getItem(parentName);
if (!tempData) return hasDeleted;
tempData = JSON.parse(tempData);
// dataName is child of parentName.
if (tempData.hasOwnProperty(dataName)) {
// dataName's has innerChildren.
if (innerChildren.length) {
let data = JSON.parse(tempData[dataName]);
innerChildren.map(child => {
if (data.hasOwnProperty(child)) {
delete data[child]; // delete each innerChild
hasDeleted = true;
}
});
// update dataName with current data.
helper.setLocalStorage(dataName, data);
} else {
delete tempData[dataName];
hasDeleted = true;
// update dataName with current data.
helper.setLocalStorage(dataName, null);
}
}
} else {
window.localStorage.removeItem(dataName);
hasDeleted = true;
}
return hasDeleted;
},
},
// helper functions
feedEditor = {
/**
* The Editor Form Elem.
* @type {$|HTMLElement}
*/
form: null,
/**
* Initialize The Feed Editor {Tabs...}
* @returns {void}
*/
init: function () {
let self = this;
self.form = $('.generateFeed');
if (!self.form.length) return;
helper.common();
// noinspection JSUnresolvedVariable
$(document).trigger('feed_editor_init');
$(document).trigger(new jQuery.Event('feedEditor.init', {
target: this.form
}));
},
/**
* Render Merchant info ajax response and handle allowed feed type for selected merchant
* @param {$|HTMLElement} merchantInfo jQuery dom object
* @param {$|HTMLElement} feedType jQuery dom object
* @param {Object} r ajax response object
*/
renderMerchantInfo: function (merchantInfo, feedType, r) {
for (let k in r) {
if (r.hasOwnProperty(k)) {
merchantInfo.find('.merchant-info-section.' + k + ' .data').html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
if ('feed_file_type' === k) {
(function () {
let types = r[k].split(",").map(function (t) {
return t.trim().toLowerCase();
}).filter(function (t) {
// noinspection JSUnresolvedVariable
return t !== '' && t !== opts.na.toLowerCase();
});
if (types.length) {
feedType.find('option').removeAttr('selected').each(function () {
let opt = $(this);
opt.val() && !helper.in_array(opt.val(), types) ? opt.disabled(!0) : opt.disabled(!1);
});
if (types.length === 1) feedType.find('option[value="' + types[0] + '"]').attr('selected', 'selected');
} else feedType.find('option').disabled(!1);
})();
}
}
}
merchantInfo.find('.spinner').removeClass('is-active');
feedType.disabled(!1);
feedType.trigger('change');
/**
* Triggers after merchant configuration is fetched & loaded
* */
$(document).trigger('woo_feed_config_loaded');
feedType.parent().find('.spinner').removeClass('is-active');
},
/**
* Render Feed Template Tabs and settings while creating new feed.
* @param {$|HTMLElement} feedForm feed from query dom object
* @param {object} r merchant template ajax response object
*/
renderMerchantTemplate: function (feedForm, r) {
let _loop = function _loop(k) {
if (r.hasOwnProperty(k)) {
if ('tabs' === k) {
// noinspection JSUnresolvedFunction
feedForm.html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
} else {
let contentSettings = $('[name="' + k + '"]');
if (contentSettings.length) {
contentSettings.each(function () {
let elem = $(this);
if (elem.is('select')) {
elem.find('[value="' + r[k] + '"]').prop('selected', true);
} else if ((elem.is('[type=checkbox]') || elem.is('[type=radio]')) && elem.val() === r[k]) {
elem.prop('checked', true);
} else {
elem.val(r[k]); // type=text
}
}).trigger('change');
}
}
}
};
for (let k in r) {
_loop(k);
}
feedEditor.init();
}
},
// Feed Editor Table
merchantInfoCache = [],
merchantTemplateCache = [],
tooltip = () => {
// Tooltip only Text
$('.wfmasterTooltip')
.hover(function () {
// Hover over code
let self = $(this), title = self.attr('wftitle');
self.data('tipText', title).removeAttr('wftitle');
$('<p class="wftooltip"></p>').text(title).appendTo('body').fadeIn('slow');
}, function () {
// Hover out code
let self = $(this);
self.attr('wftitle', self.data('tipText'));
$('.wftooltip').remove();
})
.mousemove(function (e) {
$('.wftooltip').css({
top: e.pageY + 10,
left: e.pageX + 20
});
});
},
clip = () => {
$copyBtn = $('.toClipboard');
if (!ClipboardJS.isSupported() || /iPhone|iPad/i.test(navigator.userAgent)) {
$copyBtn.find('img').hide(0);
} else {
$copyBtn.each(function () {
$(this).on('mouseleave', clearTooltip).on('blur', clearTooltip);
});
clipboard = new ClipboardJS('.toClipboard');
clipboard.on('error', function (event) {
showTooltip(event.trigger, fallbackMessage(event.action));
}).on('success', function (event) {
showTooltip(event.trigger, 'Copied');
});
}
};
/**
* Feed Generator Module
*/
class feedGenerator {
/**
* Constructor
* @constructor
*/
constructor() {
this._feed = opts.generator.feed; // wf_config+xxxx
this._limit = opts.generator.limit;
this._progress = 0;
this._timer = null;
this._color = false;
// batch info
this._total_batch = 0;
this._current_batch = 0;
this._product_ids = [];
this._progress_per_batch = 0;
this._refresh = true;
// noinspection JSUnresolvedVariable
this._regenerate = opts.generator.regenerate;
window.isRegenerating = false;
this._all_btn = $('.wpf_regenerate');
this._current_btn = $(`#${this._feed.replace('wf_config', 'wf_feed_')}`);
this._current_btn_label = '';
}
/**
* Init Hooks (Event)
* @return {feedGenerator}
*/
init() {
let self = this;
if ('' !== this._feed && this._regenerate && false === window.isRegenerating) {
this.generate();
}
//thickbox body add feed plugin class to make it unique and custom style
let current_page_query = window.location.search;
let params = new URLSearchParams(current_page_query);
let page_name = params.get("page");
if ("webappick-manage-feeds" === page_name) {
$('body').addClass('woo-import-popup-body');
}
$(document).on('click', '.woo-feed-campaign-close-button', function (event) {
event.preventDefault();
$(this).parent('.woo-feed-promotion').hide();
let condition = $(this).data('condition');
if (1 === condition) {
wpAjax.post('woo_feed_hide_promotion', {
_ajax_nonce: opts.nonce,
condition: condition,
}).then(response => {
self._log(response);
}).fail(error => {
self._log(error);
self._updateProgressStatus(error.message);
self._color = 'red';
});
}
});
$(document).on('click', '.wpf_regenerate', function (event) {
event.preventDefault();
self._current_btn = $(this);
if (self._current_btn.hasClass('disabled') || window.isRegenerating === true) return;
self._feed = self._current_btn.attr('id').replace('wf_feed_', 'wf_config');
if ('' !== self._feed) {
self.generate();
}
});
return this;
}
_block_button() {
if (this._all_btn.length) {
this._all_btn.addClass('disabled');
}
if (this._current_btn.length) {
this._current_btn.find('span').addClass('wpf_spin reverse_spin');
this._current_btn_label = this._current_btn.attr('title');
// noinspection JSUnresolvedVariable
this._current_btn.attr('aria-label', opts.regenerate).attr('title', opts.regenerate);
}
}
_unblock_button() {
if (this._all_btn.length) {
this._all_btn.removeClass('disabled');
}
if (this._current_btn.length) {
this._current_btn.find('span').removeClass('wpf_spin');
this._current_btn.find('span').removeClass('reverse_spin');
this._current_btn.attr('aria-label', this._current_btn_label).attr('title', this._current_btn_label);
}
}
/**
* Generate Feed
* @return void
*/
generate() {
let self = this;
window.isRegenerating = true;
this._block_button();
this._resetProgressBar();
this._progressBarActive();
this._log('Counting Total Products');
this._updateProgressStatus('Fetching products.');
this._get_product_ids().then(response => {
this._progress = 10;
self._log({response});
if (response.success) {
self._log(`Total ${response.total} Products found.`);
self._product_ids = response.product;
self._total_batch = this._product_ids.length;
self._current_batch = 0;
self._progress_per_batch = (90 - this._progress) / this._total_batch;
self._process_batch();
self._updateProgressStatus('Processing Products...');
} else {
self._updateProgressStatus(response.data.message);
}
}).fail(error => {
self._log(error);
self._updateProgressStatus(error.message);
self._color = 'red';
setTimeout(function () {
self._stopProgressBar();
self._unblock_button();
}, 1500);
});
}
/**
* Get Product Ids
* @returns {$.promise}
* @private
*/
_get_product_ids() {
this._progress = 5;
return wpAjax.post('get_product_information', {
_ajax_nonce: opts.nonce,
feed: this._feed,
limit: this._limit,
});
}
/**
* Run the Batch
* @private
*/
_process_batch() {
let self = this;
let status = `Processing Batch ${this._current_batch + 1} of ${this._total_batch}`;
this._updateProgressStatus(status);
this._log(status);
wpAjax.post('make_batch_feed', {
_ajax_nonce: opts.nonce,
feed: this._feed,
products: this._product_ids[this._current_batch],
loop: this._current_batch,
}).then(response => {
self._current_batch++;
self._log(`Batch ${self._current_batch} Completed`);
self._log(response);
if (self._current_batch < self._total_batch) {
self._process_batch();
self._progress += self._progress_per_batch;
}
if (self._current_batch === self._total_batch) {
self._save_feed_file();
}
}).fail(error => {
self._log(error);
self._updateProgressStatus(error.message);
self._color = 'red';
setTimeout(function () {
self._stopProgressBar();
self._unblock_button();
}, 1500);
});
}
/**
* Save Feed Data from temp to feed file
* @private
*/
_save_feed_file() {
let self = this;
this._log('Saving feed file');
this._updateProgressStatus('Saving feed file');
wpAjax.post('save_feed_file', {
_ajax_nonce: opts.nonce,
feed: this._feed,
}).then(response => {
self._log(response);
self._progress = 100;
if (self._refresh) {
window.location.href = `${opts.pages.list.feed}&link=${response.url}&cat=${response.cat}`;
}
setTimeout(function () {
self._stopProgressBar();
setTimeout(function () {
self._resetProgressBar(true);
self._unblock_button();
}, 3000);
}, 2500);
}).fail(error => {
self._log(error);
self._updateProgressStatus(error.message);
self._color = 'red';
setTimeout(function () {
self._stopProgressBar();
self._unblock_button();
}, 1500);
});
}
/**
* Console log wrapper with debug settings.
* @param data
* @returns {feedGenerator}
* @private
*/
_log(data) {
// noinspection JSUnresolvedVariable
if (opts.wpf_debug) {
console.log(data);
}
return this;
}
/**
* Run the progressbar refresh interval
* @param {int} refreshInterval
* @returns {feedGenerator}
* @private
*/
_progressBarActive(refreshInterval = 0) {
let self = this;
this._toggleProgressBar(true);
this._timer = setInterval(function () {
self._updateProgressBar();
}, refreshInterval || 1000);
return this;
}
/**
* Stop Progressbar
* @returns {feedGenerator}
* @private
*/
_stopProgressBar() {
clearInterval(this._timer);
return this;
}
/**
* Reset Progressbar
* @returns {feedGenerator}
* @private
*/
_resetProgressBar(update) {
this._toggleProgressBar(false);
this._updateProgressStatus('');
clearInterval(this._timer);
this._color = false;
this._timer = null;
this._progress = 0;
if (update) {
this._updateProgressBar();
}
return this;
}
/**
* Show hide the progress bar el
* @param status
* @returns {feedGenerator}
* @private
*/
_toggleProgressBar(status) {
let table = $('#feed_progress_table');
if (status) {
table.show();
} else {
table.hide();
}
return this;
}
/**
* Update Progress bar text status
* @param {string} status
* @returns {feedGenerator}
* @private
*/
_updateProgressStatus(status) {
$('.feed-progress-status').html(status);
return this;
}
_getErrorMessageByCode(error) {
let progress_message = $('.feed-progress-status');
progress_message.css({'color': this._color});
$('.feed-progress-percentage').css({'color': this._color});
$('.wpf_spin').css({'color': this._color});
let message = error.status + ' : ' + error.statusText + '. ';
if (500 === error.status) {
message += "Please increase your PHP max_execution_time. Please <a target='_blank' href='https://webappick.com/docs/woo-feed/faq-for-woocommerce-product-feed/how-to-solve-processing-10-feed-generation-stuck-error/'>read this doc</a>.";
}
this._updateProgressStatus(message);
}
/**
* Update Progress Data
* hooked with setInterval
* @private
*/
_updateProgressBar() {
let percentage = $('.feed-progress-percentage'),
bar = $('.feed-progress-bar-fill'),
_progress = `${Math.round(this._progress)}%`;
bar.css({
width: _progress,
});
percentage.text(_progress);
}
}
// expose to the global scope
window.wf = {
helper: helper,
feedEditor: feedEditor,
generator: feedGenerator,
};
$(window).on('load', function () {
// Template loading ui conflict
if ($(location).attr("href").match(/webappick.*feed/g) !== null) {
$('#wpbody-content').addClass('woofeed-body-content');
}
// ClipBoardJS
clip();
// postbox toggle
postboxes.add_postbox_toggles(pagenow);
// initialize generator
let generator = new feedGenerator();
generator.init();
// noinspection JSUnresolvedVariable
if ('' !== opts.generator.feed && opts.generator.regenerate) {
}
// initialize editor
feedEditor.init();
helper.common(); // Generate Feed Add Table Row
tooltip();
// validate feed editor
$(".generateFeed").validate();
// document events
$(document)
.on('blur', 'input[name="wfDAttributeName"]', function (e) {
e.preventDefault();
let attr_name = $(this).val();
attr_name = attr_name.toLowerCase();
attr_name = attr_name.split(' ').join('_');
$('#wfDAttributeCode').val(attr_name);
})
.on('click', '[data-toggle_slide]', function (e) {
e.preventDefault();
$($(this).data('toggle_slide')).slideToggle('fast');
})
// XML Feed Wrapper
.on('click', '#wf_newRow', function () {
let tbody = $('#table-1 tbody'),
template = $('#feed_config_template').text().trim().replace(/__idx__/g, tbody.find('tr').length);
tbody.append(template);
helper.fancySelect($('.outputType'));
helper.fancySelect($('.ctx-outputType'));
})
// feed delete alert.
.on('click', '.single-feed-delete', function (event) {
event.preventDefault();
// noinspection JSUnresolvedVariable
if (confirm(opts.form.del_confirm)) {
window.location.href = $(this).attr('val');
}
})
// clear cache data.
.on('click', '.wf_clean_cache_wrapper', function (event) {
event.preventDefault();
var nonce = $('.woo-feed-clean-cache-nonce').val();
var loader = $('.woo-feed-cache-loader');
var types = ["woo_feed_attributes", "woo_feed_category_mapping", "woo_feed_dynamic_attributes", "woo_feed_attribute_mapping", "woo_feed_wp_options"];
//show loader
loader.show();
for (let i = 0; i < types.length; i++) {
// passed cache nonce
wpAjax.post('clear_cache_data', {
_ajax_clean_nonce: nonce,
type: types[i]
}).then(function (response) {
if (response.success) {
//hader notice dismiss action
wpAjax.post('pressmodo_dismiss_notice', {
'id': types[i],
'nonce': response.nonce
});
loader.hide(); //hide loader
location.reload();
}
}).fail(function () {
console.log('something wrong');
});
}
})// Copy Status
.on('click', '.ctx-notice-cache-clear', function (event) {
event.preventDefault();
var nonce = $(this).data('id');
console.log(nonce);
var notificationLoader = $('.loadingio-spinner-reload-5t7io14g51q');
var clickedId_type = $(this).attr('id');
//show loader
notificationLoader.show();
var cache_types = ["woo_feed_attributes", "woo_feed_category_mapping", "woo_feed_dynamic_attributes", "woo_feed_attribute_mapping", "woo_feed_wp_options"];
helper.clearLocalStorage('options', ['product_attributes']);
for (let i = 0; i < cache_types.length; i++) {
// passed cache nonce
wpAjax.post('clear_cache_data', {
_ajax_clean_nonce: nonce,
type: cache_types[i]
}).then(function (response) {
if (response.success) {
//hader notice dismiss action
wpAjax.post('pressmodo_dismiss_notice', {
// 'id': 'woo_feed_attributes',
'id': cache_types[i],
'nonce': response.nonce
});
notificationLoader.hide(); //hide loader
location.reload();
}
}).fail(function () {
console.log('something wrong');
});
}
})// Copy Status
.on('click', '#woo-feed-copy-status-btn', function (event) {
event.preventDefault();
let button = $('#woo-feed-copy-status-btn');
let status_area = $('#woo-feed-status-area');
button.val('Copied');
status_area.css('visibility', 'visible');
status_area.select();
document.execCommand('copy');
})
// feed value dropdown change.
.on('change', '.ctx-wf_attr.ctx-wf_attributes', function (event) {
event.preventDefault();
// $('.fancy-picker-picked').trigger("click"); // trigger fancy select box clicked
// TODO need to match with new UI
// price attributes
var price_attributes = ['price', 'current_price', 'sale_price', 'price_with_tax', 'current_price_with_tax', 'sale_price_with_tax', 'shipping_cost'];
// current value
var current_attribute_value = $(this).val();
// var outputSelect = $(this).parents('tr').find('.outputType');
var outputSelect = $(this).parents('tr').find('.ctx-outputType');
// var fancyOption = $(this).parents('tr').find('.fancy-picker-content .fancy-picker-option');
var fancyOption = $(this).parents('tr').find('.fancy-picker-content');
let arr = [
'<div class="fancy-picker-option" data-value="0">Select Attribute</div>',
'<div class="fancy-picker-option selected" data-value="1"> Default </div>',
'<div class="fancy-picker-option" data-value="2"> Strip Tags </div>',
'<div class="fancy-picker-option" data-value="3"> UTF-8 Encode </div>',
'<div class="fancy-picker-option" data-value="4"> htmlentities </div>',
'<div class="fancy-picker-option" data-value="5"> Integer </div>',
'<div class="fancy-picker-option" data-value="6"> Price </div>',
'<div class="fancy-picker-option" data-value="7"> Rounded Price </div>',
'<div class="fancy-picker-option" data-value="8"> Remove Space </div>',
'<div class="fancy-picker-option" data-value="9"> CDATA </div>',
'<div class="fancy-picker-option" data-value="10"> Remove Special Character </div>',
'<div class="fancy-picker-option" data-value="11"> Remove ShortCodes </div>',
'<div class="fancy-picker-option" data-value="12"> ucwords </div>',
'<div class="fancy-picker-option" data-value="13"> ucfirst </div>',
'<div class="fancy-picker-option" data-value="14"> strtoupper </div>',
'<div class="fancy-picker-option" data-value="15"> strtolower </div>',
'<div class="fancy-picker-option" data-value="16"> urlToSecure </div>',
'<div class="fancy-picker-option" data-value="17"> urlToUnsecure </div>',
'<div class="fancy-picker-option" data-value="18"> only_parent </div>',
'<div class="fancy-picker-option" data-value="19"> parent </div>',
'<div class="fancy-picker-option" data-value="20"> parent_if_empty </div>',
'<div class="fancy-picker-option" data-value="21"> </div>',
'<div class="fancy-picker-option" data-value="22"> </div>'
];
arr.map(item => {
fancyOption.append(item);
});
var fancyDataPicker = $(this).parents('tr').find('.fancy-picker-data');
var selectIf, selectKey;
var currency;
// when any attribute is selected, pick the key
if (price_attributes.includes(current_attribute_value)) {
// when select any price attribute
selectIf = 'for_price';
selectKey = "Price";
} else if ("" !== current_attribute_value && -1 !== current_attribute_value.indexOf('wf_taxo')) {
// when select any custom taxonomy
selectIf = 'for_custom_taxo';
selectKey = "parent_if_empty";
} else {
selectIf = 'for_all';
selectKey = 'Default';
}
// remove selected class from old selected option
$(fancyOption).find('.fancy-picker-option').removeClass('selected');
// when value dropdown is selected as price or any custom taxonomy
if (selectIf === 'for_custom_taxo' || selectIf === 'for_price') {
// update "Option Type" when select key matches
$(fancyOption).find('.fancy-picker-option').each(function () {
if (selectKey === $(this).text().trim()) {
fancyDataPicker.html(`<span>${selectKey}</span>`);
outputSelect.find("option").text(selectKey);
outputSelect.find("option").val($(this).data("value"));
$(this).addClass('selected');
}
});
if ("for_price" === selectIf) {
var feedCurrency = $('#feedCurrency').val();
if ("undefined" !== typeof feedCurrency && null !== feedCurrency) {
currency = feedCurrency;
} else {
currency = wpf_ajax_obj.woocommerce.currency;
}
//for price add currency to the suffix
$(this).closest("tr").find("td:eq(5) input").val(" " + currency);
}
} else {
fancyOption.each(function () {
if (selectKey === $(this).text()) {
$(this).addClass('selected');
fancyDataPicker.text(selectKey);
outputSelect.find("option").text(selectKey);
outputSelect.find("option").val($(this).data("value"));
}
});
$(this).closest("tr").find("td:eq(5) input").val("");
}
})
// bulk delete alert.
.on('click', '#doaction, #doaction2', function () {
// noinspection JSUnresolvedVariable
return confirm(opts.form.del_confirm_multi);
})
// Generate Feed Table Row Delete
.on('change', '.dType', function () {
let self = $(this),
type = self.val(),
row = self.closest('tr');
if (type === 'pattern') {
row.find('.value_attribute').hide();
row.find('.value_pattern').show();
} else if (type === 'attribute') {
row.find('.value_attribute').show();
row.find('.value_pattern').hide();
} else if (type === 'remove') {
row.find('.value_attribute').hide();
row.find('.value_pattern').hide();
}
})
// Generate Feed Form Submit
.on('click', '.delRow', function (e) {
e.preventDefault();
$(this).closest('tr').remove();
helper.reindex_config_table();
})
.on('submit', '#generateFeed', function () {
// Feed Generating form validation
$(this).validate();
if ($(this).valid()) {
$(".makeFeedResponse")
.show()
.html(`<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> ${opts.form.generate}</b>`); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html, WordPressVIPMinimum.JS.StringConcat.Found
}
})
// Generate Update Feed Form Submit
.on('submit', '#updatefeed', function (e, data) {
// Feed Generating form validation
$(this).validate();
if ($(this).valid()) {
$(".makeFeedResponse")
.show()
.html(`<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> ${data && data.save ? opts.form.save : opts.form.generate}</b>`); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html, WordPressVIPMinimum.JS.StringConcat.Found
}
})
.on('ready woo_feed_config_loaded', function () {
if ($('#ftpenabled').val() === '0') {
$('.google-merchant-message').hide('slow');
$('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').attr('disabled', 'disabled');
} else {
if ($('#provider').val() === 'google') {
$('.google-merchant-message').show('slow');
} else {
$('.google-merchant-message').hide('slow');
}
$('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').removeAttr('disabled');
}
$('#ftpenabled').on('change', function () {
if ($('#ftpenabled').val() === '0') {
$('.google-merchant-message').hide('slow');
$('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').attr('disabled', 'disabled');
} else {
$('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').removeAttr('disabled');
// Google merchant specific message
if ($('#provider').val() === 'google') {
$('.google-merchant-message').show('slow');
} else {
$('.google-merchant-message').hide('slow');
}
}
});
})
.on('change', '.ftporsftp', function () {
let server = $(this).val(),
status = $('.ssh2_status');
if (server === 'sftp') {
// noinspection JSUnresolvedVariable
status.show().css('color', 'dodgerblue').text(opts.form.sftp_checking);
wpAjax.post('get_ssh2_status', {
_ajax_nonce: opts.nonce,
server: server
}).then(function (response) {
if (response === 'exists') {
// noinspection JSUnresolvedVariable
status.css('color', '#2CC185').text(opts.form.sftp_available);
setTimeout(function () {
status.hide();
}, 1500);
} else {
// noinspection JSUnresolvedVariable
status.show().css('color', 'red').text(opts.form.sftp_warning);
}
}).fail(function (e) {
status.hide();
helper.ajax_fail(e);
});
} else {
status.hide();
}
})
.on('click', '[name="save_feed_config"]', function (e) {
e.preventDefault();
$('#updatefeed').trigger('submit', {
save: true
});
})
// .on('change', '#provider', function (event) {
// event.preventDefault();
//
// let merchant = $(this).val(),
// templateName = $(this).find(':selected').text(),
// name = $('#filename').val(),
// feedType = $("#feedType"),
// feedForm = $("#providerPage"),
// merchantInfo = $('#feed_merchant_info'); // set loading..
//
// // noinspection JSUnresolvedVariable
// feedForm.html('<h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> ' + opts.form.loading_tmpl + '</h3>'); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html, WordPressVIPMinimum.JS.StringConcat.Found
//
// merchantInfo.find('.spinner').addClass('is-active');
// feedType.disabled(!0); // disable dropdown
//
// feedType.parent().find('.spinner').addClass('is-active');
// merchantInfo.find('.merchant-info-section .data').html(''); // remove previous data
//
//
// //:Merchant info now from rest API.
//
// // Get Merchant info for selected Provider/Merchant
// if (merchantInfoCache.hasOwnProperty(merchant)) {
// feedEditor.renderMerchantInfo(merchantInfo, feedType, merchantInfoCache[merchant]);
//
// /**
// * Triggers after merchant configuration is fetched & loaded
// * */
// $(document).trigger('woo_feed_config_loaded');
//
// } else {
// wpAjax.send('woo_feed_get_merchant_info', {
// type: 'GET',
// data: {
// nonce: opts.nonce,
// provider: merchant,
// templateName: templateName
// }
// }).then(function (r) {
// merchantInfoCache[merchant] = r;
// feedEditor.renderMerchantInfo(merchantInfo, feedType, r);
// }).then(function(){
//
// /**
// * Triggers after merchant configuration is fetched & loaded
// * */
// $(document).trigger('woo_feed_config_loaded');
//
// }).fail(helper.ajax_fail);
// } // Get FeedForm For Selected Provider/Merchant
//
// // Merchant info now from rest API.
// if (merchantTemplateCache.hasOwnProperty(merchant)) {
// feedEditor.renderMerchantTemplate(feedForm, merchantTemplateCache[merchant]);
//
// /**
// * Triggers after merchant configuration is fetched & loaded
// * */
// $(document).trigger('woo_feed_config_loaded');
//
// } else {
// wpAjax.post('get_feed_merchant', {
// _ajax_nonce: opts.nonce,
// merchant: merchant
// }).then(function (r) {
// merchantTemplateCache[merchant] = r;
// feedEditor.renderMerchantTemplate(feedForm, r);
// $('#utm_source').val(templateName);
// $('#utm_campaign').val(name);
// //when merchant is bing, change delimiter and enclosure
// if( 'bing' === merchant ) {
// //delimiter value
// $("#delimiter option").removeAttr('selected');
// $("#delimiter option[value=\"tab\"]").attr('selected', 'selected');
//
// //enclosure value
// $("#enclosure option").removeAttr('selected');
// $("#enclosure option[value=\" \"]").attr('selected', 'selected');
// }
//
// //reviewer options hide
// if( 'google_product_review' !== merchant) {
// $('.wf_attributes option[value="reviewer_name"]').hide();
// }
// }).then(function(){
//
// /**
// * Triggers after merchant configuration is fetched & loaded
// * */
// $(document).trigger('woo_feed_config_loaded');
//
// }).fail(helper.ajax_fail);
// }
// })
// Feed Active and Inactive status change via ajax
.on('change', '.woo_feed_status_input', function () {
let self = $(this);
wpAjax.post('update_feed_status', {
_ajax_nonce: opts.nonce,
feedName: self.val(),
status: self[0].checked ? 1 : 0
});
});
// event with trigger
$(document)
.on('change', '[name="is_outOfStock"], [name="product_visibility"]', function () {
let outOfStockVisibilityRow = $('.out-of-stock-visibility');
if ($('[name="is_outOfStock"]:checked').val() === 'n' && $('[name="product_visibility"]:checked').val() === '1') {
outOfStockVisibilityRow.show();
} else {
outOfStockVisibilityRow.hide();
}
})
.on('change', '.attr_type', function () {
// Attribute type selection
let self = $(this),
type = self.val(),
row = self.closest('tr');
if (type === 'pattern') {
row.find('.wf_attr').hide();
row.find('.wf_attr').val('');
row.find('.wf_default').show();
} else {
row.find('.wf_attr').show();
row.find('.wf_default').hide();
row.find('.wf_default').val('');
}
})
.on('change', '.wf_mattributes, .attr_type', function () {
let row = $(this).closest('tr'),
attribute = row.find('.wf_mattributes'),
type = row.find('.attr_type'),
valueColumn = row.find('td:eq(4)'),
provider = $('#provider').val();
// noinspection JSUnresolvedVariable
if (opts.form.google_category.hasOwnProperty(attribute.val()) && type.val() === 'pattern' && helper.in_array(provider, opts.form.google_category[attribute.val()])) {
if (valueColumn.find('select.selectize').length === 0) {
valueColumn.find('input.wf_default').remove();
valueColumn.append('<span class="wf_default wf_attributes"><select name="default[]" class="selectize"></select></span>');
// noinspection JSUnresolvedVariable
valueColumn.append(`<span style="font-size:x-small;"><a style="color: red" href="https://webappick.com/docs/woo-feed/feed-configuration/how-to-map-store-category-with-merchant-category/" target="_blank">${opts.learn_more}</a></span>`);
if (!googleCategories || !facebookCategories) {
valueColumn.append('<span class="spinner is-active" style="margin: 0;"></span>');
}
let select = valueColumn.find('.wf_attributes select');
// noinspection JSUnresolvedVariable
helper.selectize(select, {
preload: true,
placeholder: opts.form.select_category,
load: function load(query, cb) {
if (!googleCategories) {
wpAjax.send('get_google_categories', {
type: 'GET',
data: {
_ajax_nonce: opts.nonce,
action: "get_google_categories",
provider: provider
}
}).then(function (r) {
googleCategories = r;
cb(googleCategories);
valueColumn.find('.spinner').remove();
}).fail(helper.ajax_fail);
} else {
cb(googleCategories);
}
//for facebook product category merchant attribute
if (!facebookCategories && "facebook" === provider && "fb_product_category" === attribute.val()) {
wpAjax.send('get_facebook_categories', {
type: 'GET',
data: {
_ajax_nonce: opts.nonce,
action: "get_facebook_categories",
provider: provider
}
}).then(function (r) {
facebookCategories = r;
cb(facebookCategories);
valueColumn.find('.spinner').remove();
}).fail(helper.ajax_fail);
} else {
cb(facebookCategories);
}
}
});
}
} else {
if (attribute.val() !== 'current_category' && valueColumn.find('input.wf_default').length === 0) {
valueColumn.find('span').remove();
valueColumn.append('<input autocomplete="off" class="wf_default wf_attributes" type="text" name="default[]" value="">');
if (type.val() !== 'pattern') {
valueColumn.find('input.wf_default').hide();
}
}
}
})
.on('change', '#feedType,#provider', function (e) {
let type = $('#feedType').val(),
provider = $('#provider').val(),
itemWrapper = $('.itemWrapper'),
wf_csv_txt = $('.wf_csvtxt');
// noinspection JSUnresolvedVariable
if (type !== '' && helper.in_array(provider, opts.form.item_wrapper_hidden)) {
itemWrapper.hide();
}
// TODO check with new UI
//when feed type is changed
if ('feedType' === e.target.id) {
if (type === 'csv' || type === 'txt' || type === 'tsv') {
wf_csv_txt.show();
itemWrapper.hide();
if ('tsv' === type) {
$('#delimiter option:last').prop("selected", "selected");
} else if ('csv' === type) {
$('#delimiter option:first').prop("selected", "selected");
}
} else if ('xml' === type && "custom" === provider) {
itemWrapper.show();
wf_csv_txt.hide();
} else if ('json' === type) {
wf_csv_txt.hide();
}
}
// when template is not custom template 1 hide the item wrapper
if ("custom" !== provider) {
itemWrapper.hide();
}
})
.trigger('change');
$(document)
.on('click', '.woofeed-custom-fields [id*="-switcher"]', function () {
$(this).closest('td').find('.switch-loader').show();
let field = $(this).attr('id').split('-')[0],
isTaxonomy = $(this).data('taxonomy'),
status = $(this).prop('checked');
new WooFeedCustomFields(field, status, isTaxonomy);
})
// Remove sticky cart on feature page
.ready(function () {
var s = $(".wapk-feed-buy-now-container");
$(window).scroll(function () {
var windowpos = $(window).scrollTop();
if (windowpos <= 5000) {
s.addClass("fixed");
} else {
s.removeClass("fixed");
}
});
});
});
$(document)
.on('click', '#woo-feed-debug-log-download', function (e) {
e.preventDefault();
$("<a />", {
download: new Date() + ".log",
href: URL.createObjectURL(
new Blob([$("#woo-feed-debug-log").val()], {
type: "text/plain"
})),
}).appendTo("body")[0].click();
})
// TODO working on new UI
.on('keyup', '#filename', function () {
var name = $('#filename').val();
$('#utm_campaign').val(name);
})
.on('click', '.wf-tab-name', function (e) {
$('.wf-tab-name.activate').removeClass('activate');
$(this).addClass('activate');
let for_attr = $(this).attr('for');
$('.wf_tabs li.active').removeClass('active');
$('.wf_tabs .wf-tab-content#' + for_attr).parent().addClass('active');
})
.on('change', '#category-mapping-form #providers', function () {
var provider = $(this).find(':selected').val(),
googleMap = ['google', 'facebook', 'pinterest', 'bing', 'bing_local_inventory', 'snapchat', 'tiktok'];
//add snipper element
$('.woo-feed-category-mapping-config-table').prepend('<div class="woo-feed-cat-map-spinner"><h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> Loading Mapping...</h3></div>');
if (googleMap.indexOf(provider) !== -1) {
$('input[id*="cat_mapping_"]').css('display', 'none');
$('.wf_default.wf_attributes').css('display', 'block').css('width', '100%');
var cat_init = new WooFeedMapCategories();
if ("facebook" === provider) {
cat_init.wooFeed_get_facebook_categories();
} else {
cat_init.wooFeed_get_google_categories();
}
} else {
$('input[id*="cat_mapping_"]').css('display', 'block');
$('.wf_default.wf_attributes').css('display', 'none').css('width', '100%');
$('.woo-feed-category-mapping-config-table .woo-feed-cat-map-spinner').css('display', 'none');
}
})
// Copy parent category ids to child categories.
.on('click', 'span[id*="cat-map-"]', function (e) {
e.preventDefault();
var providerName = $('#category-mapping-form #providers').val(),
googleMap = ['google', 'facebook', 'pinterest', 'bing', 'bing_local_inventory', 'snapchat', 'tiktok'],
catId = $(this).attr('id').replace(/[^\d.]/g, ''),
groupId = 'group-child-' + catId;
if (googleMap.indexOf(providerName) !== -1) {
var catField = $(this).parents('tr').find('.selectized').val();
if (catField) {
$('.' + groupId).parents('tr').find('select').each(function (i, v) {
$(v).data('selectize').setValue(catField);
});
}
} else {
var value = $('#cat_mapping_' + catId).val();
$('.' + groupId).parents('tr').find('input').val(value);
}
});
$(document).ready(function () {
var provider = $("#providers").val(),
cat_init = new WooFeedMapCategories(),
url = new URL(window.location.href),
cat_mapping_action = url.searchParams.get("action");
if ("edit-mapping" === cat_mapping_action) {
$('.woo-feed-category-mapping-config-table').prepend('<div class="woo-feed-cat-map-spinner"><h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> Loading Mapping...</h3></div>');
if ("facebook" === provider) {
cat_init.wooFeed_get_facebook_categories();
} else {
cat_init.wooFeed_get_google_categories();
}
}
});
/*
* Issue fix for feed edit page unsupported `Feed Type` not disabling
* // TODO need to move react
* @since 4.4.22
* */
$(document).on("feed_editor_init", function () {
let types = $('.merchant-info-section.feed_file_type .data').html().split(",").map(function (t) {
return t.trim().toLowerCase();
});
let feedType = $("#feedType");
if (types.length) {
feedType.find('option').each(function () {
let opt = $(this);
opt.val() && !helper.in_array(opt.val(), types) ? opt.disabled(!0) : opt.disabled(!1);
});
if (types.length === 1) feedType.find('option[value="' + types[0] + '"]').attr('selected', 'selected');
} else feedType.find('option').disabled(!1);
});
/**
* Automatically adding postfix for corresponding attribute selection.
* // TODO nee to match with new UI
* @since 4.4.32
*/
$(document).on('ready', function () {
function update_postfix() {
var attribute_list = {
'price': wpf_ajax_obj.woocommerce.currency,
'current_price': wpf_ajax_obj.woocommerce.currency,
'sale_price': wpf_ajax_obj.woocommerce.currency,
'price_with_tax': wpf_ajax_obj.woocommerce.currency,
'current_price_with_tax': wpf_ajax_obj.woocommerce.currency,
'sale_price_with_tax': wpf_ajax_obj.woocommerce.currency,
'weight': wpf_ajax_obj.woocommerce.weight,
'weight_unit': wpf_ajax_obj.woocommerce.weight,
'height': wpf_ajax_obj.woocommerce.dimension,
'length': wpf_ajax_obj.woocommerce.dimension,
'width': wpf_ajax_obj.woocommerce.dimension
};
if (typeof wpf_ajax_obj.feed_rules !== 'undefined' && wpf_ajax_obj.feed_rules !== null) {
var feed_rules = wpf_ajax_obj.feed_rules;
var current_feed_currency = feed_rules.feedCurrency;
}
//get current action name of the page
var queryString = window.location.search;
var urlParams = new URLSearchParams(queryString);
var action = urlParams.get('action');
$('.wf_attr.wf_attributes').each(function (key, value) {
var attribute_value = $(value).val();
var current_Value = $('input[name^="suffix"]').eq(parseInt(key)).val();
if (-1 !== $.inArray(current_Value, [
' ' + wpf_ajax_obj.woocommerce.currency,
' ' + wpf_ajax_obj.woocommerce.weight,
' ' + wpf_ajax_obj.woocommerce.dimension
])) {
$('input[name^="suffix"]').eq(parseInt(key)).val('');
}
$.each(attribute_list, function (_key, _value) {
if (attribute_value === _key) {
_value = null !== current_feed_currency && "undefined" !== typeof current_feed_currency ? current_feed_currency : _value;
if ("undefined" !== action && "edit-feed" !== action) {
$('input[name^="suffix"]').eq(parseInt(key)).val(' ' + _value);
} else {
$('input[name^="suffix"]').eq(parseInt(key)).val(current_Value);
}
}
});
});
$(document).trigger('feedEditor.after.free.postfix.update');
}
$(document).on('feedEditor.init', function () {
let provider = $(this).find(':selected').val(),
googleMap = ['google', 'facebook', 'pinterest', 'bing', 'bing_local_inventory', 'snapchat', 'tiktok'];
if (googleMap.indexOf(provider) !== -1) {
update_postfix();
}
});
// If file extension is not .wpf then don't select the file.
$('#wpf_import_file').on('change', function (e) {
let fakePath = e.target.value;
let importFileExtension = fakePath.split("\\").pop();
importFileExtension = importFileExtension.split('.').pop();
if ('wpf' !== importFileExtension) {
e.target.value = '';
alert('Please select a .wpf extension file');
}
});
// Init codemirror if template is special template.
wp.hooks.addAction('init_codemirror', 'codemirror', function () {
let el = document.getElementById('editor_react');
if (el) {
const editor = CodeMirror.fromTextArea(el, {
lineNumbers: true,
mode: "xml",
matchBrackets: true
});
editor.setSize(null, 620);
editor.on('change', function (cm, cObj) {
window.localStorage.setItem('ctx_codemirror', cm.getValue());
});
}
});
});
})(jQuery, window, document, wp.ajax, wpf_ajax_obj);