CTX Feed – WooCommerce Product Feed Manager Plugin - Version 4.3.14

Version Description

(2020-12-28) = * Fixed: Edit page file type issue. * Fixed: Facebook pixel price fatal error.

Download this release

Release Info

Developer wahid0003
Plugin Icon 128x128 CTX Feed – WooCommerce Product Feed Manager Plugin
Version 4.3.14
Comparing to
See all releases

Code changes from version 4.3.13 to 4.3.14

README.txt CHANGED
@@ -1,5 +1,5 @@
1
  === WooCommerce Product Feed for Google, Bing, eBay and Many More ===
2
- Contributors: wahid0003, webappick, mhamudul_hk, shuvo586
3
  Donate link: https://webappick.com
4
  Tags:product feed,woocommerce product feed,google shopping feed,google shopping, XML CSV TXT product feed, Bing feed, Bing product feed, Bing remarking,
5
  Bing Shopping, Buy, comparison shopping engines, comparison shopping websites, CSV product feed, Data Feed, e-commerce, eBay, facebook ads, Facebook Dynamic remarketing,
@@ -8,7 +8,7 @@ Google Product Review feed, product variations, rakuteen, shopping, skroutz, TSV
8
  Requires at least: 3.6
9
  Tested Up To: 5.6
10
  Requires PHP: 5.6
11
- Stable tag: 4.3.13
12
  License: GPLv2 or later
13
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
14
 
@@ -308,6 +308,10 @@ Using pro version:
308
 
309
  == Changelog ==
310
 
 
 
 
 
311
  = 4.3.13 (2020-12-27) =
312
  * Added: Parent Title, Parent URL, Add to cart link, SKU Id attribute.
313
  * Fixed: Category exclude issue solved.
1
  === WooCommerce Product Feed for Google, Bing, eBay and Many More ===
2
+ Contributors: wahid0003, webappick, mhamudul_hk, shuvo586, nayanchamp7
3
  Donate link: https://webappick.com
4
  Tags:product feed,woocommerce product feed,google shopping feed,google shopping, XML CSV TXT product feed, Bing feed, Bing product feed, Bing remarking,
5
  Bing Shopping, Buy, comparison shopping engines, comparison shopping websites, CSV product feed, Data Feed, e-commerce, eBay, facebook ads, Facebook Dynamic remarketing,
8
  Requires at least: 3.6
9
  Tested Up To: 5.6
10
  Requires PHP: 5.6
11
+ Stable tag: 4.3.14
12
  License: GPLv2 or later
13
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
14
 
308
 
309
  == Changelog ==
310
 
311
+ = 4.3.14 (2020-12-28) =
312
+ * Fixed: Edit page file type issue.
313
+ * Fixed: Facebook pixel price fatal error.
314
+
315
  = 4.3.13 (2020-12-27) =
316
  * Added: Parent Title, Parent URL, Add to cart link, SKU Id attribute.
317
  * Fixed: Category exclude issue solved.
admin/js/woo-feed-admin.js CHANGED
@@ -666,6 +666,11 @@
666
  $(".generateFeed").validate();
667
  // document events
668
  $(document)
 
 
 
 
 
