CTX Feed – WooCommerce Product Feed Manager Plugin - Version 3.8.3

Version Description

(2020-09-23) = * Fix: Cron scheduled back date issue.

Download this release

Release Info

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

Code changes from version 3.8.1 to 3.8.3

README.txt CHANGED
@@ -5,7 +5,7 @@ Tags:product feed,woocommerce product feed,google shopping feed,google shopping,
5
  Requires at least: 3.6
6
  Tested Up To: 5.5
7
  Requires PHP: 5.6
8
- Stable tag: 3.8.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -308,6 +308,9 @@ Using pro version:
308
 
309
  == Changelog ==
310
 
 
 
 
311
  = 3.8.1 (2020-09-22) =
312
  * Tweak: Added `WPC product bundles` plugin support.
313
 
5
  Requires at least: 3.6
6
  Tested Up To: 5.5
7
  Requires PHP: 5.6
8
+ Stable tag: 3.8.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
308
 
309
  == Changelog ==
310
 
311
+ = 3.8.3 (2020-09-23) =
312
+ * Fix: Cron scheduled back date issue.
313
+
314
  = 3.8.1 (2020-09-22) =
315
  * Tweak: Added `WPC product bundles` plugin support.
316
 
admin/js/woo-feed-admin.js CHANGED
@@ -650,6 +650,52 @@
650
  window.location.href = $(this).attr('val');
651
  }
652
  })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
653
  // bulk delete alert.
654
  .on('click', '#doaction, #doaction2', function () {
655
  // noinspection JSUnresolvedVariable
650
  window.location.href = $(this).attr('val');
651
  }
652
  })
653
+ // feed value dropdown change.
654
+ .on('change', '.wf_attr.wf_attributes', function(event) {
655
+ event.preventDefault();
656
+
657
+ $('.fancy-picker-picked').trigger("click"); // trigger fancy select box clicked
658
+
659
+ // price attributes
660
+ var price_attributes = ['price', 'current_price', 'sale_price', 'price_with_tax', 'current_price_with_tax', 'sale_price_with_tax'];
661
+ // current value
662
+ var current_attribute_value = $(this).val();
663
+ var outputSelect = $(this).parents('tr').find('.outputType');
664
+ var fancyOption = $(this).parents('tr').find('.fancy-picker-content .fancy-picker-option');
665
+ var fancyDataPicker = $(this).parents('tr').find('.fancy-picker-data span');
666
+ var selectIf, selectKey;
667
+
668
+ // when select any custom taxonomy
669
+ if( "" !== current_attribute_value && -1 !== current_attribute_value.indexOf('wf_taxo') ) {
670
+ selectIf = 'for_custom_taxo';
671
+ selectKey = "parent_if_empty";
672
+ }
673
+
674
+ // when select any price attribute
675
+ if( price_attributes.includes(current_attribute_value) ) {
676
+ selectIf = 'for_price';
677
+ selectKey = "Price";
678
+ }
679
+
680
+ // remove selected class from old selected option
681
+ fancyOption.removeClass('selected');
682
+
683
+ // when value dropdown is selected as price or any custom taxonomy
684
+ if( selectIf === 'for_custom_taxo' || selectIf === 'for_price' ) {
685
+
686
+ // update "Option Type" when select key matches
687
+ fancyOption.each(function(item) {
688
+ if( selectKey === $(this).text() ) {
689
+ $(this).addClass('selected');
690
+ fancyDataPicker.text(selectKey);
691
+ outputSelect.find("option").text(selectKey);
692
+ outputSelect.find("option").val( $(this).data('value') );
693
+ }
694
+ });
695
+
696
+ }
697
+
698
+ })
699
  // bulk delete alert.
