CTX Feed – WooCommerce Product Feed Manager Plugin - Version 4.4.52

Version Description

(2022-03-01) = * Fixed: Decimal and Thousand seperator does not work - issue has been fixed. * Fixed: Category mapping not saving for facebook - issue has been fixed. * Updated: Readme documentation updated.

Download this release

Release Info

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

Code changes from version 4.4.51 to 4.4.52

README.txt CHANGED
@@ -1,216 +1,244 @@
1
- === CTX Feed - WooCommerce Product Feed Generator ===
2
- Contributors: wahid0003, webappick, mhamudul_hk, shuvo586, nayanchamp7, aihimel, mrinal013
3
  Donate link: https://webappick.com
4
- Tags: Product Feed, WooCommerce, Google Shopping, Google Merchant, Facebook Catalog, Bing Shopping, Instagram Shop, Skroutz Data Feed, xml feed, csv feed, txt feed, woocommerce product feed
5
  Requires at least: 4.4
6
  Tested Up To: 5.8.2
7
  Requires PHP: 5.6
8
- Stable tag: 4.4.51
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
12
- Generate error-free woocommerce product feed for any marketing channel like Google Shopping, Facebook Catalog, Bing, Pinterest, Instagram, TikTok & 100+ more channels.
13
 
14
  == Description ==
15
- Easily create the most optimized and error-free product feeds for your WooCommerce store targeting the leading global and local product marketing channels like Google Shopping or Google Merchant, Facebook Dynamic Product Ads, Instagram Shopping Ads, Pinterest Shopping Ads, TikTok, eBay Ads, Bing Ads, PriceRunner, Rakuten, PriceSpy, Kelko, and more.
16
 
17
- **WooCommerce Product Feed Pro (CTX Feed)** is a WooCommerce product feed generator plugin for WooCommerce powered stores. This plugin currently supports more than 100+ marketing channels. So, you can target your desired marketing channels, price comparison sites, and/or affiliate networks.
18
 
19
- It aims to reduce your hardship on marketing efforts to create product feeds and distribute them in multiple marketing/shopping channels. There are flexible options to update product information according to your given schedule and sync the update to the right channel via HTTP or FTP. Stay at ease knowing that your customers will automatically get the latest product information.
20
-
21
- **UNLIMITED PRODUCTS**
22
-
23
- You can create product feed for unlimited products. No matter how many products you have in your WooCommerce Store, this WooCommerce product feed plugin can generate product feed for any number of products.
24
-
25
- **UNLIMITED FEED**
26
 
27
- Create unlimited product feeds for multiple channels of your preference. There is no restriction on creating the product feed for the available online channels.
28
 
29
- **WHAT IS PRODUCT FEED?**
30
-
31
- The product feed is an XML, TXT, CSV, XLS, or TSV file that contains a list of product information and their attributes (id, title, description, price, image, link, and other attributes) in an organized way so that each product can be displayed into search engines, compared uniquely and can be advertised.
32
 
33
- **WHY DO I NEED PRODUCT FEED?**
 
34
 
35
- You need a product feed if you are a retailer with an eCommerce store and want to get your products into the search engine or price comparison website or affiliate network. Product feed supply your product information to those online marketing channels so that buyer can easily find your products.
36
  <blockquote>
37
  <h4>Read Step by Step <a target="_blank" href="https://webappick.com/docs/woo-feed/">Documentation</a> and <a target="_blank" href="https://www.youtube.com/playlist?list=PLapCcXJAoEenI-35wc6YnnsAAgoYRxDr7">Video Tutorial</a></h4>
38
  <br/>
39
  <h4>For Support Email to <a href="mailto:support@webappick.com">support[@]webappick.com</a> </h4>
40
  <br/>
41
- <h4>REQUEST NEW FEATURE <a target="_blank" href="https://webappick.com/contact/">HERE</a></h4>
42
  <br/>
43
- <h4>PREMIUM VERSION: <a target="_blank" href="https://webappick.com/plugin/woocommerce-product-feed-pro/">WOOCOMMERCE PRODUCT FEED PRO</a></h4>
44
  <br/>
45
  </blockquote>
46
 
 
47
 
48
- **WHY SHOULD I CHOSE THIS PLUGIN?**
49
 
50
- In a word, WooCommerce Product Feed is a revolution. Yeah, it's a revolution of WooCommerce product feed technology because there are no modules or extensions that generate automatic or manual product feeds that can synchronize flexibility to shopping channels maintained by people with not much technical knowledge about WordPress. Among the thousands of reasons for choosing this WordPress plugin, we have mentioned a few of them below.
51
 
