@useinsider/guido 2.1.0-beta.d4a1ced → 2.1.0-beta.d770bbd
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/organisms/base/Toaster.vue.js +4 -4
- package/dist/components/organisms/base/Toaster.vue2.js +12 -9
- package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +5 -5
- package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue2.js +2 -2
- package/dist/components/organisms/header/EditorActions.vue.js +8 -10
- package/dist/components/organisms/header/EditorActions.vue2.js +31 -40
- package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +1 -1
- package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +19 -19
- package/dist/config/i18n/en/labels.json.js +3 -8
- package/dist/config/migrator/itemsBlockMigrator.js +134 -136
- package/dist/config/migrator/recommendationMigrator.js +40 -42
- package/dist/extensions/Blocks/Items/block.js +25 -45
- package/dist/extensions/Blocks/Items/iconsRegistry.js +5 -6
- package/dist/extensions/Blocks/Items/items.css.js +0 -48
- package/dist/extensions/Blocks/Recommendation/block.js +29 -49
- package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +3 -4
- package/dist/extensions/Blocks/Recommendation/recommendation.css.js +0 -48
- package/dist/extensions/Blocks/Unsubscribe/block.js +29 -29
- package/dist/extensions/Blocks/Unsubscribe/control.js +12 -9
- package/dist/extensions/Blocks/Unsubscribe/elements/preview.js +13 -11
- package/dist/extensions/Blocks/Unsubscribe/styles.css.js +31 -1
- package/dist/extensions/Blocks/common-control.js +4 -12
- package/dist/guido.css +1 -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 +0 -1
- package/dist/src/extensions/Blocks/Recommendation/block.d.ts +0 -1
- package/dist/src/extensions/Blocks/Unsubscribe/control.d.ts +1 -0
- package/dist/src/extensions/Blocks/common-control.d.ts +0 -5
- package/dist/stores/unsubscribe.js +37 -34
- package/package.json +2 -2
- package/dist/components/organisms/header/MigrationConfirmModal.vue.js +0 -17
- package/dist/components/organisms/header/MigrationConfirmModal.vue2.js +0 -41
- package/dist/extensions/Blocks/common-icons.js +0 -39
- package/dist/src/components/organisms/header/MigrationConfirmModal.vue.d.ts +0 -6
- package/dist/src/extensions/Blocks/common-icons.d.ts +0 -1
- package/dist/src/stores/template.d.ts +0 -3
- package/dist/stores/template.js +0 -9
|
@@ -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,122 +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
|
|
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
|
-
)
|
|
163
|
-
return
|
|
164
|
-
const
|
|
165
|
-
orientation:
|
|
166
|
-
itemsType:
|
|
167
|
-
itemId:
|
|
168
|
-
currencySymbol:
|
|
169
|
-
currencyLocation:
|
|
170
|
-
formattedPrice:
|
|
171
|
-
configBlockAttributes:
|
|
160
|
+
);
|
|
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,
|
|
172
170
|
migrate: !0,
|
|
173
|
-
nameStyles:
|
|
174
|
-
buttonStyles:
|
|
175
|
-
priceStyles:
|
|
176
|
-
originalPriceStyles:
|
|
177
|
-
quantityStyles:
|
|
178
|
-
nodeConfig: R(
|
|
179
|
-
}),
|
|
180
|
-
`<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>`,
|
|
181
179
|
"text/html"
|
|
182
180
|
).querySelector("td");
|
|
183
|
-
if (
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
const
|
|
187
|
-
|
|
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);
|
|
188
186
|
}
|
|
189
|
-
}),
|
|
190
|
-
} catch (
|
|
191
|
-
return console.error("ItemsBlockMigrator failed:",
|
|
187
|
+
}), l.documentElement.outerHTML);
|
|
188
|
+
} catch (r) {
|
|
189
|
+
return console.error("ItemsBlockMigrator failed:", r), t;
|
|
192
190
|
}
|
|
193
191
|
}
|
|
194
192
|
/**
|
|
@@ -199,18 +197,18 @@ class z {
|
|
|
199
197
|
*/
|
|
200
198
|
extractConfiguration(t) {
|
|
201
199
|
var C, D, P;
|
|
202
|
-
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"];
|
|
203
201
|
let b;
|
|
204
202
|
S ? b = S === "horizontal" ? "horizontal" : "vertical" : b = t.querySelector('[colspan="2"]') !== null ? "vertical" : "horizontal";
|
|
205
|
-
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;
|
|
206
204
|
return {
|
|
207
205
|
orientation: b,
|
|
208
|
-
itemsType:
|
|
209
|
-
itemId:
|
|
210
|
-
currencySymbol:
|
|
211
|
-
currencyLocation:
|
|
212
|
-
formattedPrice:
|
|
213
|
-
configBlockAttributes:
|
|
206
|
+
itemsType: r,
|
|
207
|
+
itemId: o,
|
|
208
|
+
currencySymbol: _,
|
|
209
|
+
currencyLocation: f,
|
|
210
|
+
formattedPrice: d,
|
|
211
|
+
configBlockAttributes: s,
|
|
214
212
|
nameStyles: I,
|
|
215
213
|
buttonStyles: m,
|
|
216
214
|
priceStyles: h,
|
|
@@ -225,27 +223,27 @@ class z {
|
|
|
225
223
|
* @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
|
|
226
224
|
* @param itemNumber - The item number (1-based index)
|
|
227
225
|
*/
|
|
228
|
-
extractConfigBlockAttributes(t,
|
|
229
|
-
const
|
|
230
|
-
if (!
|
|
226
|
+
extractConfigBlockAttributes(t, r, l) {
|
|
227
|
+
const i = t.querySelector("esd-config-block"), n = {};
|
|
228
|
+
if (!i)
|
|
231
229
|
return this.getDefaultConfigBlockAttributes();
|
|
232
|
-
if (Array.from(
|
|
233
|
-
|
|
230
|
+
if (Array.from(i.attributes).forEach((a) => {
|
|
231
|
+
a.name.startsWith("data-") && (n[a.name] = a.value);
|
|
234
232
|
}), n["data-cart_items_select_control_value"]) {
|
|
235
|
-
const
|
|
236
|
-
if (/^\d+$/.test(
|
|
237
|
-
const
|
|
238
|
-
|
|
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);
|
|
239
237
|
}
|
|
240
238
|
}
|
|
241
239
|
if (n["data-product_price_control_curency"]) {
|
|
242
|
-
const
|
|
243
|
-
let
|
|
244
|
-
|
|
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"] = _;
|
|
245
243
|
}
|
|
246
244
|
(!n["data-product_price_control_currency_symbol"] || n["data-product_price_control_currency_symbol"].trim() === "") && (n["data-product_price_control_currency_symbol"] = "USD");
|
|
247
|
-
const
|
|
248
|
-
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;
|
|
249
247
|
}
|
|
250
248
|
/**
|
|
251
249
|
* Returns default esd-config-block attributes based on the old template structure
|
|
@@ -305,17 +303,17 @@ class z {
|
|
|
305
303
|
* contains display condition Jinja scripts that should NOT be removed.
|
|
306
304
|
*/
|
|
307
305
|
removeJinjaConditionals(t) {
|
|
308
|
-
const
|
|
309
|
-
let
|
|
310
|
-
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(
|
|
311
309
|
/\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_total_product_kind\s*(>|>)\s*\d+\s*%\}/g,
|
|
312
310
|
""
|
|
313
|
-
),
|
|
311
|
+
), i = i.replace(
|
|
314
312
|
/\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_price_\d+\s*(!=|!=)\s*\1_originalprice_\d+\s*%\}/g,
|
|
315
313
|
""
|
|
316
|
-
),
|
|
314
|
+
), i = i.replace(/\{%\s*endif\s*%\}/g, ""), l && (i = i.replace(r, l[0])), i = i.replace(/\n\s*\n\s*\n/g, `
|
|
317
315
|
|
|
318
|
-
`),
|
|
316
|
+
`), i;
|
|
319
317
|
}
|
|
320
318
|
/**
|
|
321
319
|
* Replaces template variables with default values from productPairs
|
|
@@ -327,32 +325,32 @@ class z {
|
|
|
327
325
|
* - {{purchased_item_formattedprice_5}} → '1,490.49' (PURCHASED_ITEMS)
|
|
328
326
|
*/
|
|
329
327
|
replaceTemplateVariables(t) {
|
|
330
|
-
const { PAIRS_FOR_EXTENSION:
|
|
331
|
-
return t.replace(/{{([^}]+)}}/g, (
|
|
332
|
-
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+)$/);
|
|
333
331
|
if (!n)
|
|
334
|
-
return
|
|
335
|
-
const [,
|
|
336
|
-
if (!
|
|
337
|
-
return console.warn(`Unknown variable prefix: ${
|
|
338
|
-
const
|
|
339
|
-
if (!
|
|
340
|
-
return console.warn(`Unknown variable suffix mapping for: ${
|
|
341
|
-
const { pairsKey:
|
|
342
|
-
if (!
|
|
343
|
-
return console.warn(`No data found for: ${
|
|
332
|
+
return l;
|
|
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;
|
|
344
342
|
if (S) {
|
|
345
|
-
const
|
|
346
|
-
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);
|
|
347
345
|
}
|
|
348
|
-
const I =
|
|
349
|
-
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);
|
|
350
348
|
});
|
|
351
349
|
}
|
|
352
350
|
}
|
|
353
|
-
function
|
|
354
|
-
return new
|
|
351
|
+
function G(e) {
|
|
352
|
+
return new V().migrate(e);
|
|
355
353
|
}
|
|
356
354
|
export {
|
|
357
|
-
|
|
355
|
+
G as migrateItemsBlock
|
|
358
356
|
};
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
var h = Object.defineProperty;
|
|
2
|
-
var T = (
|
|
3
|
-
var
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
import { getDefaultProducts as B } from "../../extensions/Blocks/Recommendation/templates/utils.js";
|
|
8
|
-
class $ {
|
|
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) {
|
|
14
12
|
try {
|
|
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
|
-
)
|
|
18
|
-
return
|
|
19
|
-
const
|
|
20
|
-
`<table id="tempDoc"><tbody><tr>${
|
|
15
|
+
);
|
|
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>`,
|
|
21
19
|
"text/html"
|
|
22
20
|
).querySelector(".ins-recommendation-v3-block-v2");
|
|
23
|
-
a &&
|
|
21
|
+
a && o.parentNode && (l && a.setAttribute("id", l), r && a.setAttribute("bgcolor", r), o.parentNode.replaceChild(a, o));
|
|
24
22
|
}), t.documentElement.outerHTML);
|
|
25
23
|
} catch (t) {
|
|
26
24
|
return console.error("RecommendationMigrator failed:", t), e;
|
|
@@ -66,7 +64,7 @@ class $ {
|
|
|
66
64
|
* @returns HTML string for the title block
|
|
67
65
|
*/
|
|
68
66
|
extractTitle(e) {
|
|
69
|
-
var
|
|
67
|
+
var a, g;
|
|
70
68
|
const t = e.querySelector(".ext-recommendation-title");
|
|
71
69
|
if (!t)
|
|
72
70
|
return this.buildTitleBlock({
|
|
@@ -78,7 +76,7 @@ class $ {
|
|
|
78
76
|
});
|
|
79
77
|
const s = t.querySelector("p");
|
|
80
78
|
if (!s) {
|
|
81
|
-
const p = ((
|
|
79
|
+
const p = ((a = t.textContent) == null ? void 0 : a.trim()) || "You May Also Like!", b = t.getAttribute("align") || "center";
|
|
82
80
|
return this.buildTitleBlock({
|
|
83
81
|
text: p,
|
|
84
82
|
isBold: !0,
|
|
@@ -87,13 +85,13 @@ class $ {
|
|
|
87
85
|
styles: "font-size: 28px; color: #333333;"
|
|
88
86
|
});
|
|
89
87
|
}
|
|
90
|
-
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);
|
|
91
89
|
return this.buildTitleBlock({
|
|
92
90
|
text: o,
|
|
93
91
|
isBold: i,
|
|
94
92
|
isItalic: u,
|
|
95
|
-
align:
|
|
96
|
-
styles:
|
|
93
|
+
align: l,
|
|
94
|
+
styles: n
|
|
97
95
|
});
|
|
98
96
|
}
|
|
99
97
|
/**
|
|
@@ -105,8 +103,8 @@ class $ {
|
|
|
105
103
|
const t = this.extractProductConfig(e);
|
|
106
104
|
if (!t)
|
|
107
105
|
return console.warn("[RecommendationMigrator] No product config found, using defaults"), this.generateProductRows(6, 3, {});
|
|
108
|
-
const { totalCount: s, productsPerRow: o } = t,
|
|
109
|
-
return this.generateProductRows(s, o,
|
|
106
|
+
const { totalCount: s, productsPerRow: o } = t, l = this.extractProductStyles(e);
|
|
107
|
+
return this.generateProductRows(s, o, l);
|
|
110
108
|
}
|
|
111
109
|
/**
|
|
112
110
|
* Extracts Stripo padding/margin utility classes from a class string
|
|
@@ -154,12 +152,12 @@ class $ {
|
|
|
154
152
|
* @returns HTML string for product rows with applied styles
|
|
155
153
|
*/
|
|
156
154
|
generateProductRows(e, t, s) {
|
|
157
|
-
const o =
|
|
155
|
+
const o = q(), l = [];
|
|
158
156
|
for (let i = 0; i < e; i++) {
|
|
159
157
|
const u = o[i % o.length];
|
|
160
|
-
|
|
158
|
+
l.push({ ...u });
|
|
161
159
|
}
|
|
162
|
-
let r =
|
|
160
|
+
let r = S(l, t);
|
|
163
161
|
return r = this.applyExtractedStyles(r, s), r;
|
|
164
162
|
}
|
|
165
163
|
/**
|
|
@@ -173,30 +171,30 @@ class $ {
|
|
|
173
171
|
return console.warn("[RecommendationMigrator] No product card found, using default styles"), t;
|
|
174
172
|
const o = this.extractCardBgColor(s);
|
|
175
173
|
o && (t.cardBgColor = o);
|
|
176
|
-
const
|
|
177
|
-
if (
|
|
178
|
-
const
|
|
179
|
-
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;
|
|
180
178
|
}
|
|
181
179
|
const r = s.querySelector(".ext-product-name");
|
|
182
180
|
if (r) {
|
|
183
|
-
const
|
|
184
|
-
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;
|
|
185
183
|
}
|
|
186
184
|
const i = s.querySelector(".ext-product-price");
|
|
187
185
|
if (i) {
|
|
188
|
-
const
|
|
189
|
-
t.priceStyle =
|
|
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;
|
|
190
188
|
}
|
|
191
189
|
const u = s.querySelector(".ext-product-original-price");
|
|
192
190
|
if (u) {
|
|
193
|
-
const
|
|
194
|
-
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;
|
|
195
193
|
}
|
|
196
194
|
const c = s.querySelector(".ext-product-button");
|
|
197
195
|
if (c) {
|
|
198
|
-
const
|
|
199
|
-
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;
|
|
200
198
|
}
|
|
201
199
|
return t;
|
|
202
200
|
}
|
|
@@ -242,8 +240,8 @@ class $ {
|
|
|
242
240
|
i && t.oldPriceStyle && i.setAttribute("style", t.oldPriceStyle);
|
|
243
241
|
}), (t.buttonBorderStyle || t.buttonLinkStyle || t.buttonAlign || t.buttonTdStyle || t.buttonClasses) && s.querySelectorAll(".product-button").forEach((r) => {
|
|
244
242
|
if (t.buttonAlign && r.setAttribute("align", t.buttonAlign), t.buttonTdStyle && r.setAttribute("style", t.buttonTdStyle), t.buttonClasses) {
|
|
245
|
-
const
|
|
246
|
-
r.setAttribute("class",
|
|
243
|
+
const n = `${r.getAttribute("class") || ""} ${t.buttonClasses}`.trim();
|
|
244
|
+
r.setAttribute("class", n);
|
|
247
245
|
}
|
|
248
246
|
const i = r.querySelector(".es-button-border");
|
|
249
247
|
i && t.buttonBorderStyle && i.setAttribute("style", t.buttonBorderStyle);
|
|
@@ -272,8 +270,8 @@ class $ {
|
|
|
272
270
|
* Removes specified style properties from a style string
|
|
273
271
|
*/
|
|
274
272
|
removeStyleProperties(e, t) {
|
|
275
|
-
return e ? t.reduce((o,
|
|
276
|
-
const r = new RegExp(`${
|
|
273
|
+
return e ? t.reduce((o, l) => {
|
|
274
|
+
const r = new RegExp(`${l}\\s*:\\s*[^;]*;?`, "gi");
|
|
277
275
|
return o.replace(r, "");
|
|
278
276
|
}, e).replace(/;\s*;/g, ";").replace(/^;|;$/g, "").trim() : "";
|
|
279
277
|
}
|
|
@@ -287,9 +285,9 @@ class $ {
|
|
|
287
285
|
return /display\s*:/i.test(t) || (t = t ? `${t}; display: block` : "display: block"), t.replace(/;\s*;/g, ";").replace(/^;|;$/g, "").replace(/"/g, "'").trim();
|
|
288
286
|
}
|
|
289
287
|
}
|
|
290
|
-
function
|
|
291
|
-
return new
|
|
288
|
+
function k(A) {
|
|
289
|
+
return new w().migrate(A);
|
|
292
290
|
}
|
|
293
291
|
export {
|
|
294
|
-
|
|
292
|
+
k as migrateRecommendation
|
|
295
293
|
};
|