700
  .on('click', '#doaction, #doaction2', function () {
701
  // noinspection JSUnresolvedVariable
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(i,a,n,s,c){i.fn.disabled=function(n){return i(this).each(function(){var e=i(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},i.fn.isDisabled=function(){var e=i(this),t="disabled";return void 0!==e.prop(t)?e.prop(t):e.hasClass(t)};function e(e){i(e.currentTarget).removeClass(function(e,t){return(t.match(/\btooltipped-\S+/g)||[]).join(" ")}).removeClass("tooltipped").removeAttr("aria-label")}function r(e,t){i(e).addClass("tooltipped tooltipped-s").attr("aria-label",t)}function o(e,t){return i.extend(!0,{},e,t)}function t(){l=i(".toClipboard"),!ClipboardJS.isSupported()||/iPhone|iPad/i.test(navigator.userAgent)?l.find("img").hide(0):(l.each(function(){i(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,_,f={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||i(".sorted_table")).each(function(){var e=i(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"),i("body").removeClass(t.group.options.bodyClass),r&&"function"==typeof r&&r(e,t,n,a)}},n))})},selectize:function(e,t){return(e||i("select.selectize")).not(".selectized").each(function(){var e=i(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:f.selectize_render_item}},t))})},fancySelect:function(e,t){return(e||i("select.fancySelect")).not(".FancySelectInit").each(function(){i(this).fancySelect(o({maxItemShow:3},t))})},reindex_config_table:function(){i("#table-1").find("tbody tr").each(function(n,e){i(e).find("[name]").each(function(e,t){i(t).attr("name",i(t).attr("name").replace(/(\[\d\])/g,"[".concat(n,"]")))})})},common:function(){f.sortable(i(".sorted_table"),{},9,f.reindex_config_table),f.selectize(),f.fancySelect(i(".outputType"))}},d={form:null,init:function(){this.form=i(".generateFeed"),this.form.length&&(f.common(),i(n).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=i(this);e.val()&&!f.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=i('[name="'+t+'"]');e.length&&e.each(function(){var e=i(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);d.init()}},u=[],h=[],p=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=i(".wpf_regenerate"),this._current_btn=i("#".concat(this._feed.replace("wf_config","wf_feed_"))),this._current_btn_label=""}return _createClass(e,[{key:"init",value:function(){var t=this;return""!==this._feed&&this._regenerate&&!1===a.isRegenerating&&this.generate(),i(n).on("click",".wpf_regenerate",function(e){e.preventDefault(),t._current_btn=i(this),t._current_btn.hasClass("disabled")||!0===a.isRegenerating||(t._feed=t._current_btn.attr("id").replace("wf_feed_","wf_config"),""!==t._feed&&t.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,s.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),s.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"),s.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=i("#feed_progress_table");return e?t.show():t.hide(),this}},{key:"_updateProgressStatus",value:function(e){return i(".feed-progress-status").text(e),this}},{key:"_updateProgressBar",value:function(){var e=i(".feed-progress-percentage"),t=i(".feed-progress-bar-fill"),n="".concat(Math.round(this._progress),"%");t.css({width:n,background:this._color||"#3DC264"}),e.text(n)}}]),e}();a.wf={helper:f,feedEditor:d,generator:p},i(a).load(function(){null!==i(location).attr("href").match(/webappick.*feed/g)&&i("#wpbody-content").addClass("woofeed-body-content"),t(),postboxes.add_postbox_toggles(pagenow),(new p).init(),""!==c.generator.feed&&c.generator.regenerate,d.init(),f.common(),i(".wfmasterTooltip").hover(function(){var e=i(this),t=e.attr("wftitle");e.data("tipText",t).removeAttr("wftitle"),i('<p class="wftooltip"></p>').text(t).appendTo("body").fadeIn("slow")},function(){var e=i(this);e.attr("wftitle",e.data("tipText")),i(".wftooltip").remove()}).mousemove(function(e){i(".wftooltip").css({top:e.pageY+10,left:e.pageX+20})}),i(".generateFeed").validate(),i(n).on("click","[data-toggle_slide]",function(e){e.preventDefault(),i(i(this).data("toggle_slide")).slideToggle("fast")}).on("click","#wf_newRow",function(){var e=i("#table-1 tbody"),t=i("#feed_config_template").text().trim().replace(/__idx__/g,e.find("tr").length);e.append(t),f.fancySelect(i(".outputType"))}).on("click",".single-feed-delete",function(e){e.preventDefault(),confirm(c.form.del_confirm)&&(a.location.href=i(this).attr("val"))}).on("click","#doaction, #doaction2",function(){return confirm(c.form.del_confirm_multi)}).on("change",".dType",function(){var e=i(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(),i(this).closest("tr").remove(),f.reindex_config_table()}).on("submit","#generateFeed",function(){i(this).validate(),i(this).valid()&&i(".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){i(this).validate(),i(this).valid()&&i(".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=i(this).val(),t=i(".ssh2_status");"sftp"===e?(t.show().css("color","dodgerblue").text(c.form.sftp_checking),s.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(),f.ajax_fail(e)})):t.hide()}).on("click",'[name="save_feed_config"]',function(e){e.preventDefault(),i("#updatefeed").trigger("submit",{save:!0})}).on("change","#provider",function(e){if(e.preventDefault(),i(this).closest(".generateFeed").hasClass("add-new")){var t=i(this).val(),n=i("#feedType"),a=i("#providerPage"),r=i("#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)?d.renderMerchantInfo(r,n,u[t]):s.send("woo_feed_get_merchant_info",{type:"GET",data:{nonce:c.nonce,provider:t}}).then(function(e){u[t]=e,d.renderMerchantInfo(r,n,e)}).fail(f.ajax_fail),h.hasOwnProperty(t)?d.renderMerchantTemplate(a,h[t]):s.post("get_feed_merchant",{_ajax_nonce:c.nonce,merchant:t}).then(function(e){h[t]=e,d.renderMerchantTemplate(a,e)}).fail(f.ajax_fail)}}).on("change",".woo_feed_status_input",function(){var e=i(this);s.post("update_feed_status",{_ajax_nonce:c.nonce,feedName:e.val(),status:e[0].checked?1:0})}),i(n).on("change",'[name="is_outOfStock"], [name="product_visibility"]',function(){var e=i(".out-of-stock-visibility");"n"===i('[name="is_outOfStock"]:checked').val()&&"1"===i('[name="product_visibility"]:checked').val()?e.show():e.hide()}).on("change",".attr_type",function(){var e=i(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=i(this).closest("tr"),t=e.find(".wf_mattributes"),n=e.find(".attr_type"),a=e.find("td:eq(4)"),r=i("#provider").val();if(c.form.google_category.hasOwnProperty(t.val())&&"pattern"===n.val()&&f.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>")),_||a.append('<span class="spinner is-active" style="margin: 0;"></span>');var o=a.find(".wf_attributes select");f.selectize(o,{preload:!0,placeholder:c.form.select_category,load:function(e,t){_?t(_):s.send("get_google_categories",{type:"GET",data:{_ajax_nonce:c.nonce,action:"get_google_categories",provider:r}}).then(function(e){t(_=e),a.find(".spinner").remove()}).fail(f.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=i("#feedType").val(),t=i("#provider").val(),n=i(".itemWrapper"),a=i(".wf_csvtxt");""!==e&&f.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,n,o,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 i(e,t){return s.extend(!0,{},e,t)}function t(){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,_,f={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(i({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(i({create:e.data("create")||!1,plugins:e.data("plugins")?e.data("plugins").split(",").map(function(e){return e.trim()}):[],render:{item:f.selectize_render_item}},t))})},fancySelect:function(e,t){return(e||s("select.fancySelect")).not(".FancySelectInit").each(function(){s(this).fancySelect(i({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(){f.sortable(s(".sorted_table"),{},9,f.reindex_config_table),f.selectize(),f.fancySelect(s(".outputType"))}},d={form:null,init:function(){this.form=s(".generateFeed"),this.form.length&&(f.common(),s(n).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()&&!f.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);d.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 t=this;return""!==this._feed&&this._regenerate&&!1===a.isRegenerating&&this.generate(),s(n).on("click",".wpf_regenerate",function(e){e.preventDefault(),t._current_btn=s(this),t._current_btn.hasClass("disabled")||!0===a.isRegenerating||(t._feed=t._current_btn.attr("id").replace("wf_feed_","wf_config"),""!==t._feed&&t.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,o.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),o.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"),o.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,background:this._color||"#3DC264"}),e.text(n)}}]),e}();a.wf={helper:f,feedEditor:d,generator:h},s(a).load(function(){null!==s(location).attr("href").match(/webappick.*feed/g)&&s("#wpbody-content").addClass("woofeed-body-content"),t(),postboxes.add_postbox_toggles(pagenow),(new h).init(),""!==c.generator.feed&&c.generator.regenerate,d.init(),f.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(n).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),f.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("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"),i=s(this).parents("tr").find(".fancy-picker-content .fancy-picker-option"),o=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"),i.removeClass("selected"),"for_custom_taxo"!==t&&"for_price"!==t||i.each(function(e){n===s(this).text()&&(s(this).addClass("selected"),o.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(),f.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),o.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(),f.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)?d.renderMerchantInfo(r,n,u[t]):o.send("woo_feed_get_merchant_info",{type:"GET",data:{nonce:c.nonce,provider:t}}).then(function(e){u[t]=e,d.renderMerchantInfo(r,n,e)}).fail(f.ajax_fail),p.hasOwnProperty(t)?d.renderMerchantTemplate(a,p[t]):o.post("get_feed_merchant",{_ajax_nonce:c.nonce,merchant:t}).then(function(e){p[t]=e,d.renderMerchantTemplate(a,e)}).fail(f.ajax_fail)}}).on("change",".woo_feed_status_input",function(){var e=s(this);o.post("update_feed_status",{_ajax_nonce:c.nonce,feedName:e.val(),status:e[0].checked?1:0})}),s(n).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()&&f.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>")),_||a.append('<span class="spinner is-active" style="margin: 0;"></span>');var i=a.find(".wf_attributes select");f.selectize(i,{preload:!0,placeholder:c.form.select_category,load:function(e,t){_?t(_):o.send("get_google_categories",{type:"GET",data:{_ajax_nonce:c.nonce,action:"get_google_categories",provider:r}}).then(function(e){t(_=e),a.find(".spinner").remove()}).fail(f.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&&f.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","key","value","_regenerate","_current_btn_label","regenerate","_this","_log","response","_updateProgressStatus","message","product","setTimeout","_stopProgressBar","_process_batch","_color","_resetProgressBar","_ajax_nonce","post","_save_feed_file","_current_batch","_total_batch","_unblock_button","then","refreshInterval","arguments","undefined","_timer","setInterval","_updateProgressBar","clearInterval","update","table","show","hide","width","bar","percentage","load","background","preventDefault","pagenow","template","common","hover","title","appendTo","userAgent","merchantTemplateCache","remove","ClipboardJS","clipboard","location","slideToggle","tbody","append","row","confirm","type","del_confirm","href","del_confirm_multi","closest","reindex_config_table","valid","server","save","sftp_checking","nonce","sftp_available","sftp_warning","provider","merchant","fail","feedName","outOfStockVisibilityRow","checked","valueColumn","select","preload","google_category","query","attribute","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\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\tbackground: this._color || \"#3DC264\",\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).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\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// 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\t\t\t\t\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\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\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","key","value","_regenerate","_current_btn_label","regenerate","_this","_log","response","_updateProgressStatus","message","product","setTimeout","_stopProgressBar","_process_batch","_color","_resetProgressBar","_ajax_nonce","post","_save_feed_file","_current_batch","_total_batch","_unblock_button","then","refreshInterval","arguments","undefined","_timer","setInterval","_updateProgressBar","clearInterval","update","table","show","hide","width","bar","percentage","load","background","preventDefault","pagenow","template","common","hover","title","appendTo","userAgent","merchantTemplateCache","remove","ClipboardJS","clipboard","location","slideToggle","price_attributes","tbody","current_attribute_value","fancyOption","parents","selectKey","selectIf","indexOf","includes","confirm","closest","fancyDataPicker","row","Math","del_confirm_multi","reindex_config_table","type","postboxes","valid","server","validate","save","sftp_checking","sftp_available","sftp_warning","fail","merchant","outputSelect","send","provider","nonce","outOfStockVisibilityRow","feedName","checked","valueColumn","append","attribute","select","preload","google_category","query","cb","wf_csv_txt","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\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\tbackground: this._color || \"#3DC264\",\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).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\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// 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\t\t\t\t\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\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\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/cron-helper.php CHANGED
@@ -84,13 +84,15 @@ if ( ! function_exists( 'woo_feed_cron_update_single_feed' ) ) {
84
 
85
  $feedName = str_replace('wf_config','wf_feed_',$feedName);
86
 
87
- // Delete old duplicate cron.
88
- $old_cron_clean=get_option('woo_feed_old_cron_clean_'.$cron_param_feedName);
89
- if('cleaned'!==$old_cron_clean){
90
- wp_clear_scheduled_hook( 'woo_feed_update_single_feed',[$cron_param_feedName]);
91
- update_option('woo_feed_old_cron_clean_'.$cron_param_feedName,'cleaned');
92
- wp_schedule_event( time(), 'woo_feed_corn', 'woo_feed_update_single_feed', [ $cron_param_feedName ] );
 
93
  }
 
94
  $result = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->options WHERE option_name = %s", $feedName ), 'ARRAY_A' ); // phpcs:ignore
95
 
96
  if ( ! empty( $result ) ) {
84
 
85
  $feedName = str_replace('wf_config','wf_feed_',$feedName);
86
 
87
+ // get interval
88
+ $interval = absint( get_option( 'wf_schedule' ) );
89
+
90
+ // schedule single feed update
91
+ wp_clear_scheduled_hook( 'woo_feed_update_single_feed', array( $cron_param_feedName ) );
92
+ if ( ! wp_next_scheduled( 'woo_feed_update_single_feed', array( $cron_param_feedName ) ) ) {
93
+ wp_schedule_event( time() + $interval, 'woo_feed_corn', 'woo_feed_update_single_feed', array( $cron_param_feedName ) );
94
  }
95
+
96
  $result = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->options WHERE option_name = %s", $feedName ), 'ARRAY_A' ); // phpcs:ignore
97
 
98
  if ( ! empty( $result ) ) {
woo-feed.php CHANGED
@@ -11,7 +11,7 @@
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
  *
14
- * Version: 3.8.1
15
  * Author: WebAppick
16
  * Author URI: https://webappick.com/
17
  * License: GPL v2
@@ -39,7 +39,7 @@ if ( ! defined( 'WOO_FEED_FREE_VERSION' ) ) {
39
  * @var string
40
  * @since 3.1.6
41
  */
42
- define( 'WOO_FEED_FREE_VERSION', '3.8.1' );
43
  }
44
 
45
  if ( ! defined( 'WOO_FEED_FREE_FILE' ) ) {
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
  *
14
+ * Version: 3.8.3
15
  * Author: WebAppick
16
  * Author URI: https://webappick.com/
17
  * License: GPL v2
39
  * @var string
40
  * @since 3.1.6
41
  */
42
+ define( 'WOO_FEED_FREE_VERSION', '3.8.3' );
43
  }
44
 
45
  if ( ! defined( 'WOO_FEED_FREE_FILE' ) ) {