52
- **Google Merchant Feed Upload**
53
- [youtube https://www.youtube.com/watch?v=QRTvrDJm4mI]
54
 
55
- **EASY USER INTERFACE:**
56
 
57
- Creating the product feed and navigating the ctx feed plugin option is easy. Anyone can operate this product feed plugin without having any technical knowledge. You will get all the feed configuration in one window. There is no need to open a separate window to customize any field or option of the plugin.
58
 
59
- **PRODUCT TYPES:**
60
 
61
- Supports all default WooCommerce product types including bundle product, composite product, mix & match product, and subscription product by other plugins. Supported product types plugins are below:
62
 
63
- * <a target="_blank" href="https://woocommerce.com/products/composite-products/">WooCommerce Composite Products</a>
64
- * <a target="_blank" href="https://yithemes.com/themes/plugins/yith-woocommerce-composite-products/">YITH Composite Products</a>
65
- * <a target="_blank" href="https://wordpress.org/plugins/wpc-composite-products/">WPC Composite Products for WooCommerce</a>
66
- * <a target="_blank" href="https://woocommerce.com/products/product-bundles/">WooCommerce Product Bundles</a>
67
- * <a target="_blank" href="https://wordpress.org/plugins/yith-woocommerce-product-bundles/">YITH WooCommerce Product Bundles</a>
68
- * <a target="_blank" href="https://wordpress.org/plugins/woo-product-bundle/">WPC Product Bundles for WooCommerce</a>
69
- * <a target="_blank" href="https://woocommerce.com/products/woocommerce-subscriptions/">WooCommerce Subscription</a>
70
 
71
- **PRODUCT VARIABLE & VARIATION:**
72
 
73
- The free version of this product feed plugin automatically adds variable products and product variation. If a variable product has four variations, then the plugin will add five products to the product feed, including one product for the variable product (parent of the variations) and four products for variations.
74
 
75
- There is an option on the <a target="_blank" href="https://webappick.com/plugin/woocommerce-product-feed-pro/">CTX Feed Pro</a> version there you can exclude the variations or the variable products or you can keep both the variable and product variations.
 
 
 
 
 
76
 
77
- **BUILTIN TEMPLATE:**
78
 
79
- There are more than 100+ pre-configured templates to give you a quick start. Those platform-specific templates will help you create perfect WooCommerce product feeds without wasting valuable time. Apart from saving time, the templates also keep you on the safe side with perfectly formatted product feed templates.
80
 
81
- **CUSTOM TEMPLATE:**
82
 
83
- If a template is not available in our plugin, you can use the Custom Template to create any product feed for any channel. We can also add your channel as a template if you send your channels feed requirements to <a target="_blank" href="https://webappick.com/contact/">ctx feed support team</a>.
84
 
85
- **PRODUCT ATTRIBUTES:**
86
 
87
- You can include all the product attributes available in your product to make a complete product feed. You can make the product feed as detailed as possible.
88
 
89
- **OUTPUT TYPES:**
 
 
 
 
 
 
90
 
91
- You can modify or format the output of any product attribute value with these options below:
92
 
93
- * **Strip tags**: You can remove HTML tags from the product description.
94
 
95
- * **Integer**: You can format a rounded value of any number or product price.
96
 
97
- * **Price**: You can apply a number format to any number or product price.
98
 
99
- * **Rounded Price**: You can apply a round format to any number or product price.
100
 
101
- * **Remove Space**: You can remove double spaces from any attribute value.
102
 
103
- * **Remove Shortcodes**: You can remove shortcodes from the product title, description, or short description, etc.
104
 
105
- * **Remove Special Characters**: Sometimes non-UTF-8 characters are copied when you copy product description from any other source. You can remove these non-UTF-8 characters with this output type.
106
 
107
- * **CDATA**: CDATA protect any string from conflict between XML element and element value. Adding CDATA is a good practice for XML feed.
108
 
109
- * **ucfirst**: Make any string’s first character uppercase.
110
 
111
- * **ucwords**: Uppercase the first character of each word in the string.
112
 
113
- * **strtoupper**: Transform any string to upper case.
114
 
115
- * **strtolower**: Transform any string to lower case.
116
 
117
- * **urlToSecure**: Convert the URL to Secure HTTPS format.
 
118
 
119
- * **urlToUnsecure**: Convert the URL to HTTP format.
 
120
 
121
- * **only_parent**: Only add a variable product info to variation.
 
122
 
123
- * **parent**: Add variable product info to an attribute if variable value is not empty else add variation info.
124
 
125
- * **parent_if_empty**: Add variable product info to an attribute if the variation info is empty.
 
126
 
127
- * **Google Date Format**: Format date according to google merchant required format [Date and time, ISO 8601 compliant (YYYY-MM-DD, YYYY-MM-DDThh:mm:ss, or YYYY-MM-DDThh:mm:ssZ)].
128
 
129
- * Total 18 types of output formatting option available
130
 
131
- **PREFIX & SUFFIX:**
132
 
133
- You can add your preferred prefix and suffix to any product attribute value. For example, if you want to add the currency code with the price, then you can enter the currency code either on prefix or suffix according to your channel requirement.
134
 
135
- **STATIC VALUE:**
136
 
137
- You can easily add the same information as a static value to a merchant attribute for all the products. For example, when you add store code to your google local inventory feed, you need to add the same value to your products.
138
 
139
- **CATEGORY MAPPING:**
140
 
141
  Categories are the essential key to get products into search results. It is best practice to assign the most matching shopping engine category to your WooCommerce store category for each product. During the creation of your WooCommerce product feeds, you can also create a category for that particular product. And after creating the category, you’ll get an option to map it to your marketplace category so that you can make two categories aligned to each other. This feature is mostly used for Google Shopping feed and Facebook/Instagram product feed. The process is dynamic by our plugin & you can map all of your categories to make them more relevant & reachable to buyers.
142
 
143
- **BATCH FEED MAKING:**
 
 
 
 
 
 
 
 
144
 
145
- Due to PHP execution time and memory limit, it's not possible to process Thousands of products at a time. We have developed the ctx feed plugin with the functionality to make feed with batches. Users can easily set Limit and Offset to make feed. This functionality is compatible with any WordPress Hosting and any number of products you have on your site.
146
 
147
- **WP OPTIONS:**
148
 
149
- You will love the ability to include any wp-options values into the Product feed. Your store must have lots of other plugins, and all those WooCommerce plugins save data as an option. We have made it simple to add WP Options value into your WooCommerce product feed.
150
 
151
- **AUTO FEED UPDATE:**
152
 
153
- This WooCommerce Date Feed plugin automatically updates the product feed according to your given interval so that your product data will always be up to date —no need to manually update the feed.
154
 
155
- Due to product quantity (total products) and server configuration, the auto-feed update may not complete the update operation. For this reason, our plugin processes the products in small batches to make feed for unlimited products. But the auto-update operation process all the products at a time. So it may not work if your site has thousands of products. But you can quickly solve this issue by increasing the PHP execution_time (Time Limit) of your server.
156
 
157
- **GOOGLE PRODUCT FEED:**
158
 
159
- WooCommerce. With this woocommerce data feed Plugin, you can create a product feed by selecting the Google product feed template. Our pre-built google product feed template includes all the fields (Brand, GTIN, MPN, Product condition, etc.) that match the Google Product Feed requirements.
160
 
161
- According to your feed configuration, this woocommerce data feed plugin automatically identifies the value for identifier_exist attribute based on Brand, GTIN, and MPN value.
162
 
163
- Google Shopping product feed template automatically formats all the google product feed attribute structure according to <a target="_blank" href="https://support.google.com/merchants/answer/7052112?hl=en">Google Product Feed</a> requirements.
164
 
165
- **GOOGLE CANONICAL URL:**
166
 
167
- When you sell your woocommerce product with a different color variant, you may use the canonical_link attribute to submit the URL for each variant.
168
 
169
- Then comes the canonical_link attribute that redirects all the variants to the main product's landing page that does not include any variant. Google's web search crawler identifies the URLs that link to a single base product that does not have any pre-selected parameters.
170
 
171
- **GOOGLE SHIPPING & TAX:**
172
 
173
- CTX Feed plugin allows you to place the shipping zone and shipping class accurately so that your Google Shopping product feed includes the correct shipping information (shipping country, region, service, postal_code, price). Our plugin utilizes your configured shipping zone settings for a proper representation. Along with WooCommerce Shipping this WooCommerce Google Product Feed plugin also compatible with <a target="_blank" href="https://codecanyon.net/item/table-rate-shipping-for-woocommerce/3796656">Table Rate Shipping</a> plugin by BolderElement.
174
 
175
- **GOOGLE ANALYTICS UTM PARAMETER:**
 
 
176
 
177
  WooCommerce Product Feed plugin has an option to include Google Analytics UTM parameters to the product URLs that will help you evaluate your marketing channels' performance via Google Analytics.
178
 
179
- **GOOGLE DYNAMIC REMARKETING:**
180
 
181
  Google Dynamic remarketing event snippet collects data about specific searches related to a product and represents personalized ads by matching them with your product feed.
182
 
183
  Our plugin allows you to add Google Dynamic Remarketing event snippets across different pages of your website and enable the basic remarketing features of Google Remarketing Tracking.
184
 
185
- **TABLE RATE SHIPPING:**
 
 
 
 
 
 
186
 
187
- This plugin supports the WooCommerce Table Rate shipping by bolder element.
188
 
189
- **FACEBOOK CATALOG / INSTAGRAM SHOPPING FEED:**
190
 
191
- Facebook Catalog and Instagram have their own set of requirements that you need to follow to make a Facebook product feed or Instagram Shop feed. The attributes included in WooCommerce is not enough for Facebook Product Feed and Instagram Shop Feed.
192
 
193
- With our Plugin, you can easily create a product feed by selecting the Facebook Catalog / Instagram template. We have included a pre-built Facebook Catalog Feed / Instagram Shop Feed template that includes all the required Facebook and Instagram attributes.
194
 
195
- **FACEBOOK PIXEL TRACKING:**
196
 
197
- With this plugin, you can integrate Facebook pixel code on your website and match it with the Facebook catalog/ Instagram product feed contents.
198
 
199
- You can add Facebook Pixel events for Product pages, simple product page, variable product page, both Simple and Variable page, Category pages, Search result pages, All AddToCart events (cart page, cart button), Thank you Page
200
 
201
- **PINTEREST SHOPPING PRODUCT FEED:**
202
 
203
- With the Pinterest Product Feed template, you can easily create a product feed for woocommerce. We have included a pre-built Pinterest Feed template that includes all the Pinterest product feed attributes.
204
 
205
- **BING SHOPPING PRODUCT FEED:**
206
 
207
- With this plugin, you can create a Bing Shopping product feed by selecting the pre-made Bing Shopping Feed template. The Bing Shopping template includes all the necessary attributes that are required by Bing Shopping.
208
 
209
- **DYNAMIC DISCOUNT & PRICING**
210
 
211
- Our plugin automatically discounted price applied by any Dynamic Discount & Pricing Plugin.
212
 
213
- **SEO TITLE & META DESCRIPTION**
 
 
 
 
 
 
214
 
215
  CTX Feed plugin is compatible with three top-rated / most popular SEO plugins. You can assign SEO Meta Title and Meta Description instead of Product Title and Description if you want. Supported plugins are:
216
 
@@ -218,47 +246,60 @@ CTX Feed plugin is compatible with three top-rated / most popular SEO plugins. Y
218
  * <a target="_blank" href="https://wordpress.org/plugins/all-in-one-seo-pack/">All in one SEO</a>.
219
  * <a target="_blank" href="https://wordpress.org/plugins/seo-by-rank-math/">Rank Math SEO</a>.
220
 
221
- **BUILTIN PLUGIN CACHE**
222
 
223
  The built-in caching feature of our WooCommerce product feed plugin reduces the server load so that you can generate a product feed without requesting multiple database queries.
224
 
225
  <blockquote>
226
  <h4>If you like Free Version, you'll love the Pro Version</h4>
227
  <br/>
228
- <h4><a target="_blank" href="http://webappick.com/plugin/woocommerce-product-feed-pro/">WooCommerce Product Feed Pro</a> gives you everything you'll find in free and some awesome features described below.</h4>
229
  <br/>
230
  <br/>
231
  </blockquote>
232
 
233
 
234
- **PRODUCT BRAND (PRO FEATURE)**
 
 
235
 
236
- CTX Feed Pro plugin has an option to add product brands. You can even add other brand plugins data for brands of your preference. The supported brand plugins are listed below:
237
 
238
  * <a target="_blank" href="https://woocommerce.com/products/brands/">WooCommerce Brands</a>
239
  * <a target="_blank" href="https://wordpress.org/plugins/perfect-woocommerce-brands/">Perfect Brands for WooCommerce</a>
240
  * <a target="_blank" href="https://wordpress.org/plugins/yith-woocommerce-brands-add-on/">YITH WooCommerce Brands Add-On</a>
241
  * <a target="_blank" href="https://codecanyon.net/item/ultimate-woocommerce-brands-plugin/9433984">Ultimate WooCommerce Brands Plugin</a>
242
 
243
- **DYNAMIC ATTRIBUTE (PRO FEATURE)**
 
 
244
 
245
- The Dynamic Attribute combines the powerful features of the WooCommerce Product Feed Pro with the ability to set your conditions for any attribute. Different types of WooCommerce users have different types & classes of products and services. So, they may need a variety of custom values to demonstrate their products. And we are giving the options to make dynamic attributes as your need. It is also possible to generate the data feed file according to the search engine's requirements without changing your store's attributes.
246
 
247
- **SMART FILTER & CONDITION (PRO FEATURE)**
248
 
249
- Smart Filters help you exclude the non-profitable or out of season products you don’t want to share. Its high filtering options help users filter products according to product titles, price, availability of stocks, user rating, and other extensive product specifications.
250
 
251
- **ATTRIBUTE MAPPING (PRO FEATURE)**
252
 
253
- The first impression becomes the last impression! For example, Your product title can build interest in the buyer to hit your product. In the e-commerce business, product titles attract customers to get on the link if they are satisfied with the search result. The extended Product Title feature allows the user to extend the title of a product by adding different attributes. Extended Product Title is a great way to differentiate the products according to their variations, such as Size, Color, Custom Text, etc.
254
 
255
- **MULTI LANGUAGE FEED - WPML & POLYLANG (PRO FEATURE)**
256
 
257
- WooCommerce Product Feed Pro is compatible with <a target="_blank" href="https://wpml.org/">WPML</a> & <a target="_blank" href="https://wordpress.org/plugins/polylang/">Polylang</a> plugin for Multi-Language Feed. And by supporting WPML & Polylang makes it possible for the woocommerce store owners to create woocommerce product feed in different languages & currencies.
 
 
258
 
259
  Multilanguage enables retailers to globalize their business in minutes because they always have a better chance of selling something if they are already selling it in the native language.
260
 
261
- **MULTI CURRENCY FEED (PRO FEATURE)**
 
 
 
 
 
 
 
262
 
263
  When you want to globalize the business by selling your products in different local channels of different countries, you can create the product feed with the currency according to that channel’s currency requirement.
264
 
@@ -269,9 +310,9 @@ WooCommerce Product Feed Pro can create product feeds for specific currencies.
269
  * <a target="_blank" href="https://aelia.co/shop/currency-switcher-woocommerce/">Currency Switcher for WooCommerce</a> By Aelia.
270
  * <a target="_blank" href="https://wordpress.org/plugins/woocommerce-currency-switcher/">WooCommerce Currency Switcher (WOOCS)</a> by realmag777.
271
 
272
- **MULTI VENDOR FEED (PRO FEATURE)**
273
 
274
- Generating product feeds for your multi-vendor enabled WooCommerce store is also straightforward. You can choose multiple vendors or a single vendor while creating product feeds. The list of supported multi-vendor plugins is below.
275
 
276
  * <a target="_blank" href="https://wedevs.com/dokan">Dokan</a>.
277
  * <a target="_blank" href="https://www.wcvendors.com/">WC Vendors</a>.
@@ -279,33 +320,17 @@ Generating product feeds for your multi-vendor enabled WooCommerce store is also
279
  * <a target="_blank" href="https://yithemes.com/themes/plugins/yith-woocommerce-multi-vendor/">YITH WooCommerce Multi-Vendor</a>.
280
  * <a target="_blank" href="https://wclovers.com/">WCFM Marketplace for WooCommerce</a>.
281
 
282
- **CUSTOM ATTRIBUTE (PRO FEATURE)**
283
 
284
  If you have added any custom attribute field to your product, you will get the product attribute list fields while creating a feed to assign your product's custom field value to your channel attribute.
285
 
286
- **CUSTOM FIELDS - ACF,FIELD FACTORY,ETC. (PRO FEATURE)**
287
 
288
  This plugin supports the <a target="_blank" href="https://wordpress.org/plugins/advanced-custom-fields/">Advanced Custom Field (ACF)</a> or any custom field plugin’s fields as attribute values. You can assign your custom product attribute values to any feed attribute.
289
 
290
- **PRODUCT META & TAXONOMIES (PRO FEATURE)**
291
-
292
- Product meta and taxonomies are very common, but what if you wanted to add them with your product feeds too? You can add any product taxonomies or any product meta value added by WooCommerce or any WooCommerce extension plugins into your product feeds with our support for the custom taxonomies and meta. Easily add product information like brand name, model number, and size.
293
 
294
- **AVAILABLE FEATURES:**
295
-
296
- * Unlimited number of products.
297
- * Unlimited number of feeds.
298
- * It is highly customizable, having access to 100+ merchant sites & also very responsive of user commands.
299
- * 100+ Pre configured merchant template for 200+ countries.
300
- * Feeds are accessible via HTTP or HTTPS. So that merchant can easily and automatically fetch product feed from given Feed URL.
301
- * You can post your product feeds either manually from your site to shopping engines
302
- or you can also set FTP to post your feeds automatically to your desired engines.
303
- * There are 3 supported file formats for feeds. XML, TXT, CSV.
304
- * Attribute Prefix and Suffix. You can easily add Marketing or Promo Text with Product Title, Description And its also possible to add Price symbol,currency code with price.
305
- * Output formatting using Strip Tags, UTF-8 encode, Remove Space, CDATA, Htmlentities, Price and Number format.
306
- * Output Limitation. You can Limit output length according to your merchant feed specification.
307
- * Scheduled Feed Update
308
- * Auto Feed upload via FTP
309
 
310
  **SUPPORTED CHANNELS:**
311
 
@@ -319,6 +344,7 @@ Product meta and taxonomies are very common, but what if you wanted to add them
319
  * <a target="_blank" href="https://help.pinterest.com/en/business/article/before-you-get-started-with-catalogs">Pinterest RSS Feed</a>
320
  * <a target="_blank" href="https://ads.tiktok.com/help/article?aid=10001006">TikTok Ads</a>
321
  * <a target="_blank" href="https://feedonomics.com/blog/local-inventory-ads-on-microsoft-advertising-aka-bing-ads/">Bing Local Inventory Feed</a>
 
322
  * <a target="_blank" href="http://www.ebaycommercenetwork.com/">eBay Commerce Network</a>
323
  * <a target="_blank" href="http://www.nextag.com/">NexTag.com</a>
324
  * <a target="_blank" href="http://www.pricegrabber.com/">PriceGrabber.com </a>
@@ -481,31 +507,79 @@ e.g.
481
  <br/>
482
  </blockquote>
483
 
484
- = which shopping engines are supported? =
485
 
486
  This plugin support all the sopping engines.
487
 
488
- = Does the plugin support product variation? =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
489
 
490
- Yes
491
 
492
- = Is there any limitation to feed size? =
493
 
494
- No, You can make unlimited number of feed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
495
 
496
  = What is the difference between Free and Pro Version? =
497
 
498
- Free version include all the major functions but Pro version have some awesome functionality.
499
 
500
  Using pro version:
501
 
502
- * You can filter product using price, quantity, product name
503
 
504
  * You can use custom taxonomies or other plugins taxonomy value into feed
505
 
506
- * Using Category Mapping You can map your store category with your merchant category which is very useful for visitor to find out your product into merchant site.
 
 
507
 
508
- * You can make different price for different merchant using Dynamic Attribute. Also it is possible to set different value for different product using Dynamic Attribute Conditions.
 
509
 
510
  == Screenshots ==
511
 
@@ -516,6 +590,11 @@ Using pro version:
516
 
517
  == Changelog ==
518
 
 
 
 
 
 
519
  = 4.4.51 (2022-02-24) =
520
  * Updated: Pinterest catalog feed attributes updated.
521
 
1
+ === CTX Feed - WooCommerce Product Feed Plugin for Google Shopping, Facebook, Pinterest & More ===
2
+ Contributors: wahid0003, webappick, mhamudul_hk, shuvo586, nayanchamp7, mrinal013
3
  Donate link: https://webappick.com
4
+ Tags: WooCommerce Product Feed, WooCommerce, Google Shopping, Google Merchant, Facebook Catalog, Bing Shopping, Instagram Shop, Skroutz Data Feed, XML Feed, CSV Feed, TXT Feed, Product Feed
5
  Requires at least: 4.4
6
  Tested Up To: 5.8.2
7
  Requires PHP: 5.6
8
+ Stable tag: 4.4.52
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
12
+ Generate error-free woocommerce product feed plugin for Google Shopping, Facebook Catalog, Pinterest Catalog, Idealo, Skroutz, TikTok & 100+ more channels.
13
 
14
  == Description ==
 
15
 
16
+ Easily create the most optimized and error-free Google Shopping Product Feed or Google Merchant Feed, Facebook Catalog Feed, Pinterest Shopping Feed, InstagramCatalog Feed, TikTok Catalog, Snapchat Catalog, eBay Ads, Bing Ads, PriceRunner, Rakuten, PriceSpy, Kelko, & 100+ more channels for your WooCommerce Store.
17
 
18
+ This **WooCommerce product feed Manager Plugin** supports over 100+ recognized channels. Hence, you can reach out to any marketplaces, search engines, affiliate sites, or price comparison sites to extensively promote your products to the customers.
 
 
 
 
 
 
19
 
20
+ Creating a WooCommerce product feed using CTX Feed a WooCommerce Product Feed Manager Plugin – has become easier than ever. Struggle no more in creating the most perfect and subtle product feed for your designated and preferred marketing channels for internationally prominent marketplaces, along with other notable ones as well.
21
 
22
+ It aims to reduce your hardship on marketing efforts to create product feeds and distribute them in multiple marketing/shopping channels. There are flexible options to update product information according to your given schedule and sync the update to the right channel via HTTP or FTP. Stay at ease knowing that your customers will automatically get the latest product information.
 
 
23
 
24
+ **WooCommerce Google Shopping Product Feed - Video Tutorial**
25
+ [youtube https://www.youtube.com/watch?v=QRTvrDJm4mI]
26
 
 
27
  <blockquote>
28
  <h4>Read Step by Step <a target="_blank" href="https://webappick.com/docs/woo-feed/">Documentation</a> and <a target="_blank" href="https://www.youtube.com/playlist?list=PLapCcXJAoEenI-35wc6YnnsAAgoYRxDr7">Video Tutorial</a></h4>
29
  <br/>
30
  <h4>For Support Email to <a href="mailto:support@webappick.com">support[@]webappick.com</a> </h4>
31
  <br/>
32
+ <h4>Request New Feature <a target="_blank" href="https://webappick.com/contact/">Here</a></h4>
33
  <br/>
34
+ <h4>Try Premium Version: <a target="_blank" href="https://webappick.com/plugin/woocommerce-product-feed-pro/">CTX Feed Pro</a></h4>
35
  <br/>
36
  </blockquote>
37
 
38
+ **WHY SHOULD YOU USE THIS WOOCOMMERCE PRODUCT FEED PLUGIN?**
39
 
40
+ CTX Feed is the best WooCommerce product feed plugin, and we proclaim it because we are the first pioneering plugin builder when it comes to creating a Product Feed for WooCommerce. We have been in the industry long enough to understand how WooCommerce feed works. That’s why we have introduced all the WordPress-Goers with our robust and revolutionary features that could facilitate your product uploading experience and get you rid of any trouble you face, such as uploading rejection or lack of necessary marketing channels’ attributes or inability to translate into a correct language or currency, etc.
41
 
42
+ Over the years of experience and expertise, we have curated all the factors that most online vendors face while creating the feed. You may not customize the product’s description or title properly. Also, the image links for the multiple variations of the same products may not function properly. Besides, making the feed in CSV format requires you to enter the data in the spreadsheet, resulting in a massive draining of your energy. If you need to create two feed files using CSV and XML format, the immediate transitions do not happen concurrently.
43
 
44
+ Here, our CTX Feed – WooCommerce Product Feed Plugin solves all the problems by giving you an ad-hoc solution. You can also format any attributes based on the output type that we have provided. We didn’t create those outputs by accident; we got them created from the feedback you all raised once encountering the issues. Hence, our tailored solutions can solve simple problems like formatting the price listing from two decimal to any decimals while giving the option to apply an integer. At the same time, this user-friendly plugin provides valuable identifiers add-on options to avoid any mismatch between the same brand’s products.
 
45
 
46
+ Let’s jump deeper into the ample features this mighty plugin has to offer:
47
 
48
+ **☞ UNLIMITED PRODUCTS**
49
 
50
+ No matter what the size of your inventory is, you can upload all of your products with no restriction imposed. From hundreds to thousands, you can upload unlimited products of your online store into any of the channels mentioned above, and that too with subtlety.
51
 
52
+ **☞ UNLIMITED FEED**
53
 
54
+ Like unlimited products uploading, you can make an infinite number of feeds containing any number of products of any sized store. You can access all the product feed files from the Manage Feeds option. To find the right feed out of a massive collection of feeds, you can look at the unique name of the feed instead of looking at the URL for your convenience.
55
+
56
+ **💯100+ PRE-CONFIGURED TEMPLATES 💯**
57
+
58
+ With our pre-configured 100+ built-in templates, you can make product feed within minutes without having to take excess pressure in researching every individual attribute or necessary field requirements of the known channels. It is time-consuming and bothersome to some extent. Besides, it is of no guarantee that your gleaned attributes will match precisely with the channels’ requirement, as some might change or some might turn from optional to compulsory.
59
+
60
+ Therefore, it is worth playing it safe to take advantage of our ready-made templates crafted extensively for the desired marketplaces.
61
 
62
+ **☞ SUPPORTS ANY PRODUCT FEED FILE TYPE**
63
 
64
+ This stellar WooCommerce product feed manager create the Product Feed for WooCommerce into 5 different feed file formats, the highest compared to any WooCommerce feed generator out there. The types are;
65
 
66
+ * **XML** Product Feed
67
+ * **CSV** Product Feed
68
+ * **TSV** Product Feed
69
+ * **XLS** Product Feed
70
+ * **TXT** Product Feed
71
+ * **JSON** Product Feed
72
 
73
+ These 5 types ensure that you create a product feed that appears differently yet uniquely to various marketing channels that they are destined to be promoting the products. They contain product information, including title, description, image URL, price, identifiers, and other attributes. Hence their appearance in the feed file entirely depends on how the channel wants to add them based on the type that you have selected. CTX Feed does them automatically once you select the type.
74
 
75
+ **☞ CREATE WOOCOMMERCE PRODUCT FEED USING USER-FRIENDLY INTERFACE**
76
 
77
+ The purpose of creating the feed is to carry out the information & attributes of the products, which the designated channels can upload rightly and aptly. It allows the customers to find your products without missing any crucial information. Likewise, the marketing-based rejection rate drops significantly as the merchant meets all the requirements of that particular channel. The CTX Feed has all the elements rightly aligned on the same page to create or customize the right channels.
78
 
79
+ You don’t have to create any separate window to find, amend or modify any attributes or mandatory fields as all of them are in the same window. It makes your uploading process way easier without requiring any prior technical knowledge, making it less mistakable as you don’t have to hover in and out of the window too often.
80
 
81
+ **☞ SUPPORTS ANY WOOCOMMERCE PRODUCT TYPES**
82
 
83
+ We value your concern, and to reduce any unnecessary nuisances of finding the relevant products, CTX Feed enables your WooCommerce feed to fully incorporate by supporting all the plugins that help you provide options for Bundle products, composite products, mix and match products, and finally, subscription product. The reason being CTX Feed the best WooCommerce product feed plugin is because it supports some of the top-notch plugins like the following;
84
 
85
+ * <a target="_blank" href="https://woocommerce.com/products/composite-products/">WooCommerce Composite Products</a>: This is a kit-builder plugin that is supported by CTX Feed, which allows the customers to customize or tweak their products from all the small accessories found on the product page to enhance the use of that specific product
86
+ * <a target="_blank" href="https://yithemes.com/themes/plugins/yith-woocommerce-composite-products/">YITH Composite Products</a>
87
+ * <a target="_blank" href="https://wordpress.org/plugins/wpc-composite-products/">WPC Composite Products for WooCommerce</a>
88
+ * <a target="_blank" href="https://woocommerce.com/products/product-bundles/">WooCommerce Product Bundles</a>: When you create a deal containing some of the relevant products in bulk quantity together and give an offer on the whole deal, you need a plugin to support that personalized deal. CTX Feed readily endorses all of those plugins to create a Product Feed for WooCommerce in a perfect way.
89
+ * <a target="_blank" href="https://wordpress.org/plugins/yith-woocommerce-product-bundles/">YITH WooCommerce Product Bundles</a>
90
+ * <a target="_blank" href="https://wordpress.org/plugins/woo-product-bundle/">WPC Product Bundles for WooCommerce</a>
91
+ * <a target="_blank" href="https://woocommerce.com/products/woocommerce-subscriptions/">WooCommerce Subscription</a>: If you cover any subscription-based products, it will be easy for you to have a plugin that will give you an estimation of your residual revenue. Whatever money you make from the weekly, monthly, or annual subscription from the recurrent fees can be easily monitored using the WooCommerce Subscription plugin. CTX Feed boosts the outstanding experience by supporting the pertinent plugins needed for this effect to take place.
92
 
93
+ **☞ VARIABLE AND VARIATION FEATURES ALL-INCLUSIVE**
94
 
95
+ Having multiple variable child products is no longer a hassle; you can now include any variations that a product might possess.
96
 
97
+ **Bear In Mind** - with the help of <a target="_blank" href="https://webappick.com/plugin/woocommerce-product-feed-pro/">CTX Feed Pro</a> - you get six options where you can decide whether you wish to have all the products along with variations by selecting variable + variations or only variations by choosing all variations. You can also decide if you wish to go for parent product only or just any specific variant. Just set the instruction, and our WooCommerce-WP product feed manager will automatically include or exclude the variable and variations.
98
 
99
+ **☞ CREATING CUSTOM TEMPLATES FOR ANY CHANNELS**
100
 
101
+ This free version allows you to make any template for your personalized marketplace. If you intend to create a template for a more complex XML feed file, that is possible too. Using Custom Template 2 a premium feature of CTX Feed Pro, the developers can easily play around with the coding system to make any attributes you need for your channels. Also, if you want us to focus on your marketing channels and include its template in our CTX Feed plugin, you are requested to send your feed requirements to the <a target="_blank" href="https://webappick.com/contact/">CTX Feed Support Team</a>.
102
 
103
+ **☞ PRODUCT ATTRIBUTES:**
104
 
105
+ Attributes are the mainstay of the product feed. The purpose to create a product feed for WooCommerce is to get as much information as possible regarding the inventory products. Based on that, your products will be highlighted on your preferred marketplace.
106
 
107
+ CTX Feed a powerful WooCommerce product feed plugin, that helps you create any attributes into any channels alongside the pre-configured attributes. These attributes can range from product ID, Title, Description, Image link, Brand, Price, MPN to Tax, Shipping, Gender, Height, Material, Availability, Stock Availability, Size, Delivery Cost, and many more. You can either avail them directly from the drop-down menu or make your bespoke one.
108
 
109
+ **☞ USE OUTPUT TYPES TO AVOID ANY ERRORS**
110
 
111
+ Output types are the one that makes this plugin the best plugin to create Product Feed for WooCommerce. When you create a Product Feed for WooCommerce, it is most likely that mistakes continue without your acknowledgment. Remember, not all your merchants require all of the information, such as when it comes to adding HTML tags, manipulation of shortcodes, or wrong exploitation of the numbering format.
112
 
113
+ To use them correctly in your attributes, the use of correct output is a prerequisite. You have an option to change or apply any output types for any given attributes for any channels. We have over 20 output types, and take a look at how it works;
114
 
115
+ * **Strip Tags**: If you any HTML code like `<p>string </p>` in any attributes, strip tag will remove it and leave it as only String
116
 
117
+ * **Remove Special Characters**: Using this, you can get rid of any unnecessary non-UTF-8 characters of product description derived from any source when copied.
118
 
119
+ * **CDATA**: Your XML feed file will show up as an error if there is a contradiction between the XML element and only element. It generally happens when the words of the XML attributes, such as Title, Description, etc., match exactly with the main words in the description, title, or other attributes’ boxes.
120
+ This plugin can remove this issue when applied CDATA as it sets the code into every attribute like the following <g:description> <![CDATA[description]]> </g:description>
121
 
122
+ * **Remove Shortcodes**: Shortcodes are the small codes that take to you the page where you have added any specific elements, such as slides, images, tables, etc. Having them in the description or title can cause trouble when they are made using different plugins; it can be possible that you no longer have those plugins. Also, you may not want to see an image’s shortcode in the description when you already have a link to that image.
123
+ Therefore, Remove Shortcodes will remove that particular code from those sections, freeing you from any hassles.
124
 
125
+ * **Price**: Your pricing format is essential, especially if it is still not tweaked. If you use the price format on WooCommerce, which doesn’t fit into the standard format, don’t worry! The CTX Feed’s default pricing mode will apply to your price. Still, you can customize your pricing format using our plugin.
126
+ Remove Space: If you accidentally put double space between any words or texts, or characters, you can remove them in any attributes using Remove Space.
127
 
128
+ * **Parent**: If the product has variations, then the main product is called the variable, and the child products are called the variations. In this instance, if the information like the description of the variable is not empty, then the variable (parent) is given more priority and adds the description of that parent. Whereas the variations (child products) value will be selected when the variable description is empty
129
 
130
+ * **Parent_if_empty**: It means, when the variations information, such as description, is empty, it will only add the value of the parent (variable)
131
+ Google Date Format: You can easily set your date as per Google’s required Merchant required format like [Date and time, ISO 8601 compliant (YYYY-MM-DD, YYYY-MM-DDThh:mm:ss, or YYYY-MM-DDThh:mm:ss Z)].
132
 
133
+ If you want to know more about how the output type and other bits work, check out our <a target="_blank" href="https://webappick.com/docs/ctx-feed/basic/make-woocommerce-product-feed/">documentation</a> on CTX Feed.
134
 
135
+ **☞ PREFIX & SUFFIX:**
136
 
137
+ Both prefix and suffix are a series of letter, or more precisely, characters that describe the pattern of the Value of the attributes within the Product Feed for WooCommerce. Prefix sits just before the value, whereas the suffix sits after the value. One such example is the currency code, which is an important factor in deciding whether the plugin used to generate it is the best WooCommerce product feed plugin. You can use the currency symbol such as £ or $ as a prefix before the amount (the value) or the USD or GBP as a suffix right after the amount.
138
 
139
+ **☞ STATIC VALUE:**
140
 
141
+ This is one of the most distinctive features that CTX Feed users can take advantage of when dealing with an enormous number of products. You get to choose whether you wish to apply the same value for all the products in the Merchant center or individual value. Attribute and pattern are the two types; the Attribute denotes the individual value for all the products, and the Static implies the same value for all.
142
 
143
+ For instance, if you have hundreds of products that refer to the same brand, in that case, you will choose a Pattern type that will decide the same value for all of them. However, in the case of a unique identifier like SKU, you will choose the Attribute type as the SKU is unique for each product.
144
 
145
+ **☞ CATEGORY MAPPING:**
146
 
147
  Categories are the essential key to get products into search results. It is best practice to assign the most matching shopping engine category to your WooCommerce store category for each product. During the creation of your WooCommerce product feeds, you can also create a category for that particular product. And after creating the category, you’ll get an option to map it to your marketplace category so that you can make two categories aligned to each other. This feature is mostly used for Google Shopping feed and Facebook/Instagram product feed. The process is dynamic by our plugin & you can map all of your categories to make them more relevant & reachable to buyers.
148
 
149
+ One of the most critical factors of promoting and selling your products through various merchant centers is to get the right search for the Google product category. Your inventory products must have the correct category so that customers can find them easily and relate them to their daily needs. Remember, the Google product category you select for your WooCommerce products may not match your desired marketing channels. You will have to come up with the right category. The CTX Feed gives you that opportunity to create your individual products categories that are in keeping with the channels’ categories. This feature is mostly used for Google Shopping product feed, Facebook Catalog feed, Pinterest Catalog feed, and others who follow Google Shopping Feed Structure.
150
+
151
+ Once you are done with the category-creating of your WooCommerce product in the Category Mapping, you can then navigate the initial categories to the newly created categories. It makes the customers’ searching easier, and your product gets more discoverable on the search engines.
152
+
153
+ **☞ BATCH FEED MAKING:**
154
+
155
+ Due to PHP execution time and memory limit, it's not possible to process Thousands of products at a time. We have developed the CTX feed plugin with the functionality to make feed with batches. Users can easily set Limit and Offset to make feed. This functionality is compatible with any WordPress Hosting and any number of products you have on your site.
156
+
157
+ If you own a larger inventory with lots of products, it is not always possible to process all of them simultaneously; it can be deemed an error due to lower PHP execution time, memory limit, and poor server/hosting configuration. If the PHP script time runs out of the designated time, the script stops and gives the error. Therefore, our WooCommerce product feed manager helps you to create product feed with the largest inventory in small batches so that you never get stuck.
158
 
159
+ You can also set the batch limit by which your products will be listed in the feed. Hence, no chance of error or rejection. This specific feature of the CTX Feed is compatible with all kinds of WordPress hosting for any size of products your inventory contains.
160
 
161
+ **☞ WP OPTIONS:**
162
 
163
+ The significant bit of this plugin is that it allows you to include any wp-options values into your feed file. For any attribute, you can add these values. The wp-options values can not only be added from your own CTX Feed plugin, but also you can add the values generated by the other essential plugins that you use for your online store purpose since those values are stored as options. It simply means that you can use the values in your feed file generated from both our WooCommerce product feed manager as well as the other generators too.
164
 
165
+ **☞ AUTO FEED UPDATE:**
166
 
167
+ This WooCommerce product feed plugin automatically updates your products based on your given interval time, saving you from manually updating it by logging in and checking. The free version gives you 5 intervals, whereas the Product Feed Pro for WooCommerce gives you three shorter intervals for quicker feed updates.
168
 
169
+ As stated before, this plugin processes Product Feed for WooCommerce in batches to get away with any feed rejection rate due to a vast number of products as the auto-update could have failed. However, suppose your PHP time limit, hosting, and server configuration turns out poor. In that case, this plugin may not be able to complete the operation if the inventory contains thousands of products at a time. Usually, the auto-update updates all the products at the same time; otherwise, it will cause an error in feed uploading. In that case, you need to upgrade your PHP execution time within the server.
170
 
171
+ **☞ GOOGLE PRODUCT FEED:**
172
 
173
+ Creating product feed for Google Shopping has become twice as easy as ever before. Out of 100+ pre-configured templates, the Google Shopping Product Feed template is one of the most tangible templates, rolling out all the essential attributes that you need to complete the feed creation with the help of this CTX Feed plugin. Neither do you need to scroll Google or other web content to find out the required fields, nor will you have to go through the detailed Google guideline to check which pattern they expect you to follow to make a successful Google Shopping feed? CTX Feed contains all the mandatory fields, such as MPN, GTIN, Brand, Condition, Gender, etc.
174
 
175
+ In fact, CTX Feed automatically recognizes the value that needs to be set for those required fields for the Google Shopping Product feed. This is the best WooCommerce Google Shopping plugin to create product feed abides by the <a target="_blank" href="https://support.google.com/merchants/answer/7052112?hl=en">Google product feed specification</a>. And you can see the exact reflection of the format already set as default in all the attributes within the Google Shopping Feed template. Therefore, no manually setting up; use it like plug and play. Select it and choose the correct output value in the feed.
176
 
177
+ **☞ MULTILINGUAL GOOGLE SHOPPING PRODUCT FEED**
178
 
179
+ In the process of globalization, language is no longer a barrier. Creating a Google Product Feed for WooCommerce for every country doesn’t require you to change the language from default to multiple languages manually. The best WooCommerce product feed for Google Shopping plugin – CTX Feed Pro comes with the multi-lingual feature, making a swift transition from the default language (where the original store is originally based) of one country to another language for the new country of sale with the help of supplementary Google Shopping feed. And that too happens without making any changes in the currency as the currency changes automatically on Google Merchant Center.
180
 
181
+ **☞ GOOGLE CANONICAL URL:**
182
 
183
+ Google often suffers from the canonical issue when the main product page has multiple variant pages. Multiple variants occur when the main product has specific variants, like sizes, colors, etc. This makes Google confused as to which page it should focus more on. This is where Google Shopping <a target="_blank" href="https://support.google.com/merchants/answer/9340054?hl=en">canonical_link</a> comes in handy, and thereby you can go to the main products landing page and put the URL of the main page into all the variants’’ pages so that Google redirects the users of those variant pages to the main landing page, which contains no pre-selected parameters.
184
 
185
+ **☞ GOOGLE SHIPPING & TAX:**
186
 
187
+ CTX Feed is a perfect WooCommerce Google Product Feed Manager with perfect integration of Google Shipping and Tax. It draws the information, such as shipping zone, class, region, postcode, shipping methods (flat rate, free shipping, local pickup) from the WooCommerce shipping setting and maps them into the newly created Google Product feed to reflect the accurate shipping alignment to your products. Whatever information you customize into your WooCommerce setting will be adjusted automatically the moment you map the two settings into the correct attribute within the feed.
188
 
189
+ Besides, our Google Shopping product feed generator also supports the <a target="_blank" href="https://codecanyon.net/item/table-rate-shipping-for-woocommerce/3796656">Table Rate Shipping</a> plugin by BolderElement, which helps you to apply conditions on shipping based on their classes, individuality, delivery time, etc.
190
+
191
+ **☞ GOOGLE ANALYTICS UTM PARAMETER:**
192
 
193
  WooCommerce Product Feed plugin has an option to include Google Analytics UTM parameters to the product URLs that will help you evaluate your marketing channels' performance via Google Analytics.
194
 
195
+ **☞ GOOGLE DYNAMIC REMARKETING:**
196
 
197
  Google Dynamic remarketing event snippet collects data about specific searches related to a product and represents personalized ads by matching them with your product feed.
198
 
199
  Our plugin allows you to add Google Dynamic Remarketing event snippets across different pages of your website and enable the basic remarketing features of Google Remarketing Tracking.
200
 
201
+ **☞ TABLE RATE SHIPPING:**
202
+
203
+ For the optimum usage of WooCommerce shipping, this WooCommerce Google Shopping feed manager is compatible with WooCommerce Bolder Element’s Table rate shipping.
204
+
205
+ **☞ FACEBOOK CATALOG FEED/ INSTAGRAM SHOPPING FEED:**
206
+
207
+ Like the WooCommerce product feed for Google Shopping, Facebook and Instagram have their unique product attributes based on their own guidelines. They will differ from the other reputable marketing channels. By using their required attributes, you can facilitate the WooCommerce Facebook product feed catalog, which, in turn, will increase the visibility of your Facebook shop for WooCommerce. The more optimized your WooCommerce Facebook Product Feed Catalog is, the more your products match the relevant keywords searched by the customers. The same applies to the Instagram shop WooCommerce plugin.
208
 
209
+ When you create a Product Feed using Facebook and Instagram Shop WooCommerce plugin, you may get attributes for any marketplace, including Facebook and Instagram, but that won’t be sufficient enough to support your catalog, as you don’t remain updated all the time regarding which attributes are added recently and which are discarded. By using CTX Feed, you will populate the attributes as per Facebook/Instagram’s requirements.
210
 
211
+ [youtube https://youtu.be/Ml-KoFEVBHQ]
212
 
213
+ **☞ FACEBOOK PIXEL TRACKING:**
214
 
215
+ With CTX Feed, you don’t require any manual coding or any plugin to set up Facebook pixel tracking. By using this WooCommerce Facebook Product Feed plugin, you have the option to insert the Pixel code (derived from your Facebook Business Suite) and enable the pixel. You can keep a record of your online visitors, as well as the ad-campaigns progress.
216
 
217
+ **☞ FACEBOOK COUNTRY/LANGUAGE OVERRIDE FEED**
218
 
219
+ This WooCommerce Facebook Product Feed plugin is compatible with most of the multilanguage plugins in the market. Since Facebook is accessed worldwide, promoting your product through Facebook is undoubtedly a super platform. But people may face difficulty when your product’s title, description, or currency appear as the default language, same as the store's origin. Yet this CTX Feed Pro – WooCommerce Product Feed Pro Plugin helps you create the <a target="_blank" href="https://www.facebook.com/business/help/2144286692311411?id=725943027795860">Facebook country/language override feed</a>for any language you configured in your site.
220
 
221
+ **☞ PINTEREST CATALOG PRODUCT FEED:**
222
 
223
+ With the Pinterest Product Feed template, you can easily create a product feed for WooCommerce. We have included a pre-built Pinterest Feed template that includes all the Pinterest Catalog attributes.
224
 
225
+ [youtube https://youtu.be/kv1PMdCYy_g]
226
 
227
+ **☞ BING SHOPPING PRODUCT FEED:**
228
 
229
+ By having our WooCommerce product feed manager, you can easily create your BING shopping product feed simply by selecting the BING Shopping template. This template consists of all the prerequisite attributes to create a Product Feed for WooCommerce successfully.
230
 
231
+ **☞ DYNAMIC DISCOUNT & PRICING**
232
 
233
+ CTX Feed automatically applies the discounting and pricing information into your new Product Feed for WooCommerce as it is compatible with most of the discounting and pricing plugins.
234
 
235
+ * <a target="_blank" href="https://wordpress.org/plugins/woo-discount-rules/">Discount Rules for WooCommerce </a>.
236
+ * <a target="_blank" href="https://codecanyon.net/item/woocommerce-dynamic-pricing-discounts/7119279">WooCommerce Dynamic Pricing & Discounts</a>.
237
+ * <a target="_blank" href="https://wordpress.org/plugins/pricing-deals-for-woocommerce/">Pricing Deals for WooCommerce</a>.
238
+ * <a target="_blank" href="https://wordpress.org/plugins/aco-woo-dynamic-pricing/">Dynamic Pricing With Discount Rules for WooCommerce</a>.
239
+ * <a target="_blank" href="https://wordpress.org/plugins/woo-advanced-discounts/">Conditional Discounts for WooCommerce</a>.
240
+
241
+ **☞ SEO TITLE & META DESCRIPTION**
242
 
243
  CTX Feed plugin is compatible with three top-rated / most popular SEO plugins. You can assign SEO Meta Title and Meta Description instead of Product Title and Description if you want. Supported plugins are:
244
 
246
  * <a target="_blank" href="https://wordpress.org/plugins/all-in-one-seo-pack/">All in one SEO</a>.
247
  * <a target="_blank" href="https://wordpress.org/plugins/seo-by-rank-math/">Rank Math SEO</a>.
248
 
249
+ **☞ BUILTIN PLUGIN CACHE**
250
 
251
  The built-in caching feature of our WooCommerce product feed plugin reduces the server load so that you can generate a product feed without requesting multiple database queries.
252
 
253
  <blockquote>
254
  <h4>If you like Free Version, you'll love the Pro Version</h4>
255
  <br/>
256
+ <h4><a target="_blank" href="http://webappick.com/plugin/woocommerce-product-feed-pro/">CTX Feed Pro - WooCommerce Product Feed Plugin</a> gives you everything you'll find in free and some awesome features described below.</h4>
257
  <br/>
258
  <br/>
259
  </blockquote>
260
 
261
 
262
+ **☞ PRODUCT BRAND (PRO FEATURE)**
263
+
264
+ When you focus on your products’ branding, people find it more beneficial as they develop more trust in your online store. When people search for a product, the first thing they will notice is the brand they are purchasing. The brand items, such as their name, logo, copyright, will retain the customers on your product page longer. Therefore, the ability to have the attribute options to include the brand of the product is a must. CTX Feed has the brand option to let you create the brand of your products and use them in your WooCommerce Product Feed Pro plugin.
265
 
266
+ Besides, this premium WooCommerce-WP product feed manager helps you extract the other brands generated by other branding plugins to use in your feed. Those plugins are used to create a new brand, logos, etc. They also allow you to use A-Z shortcodes to give you the option to list your various brands so that the brands can be found and navigated easily. Some of these supported plugins are;
267
 
268
  * <a target="_blank" href="https://woocommerce.com/products/brands/">WooCommerce Brands</a>
269
  * <a target="_blank" href="https://wordpress.org/plugins/perfect-woocommerce-brands/">Perfect Brands for WooCommerce</a>
270
  * <a target="_blank" href="https://wordpress.org/plugins/yith-woocommerce-brands-add-on/">YITH WooCommerce Brands Add-On</a>
271
  * <a target="_blank" href="https://codecanyon.net/item/ultimate-woocommerce-brands-plugin/9433984">Ultimate WooCommerce Brands Plugin</a>
272
 
273
+ **💎DYNAMIC ATTRIBUTE (PRO FEATURE) 💎**
274
+
275
+ If there is one of the reasons why CTX Feed is the best WooCommerce product data feed plugin, Dynamic attribute complements it. With this pro feature, you can set a series of conditions on each attribute regardless of any marketing channels. These conditions ensure that the products will meet the conditions based on their selected attributes, and based on that, they or their relevant information will appear. For example, if you want certain products’ height > 2cm ‘to appear as “big,” and the rest of them with height < 2cm to be “small,” it can be done by dynamic attribute feature. This will help you to meet any channel requirements.
276
 
277
+ **💎SMART FILTER & CONDITION (PRO FEATURE) 💎**
278
 
279
+ Smart & Advanced features are two of the most remarkable features of CTX Feed Pro. Both features can include or remove the products based on your instructions. If you want specific products, such as products with backorder, out-of-stock, or empty description products to be out of the Product Feed for WooCommerce, you can easily tick them within this plugin Product Feed Pro for WooCommerce in the Smart Filtering option. You can also include the products that are either loss-making or have lower demand.
280
 
281
+ Besides, Advanced Filtering allows you to put certain conditions on the products based on their various attributes like title, id, description, height, length, weight, price, price with tax, availability, etc., depending on the conditions. The product feed will either include all of the conditions or only any of the fulfilled conditions.
282
 
283
+ **💎ATTRIBUTE MAPPING (PRO FEATURE) 💎**
284
 
285
+ First impressions are the most lasting. The title is the one that customers fancy first. In most cases, the e-commerce owners hardly prioritize the title, but this is where your competitors are more likely to take advantage of. Good titles will pursue to click on that product and switch straight to that product’s main online site. The customers get an in-depth insight into what that product is all about. If the title is short or too ambiguous, it will increase the bounce rate, leading the customers to refrain from it. Therefore, CTX Feed Pro has the built-in attribute mapping feature so that it lets you extend the title or any attributes to force the customers to click and yet purchase your products.
286
 
287
+ For example, if your title has the brand name, product name, user’s gender, usage purpose, seasons, etc., it is more likely to turn your customers into conversions. This feature is crucial for generating WooCommerce product feed for Google Shopping and Facebook shop WooCommerce as this may help the customers distinguish between the same products within Google or Facebook Shopping.
288
 
289
+ **💥MULTI-LANGUAGE FEED - WPML & POLYLANG (PRO FEATURE) 💥**
290
+
291
+ WooCommerce Product Feed Pro is compatible with & plugin for Multi-Language Feed. And by supporting WPML & Polylang makes it possible for the WooCommerce store owners to create WooCommerce product feed in different languages & currencies.
292
 
293
  Multilanguage enables retailers to globalize their business in minutes because they always have a better chance of selling something if they are already selling it in the native language.
294
 
295
+ When you think broader and wish to popularize your products worldwide, you can’t think of confining your products only to the local market, where the language is the same as the online store’s location. To reach out to a massive number of people in every corner of the world, your plugin Product Feed Pro for WooCommerce has to have the ability to translate the language into the convenient language of that particular region’s people. The more they can understand and read your product’s detail, the better it will perform internationally. Supported Multi-language plugin are:
296
+
297
+ * <a target="_blank" href="https://wpml.org/">WPML</a>
298
+ * <a target="_blank" href="https://wordpress.org/plugins/polylang/">Polylang</a>
299
+ * <a target="_blank" href="https://translatepress.com/">TranslatePress</a>
300
+ * <a target="_blank" href="https://weglot.com/">Weglot</a>
301
+
302
+ **💥MULTI-CURRENCY FEED (PRO FEATURE) 💥**
303
 
304
  When you want to globalize the business by selling your products in different local channels of different countries, you can create the product feed with the currency according to that channel’s currency requirement.
305
 
310
  * <a target="_blank" href="https://aelia.co/shop/currency-switcher-woocommerce/">Currency Switcher for WooCommerce</a> By Aelia.
311
  * <a target="_blank" href="https://wordpress.org/plugins/woocommerce-currency-switcher/">WooCommerce Currency Switcher (WOOCS)</a> by realmag777.
312
 
313
+ **💥MULTI-VENDOR FEED (PRO FEATURE) 💥**
314
 
315
+ By using some of the high-grade multi-vendor plugins, you can generate feeds for single or multi-vendors. This WooCommerce product feed manager allows you to have multiple vendors promoting their products under your own website. In that case, you can assign the products to individual vendors based on their preferences and generate the product feeds according to their list of products enlisted on WooCommerce shopping. Currently, CTX Feed Pro supports the following multi-vendor plugins, such as
316
 
317
  * <a target="_blank" href="https://wedevs.com/dokan">Dokan</a>.
318
  * <a target="_blank" href="https://www.wcvendors.com/">WC Vendors</a>.
320
  * <a target="_blank" href="https://yithemes.com/themes/plugins/yith-woocommerce-multi-vendor/">YITH WooCommerce Multi-Vendor</a>.
321
  * <a target="_blank" href="https://wclovers.com/">WCFM Marketplace for WooCommerce</a>.
322
 
323
+ **💥CUSTOM ATTRIBUTE (PRO FEATURE) 💥**
324
 
325
  If you have added any custom attribute field to your product, you will get the product attribute list fields while creating a feed to assign your product's custom field value to your channel attribute.
326
 
327
+ **💥CUSTOM FIELDS - ACF,FIELD FACTORY,ETC. (PRO FEATURE) 💥**
328
 
329
  This plugin supports the <a target="_blank" href="https://wordpress.org/plugins/advanced-custom-fields/">Advanced Custom Field (ACF)</a> or any custom field plugin’s fields as attribute values. You can assign your custom product attribute values to any feed attribute.
330
 
331
+ **💥PRODUCT META & TAXONOMIES (PRO FEATURE) 💥**
 
 
332
 
333
+ Product taxonomies are more like attributes’ categories. Brands, size, weights have their own value, and they are considered the attributes’ value when applied in the feed. Using this WooCommerce product feed pro plugin, any product meta or taxonomy created by any plugin can be added to the feed.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
334
 
335
  **SUPPORTED CHANNELS:**
336
 
344
  * <a target="_blank" href="https://help.pinterest.com/en/business/article/before-you-get-started-with-catalogs">Pinterest RSS Feed</a>
345
  * <a target="_blank" href="https://ads.tiktok.com/help/article?aid=10001006">TikTok Ads</a>
346
  * <a target="_blank" href="https://feedonomics.com/blog/local-inventory-ads-on-microsoft-advertising-aka-bing-ads/">Bing Local Inventory Feed</a>
347
+ * <a target="_blank" href="https://advertising.amazon.com/">Amazon Seller Ad</a>
348
  * <a target="_blank" href="http://www.ebaycommercenetwork.com/">eBay Commerce Network</a>
349
  * <a target="_blank" href="http://www.nextag.com/">NexTag.com</a>
350
  * <a target="_blank" href="http://www.pricegrabber.com/">PriceGrabber.com </a>
507
  <br/>
508
  </blockquote>
509
 
510
+ = Why should I use this WooCommerce product feed plugin? =
511
 
512
  This plugin support all the sopping engines.
513
 
514
+ = Why is CTX Feed one of the best WooCommerce product feed generators? =
515
+
516
+ Being a freemium plugin, the free version is capable of generating a feed with almost every little element you need to make it perfect. However, the pro version can leverage your feed with lots of premium features like dynamic attribute (applying conditions on the products), attribute mapping (for modifying title, description, or other attributes), ample marketplaces to promote your products, custom template for more complex feed for a personalized channel, variations and variables setup, multilingual & multicurrency feature, different output types for mapping the products, auto-update feature, etc. These features make it one of the best WooCommerce product feed plugins.
517
+
518
+ = For which channels can I generate product feed with CTX Feed free and pro version? =
519
+
520
+ Tou can create a feed for more than 100 marketing channels from high-range to any range. It is available for both free and pro versions. However, the pro version of this WooCommerce product feed manager allows you to create custom templates for your own bespoke channels.
521
+
522
+ = Can I generate a Google product feed for WooCommerce with CTX Feed? =
523
+
524
+ Yes, you can. In fact, WooCommerce Google Shopping is one of the most key channels for feed generation. Therefore, we have not only put Google Shopping as a single channel, but we also have several templates of Google built-in the CTX Feed, such as Google Shopping inventory ads, Google Ads, Google Promotions, Google Dynamic search ads, etc.
525
+
526
+ = How do I generate a WooCommerce Google product feed for Google Shopping? =
527
+
528
+ Check out the following tutorial.
529
+
530
+ **WooCommerce Google Shopping Product Feed - Video Tutorial**
531
+ [youtube https://www.youtube.com/watch?v=QRTvrDJm4mI]
532
 
533
+ = How can I create Facebook product catalog feeds? =
534
 
535
+ Watch the following YouTube video to know more about creating the Facebook catalog feed
536
 
537
+ **WooCommerce Facebook Catalog Product Feed - Video Tutorial**
538
+ [youtube https://youtu.be/Ml-KoFEVBHQ]
539
+
540
+ = Are there any limits of products the plugin supports in a single feed? =
541
+
542
+ No. You can create a feed with unlimited products.
543
+
544
+ = Are there any limits on product feed? =
545
+
546
+ No. This best WooCommerce product feed plugin is capable of creating an unlimited number of feeds.
547
+
548
+ = Does CTX Feed auto-update product feeds? =
549
+
550
+ Yes, This plugin offers you a range of product feed updating interval times. You can set your interval time, and the product feed will update automatically as per the scheduled time.
551
+
552
+ = What file format does CTX Feed Plugin Support? =
553
+
554
+ It supports 6 feed file formats depending on the marketing channels you select;
555
+
556
+ * XML
557
+ * CSV
558
+ * TXT
559
+ * TSV
560
+ * JSON
561
+ * XLS
562
+
563
+ = Does this plugin support. product variations? =
564
+
565
+ Yes, This plugin supports both variables and their associated variations.
566
 
567
  = What is the difference between Free and Pro Version? =
568
 
569
+ The free version includes all the major functions but the Pro version has some awesome functionality.
570
 
571
  Using pro version:
572
 
573
+ * You can filter products using price, quantity, product name
574
 
575
  * You can use custom taxonomies or other plugins taxonomy value into feed
576
 
577
+ * Using Category Mapping You can map your store category with your merchant category which is very useful for visitors to find out your product on the merchant site.
578
+
579
+ * You can make different prices for different merchants using Dynamic Attribute. Also, it is possible to set different values for different products using Dynamic Attribute Conditions.
580
 
581
+ ** CTX FEED Free vs Pro**
582
+ [youtube https://youtu.be/XEW8rSyEcSU]
583
 
584
  == Screenshots ==
585
 
590
 
591
  == Changelog ==
592
 
593
+ = 4.4.52 (2022-03-01) =
594
+ * Fixed: Decimal and Thousand seperator does not work - issue has been fixed.
595
+ * Fixed: Category mapping not saving for facebook - issue has been fixed.
596
+ * Updated: Readme documentation updated.
597
+
598
  = 4.4.51 (2022-02-24) =
599
  * Updated: Pinterest catalog feed attributes updated.
600
 
admin/css/woo-feed-admin.css CHANGED
@@ -1998,6 +1998,24 @@ input[id^=woo_feed_identifier_] {
1998
  border-radius: 50%;
1999
  }
2000
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2001
  span[id*=cat-map-] {
2002
  cursor: pointer;
2003
  position: relative;
1998
  border-radius: 50%;
1999
  }
2000
 
2001
+ .woo-feed-category-mapping-config-table {
2002
+ position: relative;
2003
+ }
2004
+ .woo-feed-category-mapping-config-table .woo-feed-cat-map-spinner {
2005
+ display: -ms-flexbox;
2006
+ display: flex;
2007
+ -ms-flex-pack: center;
2008
+ justify-content: center;
2009
+ width: 100%;
2010
+ height: 100%;
2011
+ position: absolute;
2012
+ top: 0;
2013
+ left: 0;
2014
+ background: rgba(235, 235, 235, 0.9);
2015
+ z-index: 999;
2016
+ padding-top: 250px;
2017
+ }
2018
+
2019
  span[id*=cat-map-] {
2020
  cursor: pointer;
2021
  position: relative;
admin/css/woo-feed-admin.min.css CHANGED
@@ -1 +1 @@
1
- .wpf_spin{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}.wpf_spin.reverse_spin{animation-direction:reverse}.wpf_regenerate.disabled{color:#737373;box-shadow:none;cursor:not-allowed}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.webappick-info{color:#42a5fa}.wfbtn{background:#3498db;background-image:linear-gradient(125deg,#3cb0fd 0,#152f8c 140%);border-radius:3px;box-shadow:inset 0 1px 3px #666;font-family:Arial,sans-serif;color:#fff;font-size:20px;padding:10px 20px 10px 20px;border:solid #2b698f 0;text-decoration:none}.wfbtn:hover{background:#3cb0fd;background-image:linear-gradient(to bottom,#3cb0fd,#3498db);text-decoration:none}.woo-feed-ctx-startup-notice{min-height:168px;background-size:contain!important;border:none;display:block;margin-left:0;margin-top:40px}.woo-feed-ctx-startup-notice button::before{color:#fbfbfb;font-size:18px}.woo_feed_manage_list_table .wf_update_interval_btn{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%);border:none}.woo_feed_manage_list_table .wf_update_interval_btn:hover{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)}.woo-feed-promotion{position:relative;display:none}.woo-feed-promotion .woo-feed-campaign-close-button{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:15px;width:24px;height:24px;border-radius:12px;background:#595d6b;line-height:24px;color:#fff;cursor:pointer;transition:.3s ease}.woo-feed-promotion .woo-feed-campaign-close-button:hover{background:#fff;color:#d61e48}.wftooltip{display:none;position:absolute;border:1px solid #333;background-color:#161616;border-radius:5px;padding:10px;color:#fff;font-size:12px}.feed-actions .makeFeedResponse{width:70%;color:green}.woo-feed-mapping-input{width:100%}.requiredIn{color:red}.generalInput{width:200px}.generalInput:not(.selectize-control){margin:5px auto}.error{color:red}.widefat td input,.widefat td select{max-width:100%}.woo-feed-btn-bg-gradient-blue,[data-class=woo-feed-btn-bg-gradient-blue]{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)!important;border:none;outline:0;border-width:0!important;box-shadow:none!important;transition:1s lenear;font-weight:500;color:#fff!important}.woo-feed-btn-bg-gradient-blue:hover,[data-class=woo-feed-btn-bg-gradient-blue]:hover{background:#3cb0fd!important}.woo-feed-btn-bg-gradient-red{background:linear-gradient(125deg,#eb4d4b 0,#ff9671 140%)!important;border:none;outline:0;border-width:0!important;box-shadow:none!important;transition:1s lenear;font-weight:500;color:#fff!important}.woo-feed-btn-bg-gradient-red:hover{background:#fc5c65!important}.woo-feed-btn-bg-gradient-purple{background:linear-gradient(67.36deg,#9733ee 3.09%,#da22ff 64.97%)!important;border:none;outline:0;border-width:0!important;box-shadow:none!important;transition:1s lenear;font-weight:500;color:#fff!important}.woo-feed-btn-bg-gradient-purple:hover{background:#a203fb!important}.woo-feed-light-btn-bg-gradient-blue{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)!important}#wf_newRow{margin-left:0}.mtable tbody tr{height:25px;border:1px solid #ccc;text-align:left;-ms-flex-align:baseline;align-items:baseline;font-weight:700}.mtable th:nth-child(1){width:17px}.mtable th:nth-child(2){width:160px}.mtable th:nth-child(3){width:100px}.mtable th:nth-child(4){width:100px}.mtable th:nth-child(5){width:150px}.mtable th:nth-child(6){width:100px}.mtable th:nth-child(7){width:150px}.mtable th:nth-child(8){width:90px}.mtable th:nth-child(9){width:29px}.mtable2 tbody tr{height:25px;border:1px solid #ccc;text-align:left;-ms-flex-align:baseline;align-items:baseline;font-weight:700}.mtable2 th:nth-child(1){width:30px}.mtable2 th:nth-child(2){width:150px}.mtable2 th:nth-child(3){width:230px}.mtable2 th:nth-child(4){width:220px}.mtable2 th:nth-child(7){width:50px}.mtable2 th:nth-child(8){width:50px}.mtable2 th:nth-child(9){width:29px}.wp-admin select.wf_mattributes{width:150px;left:0;height:25px}div#wf-tab-content1 select:not([name^=output_type]){width:100%}div#wf-tab-content1 input{width:100%}div#wf-tab-content1 .dashicons{vertical-align:middle}.wf_attributes{width:150px;left:0}.wf_compare{max-width:245px;left:0}.wf_ps{width:100px;left:0}.wf_sortedtable{cursor:move}.sorted_table{position:relative}.sorted_table .dragged{position:absolute;opacity:.8;z-index:9999;background:#fff;width:100%;display:table}.sorted_table tbody tr.placeholder td{border:1px dashed #2cc185;height:46px}.wfnoempty{width:120px}.woofeed-body-content #providerPage{display:-ms-flexbox;display:flex;-ms-flex-direction:column-reverse;flex-direction:column-reverse}#providerPageWrapper{display:-ms-flexbox;display:flex;-ms-flex-direction:column-reverse;flex-direction:column-reverse}#providerPageWrapper .wf_tabs{position:relative;margin:0 auto;width:100%;list-style:none}#providerPageWrapper .wf_tabs:after{display:table;clear:both;content:""}#providerPageWrapper .wf_tabs li{background:#fff;float:left;display:none;border:2px solid #ccc}#providerPageWrapper .wf_tabs li.active{display:block}#providerPageWrapper .wf_tabs li .wf-tab-content{z-index:2;width:100%;font-size:.9rem;display:block;left:0}#providerPageWrapper .wf_tabs li .wf-tab-content .feed-actions{border:none;border-top:2px solid #ccc}#providerPageWrapper #tabName{display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:start;align-items:flex-start}#providerPageWrapper #tabName .tab-name{min-width:300px;border:2px solid #ccc;border-bottom:none}#providerPageWrapper #tabName .tab-name input[type=radio]{display:none}#providerPageWrapper #tabName .tab-name label.activate{background:#2cc185;color:#fff}.wf-tab-name{display:block;padding:15px;font-size:15px;font-weight:700;line-height:1;background:#fff;cursor:pointer;position:relative;text-align:center;text-transform:uppercase;color:#2cc185}.wf-tab-name:hover{background:#2cc185;color:#fff}.wf_tabs [id^=tab]:checked+label{background:#2cc185;color:#fff}.wf_tabs [id^=tab]:checked~[id^=wf-tab-content]{display:block}div#wf-tab-content2 table:first-child{padding:10px 0}div#wf-tab-content2 table:first-child td:nth-child(1){width:260px}div#wf-tab-content2 table:first-child td:nth-child(2){width:260px}table.feed-actions tr td:last-child{text-align:right}select.selectize{display:none}body.no-js select.selectize{display:block!important}.wp-list-table .option_name .wf_feed_option_name_link{font-weight:700;color:#30336b}.wp-list-table #option_name a{color:#32373c}.selectize-dropdown .active{background-color:#edf9ff}.selectize-dropdown .create{padding:5px 8px}.wapk-selectize-item{background:#0073aa!important;color:#f1f1f1!important;border-color:#0073aa!important;padding-left:5px;padding-right:5px;border-radius:3px}.selectize-google-category .selectize-input{padding-right:30px}.selectize-google-category .selectize-dropdown-content{padding:0 8px}.selectize-google-category .selectize-dropdown-content .wapk-selectize-item{color:#000!important;background-color:#edf0f2!important;margin-bottom:3px!important;padding:3px 8px!important;transition-duration:.6s}.selectize-google-category .selectize-dropdown-content .wapk-selectize-item.active{background-color:#a2c8e1!important;transition-duration:.6s}.selectize-input.full #googleTaxonomyId-selectized{opacity:0;position:absolute;left:-10000px}.selectize-dropdown [data-selectable].option{cursor:default}.selectize-control.plugin-remove_button [data-value] .remove{border-left:1px solid #f1f1f1!important}.selectize-dropdown .optgroup-header{font-weight:700;background:#efefef;color:#5a5a5a}.selectize-dropdown [data-selectable].option{cursor:pointer}.wf_status_wrap label{width:55px;height:28px;box-sizing:border-box;float:left;border-radius:100px;position:relative;cursor:pointer;transition:.3s ease;background:linear-gradient(125deg,#e2e2e2 0,#ccc 140%)}input[class=woo_feed_status_input]:checked+label{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)}input[class=woo_feed_status_input]:checked+label:before{left:29px}.wf_status_wrap label:before{transition:.3s ease;content:"";width:20px;height:20px;position:absolute;background:#fff;left:6px;top:4px;box-sizing:border-box;color:#000;border-radius:100px;box-shadow:0 1.5px 2px 0 #000}.view span.dashicons.dashicons-external{color:#22a6b3}.view span.dashicons.dashicons-sos{color:#22a6b3}.view span.dashicons.dashicons-download{color:#ee5253}.view span.dashicons.dashicons-media-code{color:#576574}.column-url,.widefat td.column-url,.widefat th.column-url{color:#1e8f9a;font-weight:700}.feed-progress-container{width:100%;color:#fff;text-align:center;font-weight:300}.feed-progress-bar{width:100%;background:#eee;padding:3px;border-radius:50px;box-shadow:inset 0 1px 3px rgba(0,0,0,.2)}.feed-progress-bar-fill{height:20px;display:block;background:linear-gradient(to right top,#10ac84,#13b389,#15ba8f,#18c194,#1ac89a,#13cba1,#0acfa9,#00d2b0,#00d2ba,#00d2c3,#00d2cb,#00d2d3);width:0;border-radius:50px;transition:width .8s ease}.feed-progress-status{float:left;font-weight:700;color:#00008b}.feed-progress-percentage{text-align:right;font-weight:bolder;color:#1dd1a1;font-family:"Arial Black",sans-serif;font-size:large}#wpbody-content.woofeed-body-content{overflow:visible!important}.clippy{position:relative;width:13px;margin-top:-3px;margin-left:3px;top:3px}.column-url .clippy{display:none}.column-url:hover .clippy{display:inline-block}.tooltipped{position:relative}.tooltipped:after{position:absolute;z-index:1000000;display:none;padding:5px 8px;font:normal normal 11px/1.5 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:rgba(0,0,0,.8);border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tooltipped:before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:rgba(0,0,0,.8);pointer-events:none;content:"";border:5px solid transparent}.tooltipped:hover:before{display:inline-block;text-decoration:none}.tooltipped:hover:after{display:inline-block;text-decoration:none}.tooltipped:active:before{display:inline-block;text-decoration:none}.tooltipped:active:after{display:inline-block;text-decoration:none}.tooltipped:focus:before{display:inline-block;text-decoration:none}.tooltipped:focus:after{display:inline-block;text-decoration:none}.tooltipped-multiline:hover:after{display:table-cell}.tooltipped-multiline:active:after{display:table-cell}.tooltipped-multiline:focus:after{display:table-cell}.tooltipped-multiline:after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-break:break-word;word-wrap:normal;white-space:pre-line;border-collapse:separate}.tooltipped-s:after{top:100%;right:50%;margin-top:5px;-webkit-transform:translateX(50%);transform:translateX(50%)}.tooltipped-s:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.tooltipped-se:after{top:100%;margin-top:5px;right:auto;left:50%;margin-left:-15px}.tooltipped-se:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.tooltipped-sw:after{top:100%;right:50%;margin-top:5px;margin-right:-15px}.tooltipped-sw:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.tooltipped-n:after{right:50%;bottom:100%;margin-bottom:5px;-webkit-transform:translateX(50%);transform:translateX(50%)}.tooltipped-n:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.tooltipped-ne:after{bottom:100%;margin-bottom:5px;right:auto;left:50%;margin-left:-15px}.tooltipped-ne:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.tooltipped-nw:after{right:50%;bottom:100%;margin-bottom:5px;margin-right:-15px}.tooltipped-nw:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.tooltipped-w:after{right:100%;bottom:50%;margin-right:5px;-webkit-transform:translateY(50%);transform:translateY(50%)}.tooltipped-w:before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.tooltipped-e:after{bottom:50%;left:100%;margin-left:5px;-webkit-transform:translateY(50%);transform:translateY(50%)}.tooltipped-e:before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.tooltipped-multiline.tooltipped-s:after{right:auto;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.tooltipped-multiline.tooltipped-n:after{right:auto;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.tooltipped-multiline.tooltipped-w:after{right:100%}.tooltipped-multiline.tooltipped-e:after{right:100%}.tooltipped-sticky:before{display:inline-block}.tooltipped-sticky:after{display:inline-block}.tooltipped-sticky.tooltipped-multiline:after{display:table-cell}.fullscreen-overlay-enabled.dark-theme .tooltipped:after{color:#000;background:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-s:before{border-bottom-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-se:before{border-bottom-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-sw:before{border-bottom-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-n:before{border-top-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-ne:before{border-top-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-nw:before{border-top-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-e:before{border-right-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-w:before{border-left-color:rgba(255,255,255,.8)}@media screen and (min-width:0\0){.tooltipped-multiline:after{width:250px}}ul.tracker_collection_list{list-style:initial;padding:initial;margin:-10px 0 0 30px;font-size:11px!important}ul.tracker_collection_list li{margin:0}table.wf-info-table,table.wf-rate-table{vertical-align:middle;text-align:center;max-width:100%;font-weight:500;margin-top:10px}table.wf-info-table th,table.wf-rate-table th{text-align:center}table.wf-info-table th .woo-feed-top-header,table.wf-rate-table th .woo-feed-top-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}table.wf-info-table th .woo-feed-top-header .get-woo-feed-pro,table.wf-rate-table th .woo-feed-top-header .get-woo-feed-pro{margin-left:20px}table.wf-info-table th .woo-feed-top-header .get-woo-feed-pro img,table.wf-rate-table th .woo-feed-top-header .get-woo-feed-pro img{width:172px}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons{float:right;display:-ms-flexbox;display:flex;border-radius:7px;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a{padding:8px 20px;background:#576574;color:#fff;box-sizing:border-box;display:inline-block;transition:.3s ease}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-doc-link,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-doc-link{background:#576574;border-top-left-radius:5px;border-bottom-left-radius:5px}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-video-link,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-video-link{background:#ee5253}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-support-link,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-support-link{background:#22a6b3;border-top-right-radius:5px;border-bottom-right-radius:5px}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a span.dashicons,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a span.dashicons{font-size:18px;line-height:1.2}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a:hover,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a:hover{background:#30336b;box-shadow:0 0 33px 0 rgba(0,0,0,.12)}table.wf-info-table strong,table.wf-rate-table strong{font-weight:700}table.wf-info-table th:first-child img{margin:0 0 -5px 5px}table.wf-rate-table a{color:#0073aa}table.wf-rate-table a.review-star:after{content:"\f155\f155\f155\f155\f155"!important;font-family:dashicons;font-size:10px;font-weight:100;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#0073aa;text-decoration:underline}#adminmenu #toplevel_page_webappick-manage-feeds div.wp-menu-image::before{content:"";background:url(../images/woo-feed-icon.svg) no-repeat center center;background-size:20px 20px;opacity:.6}#adminmenu #toplevel_page_webappick-manage-feeds:hover div.wp-menu-image::before{opacity:1}#adminmenu #toplevel_page_webappick-manage-feeds.wp-has-current-submenu div.wp-menu-image::before{opacity:1}.wapk-admin,.wapk-admin *{box-sizing:border-box}.wapk-admin{position:relative;display:block;-webkit-hyphens:manual;-ms-hyphens:manual;-moz-hyphens:manual;hyphens:manual;color:#1b2730;margin:0 0 0 -10px}@media screen and (min-width:783px){.wapk-admin{margin:0 0 0 -20px}}.text-center{text-align:center}.wapk-admin h1,.wapk-admin h2,.wapk-admin h3,.wapk-admin h4,.wapk-admin h5,.wapk-admin h6,.wapk-admin p{color:#1b2730}.wapk-admin sup{vertical-align:baseline;position:relative;top:-6px}.wapk-admin sub{vertical-align:baseline;position:relative;top:4px}.wapk-admin .wapk-section{margin:10px 20px 0 22px;position:relative;display:block}.wapk-admin .wapk-section [class$=icon32]+h2{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px 0;line-height:1.3}.wapk-admin .wapk-section h1{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px 0;line-height:1.3}.wapk-admin .wapk-section>h2:first-child{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px 0;line-height:1.3}.wapk-admin>.notice{margin:10px 20px 0 22px;position:relative;display:block}.wapk-admin span.help{display:block;float:left;width:100%;font-size:.9em;color:#636363;margin-top:5px;font-weight:500}.wapk-admin span.help .dashicons{width:11px;height:12px;font-size:inherit;vertical-align:middle}.clear:after{content:"";display:table;clear:both}.wapk-feed-docs .postbox{width:355px;margin-right:20px;display:inline-block;vertical-align:top}.wapk-feed-docs .postbox .hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4;cursor:pointer}.wapk-feed-docs .postbox .dashicons{color:#ccc}.wapk-feed-docs .postbox a{text-decoration:none}.wapk-feed-docs .postbox .inside{margin-bottom:0}.wapk-feed-docs .postbox ul{margin-bottom:0}.wapk-feed-docs .postbox .toggle-indicator:before{content:"\f142";display:inline-block;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.wapk-feed-docs .postbox li{width:100%;display:block;float:left}.wapk-feed-docs .postbox li span{display:inline-block;float:left;margin-right:4px}.wapk-feed-docs .postbox li a{display:inline-block;float:left;width:calc(100% - 24px)}.wapk-feed-docs .postbox.closed .toggle-indicator:before{content:"\f140"}.wapk-section #post-body.columns-2 #side-sortables{min-height:196px}#poststuff #feed_merchant_info .inside{margin:0;padding:0}#feed_merchant_info ul.data{margin-left:24px;margin-top:5px}#feed_merchant_info ul.data li{margin-bottom:5px}.merchant-info-section{padding:6px 10px 8px}.merchant-info-section.woo-feed-open-file{text-align:center}.merchant-info-section.woo-feed-open-file a{line-height:1.5;text-decoration:none}.generateFeed .wf-tab-content table:first-child{border:none;box-shadow:none}.generateFeed table th{font-weight:700}@media only screen and (max-width:850px){.wapk-feed-docs .postbox{display:block;width:auto;float:none;margin-right:auto}}.wp-submenu li span.woo-feed-docs{font-weight:700;color:#f18500}.wp-submenu li:hover span.woo-feed-docs{color:#ce7304}.wp-submenu li.current span.woo-feed-docs{color:#ce7304}.wapk-admin .wapk-feed-docs .postbox .hndle{cursor:default}.wapk-cta{position:relative;display:-ms-flexbox;display:flex;width:100%;padding:100px 15px;background:linear-gradient(45deg,#6cd5ff 33%,#c2efef 100%);-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.wapk-cta-icon .dashicons{font-size:100px;width:100px;height:auto;margin:0 10px -8px 0;color:#02658c}.wapk-cta-content{width:50%}.wapk-cta-content h2{font-size:2em;margin:.5em 0}.wapk-cta-action a.wapk-button{font-size:24px;height:auto!important;padding:10px 20px}@media (max-width:600px){.wapk-cta{display:block;text-align:center;padding:4em 0}.wapk-cta-content{width:100%;margin:2em 0}}.wapk-button{color:#00d4d4;border-color:#00d4d4;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wapk-button>svg{width:15px;margin-left:5px;fill:#00d4d4}.wapk-button>.dashicons{color:#00d4d4}.wapk-button:hover{border-color:#0bb;color:#0bb}.wapk-button:hover>svg{fill:#0bb}.wapk-button:hover>.dashicons{color:#0bb}.wapk-button:focus{border-color:#00d4d4;color:#0bb;box-shadow:0 0 0 1px #00d4d4}.wapk-button:focus>svg{fill:#0bb}.wapk-button:focus>.dashicons{color:#0bb}.wapk-button:active{background:#0bb;border-color:#0bb}.wapk-button-secondary{color:#00d4d4;border-color:#00d4d4;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wapk-button-secondary>svg{width:15px;margin-left:5px;fill:#00d4d4}.wapk-button-secondary>.dashicons{color:#00d4d4}.wapk-button-secondary:hover{border-color:#0bb;color:#0bb}.wapk-button-secondary:hover>svg{fill:#0bb}.wapk-button-secondary:hover>.dashicons{color:#0bb}.wapk-button-secondary:focus{border-color:#00d4d4;color:#0bb;box-shadow:0 0 0 1px #00d4d4}.wapk-button-secondary:focus>svg{fill:#0bb}.wapk-button-secondary:focus>.dashicons{color:#0bb}.wapk-button-primary{display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box;background:#00d4d4;border-color:#00d4d4;color:#fff;box-shadow:0 1px 0 #0bb;text-shadow:0 -1px 1px #0bb,1px 0 1px #0bb,0 1px 1px #0bb,-1px 0 1px #0bb}.wapk-button-primary>svg{fill:#fff}.wapk-button-primary:hover{background:#00e3e3;border-color:#00c5c5;color:#fff}.wapk-button-primary:hover>svg{fill:#fff}.wapk-button-primary:focus{background:#00e3e3;border-color:#00c5c5;color:#fff;box-shadow:0 0 0 1px #fff,0 0 0 3px #00d4d4}.wapk-button-primary:focus>svg{fill:#fff}.wapk-button-primary:active{background:#0bb;border-color:#0bb;color:#fff}.wapk-button-primary:active>svg{fill:#fff}.wapk-button-primary:disabled{color:#c7d1d1!important;background:#2ff!important;border-color:#2ff!important;text-shadow:none!important}.wapk-button-primary:disabled>svg{fill:#c7d1d1!important}.wapk-button.hover{border-color:#0bb;color:#0bb}.wapk-button.hover>svg{fill:#0bb}.wapk-button.hover>.dashicons{color:#0bb}.wapk-button.focus{border-color:#00d4d4;color:#0bb;box-shadow:0 0 0 1px #00d4d4}.wapk-button.focus>svg{fill:#0bb}.wapk-button.focus>.dashicons{color:#0bb}.wapk-button.active{border-color:#0bb;color:#0bb;box-shadow:inset 0 2px 5px -3px #0bb}.wapk-button.active:focus{border-color:#0bb;color:#0bb;box-shadow:inset 0 2px 5px -3px #0bb}.wapk-button.active:focus>svg{fill:#0bb}.wapk-button.active:focus>.dashicons{color:#0bb}.wapk-button.active:hover{border-color:#0bb;color:#0bb;box-shadow:inset 0 2px 5px -3px #0bb}.wapk-button.active:hover>svg{fill:#0bb}.wapk-button.active:hover>.dashicons{color:#0bb}.wapk-button.active>svg{fill:#0bb}.wapk-button.active>.dashicons{color:#0bb}.wapk-button-primary.active{background:#00d4d4;color:#fff;border-color:#088;box-shadow:inset 0 2px 5px -3px #000}.wapk-button-primary.active:focus{background:#00d4d4;color:#fff;border-color:#088;box-shadow:inset 0 2px 5px -3px #000}.wapk-button-primary.active:focus>svg{fill:#fff}.wapk-button-primary.active:hover{background:#00d4d4;color:#fff;border-color:#088;box-shadow:inset 0 2px 5px -3px #000}.wapk-button-primary.active:hover>svg{fill:#fff}.wapk-button-primary.active>svg{fill:#fff}.wapk-button-primary[disabled]{color:#c7d1d1!important;background:#2ff!important;border-color:#2ff!important;text-shadow:none!important}.wapk-button-primary[disabled]>svg{fill:#c7d1d1!important}.wapk-button-primary.wapk-button-primary-disabled{color:#c7d1d1!important;background:#2ff!important;border-color:#2ff!important;text-shadow:none!important}.wapk-button-primary.wapk-button-primary-disabled>svg{fill:#c7d1d1!important}.wapk-button-primary.disabled{color:#c7d1d1!important;background:#2ff!important;border-color:#2ff!important;text-shadow:none!important}.wapk-button-primary.disabled>svg{fill:#c7d1d1!important}.wapk-button-primary.wapk-button-hero{box-shadow:0 2px 0 #0bb}.wapk-button-primary.wapk-button-hero:focus{box-shadow:0 2px 0 #0bb,0 1px 0 #00c5c5,0 0 2px 1px #0ee}.wapk-button-primary.wapk-button-hero:active{box-shadow:inset 0 3px 0 #00a1a1}.wapk-button-primary.wapk-button-hero.active{box-shadow:inset 0 3px 0 #00a1a1}.wapk-button-primary.wapk-button-hero.active:focus,.wapk-button-primary.wapk-button-hero.active:hover{box-shadow:inset 0 3px 0 #00a1a1}.wapk-button-group>.wapk-button.active{border-color:#00d4d4}.wapk-button.wapk-button-xl{height:30px;line-height:28px;padding:0 12px 2px}.wapk-button-group.wapk-button-xl .wapk-button{height:30px;line-height:28px;padding:0 12px 2px}.wapk-button.wapk-button-hero{font-size:18px;height:50px;line-height:48px;padding:0 36px;min-height:46px}.wapk-button-group.wapk-button-hero .wapk-button{font-size:18px;height:50px;line-height:48px;padding:0 36px;min-height:46px}@media screen and (min-width:782px){th#provider,th#status{width:80px}th#type{width:50px}th#option_name{width:100px}td.option_name.column-option_name>span:first-child{display:none}th#last_updated{width:90px}th#view{width:135px}}@media screen and (min-width:960px){th#provider,th#status{width:100px}th#type{width:80px}th#option_name{width:150px}th#last_updated{width:140px}}@media screen and (max-width:782px){table.wf-info-table{margin-top:10px}table.wf-info-table th:first-child img{margin:0 auto;display:block}.wapk-button.wapk-button-xl{padding:6px 14px;line-height:normal;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}}.wapk-feed-docs .wapk-feed-cta{margin:0}.campaign_configurator{background:#fff;padding:20px 0}.campaign_configurator table{margin:0 auto;width:51%;min-width:574px;border:none;box-shadow:none}.campaign_configurator th{min-width:120px}@media screen and (max-width:782px){.campaign_configurator{padding:0}.campaign_configurator table{width:auto;min-width:auto;max-width:100%}.campaign_configurator th{min-width:auto}}#wf-tab-content-config td>input:not([type=checkbox]):not([type=radio]),#wf-tab-content-config td>select,#wf-tab-content-config td>textarea{width:100%!important}.woo-feed-filters td>div:nth-child(2n):not(.clear):not(.selectize):not(.counter){width:120px;display:block}.woo-feed-filters td>div:not(.clear){float:left;margin-right:10px}.woo-feed-filters tr>td:first-child{width:290px;padding-left:40px}.woo-feed-filters,.woo-feed-ftp{margin:15px auto 25px}.wf_clean_cache_wrapper{display:-ms-flexbox;display:flex;margin-left:auto}@-webkit-keyframes LoaderClockWise{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes LoaderClockWise{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.woo-feed-cache-loader{width:18px;margin-right:5px;animation:LoaderClockWise 1s linear infinite;-webkit-animation:LoaderClockWise 1s linear infinite;display:none}.woo-feed-table-heading .woo-feed-table-heading-title{float:left;margin-right:auto;display:inline-block;line-height:30px}.woo-feed-table-heading .wf_clean_cache_wrapper{float:right;font-weight:400}.wf_clean_cache_wrapper button{background:linear-gradient(125deg,#eb4d4b 0,#ff9671 140%);color:#fff;border:none;font-weight:500;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;border-radius:3px;cursor:pointer;outline:0}.wf_clean_cache_wrapper button:hover{background:#ff7979;color:#fff}input[type=submit][data-id=wf_action_submit]{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%);color:#fff;border:1px;padding:0 20px}input[type=submit][data-id=wf_action_submit]:hover{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%);color:#fff}.woo-import-popup-body #TB_window{width:500px!important}.woo-import-popup-body #TB_window #TB_title{border:none;background:#fff;text-align:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;height:35px!important}.woo-import-popup-body #TB_window #TB_title #TB_ajaxWindowTitle{color:#30336b;font-weight:700}.woo-import-popup-body #TB_window #TB_closeWindowButton{top:-14.5px;right:-14.5px;border:none;outline:0}.woo-import-popup-body #TB_window #TB_closeWindowButton .tb-close-icon{background:#ff5e55;color:#fff;border-radius:50%}.woo-import-popup-body #TB_window #TB_closeWindowButton:focus{outline:0;border:0}.woo-import-popup-body #TB_window #TB_ajaxContent{position:relative;width:100%!important;height:auto!important;border:none;box-sizing:border-box;overflow:hidden;background:#f7fcff;padding:30px 20px}.woo-import-popup-body #TB_window #TB_ajaxContent:before{content:"";width:115%;display:block;background:#4bcffa;position:absolute;height:130%;z-index:0;left:-36%;top:-85px;-webkit-transform:rotate(115deg);transform:rotate(115deg)}.woo-import-popup-body #TB_window #TB_ajaxContent table{border:none;position:relative;z-index:1;border-radius:3px;text-align:center;padding:20px;box-shadow:0 12px 20px -17px #000}.woo-import-popup-body #TB_window #TB_ajaxContent table input{width:60%}.woo-import-popup-body #TB_window #TB_ajaxContent table input:focus{outline:2px solid #68b8f7}.woo-import-popup-body #TB_window #TB_ajaxContent table input[type=file]{padding:3px 0;cursor:pointer}.woo-import-popup-body #TB_window #TB_ajaxContent table input[type=text]{border-radius:25px;font-size:14px;padding:1px 20px;text-align:center}.woo-import-popup-body #TB_window #TB_ajaxContent table input[type=submit]{background:#17c0eb;border-radius:25px;border:0;box-shadow:1px 4px 7px -3px #45364a;font-weight:600;transition:.3s ease}.woo-import-popup-body #TB_window #TB_ajaxContent table input[type=submit]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px)}.woo-feed-notice{position:relative}.woo-feed-notice .woo-feed-review-notice-logo{width:90px;height:90px;float:left;margin-right:5px;background:url(../images/woo-feed-logo.svg) no-repeat}.woo-feed-notice .woo-feed-review-btn-dismiss{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;position:absolute;top:7px;right:7px;background:0 0;border:none;cursor:pointer}.woo-feed-notice .woo-feed-review-btn-dismiss span{line-height:18px}.woo-feed-notice .woo-feed-review-btn-dismiss:before{background:0 0;color:#787c82;content:"\f153";display:block;font:normal 16px/20px dashicons;speak:never;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased}.woo-feed-notice .woo-feed-review-btn-dismiss:hover:before{color:#d63638}.woo-feed-status-table-wrapper .woo-feed-status-table{width:100%;max-width:900px;border-collapse:collapse;border-spacing:.5rem;box-shadow:0 0 20px rgba(0,0,0,.1)}.woo-feed-status-table-wrapper .woo-feed-status-table tr:nth-child(even){background:#f1f1f1}.woo-feed-status-table-wrapper .woo-feed-status-table tr:nth-child(odd){background:#fafafc}.woo-feed-status-table-wrapper .woo-feed-status-table tr th{background:#353b48;color:#fff}.woo-feed-status-table-wrapper .woo-feed-status-table tr th.woo-feed-status-message-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}.woo-feed-status-table-wrapper .woo-feed-status-table tr th.woo-feed-status-message-header #woo-feed-copy-status-btn{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%);border:none}.woo-feed-status-table-wrapper .woo-feed-status-table tr td,.woo-feed-status-table-wrapper .woo-feed-status-table tr th{padding:.5rem 20px;text-align:left}.woo-feed-status-table-wrapper .woo-feed-status-table tr td.woo-feed-status-page-btn-group{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}.woo-feed-status-table-wrapper .woo-feed-status-table tr td.woo-feed-status-page-btn-group .wf_clean_cache_wrapper{margin:initial}.woo-feed-status-table-wrapper .woo-feed-status-table tr td.woo-feed-status-page-btn-group button,.woo-feed-status-table-wrapper .woo-feed-status-table tr td.woo-feed-status-page-btn-group input[type=button]{height:38px;padding:0 30px;font-size:16px;font-weight:500;border:none;outline:0}input[id^=woo_feed_identifier_]{display:block;width:100%!important}#taxonomy-woo-feed-brand #newwoo-feed-brand_parent,.taxonomy-woo-feed-brand .form-field.term-parent-wrap{display:none}.wapk-admin .switch{position:relative;display:inline-block;width:55px;height:28px}.wapk-admin .switch input{opacity:0;width:0;height:0}.wapk-admin .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.4s}.wapk-admin .slider:before{position:absolute;content:"";height:20px;width:20px;left:4px;bottom:4px;background-color:#fff;transition:.4s}.wapk-admin input:checked+.slider{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)}.wapk-admin input:focus+.slider{box-shadow:0 0 1px #2196f3}.wapk-admin input:checked+.slider:before{-webkit-transform:translateX(26px);transform:translateX(26px)}.wapk-admin .slider.round{border-radius:34px}.wapk-admin .slider.round:before{border-radius:50%}span[id*=cat-map-]{cursor:pointer;position:relative;top:5px}
1
+ .wpf_spin{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}.wpf_spin.reverse_spin{animation-direction:reverse}.wpf_regenerate.disabled{color:#737373;box-shadow:none;cursor:not-allowed}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.webappick-info{color:#42a5fa}.wfbtn{background:#3498db;background-image:linear-gradient(125deg,#3cb0fd 0,#152f8c 140%);border-radius:3px;box-shadow:inset 0 1px 3px #666;font-family:Arial,sans-serif;color:#fff;font-size:20px;padding:10px 20px 10px 20px;border:solid #2b698f 0;text-decoration:none}.wfbtn:hover{background:#3cb0fd;background-image:linear-gradient(to bottom,#3cb0fd,#3498db);text-decoration:none}.woo-feed-ctx-startup-notice{min-height:168px;background-size:contain!important;border:none;display:block;margin-left:0;margin-top:40px}.woo-feed-ctx-startup-notice button::before{color:#fbfbfb;font-size:18px}.woo_feed_manage_list_table .wf_update_interval_btn{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%);border:none}.woo_feed_manage_list_table .wf_update_interval_btn:hover{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)}.woo-feed-promotion{position:relative;display:none}.woo-feed-promotion .woo-feed-campaign-close-button{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:15px;width:24px;height:24px;border-radius:12px;background:#595d6b;line-height:24px;color:#fff;cursor:pointer;transition:.3s ease}.woo-feed-promotion .woo-feed-campaign-close-button:hover{background:#fff;color:#d61e48}.wftooltip{display:none;position:absolute;border:1px solid #333;background-color:#161616;border-radius:5px;padding:10px;color:#fff;font-size:12px}.feed-actions .makeFeedResponse{width:70%;color:green}.woo-feed-mapping-input{width:100%}.requiredIn{color:red}.generalInput{width:200px}.generalInput:not(.selectize-control){margin:5px auto}.error{color:red}.widefat td input,.widefat td select{max-width:100%}.woo-feed-btn-bg-gradient-blue,[data-class=woo-feed-btn-bg-gradient-blue]{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)!important;border:none;outline:0;border-width:0!important;box-shadow:none!important;transition:1s lenear;font-weight:500;color:#fff!important}.woo-feed-btn-bg-gradient-blue:hover,[data-class=woo-feed-btn-bg-gradient-blue]:hover{background:#3cb0fd!important}.woo-feed-btn-bg-gradient-red{background:linear-gradient(125deg,#eb4d4b 0,#ff9671 140%)!important;border:none;outline:0;border-width:0!important;box-shadow:none!important;transition:1s lenear;font-weight:500;color:#fff!important}.woo-feed-btn-bg-gradient-red:hover{background:#fc5c65!important}.woo-feed-btn-bg-gradient-purple{background:linear-gradient(67.36deg,#9733ee 3.09%,#da22ff 64.97%)!important;border:none;outline:0;border-width:0!important;box-shadow:none!important;transition:1s lenear;font-weight:500;color:#fff!important}.woo-feed-btn-bg-gradient-purple:hover{background:#a203fb!important}.woo-feed-light-btn-bg-gradient-blue{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)!important}#wf_newRow{margin-left:0}.mtable tbody tr{height:25px;border:1px solid #ccc;text-align:left;-ms-flex-align:baseline;align-items:baseline;font-weight:700}.mtable th:nth-child(1){width:17px}.mtable th:nth-child(2){width:160px}.mtable th:nth-child(3){width:100px}.mtable th:nth-child(4){width:100px}.mtable th:nth-child(5){width:150px}.mtable th:nth-child(6){width:100px}.mtable th:nth-child(7){width:150px}.mtable th:nth-child(8){width:90px}.mtable th:nth-child(9){width:29px}.mtable2 tbody tr{height:25px;border:1px solid #ccc;text-align:left;-ms-flex-align:baseline;align-items:baseline;font-weight:700}.mtable2 th:nth-child(1){width:30px}.mtable2 th:nth-child(2){width:150px}.mtable2 th:nth-child(3){width:230px}.mtable2 th:nth-child(4){width:220px}.mtable2 th:nth-child(7){width:50px}.mtable2 th:nth-child(8){width:50px}.mtable2 th:nth-child(9){width:29px}.wp-admin select.wf_mattributes{width:150px;left:0;height:25px}div#wf-tab-content1 select:not([name^=output_type]){width:100%}div#wf-tab-content1 input{width:100%}div#wf-tab-content1 .dashicons{vertical-align:middle}.wf_attributes{width:150px;left:0}.wf_compare{max-width:245px;left:0}.wf_ps{width:100px;left:0}.wf_sortedtable{cursor:move}.sorted_table{position:relative}.sorted_table .dragged{position:absolute;opacity:.8;z-index:9999;background:#fff;width:100%;display:table}.sorted_table tbody tr.placeholder td{border:1px dashed #2cc185;height:46px}.wfnoempty{width:120px}.woofeed-body-content #providerPage{display:-ms-flexbox;display:flex;-ms-flex-direction:column-reverse;flex-direction:column-reverse}#providerPageWrapper{display:-ms-flexbox;display:flex;-ms-flex-direction:column-reverse;flex-direction:column-reverse}#providerPageWrapper .wf_tabs{position:relative;margin:0 auto;width:100%;list-style:none}#providerPageWrapper .wf_tabs:after{display:table;clear:both;content:""}#providerPageWrapper .wf_tabs li{background:#fff;float:left;display:none;border:2px solid #ccc}#providerPageWrapper .wf_tabs li.active{display:block}#providerPageWrapper .wf_tabs li .wf-tab-content{z-index:2;width:100%;font-size:.9rem;display:block;left:0}#providerPageWrapper .wf_tabs li .wf-tab-content .feed-actions{border:none;border-top:2px solid #ccc}#providerPageWrapper #tabName{display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:start;align-items:flex-start}#providerPageWrapper #tabName .tab-name{min-width:300px;border:2px solid #ccc;border-bottom:none}#providerPageWrapper #tabName .tab-name input[type=radio]{display:none}#providerPageWrapper #tabName .tab-name label.activate{background:#2cc185;color:#fff}.wf-tab-name{display:block;padding:15px;font-size:15px;font-weight:700;line-height:1;background:#fff;cursor:pointer;position:relative;text-align:center;text-transform:uppercase;color:#2cc185}.wf-tab-name:hover{background:#2cc185;color:#fff}.wf_tabs [id^=tab]:checked+label{background:#2cc185;color:#fff}.wf_tabs [id^=tab]:checked~[id^=wf-tab-content]{display:block}div#wf-tab-content2 table:first-child{padding:10px 0}div#wf-tab-content2 table:first-child td:nth-child(1){width:260px}div#wf-tab-content2 table:first-child td:nth-child(2){width:260px}table.feed-actions tr td:last-child{text-align:right}select.selectize{display:none}body.no-js select.selectize{display:block!important}.wp-list-table .option_name .wf_feed_option_name_link{font-weight:700;color:#30336b}.wp-list-table #option_name a{color:#32373c}.selectize-dropdown .active{background-color:#edf9ff}.selectize-dropdown .create{padding:5px 8px}.wapk-selectize-item{background:#0073aa!important;color:#f1f1f1!important;border-color:#0073aa!important;padding-left:5px;padding-right:5px;border-radius:3px}.selectize-google-category .selectize-input{padding-right:30px}.selectize-google-category .selectize-dropdown-content{padding:0 8px}.selectize-google-category .selectize-dropdown-content .wapk-selectize-item{color:#000!important;background-color:#edf0f2!important;margin-bottom:3px!important;padding:3px 8px!important;transition-duration:.6s}.selectize-google-category .selectize-dropdown-content .wapk-selectize-item.active{background-color:#a2c8e1!important;transition-duration:.6s}.selectize-input.full #googleTaxonomyId-selectized{opacity:0;position:absolute;left:-10000px}.selectize-dropdown [data-selectable].option{cursor:default}.selectize-control.plugin-remove_button [data-value] .remove{border-left:1px solid #f1f1f1!important}.selectize-dropdown .optgroup-header{font-weight:700;background:#efefef;color:#5a5a5a}.selectize-dropdown [data-selectable].option{cursor:pointer}.wf_status_wrap label{width:55px;height:28px;box-sizing:border-box;float:left;border-radius:100px;position:relative;cursor:pointer;transition:.3s ease;background:linear-gradient(125deg,#e2e2e2 0,#ccc 140%)}input[class=woo_feed_status_input]:checked+label{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)}input[class=woo_feed_status_input]:checked+label:before{left:29px}.wf_status_wrap label:before{transition:.3s ease;content:"";width:20px;height:20px;position:absolute;background:#fff;left:6px;top:4px;box-sizing:border-box;color:#000;border-radius:100px;box-shadow:0 1.5px 2px 0 #000}.view span.dashicons.dashicons-external{color:#22a6b3}.view span.dashicons.dashicons-sos{color:#22a6b3}.view span.dashicons.dashicons-download{color:#ee5253}.view span.dashicons.dashicons-media-code{color:#576574}.column-url,.widefat td.column-url,.widefat th.column-url{color:#1e8f9a;font-weight:700}.feed-progress-container{width:100%;color:#fff;text-align:center;font-weight:300}.feed-progress-bar{width:100%;background:#eee;padding:3px;border-radius:50px;box-shadow:inset 0 1px 3px rgba(0,0,0,.2)}.feed-progress-bar-fill{height:20px;display:block;background:linear-gradient(to right top,#10ac84,#13b389,#15ba8f,#18c194,#1ac89a,#13cba1,#0acfa9,#00d2b0,#00d2ba,#00d2c3,#00d2cb,#00d2d3);width:0;border-radius:50px;transition:width .8s ease}.feed-progress-status{float:left;font-weight:700;color:#00008b}.feed-progress-percentage{text-align:right;font-weight:bolder;color:#1dd1a1;font-family:"Arial Black",sans-serif;font-size:large}#wpbody-content.woofeed-body-content{overflow:visible!important}.clippy{position:relative;width:13px;margin-top:-3px;margin-left:3px;top:3px}.column-url .clippy{display:none}.column-url:hover .clippy{display:inline-block}.tooltipped{position:relative}.tooltipped:after{position:absolute;z-index:1000000;display:none;padding:5px 8px;font:normal normal 11px/1.5 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:rgba(0,0,0,.8);border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tooltipped:before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:rgba(0,0,0,.8);pointer-events:none;content:"";border:5px solid transparent}.tooltipped:hover:before{display:inline-block;text-decoration:none}.tooltipped:hover:after{display:inline-block;text-decoration:none}.tooltipped:active:before{display:inline-block;text-decoration:none}.tooltipped:active:after{display:inline-block;text-decoration:none}.tooltipped:focus:before{display:inline-block;text-decoration:none}.tooltipped:focus:after{display:inline-block;text-decoration:none}.tooltipped-multiline:hover:after{display:table-cell}.tooltipped-multiline:active:after{display:table-cell}.tooltipped-multiline:focus:after{display:table-cell}.tooltipped-multiline:after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-break:break-word;word-wrap:normal;white-space:pre-line;border-collapse:separate}.tooltipped-s:after{top:100%;right:50%;margin-top:5px;-webkit-transform:translateX(50%);transform:translateX(50%)}.tooltipped-s:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.tooltipped-se:after{top:100%;margin-top:5px;right:auto;left:50%;margin-left:-15px}.tooltipped-se:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.tooltipped-sw:after{top:100%;right:50%;margin-top:5px;margin-right:-15px}.tooltipped-sw:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.tooltipped-n:after{right:50%;bottom:100%;margin-bottom:5px;-webkit-transform:translateX(50%);transform:translateX(50%)}.tooltipped-n:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.tooltipped-ne:after{bottom:100%;margin-bottom:5px;right:auto;left:50%;margin-left:-15px}.tooltipped-ne:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.tooltipped-nw:after{right:50%;bottom:100%;margin-bottom:5px;margin-right:-15px}.tooltipped-nw:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.tooltipped-w:after{right:100%;bottom:50%;margin-right:5px;-webkit-transform:translateY(50%);transform:translateY(50%)}.tooltipped-w:before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.tooltipped-e:after{bottom:50%;left:100%;margin-left:5px;-webkit-transform:translateY(50%);transform:translateY(50%)}.tooltipped-e:before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.tooltipped-multiline.tooltipped-s:after{right:auto;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.tooltipped-multiline.tooltipped-n:after{right:auto;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.tooltipped-multiline.tooltipped-w:after{right:100%}.tooltipped-multiline.tooltipped-e:after{right:100%}.tooltipped-sticky:before{display:inline-block}.tooltipped-sticky:after{display:inline-block}.tooltipped-sticky.tooltipped-multiline:after{display:table-cell}.fullscreen-overlay-enabled.dark-theme .tooltipped:after{color:#000;background:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-s:before{border-bottom-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-se:before{border-bottom-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-sw:before{border-bottom-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-n:before{border-top-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-ne:before{border-top-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-nw:before{border-top-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-e:before{border-right-color:rgba(255,255,255,.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-w:before{border-left-color:rgba(255,255,255,.8)}@media screen and (min-width:0\0){.tooltipped-multiline:after{width:250px}}ul.tracker_collection_list{list-style:initial;padding:initial;margin:-10px 0 0 30px;font-size:11px!important}ul.tracker_collection_list li{margin:0}table.wf-info-table,table.wf-rate-table{vertical-align:middle;text-align:center;max-width:100%;font-weight:500;margin-top:10px}table.wf-info-table th,table.wf-rate-table th{text-align:center}table.wf-info-table th .woo-feed-top-header,table.wf-rate-table th .woo-feed-top-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}table.wf-info-table th .woo-feed-top-header .get-woo-feed-pro,table.wf-rate-table th .woo-feed-top-header .get-woo-feed-pro{margin-left:20px}table.wf-info-table th .woo-feed-top-header .get-woo-feed-pro img,table.wf-rate-table th .woo-feed-top-header .get-woo-feed-pro img{width:172px}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons{float:right;display:-ms-flexbox;display:flex;border-radius:7px;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a{padding:8px 20px;background:#576574;color:#fff;box-sizing:border-box;display:inline-block;transition:.3s ease}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-doc-link,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-doc-link{background:#576574;border-top-left-radius:5px;border-bottom-left-radius:5px}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-video-link,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-video-link{background:#ee5253}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-support-link,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a.woo-feed-support-link{background:#22a6b3;border-top-right-radius:5px;border-bottom-right-radius:5px}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a span.dashicons,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a span.dashicons{font-size:18px;line-height:1.2}table.wf-info-table th .woo-feed-top-header .woo-feed-top-buttons a:hover,table.wf-rate-table th .woo-feed-top-header .woo-feed-top-buttons a:hover{background:#30336b;box-shadow:0 0 33px 0 rgba(0,0,0,.12)}table.wf-info-table strong,table.wf-rate-table strong{font-weight:700}table.wf-info-table th:first-child img{margin:0 0 -5px 5px}table.wf-rate-table a{color:#0073aa}table.wf-rate-table a.review-star:after{content:"\f155\f155\f155\f155\f155"!important;font-family:dashicons;font-size:10px;font-weight:100;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#0073aa;text-decoration:underline}#adminmenu #toplevel_page_webappick-manage-feeds div.wp-menu-image::before{content:"";background:url(../images/woo-feed-icon.svg) no-repeat center center;background-size:20px 20px;opacity:.6}#adminmenu #toplevel_page_webappick-manage-feeds:hover div.wp-menu-image::before{opacity:1}#adminmenu #toplevel_page_webappick-manage-feeds.wp-has-current-submenu div.wp-menu-image::before{opacity:1}.wapk-admin,.wapk-admin *{box-sizing:border-box}.wapk-admin{position:relative;display:block;-webkit-hyphens:manual;-ms-hyphens:manual;-moz-hyphens:manual;hyphens:manual;color:#1b2730;margin:0 0 0 -10px}@media screen and (min-width:783px){.wapk-admin{margin:0 0 0 -20px}}.text-center{text-align:center}.wapk-admin h1,.wapk-admin h2,.wapk-admin h3,.wapk-admin h4,.wapk-admin h5,.wapk-admin h6,.wapk-admin p{color:#1b2730}.wapk-admin sup{vertical-align:baseline;position:relative;top:-6px}.wapk-admin sub{vertical-align:baseline;position:relative;top:4px}.wapk-admin .wapk-section{margin:10px 20px 0 22px;position:relative;display:block}.wapk-admin .wapk-section [class$=icon32]+h2{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px 0;line-height:1.3}.wapk-admin .wapk-section h1{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px 0;line-height:1.3}.wapk-admin .wapk-section>h2:first-child{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px 0;line-height:1.3}.wapk-admin>.notice{margin:10px 20px 0 22px;position:relative;display:block}.wapk-admin span.help{display:block;float:left;width:100%;font-size:.9em;color:#636363;margin-top:5px;font-weight:500}.wapk-admin span.help .dashicons{width:11px;height:12px;font-size:inherit;vertical-align:middle}.clear:after{content:"";display:table;clear:both}.wapk-feed-docs .postbox{width:355px;margin-right:20px;display:inline-block;vertical-align:top}.wapk-feed-docs .postbox .hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4;cursor:pointer}.wapk-feed-docs .postbox .dashicons{color:#ccc}.wapk-feed-docs .postbox a{text-decoration:none}.wapk-feed-docs .postbox .inside{margin-bottom:0}.wapk-feed-docs .postbox ul{margin-bottom:0}.wapk-feed-docs .postbox .toggle-indicator:before{content:"\f142";display:inline-block;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.wapk-feed-docs .postbox li{width:100%;display:block;float:left}.wapk-feed-docs .postbox li span{display:inline-block;float:left;margin-right:4px}.wapk-feed-docs .postbox li a{display:inline-block;float:left;width:calc(100% - 24px)}.wapk-feed-docs .postbox.closed .toggle-indicator:before{content:"\f140"}.wapk-section #post-body.columns-2 #side-sortables{min-height:196px}#poststuff #feed_merchant_info .inside{margin:0;padding:0}#feed_merchant_info ul.data{margin-left:24px;margin-top:5px}#feed_merchant_info ul.data li{margin-bottom:5px}.merchant-info-section{padding:6px 10px 8px}.merchant-info-section.woo-feed-open-file{text-align:center}.merchant-info-section.woo-feed-open-file a{line-height:1.5;text-decoration:none}.generateFeed .wf-tab-content table:first-child{border:none;box-shadow:none}.generateFeed table th{font-weight:700}@media only screen and (max-width:850px){.wapk-feed-docs .postbox{display:block;width:auto;float:none;margin-right:auto}}.wp-submenu li span.woo-feed-docs{font-weight:700;color:#f18500}.wp-submenu li:hover span.woo-feed-docs{color:#ce7304}.wp-submenu li.current span.woo-feed-docs{color:#ce7304}.wapk-admin .wapk-feed-docs .postbox .hndle{cursor:default}.wapk-cta{position:relative;display:-ms-flexbox;display:flex;width:100%;padding:100px 15px;background:linear-gradient(45deg,#6cd5ff 33%,#c2efef 100%);-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.wapk-cta-icon .dashicons{font-size:100px;width:100px;height:auto;margin:0 10px -8px 0;color:#02658c}.wapk-cta-content{width:50%}.wapk-cta-content h2{font-size:2em;margin:.5em 0}.wapk-cta-action a.wapk-button{font-size:24px;height:auto!important;padding:10px 20px}@media (max-width:600px){.wapk-cta{display:block;text-align:center;padding:4em 0}.wapk-cta-content{width:100%;margin:2em 0}}.wapk-button{color:#00d4d4;border-color:#00d4d4;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wapk-button>svg{width:15px;margin-left:5px;fill:#00d4d4}.wapk-button>.dashicons{color:#00d4d4}.wapk-button:hover{border-color:#0bb;color:#0bb}.wapk-button:hover>svg{fill:#0bb}.wapk-button:hover>.dashicons{color:#0bb}.wapk-button:focus{border-color:#00d4d4;color:#0bb;box-shadow:0 0 0 1px #00d4d4}.wapk-button:focus>svg{fill:#0bb}.wapk-button:focus>.dashicons{color:#0bb}.wapk-button:active{background:#0bb;border-color:#0bb}.wapk-button-secondary{color:#00d4d4;border-color:#00d4d4;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wapk-button-secondary>svg{width:15px;margin-left:5px;fill:#00d4d4}.wapk-button-secondary>.dashicons{color:#00d4d4}.wapk-button-secondary:hover{border-color:#0bb;color:#0bb}.wapk-button-secondary:hover>svg{fill:#0bb}.wapk-button-secondary:hover>.dashicons{color:#0bb}.wapk-button-secondary:focus{border-color:#00d4d4;color:#0bb;box-shadow:0 0 0 1px #00d4d4}.wapk-button-secondary:focus>svg{fill:#0bb}.wapk-button-secondary:focus>.dashicons{color:#0bb}.wapk-button-primary{display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box;background:#00d4d4;border-color:#00d4d4;color:#fff;box-shadow:0 1px 0 #0bb;text-shadow:0 -1px 1px #0bb,1px 0 1px #0bb,0 1px 1px #0bb,-1px 0 1px #0bb}.wapk-button-primary>svg{fill:#fff}.wapk-button-primary:hover{background:#00e3e3;border-color:#00c5c5;color:#fff}.wapk-button-primary:hover>svg{fill:#fff}.wapk-button-primary:focus{background:#00e3e3;border-color:#00c5c5;color:#fff;box-shadow:0 0 0 1px #fff,0 0 0 3px #00d4d4}.wapk-button-primary:focus>svg{fill:#fff}.wapk-button-primary:active{background:#0bb;border-color:#0bb;color:#fff}.wapk-button-primary:active>svg{fill:#fff}.wapk-button-primary:disabled{color:#c7d1d1!important;background:#2ff!important;border-color:#2ff!important;text-shadow:none!important}.wapk-button-primary:disabled>svg{fill:#c7d1d1!important}.wapk-button.hover{border-color:#0bb;color:#0bb}.wapk-button.hover>svg{fill:#0bb}.wapk-button.hover>.dashicons{color:#0bb}.wapk-button.focus{border-color:#00d4d4;color:#0bb;box-shadow:0 0 0 1px #00d4d4}.wapk-button.focus>svg{fill:#0bb}.wapk-button.focus>.dashicons{color:#0bb}.wapk-button.active{border-color:#0bb;color:#0bb;box-shadow:inset 0 2px 5px -3px #0bb}.wapk-button.active:focus{border-color:#0bb;color:#0bb;box-shadow:inset 0 2px 5px -3px #0bb}.wapk-button.active:focus>svg{fill:#0bb}.wapk-button.active:focus>.dashicons{color:#0bb}.wapk-button.active:hover{border-color:#0bb;color:#0bb;box-shadow:inset 0 2px 5px -3px #0bb}.wapk-button.active:hover>svg{fill:#0bb}.wapk-button.active:hover>.dashicons{color:#0bb}.wapk-button.active>svg{fill:#0bb}.wapk-button.active>.dashicons{color:#0bb}.wapk-button-primary.active{background:#00d4d4;color:#fff;border-color:#088;box-shadow:inset 0 2px 5px -3px #000}.wapk-button-primary.active:focus{background:#00d4d4;color:#fff;border-color:#088;box-shadow:inset 0 2px 5px -3px #000}.wapk-button-primary.active:focus>svg{fill:#fff}.wapk-button-primary.active:hover{background:#00d4d4;color:#fff;border-color:#088;box-shadow:inset 0 2px 5px -3px #000}.wapk-button-primary.active:hover>svg{fill:#fff}.wapk-button-primary.active>svg{fill:#fff}.wapk-button-primary[disabled]{color:#c7d1d1!important;background:#2ff!important;border-color:#2ff!important;text-shadow:none!important}.wapk-button-primary[disabled]>svg{fill:#c7d1d1!important}.wapk-button-primary.wapk-button-primary-disabled{color:#c7d1d1!important;background:#2ff!important;border-color:#2ff!important;text-shadow:none!important}.wapk-button-primary.wapk-button-primary-disabled>svg{fill:#c7d1d1!important}.wapk-button-primary.disabled{color:#c7d1d1!important;background:#2ff!important;border-color:#2ff!important;text-shadow:none!important}.wapk-button-primary.disabled>svg{fill:#c7d1d1!important}.wapk-button-primary.wapk-button-hero{box-shadow:0 2px 0 #0bb}.wapk-button-primary.wapk-button-hero:focus{box-shadow:0 2px 0 #0bb,0 1px 0 #00c5c5,0 0 2px 1px #0ee}.wapk-button-primary.wapk-button-hero:active{box-shadow:inset 0 3px 0 #00a1a1}.wapk-button-primary.wapk-button-hero.active{box-shadow:inset 0 3px 0 #00a1a1}.wapk-button-primary.wapk-button-hero.active:focus,.wapk-button-primary.wapk-button-hero.active:hover{box-shadow:inset 0 3px 0 #00a1a1}.wapk-button-group>.wapk-button.active{border-color:#00d4d4}.wapk-button.wapk-button-xl{height:30px;line-height:28px;padding:0 12px 2px}.wapk-button-group.wapk-button-xl .wapk-button{height:30px;line-height:28px;padding:0 12px 2px}.wapk-button.wapk-button-hero{font-size:18px;height:50px;line-height:48px;padding:0 36px;min-height:46px}.wapk-button-group.wapk-button-hero .wapk-button{font-size:18px;height:50px;line-height:48px;padding:0 36px;min-height:46px}@media screen and (min-width:782px){th#provider,th#status{width:80px}th#type{width:50px}th#option_name{width:100px}td.option_name.column-option_name>span:first-child{display:none}th#last_updated{width:90px}th#view{width:135px}}@media screen and (min-width:960px){th#provider,th#status{width:100px}th#type{width:80px}th#option_name{width:150px}th#last_updated{width:140px}}@media screen and (max-width:782px){table.wf-info-table{margin-top:10px}table.wf-info-table th:first-child img{margin:0 auto;display:block}.wapk-button.wapk-button-xl{padding:6px 14px;line-height:normal;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}}.wapk-feed-docs .wapk-feed-cta{margin:0}.campaign_configurator{background:#fff;padding:20px 0}.campaign_configurator table{margin:0 auto;width:51%;min-width:574px;border:none;box-shadow:none}.campaign_configurator th{min-width:120px}@media screen and (max-width:782px){.campaign_configurator{padding:0}.campaign_configurator table{width:auto;min-width:auto;max-width:100%}.campaign_configurator th{min-width:auto}}#wf-tab-content-config td>input:not([type=checkbox]):not([type=radio]),#wf-tab-content-config td>select,#wf-tab-content-config td>textarea{width:100%!important}.woo-feed-filters td>div:nth-child(2n):not(.clear):not(.selectize):not(.counter){width:120px;display:block}.woo-feed-filters td>div:not(.clear){float:left;margin-right:10px}.woo-feed-filters tr>td:first-child{width:290px;padding-left:40px}.woo-feed-filters,.woo-feed-ftp{margin:15px auto 25px}.wf_clean_cache_wrapper{display:-ms-flexbox;display:flex;margin-left:auto}@-webkit-keyframes LoaderClockWise{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes LoaderClockWise{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.woo-feed-cache-loader{width:18px;margin-right:5px;animation:LoaderClockWise 1s linear infinite;-webkit-animation:LoaderClockWise 1s linear infinite;display:none}.woo-feed-table-heading .woo-feed-table-heading-title{float:left;margin-right:auto;display:inline-block;line-height:30px}.woo-feed-table-heading .wf_clean_cache_wrapper{float:right;font-weight:400}.wf_clean_cache_wrapper button{background:linear-gradient(125deg,#eb4d4b 0,#ff9671 140%);color:#fff;border:none;font-weight:500;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;border-radius:3px;cursor:pointer;outline:0}.wf_clean_cache_wrapper button:hover{background:#ff7979;color:#fff}input[type=submit][data-id=wf_action_submit]{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%);color:#fff;border:1px;padding:0 20px}input[type=submit][data-id=wf_action_submit]:hover{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%);color:#fff}.woo-import-popup-body #TB_window{width:500px!important}.woo-import-popup-body #TB_window #TB_title{border:none;background:#fff;text-align:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;height:35px!important}.woo-import-popup-body #TB_window #TB_title #TB_ajaxWindowTitle{color:#30336b;font-weight:700}.woo-import-popup-body #TB_window #TB_closeWindowButton{top:-14.5px;right:-14.5px;border:none;outline:0}.woo-import-popup-body #TB_window #TB_closeWindowButton .tb-close-icon{background:#ff5e55;color:#fff;border-radius:50%}.woo-import-popup-body #TB_window #TB_closeWindowButton:focus{outline:0;border:0}.woo-import-popup-body #TB_window #TB_ajaxContent{position:relative;width:100%!important;height:auto!important;border:none;box-sizing:border-box;overflow:hidden;background:#f7fcff;padding:30px 20px}.woo-import-popup-body #TB_window #TB_ajaxContent:before{content:"";width:115%;display:block;background:#4bcffa;position:absolute;height:130%;z-index:0;left:-36%;top:-85px;-webkit-transform:rotate(115deg);transform:rotate(115deg)}.woo-import-popup-body #TB_window #TB_ajaxContent table{border:none;position:relative;z-index:1;border-radius:3px;text-align:center;padding:20px;box-shadow:0 12px 20px -17px #000}.woo-import-popup-body #TB_window #TB_ajaxContent table input{width:60%}.woo-import-popup-body #TB_window #TB_ajaxContent table input:focus{outline:2px solid #68b8f7}.woo-import-popup-body #TB_window #TB_ajaxContent table input[type=file]{padding:3px 0;cursor:pointer}.woo-import-popup-body #TB_window #TB_ajaxContent table input[type=text]{border-radius:25px;font-size:14px;padding:1px 20px;text-align:center}.woo-import-popup-body #TB_window #TB_ajaxContent table input[type=submit]{background:#17c0eb;border-radius:25px;border:0;box-shadow:1px 4px 7px -3px #45364a;font-weight:600;transition:.3s ease}.woo-import-popup-body #TB_window #TB_ajaxContent table input[type=submit]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px)}.woo-feed-notice{position:relative}.woo-feed-notice .woo-feed-review-notice-logo{width:90px;height:90px;float:left;margin-right:5px;background:url(../images/woo-feed-logo.svg) no-repeat}.woo-feed-notice .woo-feed-review-btn-dismiss{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;position:absolute;top:7px;right:7px;background:0 0;border:none;cursor:pointer}.woo-feed-notice .woo-feed-review-btn-dismiss span{line-height:18px}.woo-feed-notice .woo-feed-review-btn-dismiss:before{background:0 0;color:#787c82;content:"\f153";display:block;font:normal 16px/20px dashicons;speak:never;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased}.woo-feed-notice .woo-feed-review-btn-dismiss:hover:before{color:#d63638}.woo-feed-status-table-wrapper .woo-feed-status-table{width:100%;max-width:900px;border-collapse:collapse;border-spacing:.5rem;box-shadow:0 0 20px rgba(0,0,0,.1)}.woo-feed-status-table-wrapper .woo-feed-status-table tr:nth-child(even){background:#f1f1f1}.woo-feed-status-table-wrapper .woo-feed-status-table tr:nth-child(odd){background:#fafafc}.woo-feed-status-table-wrapper .woo-feed-status-table tr th{background:#353b48;color:#fff}.woo-feed-status-table-wrapper .woo-feed-status-table tr th.woo-feed-status-message-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}.woo-feed-status-table-wrapper .woo-feed-status-table tr th.woo-feed-status-message-header #woo-feed-copy-status-btn{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%);border:none}.woo-feed-status-table-wrapper .woo-feed-status-table tr td,.woo-feed-status-table-wrapper .woo-feed-status-table tr th{padding:.5rem 20px;text-align:left}.woo-feed-status-table-wrapper .woo-feed-status-table tr td.woo-feed-status-page-btn-group{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}.woo-feed-status-table-wrapper .woo-feed-status-table tr td.woo-feed-status-page-btn-group .wf_clean_cache_wrapper{margin:initial}.woo-feed-status-table-wrapper .woo-feed-status-table tr td.woo-feed-status-page-btn-group button,.woo-feed-status-table-wrapper .woo-feed-status-table tr td.woo-feed-status-page-btn-group input[type=button]{height:38px;padding:0 30px;font-size:16px;font-weight:500;border:none;outline:0}input[id^=woo_feed_identifier_]{display:block;width:100%!important}#taxonomy-woo-feed-brand #newwoo-feed-brand_parent,.taxonomy-woo-feed-brand .form-field.term-parent-wrap{display:none}.wapk-admin .switch{position:relative;display:inline-block;width:55px;height:28px}.wapk-admin .switch input{opacity:0;width:0;height:0}.wapk-admin .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.4s}.wapk-admin .slider:before{position:absolute;content:"";height:20px;width:20px;left:4px;bottom:4px;background-color:#fff;transition:.4s}.wapk-admin input:checked+.slider{background:linear-gradient(125deg,#3cb0fd 0,#6c5ce7 140%)}.wapk-admin input:focus+.slider{box-shadow:0 0 1px #2196f3}.wapk-admin input:checked+.slider:before{-webkit-transform:translateX(26px);transform:translateX(26px)}.wapk-admin .slider.round{border-radius:34px}.wapk-admin .slider.round:before{border-radius:50%}.woo-feed-category-mapping-config-table{position:relative}.woo-feed-category-mapping-config-table .woo-feed-cat-map-spinner{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;position:absolute;top:0;left:0;background:rgba(235,235,235,.9);z-index:999;padding-top:250px}span[id*=cat-map-]{cursor:pointer;position:relative;top:5px}
admin/css/woo-feed-admin.scss CHANGED
@@ -2289,6 +2289,23 @@ input[id^="woo_feed_identifier_"] {
2289
  }
2290
  }
2291
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2292
  span[id*="cat-map-"] {
2293
  cursor: pointer;
2294
  position: relative;
2289
  }
2290
  }
2291
 
2292
+ .woo-feed-category-mapping-config-table {
2293
+ position: relative;
2294
+
2295
+ .woo-feed-cat-map-spinner {
2296
+ display: flex;
2297
+ justify-content: center;
2298
+ width: 100%;
2299
+ height: 100%;
2300
+ position: absolute;
2301
+ top: 0;
2302
+ left: 0;
2303
+ background: rgb(235, 235, 235 , 0.90);
2304
+ z-index: 999;
2305
+ padding-top: 250px;
2306
+ }
2307
+ }
2308
+
2309
  span[id*="cat-map-"] {
2310
  cursor: pointer;
2311
  position: relative;
admin/js/woo-feed-admin.js CHANGED
@@ -159,6 +159,9 @@
159
  item: (data, escape) => `<div class="item wapk-selectize-item">${escape(data.value + ' - ' + data.text)}</div>`
160
  }
161
  });
 
 
 
162
  }).fail(helper.ajax_fail);
163
  }
164
 
@@ -183,6 +186,9 @@
183
  item: (data, escape) => `<div class="item wapk-selectize-item">${escape(data.value + ' - ' + data.text)}</div>`
184
  }
185
  });
 
 
 