669
  .on('click', '[data-toggle_slide]', function(e) {
670
  e.preventDefault();
671
  $($(this).data('toggle_slide')).slideToggle('fast');
@@ -839,7 +844,7 @@
839
  .on('change', '#provider', function (event) {
840
  event.preventDefault();
841
 
842
- if (!$(this).closest('.generateFeed').hasClass('add-new')) return; // only for new feed.
843
 
844
  let merchant = $(this).val(),
845
  feedType = $("#feedType"),
666
  $(".generateFeed").validate();
667
  // document events
668
  $(document)
669
+ .ready(function(e) {
670
+ if ( page_action === 'edit-feed' ) {
671
+ $('#provider').trigger('change');
672
+ }
673
+ })
674
  .on('click', '[data-toggle_slide]', function(e) {
675
  e.preventDefault();
676
  $($(this).data('toggle_slide')).slideToggle('fast');
844
  .on('change', '#provider', function (event) {
845
  event.preventDefault();
846
 
847
+ //if (!$(this).closest('.generateFeed').hasClass('add-new')) return; // only for new feed.
848
 
849
  let merchant = $(this).val(),
850
  feedType = $("#feedType"),
admin/js/woo-feed-admin.min.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}!function(s,a,t,i,c){s.fn.disabled=function(n){return s(this).each(function(){var e=s(this),t="disabled";void 0!==e.prop(t)?e.prop(t,void 0===n||!0===n):!0===n?e.addClass(t):e.removeClass(t)}),self},s.fn.isDisabled=function(){var e=s(this),t="disabled";return void 0!==e.prop(t)?e.prop(t):e.hasClass(t)};function e(e){s(e.currentTarget).removeClass(function(e,t){return(t.match(/\btooltipped-\S+/g)||[]).join(" ")}).removeClass("tooltipped").removeAttr("aria-label")}function r(e,t){s(e).addClass("tooltipped tooltipped-s").attr("aria-label",t)}function o(e,t){return s.extend(!0,{},e,t)}function n(){l=s(".toClipboard"),!ClipboardJS.isSupported()||/iPhone|iPad/i.test(navigator.userAgent)?l.find("img").hide(0):(l.each(function(){s(this).on("mouseleave",e).on("blur",e)}),new ClipboardJS(".toClipboard").on("error",function(e){var t,n;r(e.trigger,(t=e.action,n="cut"===t?"X":"C",/iPhone|iPad/i.test(navigator.userAgent)?"No support :(":/Mac/i.test(navigator.userAgent)?"Press ⌘-"+n+" to "+t:"Press Ctrl-"+n+" to "+t))}).on("success",function(e){r(e.trigger,"Copied!")}))}var l,d,_={in_array:function(e,t){try{return-1!==t.indexOf(e)}catch(e){return!1}},selectize_render_item:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.text),"</div>")},ajax_fail:function(e){console.warn(e),alert(e.hasOwnProperty("statusText")&&e.hasOwnProperty("status")?c.ajax.error+"\n"+e.statusText+" ("+e.status+")":e)},sortable:function(e,n,a,r){return(e||s(".sorted_table")).each(function(){var e=s(this),t=e.find("tbody > tr:eq(0) > td").length||a||9;e.wf_sortable(o({containerSelector:"table",itemPath:"> tbody",itemSelector:"tr",handle:"i.wf_sortedtable",placeholder:'<tr class="placeholder"><td colspan="'.concat(t,'"></td></tr>'),onDrop:function(e,t,n,a){e.removeClass(t.group.options.draggedClass).removeAttr("style"),s("body").removeClass(t.group.options.bodyClass),r&&"function"==typeof r&&r(e,t,n,a)}},n))})},selectize:function(e,t){return(e||s("select.selectize")).not(".selectized").each(function(){var e=s(this);e.selectize(o({create:e.data("create")||!1,plugins:e.data("plugins")?e.data("plugins").split(",").map(function(e){return e.trim()}):[],render:{item:_.selectize_render_item}},t))})},fancySelect:function(e,t){return(e||s("select.fancySelect")).not(".FancySelectInit").each(function(){s(this).fancySelect(o({maxItemShow:3},t))})},reindex_config_table:function(){s("#table-1").find("tbody tr").each(function(n,e){s(e).find("[name]").each(function(e,t){s(t).attr("name",s(t).attr("name").replace(/(\[\d\])/g,"[".concat(n,"]")))})})},common:function(){_.sortable(s(".sorted_table"),{},9,_.reindex_config_table),_.selectize(),_.fancySelect(s(".outputType"))}},f={form:null,init:function(){this.form=s(".generateFeed"),this.form.length&&(_.common(),s(t).trigger(new jQuery.Event("feedEditor.init",{target:this.form})))},renderMerchantInfo:function(n,a,r){function e(e){var t;r.hasOwnProperty(e)&&(n.find(".merchant-info-section."+e+" .data").html(r[e]),"feed_file_type"===e&&((t=r[e].split(",").map(function(e){return e.trim().toLowerCase()}).filter(function(e){return""!==e&&e!==c.na.toLowerCase()})).length?(a.find("option").removeAttr("selected").each(function(){var e=s(this);e.val()&&!_.in_array(e.val(),t)?e.disabled(!0):e.disabled(!1)}),1===t.length&&a.find('option[value="'+t[0]+'"]').attr("selected","selected")):a.find("option").disabled(!1)))}for(var t in r)e(t);n.find(".spinner").removeClass("is-active"),a.disabled(!1),a.trigger("change"),a.parent().find(".spinner").removeClass("is-active")},renderMerchantTemplate:function(n,a){function e(t){if(a.hasOwnProperty(t))if("tabs"===t)n.html(a[t]);else{var e=s('[name="'+t+'"]');e.length&&e.each(function(){var e=s(this);e.is("select")?e.find('[value="'+a[t]+'"]').prop("selected",!0):(e.is("[type=checkbox]")||e.is("[type=radio]"))&&e.val()===a[t]?e.prop("checked",!0):e.val(a[t])}).trigger("change")}}for(var t in a)e(t);f.init()}},u=[],p=[],h=function(){function e(){_classCallCheck(this,e),this._feed=c.generator.feed,this._limit=c.generator.limit,this._progress=0,this._timer=null,this._color=!1,this._total_batch=0,this._current_batch=0,this._product_ids=[],this._progress_per_batch=0,this._refresh=!0,this._regenerate=c.generator.regenerate,a.isRegenerating=!1,this._all_btn=s(".wpf_regenerate"),this._current_btn=s("#".concat(this._feed.replace("wf_config","wf_feed_"))),this._current_btn_label=""}return _createClass(e,[{key:"init",value:function(){var n=this;""!==this._feed&&this._regenerate&&!1===a.isRegenerating&&this.generate();var e=a.location.search;return"webappick-manage-feeds"===new URLSearchParams(e).get("page")&&s("body").addClass("woo-import-popup-body"),s(t).on("click",".woo-feed-campaign-close-button",function(e){e.preventDefault(),s(this).parent(".woo-feed-promotion").hide();var t=s(this).data("condition");1===t&&i.post("woo_feed_hide_promotion",{_ajax_nonce:c.nonce,condition:t}).then(function(e){n._log(e)}).fail(function(e){n._log(e),n._updateProgressStatus(e.message),n._color="red"})}),s(t).on("click",".wpf_regenerate",function(e){e.preventDefault(),n._current_btn=s(this),n._current_btn.hasClass("disabled")||!0===a.isRegenerating||(n._feed=n._current_btn.attr("id").replace("wf_feed_","wf_config"),""!==n._feed&&n.generate())}),this}},{key:"_block_button",value:function(){this._all_btn.length&&this._all_btn.addClass("disabled"),this._current_btn.length&&(this._current_btn.find("span").addClass("wpf_spin reverse_spin"),this._current_btn_label=this._current_btn.attr("title"),this._current_btn.attr("aria-label",c.regenerate).attr("title",c.regenerate))}},{key:"_unblock_button",value:function(){this._all_btn.length&&this._all_btn.removeClass("disabled"),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))}},{key:"generate",value:function(){var t=this,n=this;a.isRegenerating=!0,this._block_button(),this._resetProgressBar(),this._progressBarActive(),this._log("Counting Total Products"),this._updateProgressStatus("Fetching products."),this._get_product_ids().then(function(e){t._progress=10,n._log({response:e}),e.success?(n._log("Total ".concat(e.total," Products found.")),n._product_ids=e.product,n._total_batch=t._product_ids.length,n._current_batch=0,n._progress_per_batch=(90-t._progress)/t._total_batch,n._process_batch(),n._updateProgressStatus("Processing Products...")):n._updateProgressStatus(e.data.message)}).fail(function(e){n._log(e),n._updateProgressStatus(e.message),n._color="red",setTimeout(function(){n._stopProgressBar(),n._unblock_button()},1500)})}},{key:"_get_product_ids",value:function(){return this._progress=5,i.post("get_product_information",{_ajax_nonce:c.nonce,feed:this._feed,limit:this._limit})}},{key:"_process_batch",value:function(){var t=this,e="Processing Batch ".concat(this._current_batch+1," of ").concat(this._total_batch);this._updateProgressStatus(e),this._log(e),i.post("make_batch_feed",{_ajax_nonce:c.nonce,feed:this._feed,products:this._product_ids[this._current_batch],loop:this._current_batch}).then(function(e){t._current_batch++,t._log("Batch ".concat(t._current_batch," Completed")),t._log(e),t._current_batch<t._total_batch&&(t._process_batch(),t._progress+=t._progress_per_batch),t._current_batch===t._total_batch&&t._save_feed_file()}).fail(function(e){t._log(e),t._updateProgressStatus(e.message),t._color="red",setTimeout(function(){t._stopProgressBar(),t._unblock_button()},1500)})}},{key:"_save_feed_file",value:function(){var t=this;this._log("Saving feed file"),this._updateProgressStatus("Saving feed file"),i.post("save_feed_file",{_ajax_nonce:c.nonce,feed:this._feed}).then(function(e){t._log(e),t._progress=100,t._refresh&&(a.location.href="".concat(c.pages.list.feed,"&link=").concat(e.url,"&cat=").concat(e.cat)),setTimeout(function(){t._stopProgressBar(),setTimeout(function(){t._resetProgressBar(!0),t._unblock_button()},3e3)},2500)}).fail(function(e){t._log(e),t._updateProgressStatus(e.message),t._color="red",setTimeout(function(){t._stopProgressBar(),t._unblock_button()},1500)})}},{key:"_log",value:function(e){return c.wpf_debug&&console.log(e),this}},{key:"_progressBarActive",value:function(e){var t=0<arguments.length&&void 0!==e?e:0,n=this;return this._toggleProgressBar(!0),this._timer=setInterval(function(){n._updateProgressBar()},t||1e3),this}},{key:"_stopProgressBar",value:function(){return clearInterval(this._timer),this}},{key:"_resetProgressBar",value:function(e){return this._toggleProgressBar(!1),this._updateProgressStatus(""),clearInterval(this._timer),this._color=!1,this._timer=null,this._progress=0,e&&this._updateProgressBar(),this}},{key:"_toggleProgressBar",value:function(e){var t=s("#feed_progress_table");return e?t.show():t.hide(),this}},{key:"_updateProgressStatus",value:function(e){return s(".feed-progress-status").text(e),this}},{key:"_updateProgressBar",value:function(){var e=s(".feed-progress-percentage"),t=s(".feed-progress-bar-fill"),n="".concat(Math.round(this._progress),"%");t.css({width:n}),e.text(n)}}]),e}();a.wf={helper:_,feedEditor:f,generator:h},s(a).on("load",function(){null!==s(location).attr("href").match(/webappick.*feed/g)&&s("#wpbody-content").addClass("woofeed-body-content");var e=a.location.search;"edit-feed"===new URLSearchParams(e).get("action")&&s(".itemWrapper").show(),n(),postboxes.add_postbox_toggles(pagenow),(new h).init(),""!==c.generator.feed&&c.generator.regenerate,f.init(),_.common(),s(".wfmasterTooltip").hover(function(){var e=s(this),t=e.attr("wftitle");e.data("tipText",t).removeAttr("wftitle"),s('<p class="wftooltip"></p>').text(t).appendTo("body").fadeIn("slow")},function(){var e=s(this);e.attr("wftitle",e.data("tipText")),s(".wftooltip").remove()}).mousemove(function(e){s(".wftooltip").css({top:e.pageY+10,left:e.pageX+20})}),s(".generateFeed").validate(),s(t).on("click","[data-toggle_slide]",function(e){e.preventDefault(),s(s(this).data("toggle_slide")).slideToggle("fast")}).on("click","#wf_newRow",function(){var e=s("#table-1 tbody"),t=s("#feed_config_template").text().trim().replace(/__idx__/g,e.find("tr").length);e.append(t),_.fancySelect(s(".outputType"))}).on("click",".single-feed-delete",function(e){e.preventDefault(),confirm(c.form.del_confirm)&&(a.location.href=s(this).attr("val"))}).on("click",".wf_clean_cache_wrapper",function(e){e.preventDefault();var t=s(".woo-feed-clean-cache-nonce").val(),n=s(".woo-feed-cache-loader");n.show(),i.post("clear_cache_data",{_ajax_clean_nonce:t}).then(function(e){e.success&&n.hide()}).fail(function(e){console.log("something wrong")})}).on("change",".wf_attr.wf_attributes",function(e){e.preventDefault(),s(".fancy-picker-picked").trigger("click");var t,n,a=s(this).val(),r=s(this).parents("tr").find(".outputType"),o=s(this).parents("tr").find(".fancy-picker-content .fancy-picker-option"),i=s(this).parents("tr").find(".fancy-picker-data span");""!==a&&-1!==a.indexOf("wf_taxo")&&(t="for_custom_taxo",n="parent_if_empty"),["price","current_price","sale_price","price_with_tax","current_price_with_tax","sale_price_with_tax"].includes(a)&&(t="for_price",n="Price"),o.removeClass("selected"),"for_custom_taxo"!==t&&"for_price"!==t||o.each(function(e){n===s(this).text()&&(s(this).addClass("selected"),i.text(n),r.find("option").text(n),r.find("option").val(s(this).data("value")))})}).on("click","#doaction, #doaction2",function(){return confirm(c.form.del_confirm_multi)}).on("change",".dType",function(){var e=s(this),t=e.val(),n=e.closest("tr");"pattern"===t?(n.find(".value_attribute").hide(),n.find(".value_pattern").show()):"attribute"===t?(n.find(".value_attribute").show(),n.find(".value_pattern").hide()):"remove"===t&&(n.find(".value_attribute").hide(),n.find(".value_pattern").hide())}).on("click",".delRow",function(e){e.preventDefault(),s(this).closest("tr").remove(),_.reindex_config_table()}).on("submit","#generateFeed",function(){s(this).validate(),s(this).valid()&&s(".makeFeedResponse").show().html('<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> '.concat(c.form.generate,"</b>"))}).on("submit","#updatefeed",function(e,t){s(this).validate(),s(this).valid()&&s(".makeFeedResponse").show().html('<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> '.concat(t&&t.save?c.form.save:c.form.generate,"</b>"))}).on("change",".ftporsftp",function(){var e=s(this).val(),t=s(".ssh2_status");"sftp"===e?(t.show().css("color","dodgerblue").text(c.form.sftp_checking),i.post("get_ssh2_status",{_ajax_nonce:c.nonce,server:e}).then(function(e){"exists"===e?(t.css("color","#2CC185").text(c.form.sftp_available),setTimeout(function(){t.hide()},1500)):t.show().css("color","red").text(c.form.sftp_warning)}).fail(function(e){t.hide(),_.ajax_fail(e)})):t.hide()}).on("click",'[name="save_feed_config"]',function(e){e.preventDefault(),s("#updatefeed").trigger("submit",{save:!0})}).on("change","#provider",function(e){if(e.preventDefault(),s(this).closest(".generateFeed").hasClass("add-new")){var t=s(this).val(),n=s("#feedType"),a=s("#providerPage"),r=s("#feed_merchant_info");a.html('<h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> '+c.form.loading_tmpl+"</h3>"),r.find(".spinner").addClass("is-active"),n.disabled(!0),n.parent().find(".spinner").addClass("is-active"),r.find(".merchant-info-section .data").html(""),u.hasOwnProperty(t)?f.renderMerchantInfo(r,n,u[t]):i.send("woo_feed_get_merchant_info",{type:"GET",data:{nonce:c.nonce,provider:t}}).then(function(e){u[t]=e,f.renderMerchantInfo(r,n,e)}).fail(_.ajax_fail),p.hasOwnProperty(t)?f.renderMerchantTemplate(a,p[t]):i.post("get_feed_merchant",{_ajax_nonce:c.nonce,merchant:t}).then(function(e){p[t]=e,f.renderMerchantTemplate(a,e),"bing"===t&&(s("#delimiter option").removeAttr("selected"),s('#delimiter option[value="tab"]').attr("selected","selected"),s("#enclosure option").removeAttr("selected"),s('#enclosure option[value=" "]').attr("selected","selected")),"google_product_review"!==t&&s('.wf_attributes option[value="reviewer_name"]').hide()}).fail(_.ajax_fail)}}).on("change",".woo_feed_status_input",function(){var e=s(this);i.post("update_feed_status",{_ajax_nonce:c.nonce,feedName:e.val(),status:e[0].checked?1:0})}),s(t).on("change",'[name="is_outOfStock"], [name="product_visibility"]',function(){var e=s(".out-of-stock-visibility");"n"===s('[name="is_outOfStock"]:checked').val()&&"1"===s('[name="product_visibility"]:checked').val()?e.show():e.hide()}).on("change",".attr_type",function(){var e=s(this),t=e.val(),n=e.closest("tr");"pattern"===t?(n.find(".wf_attr").hide(),n.find(".wf_attr").val(""),n.find(".wf_default").show()):(n.find(".wf_attr").show(),n.find(".wf_default").hide(),n.find(".wf_default").val(""))}).on("change",".wf_mattributes, .attr_type",function(){var e=s(this).closest("tr"),t=e.find(".wf_mattributes"),n=e.find(".attr_type"),a=e.find("td:eq(4)"),r=s("#provider").val();if(c.form.google_category.hasOwnProperty(t.val())&&"pattern"===n.val()&&_.in_array(r,c.form.google_category[t.val()])){if(0===a.find("select.selectize").length){a.find("input.wf_default").remove(),a.append('<span class="wf_default wf_attributes"><select name="default[]" class="selectize"></select></span>'),a.append('<span style="font-size:x-small;"><a style="color: red" href="http://webappick.helpscoutdocs.com/article/19-how-to-map-store-category-with-merchant-category" target="_blank">'.concat(c.learn_more,"</a></span>")),d||a.append('<span class="spinner is-active" style="margin: 0;"></span>');var o=a.find(".wf_attributes select");_.selectize(o,{preload:!0,placeholder:c.form.select_category,load:function(e,t){d?t(d):i.send("get_google_categories",{type:"GET",data:{_ajax_nonce:c.nonce,action:"get_google_categories",provider:r}}).then(function(e){t(d=e),a.find(".spinner").remove()}).fail(_.ajax_fail)}})}}else"current_category"!==t.val()&&0===a.find("input.wf_default").length&&(a.find("span").remove(),a.append('<input autocomplete="off" class="wf_default wf_attributes" type="text" name="default[]" value="">'),"pattern"!==n.val()&&a.find("input.wf_default").hide())}).on("change","#feedType,#provider",function(){var e=s("#feedType").val(),t=s("#provider").val(),n=s(".itemWrapper"),a=s(".wf_csvtxt");""!==e&&_.in_array(t,c.form.item_wrapper_hidden)?n.hide():"xml"===e?(n.show(),a.hide()):"csv"===e||"txt"===e?(n.hide(),a.show()):(n.hide(),a.hide())}).trigger("change")})}(jQuery,window,document,wp.ajax,wpf_ajax_obj);
2
  //# sourceMappingURL=woo-feed-admin.min.js.map
1
+ "use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}!function(s,a,r,i,c){s.fn.disabled=function(n){return s(this).each(function(){var e=s(this),t="disabled";void 0!==e.prop(t)?e.prop(t,void 0===n||!0===n):!0===n?e.addClass(t):e.removeClass(t)}),self},s.fn.isDisabled=function(){var e=s(this),t="disabled";return void 0!==e.prop(t)?e.prop(t):e.hasClass(t)};function e(e){s(e.currentTarget).removeClass(function(e,t){return(t.match(/\btooltipped-\S+/g)||[]).join(" ")}).removeClass("tooltipped").removeAttr("aria-label")}function o(e,t){s(e).addClass("tooltipped tooltipped-s").attr("aria-label",t)}function l(e,t){return s.extend(!0,{},e,t)}function n(){t=s(".toClipboard"),!ClipboardJS.isSupported()||/iPhone|iPad/i.test(navigator.userAgent)?t.find("img").hide(0):(t.each(function(){s(this).on("mouseleave",e).on("blur",e)}),new ClipboardJS(".toClipboard").on("error",function(e){var t,n;o(e.trigger,(t=e.action,n="cut"===t?"X":"C",/iPhone|iPad/i.test(navigator.userAgent)?"No support :(":/Mac/i.test(navigator.userAgent)?"Press ⌘-"+n+" to "+t:"Press Ctrl-"+n+" to "+t))}).on("success",function(e){o(e.trigger,"Copied!")}))}var t,d,_={in_array:function(e,t){try{return-1!==t.indexOf(e)}catch(e){return!1}},selectize_render_item:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.text),"</div>")},ajax_fail:function(e){console.warn(e),alert(e.hasOwnProperty("statusText")&&e.hasOwnProperty("status")?c.ajax.error+"\n"+e.statusText+" ("+e.status+")":e)},sortable:function(e,n,a,r){return(e||s(".sorted_table")).each(function(){var e=s(this),t=e.find("tbody > tr:eq(0) > td").length||a||9;e.wf_sortable(l({containerSelector:"table",itemPath:"> tbody",itemSelector:"tr",handle:"i.wf_sortedtable",placeholder:'<tr class="placeholder"><td colspan="'.concat(t,'"></td></tr>'),onDrop:function(e,t,n,a){e.removeClass(t.group.options.draggedClass).removeAttr("style"),s("body").removeClass(t.group.options.bodyClass),r&&"function"==typeof r&&r(e,t,n,a)}},n))})},selectize:function(e,t){return(e||s("select.selectize")).not(".selectized").each(function(){var e=s(this);e.selectize(l({create:e.data("create")||!1,plugins:e.data("plugins")?e.data("plugins").split(",").map(function(e){return e.trim()}):[],render:{item:_.selectize_render_item}},t))})},fancySelect:function(e,t){return(e||s("select.fancySelect")).not(".FancySelectInit").each(function(){s(this).fancySelect(l({maxItemShow:3},t))})},reindex_config_table:function(){s("#table-1").find("tbody tr").each(function(n,e){s(e).find("[name]").each(function(e,t){s(t).attr("name",s(t).attr("name").replace(/(\[\d\])/g,"[".concat(n,"]")))})})},common:function(){_.sortable(s(".sorted_table"),{},9,_.reindex_config_table),_.selectize(),_.fancySelect(s(".outputType"))}},f={form:null,init:function(){this.form=s(".generateFeed"),this.form.length&&(_.common(),s(r).trigger(new jQuery.Event("feedEditor.init",{target:this.form})))},renderMerchantInfo:function(n,a,r){function e(e){var t;r.hasOwnProperty(e)&&(n.find(".merchant-info-section."+e+" .data").html(r[e]),"feed_file_type"===e&&((t=r[e].split(",").map(function(e){return e.trim().toLowerCase()}).filter(function(e){return""!==e&&e!==c.na.toLowerCase()})).length?(a.find("option").removeAttr("selected").each(function(){var e=s(this);e.val()&&!_.in_array(e.val(),t)?e.disabled(!0):e.disabled(!1)}),1===t.length&&a.find('option[value="'+t[0]+'"]').attr("selected","selected")):a.find("option").disabled(!1)))}for(var t in r)e(t);n.find(".spinner").removeClass("is-active"),a.disabled(!1),a.trigger("change"),a.parent().find(".spinner").removeClass("is-active")},renderMerchantTemplate:function(n,a){function e(t){if(a.hasOwnProperty(t))if("tabs"===t)n.html(a[t]);else{var e=s('[name="'+t+'"]');e.length&&e.each(function(){var e=s(this);e.is("select")?e.find('[value="'+a[t]+'"]').prop("selected",!0):(e.is("[type=checkbox]")||e.is("[type=radio]"))&&e.val()===a[t]?e.prop("checked",!0):e.val(a[t])}).trigger("change")}}for(var t in a)e(t);f.init()}},u=[],p=[],h=function(){function e(){_classCallCheck(this,e),this._feed=c.generator.feed,this._limit=c.generator.limit,this._progress=0,this._timer=null,this._color=!1,this._total_batch=0,this._current_batch=0,this._product_ids=[],this._progress_per_batch=0,this._refresh=!0,this._regenerate=c.generator.regenerate,a.isRegenerating=!1,this._all_btn=s(".wpf_regenerate"),this._current_btn=s("#".concat(this._feed.replace("wf_config","wf_feed_"))),this._current_btn_label=""}return _createClass(e,[{key:"init",value:function(){var n=this;""!==this._feed&&this._regenerate&&!1===a.isRegenerating&&this.generate();var e=a.location.search;return"webappick-manage-feeds"===new URLSearchParams(e).get("page")&&s("body").addClass("woo-import-popup-body"),s(r).on("click",".woo-feed-campaign-close-button",function(e){e.preventDefault(),s(this).parent(".woo-feed-promotion").hide();var t=s(this).data("condition");1===t&&i.post("woo_feed_hide_promotion",{_ajax_nonce:c.nonce,condition:t}).then(function(e){n._log(e)}).fail(function(e){n._log(e),n._updateProgressStatus(e.message),n._color="red"})}),s(r).on("click",".wpf_regenerate",function(e){e.preventDefault(),n._current_btn=s(this),n._current_btn.hasClass("disabled")||!0===a.isRegenerating||(n._feed=n._current_btn.attr("id").replace("wf_feed_","wf_config"),""!==n._feed&&n.generate())}),this}},{key:"_block_button",value:function(){this._all_btn.length&&this._all_btn.addClass("disabled"),this._current_btn.length&&(this._current_btn.find("span").addClass("wpf_spin reverse_spin"),this._current_btn_label=this._current_btn.attr("title"),this._current_btn.attr("aria-label",c.regenerate).attr("title",c.regenerate))}},{key:"_unblock_button",value:function(){this._all_btn.length&&this._all_btn.removeClass("disabled"),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))}},{key:"generate",value:function(){var t=this,n=this;a.isRegenerating=!0,this._block_button(),this._resetProgressBar(),this._progressBarActive(),this._log("Counting Total Products"),this._updateProgressStatus("Fetching products."),this._get_product_ids().then(function(e){t._progress=10,n._log({response:e}),e.success?(n._log("Total ".concat(e.total," Products found.")),n._product_ids=e.product,n._total_batch=t._product_ids.length,n._current_batch=0,n._progress_per_batch=(90-t._progress)/t._total_batch,n._process_batch(),n._updateProgressStatus("Processing Products...")):n._updateProgressStatus(e.data.message)}).fail(function(e){n._log(e),n._updateProgressStatus(e.message),n._color="red",setTimeout(function(){n._stopProgressBar(),n._unblock_button()},1500)})}},{key:"_get_product_ids",value:function(){return this._progress=5,i.post("get_product_information",{_ajax_nonce:c.nonce,feed:this._feed,limit:this._limit})}},{key:"_process_batch",value:function(){var t=this,e="Processing Batch ".concat(this._current_batch+1," of ").concat(this._total_batch);this._updateProgressStatus(e),this._log(e),i.post("make_batch_feed",{_ajax_nonce:c.nonce,feed:this._feed,products:this._product_ids[this._current_batch],loop:this._current_batch}).then(function(e){t._current_batch++,t._log("Batch ".concat(t._current_batch," Completed")),t._log(e),t._current_batch<t._total_batch&&(t._process_batch(),t._progress+=t._progress_per_batch),t._current_batch===t._total_batch&&t._save_feed_file()}).fail(function(e){t._log(e),t._updateProgressStatus(e.message),t._color="red",setTimeout(function(){t._stopProgressBar(),t._unblock_button()},1500)})}},{key:"_save_feed_file",value:function(){var t=this;this._log("Saving feed file"),this._updateProgressStatus("Saving feed file"),i.post("save_feed_file",{_ajax_nonce:c.nonce,feed:this._feed}).then(function(e){t._log(e),t._progress=100,t._refresh&&(a.location.href="".concat(c.pages.list.feed,"&link=").concat(e.url,"&cat=").concat(e.cat)),setTimeout(function(){t._stopProgressBar(),setTimeout(function(){t._resetProgressBar(!0),t._unblock_button()},3e3)},2500)}).fail(function(e){t._log(e),t._updateProgressStatus(e.message),t._color="red",setTimeout(function(){t._stopProgressBar(),t._unblock_button()},1500)})}},{key:"_log",value:function(e){return c.wpf_debug&&console.log(e),this}},{key:"_progressBarActive",value:function(e){var t=0<arguments.length&&void 0!==e?e:0,n=this;return this._toggleProgressBar(!0),this._timer=setInterval(function(){n._updateProgressBar()},t||1e3),this}},{key:"_stopProgressBar",value:function(){return clearInterval(this._timer),this}},{key:"_resetProgressBar",value:function(e){return this._toggleProgressBar(!1),this._updateProgressStatus(""),clearInterval(this._timer),this._color=!1,this._timer=null,this._progress=0,e&&this._updateProgressBar(),this}},{key:"_toggleProgressBar",value:function(e){var t=s("#feed_progress_table");return e?t.show():t.hide(),this}},{key:"_updateProgressStatus",value:function(e){return s(".feed-progress-status").text(e),this}},{key:"_updateProgressBar",value:function(){var e=s(".feed-progress-percentage"),t=s(".feed-progress-bar-fill"),n="".concat(Math.round(this._progress),"%");t.css({width:n}),e.text(n)}}]),e}();a.wf={helper:_,feedEditor:f,generator:h},s(a).on("load",function(){null!==s(location).attr("href").match(/webappick.*feed/g)&&s("#wpbody-content").addClass("woofeed-body-content");var e=a.location.search,t=new URLSearchParams(e).get("action");"edit-feed"===t&&s(".itemWrapper").show(),n(),postboxes.add_postbox_toggles(pagenow),(new h).init(),""!==c.generator.feed&&c.generator.regenerate,f.init(),_.common(),s(".wfmasterTooltip").hover(function(){var e=s(this),t=e.attr("wftitle");e.data("tipText",t).removeAttr("wftitle"),s('<p class="wftooltip"></p>').text(t).appendTo("body").fadeIn("slow")},function(){var e=s(this);e.attr("wftitle",e.data("tipText")),s(".wftooltip").remove()}).mousemove(function(e){s(".wftooltip").css({top:e.pageY+10,left:e.pageX+20})}),s(".generateFeed").validate(),s(r).ready(function(e){"edit-feed"===t&&s("#provider").trigger("change")}).on("click","[data-toggle_slide]",function(e){e.preventDefault(),s(s(this).data("toggle_slide")).slideToggle("fast")}).on("click","#wf_newRow",function(){var e=s("#table-1 tbody"),t=s("#feed_config_template").text().trim().replace(/__idx__/g,e.find("tr").length);e.append(t),_.fancySelect(s(".outputType"))}).on("click",".single-feed-delete",function(e){e.preventDefault(),confirm(c.form.del_confirm)&&(a.location.href=s(this).attr("val"))}).on("click",".wf_clean_cache_wrapper",function(e){e.preventDefault();var t=s(".woo-feed-clean-cache-nonce").val(),n=s(".woo-feed-cache-loader");n.show(),i.post("clear_cache_data",{_ajax_clean_nonce:t}).then(function(e){e.success&&n.hide()}).fail(function(e){console.log("something wrong")})}).on("change",".wf_attr.wf_attributes",function(e){e.preventDefault(),s(".fancy-picker-picked").trigger("click");var t,n,a=s(this).val(),r=s(this).parents("tr").find(".outputType"),o=s(this).parents("tr").find(".fancy-picker-content .fancy-picker-option"),i=s(this).parents("tr").find(".fancy-picker-data span");""!==a&&-1!==a.indexOf("wf_taxo")&&(t="for_custom_taxo",n="parent_if_empty"),["price","current_price","sale_price","price_with_tax","current_price_with_tax","sale_price_with_tax"].includes(a)&&(t="for_price",n="Price"),o.removeClass("selected"),"for_custom_taxo"!==t&&"for_price"!==t||o.each(function(e){n===s(this).text()&&(s(this).addClass("selected"),i.text(n),r.find("option").text(n),r.find("option").val(s(this).data("value")))})}).on("click","#doaction, #doaction2",function(){return confirm(c.form.del_confirm_multi)}).on("change",".dType",function(){var e=s(this),t=e.val(),n=e.closest("tr");"pattern"===t?(n.find(".value_attribute").hide(),n.find(".value_pattern").show()):"attribute"===t?(n.find(".value_attribute").show(),n.find(".value_pattern").hide()):"remove"===t&&(n.find(".value_attribute").hide(),n.find(".value_pattern").hide())}).on("click",".delRow",function(e){e.preventDefault(),s(this).closest("tr").remove(),_.reindex_config_table()}).on("submit","#generateFeed",function(){s(this).validate(),s(this).valid()&&s(".makeFeedResponse").show().html('<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> '.concat(c.form.generate,"</b>"))}).on("submit","#updatefeed",function(e,t){s(this).validate(),s(this).valid()&&s(".makeFeedResponse").show().html('<b style="color: darkblue;"><i class="dashicons dashicons-sos wpf_spin"></i> '.concat(t&&t.save?c.form.save:c.form.generate,"</b>"))}).on("change",".ftporsftp",function(){var e=s(this).val(),t=s(".ssh2_status");"sftp"===e?(t.show().css("color","dodgerblue").text(c.form.sftp_checking),i.post("get_ssh2_status",{_ajax_nonce:c.nonce,server:e}).then(function(e){"exists"===e?(t.css("color","#2CC185").text(c.form.sftp_available),setTimeout(function(){t.hide()},1500)):t.show().css("color","red").text(c.form.sftp_warning)}).fail(function(e){t.hide(),_.ajax_fail(e)})):t.hide()}).on("click",'[name="save_feed_config"]',function(e){e.preventDefault(),s("#updatefeed").trigger("submit",{save:!0})}).on("change","#provider",function(e){e.preventDefault();var t=s(this).val(),n=s("#feedType"),a=s("#providerPage"),r=s("#feed_merchant_info");a.html('<h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> '+c.form.loading_tmpl+"</h3>"),r.find(".spinner").addClass("is-active"),n.disabled(!0),n.parent().find(".spinner").addClass("is-active"),r.find(".merchant-info-section .data").html(""),u.hasOwnProperty(t)?f.renderMerchantInfo(r,n,u[t]):i.send("woo_feed_get_merchant_info",{type:"GET",data:{nonce:c.nonce,provider:t}}).then(function(e){u[t]=e,f.renderMerchantInfo(r,n,e)}).fail(_.ajax_fail),p.hasOwnProperty(t)?f.renderMerchantTemplate(a,p[t]):i.post("get_feed_merchant",{_ajax_nonce:c.nonce,merchant:t}).then(function(e){p[t]=e,f.renderMerchantTemplate(a,e),"bing"===t&&(s("#delimiter option").removeAttr("selected"),s('#delimiter option[value="tab"]').attr("selected","selected"),s("#enclosure option").removeAttr("selected"),s('#enclosure option[value=" "]').attr("selected","selected")),"google_product_review"!==t&&s('.wf_attributes option[value="reviewer_name"]').hide()}).fail(_.ajax_fail)}).on("change",".woo_feed_status_input",function(){var e=s(this);i.post("update_feed_status",{_ajax_nonce:c.nonce,feedName:e.val(),status:e[0].checked?1:0})}),s(r).on("change",'[name="is_outOfStock"], [name="product_visibility"]',function(){var e=s(".out-of-stock-visibility");"n"===s('[name="is_outOfStock"]:checked').val()&&"1"===s('[name="product_visibility"]:checked').val()?e.show():e.hide()}).on("change",".attr_type",function(){var e=s(this),t=e.val(),n=e.closest("tr");"pattern"===t?(n.find(".wf_attr").hide(),n.find(".wf_attr").val(""),n.find(".wf_default").show()):(n.find(".wf_attr").show(),n.find(".wf_default").hide(),n.find(".wf_default").val(""))}).on("change",".wf_mattributes, .attr_type",function(){var e=s(this).closest("tr"),t=e.find(".wf_mattributes"),n=e.find(".attr_type"),a=e.find("td:eq(4)"),r=s("#provider").val();if(c.form.google_category.hasOwnProperty(t.val())&&"pattern"===n.val()&&_.in_array(r,c.form.google_category[t.val()])){if(0===a.find("select.selectize").length){a.find("input.wf_default").remove(),a.append('<span class="wf_default wf_attributes"><select name="default[]" class="selectize"></select></span>'),a.append('<span style="font-size:x-small;"><a style="color: red" href="http://webappick.helpscoutdocs.com/article/19-how-to-map-store-category-with-merchant-category" target="_blank">'.concat(c.learn_more,"</a></span>")),d||a.append('<span class="spinner is-active" style="margin: 0;"></span>');var o=a.find(".wf_attributes select");_.selectize(o,{preload:!0,placeholder:c.form.select_category,load:function(e,t){d?t(d):i.send("get_google_categories",{type:"GET",data:{_ajax_nonce:c.nonce,action:"get_google_categories",provider:r}}).then(function(e){t(d=e),a.find(".spinner").remove()}).fail(_.ajax_fail)}})}}else"current_category"!==t.val()&&0===a.find("input.wf_default").length&&(a.find("span").remove(),a.append('<input autocomplete="off" class="wf_default wf_attributes" type="text" name="default[]" value="">'),"pattern"!==n.val()&&a.find("input.wf_default").hide())}).on("change","#feedType,#provider",function(){var e=s("#feedType").val(),t=s("#provider").val(),n=s(".itemWrapper"),a=s(".wf_csvtxt");""!==e&&_.in_array(t,c.form.item_wrapper_hidden)?n.hide():"xml"===e?(n.show(),a.hide()):"csv"===e||"txt"===e?(n.hide(),a.show()):(n.hide(),a.hide())}).trigger("change")})}(jQuery,window,document,wp.ajax,wpf_ajax_obj);
2
  //# sourceMappingURL=woo-feed-admin.min.js.map
admin/js/woo-feed-admin.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["woo-feed-admin.js"],"names":["_defineProperties","target","props","descriptor","i","_createClass","Constructor","protoProps","staticProps","prototype","window","wpAjax","self","prop","showTooltip","$","hasClass","currentTarget","clearTooltip","removeClass","actionMsg","className","match","index","action","removeAttr","actionKey","elem","addClass","attr","msg","extend","_default","_args","clip","$copyBtn","feedGenerator","left","event","trigger","test","navigator","on","console","googleCategories","in_array","needle","haystack","sortable","escape","data","text","ajax_fail","column_count","find","warn","wf_sortable","selectize_render_item","e","hasOwnProperty","opts","ajax","error","statusText","status","el","config","column","_onDrop","each","this","length","selectize","itemPath","create","concat","plugins","$item","container","containerSelector","group","options","bodyClass","itemSelector","handle","onDrop","fancySelect","maxItemShow","split","map","s","trim","helper","render","item","replace","x","form","merchantInfo","document","jQuery","k","init","renderMerchantInfo","opt","feedType","r","types","html","t","toLowerCase","na","disabled","val","_loop2","feedForm","contentSettings","renderMerchantTemplate","feedEditor","is","merchantInfoCache","tooltip","css","top","isRegenerating","_feed","_current_btn","feed","_limit","generator","limit","_progress","_product_ids","_progress_per_batch","_refresh","_all_btn","generate","condition","then","_current_btn_label","response","_color","preventDefault","parent","hide","_ajax_nonce","_log","_updateProgressStatus","message","key","regenerate","_block_button","value","_this","product","setTimeout","_stopProgressBar","_process_batch","_current_batch","_total_batch","post","_save_feed_file","fail","_resetProgressBar","_unblock_button","refreshInterval","arguments","undefined","clearInterval","_timer","_updateProgressBar","update","table","show","width","bar","wf","current_page_url_query","page_action","postboxes","add_postbox_toggles","pagenow","template","common","hover","title","appendTo","userAgent","merchantTemplateCache","remove","ClipboardJS","clipboard","slideToggle","loader","tbody","confirm","del_confirm","href","_ajax_clean_nonce","current_attribute_value","outputSelect","fancyOption","fancyDataPicker","log","selectKey","selectIf","parents","percentage","includes","closest","row","get","del_confirm_multi","reindex_config_table","save","server","nonce","sftp_available","sftp_warning","merchant","price_attributes","send","type","provider","checked","outOfStockVisibilityRow","valueColumn","append","select","load","query","attribute","google_category","learn_more","cb","itemWrapper"],"mappings":"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","file":"woo-feed-admin.min.js","sourcesContent":["// noinspection JSUnresolvedletiable\r\n/**!\r\n * WooFeed Scripts\r\n * @version 3.3.6\r\n * @package WooFeed\r\n * @copyright 2020 WebAppick\r\n *\r\n */\r\n/* global ajaxurl, wpAjax, postboxes, pagenow, alert, deleteUserSetting, typenow, adminpage, thousandsSeparator, decimalPoint, isRtl */\r\n// noinspection JSUnresolvedVariable\r\n(function($, window, document, wpAjax, opts) {\r\n\t\"use strict\";\r\n\t/**\r\n\t * All of the code for your admin-facing JavaScript source\r\n\t * should reside in this file.\r\n\t *\r\n\t * Note: It has been assumed you will write jQuery code here, so the\r\n\t * $ function reference has been prepared for usage within the scope\r\n\t * of this function.\r\n\t *\r\n\t * This enables you to define handlers, for when the DOM is ready:\r\n\t */\r\n\r\n\t/**\r\n\t * disable element utility\r\n\t *\r\n\t * @since 3.1.9\r\n\t *\r\n\t * @param {*} status\r\n\t * @returns {jQuery|HTMLElement}\r\n\t */\r\n\t$.fn.disabled = function(status) {\r\n\t\t$(this).each(function() {\r\n\t\t\tlet self = $(this),\r\n\t\t\t\tprop = 'disabled';\r\n\r\n\t\t\tif (typeof self.prop(prop) !== 'undefined') {\r\n\t\t\t\tself.prop(prop, status === void 0 || status === true);\r\n\t\t\t} else {\r\n\t\t\t\t!0 === status ? self.addClass(prop) : self.removeClass(prop);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn self; // method chaining\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if a HTMLElement or jQuery is disabled\r\n\t */\r\n\t$.fn.isDisabled = function() {\r\n\t\tlet self = $(this),\r\n\t\t\tprop = 'disabled';\r\n\t\treturn typeof self.prop(prop) !== 'undefined' ? self.prop(prop) : self.hasClass(prop);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Clear Tooltip for clip board js\r\n\t * @param {Object} event\r\n\t */\r\n\tconst clearTooltip = (event) => {\r\n\t\t$(event.currentTarget).removeClass( (index, className) => (className.match(/\\btooltipped-\\S+/g) || []).join(' ') ).removeClass('tooltipped').removeAttr('aria-label');\r\n\t};\r\n\r\n\tconst showTooltip = (elem, msg) => {\r\n\t\t$(elem).addClass('tooltipped tooltipped-s').attr('aria-label', msg);\r\n\t};\r\n\r\n\tconst fallbackMessage = (action) =>{\r\n\t\tlet actionMsg,\r\n\t\t\tactionKey = action === 'cut' ? 'X' : 'C';\r\n\r\n\t\tif (/iPhone|iPad/i.test(navigator.userAgent)) {\r\n\t\t\tactionMsg = 'No support :(';\r\n\t\t} else if (/Mac/i.test(navigator.userAgent)) {\r\n\t\t\tactionMsg = 'Press ⌘-' + actionKey + ' to ' + action;\r\n\t\t} else {\r\n\t\t\tactionMsg = 'Press Ctrl-' + actionKey + ' to ' + action;\r\n\t\t}\r\n\r\n\t\treturn actionMsg;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Alias of jQuery.extend()\r\n\t * @param {Object} _default\r\n\t * @param {Object} _args\r\n\t */\r\n\tconst extend = (_default, _args) => $.extend(true, {}, _default, _args);\r\n\t\r\n\tlet $copyBtn,\r\n\t\tclipboard,\r\n\t\tgoogleCategories,\r\n\t\thelper = {\r\n\t\t\tin_array: (needle, haystack) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\treturn haystack.indexOf(needle) !== -1;\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tselectize_render_item: (data, escape) => `<div class=\"item wapk-selectize-item\">${ escape(data.text)}</div>`, // phpcs:ignore WordPressVIPMinimum.JS.StringConcat.Found,\r\n\t\t\tajax_fail: e => {\r\n\t\t\t\tconsole.warn(e);\r\n\t\t\t\talert(e.hasOwnProperty('statusText') && e.hasOwnProperty('status') ? opts.ajax.error + '\\n' + e.statusText + ' (' + e.status + ')' : e);\r\n\t\t\t},\r\n\t\t\t/**\r\n\t\t\t * Initialize Sortable\r\n\t\t\t * @param {jQuery|HTMLElement} el\r\n\t\t\t * @param {object} config\r\n\t\t\t * @param {int|boolean} column\r\n\t\t\t * @param {function} onDrop\r\n\t\t\t * @return {jQuery|HTMLElement}\r\n\t\t\t */\r\n\t\t\tsortable: (el, config, column, onDrop) => {\r\n\t\t\t\treturn (el || $('.sorted_table')).each(function() {\r\n\t\t\t\t\tlet self = $(this),\r\n\t\t\t\t\t\tcolumn_count = self.find('tbody > tr:eq(0) > td').length || column || 9;\r\n\t\t\t\t\tself.wf_sortable(extend({\r\n\t\t\t\t\t\tcontainerSelector: 'table',\r\n\t\t\t\t\t\titemPath: '> tbody',\r\n\t\t\t\t\t\titemSelector: 'tr',\r\n\t\t\t\t\t\thandle: 'i.wf_sortedtable',\r\n\t\t\t\t\t\tplaceholder: `<tr class=\"placeholder\"><td colspan=\"${column_count}\"></td></tr>`,\r\n\t\t\t\t\t\tonDrop: ($item, container, _super, event) => {\r\n\t\t\t\t\t\t\t$item.removeClass(container.group.options.draggedClass).removeAttr('style');\r\n\t\t\t\t\t\t\t$(\"body\").removeClass(container.group.options.bodyClass);\r\n\t\t\t\t\t\t\tif ( onDrop && 'function' === typeof( onDrop ) ) {\r\n\t\t\t\t\t\t\t\tonDrop( $item, container, _super, event );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}, config));\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tselectize: (el, config) => {\r\n\t\t\t\treturn (el || $('select.selectize')).not('.selectized').each(function() {\r\n\t\t\t\t\tlet self = $(this);\r\n\t\t\t\t\tself.selectize(extend({\r\n\t\t\t\t\t\tcreate: self.data('create') || false,\r\n\t\t\t\t\t\tplugins: self.data('plugins') ? self.data('plugins').split(',').map(function(s) {\r\n\t\t\t\t\t\t\treturn s.trim();\r\n\t\t\t\t\t\t}) : [],\r\n\t\t\t\t\t\t//['remove_button'],\r\n\t\t\t\t\t\trender: {\r\n\t\t\t\t\t\t\titem: helper.selectize_render_item\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, config));\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tfancySelect: (el, config) => {\r\n\t\t\t\treturn (el || $('select.fancySelect')).not('.FancySelectInit').each(function() {\r\n\t\t\t\t\tlet self = $(this);\r\n\t\t\t\t\tself.fancySelect(extend({\r\n\t\t\t\t\t\tmaxItemShow: 3\r\n\t\t\t\t\t}, config));\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\treindex_config_table: () => {\r\n\t\t\t\t$('#table-1').find('tbody tr').each( ( x, el ) => {\r\n\t\t\t\t\t$(el).find('[name]').each( ( x1, el ) => {\r\n\t\t\t\t\t\t$(el).attr('name', $(el).attr('name').replace(/(\\[\\d\\])/g, `[${x}]`));\r\n\t\t\t\t\t} );\r\n\t\t\t\t} );\r\n\t\t\t},\r\n\t\t\tcommon: () => {\r\n\t\t\t\thelper.sortable( $('.sorted_table'), {}, 9, helper.reindex_config_table );\r\n\t\t\t\thelper.selectize();\r\n\t\t\t\thelper.fancySelect($('.outputType'));\r\n\t\t\t}\r\n\t\t},\r\n\t\t// helper functions\r\n\t\tfeedEditor = {\r\n\t\t\t/**\r\n\t\t\t * The Editor Form Elem.\r\n\t\t\t * @type {jQuery|HTMLElement}\r\n\t\t\t */\r\n\t\t\tform: null,\r\n\r\n\t\t\t/**\r\n\t\t\t * Initialize The Feed Editor {Tabs...}\r\n\t\t\t * @returns {void}\r\n\t\t\t */\r\n\t\t\tinit: function () {\r\n\t\t\t\tlet self = this;\r\n\t\t\t\tself.form = $('.generateFeed');\r\n\t\t\t\tif (!self.form.length) return;\r\n\t\t\t\thelper.common();\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t$(document).trigger(new jQuery.Event('feedEditor.init', {\r\n\t\t\t\t\ttarget: this.form\r\n\t\t\t\t}));\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Render Merchant info ajax response and handle allowed feed type for selected merchant\r\n\t\t\t * @param {jQuery|HTMLElement} merchantInfo jQuery dom object\r\n\t\t\t * @param {jQuery|HTMLElement} feedType jQuery dom object\r\n\t\t\t * @param {Object} r ajax response object\r\n\t\t\t */\r\n\t\t\trenderMerchantInfo: function (merchantInfo, feedType, r) {\r\n\t\t\t\tfor (let k in r) {\r\n\t\t\t\t\tif (r.hasOwnProperty(k)) {\r\n\t\t\t\t\t\tmerchantInfo.find('.merchant-info-section.' + k + ' .data').html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html\r\n\r\n\t\t\t\t\t\tif ('feed_file_type' === k) {\r\n\t\t\t\t\t\t\t(function() {\r\n\t\t\t\t\t\t\t\tlet types = r[k].split(\",\").map(function(t) {\r\n\t\t\t\t\t\t\t\t\treturn t.trim().toLowerCase();\r\n\t\t\t\t\t\t\t\t}).filter(function(t) {\r\n\t\t\t\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\t\t\t\treturn t !== '' && t !== opts.na.toLowerCase();\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tif (types.length) {\r\n\t\t\t\t\t\t\t\t\tfeedType.find('option').removeAttr('selected').each(function() {\r\n\t\t\t\t\t\t\t\t\t\tlet opt = $(this);\r\n\t\t\t\t\t\t\t\t\t\topt.val() && !helper.in_array(opt.val(), types) ? opt.disabled(!0) : opt.disabled(!1);\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\tif (types.length === 1) feedType.find('option[value=\"' + types[0] + '\"]').attr('selected', 'selected');\r\n\t\t\t\t\t\t\t\t} else feedType.find('option').disabled(!1);\r\n\t\t\t\t\t\t\t})();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmerchantInfo.find('.spinner').removeClass('is-active');\r\n\t\t\t\tfeedType.disabled(!1);\r\n\t\t\t\tfeedType.trigger('change');\r\n\t\t\t\tfeedType.parent().find('.spinner').removeClass('is-active');\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Render Feed Template Tabs and settings while creating new feed.\r\n\t\t\t * @param {jQuery|HTMLElement} feedForm feed from query dom object\r\n\t\t\t * @param {object} r merchant template ajax response object\r\n\t\t\t */\r\n\t\t\trenderMerchantTemplate: function (feedForm, r) {\r\n\t\t\t\tlet _loop = function _loop(k) {\r\n\t\t\t\t\tif (r.hasOwnProperty(k)) {\r\n\t\t\t\t\t\tif ('tabs' === k) {\r\n\t\t\t\t\t\t\t// noinspection JSUnresolvedFunction\r\n\t\t\t\t\t\t\tfeedForm.html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tlet contentSettings = $('[name=\"' + k + '\"]');\r\n\r\n\t\t\t\t\t\t\tif (contentSettings.length) {\r\n\t\t\t\t\t\t\t\tcontentSettings.each(function() {\r\n\t\t\t\t\t\t\t\t\tlet elem = $(this);\r\n\r\n\t\t\t\t\t\t\t\t\tif (elem.is('select')) {\r\n\t\t\t\t\t\t\t\t\t\telem.find('[value=\"' + r[k] + '\"]').prop('selected', true);\r\n\t\t\t\t\t\t\t\t\t} else if ((elem.is('[type=checkbox]') || elem.is('[type=radio]')) && elem.val() === r[k]) {\r\n\t\t\t\t\t\t\t\t\t\telem.prop('checked', true);\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\telem.val(r[k]); // type=text\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}).trigger('change');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tfor (let k in r) {\r\n\t\t\t\t\t_loop(k);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfeedEditor.init();\r\n\t\t\t}\r\n\t\t},\r\n\t\t// Feed Editor Table\r\n\t\tmerchantInfoCache = [],\r\n\t\tmerchantTemplateCache = [],\r\n\t\ttooltip = () => {\r\n\t\t\t// Tooltip only Text\r\n\t\t\t$('.wfmasterTooltip')\r\n\t\t\t\t.hover(function () {\r\n\t\t\t\t\t// Hover over code\r\n\t\t\t\t\tlet self = $(this), title = self.attr('wftitle');\r\n\t\t\t\t\tself.data('tipText', title).removeAttr('wftitle');\r\n\t\t\t\t\t$('<p class=\"wftooltip\"></p>').text(title).appendTo('body').fadeIn('slow');\r\n\t\t\t\t}, function () {\r\n\t\t\t\t\t// Hover out code\r\n\t\t\t\t\tlet self = $(this);\r\n\t\t\t\t\tself.attr('wftitle', self.data('tipText'));\r\n\t\t\t\t\t$('.wftooltip').remove();\r\n\t\t\t\t})\r\n\t\t\t\t.mousemove(function (e) {\r\n\t\t\t\t\t$('.wftooltip').css({\r\n\t\t\t\t\t\ttop: e.pageY + 10,\r\n\t\t\t\t\t\tleft: e.pageX + 20\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\tclip = () => {\r\n\t\t\t$copyBtn = $('.toClipboard');\r\n\t\t\tif (!ClipboardJS.isSupported() || /iPhone|iPad/i.test(navigator.userAgent)) {\r\n\t\t\t\t$copyBtn.find('img').hide(0);\r\n\t\t\t} else {\r\n\t\t\t\t$copyBtn.each(function() {\r\n\t\t\t\t\t$(this).on('mouseleave', clearTooltip).on('blur', clearTooltip);\r\n\t\t\t\t});\r\n\t\t\t\tclipboard = new ClipboardJS('.toClipboard');\r\n\t\t\t\tclipboard.on('error', function(event) {\r\n\t\t\t\t\tshowTooltip(event.trigger, fallbackMessage(event.action));\r\n\t\t\t\t}).on('success', function(event) {\r\n\t\t\t\t\tshowTooltip(event.trigger, 'Copied!');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t/**\r\n\t * Feed Generator Module\r\n\t */\r\n\tclass feedGenerator {\r\n\t\t\r\n\t\t/**\r\n\t\t * Constructor\r\n\t\t * @constructor\r\n\t\t */\r\n\t\tconstructor() {\r\n\t\t\tthis._feed = opts.generator.feed; // wf_config+xxxx\r\n\t\t\tthis._limit = opts.generator.limit;\r\n\t\t\tthis._progress = 0;\r\n\t\t\tthis._timer = null;\r\n\t\t\tthis._color = false;\r\n\t\t\t// batch info\r\n\t\t\tthis._total_batch = 0;\r\n\t\t\tthis._current_batch = 0;\r\n\t\t\tthis._product_ids = [];\r\n\t\t\tthis._progress_per_batch = 0;\r\n\t\t\tthis._refresh = true;\r\n\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\tthis._regenerate = opts.generator.regenerate;\r\n\t\t\twindow.isRegenerating = false;\r\n\t\t\tthis._all_btn = $('.wpf_regenerate');\r\n\t\t\tthis._current_btn = $(`#${this._feed.replace( 'wf_config', 'wf_feed_' )}`);\r\n\t\t\tthis._current_btn_label = '';\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Init Hooks (Event)\r\n\t\t * @return {feedGenerator}\r\n\t\t */\r\n\t\tinit() {\r\n\t\t\tlet self = this;\r\n\t\t\tif ( '' !== this._feed && this._regenerate && false === window.isRegenerating ) {\r\n\t\t\t\tthis.generate();\r\n\t\t\t}\r\n\r\n\t\t\t//thickbox body add feed plugin class to make it unique and custom style\r\n\t\t\tlet current_page_query = window.location.search;\r\n\t\t\tlet params = new URLSearchParams(current_page_query);\r\n\t\t\tlet page_name = params.get(\"page\");\r\n\t\t\tif( \"webappick-manage-feeds\" === page_name ) {\r\n\t\t\t\t$('body').addClass('woo-import-popup-body');\r\n\t\t\t}\r\n\r\n\t\t\t$(document).on('click', '.woo-feed-campaign-close-button', function(event) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t$(this).parent('.woo-feed-promotion').hide();\r\n\t\t\t\tlet condition = $(this).data('condition');\r\n\t\t\t\tif(1 === condition) {\r\n\t\t\t\t\twpAjax.post( 'woo_feed_hide_promotion', {\r\n\t\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\t\tcondition: condition,\r\n\t\t\t\t\t} ).then( response => {\r\n\t\t\t\t\t\tself._log( response );\r\n\t\t\t\t\t} ).fail( error => {\r\n\t\t\t\t\t\tself._log( error );\r\n\t\t\t\t\t\tself._updateProgressStatus( error.message );\r\n\t\t\t\t\t\tself._color = 'red';\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t$(document).on('click', '.wpf_regenerate', function(event) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tself._current_btn = $( this );\r\n\t\t\t\tif( self._current_btn.hasClass('disabled') || window.isRegenerating === true ) return;\r\n\t\t\t\tself._feed = self._current_btn.attr('id').replace( 'wf_feed_', 'wf_config' );\r\n\t\t\t\tif( '' !== self._feed ) {\r\n\t\t\t\t\tself.generate();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t_block_button() {\r\n\t\t\tif ( this._all_btn.length ) {\r\n\t\t\t\tthis._all_btn.addClass('disabled');\r\n\t\t\t}\r\n\t\t\tif ( this._current_btn.length ) {\r\n\t\t\t\tthis._current_btn.find('span').addClass('wpf_spin reverse_spin');\r\n\t\t\t\tthis._current_btn_label = this._current_btn.attr('title');\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tthis._current_btn.attr( 'aria-label', opts.regenerate ).attr( 'title', opts.regenerate );\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t_unblock_button() {\r\n\t\t\tif ( this._all_btn.length ) {\r\n\t\t\t\tthis._all_btn.removeClass('disabled');\r\n\t\t\t}\r\n\t\t\tif ( this._current_btn.length ) {\r\n\t\t\t\tthis._current_btn.find('span').removeClass('wpf_spin');\r\n\t\t\t\tthis._current_btn.find('span').removeClass('reverse_spin');\r\n\t\t\t\tthis._current_btn.attr( 'aria-label', this._current_btn_label ).attr( 'title', this._current_btn_label );\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Generate Feed\r\n\t\t * @return void\r\n\t\t */\r\n\t\tgenerate() {\r\n\t\t\tlet self = this;\r\n\t\t\twindow.isRegenerating = true;\r\n\t\t\tthis._block_button();\r\n\t\t\tthis._resetProgressBar();\r\n\t\t\tthis._progressBarActive();\r\n\t\t\tthis._log( 'Counting Total Products' );\r\n\t\t\tthis._updateProgressStatus( 'Fetching products.' );\r\n\t\t\tthis._get_product_ids().then( response => {\r\n\t\t\t\tthis._progress = 10;\r\n\t\t\t\tself._log( {response} );\r\n\t\t\t\tif(response.success) {\r\n\t\t\t\t\tself._log( `Total ${response.total} Products found.` );\r\n\t\t\t\t\tself._product_ids = response.product;\r\n\t\t\t\t\tself._total_batch = this._product_ids.length;\r\n\t\t\t\t\tself._current_batch = 0;\r\n\t\t\t\t\tself._progress_per_batch = ( 90 - this._progress ) / this._total_batch;\r\n\t\t\t\t\tself._process_batch();\r\n\t\t\t\t\tself._updateProgressStatus( 'Processing Products...' );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tself._updateProgressStatus( response.data.message );\r\n\t\t\t\t}\r\n\t\t\t}).fail( error => {\r\n\t\t\t\tself._log( error );\r\n\t\t\t\tself._updateProgressStatus( error.message );\r\n\t\t\t\tself._color = 'red';\r\n\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\tself._stopProgressBar();\r\n\t\t\t\t\tself._unblock_button();\r\n\t\t\t\t}, 1500 );\r\n\t\t\t} );\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Get Product Ids\r\n\t\t * @returns {$.promise}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_get_product_ids() {\r\n\t\t\tthis._progress = 5;\r\n\t\t\treturn wpAjax.post( 'get_product_information', {\r\n\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\tfeed: this._feed,\r\n\t\t\t\tlimit: this._limit,\r\n\t\t\t} );\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Run the Batch\r\n\t\t * @private\r\n\t\t */\r\n\t\t_process_batch() {\r\n\t\t\tlet self = this;\r\n\t\t\tlet status = `Processing Batch ${this._current_batch+1} of ${this._total_batch}`;\r\n\t\t\tthis._updateProgressStatus( status );\r\n\t\t\tthis._log( status );\r\n\t\t\twpAjax.post( 'make_batch_feed', {\r\n\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\tfeed: this._feed,\r\n\t\t\t\tproducts: this._product_ids[this._current_batch],\r\n\t\t\t\tloop: this._current_batch,\r\n\t\t\t} ).then( response => {\r\n\t\t\t\tself._current_batch++;\r\n\t\t\t\tself._log( `Batch ${self._current_batch} Completed` );\r\n\t\t\t\tself._log( response );\r\n\t\t\t\tif ( self._current_batch < self._total_batch ) {\r\n\t\t\t\t\tself._process_batch();\r\n\t\t\t\t\tself._progress += self._progress_per_batch;\r\n\t\t\t\t}\r\n\t\t\t\tif ( self._current_batch === self._total_batch ) {\r\n\t\t\t\t\tself._save_feed_file();\r\n\t\t\t\t}\r\n\t\t\t} ).fail( error => {\r\n\t\t\t\tself._log( error );\r\n\t\t\t\tself._updateProgressStatus( error.message );\r\n\t\t\t\tself._color = 'red';\r\n\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\tself._stopProgressBar();\r\n\t\t\t\t\tself._unblock_button();\r\n\t\t\t\t}, 1500 );\r\n\t\t\t} );\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Save Feed Data from temp to feed file\r\n\t\t * @private\r\n\t\t */\r\n\t\t_save_feed_file() {\r\n\t\t\tlet self = this;\r\n\t\t\tthis._log( 'Saving feed file' );\r\n\t\t\tthis._updateProgressStatus( 'Saving feed file' );\r\n\t\t\twpAjax.post( 'save_feed_file', {\r\n\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\tfeed: this._feed,\r\n\t\t\t} ).then( response => {\r\n\t\t\t\tself._log( response );\r\n\t\t\t\tself._progress = 100;\r\n\t\t\t\tif ( self._refresh ) {\r\n\t\t\t\t\twindow.location.href = `${opts.pages.list.feed}&link=${response.url}&cat=${response.cat}`;\r\n\t\t\t\t}\r\n\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\tself._stopProgressBar();\r\n\t\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\t\tself._resetProgressBar( true );\r\n\t\t\t\t\t\tself._unblock_button();\r\n\t\t\t\t\t}, 3000 );\r\n\t\t\t\t}, 2500 );\r\n\t\t\t} ).fail( error => {\r\n\t\t\t\tself._log( error );\r\n\t\t\t\tself._updateProgressStatus( error.message );\r\n\t\t\t\tself._color = 'red';\r\n\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\tself._stopProgressBar();\r\n\t\t\t\t\tself._unblock_button();\r\n\t\t\t\t}, 1500 );\r\n\t\t\t} );\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Console log wrapper with debug settings.\r\n\t\t * @param data\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_log( data ) {\r\n\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\tif ( opts.wpf_debug ) {\r\n\t\t\t\tconsole.log( data );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Run the progressbar refresh interval\r\n\t\t * @param {int} refreshInterval\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_progressBarActive( refreshInterval = 0 ) {\r\n\t\t\tlet self = this;\r\n\t\t\tthis._toggleProgressBar( true );\r\n\t\t\tthis._timer = setInterval( function(){\r\n\t\t\t\tself._updateProgressBar();\r\n\t\t\t}, refreshInterval || 1000 );\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Stop Progressbar\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_stopProgressBar() {\r\n\t\t\tclearInterval( this._timer );\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Reset Progressbar\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_resetProgressBar( update ) {\r\n\t\t\tthis._toggleProgressBar( false );\r\n\t\t\tthis._updateProgressStatus( '' );\r\n\t\t\tclearInterval( this._timer );\r\n\t\t\tthis._color = false;\r\n\t\t\tthis._timer = null;\r\n\t\t\tthis._progress = 0;\r\n\t\t\tif ( update ) {\r\n\t\t\t\tthis._updateProgressBar();\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Show hide the progress bar el\r\n\t\t * @param status\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_toggleProgressBar( status ) {\r\n\t\t\tlet table = $('#feed_progress_table');\r\n\t\t\tif ( status ) {\r\n\t\t\t\ttable.show();\r\n\t\t\t} else {\r\n\t\t\t\ttable.hide();\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Update Progress bar text status\r\n\t\t * @param {string} status\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_updateProgressStatus( status ) {\r\n\t\t\t$( '.feed-progress-status' ).text( status );\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Update Progress Data\r\n\t\t * hooked with setInterval\r\n\t\t * @private\r\n\t\t */\r\n\t\t_updateProgressBar() {\r\n\t\t\tlet percentage = $( '.feed-progress-percentage' ),\r\n\t\t\t\tbar = $( '.feed-progress-bar-fill' ),\r\n\t\t\t\t_progress = `${Math.round( this._progress )}%`;\r\n\t\t\tbar.css( {\r\n\t\t\t\twidth: _progress,\r\n\t\t\t} );\r\n\t\t\tpercentage.text( _progress );\r\n\t\t}\r\n\t}\r\n\t// expose to the global scope\r\n\twindow.wf = {\r\n\t\thelper: helper,\r\n\t\tfeedEditor: feedEditor,\r\n\t\tgenerator: feedGenerator,\r\n\t};\r\n\t$(window).on('load', function() {\r\n\t\t// Template loading ui conflict\r\n\t\tif ($(location).attr(\"href\").match(/webappick.*feed/g) !== null) {\r\n\t\t\t$('#wpbody-content').addClass('woofeed-body-content');\r\n\t\t}\r\n\r\n\t\t// on edit page show item wrapper dropdown\r\n\t\tlet current_page_url_query = window.location.search;\r\n\t\tlet urlParams = new URLSearchParams(current_page_url_query);\r\n\t\tlet page_action = urlParams.get('action');\r\n\t\tif ( page_action === 'edit-feed' ) {\r\n\t\t\t$('.itemWrapper').show();\r\n\t\t}\r\n\r\n\t\t// ClipBoardJS\r\n\t\tclip();\r\n\t\t// postbox toggle\r\n\t\tpostboxes.add_postbox_toggles(pagenow);\r\n\t\t// initialize generator\r\n\t\tlet generator = new feedGenerator();\r\n\t\tgenerator.init();\r\n\t\t// noinspection JSUnresolvedVariable\r\n\t\tif( '' !== opts.generator.feed && opts.generator.regenerate ) {\r\n\t\t\r\n\t\t}\r\n\t\t// initialize editor\r\n\t\tfeedEditor.init();\r\n\t\thelper.common(); // Generate Feed Add Table Row\r\n\t\ttooltip();\r\n\t\t// validate feed editor\r\n\t\t$(\".generateFeed\").validate();\r\n\t\t// document events\r\n\t\t$(document)\r\n\t\t\t.on('click', '[data-toggle_slide]', function(e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\t$($(this).data('toggle_slide')).slideToggle('fast');\r\n\t\t\t})\r\n\t\t\t// XML Feed Wrapper\r\n\t\t\t.on('click', '#wf_newRow', function () {\r\n\t\t\t\tlet tbody = $('#table-1 tbody'),\r\n\t\t\t\t\ttemplate = $('#feed_config_template').text().trim().replace(/__idx__/g, tbody.find('tr').length);\r\n\t\t\t\ttbody.append(template);\r\n\t\t\t\thelper.fancySelect($('.outputType'));\r\n\t\t\t})\r\n\t\t\t// feed delete alert.\r\n\t\t\t.on('click', '.single-feed-delete', function (event) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tif (confirm(opts.form.del_confirm)) {\r\n\t\t\t\t\twindow.location.href = $(this).attr('val');\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// clear cache data.\r\n\t\t\t.on('click', '.wf_clean_cache_wrapper', function(event) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tvar nonce = $('.woo-feed-clean-cache-nonce').val();\r\n\t\t\t\tvar loader = $('.woo-feed-cache-loader');\r\n\r\n\t\t\t\t//show loader\r\n\t\t\t\tloader.show();\r\n\r\n\t\t\t\t// passed cache nonce\r\n\t\t\t\twpAjax.post('clear_cache_data', {\r\n\t\t\t\t\t_ajax_clean_nonce: nonce\r\n\t\t\t\t}).then(function (response) {\r\n\t\t\t\t\tif( response.success ) {\r\n\t\t\t\t\t\tloader.hide(); //hide loader\r\n\t\t\t\t\t}\r\n\t\t\t\t}).fail(function (e) {\r\n\t\t\t\t\tconsole.log('something wrong');\r\n\t\t\t\t});\r\n\r\n\t\t\t})\r\n\t\t\t// feed value dropdown change.\r\n\t\t\t.on('change', '.wf_attr.wf_attributes', function(event) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t$('.fancy-picker-picked').trigger(\"click\"); // trigger fancy select box clicked\r\n\r\n\t\t\t\t// price attributes\r\n\t\t\t\tvar price_attributes = ['price', 'current_price', 'sale_price', 'price_with_tax', 'current_price_with_tax', 'sale_price_with_tax'];\r\n\t\t\t\t// current value\r\n\t\t\t\tvar current_attribute_value = $(this).val();\r\n\t\t\t\tvar outputSelect = $(this).parents('tr').find('.outputType');\r\n\t\t\t\tvar fancyOption = $(this).parents('tr').find('.fancy-picker-content .fancy-picker-option');\r\n\t\t\t\tvar fancyDataPicker = $(this).parents('tr').find('.fancy-picker-data span');\r\n\t\t\t\tvar selectIf, selectKey;\r\n\r\n\t\t\t\t// when select any custom taxonomy\r\n\t\t\t\tif( \"\" !== current_attribute_value && -1 !== current_attribute_value.indexOf('wf_taxo') ) {\r\n\t\t\t\t\tselectIf = 'for_custom_taxo';\r\n\t\t\t\t\tselectKey = \"parent_if_empty\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// when select any price attribute\r\n\t\t\t\tif( price_attributes.includes(current_attribute_value) ) {\r\n\t\t\t\t\tselectIf = 'for_price';\r\n\t\t\t\t\tselectKey = \"Price\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// remove selected class from old selected option\r\n\t\t\t\tfancyOption.removeClass('selected');\r\n\r\n\t\t\t\t// when value dropdown is selected as price or any custom taxonomy\r\n\t\t\t\tif( selectIf === 'for_custom_taxo' || selectIf === 'for_price' ) {\r\n\r\n\t\t\t\t\t// update \"Option Type\" when select key matches\r\n\t\t\t\t\tfancyOption.each(function(item) {\r\n\t\t\t\t\t\tif( selectKey === $(this).text() ) {\r\n\t\t\t\t\t\t\t$(this).addClass('selected');\r\n\t\t\t\t\t\t\tfancyDataPicker.text(selectKey);\r\n\t\t\t\t\t\t\toutputSelect.find(\"option\").text(selectKey);\r\n\t\t\t\t\t\t\toutputSelect.find(\"option\").val( $(this).data('value') );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t})\r\n\t\t\t// bulk delete alert.\r\n\t\t\t.on('click', '#doaction, #doaction2', function () {\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\treturn confirm(opts.form.del_confirm_multi);\r\n\t\t\t})\r\n\t\t\t// Generate Feed Table Row Delete\r\n\t\t\t.on('change', '.dType', function () {\r\n\t\t\t\tlet self = $(this),\r\n\t\t\t\t\ttype = self.val(),\r\n\t\t\t\t\trow = self.closest('tr');\r\n\t\t\t\t\r\n\t\t\t\tif (type === 'pattern') {\r\n\t\t\t\t\trow.find('.value_attribute').hide();\r\n\t\t\t\t\trow.find('.value_pattern').show();\r\n\t\t\t\t} else if (type === 'attribute') {\r\n\t\t\t\t\trow.find('.value_attribute').show();\r\n\t\t\t\t\trow.find('.value_pattern').hide();\r\n\t\t\t\t} else if (type === 'remove') {\r\n\t\t\t\t\trow.find('.value_attribute').hide();\r\n\t\t\t\t\trow.find('.value_pattern').hide();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// Generate Feed Form Submit\r\n\t\t\t.on('click', '.delRow', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\t$(this).closest('tr').remove();\r\n\t\t\t\thelper.reindex_config_table();\r\n\t\t\t})\r\n\t\t\t.on('submit', '#generateFeed', function () {\r\n\t\t\t\t// Feed Generating form validation\r\n\t\t\t\t$(this).validate();\r\n\t\t\t\t\r\n\t\t\t\tif ($(this).valid()) {\r\n\t\t\t\t\t$(\".makeFeedResponse\")\r\n\t\t\t\t\t\t.show()\r\n\t\t\t\t\t\t.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\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// Generate Update Feed Form Submit\r\n\t\t\t.on('submit', '#updatefeed', function (e, data) {\r\n\t\t\t\t// Feed Generating form validation\r\n\t\t\t\t$(this).validate();\r\n\t\t\t\t\r\n\t\t\t\tif ($(this).valid()) {\r\n\t\t\t\t\t$(\".makeFeedResponse\")\r\n\t\t\t\t\t\t.show()\r\n\t\t\t\t\t\t.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\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('change', '.ftporsftp', function () {\r\n\t\t\t\tlet server = $(this).val(),\r\n\t\t\t\t\tstatus = $('.ssh2_status');\r\n\t\t\t\t\r\n\t\t\t\tif (server === 'sftp') {\r\n\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\tstatus.show().css('color', 'dodgerblue').text(opts.form.sftp_checking);\r\n\t\t\t\t\twpAjax.post('get_ssh2_status', {\r\n\t\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\t\tserver: server\r\n\t\t\t\t\t}).then(function (response) {\r\n\t\t\t\t\t\tif (response === 'exists') {\r\n\t\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\t\tstatus.css('color', '#2CC185').text(opts.form.sftp_available);\r\n\t\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\t\tstatus.hide();\r\n\t\t\t\t\t\t\t}, 1500);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\t\tstatus.show().css('color', 'red').text(opts.form.sftp_warning);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).fail(function (e) {\r\n\t\t\t\t\t\tstatus.hide();\r\n\t\t\t\t\t\thelper.ajax_fail(e);\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstatus.hide();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('click', '[name=\"save_feed_config\"]', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\t$('#updatefeed').trigger('submit', {\r\n\t\t\t\t\tsave: true\r\n\t\t\t\t});\r\n\t\t\t})\r\n\t\t\t.on('change', '#provider', function (event) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\r\n\t\t\t\tif (!$(this).closest('.generateFeed').hasClass('add-new')) return; // only for new feed.\r\n\r\n\t\t\t\tlet merchant = $(this).val(),\r\n\t\t\t\t\tfeedType = $(\"#feedType\"),\r\n\t\t\t\t\tfeedForm = $(\"#providerPage\"),\r\n\t\t\t\t\tmerchantInfo = $('#feed_merchant_info'); // set loading..\r\n\t\t\t\t\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tfeedForm.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\r\n\t\t\t\t\r\n\t\t\t\tmerchantInfo.find('.spinner').addClass('is-active');\r\n\t\t\t\tfeedType.disabled(!0); // disable dropdown\r\n\t\t\t\t\r\n\t\t\t\tfeedType.parent().find('.spinner').addClass('is-active');\r\n\t\t\t\tmerchantInfo.find('.merchant-info-section .data').html(''); // remove previous data\r\n\t\t\t\t// Get Merchant info for selected Provider/Merchant\r\n\r\n\r\n\t\t\t\t\r\n\t\t\t\tif (merchantInfoCache.hasOwnProperty(merchant)) {\r\n\t\t\t\t\tfeedEditor.renderMerchantInfo(merchantInfo, feedType, merchantInfoCache[merchant]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\twpAjax.send('woo_feed_get_merchant_info', {\r\n\t\t\t\t\t\ttype: 'GET',\r\n\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\tnonce: opts.nonce,\r\n\t\t\t\t\t\t\tprovider: merchant\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).then(function (r) {\r\n\t\t\t\t\t\tmerchantInfoCache[merchant] = r;\r\n\t\t\t\t\t\tfeedEditor.renderMerchantInfo(merchantInfo, feedType, r);\r\n\t\t\t\t\t}).fail(helper.ajax_fail);\r\n\t\t\t\t} // Get FeedForm For Selected Provider/Merchant\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif (merchantTemplateCache.hasOwnProperty(merchant)) {\r\n\t\t\t\t\tfeedEditor.renderMerchantTemplate(feedForm, merchantTemplateCache[merchant]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\twpAjax.post('get_feed_merchant', {\r\n\t\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\t\tmerchant: merchant\r\n\t\t\t\t\t}).then(function (r) {\r\n\t\t\t\t\t\tmerchantTemplateCache[merchant] = r;\r\n\t\t\t\t\t\tfeedEditor.renderMerchantTemplate(feedForm, r);\r\n\r\n\t\t\t\t\t\t//when merchant is bing, change delimiter and enclosure\r\n\t\t\t\t\t\tif( 'bing' === merchant ) {\r\n\t\t\t\t\t\t\t//delimiter value\r\n\t\t\t\t\t\t\t$(\"#delimiter option\").removeAttr('selected');\r\n\t\t\t\t\t\t\t$(\"#delimiter option[value=\\\"tab\\\"]\").attr('selected', 'selected');\r\n\r\n\t\t\t\t\t\t\t//enclosure value\r\n\t\t\t\t\t\t\t$(\"#enclosure option\").removeAttr('selected');\r\n\t\t\t\t\t\t\t$(\"#enclosure option[value=\\\" \\\"]\").attr('selected', 'selected');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//reviewer options hide\r\n\t\t\t\t\t\tif( 'google_product_review' !== merchant) {\r\n\t\t\t\t\t\t\t$('.wf_attributes option[value=\"reviewer_name\"]').hide();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).fail(helper.ajax_fail);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// Feed Active and Inactive status change via ajax\r\n\t\t\t.on('change', '.woo_feed_status_input', function () {\r\n\t\t\t\tlet self = $(this);\r\n\t\t\t\twpAjax.post('update_feed_status', {\r\n\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\tfeedName: self.val(),\r\n\t\t\t\t\tstatus: self[0].checked ? 1 : 0\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t// event with trigger\r\n\t\t$(document)\r\n\t\t\t.on('change', '[name=\"is_outOfStock\"], [name=\"product_visibility\"]', function () {\r\n\t\t\t\tlet outOfStockVisibilityRow = $('.out-of-stock-visibility');\r\n\t\t\t\tif ($('[name=\"is_outOfStock\"]:checked').val() === 'n' && $('[name=\"product_visibility\"]:checked').val() === '1') {\r\n\t\t\t\t\toutOfStockVisibilityRow.show();\r\n\t\t\t\t} else {\r\n\t\t\t\t\toutOfStockVisibilityRow.hide();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('change', '.attr_type', function () {\r\n\t\t\t\t// Attribute type selection\r\n\t\t\t\tlet self = $(this),\r\n\t\t\t\t\ttype = self.val(),\r\n\t\t\t\t\trow = self.closest('tr');\r\n\t\t\t\t\r\n\t\t\t\tif (type === 'pattern') {\r\n\t\t\t\t\trow.find('.wf_attr').hide();\r\n\t\t\t\t\trow.find('.wf_attr').val('');\r\n\t\t\t\t\trow.find('.wf_default').show();\r\n\t\t\t\t} else {\r\n\t\t\t\t\trow.find('.wf_attr').show();\r\n\t\t\t\t\trow.find('.wf_default').hide();\r\n\t\t\t\t\trow.find('.wf_default').val('');\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('change', '.wf_mattributes, .attr_type', function () {\r\n\t\t\t\tlet row = $(this).closest('tr'),\r\n\t\t\t\t\tattribute = row.find('.wf_mattributes'),\r\n\t\t\t\t\ttype = row.find('.attr_type'),\r\n\t\t\t\t\tvalueColumn = row.find('td:eq(4)'),\r\n\t\t\t\t\tprovider = $('#provider').val();\r\n\t\t\t\t\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tif (opts.form.google_category.hasOwnProperty(attribute.val()) && type.val() === 'pattern' && helper.in_array(provider, opts.form.google_category[attribute.val()])) {\r\n\t\t\t\t\tif (valueColumn.find('select.selectize').length === 0) {\r\n\t\t\t\t\t\tvalueColumn.find('input.wf_default').remove();\r\n\t\t\t\t\t\tvalueColumn.append('<span class=\"wf_default wf_attributes\"><select name=\"default[]\" class=\"selectize\"></select></span>');\r\n\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\tvalueColumn.append(`<span style=\"font-size:x-small;\"><a style=\"color: red\" href=\"http://webappick.helpscoutdocs.com/article/19-how-to-map-store-category-with-merchant-category\" target=\"_blank\">${opts.learn_more}</a></span>`);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (!googleCategories) {\r\n\t\t\t\t\t\t\tvalueColumn.append('<span class=\"spinner is-active\" style=\"margin: 0;\"></span>');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tlet select = valueColumn.find('.wf_attributes select');\r\n\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\thelper.selectize(select, {\r\n\t\t\t\t\t\t\tpreload: true,\r\n\t\t\t\t\t\t\tplaceholder: opts.form.select_category,\r\n\t\t\t\t\t\t\tload: function load(query, cb) {\r\n\t\t\t\t\t\t\t\tif (!googleCategories) {\r\n\t\t\t\t\t\t\t\t\twpAjax.send('get_google_categories', {\r\n\t\t\t\t\t\t\t\t\t\ttype: 'GET',\r\n\t\t\t\t\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\t\t\t\t\t\t\taction: \"get_google_categories\",\r\n\t\t\t\t\t\t\t\t\t\t\tprovider: provider\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}).then(function (r) {\r\n\t\t\t\t\t\t\t\t\t\tgoogleCategories = r;\r\n\t\t\t\t\t\t\t\t\t\tcb(googleCategories);\r\n\t\t\t\t\t\t\t\t\t\tvalueColumn.find('.spinner').remove();\r\n\t\t\t\t\t\t\t\t\t}).fail(helper.ajax_fail);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tcb(googleCategories);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (attribute.val() !== 'current_category' && valueColumn.find('input.wf_default').length === 0) {\r\n\t\t\t\t\t\tvalueColumn.find('span').remove();\r\n\t\t\t\t\t\tvalueColumn.append('<input autocomplete=\"off\" class=\"wf_default wf_attributes\" type=\"text\" name=\"default[]\" value=\"\">');\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (type.val() !== 'pattern') {\r\n\t\t\t\t\t\t\tvalueColumn.find('input.wf_default').hide();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('change', '#feedType,#provider', function () {\r\n\t\t\t\tlet type = $('#feedType').val(),\r\n\t\t\t\t\tprovider = $('#provider').val(),\r\n\t\t\t\t\titemWrapper = $('.itemWrapper'),\r\n\t\t\t\t\twf_csv_txt = $('.wf_csvtxt');\r\n\t\t\t\t\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tif (type !== '' && helper.in_array(provider, opts.form.item_wrapper_hidden)) {\r\n\t\t\t\t\titemWrapper.hide();\r\n\t\t\t\t} else if (type === 'xml') {\r\n\t\t\t\t\titemWrapper.show();\r\n\t\t\t\t\twf_csv_txt.hide();\r\n\t\t\t\t} else if (type === 'csv' || type === 'txt') {\r\n\t\t\t\t\titemWrapper.hide();\r\n\t\t\t\t\twf_csv_txt.show();\r\n\t\t\t\t} else {\r\n\t\t\t\t\titemWrapper.hide();\r\n\t\t\t\t\twf_csv_txt.hide();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.trigger('change');\r\n\t});\r\n})(jQuery, window, document, wp.ajax, wpf_ajax_obj);\r\n"]}
1
+ {"version":3,"sources":["woo-feed-admin.js"],"names":["_defineProperties","target","props","descriptor","i","_createClass","Constructor","protoProps","staticProps","prototype","window","wpAjax","self","prop","showTooltip","$","hasClass","currentTarget","clearTooltip","removeClass","actionMsg","className","match","index","action","removeAttr","actionKey","elem","addClass","attr","msg","extend","_default","_args","clip","$copyBtn","feedGenerator","left","event","trigger","test","navigator","on","console","googleCategories","in_array","needle","haystack","sortable","escape","data","text","ajax_fail","column_count","find","warn","wf_sortable","selectize_render_item","e","hasOwnProperty","opts","ajax","error","statusText","status","el","config","column","_onDrop","each","this","length","selectize","itemPath","create","concat","plugins","$item","container","containerSelector","group","options","bodyClass","itemSelector","handle","onDrop","fancySelect","maxItemShow","split","map","s","trim","helper","render","item","replace","x","form","merchantInfo","document","jQuery","k","init","renderMerchantInfo","opt","feedType","r","types","html","t","toLowerCase","na","disabled","val","_loop2","feedForm","contentSettings","renderMerchantTemplate","feedEditor","is","merchantInfoCache","tooltip","css","top","isRegenerating","_feed","_current_btn","feed","_limit","generator","limit","_progress","_product_ids","_progress_per_batch","_refresh","_all_btn","generate","condition","then","_current_btn_label","response","_color","preventDefault","parent","hide","_ajax_nonce","_log","_updateProgressStatus","message","key","regenerate","_block_button","value","_this","product","setTimeout","_stopProgressBar","_process_batch","_current_batch","_total_batch","post","_save_feed_file","fail","_resetProgressBar","_unblock_button","refreshInterval","arguments","undefined","clearInterval","_timer","_updateProgressBar","update","table","show","width","bar","wf","current_page_url_query","page_action","postboxes","add_postbox_toggles","pagenow","slideToggle","tbody","common","hover","title","appendTo","userAgent","merchantTemplateCache","remove","ClipboardJS","clipboard","href","loader","confirm","del_confirm","_ajax_clean_nonce","current_attribute_value","outputSelect","fancyOption","log","selectKey","percentage","indexOf","selectIf","fancyDataPicker","row","del_confirm_multi","reindex_config_table","type","closest","valid","server","save","nonce","price_attributes","sftp_available","send","provider","merchant","outOfStockVisibilityRow","feedName","valueColumn","select","preload","learn_more","append","cb","load","query","itemWrapper","wf_csv_txt"],"mappings":"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","file":"woo-feed-admin.min.js","sourcesContent":["// noinspection JSUnresolvedletiable\r\n/**!\r\n * WooFeed Scripts\r\n * @version 3.3.6\r\n * @package WooFeed\r\n * @copyright 2020 WebAppick\r\n *\r\n */\r\n/* global ajaxurl, wpAjax, postboxes, pagenow, alert, deleteUserSetting, typenow, adminpage, thousandsSeparator, decimalPoint, isRtl */\r\n// noinspection JSUnresolvedVariable\r\n(function($, window, document, wpAjax, opts) {\r\n\t\"use strict\";\r\n\t/**\r\n\t * All of the code for your admin-facing JavaScript source\r\n\t * should reside in this file.\r\n\t *\r\n\t * Note: It has been assumed you will write jQuery code here, so the\r\n\t * $ function reference has been prepared for usage within the scope\r\n\t * of this function.\r\n\t *\r\n\t * This enables you to define handlers, for when the DOM is ready:\r\n\t */\r\n\r\n\t/**\r\n\t * disable element utility\r\n\t *\r\n\t * @since 3.1.9\r\n\t *\r\n\t * @param {*} status\r\n\t * @returns {jQuery|HTMLElement}\r\n\t */\r\n\t$.fn.disabled = function(status) {\r\n\t\t$(this).each(function() {\r\n\t\t\tlet self = $(this),\r\n\t\t\t\tprop = 'disabled';\r\n\r\n\t\t\tif (typeof self.prop(prop) !== 'undefined') {\r\n\t\t\t\tself.prop(prop, status === void 0 || status === true);\r\n\t\t\t} else {\r\n\t\t\t\t!0 === status ? self.addClass(prop) : self.removeClass(prop);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn self; // method chaining\r\n\t};\r\n\t\r\n\t/**\r\n\t * Check if a HTMLElement or jQuery is disabled\r\n\t */\r\n\t$.fn.isDisabled = function() {\r\n\t\tlet self = $(this),\r\n\t\t\tprop = 'disabled';\r\n\t\treturn typeof self.prop(prop) !== 'undefined' ? self.prop(prop) : self.hasClass(prop);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Clear Tooltip for clip board js\r\n\t * @param {Object} event\r\n\t */\r\n\tconst clearTooltip = (event) => {\r\n\t\t$(event.currentTarget).removeClass( (index, className) => (className.match(/\\btooltipped-\\S+/g) || []).join(' ') ).removeClass('tooltipped').removeAttr('aria-label');\r\n\t};\r\n\r\n\tconst showTooltip = (elem, msg) => {\r\n\t\t$(elem).addClass('tooltipped tooltipped-s').attr('aria-label', msg);\r\n\t};\r\n\r\n\tconst fallbackMessage = (action) =>{\r\n\t\tlet actionMsg,\r\n\t\t\tactionKey = action === 'cut' ? 'X' : 'C';\r\n\r\n\t\tif (/iPhone|iPad/i.test(navigator.userAgent)) {\r\n\t\t\tactionMsg = 'No support :(';\r\n\t\t} else if (/Mac/i.test(navigator.userAgent)) {\r\n\t\t\tactionMsg = 'Press ⌘-' + actionKey + ' to ' + action;\r\n\t\t} else {\r\n\t\t\tactionMsg = 'Press Ctrl-' + actionKey + ' to ' + action;\r\n\t\t}\r\n\r\n\t\treturn actionMsg;\r\n\t};\r\n\t\r\n\t/**\r\n\t * Alias of jQuery.extend()\r\n\t * @param {Object} _default\r\n\t * @param {Object} _args\r\n\t */\r\n\tconst extend = (_default, _args) => $.extend(true, {}, _default, _args);\r\n\t\r\n\tlet $copyBtn,\r\n\t\tclipboard,\r\n\t\tgoogleCategories,\r\n\t\thelper = {\r\n\t\t\tin_array: (needle, haystack) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\treturn haystack.indexOf(needle) !== -1;\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tselectize_render_item: (data, escape) => `<div class=\"item wapk-selectize-item\">${ escape(data.text)}</div>`, // phpcs:ignore WordPressVIPMinimum.JS.StringConcat.Found,\r\n\t\t\tajax_fail: e => {\r\n\t\t\t\tconsole.warn(e);\r\n\t\t\t\talert(e.hasOwnProperty('statusText') && e.hasOwnProperty('status') ? opts.ajax.error + '\\n' + e.statusText + ' (' + e.status + ')' : e);\r\n\t\t\t},\r\n\t\t\t/**\r\n\t\t\t * Initialize Sortable\r\n\t\t\t * @param {jQuery|HTMLElement} el\r\n\t\t\t * @param {object} config\r\n\t\t\t * @param {int|boolean} column\r\n\t\t\t * @param {function} onDrop\r\n\t\t\t * @return {jQuery|HTMLElement}\r\n\t\t\t */\r\n\t\t\tsortable: (el, config, column, onDrop) => {\r\n\t\t\t\treturn (el || $('.sorted_table')).each(function() {\r\n\t\t\t\t\tlet self = $(this),\r\n\t\t\t\t\t\tcolumn_count = self.find('tbody > tr:eq(0) > td').length || column || 9;\r\n\t\t\t\t\tself.wf_sortable(extend({\r\n\t\t\t\t\t\tcontainerSelector: 'table',\r\n\t\t\t\t\t\titemPath: '> tbody',\r\n\t\t\t\t\t\titemSelector: 'tr',\r\n\t\t\t\t\t\thandle: 'i.wf_sortedtable',\r\n\t\t\t\t\t\tplaceholder: `<tr class=\"placeholder\"><td colspan=\"${column_count}\"></td></tr>`,\r\n\t\t\t\t\t\tonDrop: ($item, container, _super, event) => {\r\n\t\t\t\t\t\t\t$item.removeClass(container.group.options.draggedClass).removeAttr('style');\r\n\t\t\t\t\t\t\t$(\"body\").removeClass(container.group.options.bodyClass);\r\n\t\t\t\t\t\t\tif ( onDrop && 'function' === typeof( onDrop ) ) {\r\n\t\t\t\t\t\t\t\tonDrop( $item, container, _super, event );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}, config));\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tselectize: (el, config) => {\r\n\t\t\t\treturn (el || $('select.selectize')).not('.selectized').each(function() {\r\n\t\t\t\t\tlet self = $(this);\r\n\t\t\t\t\tself.selectize(extend({\r\n\t\t\t\t\t\tcreate: self.data('create') || false,\r\n\t\t\t\t\t\tplugins: self.data('plugins') ? self.data('plugins').split(',').map(function(s) {\r\n\t\t\t\t\t\t\treturn s.trim();\r\n\t\t\t\t\t\t}) : [],\r\n\t\t\t\t\t\t//['remove_button'],\r\n\t\t\t\t\t\trender: {\r\n\t\t\t\t\t\t\titem: helper.selectize_render_item\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, config));\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tfancySelect: (el, config) => {\r\n\t\t\t\treturn (el || $('select.fancySelect')).not('.FancySelectInit').each(function() {\r\n\t\t\t\t\tlet self = $(this);\r\n\t\t\t\t\tself.fancySelect(extend({\r\n\t\t\t\t\t\tmaxItemShow: 3\r\n\t\t\t\t\t}, config));\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\treindex_config_table: () => {\r\n\t\t\t\t$('#table-1').find('tbody tr').each( ( x, el ) => {\r\n\t\t\t\t\t$(el).find('[name]').each( ( x1, el ) => {\r\n\t\t\t\t\t\t$(el).attr('name', $(el).attr('name').replace(/(\\[\\d\\])/g, `[${x}]`));\r\n\t\t\t\t\t} );\r\n\t\t\t\t} );\r\n\t\t\t},\r\n\t\t\tcommon: () => {\r\n\t\t\t\thelper.sortable( $('.sorted_table'), {}, 9, helper.reindex_config_table );\r\n\t\t\t\thelper.selectize();\r\n\t\t\t\thelper.fancySelect($('.outputType'));\r\n\t\t\t}\r\n\t\t},\r\n\t\t// helper functions\r\n\t\tfeedEditor = {\r\n\t\t\t/**\r\n\t\t\t * The Editor Form Elem.\r\n\t\t\t * @type {jQuery|HTMLElement}\r\n\t\t\t */\r\n\t\t\tform: null,\r\n\r\n\t\t\t/**\r\n\t\t\t * Initialize The Feed Editor {Tabs...}\r\n\t\t\t * @returns {void}\r\n\t\t\t */\r\n\t\t\tinit: function () {\r\n\t\t\t\tlet self = this;\r\n\t\t\t\tself.form = $('.generateFeed');\r\n\t\t\t\tif (!self.form.length) return;\r\n\t\t\t\thelper.common();\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t$(document).trigger(new jQuery.Event('feedEditor.init', {\r\n\t\t\t\t\ttarget: this.form\r\n\t\t\t\t}));\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Render Merchant info ajax response and handle allowed feed type for selected merchant\r\n\t\t\t * @param {jQuery|HTMLElement} merchantInfo jQuery dom object\r\n\t\t\t * @param {jQuery|HTMLElement} feedType jQuery dom object\r\n\t\t\t * @param {Object} r ajax response object\r\n\t\t\t */\r\n\t\t\trenderMerchantInfo: function (merchantInfo, feedType, r) {\r\n\t\t\t\tfor (let k in r) {\r\n\t\t\t\t\tif (r.hasOwnProperty(k)) {\r\n\t\t\t\t\t\tmerchantInfo.find('.merchant-info-section.' + k + ' .data').html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html\r\n\r\n\t\t\t\t\t\tif ('feed_file_type' === k) {\r\n\t\t\t\t\t\t\t(function() {\r\n\t\t\t\t\t\t\t\tlet types = r[k].split(\",\").map(function(t) {\r\n\t\t\t\t\t\t\t\t\treturn t.trim().toLowerCase();\r\n\t\t\t\t\t\t\t\t}).filter(function(t) {\r\n\t\t\t\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\t\t\t\treturn t !== '' && t !== opts.na.toLowerCase();\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tif (types.length) {\r\n\t\t\t\t\t\t\t\t\tfeedType.find('option').removeAttr('selected').each(function() {\r\n\t\t\t\t\t\t\t\t\t\tlet opt = $(this);\r\n\t\t\t\t\t\t\t\t\t\topt.val() && !helper.in_array(opt.val(), types) ? opt.disabled(!0) : opt.disabled(!1);\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\tif (types.length === 1) feedType.find('option[value=\"' + types[0] + '\"]').attr('selected', 'selected');\r\n\t\t\t\t\t\t\t\t} else feedType.find('option').disabled(!1);\r\n\t\t\t\t\t\t\t})();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmerchantInfo.find('.spinner').removeClass('is-active');\r\n\t\t\t\tfeedType.disabled(!1);\r\n\t\t\t\tfeedType.trigger('change');\r\n\t\t\t\tfeedType.parent().find('.spinner').removeClass('is-active');\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Render Feed Template Tabs and settings while creating new feed.\r\n\t\t\t * @param {jQuery|HTMLElement} feedForm feed from query dom object\r\n\t\t\t * @param {object} r merchant template ajax response object\r\n\t\t\t */\r\n\t\t\trenderMerchantTemplate: function (feedForm, r) {\r\n\t\t\t\tlet _loop = function _loop(k) {\r\n\t\t\t\t\tif (r.hasOwnProperty(k)) {\r\n\t\t\t\t\t\tif ('tabs' === k) {\r\n\t\t\t\t\t\t\t// noinspection JSUnresolvedFunction\r\n\t\t\t\t\t\t\tfeedForm.html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tlet contentSettings = $('[name=\"' + k + '\"]');\r\n\r\n\t\t\t\t\t\t\tif (contentSettings.length) {\r\n\t\t\t\t\t\t\t\tcontentSettings.each(function() {\r\n\t\t\t\t\t\t\t\t\tlet elem = $(this);\r\n\r\n\t\t\t\t\t\t\t\t\tif (elem.is('select')) {\r\n\t\t\t\t\t\t\t\t\t\telem.find('[value=\"' + r[k] + '\"]').prop('selected', true);\r\n\t\t\t\t\t\t\t\t\t} else if ((elem.is('[type=checkbox]') || elem.is('[type=radio]')) && elem.val() === r[k]) {\r\n\t\t\t\t\t\t\t\t\t\telem.prop('checked', true);\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\telem.val(r[k]); // type=text\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}).trigger('change');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tfor (let k in r) {\r\n\t\t\t\t\t_loop(k);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfeedEditor.init();\r\n\t\t\t}\r\n\t\t},\r\n\t\t// Feed Editor Table\r\n\t\tmerchantInfoCache = [],\r\n\t\tmerchantTemplateCache = [],\r\n\t\ttooltip = () => {\r\n\t\t\t// Tooltip only Text\r\n\t\t\t$('.wfmasterTooltip')\r\n\t\t\t\t.hover(function () {\r\n\t\t\t\t\t// Hover over code\r\n\t\t\t\t\tlet self = $(this), title = self.attr('wftitle');\r\n\t\t\t\t\tself.data('tipText', title).removeAttr('wftitle');\r\n\t\t\t\t\t$('<p class=\"wftooltip\"></p>').text(title).appendTo('body').fadeIn('slow');\r\n\t\t\t\t}, function () {\r\n\t\t\t\t\t// Hover out code\r\n\t\t\t\t\tlet self = $(this);\r\n\t\t\t\t\tself.attr('wftitle', self.data('tipText'));\r\n\t\t\t\t\t$('.wftooltip').remove();\r\n\t\t\t\t})\r\n\t\t\t\t.mousemove(function (e) {\r\n\t\t\t\t\t$('.wftooltip').css({\r\n\t\t\t\t\t\ttop: e.pageY + 10,\r\n\t\t\t\t\t\tleft: e.pageX + 20\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t},\r\n\t\tclip = () => {\r\n\t\t\t$copyBtn = $('.toClipboard');\r\n\t\t\tif (!ClipboardJS.isSupported() || /iPhone|iPad/i.test(navigator.userAgent)) {\r\n\t\t\t\t$copyBtn.find('img').hide(0);\r\n\t\t\t} else {\r\n\t\t\t\t$copyBtn.each(function() {\r\n\t\t\t\t\t$(this).on('mouseleave', clearTooltip).on('blur', clearTooltip);\r\n\t\t\t\t});\r\n\t\t\t\tclipboard = new ClipboardJS('.toClipboard');\r\n\t\t\t\tclipboard.on('error', function(event) {\r\n\t\t\t\t\tshowTooltip(event.trigger, fallbackMessage(event.action));\r\n\t\t\t\t}).on('success', function(event) {\r\n\t\t\t\t\tshowTooltip(event.trigger, 'Copied!');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t/**\r\n\t * Feed Generator Module\r\n\t */\r\n\tclass feedGenerator {\r\n\t\t\r\n\t\t/**\r\n\t\t * Constructor\r\n\t\t * @constructor\r\n\t\t */\r\n\t\tconstructor() {\r\n\t\t\tthis._feed = opts.generator.feed; // wf_config+xxxx\r\n\t\t\tthis._limit = opts.generator.limit;\r\n\t\t\tthis._progress = 0;\r\n\t\t\tthis._timer = null;\r\n\t\t\tthis._color = false;\r\n\t\t\t// batch info\r\n\t\t\tthis._total_batch = 0;\r\n\t\t\tthis._current_batch = 0;\r\n\t\t\tthis._product_ids = [];\r\n\t\t\tthis._progress_per_batch = 0;\r\n\t\t\tthis._refresh = true;\r\n\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\tthis._regenerate = opts.generator.regenerate;\r\n\t\t\twindow.isRegenerating = false;\r\n\t\t\tthis._all_btn = $('.wpf_regenerate');\r\n\t\t\tthis._current_btn = $(`#${this._feed.replace( 'wf_config', 'wf_feed_' )}`);\r\n\t\t\tthis._current_btn_label = '';\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Init Hooks (Event)\r\n\t\t * @return {feedGenerator}\r\n\t\t */\r\n\t\tinit() {\r\n\t\t\tlet self = this;\r\n\t\t\tif ( '' !== this._feed && this._regenerate && false === window.isRegenerating ) {\r\n\t\t\t\tthis.generate();\r\n\t\t\t}\r\n\r\n\t\t\t//thickbox body add feed plugin class to make it unique and custom style\r\n\t\t\tlet current_page_query = window.location.search;\r\n\t\t\tlet params = new URLSearchParams(current_page_query);\r\n\t\t\tlet page_name = params.get(\"page\");\r\n\t\t\tif( \"webappick-manage-feeds\" === page_name ) {\r\n\t\t\t\t$('body').addClass('woo-import-popup-body');\r\n\t\t\t}\r\n\r\n\t\t\t$(document).on('click', '.woo-feed-campaign-close-button', function(event) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t$(this).parent('.woo-feed-promotion').hide();\r\n\t\t\t\tlet condition = $(this).data('condition');\r\n\t\t\t\tif(1 === condition) {\r\n\t\t\t\t\twpAjax.post( 'woo_feed_hide_promotion', {\r\n\t\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\t\tcondition: condition,\r\n\t\t\t\t\t} ).then( response => {\r\n\t\t\t\t\t\tself._log( response );\r\n\t\t\t\t\t} ).fail( error => {\r\n\t\t\t\t\t\tself._log( error );\r\n\t\t\t\t\t\tself._updateProgressStatus( error.message );\r\n\t\t\t\t\t\tself._color = 'red';\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t$(document).on('click', '.wpf_regenerate', function(event) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tself._current_btn = $( this );\r\n\t\t\t\tif( self._current_btn.hasClass('disabled') || window.isRegenerating === true ) return;\r\n\t\t\t\tself._feed = self._current_btn.attr('id').replace( 'wf_feed_', 'wf_config' );\r\n\t\t\t\tif( '' !== self._feed ) {\r\n\t\t\t\t\tself.generate();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t_block_button() {\r\n\t\t\tif ( this._all_btn.length ) {\r\n\t\t\t\tthis._all_btn.addClass('disabled');\r\n\t\t\t}\r\n\t\t\tif ( this._current_btn.length ) {\r\n\t\t\t\tthis._current_btn.find('span').addClass('wpf_spin reverse_spin');\r\n\t\t\t\tthis._current_btn_label = this._current_btn.attr('title');\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tthis._current_btn.attr( 'aria-label', opts.regenerate ).attr( 'title', opts.regenerate );\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t_unblock_button() {\r\n\t\t\tif ( this._all_btn.length ) {\r\n\t\t\t\tthis._all_btn.removeClass('disabled');\r\n\t\t\t}\r\n\t\t\tif ( this._current_btn.length ) {\r\n\t\t\t\tthis._current_btn.find('span').removeClass('wpf_spin');\r\n\t\t\t\tthis._current_btn.find('span').removeClass('reverse_spin');\r\n\t\t\t\tthis._current_btn.attr( 'aria-label', this._current_btn_label ).attr( 'title', this._current_btn_label );\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Generate Feed\r\n\t\t * @return void\r\n\t\t */\r\n\t\tgenerate() {\r\n\t\t\tlet self = this;\r\n\t\t\twindow.isRegenerating = true;\r\n\t\t\tthis._block_button();\r\n\t\t\tthis._resetProgressBar();\r\n\t\t\tthis._progressBarActive();\r\n\t\t\tthis._log( 'Counting Total Products' );\r\n\t\t\tthis._updateProgressStatus( 'Fetching products.' );\r\n\t\t\tthis._get_product_ids().then( response => {\r\n\t\t\t\tthis._progress = 10;\r\n\t\t\t\tself._log( {response} );\r\n\t\t\t\tif(response.success) {\r\n\t\t\t\t\tself._log( `Total ${response.total} Products found.` );\r\n\t\t\t\t\tself._product_ids = response.product;\r\n\t\t\t\t\tself._total_batch = this._product_ids.length;\r\n\t\t\t\t\tself._current_batch = 0;\r\n\t\t\t\t\tself._progress_per_batch = ( 90 - this._progress ) / this._total_batch;\r\n\t\t\t\t\tself._process_batch();\r\n\t\t\t\t\tself._updateProgressStatus( 'Processing Products...' );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tself._updateProgressStatus( response.data.message );\r\n\t\t\t\t}\r\n\t\t\t}).fail( error => {\r\n\t\t\t\tself._log( error );\r\n\t\t\t\tself._updateProgressStatus( error.message );\r\n\t\t\t\tself._color = 'red';\r\n\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\tself._stopProgressBar();\r\n\t\t\t\t\tself._unblock_button();\r\n\t\t\t\t}, 1500 );\r\n\t\t\t} );\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Get Product Ids\r\n\t\t * @returns {$.promise}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_get_product_ids() {\r\n\t\t\tthis._progress = 5;\r\n\t\t\treturn wpAjax.post( 'get_product_information', {\r\n\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\tfeed: this._feed,\r\n\t\t\t\tlimit: this._limit,\r\n\t\t\t} );\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Run the Batch\r\n\t\t * @private\r\n\t\t */\r\n\t\t_process_batch() {\r\n\t\t\tlet self = this;\r\n\t\t\tlet status = `Processing Batch ${this._current_batch+1} of ${this._total_batch}`;\r\n\t\t\tthis._updateProgressStatus( status );\r\n\t\t\tthis._log( status );\r\n\t\t\twpAjax.post( 'make_batch_feed', {\r\n\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\tfeed: this._feed,\r\n\t\t\t\tproducts: this._product_ids[this._current_batch],\r\n\t\t\t\tloop: this._current_batch,\r\n\t\t\t} ).then( response => {\r\n\t\t\t\tself._current_batch++;\r\n\t\t\t\tself._log( `Batch ${self._current_batch} Completed` );\r\n\t\t\t\tself._log( response );\r\n\t\t\t\tif ( self._current_batch < self._total_batch ) {\r\n\t\t\t\t\tself._process_batch();\r\n\t\t\t\t\tself._progress += self._progress_per_batch;\r\n\t\t\t\t}\r\n\t\t\t\tif ( self._current_batch === self._total_batch ) {\r\n\t\t\t\t\tself._save_feed_file();\r\n\t\t\t\t}\r\n\t\t\t} ).fail( error => {\r\n\t\t\t\tself._log( error );\r\n\t\t\t\tself._updateProgressStatus( error.message );\r\n\t\t\t\tself._color = 'red';\r\n\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\tself._stopProgressBar();\r\n\t\t\t\t\tself._unblock_button();\r\n\t\t\t\t}, 1500 );\r\n\t\t\t} );\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Save Feed Data from temp to feed file\r\n\t\t * @private\r\n\t\t */\r\n\t\t_save_feed_file() {\r\n\t\t\tlet self = this;\r\n\t\t\tthis._log( 'Saving feed file' );\r\n\t\t\tthis._updateProgressStatus( 'Saving feed file' );\r\n\t\t\twpAjax.post( 'save_feed_file', {\r\n\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\tfeed: this._feed,\r\n\t\t\t} ).then( response => {\r\n\t\t\t\tself._log( response );\r\n\t\t\t\tself._progress = 100;\r\n\t\t\t\tif ( self._refresh ) {\r\n\t\t\t\t\twindow.location.href = `${opts.pages.list.feed}&link=${response.url}&cat=${response.cat}`;\r\n\t\t\t\t}\r\n\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\tself._stopProgressBar();\r\n\t\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\t\tself._resetProgressBar( true );\r\n\t\t\t\t\t\tself._unblock_button();\r\n\t\t\t\t\t}, 3000 );\r\n\t\t\t\t}, 2500 );\r\n\t\t\t} ).fail( error => {\r\n\t\t\t\tself._log( error );\r\n\t\t\t\tself._updateProgressStatus( error.message );\r\n\t\t\t\tself._color = 'red';\r\n\t\t\t\tsetTimeout( function(){\r\n\t\t\t\t\tself._stopProgressBar();\r\n\t\t\t\t\tself._unblock_button();\r\n\t\t\t\t}, 1500 );\r\n\t\t\t} );\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Console log wrapper with debug settings.\r\n\t\t * @param data\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_log( data ) {\r\n\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\tif ( opts.wpf_debug ) {\r\n\t\t\t\tconsole.log( data );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Run the progressbar refresh interval\r\n\t\t * @param {int} refreshInterval\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_progressBarActive( refreshInterval = 0 ) {\r\n\t\t\tlet self = this;\r\n\t\t\tthis._toggleProgressBar( true );\r\n\t\t\tthis._timer = setInterval( function(){\r\n\t\t\t\tself._updateProgressBar();\r\n\t\t\t}, refreshInterval || 1000 );\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Stop Progressbar\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_stopProgressBar() {\r\n\t\t\tclearInterval( this._timer );\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Reset Progressbar\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_resetProgressBar( update ) {\r\n\t\t\tthis._toggleProgressBar( false );\r\n\t\t\tthis._updateProgressStatus( '' );\r\n\t\t\tclearInterval( this._timer );\r\n\t\t\tthis._color = false;\r\n\t\t\tthis._timer = null;\r\n\t\t\tthis._progress = 0;\r\n\t\t\tif ( update ) {\r\n\t\t\t\tthis._updateProgressBar();\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Show hide the progress bar el\r\n\t\t * @param status\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_toggleProgressBar( status ) {\r\n\t\t\tlet table = $('#feed_progress_table');\r\n\t\t\tif ( status ) {\r\n\t\t\t\ttable.show();\r\n\t\t\t} else {\r\n\t\t\t\ttable.hide();\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Update Progress bar text status\r\n\t\t * @param {string} status\r\n\t\t * @returns {feedGenerator}\r\n\t\t * @private\r\n\t\t */\r\n\t\t_updateProgressStatus( status ) {\r\n\t\t\t$( '.feed-progress-status' ).text( status );\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * Update Progress Data\r\n\t\t * hooked with setInterval\r\n\t\t * @private\r\n\t\t */\r\n\t\t_updateProgressBar() {\r\n\t\t\tlet percentage = $( '.feed-progress-percentage' ),\r\n\t\t\t\tbar = $( '.feed-progress-bar-fill' ),\r\n\t\t\t\t_progress = `${Math.round( this._progress )}%`;\r\n\t\t\tbar.css( {\r\n\t\t\t\twidth: _progress,\r\n\t\t\t} );\r\n\t\t\tpercentage.text( _progress );\r\n\t\t}\r\n\t}\r\n\t// expose to the global scope\r\n\twindow.wf = {\r\n\t\thelper: helper,\r\n\t\tfeedEditor: feedEditor,\r\n\t\tgenerator: feedGenerator,\r\n\t};\r\n\t$(window).on('load', function() {\r\n\t\t// Template loading ui conflict\r\n\t\tif ($(location).attr(\"href\").match(/webappick.*feed/g) !== null) {\r\n\t\t\t$('#wpbody-content').addClass('woofeed-body-content');\r\n\t\t}\r\n\r\n\t\t// on edit page show item wrapper dropdown\r\n\t\tlet current_page_url_query = window.location.search;\r\n\t\tlet urlParams = new URLSearchParams(current_page_url_query);\r\n\t\tlet page_action = urlParams.get('action');\r\n\t\tif ( page_action === 'edit-feed' ) {\r\n\t\t\t$('.itemWrapper').show();\r\n\t\t}\r\n\r\n\t\t// ClipBoardJS\r\n\t\tclip();\r\n\t\t// postbox toggle\r\n\t\tpostboxes.add_postbox_toggles(pagenow);\r\n\t\t// initialize generator\r\n\t\tlet generator = new feedGenerator();\r\n\t\tgenerator.init();\r\n\t\t// noinspection JSUnresolvedVariable\r\n\t\tif( '' !== opts.generator.feed && opts.generator.regenerate ) {\r\n\t\t\r\n\t\t}\r\n\t\t// initialize editor\r\n\t\tfeedEditor.init();\r\n\t\thelper.common(); // Generate Feed Add Table Row\r\n\t\ttooltip();\r\n\t\t// validate feed editor\r\n\t\t$(\".generateFeed\").validate();\r\n\t\t// document events\r\n\t\t$(document)\r\n\t\t\t.ready(function(e) {\r\n\t\t\t\tif ( page_action === 'edit-feed' ) {\r\n\t\t\t\t\t$('#provider').trigger('change');\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('click', '[data-toggle_slide]', function(e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\t$($(this).data('toggle_slide')).slideToggle('fast');\r\n\t\t\t})\r\n\t\t\t// XML Feed Wrapper\r\n\t\t\t.on('click', '#wf_newRow', function () {\r\n\t\t\t\tlet tbody = $('#table-1 tbody'),\r\n\t\t\t\t\ttemplate = $('#feed_config_template').text().trim().replace(/__idx__/g, tbody.find('tr').length);\r\n\t\t\t\ttbody.append(template);\r\n\t\t\t\thelper.fancySelect($('.outputType'));\r\n\t\t\t})\r\n\t\t\t// feed delete alert.\r\n\t\t\t.on('click', '.single-feed-delete', function (event) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tif (confirm(opts.form.del_confirm)) {\r\n\t\t\t\t\twindow.location.href = $(this).attr('val');\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// clear cache data.\r\n\t\t\t.on('click', '.wf_clean_cache_wrapper', function(event) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tvar nonce = $('.woo-feed-clean-cache-nonce').val();\r\n\t\t\t\tvar loader = $('.woo-feed-cache-loader');\r\n\r\n\t\t\t\t//show loader\r\n\t\t\t\tloader.show();\r\n\r\n\t\t\t\t// passed cache nonce\r\n\t\t\t\twpAjax.post('clear_cache_data', {\r\n\t\t\t\t\t_ajax_clean_nonce: nonce\r\n\t\t\t\t}).then(function (response) {\r\n\t\t\t\t\tif( response.success ) {\r\n\t\t\t\t\t\tloader.hide(); //hide loader\r\n\t\t\t\t\t}\r\n\t\t\t\t}).fail(function (e) {\r\n\t\t\t\t\tconsole.log('something wrong');\r\n\t\t\t\t});\r\n\r\n\t\t\t})\r\n\t\t\t// feed value dropdown change.\r\n\t\t\t.on('change', '.wf_attr.wf_attributes', function(event) {\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t$('.fancy-picker-picked').trigger(\"click\"); // trigger fancy select box clicked\r\n\r\n\t\t\t\t// price attributes\r\n\t\t\t\tvar price_attributes = ['price', 'current_price', 'sale_price', 'price_with_tax', 'current_price_with_tax', 'sale_price_with_tax'];\r\n\t\t\t\t// current value\r\n\t\t\t\tvar current_attribute_value = $(this).val();\r\n\t\t\t\tvar outputSelect = $(this).parents('tr').find('.outputType');\r\n\t\t\t\tvar fancyOption = $(this).parents('tr').find('.fancy-picker-content .fancy-picker-option');\r\n\t\t\t\tvar fancyDataPicker = $(this).parents('tr').find('.fancy-picker-data span');\r\n\t\t\t\tvar selectIf, selectKey;\r\n\r\n\t\t\t\t// when select any custom taxonomy\r\n\t\t\t\tif( \"\" !== current_attribute_value && -1 !== current_attribute_value.indexOf('wf_taxo') ) {\r\n\t\t\t\t\tselectIf = 'for_custom_taxo';\r\n\t\t\t\t\tselectKey = \"parent_if_empty\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// when select any price attribute\r\n\t\t\t\tif( price_attributes.includes(current_attribute_value) ) {\r\n\t\t\t\t\tselectIf = 'for_price';\r\n\t\t\t\t\tselectKey = \"Price\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// remove selected class from old selected option\r\n\t\t\t\tfancyOption.removeClass('selected');\r\n\r\n\t\t\t\t// when value dropdown is selected as price or any custom taxonomy\r\n\t\t\t\tif( selectIf === 'for_custom_taxo' || selectIf === 'for_price' ) {\r\n\r\n\t\t\t\t\t// update \"Option Type\" when select key matches\r\n\t\t\t\t\tfancyOption.each(function(item) {\r\n\t\t\t\t\t\tif( selectKey === $(this).text() ) {\r\n\t\t\t\t\t\t\t$(this).addClass('selected');\r\n\t\t\t\t\t\t\tfancyDataPicker.text(selectKey);\r\n\t\t\t\t\t\t\toutputSelect.find(\"option\").text(selectKey);\r\n\t\t\t\t\t\t\toutputSelect.find(\"option\").val( $(this).data('value') );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t})\r\n\t\t\t// bulk delete alert.\r\n\t\t\t.on('click', '#doaction, #doaction2', function () {\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\treturn confirm(opts.form.del_confirm_multi);\r\n\t\t\t})\r\n\t\t\t// Generate Feed Table Row Delete\r\n\t\t\t.on('change', '.dType', function () {\r\n\t\t\t\tlet self = $(this),\r\n\t\t\t\t\ttype = self.val(),\r\n\t\t\t\t\trow = self.closest('tr');\r\n\t\t\t\t\r\n\t\t\t\tif (type === 'pattern') {\r\n\t\t\t\t\trow.find('.value_attribute').hide();\r\n\t\t\t\t\trow.find('.value_pattern').show();\r\n\t\t\t\t} else if (type === 'attribute') {\r\n\t\t\t\t\trow.find('.value_attribute').show();\r\n\t\t\t\t\trow.find('.value_pattern').hide();\r\n\t\t\t\t} else if (type === 'remove') {\r\n\t\t\t\t\trow.find('.value_attribute').hide();\r\n\t\t\t\t\trow.find('.value_pattern').hide();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// Generate Feed Form Submit\r\n\t\t\t.on('click', '.delRow', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\t$(this).closest('tr').remove();\r\n\t\t\t\thelper.reindex_config_table();\r\n\t\t\t})\r\n\t\t\t.on('submit', '#generateFeed', function () {\r\n\t\t\t\t// Feed Generating form validation\r\n\t\t\t\t$(this).validate();\r\n\t\t\t\t\r\n\t\t\t\tif ($(this).valid()) {\r\n\t\t\t\t\t$(\".makeFeedResponse\")\r\n\t\t\t\t\t\t.show()\r\n\t\t\t\t\t\t.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\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// Generate Update Feed Form Submit\r\n\t\t\t.on('submit', '#updatefeed', function (e, data) {\r\n\t\t\t\t// Feed Generating form validation\r\n\t\t\t\t$(this).validate();\r\n\t\t\t\t\r\n\t\t\t\tif ($(this).valid()) {\r\n\t\t\t\t\t$(\".makeFeedResponse\")\r\n\t\t\t\t\t\t.show()\r\n\t\t\t\t\t\t.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\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('change', '.ftporsftp', function () {\r\n\t\t\t\tlet server = $(this).val(),\r\n\t\t\t\t\tstatus = $('.ssh2_status');\r\n\t\t\t\t\r\n\t\t\t\tif (server === 'sftp') {\r\n\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\tstatus.show().css('color', 'dodgerblue').text(opts.form.sftp_checking);\r\n\t\t\t\t\twpAjax.post('get_ssh2_status', {\r\n\t\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\t\tserver: server\r\n\t\t\t\t\t}).then(function (response) {\r\n\t\t\t\t\t\tif (response === 'exists') {\r\n\t\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\t\tstatus.css('color', '#2CC185').text(opts.form.sftp_available);\r\n\t\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\t\tstatus.hide();\r\n\t\t\t\t\t\t\t}, 1500);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\t\tstatus.show().css('color', 'red').text(opts.form.sftp_warning);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).fail(function (e) {\r\n\t\t\t\t\t\tstatus.hide();\r\n\t\t\t\t\t\thelper.ajax_fail(e);\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstatus.hide();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('click', '[name=\"save_feed_config\"]', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\t$('#updatefeed').trigger('submit', {\r\n\t\t\t\t\tsave: true\r\n\t\t\t\t});\r\n\t\t\t})\r\n\t\t\t.on('change', '#provider', function (event) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\r\n\t\t\t\t//if (!$(this).closest('.generateFeed').hasClass('add-new')) return; // only for new feed.\r\n\r\n\t\t\t\tlet merchant = $(this).val(),\r\n\t\t\t\t\tfeedType = $(\"#feedType\"),\r\n\t\t\t\t\tfeedForm = $(\"#providerPage\"),\r\n\t\t\t\t\tmerchantInfo = $('#feed_merchant_info'); // set loading..\r\n\t\t\t\t\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tfeedForm.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\r\n\t\t\t\t\r\n\t\t\t\tmerchantInfo.find('.spinner').addClass('is-active');\r\n\t\t\t\tfeedType.disabled(!0); // disable dropdown\r\n\t\t\t\t\r\n\t\t\t\tfeedType.parent().find('.spinner').addClass('is-active');\r\n\t\t\t\tmerchantInfo.find('.merchant-info-section .data').html(''); // remove previous data\r\n\t\t\t\t// Get Merchant info for selected Provider/Merchant\r\n\r\n\r\n\t\t\t\t\r\n\t\t\t\tif (merchantInfoCache.hasOwnProperty(merchant)) {\r\n\t\t\t\t\tfeedEditor.renderMerchantInfo(merchantInfo, feedType, merchantInfoCache[merchant]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\twpAjax.send('woo_feed_get_merchant_info', {\r\n\t\t\t\t\t\ttype: 'GET',\r\n\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\tnonce: opts.nonce,\r\n\t\t\t\t\t\t\tprovider: merchant\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).then(function (r) {\r\n\t\t\t\t\t\tmerchantInfoCache[merchant] = r;\r\n\t\t\t\t\t\tfeedEditor.renderMerchantInfo(merchantInfo, feedType, r);\r\n\t\t\t\t\t}).fail(helper.ajax_fail);\r\n\t\t\t\t} // Get FeedForm For Selected Provider/Merchant\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif (merchantTemplateCache.hasOwnProperty(merchant)) {\r\n\t\t\t\t\tfeedEditor.renderMerchantTemplate(feedForm, merchantTemplateCache[merchant]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\twpAjax.post('get_feed_merchant', {\r\n\t\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\t\tmerchant: merchant\r\n\t\t\t\t\t}).then(function (r) {\r\n\t\t\t\t\t\tmerchantTemplateCache[merchant] = r;\r\n\t\t\t\t\t\tfeedEditor.renderMerchantTemplate(feedForm, r);\r\n\r\n\t\t\t\t\t\t//when merchant is bing, change delimiter and enclosure\r\n\t\t\t\t\t\tif( 'bing' === merchant ) {\r\n\t\t\t\t\t\t\t//delimiter value\r\n\t\t\t\t\t\t\t$(\"#delimiter option\").removeAttr('selected');\r\n\t\t\t\t\t\t\t$(\"#delimiter option[value=\\\"tab\\\"]\").attr('selected', 'selected');\r\n\r\n\t\t\t\t\t\t\t//enclosure value\r\n\t\t\t\t\t\t\t$(\"#enclosure option\").removeAttr('selected');\r\n\t\t\t\t\t\t\t$(\"#enclosure option[value=\\\" \\\"]\").attr('selected', 'selected');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//reviewer options hide\r\n\t\t\t\t\t\tif( 'google_product_review' !== merchant) {\r\n\t\t\t\t\t\t\t$('.wf_attributes option[value=\"reviewer_name\"]').hide();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).fail(helper.ajax_fail);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// Feed Active and Inactive status change via ajax\r\n\t\t\t.on('change', '.woo_feed_status_input', function () {\r\n\t\t\t\tlet self = $(this);\r\n\t\t\t\twpAjax.post('update_feed_status', {\r\n\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\tfeedName: self.val(),\r\n\t\t\t\t\tstatus: self[0].checked ? 1 : 0\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t// event with trigger\r\n\t\t$(document)\r\n\t\t\t.on('change', '[name=\"is_outOfStock\"], [name=\"product_visibility\"]', function () {\r\n\t\t\t\tlet outOfStockVisibilityRow = $('.out-of-stock-visibility');\r\n\t\t\t\tif ($('[name=\"is_outOfStock\"]:checked').val() === 'n' && $('[name=\"product_visibility\"]:checked').val() === '1') {\r\n\t\t\t\t\toutOfStockVisibilityRow.show();\r\n\t\t\t\t} else {\r\n\t\t\t\t\toutOfStockVisibilityRow.hide();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('change', '.attr_type', function () {\r\n\t\t\t\t// Attribute type selection\r\n\t\t\t\tlet self = $(this),\r\n\t\t\t\t\ttype = self.val(),\r\n\t\t\t\t\trow = self.closest('tr');\r\n\t\t\t\t\r\n\t\t\t\tif (type === 'pattern') {\r\n\t\t\t\t\trow.find('.wf_attr').hide();\r\n\t\t\t\t\trow.find('.wf_attr').val('');\r\n\t\t\t\t\trow.find('.wf_default').show();\r\n\t\t\t\t} else {\r\n\t\t\t\t\trow.find('.wf_attr').show();\r\n\t\t\t\t\trow.find('.wf_default').hide();\r\n\t\t\t\t\trow.find('.wf_default').val('');\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('change', '.wf_mattributes, .attr_type', function () {\r\n\t\t\t\tlet row = $(this).closest('tr'),\r\n\t\t\t\t\tattribute = row.find('.wf_mattributes'),\r\n\t\t\t\t\ttype = row.find('.attr_type'),\r\n\t\t\t\t\tvalueColumn = row.find('td:eq(4)'),\r\n\t\t\t\t\tprovider = $('#provider').val();\r\n\t\t\t\t\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tif (opts.form.google_category.hasOwnProperty(attribute.val()) && type.val() === 'pattern' && helper.in_array(provider, opts.form.google_category[attribute.val()])) {\r\n\t\t\t\t\tif (valueColumn.find('select.selectize').length === 0) {\r\n\t\t\t\t\t\tvalueColumn.find('input.wf_default').remove();\r\n\t\t\t\t\t\tvalueColumn.append('<span class=\"wf_default wf_attributes\"><select name=\"default[]\" class=\"selectize\"></select></span>');\r\n\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\tvalueColumn.append(`<span style=\"font-size:x-small;\"><a style=\"color: red\" href=\"http://webappick.helpscoutdocs.com/article/19-how-to-map-store-category-with-merchant-category\" target=\"_blank\">${opts.learn_more}</a></span>`);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (!googleCategories) {\r\n\t\t\t\t\t\t\tvalueColumn.append('<span class=\"spinner is-active\" style=\"margin: 0;\"></span>');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tlet select = valueColumn.find('.wf_attributes select');\r\n\t\t\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\t\t\thelper.selectize(select, {\r\n\t\t\t\t\t\t\tpreload: true,\r\n\t\t\t\t\t\t\tplaceholder: opts.form.select_category,\r\n\t\t\t\t\t\t\tload: function load(query, cb) {\r\n\t\t\t\t\t\t\t\tif (!googleCategories) {\r\n\t\t\t\t\t\t\t\t\twpAjax.send('get_google_categories', {\r\n\t\t\t\t\t\t\t\t\t\ttype: 'GET',\r\n\t\t\t\t\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\t\t\t\t\t_ajax_nonce: opts.nonce,\r\n\t\t\t\t\t\t\t\t\t\t\taction: \"get_google_categories\",\r\n\t\t\t\t\t\t\t\t\t\t\tprovider: provider\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}).then(function (r) {\r\n\t\t\t\t\t\t\t\t\t\tgoogleCategories = r;\r\n\t\t\t\t\t\t\t\t\t\tcb(googleCategories);\r\n\t\t\t\t\t\t\t\t\t\tvalueColumn.find('.spinner').remove();\r\n\t\t\t\t\t\t\t\t\t}).fail(helper.ajax_fail);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tcb(googleCategories);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (attribute.val() !== 'current_category' && valueColumn.find('input.wf_default').length === 0) {\r\n\t\t\t\t\t\tvalueColumn.find('span').remove();\r\n\t\t\t\t\t\tvalueColumn.append('<input autocomplete=\"off\" class=\"wf_default wf_attributes\" type=\"text\" name=\"default[]\" value=\"\">');\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (type.val() !== 'pattern') {\r\n\t\t\t\t\t\t\tvalueColumn.find('input.wf_default').hide();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on('change', '#feedType,#provider', function () {\r\n\t\t\t\tlet type = $('#feedType').val(),\r\n\t\t\t\t\tprovider = $('#provider').val(),\r\n\t\t\t\t\titemWrapper = $('.itemWrapper'),\r\n\t\t\t\t\twf_csv_txt = $('.wf_csvtxt');\r\n\t\t\t\t\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tif (type !== '' && helper.in_array(provider, opts.form.item_wrapper_hidden)) {\r\n\t\t\t\t\titemWrapper.hide();\r\n\t\t\t\t} else if (type === 'xml') {\r\n\t\t\t\t\titemWrapper.show();\r\n\t\t\t\t\twf_csv_txt.hide();\r\n\t\t\t\t} else if (type === 'csv' || type === 'txt') {\r\n\t\t\t\t\titemWrapper.hide();\r\n\t\t\t\t\twf_csv_txt.show();\r\n\t\t\t\t} else {\r\n\t\t\t\t\titemWrapper.hide();\r\n\t\t\t\t\twf_csv_txt.hide();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.trigger('change');\r\n\t});\r\n})(jQuery, window, document, wp.ajax, wpf_ajax_obj);\r\n"]}
includes/classes/class-woo-feed-dropdown.php CHANGED
@@ -174,6 +174,7 @@ class Woo_Feed_Dropdown {
174
  '--1' => esc_html__( 'Primary Attributes', 'woo-feed' ),
175
  'id' => esc_html__( 'Product Id', 'woo-feed' ),
176
  'title' => esc_html__( 'Product Title', 'woo-feed' ),
 
177
  'description' => esc_html__( 'Product Description', 'woo-feed' ),
178
  'short_description' => esc_html__( 'Product Short Description', 'woo-feed' ),
179
  'primary_category' => esc_html__( 'Parent Category', 'woo-feed' ),
@@ -181,18 +182,17 @@ class Woo_Feed_Dropdown {
181
  'child_category' => esc_html__( 'Child Category', 'woo-feed' ),
182
  'child_category_id' => esc_html__( 'Child Category ID', 'woo-feed' ),
183
  'product_type' => esc_html__( 'Product Local Category [Category Path]', 'woo-feed' ),
184
- 'parent_title' => esc_html__( 'Parent Title', 'woo-feed' ),
185
  'link' => esc_html__( 'Product URL', 'woo-feed' ),
186
  'parent_link' => esc_html__( 'Parent URL', 'woo-feed' ),
187
  'canonical_link' => esc_html__( 'Canonical URL', 'woo-feed' ),
188
  'ex_link' => esc_html__( 'External Product URL', 'woo-feed' ),
 
189
  'condition' => esc_html__( 'Condition', 'woo-feed' ),
190
  'item_group_id' => esc_html__( 'Parent Id [Group Id]', 'woo-feed' ),
191
  'sku' => esc_html__( 'SKU', 'woo-feed' ),
192
- 'sku_id' => esc_html__( 'SKU ID', 'woo-feed' ),
193
  'parent_sku' => esc_html__( 'Parent SKU', 'woo-feed' ),
194
  'availability' => esc_html__( 'Availability', 'woo-feed' ),
195
- 'add_to_cart_link' => esc_html__( 'Add to Cart Link', 'woo-feed' ),
196
  'quantity' => esc_html__( 'Quantity', 'woo-feed' ),
197
  'price' => esc_html__( 'Regular Price', 'woo-feed' ),
198
  'current_price' => esc_html__( 'Price', 'woo-feed' ),
174
  '--1' => esc_html__( 'Primary Attributes', 'woo-feed' ),
175
  'id' => esc_html__( 'Product Id', 'woo-feed' ),
176
  'title' => esc_html__( 'Product Title', 'woo-feed' ),
177
+ 'parent_title' => esc_html__( 'Parent Title', 'woo-feed' ),
178
  'description' => esc_html__( 'Product Description', 'woo-feed' ),
179
  'short_description' => esc_html__( 'Product Short Description', 'woo-feed' ),
180
  'primary_category' => esc_html__( 'Parent Category', 'woo-feed' ),
182
  'child_category' => esc_html__( 'Child Category', 'woo-feed' ),
183
  'child_category_id' => esc_html__( 'Child Category ID', 'woo-feed' ),
184
  'product_type' => esc_html__( 'Product Local Category [Category Path]', 'woo-feed' ),
 
185
  'link' => esc_html__( 'Product URL', 'woo-feed' ),
186
  'parent_link' => esc_html__( 'Parent URL', 'woo-feed' ),
187
  'canonical_link' => esc_html__( 'Canonical URL', 'woo-feed' ),
188
  'ex_link' => esc_html__( 'External Product URL', 'woo-feed' ),
189
+ 'add_to_cart_link' => esc_html__( 'Add to Cart URL', 'woo-feed' ),
190
  'condition' => esc_html__( 'Condition', 'woo-feed' ),
191
  'item_group_id' => esc_html__( 'Parent Id [Group Id]', 'woo-feed' ),
192
  'sku' => esc_html__( 'SKU', 'woo-feed' ),
193
+ 'sku_id' => esc_html__( 'SKU_ID', 'woo-feed' ),
194
  'parent_sku' => esc_html__( 'Parent SKU', 'woo-feed' ),
195
  'availability' => esc_html__( 'Availability', 'woo-feed' ),
 
196
  'quantity' => esc_html__( 'Quantity', 'woo-feed' ),
197
  'price' => esc_html__( 'Regular Price', 'woo-feed' ),
198
  'current_price' => esc_html__( 'Price', 'woo-feed' ),
includes/classes/class-woo-feed-products-v3.php CHANGED
@@ -568,7 +568,7 @@ class Woo_Feed_Products_v3
568
  // Add closing XML node if value is empty
569
  if ( '' != $attributeValue ) {
570
  // Add CDATA wrapper for XML feed to prevent XML error.
571
- $attributeValue = woo_feed_add_cdata($merchant_attribute, $attributeValue, $merchant);
572
 
573
  // TODO Move to proper place
574
  // Replace Google Color attribute value according to requirements
@@ -1478,21 +1478,21 @@ class Woo_Feed_Products_v3
1478
  /**
1479
  * Get Parent Product Title
1480
  *
1481
- * @param WC_Product $product
1482
  *
1483
- * @since 4.3.13
1484
  * @author Nazrul Islam Nayan
1485
  * @return mixed
1486
  */
1487
  protected function parent_title( $product ) {
1488
  if( $product->is_type( 'variation' ) ) {
1489
- $id = $product->get_parent_id();
1490
- $title = get_the_title($id);
1491
  }else {
1492
- $title = $product->get_name();
1493
  }
1494
 
1495
- return wp_strip_all_tags($this->remove_short_codes($title));
1496
  }
1497
 
1498
  /**
@@ -1971,14 +1971,14 @@ class Woo_Feed_Products_v3
1971
  *
1972
  * @param WC_Product $product
1973
  *
1974
- * @since 4.3.13
1975
  * @author Nazrul Islam Nayan
1976
  * @return string
1977
  */
1978
  protected function parent_link( $product ) {
1979
  if( $product->is_type( 'variation' ) ) {
1980
- $id = $product->get_parent_id();
1981
- $link = get_permalink($id);
1982
  }else {
1983
  $link = $this->link($product);
1984
  }
@@ -2336,12 +2336,15 @@ class Woo_Feed_Products_v3
2336
  *
2337
  * @param WC_Product $product
2338
  *
2339
- * @since 4.3.13
2340
  * @author Nazrul Islam Nayan
2341
  * @return string
2342
  */
2343
  protected function add_to_cart_link( $product ) {
2344
- return get_home_url() . '/?add-to-cart=' . $product->get_id();
 
 
 
2345
  }
2346
 
2347
  /**
@@ -3094,7 +3097,7 @@ class Woo_Feed_Products_v3
3094
  }
3095
  }
3096
 
3097
- if ( in_array(8, $outputTypes) && ! empty($output) ) { // Add CDATA
3098
  $output = '<![CDATA[' . $output . ']]>';
3099
  }
3100
  }
568
  // Add closing XML node if value is empty
569
  if ( '' != $attributeValue ) {
570
  // Add CDATA wrapper for XML feed to prevent XML error.
571
+ $attributeValue = woo_feed_add_cdata($merchant_attribute, $attributeValue, $merchant, $this->config['feedType']);
572
 
573
  // TODO Move to proper place
574
  // Replace Google Color attribute value according to requirements
1478
  /**
1479
  * Get Parent Product Title
1480
  *
1481
+ * @param WC_Product $product Product Object.
1482
  *
1483
+ * @since 5.1.8
1484
  * @author Nazrul Islam Nayan
1485
  * @return mixed
1486
  */
1487
  protected function parent_title( $product ) {
1488
  if( $product->is_type( 'variation' ) ) {
1489
+ $product=wc_get_product($product->get_parent_id());
1490
+ $title = $this->title($product);
1491
  }else {
1492
+ $title = $this->title($product);
1493
  }
1494
 
1495
+ return $title;
1496
  }
1497
 
1498
  /**
1971
  *
1972
  * @param WC_Product $product
1973
  *
1974
+ * @since 5.1.8
1975
  * @author Nazrul Islam Nayan
1976
  * @return string
1977
  */
1978
  protected function parent_link( $product ) {
1979
  if( $product->is_type( 'variation' ) ) {
1980
+ $product=wc_get_product($product->get_parent_id());
1981
+ $link = $this->link($product);
1982
  }else {
1983
  $link = $this->link($product);
1984
  }
2336
  *
2337
  * @param WC_Product $product
2338
  *
2339
+ * @since 5.1.8
2340
  * @author Nazrul Islam Nayan
2341
  * @return string
2342
  */
2343
  protected function add_to_cart_link( $product ) {
2344
+ $url=$this->link($product);
2345
+ $suffix='add-to-cart=' . $product->get_id();
2346
+
2347
+ return woo_feed_make_url_with_parameter($url,$suffix);
2348
  }
2349
 
2350
  /**
3097
  }
3098
  }
3099
 
3100
+ if ( in_array( 8, $outputTypes ) && ! empty( $output ) && 'xml'===$this->config['feedType']) { // Add CDATA
3101
  $output = '<![CDATA[' . $output . ']]>';
3102
  }
3103
  }
includes/helper.php CHANGED
@@ -2054,10 +2054,15 @@ if ( ! function_exists( 'woo_feed_add_cdata' ) ) {
2054
  * @param string $pluginAttribute
2055
  * @param string $attributeValue
2056
  * @param string $merchant
 
2057
  *
2058
  * @return string
2059
  */
2060
- function woo_feed_add_cdata( $pluginAttribute, $attributeValue, $merchant ) {
 
 
 
 
2061
  if ( strpos( $attributeValue, '<![CDATA[' ) !== false ) {
2062
  return "$attributeValue";
2063
  }
@@ -3367,7 +3372,7 @@ if ( ! function_exists( 'woo_feed_pixel_script' ) ) {
3367
  */
3368
  function woo_feed_pixel_script(){
3369
 
3370
- global $woocommerce, $post, $product;
3371
 
3372
  // Pixel Config.
3373
  $settings = woo_feed_get_options( 'all' );
@@ -3380,12 +3385,13 @@ if ( ! function_exists( 'woo_feed_pixel_script' ) ) {
3380
  // Product Tracking
3381
  if ( is_product() ) {
3382
  $product = wc_get_product( $post->ID );
 
3383
 
3384
  $view_type .= "fbq('track', 'ViewContent', {
3385
  content_name: '$post->post_title',
3386
  content_id: $post->ID,
3387
  content_type: 'product',
3388
- value: $product->price,
3389
  currency: '".get_option('woocommerce_currency')."'
3390
  });";
3391
  }
2054
  * @param string $pluginAttribute
2055
  * @param string $attributeValue
2056
  * @param string $merchant
2057
+ * @param string $feed_type
2058
  *
2059
  * @return string
2060
  */
2061
+ function woo_feed_add_cdata( $pluginAttribute, $attributeValue, $merchant, $feed_type ) {
2062
+ if("xml"!==$feed_type){
2063
+ return "$attributeValue";
2064
+ }
2065
+
2066
  if ( strpos( $attributeValue, '<![CDATA[' ) !== false ) {
2067
  return "$attributeValue";
2068
  }
3372
  */
3373
  function woo_feed_pixel_script(){
3374
 
3375
+ global $woocommerce, $post, $product, $product;
3376
 
3377
  // Pixel Config.
3378
  $settings = woo_feed_get_options( 'all' );
3385
  // Product Tracking
3386
  if ( is_product() ) {
3387
  $product = wc_get_product( $post->ID );
3388
+ $product_price = $product->get_price();
3389
 
3390
  $view_type .= "fbq('track', 'ViewContent', {
3391
  content_name: '$post->post_title',
3392
  content_id: $post->ID,
3393
  content_type: 'product',
3394
+ value: $product_price,
3395
  currency: '".get_option('woocommerce_currency')."'
3396
  });";
3397
  }
woo-feed.php CHANGED
@@ -10,7 +10,7 @@
10
  * Plugin Name: WooCommerce Product Feed
11
  * Plugin URI: https://webappick.com/
12
  * Description: Easily generate woocommerce product feed for any marketing channel like Google Shopping(Merchant), Facebook Remarketing, Bing, eBay & more. Support 100+ Merchants.
13
- * Version: 4.3.13
14
  * Author: WebAppick
15
  * Author URI: https://webappick.com/
16
  * License: GPL v2
@@ -38,7 +38,7 @@ if ( ! defined( 'WOO_FEED_FREE_VERSION' ) ) {
38
  * @var string
39
  * @since 3.1.6
40
  */
41
- define( 'WOO_FEED_FREE_VERSION', '4.3.13' );
42
  }
43
 
44
  if ( ! defined( 'WOO_FEED_FREE_FILE' ) ) {
10
  * Plugin Name: WooCommerce Product Feed
11
  * Plugin URI: https://webappick.com/
12
  * Description: Easily generate woocommerce product feed for any marketing channel like Google Shopping(Merchant), Facebook Remarketing, Bing, eBay & more. Support 100+ Merchants.
13
+ * Version: 4.3.14
14
  * Author: WebAppick
15
  * Author URI: https://webappick.com/
16
  * License: GPL v2
38
  * @var string
39
  * @since 3.1.6
40
  */
41
+ define( 'WOO_FEED_FREE_VERSION', '4.3.14' );
42
  }
43
 
44
  if ( ! defined( 'WOO_FEED_FREE_FILE' ) ) {