@useinsider/guido 3.0.0-beta.a32411b → 3.0.0-beta.b2b28fa
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Guido.vue.js +4 -4
- package/dist/components/Guido.vue2.js +91 -81
- package/dist/components/organisms/header/EditorActions.vue.js +8 -10
- package/dist/components/organisms/header/EditorActions.vue2.js +30 -40
- package/dist/config/i18n/en/labels.json.js +3 -8
- package/dist/config/migrator/itemsBlockMigrator.js +131 -135
- package/dist/config/migrator/recommendationMigrator.js +54 -58
- package/dist/extensions/Blocks/Items/block.js +21 -30
- package/dist/extensions/Blocks/Items/iconsRegistry.js +6 -7
- package/dist/extensions/Blocks/Items/items.css.js +0 -48
- package/dist/extensions/Blocks/Recommendation/block.js +13 -22
- package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +4 -5
- package/dist/extensions/Blocks/Recommendation/recommendation.css.js +0 -48
- package/dist/extensions/Blocks/common-control.js +4 -12
- package/dist/guido.css +1 -1
- package/dist/src/App.vue.d.ts +3 -1
- package/dist/src/components/Guido.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -1
- package/dist/src/components/wrappers/WpModal.vue.d.ts +2 -2
- package/dist/src/extensions/Blocks/Items/block.d.ts +1 -3
- package/dist/src/extensions/Blocks/Recommendation/block.d.ts +1 -3
- package/dist/src/extensions/Blocks/common-control.d.ts +0 -5
- package/package.json +1 -1
- package/dist/components/organisms/header/MigrationConfirmModal.vue.js +0 -17
- package/dist/components/organisms/header/MigrationConfirmModal.vue2.js +0 -39
- package/dist/enums/block.js +0 -4
- package/dist/src/@types/extensions/block.d.ts +0 -2
- package/dist/src/components/organisms/header/MigrationConfirmModal.vue.d.ts +0 -6
- package/dist/src/enums/block.d.ts +0 -4
- package/dist/src/stores/template.d.ts +0 -29
- package/dist/src/utils/migrationBannerHtml.d.ts +0 -2
- package/dist/static/assets/info.svg.js +0 -5
- package/dist/stores/template.js +0 -15
- package/dist/utils/migrationBannerHtml.js +0 -21
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var M = (
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
import { useTemplateStore as F } from "../../stores/template.js";
|
|
9
|
-
const q = {
|
|
1
|
+
var v = Object.defineProperty;
|
|
2
|
+
var B = (e, t, r) => t in e ? v(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
|
|
3
|
+
var M = (e, t, r) => B(e, typeof t != "symbol" ? t + "" : t, r);
|
|
4
|
+
import { productPairs as U } from "../../extensions/Blocks/Items/enums/productEnums.js";
|
|
5
|
+
import { ItemInCartOptions as T, DefaultConfigValues as g, SETTINGS_ENUMS as u } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
|
|
6
|
+
import { getDefaultTemplate as K } from "../../extensions/Blocks/Items/template.js";
|
|
7
|
+
const w = {
|
|
10
8
|
img: {
|
|
11
9
|
pairsKey: "imageSrc",
|
|
12
10
|
defaultKey: "DEFAULT",
|
|
@@ -73,124 +71,122 @@ const q = {
|
|
|
73
71
|
isArray: !1
|
|
74
72
|
}
|
|
75
73
|
};
|
|
76
|
-
function
|
|
74
|
+
function F() {
|
|
77
75
|
return String(Date.now() + Math.floor(Math.random() * 1e3));
|
|
78
76
|
}
|
|
79
|
-
function
|
|
80
|
-
return
|
|
81
|
-
CartItems:
|
|
82
|
-
BrowsedItems:
|
|
83
|
-
PurchasedItems:
|
|
84
|
-
CART_ITEMS:
|
|
85
|
-
BROWSED_ITEMS:
|
|
86
|
-
PURCHASED_ITEMS:
|
|
87
|
-
}[
|
|
77
|
+
function q(e) {
|
|
78
|
+
return e ? {
|
|
79
|
+
CartItems: u.ITEMS_TYPE.CART_ITEMS,
|
|
80
|
+
BrowsedItems: u.ITEMS_TYPE.BROWSED_ITEMS,
|
|
81
|
+
PurchasedItems: u.ITEMS_TYPE.PURCHASED_ITEMS,
|
|
82
|
+
CART_ITEMS: u.ITEMS_TYPE.CART_ITEMS,
|
|
83
|
+
BROWSED_ITEMS: u.ITEMS_TYPE.BROWSED_ITEMS,
|
|
84
|
+
PURCHASED_ITEMS: u.ITEMS_TYPE.PURCHASED_ITEMS
|
|
85
|
+
}[e] || u.ITEMS_TYPE.CART_ITEMS : u.ITEMS_TYPE.CART_ITEMS;
|
|
88
86
|
}
|
|
89
|
-
function R(
|
|
90
|
-
var
|
|
91
|
-
const t = (
|
|
92
|
-
let
|
|
93
|
-
if (
|
|
94
|
-
const
|
|
95
|
-
|
|
87
|
+
function R(e) {
|
|
88
|
+
var a;
|
|
89
|
+
const t = (_, c) => _ == null ? c : _ === "1" || _ === "true", r = (_, c) => _ || c, l = e["data-type"] || e["data-source"], i = q(l), n = T[i];
|
|
90
|
+
let o = e["data-cart_items_select_control_value"] || ((a = n == null ? void 0 : n[0]) == null ? void 0 : a.value) || g.cartItemsSelectControlValue;
|
|
91
|
+
if (o && !o.includes("{{") && /^\d+$/.test(o)) {
|
|
92
|
+
const _ = parseInt(o) - 1, c = T[i];
|
|
93
|
+
c && c[_] && (o = c[_].value);
|
|
96
94
|
}
|
|
97
95
|
return {
|
|
98
96
|
initialized: !0,
|
|
99
|
-
blockInstanceId:
|
|
100
|
-
source:
|
|
101
|
-
type:
|
|
102
|
-
itemsSelectValue:
|
|
103
|
-
orientation:
|
|
104
|
-
nameTrimming: t(
|
|
105
|
-
priceHideDiscount: t(
|
|
106
|
-
priceFormatted: t(
|
|
107
|
-
priceSinglePrice: t(
|
|
108
|
-
priceCurrencySymbol:
|
|
109
|
-
|
|
97
|
+
blockInstanceId: r(e["data-block-instance-id"], F()),
|
|
98
|
+
source: i,
|
|
99
|
+
type: i,
|
|
100
|
+
itemsSelectValue: o,
|
|
101
|
+
orientation: e["data-card_orientation_control_value"] || u.ORIENTATION.VERTICAL,
|
|
102
|
+
nameTrimming: t(e["data-product_name_control_trim"], !0),
|
|
103
|
+
priceHideDiscount: t(e["data-product_price_control_nodup"], !0),
|
|
104
|
+
priceFormatted: t(e["data-product_price_control_formated"], !0),
|
|
105
|
+
priceSinglePrice: t(e["data-product_price_control_single_price"], !1),
|
|
106
|
+
priceCurrencySymbol: r(
|
|
107
|
+
e["data-product_price_control_currency_symbol"],
|
|
110
108
|
g.productPriceCurrencySymbolControlValue
|
|
111
109
|
),
|
|
112
|
-
priceCurrencyLocation:
|
|
113
|
-
|
|
110
|
+
priceCurrencyLocation: r(
|
|
111
|
+
e["data-product_price_currency_location"],
|
|
114
112
|
g.productPriceCurrencyLocationControlValue
|
|
115
113
|
),
|
|
116
|
-
priceOrientation:
|
|
117
|
-
quantityControlEnabled: t(
|
|
118
|
-
buttonLink:
|
|
119
|
-
imageLink:
|
|
120
|
-
buttonLabel:
|
|
121
|
-
buttonFullWidth: t(
|
|
122
|
-
imageVisible: t(
|
|
123
|
-
nameVisible: t(
|
|
124
|
-
quantityVisible: t(
|
|
125
|
-
priceVisible: t(
|
|
126
|
-
originalPriceVisible: t(
|
|
127
|
-
buttonVisible: t(
|
|
114
|
+
priceOrientation: e["data-product_original_price_control_orientation"] || "horizontal",
|
|
115
|
+
quantityControlEnabled: t(e["data-product_quantity_control_enabled"], !0),
|
|
116
|
+
buttonLink: r(e["data-product_button_link"], g.productButtonLinkControlValue),
|
|
117
|
+
imageLink: r(e["data-product_image_link"], g.productImageLinkControlValue),
|
|
118
|
+
buttonLabel: r(e["data-product_button_control_label"], "Buy"),
|
|
119
|
+
buttonFullWidth: t(e["data-product_button_control_atw"], !0),
|
|
120
|
+
imageVisible: t(e["data-product_image_control_enabled"], !0),
|
|
121
|
+
nameVisible: t(e["data-product_name_control_enabled"], !0),
|
|
122
|
+
quantityVisible: t(e["data-product_quantity_control_enabled"], !0),
|
|
123
|
+
priceVisible: t(e["data-product_price_control_enabled"], !0),
|
|
124
|
+
originalPriceVisible: t(e["data-product_original_price_control_enabled"], !0),
|
|
125
|
+
buttonVisible: t(e["data-product_button_control_enabled"], !0)
|
|
128
126
|
};
|
|
129
127
|
}
|
|
130
|
-
const
|
|
128
|
+
const O = {
|
|
131
129
|
ins_apr: "CART_ITEMS",
|
|
132
130
|
browsed_item: "BROWSED_ITEMS",
|
|
133
131
|
purchased_item: "PURCHASED_ITEMS"
|
|
134
132
|
};
|
|
135
|
-
function
|
|
136
|
-
const
|
|
133
|
+
function $(e, t) {
|
|
134
|
+
const r = {
|
|
137
135
|
CART_ITEMS: `{{Abandoned Cart Item (${t}) Image}}`,
|
|
138
136
|
BROWSED_ITEMS: `{{Browsed Item (${t}) Image}}`,
|
|
139
137
|
PURCHASED_ITEMS: `{{Purchased Item (${t}) Image}}`
|
|
140
138
|
};
|
|
141
|
-
return
|
|
139
|
+
return r[e] || r.CART_ITEMS;
|
|
142
140
|
}
|
|
143
|
-
function
|
|
144
|
-
const
|
|
141
|
+
function x(e, t) {
|
|
142
|
+
const r = {
|
|
145
143
|
CART_ITEMS: `{{Abandoned Cart Item (${t}) Url}}`,
|
|
146
144
|
BROWSED_ITEMS: `{{Browsed Item (${t}) Url}}`,
|
|
147
145
|
PURCHASED_ITEMS: `{{Purchased Item (${t}) Url}}`
|
|
148
146
|
};
|
|
149
|
-
return
|
|
147
|
+
return r[e] || r.CART_ITEMS;
|
|
150
148
|
}
|
|
151
|
-
class
|
|
149
|
+
class V {
|
|
152
150
|
constructor() {
|
|
153
151
|
M(this, "parser");
|
|
154
152
|
this.parser = new DOMParser();
|
|
155
153
|
}
|
|
156
154
|
migrate(t) {
|
|
157
155
|
try {
|
|
158
|
-
let
|
|
159
|
-
|
|
160
|
-
const l = this.parser.parseFromString(
|
|
156
|
+
let r = this.removeJinjaConditionals(t);
|
|
157
|
+
r = this.replaceTemplateVariables(r);
|
|
158
|
+
const l = this.parser.parseFromString(r, "text/html"), i = l.querySelectorAll(
|
|
161
159
|
"td.esd-cart-items-block, td.esd-browsed-items-block, td.esd-purchased-items-block"
|
|
162
160
|
);
|
|
163
|
-
return
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
formattedPrice: e.formattedPrice,
|
|
173
|
-
configBlockAttributes: e.configBlockAttributes,
|
|
161
|
+
return i.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), r) : (i.forEach((n) => {
|
|
162
|
+
const o = this.extractConfiguration(n), a = K({
|
|
163
|
+
orientation: o.orientation,
|
|
164
|
+
itemsType: o.itemsType,
|
|
165
|
+
itemId: o.itemId,
|
|
166
|
+
currencySymbol: o.currencySymbol,
|
|
167
|
+
currencyLocation: o.currencyLocation,
|
|
168
|
+
formattedPrice: o.formattedPrice,
|
|
169
|
+
configBlockAttributes: o.configBlockAttributes,
|
|
174
170
|
migrate: !0,
|
|
175
|
-
nameStyles:
|
|
176
|
-
buttonStyles:
|
|
177
|
-
priceStyles:
|
|
178
|
-
originalPriceStyles:
|
|
179
|
-
quantityStyles:
|
|
180
|
-
nodeConfig: R(
|
|
181
|
-
}),
|
|
182
|
-
`<table><tbody><tr>${
|
|
171
|
+
nameStyles: o.nameStyles,
|
|
172
|
+
buttonStyles: o.buttonStyles,
|
|
173
|
+
priceStyles: o.priceStyles,
|
|
174
|
+
originalPriceStyles: o.originalPriceStyles,
|
|
175
|
+
quantityStyles: o.quantityStyles,
|
|
176
|
+
nodeConfig: R(o.configBlockAttributes)
|
|
177
|
+
}), c = this.parser.parseFromString(
|
|
178
|
+
`<table><tbody><tr>${a}</tr></tbody></table>`,
|
|
183
179
|
"text/html"
|
|
184
180
|
).querySelector("td");
|
|
185
|
-
if (
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
const
|
|
189
|
-
|
|
181
|
+
if (c && n.parentNode) {
|
|
182
|
+
const f = R(o.configBlockAttributes);
|
|
183
|
+
c.setAttribute("esd-ext-config", JSON.stringify(f));
|
|
184
|
+
const d = c.querySelector("esd-config-block");
|
|
185
|
+
d && d.remove(), n.parentNode.replaceChild(c, n);
|
|
190
186
|
}
|
|
191
187
|
}), l.documentElement.outerHTML);
|
|
192
|
-
} catch (
|
|
193
|
-
return console.error("ItemsBlockMigrator failed:",
|
|
188
|
+
} catch (r) {
|
|
189
|
+
return console.error("ItemsBlockMigrator failed:", r), t;
|
|
194
190
|
}
|
|
195
191
|
}
|
|
196
192
|
/**
|
|
@@ -201,18 +197,18 @@ class z {
|
|
|
201
197
|
*/
|
|
202
198
|
extractConfiguration(t) {
|
|
203
199
|
var C, D, P;
|
|
204
|
-
const
|
|
200
|
+
const r = ((C = t.querySelector("[data-type]")) == null ? void 0 : C.getAttribute("data-type")) || "CART_ITEMS", l = ((D = t.querySelector("[data-number]")) == null ? void 0 : D.getAttribute("data-number")) || "1", i = parseInt(l) - 1, n = T[r], o = ((P = n == null ? void 0 : n[i]) == null ? void 0 : P.value) || n[0].value, a = t.querySelector('[product-attr="price"]'), _ = (a == null ? void 0 : a.getAttribute("data-currency_symbol")) || "USD", f = ((a == null ? void 0 : a.getAttribute("data-curency")) || "before") === "after" ? "1" : "0", d = (a == null ? void 0 : a.getAttribute("data-formated")) !== "false", s = this.extractConfigBlockAttributes(t, r, l), S = s["data-card_orientation_control_value"];
|
|
205
201
|
let b;
|
|
206
202
|
S ? b = S === "horizontal" ? "horizontal" : "vertical" : b = t.querySelector('[colspan="2"]') !== null ? "vertical" : "horizontal";
|
|
207
|
-
const
|
|
203
|
+
const p = t.querySelector('a[product-attr="name"]'), I = (p == null ? void 0 : p.getAttribute("style")) || void 0, y = t.querySelector('a[product-attr="button"]'), m = (y == null ? void 0 : y.getAttribute("style")) || void 0, h = (a == null ? void 0 : a.getAttribute("style")) || void 0, A = t.querySelector("p.original-price"), k = (A == null ? void 0 : A.getAttribute("style")) || void 0, E = t.querySelector('[product-attr="quantity"]'), L = (E == null ? void 0 : E.getAttribute("style")) || void 0;
|
|
208
204
|
return {
|
|
209
205
|
orientation: b,
|
|
210
|
-
itemsType:
|
|
211
|
-
itemId:
|
|
212
|
-
currencySymbol:
|
|
213
|
-
currencyLocation:
|
|
214
|
-
formattedPrice:
|
|
215
|
-
configBlockAttributes:
|
|
206
|
+
itemsType: r,
|
|
207
|
+
itemId: o,
|
|
208
|
+
currencySymbol: _,
|
|
209
|
+
currencyLocation: f,
|
|
210
|
+
formattedPrice: d,
|
|
211
|
+
configBlockAttributes: s,
|
|
216
212
|
nameStyles: I,
|
|
217
213
|
buttonStyles: m,
|
|
218
214
|
priceStyles: h,
|
|
@@ -227,27 +223,27 @@ class z {
|
|
|
227
223
|
* @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
|
|
228
224
|
* @param itemNumber - The item number (1-based index)
|
|
229
225
|
*/
|
|
230
|
-
extractConfigBlockAttributes(t,
|
|
231
|
-
const
|
|
232
|
-
if (!
|
|
226
|
+
extractConfigBlockAttributes(t, r, l) {
|
|
227
|
+
const i = t.querySelector("esd-config-block"), n = {};
|
|
228
|
+
if (!i)
|
|
233
229
|
return this.getDefaultConfigBlockAttributes();
|
|
234
|
-
if (Array.from(
|
|
235
|
-
|
|
230
|
+
if (Array.from(i.attributes).forEach((a) => {
|
|
231
|
+
a.name.startsWith("data-") && (n[a.name] = a.value);
|
|
236
232
|
}), n["data-cart_items_select_control_value"]) {
|
|
237
|
-
const
|
|
238
|
-
if (/^\d+$/.test(
|
|
239
|
-
const
|
|
240
|
-
|
|
233
|
+
const a = n["data-cart_items_select_control_value"];
|
|
234
|
+
if (/^\d+$/.test(a)) {
|
|
235
|
+
const _ = parseInt(a) - 1, c = T[r];
|
|
236
|
+
c && c[_] && (n["data-cart_items_select_control_value"] = c[_].value);
|
|
241
237
|
}
|
|
242
238
|
}
|
|
243
239
|
if (n["data-product_price_control_curency"]) {
|
|
244
|
-
const
|
|
245
|
-
let
|
|
246
|
-
|
|
240
|
+
const a = n["data-product_price_control_curency"];
|
|
241
|
+
let _ = a;
|
|
242
|
+
a === "before" ? _ = "0" : a === "after" && (_ = "1"), n["data-product_price_control_curency"] = _, n["data-product_price_currency_location"] = _;
|
|
247
243
|
}
|
|
248
244
|
(!n["data-product_price_control_currency_symbol"] || n["data-product_price_control_currency_symbol"].trim() === "") && (n["data-product_price_control_currency_symbol"] = "USD");
|
|
249
|
-
const
|
|
250
|
-
return
|
|
245
|
+
const o = { ...this.getDefaultConfigBlockAttributes(), ...n };
|
|
246
|
+
return o["data-type"] = r, o["data-source"] = r, o["data-product_image_link"] = $(r, l), o["data-product_button_link"] = x(r, l), o;
|
|
251
247
|
}
|
|
252
248
|
/**
|
|
253
249
|
* Returns default esd-config-block attributes based on the old template structure
|
|
@@ -307,17 +303,17 @@ class z {
|
|
|
307
303
|
* contains display condition Jinja scripts that should NOT be removed.
|
|
308
304
|
*/
|
|
309
305
|
removeJinjaConditionals(t) {
|
|
310
|
-
const
|
|
311
|
-
let
|
|
312
|
-
return
|
|
306
|
+
const r = "__ESD_DISPLAY_CONDITIONS_PLACEHOLDER__", l = t.match(/esd-custom-display-conditions="[^"]*"/);
|
|
307
|
+
let i = l ? t.replace(l[0], r) : t;
|
|
308
|
+
return i = i.replace(
|
|
313
309
|
/\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_total_product_kind\s*(>|>)\s*\d+\s*%\}/g,
|
|
314
310
|
""
|
|
315
|
-
),
|
|
311
|
+
), i = i.replace(
|
|
316
312
|
/\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_price_\d+\s*(!=|!=)\s*\1_originalprice_\d+\s*%\}/g,
|
|
317
313
|
""
|
|
318
|
-
),
|
|
314
|
+
), i = i.replace(/\{%\s*endif\s*%\}/g, ""), l && (i = i.replace(r, l[0])), i = i.replace(/\n\s*\n\s*\n/g, `
|
|
319
315
|
|
|
320
|
-
`),
|
|
316
|
+
`), i;
|
|
321
317
|
}
|
|
322
318
|
/**
|
|
323
319
|
* Replaces template variables with default values from productPairs
|
|
@@ -329,32 +325,32 @@ class z {
|
|
|
329
325
|
* - {{purchased_item_formattedprice_5}} → '1,490.49' (PURCHASED_ITEMS)
|
|
330
326
|
*/
|
|
331
327
|
replaceTemplateVariables(t) {
|
|
332
|
-
const { PAIRS_FOR_EXTENSION:
|
|
333
|
-
return t.replace(/{{([^}]+)}}/g, (l,
|
|
334
|
-
const n =
|
|
328
|
+
const { PAIRS_FOR_EXTENSION: r } = U;
|
|
329
|
+
return t.replace(/{{([^}]+)}}/g, (l, i) => {
|
|
330
|
+
const n = i.match(/^(ins_apr|browsed_item|purchased_item)_([a-z_]+)_(\d+)$/);
|
|
335
331
|
if (!n)
|
|
336
332
|
return l;
|
|
337
|
-
const [,
|
|
338
|
-
if (!
|
|
339
|
-
return console.warn(`Unknown variable prefix: ${
|
|
340
|
-
const
|
|
341
|
-
if (!
|
|
342
|
-
return console.warn(`Unknown variable suffix mapping for: ${
|
|
343
|
-
const { pairsKey:
|
|
344
|
-
if (!
|
|
345
|
-
return console.warn(`No data found for: ${
|
|
333
|
+
const [, o, a, _] = n, c = O[o];
|
|
334
|
+
if (!c)
|
|
335
|
+
return console.warn(`Unknown variable prefix: ${o}`), l;
|
|
336
|
+
const f = w[a];
|
|
337
|
+
if (!f)
|
|
338
|
+
return console.warn(`Unknown variable suffix mapping for: ${a}`), l;
|
|
339
|
+
const { pairsKey: d, defaultKey: s, isArray: S } = f, p = r[d][c];
|
|
340
|
+
if (!p)
|
|
341
|
+
return console.warn(`No data found for: ${d}.${c}`), l;
|
|
346
342
|
if (S) {
|
|
347
|
-
const
|
|
348
|
-
return Array.isArray(m) && m[
|
|
343
|
+
const y = parseInt(_) - 1, m = p[s];
|
|
344
|
+
return Array.isArray(m) && m[y] ? m[y] : (console.warn(`Array value not found: ${d}.${c}.${s}[${y}]`), l);
|
|
349
345
|
}
|
|
350
|
-
const I =
|
|
351
|
-
return I !== void 0 ? String(I) : (console.warn(`Default value not found: ${
|
|
346
|
+
const I = p[s];
|
|
347
|
+
return I !== void 0 ? String(I) : (console.warn(`Default value not found: ${d}.${c}.${s}`), l);
|
|
352
348
|
});
|
|
353
349
|
}
|
|
354
350
|
}
|
|
355
|
-
function
|
|
356
|
-
return new
|
|
351
|
+
function G(e) {
|
|
352
|
+
return new V().migrate(e);
|
|
357
353
|
}
|
|
358
354
|
export {
|
|
359
|
-
|
|
355
|
+
G as migrateItemsBlock
|
|
360
356
|
};
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
var h = Object.defineProperty;
|
|
2
|
-
var T = (
|
|
3
|
-
var
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
import { getDefaultProducts as $ } from "../../extensions/Blocks/Recommendation/templates/utils.js";
|
|
8
|
-
class B {
|
|
2
|
+
var T = (A, e, t) => e in A ? h(A, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : A[e] = t;
|
|
3
|
+
var m = (A, e, t) => T(A, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
import P, { prepareProductRows as S } from "../../extensions/Blocks/Recommendation/templates/grid/migration.js";
|
|
5
|
+
import { getDefaultProducts as q } from "../../extensions/Blocks/Recommendation/templates/utils.js";
|
|
6
|
+
class w {
|
|
9
7
|
constructor() {
|
|
10
|
-
|
|
8
|
+
m(this, "parser");
|
|
11
9
|
this.parser = new DOMParser();
|
|
12
10
|
}
|
|
13
11
|
migrate(e) {
|
|
@@ -15,14 +13,12 @@ class B {
|
|
|
15
13
|
const t = this.parser.parseFromString(e, "text/html"), s = t.querySelectorAll(
|
|
16
14
|
'td.ins-recommendation-v3-block-1, td.product-block[esd-handler-name*="EmailRecommendationV3"]'
|
|
17
15
|
);
|
|
18
|
-
return
|
|
19
|
-
i.
|
|
20
|
-
|
|
21
|
-
const r = i.getAttribute("id"), n = this.extractBgColor(i), u = this.extractTitle(i), c = this.extractProductRows(i), l = P.replace("{-{-TITLE-}-}", u).replace("{-{-PRODUCT_ROWS-}-}", c), a = this.parser.parseFromString(
|
|
22
|
-
`<table id="tempDoc"><tbody><tr>${l}</tr></tbody></table>`,
|
|
16
|
+
return s.length === 0 ? e : (s.forEach((o) => {
|
|
17
|
+
const l = o.getAttribute("id"), r = this.extractBgColor(o), i = this.extractTitle(o), u = this.extractProductRows(o), c = P.replace("{-{-TITLE-}-}", i).replace("{-{-PRODUCT_ROWS-}-}", u), a = this.parser.parseFromString(
|
|
18
|
+
`<table id="tempDoc"><tbody><tr>${c}</tr></tbody></table>`,
|
|
23
19
|
"text/html"
|
|
24
20
|
).querySelector(".recommendation-block-v2");
|
|
25
|
-
a &&
|
|
21
|
+
a && o.parentNode && (l && a.setAttribute("id", l), r && a.setAttribute("bgcolor", r), o.parentNode.replaceChild(a, o));
|
|
26
22
|
}), t.documentElement.outerHTML);
|
|
27
23
|
} catch (t) {
|
|
28
24
|
return console.error("RecommendationMigrator failed:", t), e;
|
|
@@ -68,7 +64,7 @@ class B {
|
|
|
68
64
|
* @returns HTML string for the title block
|
|
69
65
|
*/
|
|
70
66
|
extractTitle(e) {
|
|
71
|
-
var
|
|
67
|
+
var a, g;
|
|
72
68
|
const t = e.querySelector(".ext-recommendation-title");
|
|
73
69
|
if (!t)
|
|
74
70
|
return this.buildTitleBlock({
|
|
@@ -80,7 +76,7 @@ class B {
|
|
|
80
76
|
});
|
|
81
77
|
const s = t.querySelector("p");
|
|
82
78
|
if (!s) {
|
|
83
|
-
const p = ((
|
|
79
|
+
const p = ((a = t.textContent) == null ? void 0 : a.trim()) || "You May Also Like!", b = t.getAttribute("align") || "center";
|
|
84
80
|
return this.buildTitleBlock({
|
|
85
81
|
text: p,
|
|
86
82
|
isBold: !0,
|
|
@@ -89,13 +85,13 @@ class B {
|
|
|
89
85
|
styles: "font-size: 28px; color: #333333;"
|
|
90
86
|
});
|
|
91
87
|
}
|
|
92
|
-
const o = ((
|
|
88
|
+
const o = ((g = s.textContent) == null ? void 0 : g.trim()) || "You May Also Like!", l = t.getAttribute("align") || s.getAttribute("align") || "center", r = s.getAttribute("style") || "", i = /font-weight\s*:\s*bold/i.test(r) || !!s.querySelector("b, strong"), u = /font-style\s*:\s*italic/i.test(r) || !!s.querySelector("i, em"), c = this.removeStyleProperties(r, ["font-weight", "font-style"]), n = this.convertInlineToBlock(c);
|
|
93
89
|
return this.buildTitleBlock({
|
|
94
90
|
text: o,
|
|
95
|
-
isBold:
|
|
91
|
+
isBold: i,
|
|
96
92
|
isItalic: u,
|
|
97
|
-
align:
|
|
98
|
-
styles:
|
|
93
|
+
align: l,
|
|
94
|
+
styles: n
|
|
99
95
|
});
|
|
100
96
|
}
|
|
101
97
|
/**
|
|
@@ -107,8 +103,8 @@ class B {
|
|
|
107
103
|
const t = this.extractProductConfig(e);
|
|
108
104
|
if (!t)
|
|
109
105
|
return console.warn("[RecommendationMigrator] No product config found, using defaults"), this.generateProductRows(6, 3, {});
|
|
110
|
-
const { totalCount: s, productsPerRow: o } = t,
|
|
111
|
-
return this.generateProductRows(s, o,
|
|
106
|
+
const { totalCount: s, productsPerRow: o } = t, l = this.extractProductStyles(e);
|
|
107
|
+
return this.generateProductRows(s, o, l);
|
|
112
108
|
}
|
|
113
109
|
/**
|
|
114
110
|
* Extracts Stripo padding/margin utility classes from a class string
|
|
@@ -156,12 +152,12 @@ class B {
|
|
|
156
152
|
* @returns HTML string for product rows with applied styles
|
|
157
153
|
*/
|
|
158
154
|
generateProductRows(e, t, s) {
|
|
159
|
-
const o =
|
|
160
|
-
for (let
|
|
161
|
-
const u = o[
|
|
162
|
-
|
|
155
|
+
const o = q(), l = [];
|
|
156
|
+
for (let i = 0; i < e; i++) {
|
|
157
|
+
const u = o[i % o.length];
|
|
158
|
+
l.push({ ...u });
|
|
163
159
|
}
|
|
164
|
-
let r =
|
|
160
|
+
let r = S(l, t);
|
|
165
161
|
return r = this.applyExtractedStyles(r, s), r;
|
|
166
162
|
}
|
|
167
163
|
/**
|
|
@@ -175,30 +171,30 @@ class B {
|
|
|
175
171
|
return console.warn("[RecommendationMigrator] No product card found, using default styles"), t;
|
|
176
172
|
const o = this.extractCardBgColor(s);
|
|
177
173
|
o && (t.cardBgColor = o);
|
|
178
|
-
const
|
|
179
|
-
if (
|
|
180
|
-
const
|
|
181
|
-
t.imageWidth =
|
|
174
|
+
const l = s.querySelector(".ext-product-image");
|
|
175
|
+
if (l) {
|
|
176
|
+
const n = l.querySelector("img"), a = n == null ? void 0 : n.getAttribute("width"), g = l.getAttribute("style") || "", p = l.getAttribute("align") || "center", b = l.getAttribute("class") || "", d = this.extractStripoClasses(b);
|
|
177
|
+
t.imageWidth = a || "120", t.imageAlign = p, t.imageTdStyle = g, t.imageClasses = d;
|
|
182
178
|
}
|
|
183
179
|
const r = s.querySelector(".ext-product-name");
|
|
184
180
|
if (r) {
|
|
185
|
-
const
|
|
186
|
-
t.nameStyle =
|
|
181
|
+
const n = r.querySelector("p"), a = (n == null ? void 0 : n.getAttribute("style")) || "", g = r.getAttribute("align") || "center", p = r.getAttribute("style") || "", b = r.getAttribute("class") || "", d = this.extractStripoClasses(b);
|
|
182
|
+
t.nameStyle = a, t.nameAlign = g, t.nameTdStyle = p, t.nameClasses = d;
|
|
187
183
|
}
|
|
188
|
-
const
|
|
189
|
-
if (
|
|
190
|
-
const
|
|
191
|
-
t.priceStyle =
|
|
184
|
+
const i = s.querySelector(".ext-product-price");
|
|
185
|
+
if (i) {
|
|
186
|
+
const n = i.querySelector("p"), a = (n == null ? void 0 : n.getAttribute("style")) || "", g = i.getAttribute("align") || "center", p = i.getAttribute("style") || "", b = i.getAttribute("class") || "", d = this.extractStripoClasses(b);
|
|
187
|
+
t.priceStyle = a, t.priceAlign = g, t.priceTdStyle = p, t.priceClasses = d;
|
|
192
188
|
}
|
|
193
189
|
const u = s.querySelector(".ext-product-original-price");
|
|
194
190
|
if (u) {
|
|
195
|
-
const
|
|
196
|
-
t.oldPriceStyle =
|
|
191
|
+
const n = u.querySelector("p"), a = (n == null ? void 0 : n.getAttribute("style")) || "", g = u.getAttribute("align") || "center", p = u.getAttribute("style") || "", b = u.getAttribute("class") || "", d = this.extractStripoClasses(b);
|
|
192
|
+
t.oldPriceStyle = a, t.oldPriceAlign = g, t.oldPriceTdStyle = p, t.oldPriceClasses = d;
|
|
197
193
|
}
|
|
198
194
|
const c = s.querySelector(".ext-product-button");
|
|
199
195
|
if (c) {
|
|
200
|
-
const
|
|
201
|
-
t.buttonBorderStyle =
|
|
196
|
+
const n = c.querySelector(".es-button-border"), a = c.querySelector("a.es-button"), g = (n == null ? void 0 : n.getAttribute("style")) || "", p = (a == null ? void 0 : a.getAttribute("style")) || "", b = c.getAttribute("align") || "center", d = c.getAttribute("style") || "", f = c.getAttribute("class") || "", C = this.extractStripoClasses(f), y = ((c == null ? void 0 : c.textContent) || "").trim();
|
|
197
|
+
t.buttonBorderStyle = g, t.buttonLinkStyle = p, t.buttonAlign = b, t.buttonTdStyle = d, t.buttonClasses = C, t.buttonText = y;
|
|
202
198
|
}
|
|
203
199
|
return t;
|
|
204
200
|
}
|
|
@@ -219,36 +215,36 @@ class B {
|
|
|
219
215
|
const c = `${r.getAttribute("class") || ""} ${t.imageClasses}`.trim();
|
|
220
216
|
r.setAttribute("class", c);
|
|
221
217
|
}
|
|
222
|
-
const
|
|
223
|
-
|
|
218
|
+
const i = r.querySelector("img");
|
|
219
|
+
i && t.imageWidth && i.setAttribute("width", t.imageWidth);
|
|
224
220
|
}), (t.nameStyle || t.nameAlign || t.nameTdStyle || t.nameClasses) && s.querySelectorAll(".product-name").forEach((r) => {
|
|
225
221
|
if (t.nameAlign && r.setAttribute("align", t.nameAlign), t.nameTdStyle && r.setAttribute("style", t.nameTdStyle), t.nameClasses) {
|
|
226
222
|
const c = `${r.getAttribute("class") || ""} ${t.nameClasses}`.trim();
|
|
227
223
|
r.setAttribute("class", c);
|
|
228
224
|
}
|
|
229
|
-
const
|
|
230
|
-
|
|
225
|
+
const i = r.querySelector("p");
|
|
226
|
+
i && t.nameStyle && i.setAttribute("style", t.nameStyle);
|
|
231
227
|
}), (t.priceStyle || t.priceAlign || t.priceTdStyle || t.priceClasses) && s.querySelectorAll(".product-price").forEach((r) => {
|
|
232
228
|
if (t.priceAlign && r.setAttribute("align", t.priceAlign), t.priceTdStyle && r.setAttribute("style", t.priceTdStyle), t.priceClasses) {
|
|
233
229
|
const c = `${r.getAttribute("class") || ""} ${t.priceClasses}`.trim();
|
|
234
230
|
r.setAttribute("class", c);
|
|
235
231
|
}
|
|
236
|
-
const
|
|
237
|
-
|
|
232
|
+
const i = r.querySelector("p");
|
|
233
|
+
i && t.priceStyle && i.setAttribute("style", t.priceStyle);
|
|
238
234
|
}), (t.oldPriceStyle || t.oldPriceAlign || t.oldPriceTdStyle || t.oldPriceClasses) && s.querySelectorAll(".product-old-price").forEach((r) => {
|
|
239
235
|
if (t.oldPriceAlign && r.setAttribute("align", t.oldPriceAlign), t.oldPriceTdStyle && r.setAttribute("style", t.oldPriceTdStyle), t.oldPriceClasses) {
|
|
240
236
|
const c = `${r.getAttribute("class") || ""} ${t.oldPriceClasses}`.trim();
|
|
241
237
|
r.setAttribute("class", c);
|
|
242
238
|
}
|
|
243
|
-
const
|
|
244
|
-
|
|
239
|
+
const i = r.querySelector("p");
|
|
240
|
+
i && t.oldPriceStyle && i.setAttribute("style", t.oldPriceStyle);
|
|
245
241
|
}), (t.buttonBorderStyle || t.buttonLinkStyle || t.buttonAlign || t.buttonTdStyle || t.buttonClasses) && s.querySelectorAll(".product-button").forEach((r) => {
|
|
246
242
|
if (t.buttonAlign && r.setAttribute("align", t.buttonAlign), t.buttonTdStyle && r.setAttribute("style", t.buttonTdStyle), t.buttonClasses) {
|
|
247
|
-
const
|
|
248
|
-
r.setAttribute("class",
|
|
243
|
+
const n = `${r.getAttribute("class") || ""} ${t.buttonClasses}`.trim();
|
|
244
|
+
r.setAttribute("class", n);
|
|
249
245
|
}
|
|
250
|
-
const
|
|
251
|
-
|
|
246
|
+
const i = r.querySelector(".es-button-border");
|
|
247
|
+
i && t.buttonBorderStyle && i.setAttribute("style", t.buttonBorderStyle);
|
|
252
248
|
const u = r.querySelector("a.es-button");
|
|
253
249
|
u && (t.buttonLinkStyle && u.setAttribute("style", t.buttonLinkStyle), t.buttonText && (u.textContent = t.buttonText));
|
|
254
250
|
});
|
|
@@ -274,8 +270,8 @@ class B {
|
|
|
274
270
|
* Removes specified style properties from a style string
|
|
275
271
|
*/
|
|
276
272
|
removeStyleProperties(e, t) {
|
|
277
|
-
return e ? t.reduce((o,
|
|
278
|
-
const r = new RegExp(`${
|
|
273
|
+
return e ? t.reduce((o, l) => {
|
|
274
|
+
const r = new RegExp(`${l}\\s*:\\s*[^;]*;?`, "gi");
|
|
279
275
|
return o.replace(r, "");
|
|
280
276
|
}, e).replace(/;\s*;/g, ";").replace(/^;|;$/g, "").trim() : "";
|
|
281
277
|
}
|
|
@@ -289,9 +285,9 @@ class B {
|
|
|
289
285
|
return /display\s*:/i.test(t) || (t = t ? `${t}; display: block` : "display: block"), t.replace(/;\s*;/g, ";").replace(/^;|;$/g, "").replace(/"/g, "'").trim();
|
|
290
286
|
}
|
|
291
287
|
}
|
|
292
|
-
function
|
|
293
|
-
return new
|
|
288
|
+
function k(A) {
|
|
289
|
+
return new w().migrate(A);
|
|
294
290
|
}
|
|
295
291
|
export {
|
|
296
|
-
|
|
292
|
+
k as migrateRecommendation
|
|
297
293
|
};
|