186
  }).fail(helper.ajax_fail);
187
  }
188
  }
@@ -1327,6 +1333,10 @@
1327
  .on('change', '#category-mapping-form #providers', function() {
1328
  var provider = $(this).find(':selected').val(),
1329
  googleMap = ['google', 'facebook', 'pinterest', 'bing', 'bing_local_inventory', 'snapchat'];
 
 
 
 
1330
  if( googleMap.indexOf(provider) !== -1 ) {
1331
  $('input[id*="cat_mapping_"]').css('display', 'none');
1332
  $('.wf_default.wf_attributes').css('display', 'block').css('width', '100%');
@@ -1334,6 +1344,8 @@
1334
  var cat_init = new WooFeedMapCategories();
1335
  if( "facebook" === provider ) {
1336
  cat_init.wooFeed_get_facebook_categories();
 
 
1337
  }
1338
 
1339
  } else {
@@ -1370,10 +1382,17 @@
1370
  var provider = $("#providers").val();
1371
  var cat_init = new WooFeedMapCategories();
1372
 
1373
- if( "facebook" === provider ) {
1374
- cat_init.wooFeed_get_facebook_categories();
1375
- } else {
1376
- cat_init.wooFeed_get_google_categories();
 
 
 
 
 
 
 
1377
  }
1378
 
1379
  });
159
  item: (data, escape) => `<div class="item wapk-selectize-item">${escape(data.value + ' - ' + data.text)}</div>`
160
  }
