PluginProbe
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant / 1.6
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant v1.6
2.3.2 2.3.1 2.3.0 2.2.8 2.2.7 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.10.5 1.11.0 1.11.1 1.11.2 1.6 1.7 1.8 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 1.9.10 1.9.11 All 60 releases
merchant / assets / js / admin / merchant-preview.js

merchant-preview.js in Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant 1.6, at assets/js/admin/merchant-preview.js

411 lines 19.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2
3 function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4 function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
5 function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6 function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
7 function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8 function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
9 function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10 function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11 ;
12 (function ($, window, document, undefined) {
13 'use strict';
14
15 $(document).ready(function () {
16 /**
17 * @param merchantPreviewManipulators.css
18 * @param merchantPreviewManipulators.text
19 */
20 var manipulators = merchantPreviewManipulators;
21 var hasManipulators = function hasManipulators(object) {
22 return typeof object !== 'undefined' && Object.keys(object).length > 0;
23 };
24 var updateElements = function updateElements() {
25 if (hasManipulators(manipulators.css)) {
26 var _loop = function _loop(key) {
27 if (manipulators.css.hasOwnProperty(key)) {
28 var elements = document.querySelectorAll(manipulators.css[key].selector);
29 var value = $('[name="merchant[' + manipulators.css[key].setting + ']"]').val() + manipulators.css[key].unit;
30 var input = $('[name="merchant[' + manipulators.css[key].setting + ']"]');
31 var inputType = input.attr('type');
32 if (inputType === 'radio') {
33 value = $('[name="merchant[' + manipulators.css[key].setting + ']"]' + ':checked').val() + manipulators.css[key].unit;
34 }
35 elements.forEach(function (element) {
36 element.style.setProperty(manipulators.css[key].variable, value);
37 });
38 }
39 };
40 for (var key in manipulators.css) {
41 _loop(key);
42 }
43 }
44 if (hasManipulators(manipulators.text)) {
45 for (var _key in manipulators.text) {
46 if (manipulators.text.hasOwnProperty(_key)) {
47 var inputText = $('[name="merchant[' + manipulators.text[_key].setting + ']"]').val();
48 if (manipulators.text[_key].hasOwnProperty('replacements')) {
49 inputText = setReplacements(inputText, manipulators.text[_key]);
50 }
51 $(manipulators.text[_key].selector).html(inputText);
52 }
53 }
54 }
55 if (hasManipulators(manipulators.attributes)) {
56 for (var _key2 in manipulators.attributes) {
57 if (manipulators.attributes.hasOwnProperty(_key2)) {
58 var input = $('[name="merchant[' + manipulators.attributes[_key2].setting + ']"]');
59 var inputType = input.attr('type');
60 if (inputType === 'radio') {
61 input = $('[name="merchant[' + manipulators.attributes[_key2].setting + ']"]' + ':checked');
62 }
63 var inputValue = input.val();
64 if (manipulators.attributes[_key2].hasOwnProperty('replacements')) {
65 inputValue = setReplacements(inputValue, manipulators.attributes[_key2]);
66 }
67 $(manipulators.attributes[_key2].selector).attr(manipulators.attributes[_key2].attribute, inputValue);
68 }
69 }
70 }
71 if (hasManipulators(manipulators.classes)) {
72 for (var _key3 in manipulators.classes) {
73 if (manipulators.classes.hasOwnProperty(_key3)) {
74 if (manipulators.classes[_key3].hasOwnProperty('remove')) {
75 var _iterator = _createForOfIteratorHelper(manipulators.classes[_key3].remove),
76 _step;
77 try {
78 for (_iterator.s(); !(_step = _iterator.n()).done;) {
79 var classToRemove = _step.value;
80 $(manipulators.classes[_key3].selector).removeClass(classToRemove);
81 }
82 } catch (err) {
83 _iterator.e(err);
84 } finally {
85 _iterator.f();
86 }
87 }
88 var _input = $('[name="merchant[' + manipulators.classes[_key3].setting + ']"]');
89 var _inputType = _input.attr('type');
90 if (_inputType === 'radio') {
91 _input = $('[name="merchant[' + manipulators.classes[_key3].setting + ']"]' + ':checked');
92 }
93 if (_inputType === 'checkbox') {
94 if (_input.is(':checked')) {
95 $(manipulators.classes[_key3].selector).addClass(manipulators.classes[_key3].add);
96 } else {
97 $(manipulators.classes[_key3].selector).removeClass(manipulators.classes[_key3].add);
98 }
99 } else {
100 var _inputValue = _input.val();
101 if (manipulators.classes[_key3].hasOwnProperty('add')) {
102 $(manipulators.classes[_key3].selector).toggleClass(manipulators.classes[_key3].add);
103 } else {
104 $(manipulators.classes[_key3].selector).addClass(_inputValue);
105 }
106 }
107 }
108 }
109 }
110 if (hasManipulators(manipulators.icons)) {
111 for (var _key4 in manipulators.icons) {
112 if (manipulators.icons.hasOwnProperty(_key4)) {
113 var radioElement = $('[name="merchant[' + manipulators.icons[_key4].setting + ']"]' + ':checked');
114 var iconSrc = radioElement.parent().find('figure img').attr('src');
115 var iconSelector = $(manipulators.icons[_key4].selector);
116 if (radioElement.val() === 'none') {
117 iconSelector.hide();
118 } else {
119 iconSelector.show();
120 iconSelector.attr('src', iconSrc);
121 }
122 }
123 }
124 }
125 if (hasManipulators(manipulators.svg_icons)) {
126 for (var _key5 in manipulators.svg_icons) {
127 if (manipulators.svg_icons.hasOwnProperty(_key5)) {
128 var _radioElement = $('[name="merchant[' + manipulators.svg_icons[_key5].setting + ']"]' + ':checked');
129 var iconsLib = manipulators.svg_icons[_key5].icons_lib;
130 var icon = iconsLib[_radioElement.val()];
131 var _iconSelector = $(manipulators.svg_icons[_key5].selector);
132 if (_radioElement.val() === 'none') {
133 _iconSelector.hide();
134 } else {
135 _iconSelector.show();
136 _iconSelector.html(icon);
137 }
138 }
139 }
140 }
141 if (hasManipulators(manipulators.repeater_content)) {
142 for (var _key6 in manipulators.repeater_content) {
143 if (manipulators.repeater_content.hasOwnProperty(_key6)) {
144 var repeaterElement = $('[name="merchant[' + manipulators.repeater_content[_key6].setting + ']"]');
145 var repeaterValue = repeaterElement.val() ? JSON.parse(repeaterElement.val()) : [];
146 var repeaterItemSelector = $(manipulators.repeater_content[_key6].selector);
147 if (repeaterValue.length) {
148 // Update content.
149 var _iterator2 = _createForOfIteratorHelper(repeaterValue.entries()),
150 _step2;
151 try {
152 for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
153 var _step2$value = _slicedToArray(_step2.value, 2),
154 index = _step2$value[0],
155 repeaterItem = _step2$value[1];
156 if (repeaterItemSelector.length) {
157 repeaterItemSelector.eq(index).html(repeaterItem);
158 }
159 }
160
161 // Update content when removing.
162 } catch (err) {
163 _iterator2.e(err);
164 } finally {
165 _iterator2.f();
166 }
167 if (repeaterItemSelector.length > repeaterValue.length) {
168 for (var i = repeaterValue.length; i < repeaterItemSelector.length; i++) {
169 repeaterItemSelector.eq(i).parent().remove();
170 }
171 }
172
173 // Update content when adding.
174 if (repeaterItemSelector.length < repeaterValue.length) {
175 for (var _i = repeaterItemSelector.length; _i < repeaterValue.length; _i++) {
176 repeaterItemSelector.eq(0).parent().clone().appendTo(repeaterItemSelector.eq(0).parent().parent());
177 }
178 }
179 }
180 }
181 }
182 }
183 if (hasManipulators(manipulators.flexible_content)) {
184 var _loop2 = function _loop2(_key7) {
185 var flexibleContentSelector = $(manipulators.flexible_content[_key7].selector);
186 var flexibleContentItems = flexibleContentSelector.children();
187 var flexibleContentTemplate = flexibleContentItems.eq(0);
188 var flexibleContentSettings = $('.merchant-flexible-content-control[data-id=' + manipulators.flexible_content[_key7].setting + ']').find('.merchant-flexible-content').children();
189
190 /**
191 * We're going to remove all items in the selector except for the template
192 * and regenerate the items based on the settings.
193 */
194
195 flexibleContentItems.each(function () {
196 if (!$(this).hasClass('flexible-content-template')) {
197 $(this).remove();
198 }
199 });
200 flexibleContentSettings.each(function () {
201 var item = flexibleContentTemplate.clone();
202 var layout = $(this).data('type');
203 for (var variable in manipulators.flexible_content[_key7].variables[layout]) {
204 var setting = manipulators.flexible_content[_key7].variables[layout][variable];
205 var field = $(this).find('.merchant-module-page-setting-field[data-id=' + setting + ']');
206 var fieldType = field.data('type');
207 var fieldInput = field.find('input').val();
208
209 // Handle variable replacement for text fields
210 if (fieldType === 'text') {
211 item.html(item.html().replace(variable, fieldInput));
212 }
213
214 // Handle variable replacement for upload fields
215 if (fieldType === 'upload') {
216 var image = field.find('.merchant-upload-image img').prop('outerHTML');
217 if (typeof image !== 'undefined') {
218 item.html(item.html().replace(variable, image));
219 }
220 }
221
222 // Handle variable replacement for choices fields
223 if (fieldType === 'choices') {
224 var selectedChoice = field.find('input:checked');
225
226 // If choices uses SVG then we want to replace the variable with the selected SVG
227 if (field.find('.merchant-svg').length) {
228 var SVG = selectedChoice.parent().find('svg').prop('outerHTML');
229 if (typeof SVG !== 'undefined') {
230 item.html(item.html().replace(variable, SVG));
231 }
232 }
233 }
234
235 // Append item to selector
236 item.html(item.html().replace(variable, '')) // First remove variable if it's not replaced yet
237 .removeClass('flexible-content-template') // Remove template class
238 .appendTo(flexibleContentSelector); // Append
239 }
240 });
241 };
242 for (var _key7 in manipulators.flexible_content) {
243 _loop2(_key7);
244 }
245 }
246 };
247 var triggerChangeOnInput = function triggerChangeOnInput(input) {
248 var inputType = input.attr('type');
249
250 // Text inputs
251 if (inputType === 'text' || input.prop('tagName') === 'TEXTAREA') {
252 input.on('keyup', function () {
253 return updateElements();
254 });
255 }
256
257 // Number + range inputs
258 if (inputType === 'number') {
259 input.on('keyup', function () {
260 return updateElements();
261 });
262 if (input.parent().find('input[type=range]').length) {
263 input.parent().find('input[type=range]').on('input change', function () {
264 return updateElements();
265 });
266 }
267 }
268 // Radio inputs
269 if (inputType === 'radio') {
270 input.on('input', function () {
271 return updateElements();
272 });
273 }
274
275 // Select
276 if (inputType === 'checkbox' || input.is('select')) {
277 input.on('change', function () {
278 return updateElements();
279 });
280 }
281
282 // Repeater
283 if (input.hasClass('merchant-sortable-repeater-input')) {
284 input.on('change', function () {
285 return updateElements();
286 });
287 }
288
289 // Upload input
290 if (input.hasClass('merchant-upload-input')) {
291 input.on('change', function () {
292 return updateElements();
293 });
294 }
295 };
296 if (typeof manipulators !== 'undefined') {
297 if (hasManipulators(manipulators.css)) {
298 for (var key in manipulators.css) {
299 triggerChangeOnInput($('[name="merchant[' + manipulators.css[key].setting + ']"]'));
300 }
301 }
302 if (hasManipulators(manipulators.text)) {
303 for (var _key8 in manipulators.text) {
304 triggerChangeOnInput($('[name="merchant[' + manipulators.text[_key8].setting + ']"]'));
305 }
306 }
307 if (hasManipulators(manipulators.attributes)) {
308 for (var _key9 in manipulators.attributes) {
309 triggerChangeOnInput($('[name="merchant[' + manipulators.attributes[_key9].setting + ']"]'));
310 }
311 }
312 if (hasManipulators(manipulators.classes)) {
313 for (var _key10 in manipulators.classes) {
314 triggerChangeOnInput($('[name="merchant[' + manipulators.classes[_key10].setting + ']"]'));
315 }
316 }
317 if (hasManipulators(manipulators.icons)) {
318 for (var _key11 in manipulators.icons) {
319 triggerChangeOnInput($('[name="merchant[' + manipulators.icons[_key11].setting + ']"]'));
320 }
321 }
322 if (hasManipulators(manipulators.svg_icons)) {
323 for (var _key12 in manipulators.svg_icons) {
324 triggerChangeOnInput($('[name="merchant[' + manipulators.svg_icons[_key12].setting + ']"]'));
325 }
326 }
327 if (hasManipulators(manipulators.repeater_content)) {
328 for (var _key13 in manipulators.repeater_content) {
329 triggerChangeOnInput($('[name="merchant[' + manipulators.repeater_content[_key13].setting + ']"]'));
330 }
331 }
332 if (hasManipulators(manipulators.flexible_content)) {
333 for (var _key14 in manipulators.flexible_content) {
334 var field = $('.merchant-flexible-content-control[data-id=' + manipulators.flexible_content[_key14].setting + ']');
335 triggerChangeOnInput(field.find('input'));
336 field.find('.customize-control-flexible-content-delete').on('click', function () {
337 return updateElements();
338 });
339 field.on('merchant.sorted', function () {
340 return updateElements();
341 });
342 }
343 }
344 if (hasManipulators(manipulators.update)) {
345 for (var _key15 in manipulators.update) {
346 triggerChangeOnInput($('[name="merchant[' + manipulators.update[_key15].setting + ']"]'));
347 }
348 }
349
350 // On color picker interaction
351 for (var _i2 = 0, _arr2 = ['.pcr-color-palette', '.pcr-swatches button', '.pcr-color-chooser', '.pcr-color-opacity']; _i2 < _arr2.length; _i2++) {
352 var selector = _arr2[_i2];
353 $(document).on('click', selector, function () {
354 return updateElements();
355 });
356 }
357 }
358
359 // Replacement helpers
360 var setReplacements = function setReplacements(inputText, manipulator) {
361 var searches = manipulator['replacements'][0]; // Searches
362 var replacements = manipulator['replacements'][1]; // Replacements
363
364 // Do search replacements
365 var _iterator3 = _createForOfIteratorHelper(searches.entries()),
366 _step3;
367 try {
368 for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
369 var _step3$value = _slicedToArray(_step3.value, 2),
370 index = _step3$value[0],
371 search = _step3$value[1];
372 var replacement = replacements[index];
373 if (typeof replacement === 'string') {
374 inputText = inputText.replace(search, replacement);
375 }
376 if (_typeof(replacement) === 'object') {
377 if (replacement.hasOwnProperty('conditions')) {
378 var conditionalElement = $('[name="merchant[' + replacement.setting + ']"]');
379 for (var conditionValue in replacement.conditions) {
380 if (replacement.conditions.hasOwnProperty(conditionValue)) {
381 if (conditionalElement.val() === conditionValue) {
382 if (typeof replacement.conditions[conditionValue] === 'string') {
383 inputText = inputText.replace(search, replacement.conditions[conditionValue]);
384 }
385 if (_typeof(replacement.conditions[conditionValue]) === 'object') {
386 inputText = replaceTextBySettingsValue(inputText, search, replacement.conditions[conditionValue]);
387 }
388 }
389 }
390 }
391 } else {
392 inputText = replaceTextBySettingsValue(inputText, search, replacement);
393 }
394 }
395 }
396 } catch (err) {
397 _iterator3.e(err);
398 } finally {
399 _iterator3.f();
400 }
401 return inputText;
402 };
403 var replaceTextBySettingsValue = function replaceTextBySettingsValue(inputText, search, replacement) {
404 var replacementValue = $('input[name="merchant[' + replacement.setting + ']"]').val();
405 if (replacement.hasOwnProperty('format')) {
406 replacementValue = replacement.format.replace('{string}', replacementValue);
407 }
408 return inputText.replace(search, replacementValue);
409 };
410 });
411 })(jQuery, window, document);