161
  });
162
+
163
+ //remove spinner element
164
+ $('.woo-feed-cat-map-spinner').remove();
165
  }).fail(helper.ajax_fail);
166
  }
167
 
186
  item: (data, escape) => `<div class="item wapk-selectize-item">${escape(data.value + ' - ' + data.text)}</div>`
187
  }
188
  });
189
+
190
+ //remove spinner element
191
+ $('.woo-feed-cat-map-spinner').remove();
192
  }).fail(helper.ajax_fail);
193
  }
194
  }
1333
  .on('change', '#category-mapping-form #providers', function() {
1334
  var provider = $(this).find(':selected').val(),
1335
  googleMap = ['google', 'facebook', 'pinterest', 'bing', 'bing_local_inventory', 'snapchat'];
1336
+
1337
+ //add snipper element
1338
+ $('.woo-feed-category-mapping-config-table').prepend('<div class="woo-feed-cat-map-spinner"><h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> Loading Mapping...</h3></div>');
1339
+
1340
  if( googleMap.indexOf(provider) !== -1 ) {
1341
  $('input[id*="cat_mapping_"]').css('display', 'none');
1342
  $('.wf_default.wf_attributes').css('display', 'block').css('width', '100%');
1344
  var cat_init = new WooFeedMapCategories();
1345
  if( "facebook" === provider ) {
1346
  cat_init.wooFeed_get_facebook_categories();
1347
+ } else {
1348
+ cat_init.wooFeed_get_google_categories();
1349
  }
1350
 
1351
  } else {
1382
  var provider = $("#providers").val();
1383
  var cat_init = new WooFeedMapCategories();
1384
 
1385
+ var url = new URL(window.location.href);
1386
+ var cat_mapping_action = url.searchParams.get("action");
1387
+
1388
+ if( "edit-mapping" === cat_mapping_action ) {
1389
+ $('.woo-feed-category-mapping-config-table').prepend('<div class="woo-feed-cat-map-spinner"><h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> Loading Mapping...</h3></div>');
1390
+
1391
+ if( "facebook" === provider ) {
1392
+ cat_init.wooFeed_get_facebook_categories();
1393
+ } else {
1394
+ cat_init.wooFeed_get_google_categories();
1395
+ }
1396
  }
1397
 
1398
  });
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 o=0;o<t.length;o++){var a=t[o];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function _createClass(e,t,o){return t&&_defineProperties(e.prototype,t),o&&_defineProperties(e,o),e}!function(s,a,c,l,f){s.fn.disabled=function(o){return s(this).each(function(){var e=s(this),t="disabled";void 0!==e.prop(t)?e.prop(t,void 0===o||!0===o):!0===o?e.addClass(t):e.removeClass(t)}),self},s.fn.isDisabled=function(){var e=s(this),t="disabled";return void 0!==e.prop(t)?e.prop(t):e.hasClass(t)};function e(e){s(e.currentTarget).removeClass(function(e,t){return(t.match(/\btooltipped-\S+/g)||[]).join(" ")}).removeClass("tooltipped").removeAttr("aria-label")}function o(e,t){s(e).addClass("tooltipped tooltipped-s").attr("aria-label",t)}function n(e,t){return s.extend(!0,{},e,t)}function t(){i=s(".toClipboard"),!ClipboardJS.isSupported()||/iPhone|iPad/i.test(navigator.userAgent)?i.find("img").hide(0):(i.each(function(){s(this).on("mouseleave",e).on("blur",e)}),new ClipboardJS(".toClipboard").on("error",function(e){var t;o(e.trigger,(t=e.action,e="cut"===t?"X":"C",t=/iPhone|iPad/i.test(navigator.userAgent)?"No support :(":/Mac/i.test(navigator.userAgent)?"Press ⌘-"+e+" to "+t:"Press Ctrl-"+e+" to "+t))}).on("success",function(e){o(e.trigger,"Copied")}))}var i,r,d,_=function(){function a(e,t,o){_classCallCheck(this,a),this.productCustomFields(e,t,o)}return _createClass(a,[{key:"cacheClear",value:function(){var e={action:"woo_feed_product_attribute_cache_remove",nonce:wpf_ajax_obj.ajax.nonce};s.ajax({method:"POST",url:wpf_ajax_obj.wpf_ajax_url,data:e})}},{key:"productCustomFields",value:function(t){var o=this,e={action:"woo_feed_custom_fields_status_change",nonce:wpf_ajax_obj.ajax.nonce,field:t,status:1<arguments.length&&void 0!==arguments[1]&&arguments[1],isTaxonomy:2<arguments.length?arguments[2]:void 0};s.ajax({method:"POST",url:wpf_ajax_obj.wpf_ajax_url,data:e,success:function(e){e.success?o.cacheClear():console.log(e),s("#"+t+"-switcher").closest("td").find(".switch-loader").hide()}})}}]),a}(),u=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"wooFeed_get_google_categories",value:function(){l.send("get_google_categories",{type:"GET",data:{_ajax_nonce:f.nonce,action:"get_google_categories"}}).then(function(e){s(".selectize-google-category").selectize({valueField:"value",labelField:"text",placeholder:"Select a category",searchField:["value","text"],options:e,render:{option:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.value+" - "+e.text),"</div>")},item:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.value+" - "+e.text),"</div>")}}})}).fail(p.ajax_fail)}},{key:"wooFeed_get_facebook_categories",value:function(){l.send("get_facebook_categories",{type:"GET",data:{_ajax_nonce:f.nonce,action:"get_facebook_categories"}}).then(function(e){s(".selectize-google-category").selectize({valueField:"value",labelField:"text",placeholder:"Select a Facebook category",searchField:["value","text"],options:e,render:{option:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.value+" - "+e.text),"</div>")},item:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.value+" - "+e.text),"</div>")}}})}).fail(p.ajax_fail)}}]),e}(),p={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")?f.ajax.error+"\n"+e.statusText+" ("+e.status+")":e)},sortable:function(e,o,a,i){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(n({containerSelector:"table",itemPath:"> tbody",itemSelector:"tr",handle:"i.wf_sortedtable",placeholder:'<tr class="placeholder"><td colspan="'.concat(t,'"></td></tr>'),onDrop:function(e,t,o,a){e.removeClass(t.group.options.draggedClass).removeAttr("style"),s("body").removeClass(t.group.options.bodyClass);var n=e.find(".wf_mattributes").attr("name").replace(/\D/g,"");e.find("input.wf_attributes").attr("name","default["+n+"]"),i&&"function"==typeof i&&i(e,t,o,a)}},o))})},selectize:function(e,t){return(e||s("select.selectize")).not(".selectized").not(".selectize-google-category").each(function(){var e=s(this);e.selectize(n({create:e.data("create")||!1,plugins:e.data("plugins")?e.data("plugins").split(",").map(function(e){return e.trim()}):[],render:{item:p.selectize_render_item}},t))})},fancySelect:function(e,t){return(e||s("select.fancySelect")).not(".FancySelectInit").each(function(){s(this).fancySelect(n({maxItemShow:3},t))})},reindex_config_table:function(){s("#table-1").find("tbody tr").each(function(o,e){s(e).find("[name]").each(function(e,t){s(t).attr("name",s(t).attr("name").replace(/(\[\d\])/g,"[".concat(o,"]")))})})},common:function(){p.sortable(s(".sorted_table"),{},9,p.reindex_config_table),p.selectize(),p.fancySelect(s(".outputType"))}},h={form:null,init:function(){this.form=s(".generateFeed"),this.form.length&&(p.common(),s(c).trigger("feed_editor_init"),s(c).trigger(new jQuery.Event("feedEditor.init",{target:this.form})))},renderMerchantInfo:function(o,a,n){for(var e in n)!function(e){var t;n.hasOwnProperty(e)&&(o.find(".merchant-info-section."+e+" .data").html(n[e]),"feed_file_type"===e&&((t=n[e].split(",").map(function(e){return e.trim().toLowerCase()}).filter(function(e){return""!==e&&e!==f.na.toLowerCase()})).length?(a.find("option").removeAttr("selected").each(function(){var e=s(this);e.val()&&!p.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)))}(e);o.find(".spinner").removeClass("is-active"),a.disabled(!1),a.trigger("change"),s(c).trigger("woo_feed_config_loaded"),a.parent().find(".spinner").removeClass("is-active")},renderMerchantTemplate:function(o,a){for(var e in a)!function(t){var e;a.hasOwnProperty(t)&&("tabs"===t?o.html(a[t]):(e=s('[name="'+t+'"]')).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"))}(e);h.init()}},g=[],v=[],m=function(){function e(){_classCallCheck(this,e),this._feed=f.generator.feed,this._limit=f.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=f.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;""!==this._feed&&this._regenerate&&!1===a.isRegenerating&&this.generate();var e=a.location.search;return"webappick-manage-feeds"===new URLSearchParams(e).get("page")&&s("body").addClass("woo-import-popup-body"),s(c).on("click",".woo-feed-campaign-close-button",function(e){e.preventDefault(),s(this).parent(".woo-feed-promotion").hide();e=s(this).data("condition");1===e&&l.post("woo_feed_hide_promotion",{_ajax_nonce:f.nonce,condition:e}).then(function(e){t._log(e)}).fail(function(e){t._log(e),t._updateProgressStatus(e.message),t._color="red"})}),s(c).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",f.regenerate).attr("title",f.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,o=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,o._log({response:e}),e.success?(o._log("Total ".concat(e.total," Products found.")),o._product_ids=e.product,o._total_batch=t._product_ids.length,o._current_batch=0,o._progress_per_batch=(90-t._progress)/t._total_batch,o._process_batch(),o._updateProgressStatus("Processing Products...")):o._updateProgressStatus(e.data.message)}).fail(function(e){o._log(e),o._updateProgressStatus(e.message),o._color="red",setTimeout(function(){o._stopProgressBar(),o._unblock_button()},1500)})}},{key:"_get_product_ids",value:function(){return this._progress=5,l.post("get_product_information",{_ajax_nonce:f.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),l.post("make_batch_feed",{_ajax_nonce:f.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"),l.post("save_feed_file",{_ajax_nonce:f.nonce,feed:this._feed}).then(function(e){t._log(e),t._progress=100,t._refresh&&(a.location.href="".concat(f.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 f.wpf_debug&&console.log(e),this}},{key:"_progressBarActive",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,t=this;return this._toggleProgressBar(!0),this._timer=setInterval(function(){t._updateProgressBar()},e||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").html(e),this}},{key:"_getErrorMessageByCode",value:function(e){s(".feed-progress-status").css({color:this._color}),s(".feed-progress-percentage").css({color:this._color}),s(".wpf_spin").css({color:this._color});var t=e.status+" : "+e.statusText+". ";500===e.status&&(t+="Please increase your PHP max_execution_time. Please <a target='_blank' href='https://webappick.com/docs/woo-feed/faq-for-woocommerce-product-feed/how-to-solve-processing-10-feed-generation-stuck-error/'>read this doc</a>."),this._updateProgressStatus(t)}},{key:"_updateProgressBar",value:function(){var e=s(".feed-progress-percentage"),t=s(".feed-progress-bar-fill"),o="".concat(Math.round(this._progress),"%");t.css({width:o}),e.text(o)}}]),e}();a.wf={helper:p,feedEditor:h,generator:m},s(a).on("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 m).init(),""!==f.generator.feed&&f.generator.regenerate,h.init(),p.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(c).on("blur",'input[name="wfDAttributeName"]',function(e){e.preventDefault();e=s(this).val();e=(e=e.toLowerCase()).split(" ").join("_"),s("#wfDAttributeCode").val(e)}).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),p.fancySelect(s(".outputType"))}).on("click",".single-feed-delete",function(e){e.preventDefault(),confirm(f.form.del_confirm)&&(a.location.href=s(this).attr("val"))}).on("click",".wf_clean_cache_wrapper",function(e){e.preventDefault();var e=s(".woo-feed-clean-cache-nonce").val(),t=s(".woo-feed-cache-loader");t.show(),l.post("clear_cache_data",{_ajax_clean_nonce:e}).then(function(e){e.success&&(t.hide(),location.reload())}).fail(function(){console.log("something wrong")})}).on("click","#woo-feed-copy-status-btn",function(e){e.preventDefault();var t=s("#woo-feed-copy-status-btn"),e=s("#woo-feed-status-area");t.val("Copied"),e.css("visibility","visible"),e.select(),c.execCommand("copy")}).on("change",".wf_attr.wf_attributes",function(e){e.preventDefault(),s(".fancy-picker-picked").trigger("click");var t,o=s(this).val(),a=s(this).parents("tr").find(".outputType"),e=s(this).parents("tr").find(".fancy-picker-content .fancy-picker-option"),n=s(this).parents("tr").find(".fancy-picker-data span"),i=["price","current_price","sale_price","price_with_tax","current_price_with_tax","sale_price_with_tax","shipping_cost"].includes(o)?(t="for_price","Price"):""!==o&&-1!==o.indexOf("wf_taxo")?(t="for_custom_taxo","parent_if_empty"):(t="for_all","Default");e.removeClass("selected"),"for_custom_taxo"===t||"for_price"===t?(e.each(function(){i===s(this).text()&&(s(this).addClass("selected"),n.text(i),a.find("option").text(i),a.find("option").val(s(this).data("value")))}),"for_price"===t&&(t=null!=(t=s("#feedCurrency").val())?t:wpf_ajax_obj.woocommerce.currency,s(this).closest("tr").find("td:eq(5) input").val(" "+t))):(e.each(function(){i===s(this).text()&&(s(this).addClass("selected"),n.text(i),a.find("option").text(i),a.find("option").val(s(this).data("value")))}),s(this).closest("tr").find("td:eq(5) input").val(""))}).on("click","#doaction, #doaction2",function(){return confirm(f.form.del_confirm_multi)}).on("change",".dType",function(){var e=s(this),t=e.val(),e=e.closest("tr");"pattern"===t?(e.find(".value_attribute").hide(),e.find(".value_pattern").show()):"attribute"===t?(e.find(".value_attribute").show(),e.find(".value_pattern").hide()):"remove"===t&&(e.find(".value_attribute").hide(),e.find(".value_pattern").hide())}).on("click",".delRow",function(e){e.preventDefault(),s(this).closest("tr").remove(),p.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(f.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?f.form.save:f.form.generate,"</b>"))}).on("ready woo_feed_config_loaded",function(){"0"===s("#ftpenabled").val()?(s(".google-merchant-message").hide("slow"),s(".woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select").attr("disabled","disabled")):("google"===s("#provider").val()?s(".google-merchant-message").show("slow"):s(".google-merchant-message").hide("slow"),s(".woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select").removeAttr("disabled")),s("#ftpenabled").on("change",function(){"0"===s("#ftpenabled").val()?(s(".google-merchant-message").hide("slow"),s(".woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select").attr("disabled","disabled")):(s(".woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select").removeAttr("disabled"),"google"===s("#provider").val()?s(".google-merchant-message").show("slow"):s(".google-merchant-message").hide("slow"))})}).on("change",".ftporsftp",function(){var e=s(this).val(),t=s(".ssh2_status");"sftp"===e?(t.show().css("color","dodgerblue").text(f.form.sftp_checking),l.post("get_ssh2_status",{_ajax_nonce:f.nonce,server:e}).then(function(e){"exists"===e?(t.css("color","#2CC185").text(f.form.sftp_available),setTimeout(function(){t.hide()},1500)):t.show().css("color","red").text(f.form.sftp_warning)}).fail(function(e){t.hide(),p.ajax_fail(e)})):t.hide()}).on("click",'[name="save_feed_config"]',function(e){e.preventDefault(),s("#updatefeed").trigger("submit",{save:!0})}).on("change","#provider",function(e){e.preventDefault();var t=s(this).val(),o=s(this).find(":selected").text(),a=s("#filename").val(),n=s("#feedType"),i=s("#providerPage"),r=s("#feed_merchant_info");i.html('<h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> '+f.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(""),g.hasOwnProperty(t)?(h.renderMerchantInfo(r,n,g[t]),s(c).trigger("woo_feed_config_loaded")):l.send("woo_feed_get_merchant_info",{type:"GET",data:{nonce:f.nonce,provider:t,templateName:o}}).then(function(e){g[t]=e,h.renderMerchantInfo(r,n,e)}).then(function(){s(c).trigger("woo_feed_config_loaded")}).fail(p.ajax_fail),v.hasOwnProperty(t)?(h.renderMerchantTemplate(i,v[t]),s(c).trigger("woo_feed_config_loaded")):l.post("get_feed_merchant",{_ajax_nonce:f.nonce,merchant:t}).then(function(e){v[t]=e,h.renderMerchantTemplate(i,e),s("#utm_source").val(o),s("#utm_campaign").val(a),"bing"===t&&(s("#delimiter option").removeAttr("selected"),s('#delimiter option[value="tab"]').attr("selected","selected"),s("#enclosure option").removeAttr("selected"),s('#enclosure option[value=" "]').attr("selected","selected")),"google_product_review"!==t&&s('.wf_attributes option[value="reviewer_name"]').hide()}).then(function(){s(c).trigger("woo_feed_config_loaded")}).fail(p.ajax_fail)}).on("change",".woo_feed_status_input",function(){var e=s(this);l.post("update_feed_status",{_ajax_nonce:f.nonce,feedName:e.val(),status:e[0].checked?1:0})}),s(c).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(),e=e.closest("tr");"pattern"===t?(e.find(".wf_attr").hide(),e.find(".wf_attr").val(""),e.find(".wf_default").show()):(e.find(".wf_attr").show(),e.find(".wf_default").hide(),e.find(".wf_default").val(""))}).on("change",".wf_mattributes, .attr_type",function(){var e=s(this).closest("tr"),o=e.find(".wf_mattributes"),t=e.find(".attr_type"),a=e.find("td:eq(4)"),n=s("#provider").val();f.form.google_category.hasOwnProperty(o.val())&&"pattern"===t.val()&&p.in_array(n,f.form.google_category[o.val()])?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="https://webappick.com/docs/woo-feed/feed-configuration/how-to-map-store-category-with-merchant-category/" target="_blank">'.concat(f.learn_more,"</a></span>")),r&&d||a.append('<span class="spinner is-active" style="margin: 0;"></span>'),e=a.find(".wf_attributes select"),p.selectize(e,{preload:!0,placeholder:f.form.select_category,load:function(e,t){r?t(r):l.send("get_google_categories",{type:"GET",data:{_ajax_nonce:f.nonce,action:"get_google_categories",provider:n}}).then(function(e){t(r=e),a.find(".spinner").remove()}).fail(p.ajax_fail),d||"facebook"!==n||"fb_product_category"!==o.val()?t(d):l.send("get_facebook_categories",{type:"GET",data:{_ajax_nonce:f.nonce,action:"get_facebook_categories",provider:n}}).then(function(e){t(d=e),a.find(".spinner").remove()}).fail(p.ajax_fail)}})):"current_category"!==o.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"!==t.val()&&a.find("input.wf_default").hide())}).on("change","#feedType,#provider",function(e){var t=s("#feedType").val(),o=s("#provider").val(),a=s(".itemWrapper"),n=s(".wf_csvtxt");""!==t&&p.in_array(o,f.form.item_wrapper_hidden)&&a.hide(),"feedType"===e.target.id&&("csv"===t||"txt"===t||"tsv"===t?(n.show(),a.hide(),"tsv"===t?s("#delimiter option:last").prop("selected","selected"):"csv"===t&&s("#delimiter option:first").prop("selected","selected")):"xml"===t&&"custom"===o?(a.show(),n.hide()):"json"===t&&n.hide()),"custom"!==o&&a.hide()}).trigger("change"),s(c).on("click",'.woofeed-custom-fields [id*="-switcher"]',function(){s(this).closest("td").find(".switch-loader").show();var e=s(this).attr("id").split("-")[0],t=s(this).data("taxonomy"),o=s(this).prop("checked");new _(e,o,t)}).ready(function(){var e=s(".wapk-feed-buy-now-container");s(a).scroll(function(){s(a).scrollTop()<=5e3?e.addClass("fixed"):e.removeClass("fixed")})})}),s(c).on("click","#woo-feed-debug-log-download",function(e){e.preventDefault(),s("<a />",{download:new Date+".log",href:URL.createObjectURL(new Blob([s("#woo-feed-debug-log").val()],{type:"text/plain"}))}).appendTo("body")[0].click()}).on("keyup","#filename",function(){var e=s("#filename").val();s("#utm_campaign").val(e)}).on("click",".wf-tab-name",function(e){s(".wf-tab-name.activate").removeClass("activate"),s(this).addClass("activate");var t=s(this).attr("for");s(".wf_tabs li.active").removeClass("active"),s(".wf_tabs .wf-tab-content#"+t).parent().addClass("active")}).on("change","#category-mapping-form #providers",function(){var e,t=s(this).find(":selected").val();-1!==["google","facebook","pinterest","bing","bing_local_inventory","snapchat"].indexOf(t)?(s('input[id*="cat_mapping_"]').css("display","none"),s(".wf_default.wf_attributes").css("display","block").css("width","100%"),e=new u,"facebook"===t&&e.wooFeed_get_facebook_categories()):(s('input[id*="cat_mapping_"]').css("display","block"),s(".wf_default.wf_attributes").css("display","none").css("width","100%"))}).on("click",'span[id*="cat-map-"]',function(e){e.preventDefault();var o,t=s("#category-mapping-form #providers").val(),a=s(this).attr("id").replace(/[^\d.]/g,""),e="group-child-"+a;-1!==["google","facebook","pinterest","bing","bing_local_inventory","snapchat"].indexOf(t)?(o=s(this).parents("tr").find(".selectized").val())&&s("."+e).parents("tr").find("select").each(function(e,t){s(t).data("selectize").setValue(o)}):(a=s("#cat_mapping_"+a).val(),s("."+e).parents("tr").find("input").val(a))}),s(c).ready(function(){var e=s("#providers").val(),t=new u;"facebook"===e?t.wooFeed_get_facebook_categories():t.wooFeed_get_google_categories()}),s(c).on("feed_editor_init",function(){var t=s(".merchant-info-section.feed_file_type .data").html().split(",").map(function(e){return e.trim().toLowerCase()}),e=s("#feedType");t.length?(e.find("option").each(function(){var e=s(this);e.val()&&!p.in_array(e.val(),t)?e.disabled(!0):e.disabled(!1)}),1===t.length&&e.find('option[value="'+t[0]+'"]').attr("selected","selected")):e.find("option").disabled(!1)}),s(c).on("ready",function(){s(c).on("feedEditor.init",function(){!function(){var i,t={price:wpf_ajax_obj.woocommerce.currency,current_price:wpf_ajax_obj.woocommerce.currency,sale_price:wpf_ajax_obj.woocommerce.currency,price_with_tax:wpf_ajax_obj.woocommerce.currency,current_price_with_tax:wpf_ajax_obj.woocommerce.currency,sale_price_with_tax:wpf_ajax_obj.woocommerce.currency,weight:wpf_ajax_obj.woocommerce.weight,weight_unit:wpf_ajax_obj.woocommerce.weight,height:wpf_ajax_obj.woocommerce.dimension,length:wpf_ajax_obj.woocommerce.dimension,width:wpf_ajax_obj.woocommerce.dimension};void 0!==wpf_ajax_obj.feed_rules&&null!==wpf_ajax_obj.feed_rules&&(i=wpf_ajax_obj.feed_rules.feedCurrency);var e=a.location.search,r=new URLSearchParams(e).get("action");s(".wf_attr.wf_attributes").each(function(o,e){var a=s(e).val(),n=s('input[name^="suffix"]').eq(parseInt(o)).val();-1!==s.inArray(n,[" "+wpf_ajax_obj.woocommerce.currency," "+wpf_ajax_obj.woocommerce.weight," "+wpf_ajax_obj.woocommerce.dimension])&&s('input[name^="suffix"]').eq(parseInt(o)).val(""),s.each(t,function(e,t){a===e&&(t=null!=i?i:t,"undefined"!==r&&"edit-feed"!==r?s('input[name^="suffix"]').eq(parseInt(o)).val(" "+t):s('input[name^="suffix"]').eq(parseInt(o)).val(n))})}),s(c).trigger("feedEditor.after.free.postfix.update")}()})})}(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 o=0;o<t.length;o++){var a=t[o];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function _createClass(e,t,o){return t&&_defineProperties(e.prototype,t),o&&_defineProperties(e,o),e}!function(s,a,c,l,d){s.fn.disabled=function(o){return s(this).each(function(){var e=s(this),t="disabled";void 0!==e.prop(t)?e.prop(t,void 0===o||!0===o):!0===o?e.addClass(t):e.removeClass(t)}),self},s.fn.isDisabled=function(){var e=s(this),t="disabled";return void 0!==e.prop(t)?e.prop(t):e.hasClass(t)};function e(e){s(e.currentTarget).removeClass(function(e,t){return(t.match(/\btooltipped-\S+/g)||[]).join(" ")}).removeClass("tooltipped").removeAttr("aria-label")}function o(e,t){s(e).addClass("tooltipped tooltipped-s").attr("aria-label",t)}function n(e,t){return s.extend(!0,{},e,t)}function t(){i=s(".toClipboard"),!ClipboardJS.isSupported()||/iPhone|iPad/i.test(navigator.userAgent)?i.find("img").hide(0):(i.each(function(){s(this).on("mouseleave",e).on("blur",e)}),new ClipboardJS(".toClipboard").on("error",function(e){var t;o(e.trigger,(t=e.action,e="cut"===t?"X":"C",t=/iPhone|iPad/i.test(navigator.userAgent)?"No support :(":/Mac/i.test(navigator.userAgent)?"Press ⌘-"+e+" to "+t:"Press Ctrl-"+e+" to "+t))}).on("success",function(e){o(e.trigger,"Copied")}))}var i,r,f,_=function(){function a(e,t,o){_classCallCheck(this,a),this.productCustomFields(e,t,o)}return _createClass(a,[{key:"cacheClear",value:function(){var e={action:"woo_feed_product_attribute_cache_remove",nonce:wpf_ajax_obj.ajax.nonce};s.ajax({method:"POST",url:wpf_ajax_obj.wpf_ajax_url,data:e})}},{key:"productCustomFields",value:function(t){var o=this,e={action:"woo_feed_custom_fields_status_change",nonce:wpf_ajax_obj.ajax.nonce,field:t,status:1<arguments.length&&void 0!==arguments[1]&&arguments[1],isTaxonomy:2<arguments.length?arguments[2]:void 0};s.ajax({method:"POST",url:wpf_ajax_obj.wpf_ajax_url,data:e,success:function(e){e.success?o.cacheClear():console.log(e),s("#"+t+"-switcher").closest("td").find(".switch-loader").hide()}})}}]),a}(),p=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"wooFeed_get_google_categories",value:function(){l.send("get_google_categories",{type:"GET",data:{_ajax_nonce:d.nonce,action:"get_google_categories"}}).then(function(e){s(".selectize-google-category").selectize({valueField:"value",labelField:"text",placeholder:"Select a category",searchField:["value","text"],options:e,render:{option:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.value+" - "+e.text),"</div>")},item:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.value+" - "+e.text),"</div>")}}}),s(".woo-feed-cat-map-spinner").remove()}).fail(u.ajax_fail)}},{key:"wooFeed_get_facebook_categories",value:function(){l.send("get_facebook_categories",{type:"GET",data:{_ajax_nonce:d.nonce,action:"get_facebook_categories"}}).then(function(e){s(".selectize-google-category").selectize({valueField:"value",labelField:"text",placeholder:"Select a Facebook category",searchField:["value","text"],options:e,render:{option:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.value+" - "+e.text),"</div>")},item:function(e,t){return'<div class="item wapk-selectize-item">'.concat(t(e.value+" - "+e.text),"</div>")}}}),s(".woo-feed-cat-map-spinner").remove()}).fail(u.ajax_fail)}}]),e}(),u={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")?d.ajax.error+"\n"+e.statusText+" ("+e.status+")":e)},sortable:function(e,o,a,i){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(n({containerSelector:"table",itemPath:"> tbody",itemSelector:"tr",handle:"i.wf_sortedtable",placeholder:'<tr class="placeholder"><td colspan="'.concat(t,'"></td></tr>'),onDrop:function(e,t,o,a){e.removeClass(t.group.options.draggedClass).removeAttr("style"),s("body").removeClass(t.group.options.bodyClass);var n=e.find(".wf_mattributes").attr("name").replace(/\D/g,"");e.find("input.wf_attributes").attr("name","default["+n+"]"),i&&"function"==typeof i&&i(e,t,o,a)}},o))})},selectize:function(e,t){return(e||s("select.selectize")).not(".selectized").not(".selectize-google-category").each(function(){var e=s(this);e.selectize(n({create:e.data("create")||!1,plugins:e.data("plugins")?e.data("plugins").split(",").map(function(e){return e.trim()}):[],render:{item:u.selectize_render_item}},t))})},fancySelect:function(e,t){return(e||s("select.fancySelect")).not(".FancySelectInit").each(function(){s(this).fancySelect(n({maxItemShow:3},t))})},reindex_config_table:function(){s("#table-1").find("tbody tr").each(function(o,e){s(e).find("[name]").each(function(e,t){s(t).attr("name",s(t).attr("name").replace(/(\[\d\])/g,"[".concat(o,"]")))})})},common:function(){u.sortable(s(".sorted_table"),{},9,u.reindex_config_table),u.selectize(),u.fancySelect(s(".outputType"))}},h={form:null,init:function(){this.form=s(".generateFeed"),this.form.length&&(u.common(),s(c).trigger("feed_editor_init"),s(c).trigger(new jQuery.Event("feedEditor.init",{target:this.form})))},renderMerchantInfo:function(o,a,n){for(var e in n)!function(e){var t;n.hasOwnProperty(e)&&(o.find(".merchant-info-section."+e+" .data").html(n[e]),"feed_file_type"===e&&((t=n[e].split(",").map(function(e){return e.trim().toLowerCase()}).filter(function(e){return""!==e&&e!==d.na.toLowerCase()})).length?(a.find("option").removeAttr("selected").each(function(){var e=s(this);e.val()&&!u.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)))}(e);o.find(".spinner").removeClass("is-active"),a.disabled(!1),a.trigger("change"),s(c).trigger("woo_feed_config_loaded"),a.parent().find(".spinner").removeClass("is-active")},renderMerchantTemplate:function(o,a){for(var e in a)!function(t){var e;a.hasOwnProperty(t)&&("tabs"===t?o.html(a[t]):(e=s('[name="'+t+'"]')).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"))}(e);h.init()}},g=[],v=[],m=function(){function e(){_classCallCheck(this,e),this._feed=d.generator.feed,this._limit=d.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=d.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;""!==this._feed&&this._regenerate&&!1===a.isRegenerating&&this.generate();var e=a.location.search;return"webappick-manage-feeds"===new URLSearchParams(e).get("page")&&s("body").addClass("woo-import-popup-body"),s(c).on("click",".woo-feed-campaign-close-button",function(e){e.preventDefault(),s(this).parent(".woo-feed-promotion").hide();e=s(this).data("condition");1===e&&l.post("woo_feed_hide_promotion",{_ajax_nonce:d.nonce,condition:e}).then(function(e){t._log(e)}).fail(function(e){t._log(e),t._updateProgressStatus(e.message),t._color="red"})}),s(c).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",d.regenerate).attr("title",d.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,o=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,o._log({response:e}),e.success?(o._log("Total ".concat(e.total," Products found.")),o._product_ids=e.product,o._total_batch=t._product_ids.length,o._current_batch=0,o._progress_per_batch=(90-t._progress)/t._total_batch,o._process_batch(),o._updateProgressStatus("Processing Products...")):o._updateProgressStatus(e.data.message)}).fail(function(e){o._log(e),o._updateProgressStatus(e.message),o._color="red",setTimeout(function(){o._stopProgressBar(),o._unblock_button()},1500)})}},{key:"_get_product_ids",value:function(){return this._progress=5,l.post("get_product_information",{_ajax_nonce:d.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),l.post("make_batch_feed",{_ajax_nonce:d.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"),l.post("save_feed_file",{_ajax_nonce:d.nonce,feed:this._feed}).then(function(e){t._log(e),t._progress=100,t._refresh&&(a.location.href="".concat(d.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 d.wpf_debug&&console.log(e),this}},{key:"_progressBarActive",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,t=this;return this._toggleProgressBar(!0),this._timer=setInterval(function(){t._updateProgressBar()},e||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").html(e),this}},{key:"_getErrorMessageByCode",value:function(e){s(".feed-progress-status").css({color:this._color}),s(".feed-progress-percentage").css({color:this._color}),s(".wpf_spin").css({color:this._color});var t=e.status+" : "+e.statusText+". ";500===e.status&&(t+="Please increase your PHP max_execution_time. Please <a target='_blank' href='https://webappick.com/docs/woo-feed/faq-for-woocommerce-product-feed/how-to-solve-processing-10-feed-generation-stuck-error/'>read this doc</a>."),this._updateProgressStatus(t)}},{key:"_updateProgressBar",value:function(){var e=s(".feed-progress-percentage"),t=s(".feed-progress-bar-fill"),o="".concat(Math.round(this._progress),"%");t.css({width:o}),e.text(o)}}]),e}();a.wf={helper:u,feedEditor:h,generator:m},s(a).on("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 m).init(),""!==d.generator.feed&&d.generator.regenerate,h.init(),u.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(c).on("blur",'input[name="wfDAttributeName"]',function(e){e.preventDefault();e=s(this).val();e=(e=e.toLowerCase()).split(" ").join("_"),s("#wfDAttributeCode").val(e)}).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),u.fancySelect(s(".outputType"))}).on("click",".single-feed-delete",function(e){e.preventDefault(),confirm(d.form.del_confirm)&&(a.location.href=s(this).attr("val"))}).on("click",".wf_clean_cache_wrapper",function(e){e.preventDefault();var e=s(".woo-feed-clean-cache-nonce").val(),t=s(".woo-feed-cache-loader");t.show(),l.post("clear_cache_data",{_ajax_clean_nonce:e}).then(function(e){e.success&&(t.hide(),location.reload())}).fail(function(){console.log("something wrong")})}).on("click","#woo-feed-copy-status-btn",function(e){e.preventDefault();var t=s("#woo-feed-copy-status-btn"),e=s("#woo-feed-status-area");t.val("Copied"),e.css("visibility","visible"),e.select(),c.execCommand("copy")}).on("change",".wf_attr.wf_attributes",function(e){e.preventDefault(),s(".fancy-picker-picked").trigger("click");var t,o=s(this).val(),a=s(this).parents("tr").find(".outputType"),e=s(this).parents("tr").find(".fancy-picker-content .fancy-picker-option"),n=s(this).parents("tr").find(".fancy-picker-data span"),i=["price","current_price","sale_price","price_with_tax","current_price_with_tax","sale_price_with_tax","shipping_cost"].includes(o)?(t="for_price","Price"):""!==o&&-1!==o.indexOf("wf_taxo")?(t="for_custom_taxo","parent_if_empty"):(t="for_all","Default");e.removeClass("selected"),"for_custom_taxo"===t||"for_price"===t?(e.each(function(){i===s(this).text()&&(s(this).addClass("selected"),n.text(i),a.find("option").text(i),a.find("option").val(s(this).data("value")))}),"for_price"===t&&(t=null!=(t=s("#feedCurrency").val())?t:wpf_ajax_obj.woocommerce.currency,s(this).closest("tr").find("td:eq(5) input").val(" "+t))):(e.each(function(){i===s(this).text()&&(s(this).addClass("selected"),n.text(i),a.find("option").text(i),a.find("option").val(s(this).data("value")))}),s(this).closest("tr").find("td:eq(5) input").val(""))}).on("click","#doaction, #doaction2",function(){return confirm(d.form.del_confirm_multi)}).on("change",".dType",function(){var e=s(this),t=e.val(),e=e.closest("tr");"pattern"===t?(e.find(".value_attribute").hide(),e.find(".value_pattern").show()):"attribute"===t?(e.find(".value_attribute").show(),e.find(".value_pattern").hide()):"remove"===t&&(e.find(".value_attribute").hide(),e.find(".value_pattern").hide())}).on("click",".delRow",function(e){e.preventDefault(),s(this).closest("tr").remove(),u.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(d.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?d.form.save:d.form.generate,"</b>"))}).on("ready woo_feed_config_loaded",function(){"0"===s("#ftpenabled").val()?(s(".google-merchant-message").hide("slow"),s(".woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select").attr("disabled","disabled")):("google"===s("#provider").val()?s(".google-merchant-message").show("slow"):s(".google-merchant-message").hide("slow"),s(".woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select").removeAttr("disabled")),s("#ftpenabled").on("change",function(){"0"===s("#ftpenabled").val()?(s(".google-merchant-message").hide("slow"),s(".woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select").attr("disabled","disabled")):(s(".woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select").removeAttr("disabled"),"google"===s("#provider").val()?s(".google-merchant-message").show("slow"):s(".google-merchant-message").hide("slow"))})}).on("change",".ftporsftp",function(){var e=s(this).val(),t=s(".ssh2_status");"sftp"===e?(t.show().css("color","dodgerblue").text(d.form.sftp_checking),l.post("get_ssh2_status",{_ajax_nonce:d.nonce,server:e}).then(function(e){"exists"===e?(t.css("color","#2CC185").text(d.form.sftp_available),setTimeout(function(){t.hide()},1500)):t.show().css("color","red").text(d.form.sftp_warning)}).fail(function(e){t.hide(),u.ajax_fail(e)})):t.hide()}).on("click",'[name="save_feed_config"]',function(e){e.preventDefault(),s("#updatefeed").trigger("submit",{save:!0})}).on("change","#provider",function(e){e.preventDefault();var t=s(this).val(),o=s(this).find(":selected").text(),a=s("#filename").val(),n=s("#feedType"),i=s("#providerPage"),r=s("#feed_merchant_info");i.html('<h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> '+d.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(""),g.hasOwnProperty(t)?(h.renderMerchantInfo(r,n,g[t]),s(c).trigger("woo_feed_config_loaded")):l.send("woo_feed_get_merchant_info",{type:"GET",data:{nonce:d.nonce,provider:t,templateName:o}}).then(function(e){g[t]=e,h.renderMerchantInfo(r,n,e)}).then(function(){s(c).trigger("woo_feed_config_loaded")}).fail(u.ajax_fail),v.hasOwnProperty(t)?(h.renderMerchantTemplate(i,v[t]),s(c).trigger("woo_feed_config_loaded")):l.post("get_feed_merchant",{_ajax_nonce:d.nonce,merchant:t}).then(function(e){v[t]=e,h.renderMerchantTemplate(i,e),s("#utm_source").val(o),s("#utm_campaign").val(a),"bing"===t&&(s("#delimiter option").removeAttr("selected"),s('#delimiter option[value="tab"]').attr("selected","selected"),s("#enclosure option").removeAttr("selected"),s('#enclosure option[value=" "]').attr("selected","selected")),"google_product_review"!==t&&s('.wf_attributes option[value="reviewer_name"]').hide()}).then(function(){s(c).trigger("woo_feed_config_loaded")}).fail(u.ajax_fail)}).on("change",".woo_feed_status_input",function(){var e=s(this);l.post("update_feed_status",{_ajax_nonce:d.nonce,feedName:e.val(),status:e[0].checked?1:0})}),s(c).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(),e=e.closest("tr");"pattern"===t?(e.find(".wf_attr").hide(),e.find(".wf_attr").val(""),e.find(".wf_default").show()):(e.find(".wf_attr").show(),e.find(".wf_default").hide(),e.find(".wf_default").val(""))}).on("change",".wf_mattributes, .attr_type",function(){var e=s(this).closest("tr"),o=e.find(".wf_mattributes"),t=e.find(".attr_type"),a=e.find("td:eq(4)"),n=s("#provider").val();d.form.google_category.hasOwnProperty(o.val())&&"pattern"===t.val()&&u.in_array(n,d.form.google_category[o.val()])?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="https://webappick.com/docs/woo-feed/feed-configuration/how-to-map-store-category-with-merchant-category/" target="_blank">'.concat(d.learn_more,"</a></span>")),r&&f||a.append('<span class="spinner is-active" style="margin: 0;"></span>'),e=a.find(".wf_attributes select"),u.selectize(e,{preload:!0,placeholder:d.form.select_category,load:function(e,t){r?t(r):l.send("get_google_categories",{type:"GET",data:{_ajax_nonce:d.nonce,action:"get_google_categories",provider:n}}).then(function(e){t(r=e),a.find(".spinner").remove()}).fail(u.ajax_fail),f||"facebook"!==n||"fb_product_category"!==o.val()?t(f):l.send("get_facebook_categories",{type:"GET",data:{_ajax_nonce:d.nonce,action:"get_facebook_categories",provider:n}}).then(function(e){t(f=e),a.find(".spinner").remove()}).fail(u.ajax_fail)}})):"current_category"!==o.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"!==t.val()&&a.find("input.wf_default").hide())}).on("change","#feedType,#provider",function(e){var t=s("#feedType").val(),o=s("#provider").val(),a=s(".itemWrapper"),n=s(".wf_csvtxt");""!==t&&u.in_array(o,d.form.item_wrapper_hidden)&&a.hide(),"feedType"===e.target.id&&("csv"===t||"txt"===t||"tsv"===t?(n.show(),a.hide(),"tsv"===t?s("#delimiter option:last").prop("selected","selected"):"csv"===t&&s("#delimiter option:first").prop("selected","selected")):"xml"===t&&"custom"===o?(a.show(),n.hide()):"json"===t&&n.hide()),"custom"!==o&&a.hide()}).trigger("change"),s(c).on("click",'.woofeed-custom-fields [id*="-switcher"]',function(){s(this).closest("td").find(".switch-loader").show();var e=s(this).attr("id").split("-")[0],t=s(this).data("taxonomy"),o=s(this).prop("checked");new _(e,o,t)}).ready(function(){var e=s(".wapk-feed-buy-now-container");s(a).scroll(function(){s(a).scrollTop()<=5e3?e.addClass("fixed"):e.removeClass("fixed")})})}),s(c).on("click","#woo-feed-debug-log-download",function(e){e.preventDefault(),s("<a />",{download:new Date+".log",href:URL.createObjectURL(new Blob([s("#woo-feed-debug-log").val()],{type:"text/plain"}))}).appendTo("body")[0].click()}).on("keyup","#filename",function(){var e=s("#filename").val();s("#utm_campaign").val(e)}).on("click",".wf-tab-name",function(e){s(".wf-tab-name.activate").removeClass("activate"),s(this).addClass("activate");var t=s(this).attr("for");s(".wf_tabs li.active").removeClass("active"),s(".wf_tabs .wf-tab-content#"+t).parent().addClass("active")}).on("change","#category-mapping-form #providers",function(){var e,t=s(this).find(":selected").val();s(".woo-feed-category-mapping-config-table").prepend('<div class="woo-feed-cat-map-spinner"><h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> Loading Mapping...</h3></div>'),-1!==["google","facebook","pinterest","bing","bing_local_inventory","snapchat"].indexOf(t)?(s('input[id*="cat_mapping_"]').css("display","none"),s(".wf_default.wf_attributes").css("display","block").css("width","100%"),e=new p,"facebook"===t?e.wooFeed_get_facebook_categories():e.wooFeed_get_google_categories()):(s('input[id*="cat_mapping_"]').css("display","block"),s(".wf_default.wf_attributes").css("display","none").css("width","100%"))}).on("click",'span[id*="cat-map-"]',function(e){e.preventDefault();var o,t=s("#category-mapping-form #providers").val(),a=s(this).attr("id").replace(/[^\d.]/g,""),e="group-child-"+a;-1!==["google","facebook","pinterest","bing","bing_local_inventory","snapchat"].indexOf(t)?(o=s(this).parents("tr").find(".selectized").val())&&s("."+e).parents("tr").find("select").each(function(e,t){s(t).data("selectize").setValue(o)}):(a=s("#cat_mapping_"+a).val(),s("."+e).parents("tr").find("input").val(a))}),s(c).ready(function(){var e=s("#providers").val(),t=new p;"edit-mapping"===new URL(a.location.href).searchParams.get("action")&&(s(".woo-feed-category-mapping-config-table").prepend('<div class="woo-feed-cat-map-spinner"><h3><span style="float:none;margin: -3px 0 0;" class="spinner is-active"></span> Loading Mapping...</h3></div>'),"facebook"===e?t.wooFeed_get_facebook_categories():t.wooFeed_get_google_categories())}),s(c).on("feed_editor_init",function(){var t=s(".merchant-info-section.feed_file_type .data").html().split(",").map(function(e){return e.trim().toLowerCase()}),e=s("#feedType");t.length?(e.find("option").each(function(){var e=s(this);e.val()&&!u.in_array(e.val(),t)?e.disabled(!0):e.disabled(!1)}),1===t.length&&e.find('option[value="'+t[0]+'"]').attr("selected","selected")):e.find("option").disabled(!1)}),s(c).on("ready",function(){s(c).on("feedEditor.init",function(){!function(){var i,t={price:wpf_ajax_obj.woocommerce.currency,current_price:wpf_ajax_obj.woocommerce.currency,sale_price:wpf_ajax_obj.woocommerce.currency,price_with_tax:wpf_ajax_obj.woocommerce.currency,current_price_with_tax:wpf_ajax_obj.woocommerce.currency,sale_price_with_tax:wpf_ajax_obj.woocommerce.currency,weight:wpf_ajax_obj.woocommerce.weight,weight_unit:wpf_ajax_obj.woocommerce.weight,height:wpf_ajax_obj.woocommerce.dimension,length:wpf_ajax_obj.woocommerce.dimension,width:wpf_ajax_obj.woocommerce.dimension};void 0!==wpf_ajax_obj.feed_rules&&null!==wpf_ajax_obj.feed_rules&&(i=wpf_ajax_obj.feed_rules.feedCurrency);var e=a.location.search,r=new URLSearchParams(e).get("action");s(".wf_attr.wf_attributes").each(function(o,e){var a=s(e).val(),n=s('input[name^="suffix"]').eq(parseInt(o)).val();-1!==s.inArray(n,[" "+wpf_ajax_obj.woocommerce.currency," "+wpf_ajax_obj.woocommerce.weight," "+wpf_ajax_obj.woocommerce.dimension])&&s('input[name^="suffix"]').eq(parseInt(o)).val(""),s.each(t,function(e,t){a===e&&(t=null!=i?i:t,"undefined"!==r&&"edit-feed"!==r?s('input[name^="suffix"]').eq(parseInt(o)).val(" "+t):s('input[name^="suffix"]').eq(parseInt(o)).val(n))})}),s(c).trigger("feedEditor.after.free.postfix.update")}()})})}(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","enumerable","configurable","writable","Object","defineProperty","key","_createClass","Constructor","protoProps","staticProps","prototype","window","wpAjax","$","document","opts","self","prop","status","addClass","removeClass","hasClass","currentTarget","clearTooltip","userAgent","actionMsg","match","actionKey","index","join","removeAttr","elem","attr","msg","extend","_default","_args","valueField","$copyBtn","feedGenerator","this","on","ClipboardJS","event","action","showTooltip","trigger","test","navigator","ajax_fail","alert","facebookCategories","url","data","_classCallCheck","WooFeedCustomFields","productCustomFields","field","isTaxonomy","value","ajax","nonce","method","response","wpf_ajax_obj","wpf_ajax_url","success","_this","cacheClear","closest","find","hide","selectize","WooFeedMapCategories","options","render","send","type","item","_ajax_nonce","then","fail","helper","labelField","placeholder","searchField","escape","concat","text","in_array","needle","haystack","indexOf","sortable","onDrop","column_count","warn","wf_sortable","containerSelector","e","hasOwnProperty","error","statusText","el","config","column","each","_super","handle","$item","container","create","group","draggedClass","plugins","bodyClass","numb","trim","replace","_onDrop","selectize_render_item","not","fancySelect","maxItemShow","split","map","s","reindex_config_table","itemSelector","init","renderMerchantInfo","form","length","common","jQuery","k","opt","merchantInfo","feedType","r","types","html","t","toLowerCase","na","disabled","val","_loop2","contentSettings","feedForm","feedEditor","is","merchantInfoCache","tooltip","css","top","_regenerate","isRegenerating","title","_current_btn","feed","_limit","generator","limit","_progress","_timer","_product_ids","_progress_per_batch","_refresh","mousemove","_feed","pageX","generate","clip","fallbackMessage","condition","URLSearchParams","_color","preventDefault","parent","_log","regenerate","_all_btn","current_page_query","page_name","_block_button","_current_btn_label","message","product","setTimeout","_this2","_stopProgressBar","_process_batch","_updateProgressStatus","_current_batch","_total_batch","post","_save_feed_file","loop","_unblock_button","_resetProgressBar","console","refreshInterval","arguments","undefined","clearInterval","setInterval","_updateProgressBar","update","_toggleProgressBar","table","show","color","width","pagenow","attr_name","hover","renderMerchantTemplate","_loop","appendTo","remove","clipboard","confirm","href","slideToggle","loader","reload","button","status_area","select","execCommand","current_attribute_value","fancyOption","fancyDataPicker","selectIf","currency","price_attributes","selectKey","progress_message","parents","includes","outputSelect","feedCurrency","woocommerce","del_confirm_multi","add_postbox_toggles","row","_ajax_clean_nonce","validate","save","server","sftp_checking","sftp_available","merchant","sftp_warning","name","templateName","provider","valid","merchantTemplateCache","outOfStockVisibilityRow","feedName","checked","valueColumn","append","attribute","preload","load","google_category","query","googleCategories","learn_more","cb","itemWrapper","item_wrapper_hidden","wf_csv_txt","id","windowpos","scroll","click","cat_init","wooFeed_get_facebook_categories","for_attr","googleMap","catId","setValue","catField","wooFeed_get_google_categories","v","groupId","ready","attribute_list","current_feed_currency","price","providerName","location","queryString","weight","attribute_value","height","current_Value","dimension","feed_rules","search","get","eq","parseInt","inArray","_key","_value"],"mappings":"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","file":"woo-feed-admin.min.js","sourcesContent":["// noinspection JSUnresolvedletiable\n/**!\n * WooFeed Scripts\n * @version 3.3.6\n * @package WooFeed\n * @copyright 2020 WebAppick\n *\n */\n/* global ajaxurl, wpAjax, postboxes, pagenow, alert, deleteUserSetting, typenow, adminpage, thousandsSeparator, decimalPoint, isRtl */\n// noinspection JSUnresolvedVariable\n(function($, window, document, wpAjax, opts) {\n \"use strict\";\n /**\n * All of the code for your admin-facing JavaScript source\n * should reside in this file.\n *\n * Note: It has been assumed you will write jQuery code here, so the\n * $ function reference has been prepared for usage within the scope\n * of this function.\n *\n * This enables you to define handlers, for when the DOM is ready:\n */\n\n /**\n * disable element utility\n *\n * @since 3.1.9\n *\n * @param {*} status\n * @returns {$|HTMLElement}\n */\n $.fn.disabled = function(status) {\n $(this).each(function() {\n let self = $(this),\n prop = 'disabled';\n\n if (typeof self.prop(prop) !== 'undefined') {\n self.prop(prop, status === void 0 || status === true);\n } else {\n !0 === status ? self.addClass(prop) : self.removeClass(prop);\n }\n });\n return self; // method chaining\n };\n\n /**\n * Check if a HTMLElement or jQuery is disabled\n */\n $.fn.isDisabled = function() {\n let self = $(this),\n prop = 'disabled';\n return typeof self.prop(prop) !== 'undefined' ? self.prop(prop) : self.hasClass(prop);\n };\n\n /**\n * Clear Tooltip for clip board js\n * @param {Object} event\n */\n const clearTooltip = (event) => {\n $(event.currentTarget).removeClass( (index, className) => (className.match(/\\btooltipped-\\S+/g) || []).join(' ') ).removeClass('tooltipped').removeAttr('aria-label');\n };\n\n const showTooltip = (elem, msg) => {\n $(elem).addClass('tooltipped tooltipped-s').attr('aria-label', msg);\n };\n\n const fallbackMessage = (action) =>{\n let actionMsg,\n actionKey = action === 'cut' ? 'X' : 'C';\n\n if (/iPhone|iPad/i.test(navigator.userAgent)) {\n actionMsg = 'No support :(';\n } else if (/Mac/i.test(navigator.userAgent)) {\n actionMsg = 'Press ⌘-' + actionKey + ' to ' + action;\n } else {\n actionMsg = 'Press Ctrl-' + actionKey + ' to ' + action;\n }\n\n return actionMsg;\n };\n\n /**\n * Alias of jQuery.extend()\n * @param {Object} _default\n * @param {Object} _args\n */\n const extend = (_default, _args) => $.extend(true, {}, _default, _args);\n\n\t/*\n\t* Handles product attributes\n\t*\n\t* @since 4.4.18\n\t* */\n\tclass WooFeedCustomFields {\n\n\t\tconstructor( field, status, isTaxonomy ) {\n\t\t\tthis.productCustomFields( field, status, isTaxonomy );\n\t\t}\n\n\t\tcacheClear() {\n\t\t\tlet data = {\n\t\t\t\taction: 'woo_feed_product_attribute_cache_remove',\n\t\t\t\tnonce: wpf_ajax_obj.ajax.nonce,\n\t\t\t};\n\t\t\t$.ajax({\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: wpf_ajax_obj.wpf_ajax_url,\n\t\t\t\tdata\n\t\t\t});\n\t\t}\n\n\t\tproductCustomFields( field, status = false, isTaxonomy ) {\n\t\t\tlet data = {\n\t\t\t\taction: 'woo_feed_custom_fields_status_change',\n\t\t\t\tnonce: wpf_ajax_obj.ajax.nonce,\n\t\t\t\tfield,\n\t\t\t\tstatus,\n\t\t\t\tisTaxonomy\n\t\t\t};\n\t\t\t$.ajax({\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: wpf_ajax_obj.wpf_ajax_url,\n\t\t\t\tdata,\n\t\t\t\tsuccess: ( response ) => {\n\t\t\t\t\tif( response.success ) {\n\t\t\t\t\t\tthis.cacheClear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log( response );\n\t\t\t\t\t}\n $('#'+field+'-switcher').closest('td').find('.switch-loader').hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n /*\n * Handles product categories\n *\n * @since 4.4.39\n * */\n class WooFeedMapCategories {\n wooFeed_get_google_categories () {\n wpAjax.send('get_google_categories', {\n type: 'GET',\n data: {\n _ajax_nonce: opts.nonce,\n action: \"get_google_categories\",\n // provider: provider\n }\n }).then(function (response) {\n $('.selectize-google-category').selectize({\n valueField: 'value',\n labelField: 'text',\n placeholder: 'Select a category',\n searchField: ['value', 'text'],\n options: response,\n render: {\n option: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.value + ' - ' + data.text)}</div>`,\n item: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.value + ' - ' + data.text)}</div>`\n }\n });\n }).fail(helper.ajax_fail);\n }\n\n wooFeed_get_facebook_categories() {\n // get facebook categories\n wpAjax.send('get_facebook_categories', {\n type: 'GET',\n data: {\n _ajax_nonce: opts.nonce,\n action: \"get_facebook_categories\",\n // provider: provider\n }\n }).then(function (response) {\n $('.selectize-google-category').selectize({\n valueField: 'value',\n labelField: 'text',\n placeholder: 'Select a Facebook category',\n searchField: ['value', 'text'],\n options: response,\n render: {\n option: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.value + ' - ' + data.text)}</div>`,\n item: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.value + ' - ' + data.text)}</div>`\n }\n });\n }).fail(helper.ajax_fail);\n }\n }\n\n let $copyBtn,\n clipboard,\n googleCategories,\n facebookCategories,\n helper = {\n in_array: (needle, haystack) => {\n try {\n return haystack.indexOf(needle) !== -1;\n } catch (e) {\n return false;\n }\n },\n selectize_render_item: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.text)}</div>`, // phpcs:ignore WordPressVIPMinimum.JS.StringConcat.Found,\n ajax_fail: e => {\n console.warn(e);\n alert(e.hasOwnProperty('statusText') && e.hasOwnProperty('status') ? opts.ajax.error + '\\n' + e.statusText + ' (' + e.status + ')' : e);\n },\n /**\n * Initialize Sortable\n * @param {$|HTMLElement} el\n * @param {object} config\n * @param {int|boolean} column\n * @param {function} onDrop\n * @return {$|HTMLElement}\n */\n sortable: (el, config, column, onDrop) => {\n return (el || $('.sorted_table')).each(function() {\n let self = $(this),\n column_count = self.find('tbody > tr:eq(0) > td').length || column || 9;\n self.wf_sortable(extend({\n containerSelector: 'table',\n itemPath: '> tbody',\n itemSelector: 'tr',\n handle: 'i.wf_sortedtable',\n placeholder: `<tr class=\"placeholder\"><td colspan=\"${column_count}\"></td></tr>`,\n onDrop: ($item, container, _super, event) => {\n $item.removeClass(container.group.options.draggedClass).removeAttr('style');\n $(\"body\").removeClass(container.group.options.bodyClass);\n var numb = $item.find(\".wf_mattributes\").attr(\"name\").replace(/\\D/g, \"\");\n $item.find(\"input.wf_attributes\").attr(\"name\", \"default[\"+ numb +\"]\");\n if ( onDrop && 'function' === typeof( onDrop ) ) {\n onDrop( $item, container, _super, event );\n }\n },\n }, config));\n });\n },\n selectize: (el, config) => {\n return (el || $('select.selectize')).not('.selectized').not('.selectize-google-category').each(function() {\n let self = $(this);\n self.selectize(extend({\n create: self.data('create') || false,\n plugins: self.data('plugins') ? self.data('plugins').split(',').map(function(s) {\n return s.trim();\n }) : [],\n //['remove_button'],\n render: {\n item: helper.selectize_render_item\n }\n }, config));\n });\n },\n fancySelect: (el, config) => {\n return (el || $('select.fancySelect')).not('.FancySelectInit').each(function() {\n let self = $(this);\n self.fancySelect(extend({\n maxItemShow: 3\n }, config));\n });\n },\n reindex_config_table: () => {\n $('#table-1').find('tbody tr').each( ( x, el ) => {\n $(el).find('[name]').each( ( x1, el ) => {\n $(el).attr('name', $(el).attr('name').replace(/(\\[\\d\\])/g, `[${x}]`));\n } );\n } );\n },\n common: () => {\n helper.sortable( $('.sorted_table'), {}, 9, helper.reindex_config_table );\n helper.selectize();\n helper.fancySelect($('.outputType'));\n }\n },\n // helper functions\n feedEditor = {\n /**\n * The Editor Form Elem.\n * @type {$|HTMLElement}\n */\n form: null,\n\n /**\n * Initialize The Feed Editor {Tabs...}\n * @returns {void}\n */\n init: function () {\n let self = this;\n self.form = $('.generateFeed');\n if (!self.form.length) return;\n helper.common();\n // noinspection JSUnresolvedVariable\n $(document).trigger('feed_editor_init');\n $(document).trigger(new jQuery.Event('feedEditor.init', {\n target: this.form\n }));\n },\n\n /**\n * Render Merchant info ajax response and handle allowed feed type for selected merchant\n * @param {$|HTMLElement} merchantInfo jQuery dom object\n * @param {$|HTMLElement} feedType jQuery dom object\n * @param {Object} r ajax response object\n */\n renderMerchantInfo: function (merchantInfo, feedType, r) {\n for (let k in r) {\n if (r.hasOwnProperty(k)) {\n merchantInfo.find('.merchant-info-section.' + k + ' .data').html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html\n\n if ('feed_file_type' === k) {\n (function() {\n let types = r[k].split(\",\").map(function(t) {\n return t.trim().toLowerCase();\n }).filter(function(t) {\n // noinspection JSUnresolvedVariable\n return t !== '' && t !== opts.na.toLowerCase();\n });\n\n if (types.length) {\n feedType.find('option').removeAttr('selected').each(function() {\n let opt = $(this);\n opt.val() && !helper.in_array(opt.val(), types) ? opt.disabled(!0) : opt.disabled(!1);\n });\n if (types.length === 1) feedType.find('option[value=\"' + types[0] + '\"]').attr('selected', 'selected');\n } else feedType.find('option').disabled(!1);\n })();\n }\n }\n }\n\n merchantInfo.find('.spinner').removeClass('is-active');\n feedType.disabled(!1);\n feedType.trigger('change');\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n feedType.parent().find('.spinner').removeClass('is-active');\n },\n\n /**\n * Render Feed Template Tabs and settings while creating new feed.\n * @param {$|HTMLElement} feedForm feed from query dom object\n * @param {object} r merchant template ajax response object\n */\n renderMerchantTemplate: function (feedForm, r) {\n let _loop = function _loop(k) {\n if (r.hasOwnProperty(k)) {\n if ('tabs' === k) {\n // noinspection JSUnresolvedFunction\n feedForm.html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html\n } else {\n let contentSettings = $('[name=\"' + k + '\"]');\n\n if (contentSettings.length) {\n contentSettings.each(function() {\n let elem = $(this);\n\n if (elem.is('select')) {\n elem.find('[value=\"' + r[k] + '\"]').prop('selected', true);\n } else if ((elem.is('[type=checkbox]') || elem.is('[type=radio]')) && elem.val() === r[k]) {\n elem.prop('checked', true);\n } else {\n elem.val(r[k]); // type=text\n }\n }).trigger('change');\n }\n }\n }\n };\n\n for (let k in r) {\n _loop(k);\n }\n\n feedEditor.init();\n }\n },\n // Feed Editor Table\n merchantInfoCache = [],\n merchantTemplateCache = [],\n tooltip = () => {\n // Tooltip only Text\n $('.wfmasterTooltip')\n .hover(function () {\n // Hover over code\n let self = $(this), title = self.attr('wftitle');\n self.data('tipText', title).removeAttr('wftitle');\n $('<p class=\"wftooltip\"></p>').text(title).appendTo('body').fadeIn('slow');\n }, function () {\n // Hover out code\n let self = $(this);\n self.attr('wftitle', self.data('tipText'));\n $('.wftooltip').remove();\n })\n .mousemove(function (e) {\n $('.wftooltip').css({\n top: e.pageY + 10,\n left: e.pageX + 20\n });\n });\n },\n clip = () => {\n $copyBtn = $('.toClipboard');\n if (!ClipboardJS.isSupported() || /iPhone|iPad/i.test(navigator.userAgent)) {\n $copyBtn.find('img').hide(0);\n } else {\n $copyBtn.each(function() {\n $(this).on('mouseleave', clearTooltip).on('blur', clearTooltip);\n });\n clipboard = new ClipboardJS('.toClipboard');\n clipboard.on('error', function(event) {\n showTooltip(event.trigger, fallbackMessage(event.action));\n }).on('success', function(event) {\n showTooltip(event.trigger, 'Copied');\n });\n }\n };\n\n /**\n * Feed Generator Module\n */\n class feedGenerator {\n\n /**\n * Constructor\n * @constructor\n */\n constructor() {\n this._feed = opts.generator.feed; // wf_config+xxxx\n this._limit = opts.generator.limit;\n this._progress = 0;\n this._timer = null;\n this._color = false;\n // batch info\n this._total_batch = 0;\n this._current_batch = 0;\n this._product_ids = [];\n this._progress_per_batch = 0;\n this._refresh = true;\n // noinspection JSUnresolvedVariable\n this._regenerate = opts.generator.regenerate;\n window.isRegenerating = false;\n this._all_btn = $('.wpf_regenerate');\n this._current_btn = $(`#${this._feed.replace( 'wf_config', 'wf_feed_' )}`);\n this._current_btn_label = '';\n }\n\n /**\n * Init Hooks (Event)\n * @return {feedGenerator}\n */\n init() {\n let self = this;\n if ( '' !== this._feed && this._regenerate && false === window.isRegenerating ) {\n this.generate();\n }\n\n //thickbox body add feed plugin class to make it unique and custom style\n let current_page_query = window.location.search;\n let params = new URLSearchParams(current_page_query);\n let page_name = params.get(\"page\");\n if( \"webappick-manage-feeds\" === page_name ) {\n $('body').addClass('woo-import-popup-body');\n }\n\n $(document).on('click', '.woo-feed-campaign-close-button', function(event) {\n event.preventDefault();\n\n $(this).parent('.woo-feed-promotion').hide();\n let condition = $(this).data('condition');\n if(1 === condition) {\n wpAjax.post( 'woo_feed_hide_promotion', {\n _ajax_nonce: opts.nonce,\n condition: condition,\n } ).then( response => {\n self._log( response );\n } ).fail( error => {\n self._log( error );\n self._updateProgressStatus( error.message );\n self._color = 'red';\n } );\n }\n });\n\n $(document).on('click', '.wpf_regenerate', function(event) {\n event.preventDefault();\n self._current_btn = $( this );\n if( self._current_btn.hasClass('disabled') || window.isRegenerating === true ) return;\n self._feed = self._current_btn.attr('id').replace( 'wf_feed_', 'wf_config' );\n if( '' !== self._feed ) {\n self.generate();\n }\n });\n return this;\n }\n\n _block_button() {\n if ( this._all_btn.length ) {\n this._all_btn.addClass('disabled');\n }\n if ( this._current_btn.length ) {\n this._current_btn.find('span').addClass('wpf_spin reverse_spin');\n this._current_btn_label = this._current_btn.attr('title');\n // noinspection JSUnresolvedVariable\n this._current_btn.attr( 'aria-label', opts.regenerate ).attr( 'title', opts.regenerate );\n }\n }\n\n _unblock_button() {\n if ( this._all_btn.length ) {\n this._all_btn.removeClass('disabled');\n }\n if ( this._current_btn.length ) {\n this._current_btn.find('span').removeClass('wpf_spin');\n this._current_btn.find('span').removeClass('reverse_spin');\n this._current_btn.attr( 'aria-label', this._current_btn_label ).attr( 'title', this._current_btn_label );\n }\n }\n\n /**\n * Generate Feed\n * @return void\n */\n generate() {\n let self = this;\n window.isRegenerating = true;\n this._block_button();\n this._resetProgressBar();\n this._progressBarActive();\n this._log( 'Counting Total Products' );\n this._updateProgressStatus( 'Fetching products.' );\n this._get_product_ids().then( response => {\n this._progress = 10;\n self._log( {response} );\n if(response.success) {\n self._log( `Total ${response.total} Products found.` );\n self._product_ids = response.product;\n self._total_batch = this._product_ids.length;\n self._current_batch = 0;\n self._progress_per_batch = ( 90 - this._progress ) / this._total_batch;\n self._process_batch();\n self._updateProgressStatus( 'Processing Products...' );\n } else {\n self._updateProgressStatus( response.data.message );\n }\n }).fail( error => {\n self._log( error );\n self._updateProgressStatus( error.message );\n self._color = 'red';\n setTimeout( function(){\n self._stopProgressBar();\n self._unblock_button();\n }, 1500 );\n } );\n }\n\n /**\n * Get Product Ids\n * @returns {$.promise}\n * @private\n */\n _get_product_ids() {\n this._progress = 5;\n return wpAjax.post( 'get_product_information', {\n _ajax_nonce: opts.nonce,\n feed: this._feed,\n limit: this._limit,\n } );\n }\n\n /**\n * Run the Batch\n * @private\n */\n _process_batch() {\n let self = this;\n let status = `Processing Batch ${this._current_batch+1} of ${this._total_batch}`;\n this._updateProgressStatus( status );\n this._log( status );\n wpAjax.post( 'make_batch_feed', {\n _ajax_nonce: opts.nonce,\n feed: this._feed,\n products: this._product_ids[this._current_batch],\n loop: this._current_batch,\n } ).then( response => {\n self._current_batch++;\n self._log( `Batch ${self._current_batch} Completed` );\n self._log( response );\n if ( self._current_batch < self._total_batch ) {\n self._process_batch();\n self._progress += self._progress_per_batch;\n }\n if ( self._current_batch === self._total_batch ) {\n self._save_feed_file();\n }\n } ).fail( error => {\n self._log( error );\n self._updateProgressStatus( error.message );\n self._color = 'red';\n setTimeout( function(){\n self._stopProgressBar();\n self._unblock_button();\n }, 1500 );\n } );\n }\n\n /**\n * Save Feed Data from temp to feed file\n * @private\n */\n _save_feed_file() {\n let self = this;\n this._log( 'Saving feed file' );\n this._updateProgressStatus( 'Saving feed file' );\n wpAjax.post( 'save_feed_file', {\n _ajax_nonce: opts.nonce,\n feed: this._feed,\n } ).then( response => {\n self._log( response );\n self._progress = 100;\n if ( self._refresh ) {\n window.location.href = `${opts.pages.list.feed}&link=${response.url}&cat=${response.cat}`;\n }\n setTimeout( function(){\n self._stopProgressBar();\n setTimeout( function(){\n self._resetProgressBar( true );\n self._unblock_button();\n }, 3000 );\n }, 2500 );\n } ).fail( error => {\n self._log( error );\n self._updateProgressStatus( error.message );\n self._color = 'red';\n setTimeout( function(){\n self._stopProgressBar();\n self._unblock_button();\n }, 1500 );\n } );\n }\n\n /**\n * Console log wrapper with debug settings.\n * @param data\n * @returns {feedGenerator}\n * @private\n */\n _log( data ) {\n // noinspection JSUnresolvedVariable\n if ( opts.wpf_debug ) {\n console.log( data );\n }\n return this;\n }\n\n /**\n * Run the progressbar refresh interval\n * @param {int} refreshInterval\n * @returns {feedGenerator}\n * @private\n */\n _progressBarActive( refreshInterval = 0 ) {\n let self = this;\n this._toggleProgressBar( true );\n this._timer = setInterval( function(){\n self._updateProgressBar();\n }, refreshInterval || 1000 );\n return this;\n }\n\n /**\n * Stop Progressbar\n * @returns {feedGenerator}\n * @private\n */\n _stopProgressBar() {\n clearInterval( this._timer );\n return this;\n }\n\n /**\n * Reset Progressbar\n * @returns {feedGenerator}\n * @private\n */\n _resetProgressBar( update ) {\n this._toggleProgressBar( false );\n this._updateProgressStatus( '' );\n clearInterval( this._timer );\n this._color = false;\n this._timer = null;\n this._progress = 0;\n if ( update ) {\n this._updateProgressBar();\n }\n return this;\n }\n\n /**\n * Show hide the progress bar el\n * @param status\n * @returns {feedGenerator}\n * @private\n */\n _toggleProgressBar( status ) {\n let table = $('#feed_progress_table');\n if ( status ) {\n table.show();\n } else {\n table.hide();\n }\n return this;\n }\n\n /**\n * Update Progress bar text status\n * @param {string} status\n * @returns {feedGenerator}\n * @private\n */\n _updateProgressStatus( status ) {\n $( '.feed-progress-status' ).html( status );\n return this;\n }\n\n _getErrorMessageByCode( error ){\n let progress_message = $( '.feed-progress-status' );\n progress_message.css( {'color':this._color});\n $( '.feed-progress-percentage' ).css( {'color':this._color});\n $( '.wpf_spin' ).css( {'color':this._color});\n\n let message=error.status +' : '+ error.statusText+'. ';\n if(500===error.status){\n message+= \"Please increase your PHP max_execution_time. Please <a target='_blank' href='https://webappick.com/docs/woo-feed/faq-for-woocommerce-product-feed/how-to-solve-processing-10-feed-generation-stuck-error/'>read this doc</a>.\";\n }\n\n this._updateProgressStatus(message);\n\n }\n\n /**\n * Update Progress Data\n * hooked with setInterval\n * @private\n */\n _updateProgressBar() {\n let percentage = $( '.feed-progress-percentage' ),\n bar = $( '.feed-progress-bar-fill' ),\n _progress = `${Math.round( this._progress )}%`;\n bar.css( {\n width: _progress,\n } );\n percentage.text( _progress );\n }\n }\n // expose to the global scope\n window.wf = {\n helper: helper,\n feedEditor: feedEditor,\n generator: feedGenerator,\n };\n\n $(window).on('load', function() {\n // Template loading ui conflict\n if ($(location).attr(\"href\").match(/webappick.*feed/g) !== null) {\n $('#wpbody-content').addClass('woofeed-body-content');\n }\n\n // ClipBoardJS\n clip();\n // postbox toggle\n postboxes.add_postbox_toggles(pagenow);\n // initialize generator\n let generator = new feedGenerator();\n generator.init();\n // noinspection JSUnresolvedVariable\n if( '' !== opts.generator.feed && opts.generator.regenerate ) {\n\n }\n // initialize editor\n feedEditor.init();\n helper.common(); // Generate Feed Add Table Row\n tooltip();\n // validate feed editor\n $(\".generateFeed\").validate();\n\n // document events\n $(document)\n .on('blur', 'input[name=\"wfDAttributeName\"]', function(e) {\n e.preventDefault();\n let attr_name = $(this).val();\n attr_name = attr_name.toLowerCase();\n attr_name = attr_name.split(' ').join('_');\n\n $('#wfDAttributeCode').val(attr_name);\n\n })\n .on('click', '[data-toggle_slide]', function(e) {\n e.preventDefault();\n $($(this).data('toggle_slide')).slideToggle('fast');\n })\n // XML Feed Wrapper\n .on('click', '#wf_newRow', function () {\n let tbody = $('#table-1 tbody'),\n template = $('#feed_config_template').text().trim().replace(/__idx__/g, tbody.find('tr').length);\n tbody.append(template);\n helper.fancySelect($('.outputType'));\n })\n // feed delete alert.\n .on('click', '.single-feed-delete', function (event) {\n event.preventDefault();\n // noinspection JSUnresolvedVariable\n if (confirm(opts.form.del_confirm)) {\n window.location.href = $(this).attr('val');\n }\n })\n // clear cache data.\n .on('click', '.wf_clean_cache_wrapper', function(event) {\n event.preventDefault();\n var nonce = $('.woo-feed-clean-cache-nonce').val();\n var loader = $('.woo-feed-cache-loader');\n\n //show loader\n loader.show();\n\n // passed cache nonce\n wpAjax.post('clear_cache_data', {\n _ajax_clean_nonce: nonce\n }).then(function (response) {\n if( response.success ) {\n loader.hide(); //hide loader\n location.reload();\n }\n }).fail(function () {\n console.log('something wrong');\n });\n\n })// Copy Status\n .on('click', '#woo-feed-copy-status-btn', function(event) {\n event.preventDefault();\n let button = $('#woo-feed-copy-status-btn');\n let status_area = $('#woo-feed-status-area');\n button.val('Copied');\n status_area.css('visibility','visible');\n status_area.select();\n\n document.execCommand('copy');\n })\n // feed value dropdown change.\n .on('change', '.wf_attr.wf_attributes', function(event) {\n event.preventDefault();\n\n $('.fancy-picker-picked').trigger(\"click\"); // trigger fancy select box clicked\n\n // price attributes\n var price_attributes = ['price', 'current_price', 'sale_price', 'price_with_tax', 'current_price_with_tax', 'sale_price_with_tax', 'shipping_cost'];\n // current value\n var current_attribute_value = $(this).val();\n var outputSelect = $(this).parents('tr').find('.outputType');\n var fancyOption = $(this).parents('tr').find('.fancy-picker-content .fancy-picker-option');\n var fancyDataPicker = $(this).parents('tr').find('.fancy-picker-data span');\n var selectIf, selectKey;\n var currency;\n\n // when any attribute is selected, pick the key\n if( price_attributes.includes(current_attribute_value) ) {\n // when select any price attribute\n selectIf = 'for_price';\n selectKey = \"Price\";\n } else if ( \"\" !== current_attribute_value && -1 !== current_attribute_value.indexOf('wf_taxo') ) {\n\n // when select any custom taxonomy\n selectIf = 'for_custom_taxo';\n selectKey = \"parent_if_empty\";\n } else {\n\n selectIf = 'for_all';\n selectKey = 'Default';\n }\n\n // remove selected class from old selected option\n fancyOption.removeClass('selected');\n\n // when value dropdown is selected as price or any custom taxonomy\n if( selectIf === 'for_custom_taxo' || selectIf === 'for_price' ) {\n // update \"Option Type\" when select key matches\n fancyOption.each(function() {\n if( selectKey === $(this).text() ) {\n $(this).addClass('selected');\n fancyDataPicker.text(selectKey);\n outputSelect.find(\"option\").text(selectKey);\n outputSelect.find(\"option\").val( $(this).data('value') );\n }\n });\n\n if( \"for_price\" === selectIf ) {\n var feedCurrency = $('#feedCurrency').val();\n if( \"undefined\" !== typeof feedCurrency && null !== feedCurrency ) {\n currency = feedCurrency;\n }else {\n currency = wpf_ajax_obj.woocommerce.currency;\n }\n\n //for price add currency to the suffix\n $(this).closest(\"tr\").find(\"td:eq(5) input\").val(\" \" + currency);\n }\n\n } else {\n fancyOption.each(function(){\n if( selectKey === $(this).text() ){\n $(this).addClass('selected');\n fancyDataPicker.text(selectKey);\n outputSelect.find(\"option\").text(selectKey);\n outputSelect.find(\"option\").val( $(this).data(\"value\") );\n }\n });\n\n $(this).closest(\"tr\").find(\"td:eq(5) input\").val(\"\");\n }\n\n })\n // bulk delete alert.\n .on('click', '#doaction, #doaction2', function () {\n // noinspection JSUnresolvedVariable\n return confirm(opts.form.del_confirm_multi);\n })\n // Generate Feed Table Row Delete\n .on('change', '.dType', function () {\n let self = $(this),\n type = self.val(),\n row = self.closest('tr');\n\n if (type === 'pattern') {\n row.find('.value_attribute').hide();\n row.find('.value_pattern').show();\n } else if (type === 'attribute') {\n row.find('.value_attribute').show();\n row.find('.value_pattern').hide();\n } else if (type === 'remove') {\n row.find('.value_attribute').hide();\n row.find('.value_pattern').hide();\n }\n })\n // Generate Feed Form Submit\n .on('click', '.delRow', function (e) {\n e.preventDefault();\n $(this).closest('tr').remove();\n helper.reindex_config_table();\n })\n .on('submit', '#generateFeed', function () {\n // Feed Generating form validation\n $(this).validate();\n\n if ($(this).valid()) {\n $(\".makeFeedResponse\")\n .show()\n .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\n }\n })\n // Generate Update Feed Form Submit\n .on('submit', '#updatefeed', function (e, data) {\n // Feed Generating form validation\n $(this).validate();\n\n if ($(this).valid()) {\n $(\".makeFeedResponse\")\n .show()\n .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\n }\n })\n .on( 'ready woo_feed_config_loaded', function(){\n\n if( $('#ftpenabled').val() === '0' ){\n $('.google-merchant-message').hide('slow');\n $('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').attr('disabled','disabled');\n } else {\n if( $('#provider').val() === 'google' ) {\n $('.google-merchant-message').show('slow');\n } else {\n $('.google-merchant-message').hide('slow');\n }\n $('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').removeAttr('disabled');\n }\n\n $('#ftpenabled').on('change', function(){\n if( $('#ftpenabled').val() === '0' ){\n $('.google-merchant-message').hide('slow');\n $('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').attr('disabled','disabled');\n } else {\n\n $('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').removeAttr('disabled');\n\n // Google merchant specific message\n if( $('#provider').val() === 'google' ){\n $('.google-merchant-message').show('slow');\n } else {\n $('.google-merchant-message').hide('slow');\n }\n\n }\n });\n })\n .on('change', '.ftporsftp', function () {\n let server = $(this).val(),\n status = $('.ssh2_status');\n\n if (server === 'sftp') {\n // noinspection JSUnresolvedVariable\n status.show().css('color', 'dodgerblue').text(opts.form.sftp_checking);\n wpAjax.post('get_ssh2_status', {\n _ajax_nonce: opts.nonce,\n server: server\n }).then(function (response) {\n if (response === 'exists') {\n // noinspection JSUnresolvedVariable\n status.css('color', '#2CC185').text(opts.form.sftp_available);\n setTimeout(function () {\n status.hide();\n }, 1500);\n } else {\n // noinspection JSUnresolvedVariable\n status.show().css('color', 'red').text(opts.form.sftp_warning);\n }\n }).fail(function (e) {\n status.hide();\n helper.ajax_fail(e);\n });\n } else {\n status.hide();\n }\n })\n .on('click', '[name=\"save_feed_config\"]', function (e) {\n e.preventDefault();\n $('#updatefeed').trigger('submit', {\n save: true\n });\n })\n .on('change', '#provider', function (event) {\n event.preventDefault();\n\n let merchant = $(this).val(),\n templateName = $(this).find(':selected').text(),\n name = $('#filename').val(),\n feedType = $(\"#feedType\"),\n feedForm = $(\"#providerPage\"),\n merchantInfo = $('#feed_merchant_info'); // set loading..\n\n // noinspection JSUnresolvedVariable\n feedForm.html('<h3><span style=\"float:none;margin: -3px 0 0;\" class=\"spinner is-active\"></span> ' + opts.form.loading_tmpl + '</h3>'); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html, WordPressVIPMinimum.JS.StringConcat.Found\n\n merchantInfo.find('.spinner').addClass('is-active');\n feedType.disabled(!0); // disable dropdown\n\n feedType.parent().find('.spinner').addClass('is-active');\n merchantInfo.find('.merchant-info-section .data').html(''); // remove previous data\n // Get Merchant info for selected Provider/Merchant\n\n if (merchantInfoCache.hasOwnProperty(merchant)) {\n feedEditor.renderMerchantInfo(merchantInfo, feedType, merchantInfoCache[merchant]);\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n } else {\n wpAjax.send('woo_feed_get_merchant_info', {\n type: 'GET',\n data: {\n nonce: opts.nonce,\n provider: merchant,\n templateName: templateName\n }\n }).then(function (r) {\n merchantInfoCache[merchant] = r;\n feedEditor.renderMerchantInfo(merchantInfo, feedType, r);\n }).then(function(){\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n }).fail(helper.ajax_fail);\n } // Get FeedForm For Selected Provider/Merchant\n\n\n if (merchantTemplateCache.hasOwnProperty(merchant)) {\n feedEditor.renderMerchantTemplate(feedForm, merchantTemplateCache[merchant]);\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n } else {\n wpAjax.post('get_feed_merchant', {\n _ajax_nonce: opts.nonce,\n merchant: merchant\n }).then(function (r) {\n merchantTemplateCache[merchant] = r;\n feedEditor.renderMerchantTemplate(feedForm, r);\n $('#utm_source').val(templateName);\n $('#utm_campaign').val(name);\n //when merchant is bing, change delimiter and enclosure\n if( 'bing' === merchant ) {\n //delimiter value\n $(\"#delimiter option\").removeAttr('selected');\n $(\"#delimiter option[value=\\\"tab\\\"]\").attr('selected', 'selected');\n\n //enclosure value\n $(\"#enclosure option\").removeAttr('selected');\n $(\"#enclosure option[value=\\\" \\\"]\").attr('selected', 'selected');\n }\n\n //reviewer options hide\n if( 'google_product_review' !== merchant) {\n $('.wf_attributes option[value=\"reviewer_name\"]').hide();\n }\n }).then(function(){\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n }).fail(helper.ajax_fail);\n }\n })\n // Feed Active and Inactive status change via ajax\n .on('change', '.woo_feed_status_input', function () {\n let self = $(this);\n wpAjax.post('update_feed_status', {\n _ajax_nonce: opts.nonce,\n feedName: self.val(),\n status: self[0].checked ? 1 : 0\n });\n });\n // event with trigger\n $(document)\n .on('change', '[name=\"is_outOfStock\"], [name=\"product_visibility\"]', function () {\n let outOfStockVisibilityRow = $('.out-of-stock-visibility');\n if ($('[name=\"is_outOfStock\"]:checked').val() === 'n' && $('[name=\"product_visibility\"]:checked').val() === '1') {\n outOfStockVisibilityRow.show();\n } else {\n outOfStockVisibilityRow.hide();\n }\n })\n .on('change', '.attr_type', function () {\n // Attribute type selection\n let self = $(this),\n type = self.val(),\n row = self.closest('tr');\n\n if (type === 'pattern') {\n row.find('.wf_attr').hide();\n row.find('.wf_attr').val('');\n row.find('.wf_default').show();\n } else {\n row.find('.wf_attr').show();\n row.find('.wf_default').hide();\n row.find('.wf_default').val('');\n }\n })\n .on('change', '.wf_mattributes, .attr_type', function () {\n let row = $(this).closest('tr'),\n attribute = row.find('.wf_mattributes'),\n type = row.find('.attr_type'),\n valueColumn = row.find('td:eq(4)'),\n provider = $('#provider').val();\n\n // noinspection JSUnresolvedVariable\n if (opts.form.google_category.hasOwnProperty(attribute.val()) && type.val() === 'pattern' && helper.in_array(provider, opts.form.google_category[attribute.val()])) {\n if (valueColumn.find('select.selectize').length === 0) {\n valueColumn.find('input.wf_default').remove();\n valueColumn.append('<span class=\"wf_default wf_attributes\"><select name=\"default[]\" class=\"selectize\"></select></span>');\n // noinspection JSUnresolvedVariable\n valueColumn.append(`<span style=\"font-size:x-small;\"><a style=\"color: red\" href=\"https://webappick.com/docs/woo-feed/feed-configuration/how-to-map-store-category-with-merchant-category/\" target=\"_blank\">${opts.learn_more}</a></span>`);\n\n if (!googleCategories || !facebookCategories) {\n valueColumn.append('<span class=\"spinner is-active\" style=\"margin: 0;\"></span>');\n }\n\n let select = valueColumn.find('.wf_attributes select');\n // noinspection JSUnresolvedVariable\n helper.selectize(select, {\n preload: true,\n placeholder: opts.form.select_category,\n load: function load(query, cb) {\n if (!googleCategories) {\n wpAjax.send('get_google_categories', {\n type: 'GET',\n data: {\n _ajax_nonce: opts.nonce,\n action: \"get_google_categories\",\n provider: provider\n }\n }).then(function (r) {\n googleCategories = r;\n cb(googleCategories);\n valueColumn.find('.spinner').remove();\n }).fail(helper.ajax_fail);\n } else {\n cb(googleCategories);\n }\n\n //for facebook product category merchant attribute\n if (!facebookCategories && \"facebook\" === provider && \"fb_product_category\" === attribute.val()) {\n wpAjax.send('get_facebook_categories', {\n type: 'GET',\n data: {\n _ajax_nonce: opts.nonce,\n action: \"get_facebook_categories\",\n provider: provider\n }\n }).then(function (r) {\n facebookCategories = r;\n cb(facebookCategories);\n valueColumn.find('.spinner').remove();\n }).fail(helper.ajax_fail);\n } else {\n cb(facebookCategories);\n }\n }\n });\n }\n } else {\n if ( attribute.val() !== 'current_category' && valueColumn.find('input.wf_default').length === 0) {\n valueColumn.find('span').remove();\n valueColumn.append('<input autocomplete=\"off\" class=\"wf_default wf_attributes\" type=\"text\" name=\"default[]\" value=\"\">');\n\n if (type.val() !== 'pattern') {\n valueColumn.find('input.wf_default').hide();\n }\n }\n }\n })\n .on('change', '#feedType,#provider', function (e) {\n let type = $('#feedType').val(),\n provider = $('#provider').val(),\n itemWrapper = $('.itemWrapper'),\n wf_csv_txt = $('.wf_csvtxt');\n\n // noinspection JSUnresolvedVariable\n if (type !== '' && helper.in_array(provider, opts.form.item_wrapper_hidden)) {\n itemWrapper.hide();\n }\n\n //when feed type is changed\n if( 'feedType' === e.target.id ) {\n if (type === 'csv' || type === 'txt' || type === 'tsv') {\n wf_csv_txt.show();\n itemWrapper.hide();\n \n if( 'tsv' === type ) {\n $('#delimiter option:last').prop(\"selected\", \"selected\");\n } else if( 'csv' === type ) {\n $('#delimiter option:first').prop(\"selected\", \"selected\");\n }\n } else if( 'xml' === type && \"custom\" === provider ) {\n itemWrapper.show();\n wf_csv_txt.hide();\n } else if( 'json' === type ) {\n wf_csv_txt.hide();\n }\n }\n\n // when template is not custom template 1 hide the item wrapper\n if( \"custom\" !== provider ) {\n itemWrapper.hide();\n }\n\n })\n .trigger('change');\n\n\n $(document)\n\t\t\t.on('click', '.woofeed-custom-fields [id*=\"-switcher\"]', function () {\n\t\t\t $(this).closest('td').find('.switch-loader').show();\n\t\t\t\tlet field = $(this).attr( 'id' ).split( '-' )[0],\n\t\t\t\t\tisTaxonomy = $(this).data( 'taxonomy' ),\n\t\t\t\t\tstatus = $(this).prop( 'checked' );\n\t\t\t\tnew WooFeedCustomFields( field, status, isTaxonomy );\n\n\t\t\t})\n\n\t\t\t// Remove sticky cart on feature page\n\t\t\t.ready(function() {\n\t\t\t\tvar s = $(\".wapk-feed-buy-now-container\");\n\t\t\t\t$(window).scroll(function() {\n\t\t\t\t\tvar windowpos = $(window).scrollTop();\n\t\t\t\t\tif ( windowpos <= 5000 ) {\n\t\t\t\t\t\ts.addClass(\"fixed\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts.removeClass(\"fixed\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n });\n\n $(document)\n\t\t.on('click', '#woo-feed-debug-log-download', function (e) {\n\t\t\te.preventDefault();\n\t\t\t$(\"<a />\", {\n\t\t\t\tdownload: new Date() + \".log\",\n\t\t\t\thref: URL.createObjectURL(\n\t\t\t\t\tnew Blob([$(\"#woo-feed-debug-log\").val()], {\n\t\t\t\t\t\ttype: \"text/plain\"\n\t\t\t\t\t})),\n\t\t\t}).appendTo(\"body\")[0].click();\n\t\t})\n\t\t.on('keyup', '#filename', function() {\n\t\t\tvar name = $('#filename').val();\n\t\t\t$('#utm_campaign').val(name);\n\t\t})\n\n .on('click', '.wf-tab-name', function(e) {\n $('.wf-tab-name.activate').removeClass('activate');\n $(this).addClass('activate');\n\n let for_attr = $(this).attr('for');\n $('.wf_tabs li.active').removeClass('active');\n $('.wf_tabs .wf-tab-content#' + for_attr).parent().addClass('active');\n })\n\n\t\t.on('change', '#category-mapping-form #providers', function() {\n\t\t\tvar provider = $(this).find(':selected').val(),\n\t\t\t\tgoogleMap = ['google', 'facebook', 'pinterest', 'bing', 'bing_local_inventory', 'snapchat'];\n\t\t\tif( googleMap.indexOf(provider) !== -1 ) {\n\t\t\t\t$('input[id*=\"cat_mapping_\"]').css('display', 'none');\n\t\t\t\t$('.wf_default.wf_attributes').css('display', 'block').css('width', '100%');\n\n var cat_init = new WooFeedMapCategories();\n if( \"facebook\" === provider ) {\n cat_init.wooFeed_get_facebook_categories();\n }\n\n } else {\n\t\t\t\t$('input[id*=\"cat_mapping_\"]').css('display', 'block');\n\t\t\t\t$('.wf_default.wf_attributes').css('display', 'none').css('width', '100%');\n\t\t\t}\n\t\t})\n\n // Copy parent category ids to child categories.\n\t\t.on('click', 'span[id*=\"cat-map-\"]', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar providerName = $('#category-mapping-form #providers').val(),\n\t\t\t\tgoogleMap = ['google', 'facebook', 'pinterest', 'bing', 'bing_local_inventory', 'snapchat'],\n\t\t\t\tcatId = $(this).attr('id').replace(/[^\\d.]/g, ''),\n\t\t\t\tgroupId = 'group-child-' + catId;\n\n\t\t\tif( googleMap.indexOf(providerName) !== -1) {\n\t\t\t\tvar catField = $(this).parents('tr').find('.selectized').val();\n\n\t\t\t\tif (catField) {\n\t\t\t\t\t$('.' + groupId).parents('tr').find('select').each(function (i, v) {\n\t\t\t\t\t\t$(v).data('selectize').setValue(catField);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tvar value = $('#cat_mapping_'+catId).val();\n\t\t\t\t$('.'+groupId).parents('tr').find('input').val(value);\n\t\t\t}\n\n\t\t});\n\n $(document).ready(function () {\n var provider = $(\"#providers\").val();\n var cat_init = new WooFeedMapCategories();\n\n if( \"facebook\" === provider ) {\n cat_init.wooFeed_get_facebook_categories();\n } else {\n cat_init.wooFeed_get_google_categories();\n }\n\n });\n\n /*\n * Issue fix for feed edit page unsupported `Feed Type` not disabling\n *\n * @since 4.4.22\n * */\n $(document).on( \"feed_editor_init\", function(){\n\n let types = $('.merchant-info-section.feed_file_type .data').html().split(\",\").map(function(t) {\n return t.trim().toLowerCase();\n });\n\n let feedType = $(\"#feedType\");\n\n if (types.length) {\n feedType.find('option').each(function() {\n let opt = $(this);\n opt.val() && !helper.in_array(opt.val(), types) ? opt.disabled(!0) : opt.disabled(!1);\n });\n if (types.length === 1) feedType.find('option[value=\"' + types[0] + '\"]').attr('selected', 'selected');\n } else feedType.find('option').disabled(!1);\n\n } );\n\n /**\n * Automatically adding postfix for corresponding attribute selection.\n *\n * @since 4.4.32\n */\n $(document).on('ready', function(){\n\n function update_postfix(){\n var attribute_list = {\n\n 'price': wpf_ajax_obj.woocommerce.currency,\n 'current_price': wpf_ajax_obj.woocommerce.currency,\n 'sale_price': wpf_ajax_obj.woocommerce.currency,\n 'price_with_tax': wpf_ajax_obj.woocommerce.currency,\n 'current_price_with_tax': wpf_ajax_obj.woocommerce.currency,\n 'sale_price_with_tax': wpf_ajax_obj.woocommerce.currency,\n\n\n 'weight': wpf_ajax_obj.woocommerce.weight,\n 'weight_unit': wpf_ajax_obj.woocommerce.weight,\n\n\n 'height': wpf_ajax_obj.woocommerce.dimension,\n 'length': wpf_ajax_obj.woocommerce.dimension,\n 'width': wpf_ajax_obj.woocommerce.dimension\n\n };\n\n if (typeof wpf_ajax_obj.feed_rules !== 'undefined' && wpf_ajax_obj.feed_rules !== null) {\n var feed_rules = wpf_ajax_obj.feed_rules;\n var current_feed_currency = feed_rules.feedCurrency;\n }\n\n //get current action name of the page\n var queryString = window.location.search;\n var urlParams = new URLSearchParams(queryString);\n var action = urlParams.get('action');\n\n $( '.wf_attr.wf_attributes' ).each( function( key, value){\n\n var attribute_value = $(value).val();\n var current_Value = $( 'input[name^=\"suffix\"]' ).eq( parseInt( key ) ).val();\n\n if( -1 !== $.inArray( current_Value, [\n ' ' + wpf_ajax_obj.woocommerce.currency,\n ' ' + wpf_ajax_obj.woocommerce.weight,\n ' ' + wpf_ajax_obj.woocommerce.dimension\n ] ) ){\n $( 'input[name^=\"suffix\"]' ).eq( parseInt( key ) ).val('');\n }\n\n $.each(attribute_list, function (_key, _value){\n if( attribute_value === _key ){\n _value = null !== current_feed_currency && \"undefined\" !== typeof current_feed_currency ? current_feed_currency : _value;\n\n if( \"undefined\" !== action && \"edit-feed\" !== action ) {\n $( 'input[name^=\"suffix\"]' ).eq( parseInt( key ) ).val( ' ' + _value );\n } else {\n $( 'input[name^=\"suffix\"]' ).eq( parseInt( key ) ).val( current_Value );\n }\n\n }\n });\n } );\n\n $(document).trigger( 'feedEditor.after.free.postfix.update' );\n }\n\n $(document).on('feedEditor.init', function(){\n update_postfix();\n });\n\n });\n\n})(jQuery, window, document, wp.ajax, wpf_ajax_obj);\n"]}
1
+ {"version":3,"sources":["woo-feed-admin.js"],"names":["_defineProperties","target","props","descriptor","i","enumerable","configurable","writable","Object","defineProperty","key","_createClass","Constructor","protoProps","staticProps","prototype","window","wpAjax","$","document","opts","self","prop","status","addClass","removeClass","hasClass","currentTarget","clearTooltip","userAgent","actionMsg","match","actionKey","index","join","removeAttr","elem","attr","msg","extend","_default","_args","option","ClipboardJS","isSupported","test","navigator","$copyBtn","feedGenerator","this","on","event","action","_loop","ajax_fail","alert","url","data","_classCallCheck","WooFeedCustomFields","productCustomFields","field","isTaxonomy","value","ajax","nonce","method","response","wpf_ajax_obj","wpf_ajax_url","success","_this","cacheClear","closest","find","hide","selectize","WooFeedMapCategories","options","render","send","type","item","_ajax_nonce","valueField","helper","labelField","placeholder","searchField","escape","concat","text","remove","googleCategories","fail","onDrop","column_count","containerSelector","e","hasOwnProperty","error","statusText","sortable","column","each","_super","length","wf_sortable","itemPath","handle","el","$item","container","create","group","draggedClass","plugins","bodyClass","numb","needle","replace","_onDrop","selectize_render_item","config","not","fancySelect","split","map","s","trim","reindex_config_table","itemSelector","common","init","renderMerchantInfo","form","k","opt","merchantInfo","feedType","r","types","html","t","toLowerCase","na","disabled","trigger","val","in_array","_loop2","contentSettings","feedForm","feedEditor","is","merchantInfoCache","tooltip","css","top","merchantTemplateCache","title","_feed","_current_btn","feed","_limit","generator","limit","_color","_product_ids","_progress_per_batch","_refresh","isRegenerating","_all_btn","generate","clip","clipboard","showTooltip","condition","then","URLSearchParams","preventDefault","parent","_progress","_log","_total_batch","_regenerate","regenerate","page_name","_block_button","_current_btn_label","post","_updateProgressStatus","message","product","_this2","_process_batch","setTimeout","_stopProgressBar","_current_batch","_save_feed_file","loop","_unblock_button","_resetProgressBar","console","refreshInterval","arguments","undefined","products","clearInterval","_timer","setInterval","_toggleProgressBar","table","show","color","width","wf","pagenow","attr_name","hover","appendTo","left","pageX","confirm","href","slideToggle","loader","_updateProgressBar","location","reload","button","status_area","select","execCommand","current_attribute_value","fancyOption","fancyDataPicker","selectIf","currency","price_attributes","selectKey","parents","includes","indexOf","outputSelect","feedCurrency","woocommerce","del_confirm_multi","row","validate","template","_ajax_clean_nonce","valid","save","server","sftp_checking","sftp_available","merchant","sftp_warning","name","templateName","loading_tmpl","provider","renderMerchantTemplate","checked","valueColumn","attribute","preload","google_category","query","learn_more","append","cb","facebookCategories","outOfStockVisibilityRow","wf_csv_txt","itemWrapper","item_wrapper_hidden","id","ready","windowpos","load","download","URL","scrollTop","googleMap","Date","click","cat_init","wooFeed_get_facebook_categories","wooFeed_get_google_categories","for_attr","prepend","setValue","catField","catId","groupId","searchParams","v","get","attribute_list","current_feed_currency","price_with_tax","current_price_with_tax","queryString","sale_price_with_tax","urlParams","weight","weight_unit","attribute_value","current_Value","dimension","search","eq","parseInt","inArray","_key","_value"],"mappings":"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","file":"woo-feed-admin.min.js","sourcesContent":["// noinspection JSUnresolvedletiable\n/**!\n * WooFeed Scripts\n * @version 3.3.6\n * @package WooFeed\n * @copyright 2020 WebAppick\n *\n */\n/* global ajaxurl, wpAjax, postboxes, pagenow, alert, deleteUserSetting, typenow, adminpage, thousandsSeparator, decimalPoint, isRtl */\n// noinspection JSUnresolvedVariable\n(function($, window, document, wpAjax, opts) {\n \"use strict\";\n /**\n * All of the code for your admin-facing JavaScript source\n * should reside in this file.\n *\n * Note: It has been assumed you will write jQuery code here, so the\n * $ function reference has been prepared for usage within the scope\n * of this function.\n *\n * This enables you to define handlers, for when the DOM is ready:\n */\n\n /**\n * disable element utility\n *\n * @since 3.1.9\n *\n * @param {*} status\n * @returns {$|HTMLElement}\n */\n $.fn.disabled = function(status) {\n $(this).each(function() {\n let self = $(this),\n prop = 'disabled';\n\n if (typeof self.prop(prop) !== 'undefined') {\n self.prop(prop, status === void 0 || status === true);\n } else {\n !0 === status ? self.addClass(prop) : self.removeClass(prop);\n }\n });\n return self; // method chaining\n };\n\n /**\n * Check if a HTMLElement or jQuery is disabled\n */\n $.fn.isDisabled = function() {\n let self = $(this),\n prop = 'disabled';\n return typeof self.prop(prop) !== 'undefined' ? self.prop(prop) : self.hasClass(prop);\n };\n\n /**\n * Clear Tooltip for clip board js\n * @param {Object} event\n */\n const clearTooltip = (event) => {\n $(event.currentTarget).removeClass( (index, className) => (className.match(/\\btooltipped-\\S+/g) || []).join(' ') ).removeClass('tooltipped').removeAttr('aria-label');\n };\n\n const showTooltip = (elem, msg) => {\n $(elem).addClass('tooltipped tooltipped-s').attr('aria-label', msg);\n };\n\n const fallbackMessage = (action) =>{\n let actionMsg,\n actionKey = action === 'cut' ? 'X' : 'C';\n\n if (/iPhone|iPad/i.test(navigator.userAgent)) {\n actionMsg = 'No support :(';\n } else if (/Mac/i.test(navigator.userAgent)) {\n actionMsg = 'Press ⌘-' + actionKey + ' to ' + action;\n } else {\n actionMsg = 'Press Ctrl-' + actionKey + ' to ' + action;\n }\n\n return actionMsg;\n };\n\n /**\n * Alias of jQuery.extend()\n * @param {Object} _default\n * @param {Object} _args\n */\n const extend = (_default, _args) => $.extend(true, {}, _default, _args);\n\n\t/*\n\t* Handles product attributes\n\t*\n\t* @since 4.4.18\n\t* */\n\tclass WooFeedCustomFields {\n\n\t\tconstructor( field, status, isTaxonomy ) {\n\t\t\tthis.productCustomFields( field, status, isTaxonomy );\n\t\t}\n\n\t\tcacheClear() {\n\t\t\tlet data = {\n\t\t\t\taction: 'woo_feed_product_attribute_cache_remove',\n\t\t\t\tnonce: wpf_ajax_obj.ajax.nonce,\n\t\t\t};\n\t\t\t$.ajax({\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: wpf_ajax_obj.wpf_ajax_url,\n\t\t\t\tdata\n\t\t\t});\n\t\t}\n\n\t\tproductCustomFields( field, status = false, isTaxonomy ) {\n\t\t\tlet data = {\n\t\t\t\taction: 'woo_feed_custom_fields_status_change',\n\t\t\t\tnonce: wpf_ajax_obj.ajax.nonce,\n\t\t\t\tfield,\n\t\t\t\tstatus,\n\t\t\t\tisTaxonomy\n\t\t\t};\n\t\t\t$.ajax({\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: wpf_ajax_obj.wpf_ajax_url,\n\t\t\t\tdata,\n\t\t\t\tsuccess: ( response ) => {\n\t\t\t\t\tif( response.success ) {\n\t\t\t\t\t\tthis.cacheClear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log( response );\n\t\t\t\t\t}\n $('#'+field+'-switcher').closest('td').find('.switch-loader').hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n /*\n * Handles product categories\n *\n * @since 4.4.39\n * */\n class WooFeedMapCategories {\n wooFeed_get_google_categories () {\n wpAjax.send('get_google_categories', {\n type: 'GET',\n data: {\n _ajax_nonce: opts.nonce,\n action: \"get_google_categories\",\n // provider: provider\n }\n }).then(function (response) {\n $('.selectize-google-category').selectize({\n valueField: 'value',\n labelField: 'text',\n placeholder: 'Select a category',\n searchField: ['value', 'text'],\n options: response,\n render: {\n option: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.value + ' - ' + data.text)}</div>`,\n item: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.value + ' - ' + data.text)}</div>`\n }\n });\n\n //remove spinner element\n $('.woo-feed-cat-map-spinner').remove();\n }).fail(helper.ajax_fail);\n }\n\n wooFeed_get_facebook_categories() {\n // get facebook categories\n wpAjax.send('get_facebook_categories', {\n type: 'GET',\n data: {\n _ajax_nonce: opts.nonce,\n action: \"get_facebook_categories\",\n // provider: provider\n }\n }).then(function (response) {\n $('.selectize-google-category').selectize({\n valueField: 'value',\n labelField: 'text',\n placeholder: 'Select a Facebook category',\n searchField: ['value', 'text'],\n options: response,\n render: {\n option: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.value + ' - ' + data.text)}</div>`,\n item: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.value + ' - ' + data.text)}</div>`\n }\n });\n\n //remove spinner element\n $('.woo-feed-cat-map-spinner').remove();\n }).fail(helper.ajax_fail);\n }\n }\n\n let $copyBtn,\n clipboard,\n googleCategories,\n facebookCategories,\n helper = {\n in_array: (needle, haystack) => {\n try {\n return haystack.indexOf(needle) !== -1;\n } catch (e) {\n return false;\n }\n },\n selectize_render_item: (data, escape) => `<div class=\"item wapk-selectize-item\">${escape(data.text)}</div>`, // phpcs:ignore WordPressVIPMinimum.JS.StringConcat.Found,\n ajax_fail: e => {\n console.warn(e);\n alert(e.hasOwnProperty('statusText') && e.hasOwnProperty('status') ? opts.ajax.error + '\\n' + e.statusText + ' (' + e.status + ')' : e);\n },\n /**\n * Initialize Sortable\n * @param {$|HTMLElement} el\n * @param {object} config\n * @param {int|boolean} column\n * @param {function} onDrop\n * @return {$|HTMLElement}\n */\n sortable: (el, config, column, onDrop) => {\n return (el || $('.sorted_table')).each(function() {\n let self = $(this),\n column_count = self.find('tbody > tr:eq(0) > td').length || column || 9;\n self.wf_sortable(extend({\n containerSelector: 'table',\n itemPath: '> tbody',\n itemSelector: 'tr',\n handle: 'i.wf_sortedtable',\n placeholder: `<tr class=\"placeholder\"><td colspan=\"${column_count}\"></td></tr>`,\n onDrop: ($item, container, _super, event) => {\n $item.removeClass(container.group.options.draggedClass).removeAttr('style');\n $(\"body\").removeClass(container.group.options.bodyClass);\n var numb = $item.find(\".wf_mattributes\").attr(\"name\").replace(/\\D/g, \"\");\n $item.find(\"input.wf_attributes\").attr(\"name\", \"default[\"+ numb +\"]\");\n if ( onDrop && 'function' === typeof( onDrop ) ) {\n onDrop( $item, container, _super, event );\n }\n },\n }, config));\n });\n },\n selectize: (el, config) => {\n return (el || $('select.selectize')).not('.selectized').not('.selectize-google-category').each(function() {\n let self = $(this);\n self.selectize(extend({\n create: self.data('create') || false,\n plugins: self.data('plugins') ? self.data('plugins').split(',').map(function(s) {\n return s.trim();\n }) : [],\n //['remove_button'],\n render: {\n item: helper.selectize_render_item\n }\n }, config));\n });\n },\n fancySelect: (el, config) => {\n return (el || $('select.fancySelect')).not('.FancySelectInit').each(function() {\n let self = $(this);\n self.fancySelect(extend({\n maxItemShow: 3\n }, config));\n });\n },\n reindex_config_table: () => {\n $('#table-1').find('tbody tr').each( ( x, el ) => {\n $(el).find('[name]').each( ( x1, el ) => {\n $(el).attr('name', $(el).attr('name').replace(/(\\[\\d\\])/g, `[${x}]`));\n } );\n } );\n },\n common: () => {\n helper.sortable( $('.sorted_table'), {}, 9, helper.reindex_config_table );\n helper.selectize();\n helper.fancySelect($('.outputType'));\n }\n },\n // helper functions\n feedEditor = {\n /**\n * The Editor Form Elem.\n * @type {$|HTMLElement}\n */\n form: null,\n\n /**\n * Initialize The Feed Editor {Tabs...}\n * @returns {void}\n */\n init: function () {\n let self = this;\n self.form = $('.generateFeed');\n if (!self.form.length) return;\n helper.common();\n // noinspection JSUnresolvedVariable\n $(document).trigger('feed_editor_init');\n $(document).trigger(new jQuery.Event('feedEditor.init', {\n target: this.form\n }));\n },\n\n /**\n * Render Merchant info ajax response and handle allowed feed type for selected merchant\n * @param {$|HTMLElement} merchantInfo jQuery dom object\n * @param {$|HTMLElement} feedType jQuery dom object\n * @param {Object} r ajax response object\n */\n renderMerchantInfo: function (merchantInfo, feedType, r) {\n for (let k in r) {\n if (r.hasOwnProperty(k)) {\n merchantInfo.find('.merchant-info-section.' + k + ' .data').html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html\n\n if ('feed_file_type' === k) {\n (function() {\n let types = r[k].split(\",\").map(function(t) {\n return t.trim().toLowerCase();\n }).filter(function(t) {\n // noinspection JSUnresolvedVariable\n return t !== '' && t !== opts.na.toLowerCase();\n });\n\n if (types.length) {\n feedType.find('option').removeAttr('selected').each(function() {\n let opt = $(this);\n opt.val() && !helper.in_array(opt.val(), types) ? opt.disabled(!0) : opt.disabled(!1);\n });\n if (types.length === 1) feedType.find('option[value=\"' + types[0] + '\"]').attr('selected', 'selected');\n } else feedType.find('option').disabled(!1);\n })();\n }\n }\n }\n\n merchantInfo.find('.spinner').removeClass('is-active');\n feedType.disabled(!1);\n feedType.trigger('change');\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n feedType.parent().find('.spinner').removeClass('is-active');\n },\n\n /**\n * Render Feed Template Tabs and settings while creating new feed.\n * @param {$|HTMLElement} feedForm feed from query dom object\n * @param {object} r merchant template ajax response object\n */\n renderMerchantTemplate: function (feedForm, r) {\n let _loop = function _loop(k) {\n if (r.hasOwnProperty(k)) {\n if ('tabs' === k) {\n // noinspection JSUnresolvedFunction\n feedForm.html(r[k]); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html\n } else {\n let contentSettings = $('[name=\"' + k + '\"]');\n\n if (contentSettings.length) {\n contentSettings.each(function() {\n let elem = $(this);\n\n if (elem.is('select')) {\n elem.find('[value=\"' + r[k] + '\"]').prop('selected', true);\n } else if ((elem.is('[type=checkbox]') || elem.is('[type=radio]')) && elem.val() === r[k]) {\n elem.prop('checked', true);\n } else {\n elem.val(r[k]); // type=text\n }\n }).trigger('change');\n }\n }\n }\n };\n\n for (let k in r) {\n _loop(k);\n }\n\n feedEditor.init();\n }\n },\n // Feed Editor Table\n merchantInfoCache = [],\n merchantTemplateCache = [],\n tooltip = () => {\n // Tooltip only Text\n $('.wfmasterTooltip')\n .hover(function () {\n // Hover over code\n let self = $(this), title = self.attr('wftitle');\n self.data('tipText', title).removeAttr('wftitle');\n $('<p class=\"wftooltip\"></p>').text(title).appendTo('body').fadeIn('slow');\n }, function () {\n // Hover out code\n let self = $(this);\n self.attr('wftitle', self.data('tipText'));\n $('.wftooltip').remove();\n })\n .mousemove(function (e) {\n $('.wftooltip').css({\n top: e.pageY + 10,\n left: e.pageX + 20\n });\n });\n },\n clip = () => {\n $copyBtn = $('.toClipboard');\n if (!ClipboardJS.isSupported() || /iPhone|iPad/i.test(navigator.userAgent)) {\n $copyBtn.find('img').hide(0);\n } else {\n $copyBtn.each(function() {\n $(this).on('mouseleave', clearTooltip).on('blur', clearTooltip);\n });\n clipboard = new ClipboardJS('.toClipboard');\n clipboard.on('error', function(event) {\n showTooltip(event.trigger, fallbackMessage(event.action));\n }).on('success', function(event) {\n showTooltip(event.trigger, 'Copied');\n });\n }\n };\n\n /**\n * Feed Generator Module\n */\n class feedGenerator {\n\n /**\n * Constructor\n * @constructor\n */\n constructor() {\n this._feed = opts.generator.feed; // wf_config+xxxx\n this._limit = opts.generator.limit;\n this._progress = 0;\n this._timer = null;\n this._color = false;\n // batch info\n this._total_batch = 0;\n this._current_batch = 0;\n this._product_ids = [];\n this._progress_per_batch = 0;\n this._refresh = true;\n // noinspection JSUnresolvedVariable\n this._regenerate = opts.generator.regenerate;\n window.isRegenerating = false;\n this._all_btn = $('.wpf_regenerate');\n this._current_btn = $(`#${this._feed.replace( 'wf_config', 'wf_feed_' )}`);\n this._current_btn_label = '';\n }\n\n /**\n * Init Hooks (Event)\n * @return {feedGenerator}\n */\n init() {\n let self = this;\n if ( '' !== this._feed && this._regenerate && false === window.isRegenerating ) {\n this.generate();\n }\n\n //thickbox body add feed plugin class to make it unique and custom style\n let current_page_query = window.location.search;\n let params = new URLSearchParams(current_page_query);\n let page_name = params.get(\"page\");\n if( \"webappick-manage-feeds\" === page_name ) {\n $('body').addClass('woo-import-popup-body');\n }\n\n $(document).on('click', '.woo-feed-campaign-close-button', function(event) {\n event.preventDefault();\n\n $(this).parent('.woo-feed-promotion').hide();\n let condition = $(this).data('condition');\n if(1 === condition) {\n wpAjax.post( 'woo_feed_hide_promotion', {\n _ajax_nonce: opts.nonce,\n condition: condition,\n } ).then( response => {\n self._log( response );\n } ).fail( error => {\n self._log( error );\n self._updateProgressStatus( error.message );\n self._color = 'red';\n } );\n }\n });\n\n $(document).on('click', '.wpf_regenerate', function(event) {\n event.preventDefault();\n self._current_btn = $( this );\n if( self._current_btn.hasClass('disabled') || window.isRegenerating === true ) return;\n self._feed = self._current_btn.attr('id').replace( 'wf_feed_', 'wf_config' );\n if( '' !== self._feed ) {\n self.generate();\n }\n });\n return this;\n }\n\n _block_button() {\n if ( this._all_btn.length ) {\n this._all_btn.addClass('disabled');\n }\n if ( this._current_btn.length ) {\n this._current_btn.find('span').addClass('wpf_spin reverse_spin');\n this._current_btn_label = this._current_btn.attr('title');\n // noinspection JSUnresolvedVariable\n this._current_btn.attr( 'aria-label', opts.regenerate ).attr( 'title', opts.regenerate );\n }\n }\n\n _unblock_button() {\n if ( this._all_btn.length ) {\n this._all_btn.removeClass('disabled');\n }\n if ( this._current_btn.length ) {\n this._current_btn.find('span').removeClass('wpf_spin');\n this._current_btn.find('span').removeClass('reverse_spin');\n this._current_btn.attr( 'aria-label', this._current_btn_label ).attr( 'title', this._current_btn_label );\n }\n }\n\n /**\n * Generate Feed\n * @return void\n */\n generate() {\n let self = this;\n window.isRegenerating = true;\n this._block_button();\n this._resetProgressBar();\n this._progressBarActive();\n this._log( 'Counting Total Products' );\n this._updateProgressStatus( 'Fetching products.' );\n this._get_product_ids().then( response => {\n this._progress = 10;\n self._log( {response} );\n if(response.success) {\n self._log( `Total ${response.total} Products found.` );\n self._product_ids = response.product;\n self._total_batch = this._product_ids.length;\n self._current_batch = 0;\n self._progress_per_batch = ( 90 - this._progress ) / this._total_batch;\n self._process_batch();\n self._updateProgressStatus( 'Processing Products...' );\n } else {\n self._updateProgressStatus( response.data.message );\n }\n }).fail( error => {\n self._log( error );\n self._updateProgressStatus( error.message );\n self._color = 'red';\n setTimeout( function(){\n self._stopProgressBar();\n self._unblock_button();\n }, 1500 );\n } );\n }\n\n /**\n * Get Product Ids\n * @returns {$.promise}\n * @private\n */\n _get_product_ids() {\n this._progress = 5;\n return wpAjax.post( 'get_product_information', {\n _ajax_nonce: opts.nonce,\n feed: this._feed,\n limit: this._limit,\n } );\n }\n\n /**\n * Run the Batch\n * @private\n */\n _process_batch() {\n let self = this;\n let status = `Processing Batch ${this._current_batch+1} of ${this._total_batch}`;\n this._updateProgressStatus( status );\n this._log( status );\n wpAjax.post( 'make_batch_feed', {\n _ajax_nonce: opts.nonce,\n feed: this._feed,\n products: this._product_ids[this._current_batch],\n loop: this._current_batch,\n } ).then( response => {\n self._current_batch++;\n self._log( `Batch ${self._current_batch} Completed` );\n self._log( response );\n if ( self._current_batch < self._total_batch ) {\n self._process_batch();\n self._progress += self._progress_per_batch;\n }\n if ( self._current_batch === self._total_batch ) {\n self._save_feed_file();\n }\n } ).fail( error => {\n self._log( error );\n self._updateProgressStatus( error.message );\n self._color = 'red';\n setTimeout( function(){\n self._stopProgressBar();\n self._unblock_button();\n }, 1500 );\n } );\n }\n\n /**\n * Save Feed Data from temp to feed file\n * @private\n */\n _save_feed_file() {\n let self = this;\n this._log( 'Saving feed file' );\n this._updateProgressStatus( 'Saving feed file' );\n wpAjax.post( 'save_feed_file', {\n _ajax_nonce: opts.nonce,\n feed: this._feed,\n } ).then( response => {\n self._log( response );\n self._progress = 100;\n if ( self._refresh ) {\n window.location.href = `${opts.pages.list.feed}&link=${response.url}&cat=${response.cat}`;\n }\n setTimeout( function(){\n self._stopProgressBar();\n setTimeout( function(){\n self._resetProgressBar( true );\n self._unblock_button();\n }, 3000 );\n }, 2500 );\n } ).fail( error => {\n self._log( error );\n self._updateProgressStatus( error.message );\n self._color = 'red';\n setTimeout( function(){\n self._stopProgressBar();\n self._unblock_button();\n }, 1500 );\n } );\n }\n\n /**\n * Console log wrapper with debug settings.\n * @param data\n * @returns {feedGenerator}\n * @private\n */\n _log( data ) {\n // noinspection JSUnresolvedVariable\n if ( opts.wpf_debug ) {\n console.log( data );\n }\n return this;\n }\n\n /**\n * Run the progressbar refresh interval\n * @param {int} refreshInterval\n * @returns {feedGenerator}\n * @private\n */\n _progressBarActive( refreshInterval = 0 ) {\n let self = this;\n this._toggleProgressBar( true );\n this._timer = setInterval( function(){\n self._updateProgressBar();\n }, refreshInterval || 1000 );\n return this;\n }\n\n /**\n * Stop Progressbar\n * @returns {feedGenerator}\n * @private\n */\n _stopProgressBar() {\n clearInterval( this._timer );\n return this;\n }\n\n /**\n * Reset Progressbar\n * @returns {feedGenerator}\n * @private\n */\n _resetProgressBar( update ) {\n this._toggleProgressBar( false );\n this._updateProgressStatus( '' );\n clearInterval( this._timer );\n this._color = false;\n this._timer = null;\n this._progress = 0;\n if ( update ) {\n this._updateProgressBar();\n }\n return this;\n }\n\n /**\n * Show hide the progress bar el\n * @param status\n * @returns {feedGenerator}\n * @private\n */\n _toggleProgressBar( status ) {\n let table = $('#feed_progress_table');\n if ( status ) {\n table.show();\n } else {\n table.hide();\n }\n return this;\n }\n\n /**\n * Update Progress bar text status\n * @param {string} status\n * @returns {feedGenerator}\n * @private\n */\n _updateProgressStatus( status ) {\n $( '.feed-progress-status' ).html( status );\n return this;\n }\n\n _getErrorMessageByCode( error ){\n let progress_message = $( '.feed-progress-status' );\n progress_message.css( {'color':this._color});\n $( '.feed-progress-percentage' ).css( {'color':this._color});\n $( '.wpf_spin' ).css( {'color':this._color});\n\n let message=error.status +' : '+ error.statusText+'. ';\n if(500===error.status){\n message+= \"Please increase your PHP max_execution_time. Please <a target='_blank' href='https://webappick.com/docs/woo-feed/faq-for-woocommerce-product-feed/how-to-solve-processing-10-feed-generation-stuck-error/'>read this doc</a>.\";\n }\n\n this._updateProgressStatus(message);\n\n }\n\n /**\n * Update Progress Data\n * hooked with setInterval\n * @private\n */\n _updateProgressBar() {\n let percentage = $( '.feed-progress-percentage' ),\n bar = $( '.feed-progress-bar-fill' ),\n _progress = `${Math.round( this._progress )}%`;\n bar.css( {\n width: _progress,\n } );\n percentage.text( _progress );\n }\n }\n // expose to the global scope\n window.wf = {\n helper: helper,\n feedEditor: feedEditor,\n generator: feedGenerator,\n };\n\n $(window).on('load', function() {\n // Template loading ui conflict\n if ($(location).attr(\"href\").match(/webappick.*feed/g) !== null) {\n $('#wpbody-content').addClass('woofeed-body-content');\n }\n\n // ClipBoardJS\n clip();\n // postbox toggle\n postboxes.add_postbox_toggles(pagenow);\n // initialize generator\n let generator = new feedGenerator();\n generator.init();\n // noinspection JSUnresolvedVariable\n if( '' !== opts.generator.feed && opts.generator.regenerate ) {\n\n }\n // initialize editor\n feedEditor.init();\n helper.common(); // Generate Feed Add Table Row\n tooltip();\n // validate feed editor\n $(\".generateFeed\").validate();\n\n // document events\n $(document)\n .on('blur', 'input[name=\"wfDAttributeName\"]', function(e) {\n e.preventDefault();\n let attr_name = $(this).val();\n attr_name = attr_name.toLowerCase();\n attr_name = attr_name.split(' ').join('_');\n\n $('#wfDAttributeCode').val(attr_name);\n\n })\n .on('click', '[data-toggle_slide]', function(e) {\n e.preventDefault();\n $($(this).data('toggle_slide')).slideToggle('fast');\n })\n // XML Feed Wrapper\n .on('click', '#wf_newRow', function () {\n let tbody = $('#table-1 tbody'),\n template = $('#feed_config_template').text().trim().replace(/__idx__/g, tbody.find('tr').length);\n tbody.append(template);\n helper.fancySelect($('.outputType'));\n })\n // feed delete alert.\n .on('click', '.single-feed-delete', function (event) {\n event.preventDefault();\n // noinspection JSUnresolvedVariable\n if (confirm(opts.form.del_confirm)) {\n window.location.href = $(this).attr('val');\n }\n })\n // clear cache data.\n .on('click', '.wf_clean_cache_wrapper', function(event) {\n event.preventDefault();\n var nonce = $('.woo-feed-clean-cache-nonce').val();\n var loader = $('.woo-feed-cache-loader');\n\n //show loader\n loader.show();\n\n // passed cache nonce\n wpAjax.post('clear_cache_data', {\n _ajax_clean_nonce: nonce\n }).then(function (response) {\n if( response.success ) {\n loader.hide(); //hide loader\n location.reload();\n }\n }).fail(function () {\n console.log('something wrong');\n });\n\n })// Copy Status\n .on('click', '#woo-feed-copy-status-btn', function(event) {\n event.preventDefault();\n let button = $('#woo-feed-copy-status-btn');\n let status_area = $('#woo-feed-status-area');\n button.val('Copied');\n status_area.css('visibility','visible');\n status_area.select();\n\n document.execCommand('copy');\n })\n // feed value dropdown change.\n .on('change', '.wf_attr.wf_attributes', function(event) {\n event.preventDefault();\n\n $('.fancy-picker-picked').trigger(\"click\"); // trigger fancy select box clicked\n\n // price attributes\n var price_attributes = ['price', 'current_price', 'sale_price', 'price_with_tax', 'current_price_with_tax', 'sale_price_with_tax', 'shipping_cost'];\n // current value\n var current_attribute_value = $(this).val();\n var outputSelect = $(this).parents('tr').find('.outputType');\n var fancyOption = $(this).parents('tr').find('.fancy-picker-content .fancy-picker-option');\n var fancyDataPicker = $(this).parents('tr').find('.fancy-picker-data span');\n var selectIf, selectKey;\n var currency;\n\n // when any attribute is selected, pick the key\n if( price_attributes.includes(current_attribute_value) ) {\n // when select any price attribute\n selectIf = 'for_price';\n selectKey = \"Price\";\n } else if ( \"\" !== current_attribute_value && -1 !== current_attribute_value.indexOf('wf_taxo') ) {\n\n // when select any custom taxonomy\n selectIf = 'for_custom_taxo';\n selectKey = \"parent_if_empty\";\n } else {\n\n selectIf = 'for_all';\n selectKey = 'Default';\n }\n\n // remove selected class from old selected option\n fancyOption.removeClass('selected');\n\n // when value dropdown is selected as price or any custom taxonomy\n if( selectIf === 'for_custom_taxo' || selectIf === 'for_price' ) {\n // update \"Option Type\" when select key matches\n fancyOption.each(function() {\n if( selectKey === $(this).text() ) {\n $(this).addClass('selected');\n fancyDataPicker.text(selectKey);\n outputSelect.find(\"option\").text(selectKey);\n outputSelect.find(\"option\").val( $(this).data('value') );\n }\n });\n\n if( \"for_price\" === selectIf ) {\n var feedCurrency = $('#feedCurrency').val();\n if( \"undefined\" !== typeof feedCurrency && null !== feedCurrency ) {\n currency = feedCurrency;\n }else {\n currency = wpf_ajax_obj.woocommerce.currency;\n }\n\n //for price add currency to the suffix\n $(this).closest(\"tr\").find(\"td:eq(5) input\").val(\" \" + currency);\n }\n\n } else {\n fancyOption.each(function(){\n if( selectKey === $(this).text() ){\n $(this).addClass('selected');\n fancyDataPicker.text(selectKey);\n outputSelect.find(\"option\").text(selectKey);\n outputSelect.find(\"option\").val( $(this).data(\"value\") );\n }\n });\n\n $(this).closest(\"tr\").find(\"td:eq(5) input\").val(\"\");\n }\n\n })\n // bulk delete alert.\n .on('click', '#doaction, #doaction2', function () {\n // noinspection JSUnresolvedVariable\n return confirm(opts.form.del_confirm_multi);\n })\n // Generate Feed Table Row Delete\n .on('change', '.dType', function () {\n let self = $(this),\n type = self.val(),\n row = self.closest('tr');\n\n if (type === 'pattern') {\n row.find('.value_attribute').hide();\n row.find('.value_pattern').show();\n } else if (type === 'attribute') {\n row.find('.value_attribute').show();\n row.find('.value_pattern').hide();\n } else if (type === 'remove') {\n row.find('.value_attribute').hide();\n row.find('.value_pattern').hide();\n }\n })\n // Generate Feed Form Submit\n .on('click', '.delRow', function (e) {\n e.preventDefault();\n $(this).closest('tr').remove();\n helper.reindex_config_table();\n })\n .on('submit', '#generateFeed', function () {\n // Feed Generating form validation\n $(this).validate();\n\n if ($(this).valid()) {\n $(\".makeFeedResponse\")\n .show()\n .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\n }\n })\n // Generate Update Feed Form Submit\n .on('submit', '#updatefeed', function (e, data) {\n // Feed Generating form validation\n $(this).validate();\n\n if ($(this).valid()) {\n $(\".makeFeedResponse\")\n .show()\n .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\n }\n })\n .on( 'ready woo_feed_config_loaded', function(){\n\n if( $('#ftpenabled').val() === '0' ){\n $('.google-merchant-message').hide('slow');\n $('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').attr('disabled','disabled');\n } else {\n if( $('#provider').val() === 'google' ) {\n $('.google-merchant-message').show('slow');\n } else {\n $('.google-merchant-message').hide('slow');\n }\n $('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').removeAttr('disabled');\n }\n\n $('#ftpenabled').on('change', function(){\n if( $('#ftpenabled').val() === '0' ){\n $('.google-merchant-message').hide('slow');\n $('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').attr('disabled','disabled');\n } else {\n\n $('.woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) input, .woo-feed-ftp .ftpconfig tr:not(.ftpcontroller) select').removeAttr('disabled');\n\n // Google merchant specific message\n if( $('#provider').val() === 'google' ){\n $('.google-merchant-message').show('slow');\n } else {\n $('.google-merchant-message').hide('slow');\n }\n\n }\n });\n })\n .on('change', '.ftporsftp', function () {\n let server = $(this).val(),\n status = $('.ssh2_status');\n\n if (server === 'sftp') {\n // noinspection JSUnresolvedVariable\n status.show().css('color', 'dodgerblue').text(opts.form.sftp_checking);\n wpAjax.post('get_ssh2_status', {\n _ajax_nonce: opts.nonce,\n server: server\n }).then(function (response) {\n if (response === 'exists') {\n // noinspection JSUnresolvedVariable\n status.css('color', '#2CC185').text(opts.form.sftp_available);\n setTimeout(function () {\n status.hide();\n }, 1500);\n } else {\n // noinspection JSUnresolvedVariable\n status.show().css('color', 'red').text(opts.form.sftp_warning);\n }\n }).fail(function (e) {\n status.hide();\n helper.ajax_fail(e);\n });\n } else {\n status.hide();\n }\n })\n .on('click', '[name=\"save_feed_config\"]', function (e) {\n e.preventDefault();\n $('#updatefeed').trigger('submit', {\n save: true\n });\n })\n .on('change', '#provider', function (event) {\n event.preventDefault();\n\n let merchant = $(this).val(),\n templateName = $(this).find(':selected').text(),\n name = $('#filename').val(),\n feedType = $(\"#feedType\"),\n feedForm = $(\"#providerPage\"),\n merchantInfo = $('#feed_merchant_info'); // set loading..\n\n // noinspection JSUnresolvedVariable\n feedForm.html('<h3><span style=\"float:none;margin: -3px 0 0;\" class=\"spinner is-active\"></span> ' + opts.form.loading_tmpl + '</h3>'); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html, WordPressVIPMinimum.JS.StringConcat.Found\n\n merchantInfo.find('.spinner').addClass('is-active');\n feedType.disabled(!0); // disable dropdown\n\n feedType.parent().find('.spinner').addClass('is-active');\n merchantInfo.find('.merchant-info-section .data').html(''); // remove previous data\n // Get Merchant info for selected Provider/Merchant\n\n if (merchantInfoCache.hasOwnProperty(merchant)) {\n feedEditor.renderMerchantInfo(merchantInfo, feedType, merchantInfoCache[merchant]);\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n } else {\n wpAjax.send('woo_feed_get_merchant_info', {\n type: 'GET',\n data: {\n nonce: opts.nonce,\n provider: merchant,\n templateName: templateName\n }\n }).then(function (r) {\n merchantInfoCache[merchant] = r;\n feedEditor.renderMerchantInfo(merchantInfo, feedType, r);\n }).then(function(){\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n }).fail(helper.ajax_fail);\n } // Get FeedForm For Selected Provider/Merchant\n\n\n if (merchantTemplateCache.hasOwnProperty(merchant)) {\n feedEditor.renderMerchantTemplate(feedForm, merchantTemplateCache[merchant]);\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n } else {\n wpAjax.post('get_feed_merchant', {\n _ajax_nonce: opts.nonce,\n merchant: merchant\n }).then(function (r) {\n merchantTemplateCache[merchant] = r;\n feedEditor.renderMerchantTemplate(feedForm, r);\n $('#utm_source').val(templateName);\n $('#utm_campaign').val(name);\n //when merchant is bing, change delimiter and enclosure\n if( 'bing' === merchant ) {\n //delimiter value\n $(\"#delimiter option\").removeAttr('selected');\n $(\"#delimiter option[value=\\\"tab\\\"]\").attr('selected', 'selected');\n\n //enclosure value\n $(\"#enclosure option\").removeAttr('selected');\n $(\"#enclosure option[value=\\\" \\\"]\").attr('selected', 'selected');\n }\n\n //reviewer options hide\n if( 'google_product_review' !== merchant) {\n $('.wf_attributes option[value=\"reviewer_name\"]').hide();\n }\n }).then(function(){\n\n /**\n * Triggers after merchant configuration is fetched & loaded\n * */\n $(document).trigger('woo_feed_config_loaded');\n\n }).fail(helper.ajax_fail);\n }\n })\n // Feed Active and Inactive status change via ajax\n .on('change', '.woo_feed_status_input', function () {\n let self = $(this);\n wpAjax.post('update_feed_status', {\n _ajax_nonce: opts.nonce,\n feedName: self.val(),\n status: self[0].checked ? 1 : 0\n });\n });\n // event with trigger\n $(document)\n .on('change', '[name=\"is_outOfStock\"], [name=\"product_visibility\"]', function () {\n let outOfStockVisibilityRow = $('.out-of-stock-visibility');\n if ($('[name=\"is_outOfStock\"]:checked').val() === 'n' && $('[name=\"product_visibility\"]:checked').val() === '1') {\n outOfStockVisibilityRow.show();\n } else {\n outOfStockVisibilityRow.hide();\n }\n })\n .on('change', '.attr_type', function () {\n // Attribute type selection\n let self = $(this),\n type = self.val(),\n row = self.closest('tr');\n\n if (type === 'pattern') {\n row.find('.wf_attr').hide();\n row.find('.wf_attr').val('');\n row.find('.wf_default').show();\n } else {\n row.find('.wf_attr').show();\n row.find('.wf_default').hide();\n row.find('.wf_default').val('');\n }\n })\n .on('change', '.wf_mattributes, .attr_type', function () {\n let row = $(this).closest('tr'),\n attribute = row.find('.wf_mattributes'),\n type = row.find('.attr_type'),\n valueColumn = row.find('td:eq(4)'),\n provider = $('#provider').val();\n\n // noinspection JSUnresolvedVariable\n if (opts.form.google_category.hasOwnProperty(attribute.val()) && type.val() === 'pattern' && helper.in_array(provider, opts.form.google_category[attribute.val()])) {\n if (valueColumn.find('select.selectize').length === 0) {\n valueColumn.find('input.wf_default').remove();\n valueColumn.append('<span class=\"wf_default wf_attributes\"><select name=\"default[]\" class=\"selectize\"></select></span>');\n // noinspection JSUnresolvedVariable\n valueColumn.append(`<span style=\"font-size:x-small;\"><a style=\"color: red\" href=\"https://webappick.com/docs/woo-feed/feed-configuration/how-to-map-store-category-with-merchant-category/\" target=\"_blank\">${opts.learn_more}</a></span>`);\n\n if (!googleCategories || !facebookCategories) {\n valueColumn.append('<span class=\"spinner is-active\" style=\"margin: 0;\"></span>');\n }\n\n let select = valueColumn.find('.wf_attributes select');\n // noinspection JSUnresolvedVariable\n helper.selectize(select, {\n preload: true,\n placeholder: opts.form.select_category,\n load: function load(query, cb) {\n if (!googleCategories) {\n wpAjax.send('get_google_categories', {\n type: 'GET',\n data: {\n _ajax_nonce: opts.nonce,\n action: \"get_google_categories\",\n provider: provider\n }\n }).then(function (r) {\n googleCategories = r;\n cb(googleCategories);\n valueColumn.find('.spinner').remove();\n }).fail(helper.ajax_fail);\n } else {\n cb(googleCategories);\n }\n\n //for facebook product category merchant attribute\n if (!facebookCategories && \"facebook\" === provider && \"fb_product_category\" === attribute.val()) {\n wpAjax.send('get_facebook_categories', {\n type: 'GET',\n data: {\n _ajax_nonce: opts.nonce,\n action: \"get_facebook_categories\",\n provider: provider\n }\n }).then(function (r) {\n facebookCategories = r;\n cb(facebookCategories);\n valueColumn.find('.spinner').remove();\n }).fail(helper.ajax_fail);\n } else {\n cb(facebookCategories);\n }\n }\n });\n }\n } else {\n if ( attribute.val() !== 'current_category' && valueColumn.find('input.wf_default').length === 0) {\n valueColumn.find('span').remove();\n valueColumn.append('<input autocomplete=\"off\" class=\"wf_default wf_attributes\" type=\"text\" name=\"default[]\" value=\"\">');\n\n if (type.val() !== 'pattern') {\n valueColumn.find('input.wf_default').hide();\n }\n }\n }\n })\n .on('change', '#feedType,#provider', function (e) {\n let type = $('#feedType').val(),\n provider = $('#provider').val(),\n itemWrapper = $('.itemWrapper'),\n wf_csv_txt = $('.wf_csvtxt');\n\n // noinspection JSUnresolvedVariable\n if (type !== '' && helper.in_array(provider, opts.form.item_wrapper_hidden)) {\n itemWrapper.hide();\n }\n\n //when feed type is changed\n if( 'feedType' === e.target.id ) {\n if (type === 'csv' || type === 'txt' || type === 'tsv') {\n wf_csv_txt.show();\n itemWrapper.hide();\n \n if( 'tsv' === type ) {\n $('#delimiter option:last').prop(\"selected\", \"selected\");\n } else if( 'csv' === type ) {\n $('#delimiter option:first').prop(\"selected\", \"selected\");\n }\n } else if( 'xml' === type && \"custom\" === provider ) {\n itemWrapper.show();\n wf_csv_txt.hide();\n } else if( 'json' === type ) {\n wf_csv_txt.hide();\n }\n }\n\n // when template is not custom template 1 hide the item wrapper\n if( \"custom\" !== provider ) {\n itemWrapper.hide();\n }\n\n })\n .trigger('change');\n\n\n $(document)\n\t\t\t.on('click', '.woofeed-custom-fields [id*=\"-switcher\"]', function () {\n\t\t\t $(this).closest('td').find('.switch-loader').show();\n\t\t\t\tlet field = $(this).attr( 'id' ).split( '-' )[0],\n\t\t\t\t\tisTaxonomy = $(this).data( 'taxonomy' ),\n\t\t\t\t\tstatus = $(this).prop( 'checked' );\n\t\t\t\tnew WooFeedCustomFields( field, status, isTaxonomy );\n\n\t\t\t})\n\n\t\t\t// Remove sticky cart on feature page\n\t\t\t.ready(function() {\n\t\t\t\tvar s = $(\".wapk-feed-buy-now-container\");\n\t\t\t\t$(window).scroll(function() {\n\t\t\t\t\tvar windowpos = $(window).scrollTop();\n\t\t\t\t\tif ( windowpos <= 5000 ) {\n\t\t\t\t\t\ts.addClass(\"fixed\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts.removeClass(\"fixed\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n });\n\n $(document)\n\t\t.on('click', '#woo-feed-debug-log-download', function (e) {\n\t\t\te.preventDefault();\n\t\t\t$(\"<a />\", {\n\t\t\t\tdownload: new Date() + \".log\",\n\t\t\t\thref: URL.createObjectURL(\n\t\t\t\t\tnew Blob([$(\"#woo-feed-debug-log\").val()], {\n\t\t\t\t\t\ttype: \"text/plain\"\n\t\t\t\t\t})),\n\t\t\t}).appendTo(\"body\")[0].click();\n\t\t})\n\t\t.on('keyup', '#filename', function() {\n\t\t\tvar name = $('#filename').val();\n\t\t\t$('#utm_campaign').val(name);\n\t\t})\n\n .on('click', '.wf-tab-name', function(e) {\n $('.wf-tab-name.activate').removeClass('activate');\n $(this).addClass('activate');\n\n let for_attr = $(this).attr('for');\n $('.wf_tabs li.active').removeClass('active');\n $('.wf_tabs .wf-tab-content#' + for_attr).parent().addClass('active');\n })\n\n\t\t.on('change', '#category-mapping-form #providers', function() {\n\t\t\tvar provider = $(this).find(':selected').val(),\n\t\t\t\tgoogleMap = ['google', 'facebook', 'pinterest', 'bing', 'bing_local_inventory', 'snapchat'];\n\n //add snipper element\n $('.woo-feed-category-mapping-config-table').prepend('<div class=\"woo-feed-cat-map-spinner\"><h3><span style=\"float:none;margin: -3px 0 0;\" class=\"spinner is-active\"></span> Loading Mapping...</h3></div>');\n\n\t\t\tif( googleMap.indexOf(provider) !== -1 ) {\n\t\t\t\t$('input[id*=\"cat_mapping_\"]').css('display', 'none');\n\t\t\t\t$('.wf_default.wf_attributes').css('display', 'block').css('width', '100%');\n\n var cat_init = new WooFeedMapCategories();\n if( \"facebook\" === provider ) {\n cat_init.wooFeed_get_facebook_categories();\n } else {\n cat_init.wooFeed_get_google_categories();\n }\n\n } else {\n\t\t\t\t$('input[id*=\"cat_mapping_\"]').css('display', 'block');\n\t\t\t\t$('.wf_default.wf_attributes').css('display', 'none').css('width', '100%');\n\t\t\t}\n\t\t})\n\n // Copy parent category ids to child categories.\n\t\t.on('click', 'span[id*=\"cat-map-\"]', function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar providerName = $('#category-mapping-form #providers').val(),\n\t\t\t\tgoogleMap = ['google', 'facebook', 'pinterest', 'bing', 'bing_local_inventory', 'snapchat'],\n\t\t\t\tcatId = $(this).attr('id').replace(/[^\\d.]/g, ''),\n\t\t\t\tgroupId = 'group-child-' + catId;\n\n\t\t\tif( googleMap.indexOf(providerName) !== -1) {\n\t\t\t\tvar catField = $(this).parents('tr').find('.selectized').val();\n\n\t\t\t\tif (catField) {\n\t\t\t\t\t$('.' + groupId).parents('tr').find('select').each(function (i, v) {\n\t\t\t\t\t\t$(v).data('selectize').setValue(catField);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tvar value = $('#cat_mapping_'+catId).val();\n\t\t\t\t$('.'+groupId).parents('tr').find('input').val(value);\n\t\t\t}\n\n\t\t});\n\n $(document).ready(function () {\n var provider = $(\"#providers\").val();\n var cat_init = new WooFeedMapCategories();\n\n var url = new URL(window.location.href);\n var cat_mapping_action = url.searchParams.get(\"action\");\n\n if( \"edit-mapping\" === cat_mapping_action ) {\n $('.woo-feed-category-mapping-config-table').prepend('<div class=\"woo-feed-cat-map-spinner\"><h3><span style=\"float:none;margin: -3px 0 0;\" class=\"spinner is-active\"></span> Loading Mapping...</h3></div>');\n\n if( \"facebook\" === provider ) {\n cat_init.wooFeed_get_facebook_categories();\n } else {\n cat_init.wooFeed_get_google_categories();\n }\n }\n\n });\n\n /*\n * Issue fix for feed edit page unsupported `Feed Type` not disabling\n *\n * @since 4.4.22\n * */\n $(document).on( \"feed_editor_init\", function(){\n\n let types = $('.merchant-info-section.feed_file_type .data').html().split(\",\").map(function(t) {\n return t.trim().toLowerCase();\n });\n\n let feedType = $(\"#feedType\");\n\n if (types.length) {\n feedType.find('option').each(function() {\n let opt = $(this);\n opt.val() && !helper.in_array(opt.val(), types) ? opt.disabled(!0) : opt.disabled(!1);\n });\n if (types.length === 1) feedType.find('option[value=\"' + types[0] + '\"]').attr('selected', 'selected');\n } else feedType.find('option').disabled(!1);\n\n } );\n\n /**\n * Automatically adding postfix for corresponding attribute selection.\n *\n * @since 4.4.32\n */\n $(document).on('ready', function(){\n\n function update_postfix(){\n var attribute_list = {\n\n 'price': wpf_ajax_obj.woocommerce.currency,\n 'current_price': wpf_ajax_obj.woocommerce.currency,\n 'sale_price': wpf_ajax_obj.woocommerce.currency,\n 'price_with_tax': wpf_ajax_obj.woocommerce.currency,\n 'current_price_with_tax': wpf_ajax_obj.woocommerce.currency,\n 'sale_price_with_tax': wpf_ajax_obj.woocommerce.currency,\n\n\n 'weight': wpf_ajax_obj.woocommerce.weight,\n 'weight_unit': wpf_ajax_obj.woocommerce.weight,\n\n\n 'height': wpf_ajax_obj.woocommerce.dimension,\n 'length': wpf_ajax_obj.woocommerce.dimension,\n 'width': wpf_ajax_obj.woocommerce.dimension\n\n };\n\n if (typeof wpf_ajax_obj.feed_rules !== 'undefined' && wpf_ajax_obj.feed_rules !== null) {\n var feed_rules = wpf_ajax_obj.feed_rules;\n var current_feed_currency = feed_rules.feedCurrency;\n }\n\n //get current action name of the page\n var queryString = window.location.search;\n var urlParams = new URLSearchParams(queryString);\n var action = urlParams.get('action');\n\n $( '.wf_attr.wf_attributes' ).each( function( key, value){\n\n var attribute_value = $(value).val();\n var current_Value = $( 'input[name^=\"suffix\"]' ).eq( parseInt( key ) ).val();\n\n if( -1 !== $.inArray( current_Value, [\n ' ' + wpf_ajax_obj.woocommerce.currency,\n ' ' + wpf_ajax_obj.woocommerce.weight,\n ' ' + wpf_ajax_obj.woocommerce.dimension\n ] ) ){\n $( 'input[name^=\"suffix\"]' ).eq( parseInt( key ) ).val('');\n }\n\n $.each(attribute_list, function (_key, _value){\n if( attribute_value === _key ){\n _value = null !== current_feed_currency && \"undefined\" !== typeof current_feed_currency ? current_feed_currency : _value;\n\n if( \"undefined\" !== action && \"edit-feed\" !== action ) {\n $( 'input[name^=\"suffix\"]' ).eq( parseInt( key ) ).val( ' ' + _value );\n } else {\n $( 'input[name^=\"suffix\"]' ).eq( parseInt( key ) ).val( current_Value );\n }\n\n }\n });\n } );\n\n $(document).trigger( 'feedEditor.after.free.postfix.update' );\n }\n\n $(document).on('feedEditor.init', function(){\n update_postfix();\n });\n\n });\n\n})(jQuery, window, document, wp.ajax, wpf_ajax_obj);\n"]}
admin/partials/woo-feed-category-mapping.php CHANGED
@@ -50,7 +50,7 @@ if ( isset( $_GET['action'], $_GET['cmapping'] ) ) { // phpcs:ignore
50
  </tbody>
51
  </table>
52
  <br/>
53
- <table class="table tree widefat fixed ">
54
  <thead>
55
  <tr>
56
  <th><?php esc_html_e( 'Local Category', 'woo-feed' ); ?></th>
50
  </tbody>
51
  </table>
52
  <br/>
53
+ <table class="table tree widefat fixed woo-feed-category-mapping-config-table">
54
  <thead>
55
  <tr>
56
  <th><?php esc_html_e( 'Local Category', 'woo-feed' ); ?></th>
includes/classes/class-woo-feed-constants.php CHANGED
@@ -22,7 +22,7 @@ class Woo_Feed_Constants {
22
  * @var string
23
  * @since 3.1.6
24
  */
25
- define( 'WOO_FEED_FREE_VERSION', '4.4.51' );
26
  }
27
 
28
  if ( ! defined( 'WOO_FEED_FREE_PATH' ) ) {
22
  * @var string
23
  * @since 3.1.6
24
  */
25
+ define( 'WOO_FEED_FREE_VERSION', '4.4.52' );
26
  }
27
 
28
  if ( ! defined( 'WOO_FEED_FREE_PATH' ) ) {
includes/classes/class-woo-feed-products-v3.php CHANGED
@@ -4012,8 +4012,11 @@ class Woo_Feed_Products_v3
4012
 
4013
  if (in_array(6, $outputTypes)) { // Format Price
4014
  if (!empty($output) && $output > 0) {
 
 
 
4015
  $output = (float)$output;
4016
- $output = number_format($output, 2, '.', '');
4017
  }
4018
  }
4019
 
4012
 
4013
  if (in_array(6, $outputTypes)) { // Format Price
4014
  if (!empty($output) && $output > 0) {
4015
+ $decimals = wc_get_price_decimals();
4016
+ $decimal_separator = wc_get_price_decimal_separator();
4017
+ $thousand_separator = wc_get_price_thousand_separator();
4018
  $output = (float)$output;
4019
+ $output = number_format($output, $decimals, wp_specialchars_decode(stripslashes($decimal_separator)), wp_specialchars_decode(stripslashes($thousand_separator)));
4020
  }
4021
  }
4022
 
woo-feed.php CHANGED
@@ -10,7 +10,7 @@
10
  * Plugin Name: CTX Feed
11
  * Plugin URI: https://webappick.com/
12
  * Description: Easily generate woocommerce product feed for any marketing channel like Google Shopping(Merchant), Facebook Remarketing, Bing, eBay & more. Support 100+ Merchants.
13
- * Version: 4.4.51
14
  * Author: WebAppick
15
  * Author URI: https://webappick.com/
16
  * License: GPL v2
10
  * Plugin Name: CTX Feed
11
  * Plugin URI: https://webappick.com/
12
  * Description: Easily generate woocommerce product feed for any marketing channel like Google Shopping(Merchant), Facebook Remarketing, Bing, eBay & more. Support 100+ Merchants.
13
+ * Version: 4.4.52
14
  * Author: WebAppick
15
  * Author URI: https://webappick.com/
16
  * License: GPL v2