@useinsider/guido 2.1.0-beta.bcfc012 → 2.1.0-beta.bd5d1ea
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/README.md +41 -2
- package/dist/components/Guido.vue.js +1 -1
- package/dist/components/Guido.vue2.js +66 -66
- 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 +10 -12
- package/dist/components/organisms/header/EditorActions.vue2.js +31 -41
- package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +1 -1
- package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +19 -19
- package/dist/composables/useSave.js +16 -12
- package/dist/composables/useStripo.js +66 -62
- package/dist/composables/useStripoEventHandler.js +27 -12
- package/dist/composables/useSyncModuleExtractor.js +45 -0
- package/dist/config/i18n/en/labels.json.js +3 -8
- package/dist/config/migrator/itemsBlockMigrator.js +138 -139
- package/dist/config/migrator/recommendationMigrator.js +40 -42
- package/dist/enums/unsubscribe.js +25 -21
- package/dist/extensions/Blocks/Items/block.js +25 -45
- package/dist/extensions/Blocks/Items/iconsRegistry.js +5 -40
- 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 +2 -37
- 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/services/stripoApi.js +55 -19
- package/dist/src/@types/config/schemas.d.ts +1 -1
- package/dist/src/@types/events.d.ts +38 -2
- package/dist/src/components/Guido.vue.d.ts +2 -2
- 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/composables/useGuidoActions.d.ts +1 -1
- package/dist/src/composables/useSave.d.ts +2 -2
- package/dist/src/composables/useStripo.d.ts +2 -2
- package/dist/src/composables/useSyncModuleExtractor.d.ts +4 -0
- package/dist/src/enums/unsubscribe.d.ts +3 -0
- 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/src/mock/api/settings.d.ts +2 -0
- package/dist/src/services/stripoApi.d.ts +5 -0
- package/dist/src/stores/editor.d.ts +23 -0
- package/dist/src/utils/templatePreparation.d.ts +1 -1
- package/dist/stores/editor.js +2 -1
- package/dist/stores/unsubscribe.js +37 -34
- package/dist/utils/templatePreparation.js +1 -1
- package/package.json +2 -2
- package/dist/components/organisms/header/MigrationConfirmModal.vue.js +0 -21
- package/dist/components/organisms/header/MigrationConfirmModal.vue2.js +0 -38
- package/dist/src/components/organisms/header/MigrationConfirmModal.vue.d.ts +0 -5
- 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 O = {
|
|
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,121 +71,122 @@ const O = {
|
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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);
|
|
95
94
|
}
|
|
96
95
|
return {
|
|
97
96
|
initialized: !0,
|
|
98
|
-
blockInstanceId:
|
|
99
|
-
source:
|
|
100
|
-
type:
|
|
101
|
-
itemsSelectValue:
|
|
102
|
-
orientation:
|
|
103
|
-
nameTrimming: t(
|
|
104
|
-
priceHideDiscount: t(
|
|
105
|
-
priceFormatted: t(
|
|
106
|
-
priceSinglePrice: t(
|
|
107
|
-
priceCurrencySymbol:
|
|
108
|
-
|
|
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"],
|
|
109
108
|
g.productPriceCurrencySymbolControlValue
|
|
110
109
|
),
|
|
111
|
-
priceCurrencyLocation:
|
|
112
|
-
|
|
110
|
+
priceCurrencyLocation: r(
|
|
111
|
+
e["data-product_price_currency_location"],
|
|
113
112
|
g.productPriceCurrencyLocationControlValue
|
|
114
113
|
),
|
|
115
|
-
priceOrientation:
|
|
116
|
-
quantityControlEnabled: t(
|
|
117
|
-
buttonLink:
|
|
118
|
-
imageLink:
|
|
119
|
-
buttonLabel:
|
|
120
|
-
buttonFullWidth: t(
|
|
121
|
-
imageVisible: t(
|
|
122
|
-
nameVisible: t(
|
|
123
|
-
quantityVisible: t(
|
|
124
|
-
priceVisible: t(
|
|
125
|
-
originalPriceVisible: t(
|
|
126
|
-
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)
|
|
127
126
|
};
|
|
128
127
|
}
|
|
129
|
-
const
|
|
128
|
+
const O = {
|
|
130
129
|
ins_apr: "CART_ITEMS",
|
|
131
130
|
browsed_item: "BROWSED_ITEMS",
|
|
132
131
|
purchased_item: "PURCHASED_ITEMS"
|
|
133
132
|
};
|
|
134
|
-
function
|
|
135
|
-
const
|
|
133
|
+
function $(e, t) {
|
|
134
|
+
const r = {
|
|
136
135
|
CART_ITEMS: `{{Abandoned Cart Item (${t}) Image}}`,
|
|
137
136
|
BROWSED_ITEMS: `{{Browsed Item (${t}) Image}}`,
|
|
138
137
|
PURCHASED_ITEMS: `{{Purchased Item (${t}) Image}}`
|
|
139
138
|
};
|
|
140
|
-
return
|
|
139
|
+
return r[e] || r.CART_ITEMS;
|
|
141
140
|
}
|
|
142
|
-
function
|
|
143
|
-
const
|
|
141
|
+
function x(e, t) {
|
|
142
|
+
const r = {
|
|
144
143
|
CART_ITEMS: `{{Abandoned Cart Item (${t}) Url}}`,
|
|
145
144
|
BROWSED_ITEMS: `{{Browsed Item (${t}) Url}}`,
|
|
146
145
|
PURCHASED_ITEMS: `{{Purchased Item (${t}) Url}}`
|
|
147
146
|
};
|
|
148
|
-
return
|
|
147
|
+
return r[e] || r.CART_ITEMS;
|
|
149
148
|
}
|
|
150
|
-
class
|
|
149
|
+
class V {
|
|
151
150
|
constructor() {
|
|
152
151
|
M(this, "parser");
|
|
153
152
|
this.parser = new DOMParser();
|
|
154
153
|
}
|
|
155
154
|
migrate(t) {
|
|
156
155
|
try {
|
|
157
|
-
let
|
|
158
|
-
|
|
159
|
-
const
|
|
156
|
+
let r = this.removeJinjaConditionals(t);
|
|
157
|
+
r = this.replaceTemplateVariables(r);
|
|
158
|
+
const l = this.parser.parseFromString(r, "text/html"), i = l.querySelectorAll(
|
|
160
159
|
"td.esd-cart-items-block, td.esd-browsed-items-block, td.esd-purchased-items-block"
|
|
161
|
-
)
|
|
162
|
-
return
|
|
163
|
-
const
|
|
164
|
-
orientation:
|
|
165
|
-
itemsType:
|
|
166
|
-
itemId:
|
|
167
|
-
currencySymbol:
|
|
168
|
-
currencyLocation:
|
|
169
|
-
formattedPrice:
|
|
170
|
-
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,
|
|
171
170
|
migrate: !0,
|
|
172
|
-
nameStyles:
|
|
173
|
-
buttonStyles:
|
|
174
|
-
priceStyles:
|
|
175
|
-
originalPriceStyles:
|
|
176
|
-
quantityStyles:
|
|
177
|
-
nodeConfig: R(
|
|
178
|
-
}),
|
|
179
|
-
`<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>`,
|
|
180
179
|
"text/html"
|
|
181
180
|
).querySelector("td");
|
|
182
|
-
if (
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
const d =
|
|
186
|
-
d && d.remove(),
|
|
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);
|
|
187
186
|
}
|
|
188
|
-
}),
|
|
189
|
-
} catch (
|
|
190
|
-
return console.error("ItemsBlockMigrator failed:",
|
|
187
|
+
}), l.documentElement.outerHTML);
|
|
188
|
+
} catch (r) {
|
|
189
|
+
return console.error("ItemsBlockMigrator failed:", r), t;
|
|
191
190
|
}
|
|
192
191
|
}
|
|
193
192
|
/**
|
|
@@ -198,18 +197,18 @@ class z {
|
|
|
198
197
|
*/
|
|
199
198
|
extractConfiguration(t) {
|
|
200
199
|
var C, D, P;
|
|
201
|
-
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"];
|
|
202
201
|
let b;
|
|
203
202
|
S ? b = S === "horizontal" ? "horizontal" : "vertical" : b = t.querySelector('[colspan="2"]') !== null ? "vertical" : "horizontal";
|
|
204
|
-
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;
|
|
205
204
|
return {
|
|
206
205
|
orientation: b,
|
|
207
|
-
itemsType:
|
|
208
|
-
itemId:
|
|
209
|
-
currencySymbol:
|
|
210
|
-
currencyLocation:
|
|
211
|
-
formattedPrice:
|
|
212
|
-
configBlockAttributes:
|
|
206
|
+
itemsType: r,
|
|
207
|
+
itemId: o,
|
|
208
|
+
currencySymbol: _,
|
|
209
|
+
currencyLocation: f,
|
|
210
|
+
formattedPrice: d,
|
|
211
|
+
configBlockAttributes: s,
|
|
213
212
|
nameStyles: I,
|
|
214
213
|
buttonStyles: m,
|
|
215
214
|
priceStyles: h,
|
|
@@ -224,27 +223,27 @@ class z {
|
|
|
224
223
|
* @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
|
|
225
224
|
* @param itemNumber - The item number (1-based index)
|
|
226
225
|
*/
|
|
227
|
-
extractConfigBlockAttributes(t,
|
|
228
|
-
const
|
|
229
|
-
if (!
|
|
226
|
+
extractConfigBlockAttributes(t, r, l) {
|
|
227
|
+
const i = t.querySelector("esd-config-block"), n = {};
|
|
228
|
+
if (!i)
|
|
230
229
|
return this.getDefaultConfigBlockAttributes();
|
|
231
|
-
if (Array.from(
|
|
232
|
-
|
|
233
|
-
}),
|
|
234
|
-
const
|
|
235
|
-
if (/^\d+$/.test(
|
|
236
|
-
const
|
|
237
|
-
|
|
230
|
+
if (Array.from(i.attributes).forEach((a) => {
|
|
231
|
+
a.name.startsWith("data-") && (n[a.name] = a.value);
|
|
232
|
+
}), n["data-cart_items_select_control_value"]) {
|
|
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);
|
|
238
237
|
}
|
|
239
238
|
}
|
|
240
|
-
if (
|
|
241
|
-
const
|
|
242
|
-
let
|
|
243
|
-
|
|
239
|
+
if (n["data-product_price_control_curency"]) {
|
|
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"] = _;
|
|
244
243
|
}
|
|
245
|
-
(!
|
|
246
|
-
const
|
|
247
|
-
return
|
|
244
|
+
(!n["data-product_price_control_currency_symbol"] || n["data-product_price_control_currency_symbol"].trim() === "") && (n["data-product_price_control_currency_symbol"] = "USD");
|
|
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;
|
|
248
247
|
}
|
|
249
248
|
/**
|
|
250
249
|
* Returns default esd-config-block attributes based on the old template structure
|
|
@@ -304,17 +303,17 @@ class z {
|
|
|
304
303
|
* contains display condition Jinja scripts that should NOT be removed.
|
|
305
304
|
*/
|
|
306
305
|
removeJinjaConditionals(t) {
|
|
307
|
-
const
|
|
308
|
-
let
|
|
309
|
-
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(
|
|
310
309
|
/\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_total_product_kind\s*(>|>)\s*\d+\s*%\}/g,
|
|
311
310
|
""
|
|
312
|
-
),
|
|
311
|
+
), i = i.replace(
|
|
313
312
|
/\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_price_\d+\s*(!=|!=)\s*\1_originalprice_\d+\s*%\}/g,
|
|
314
313
|
""
|
|
315
|
-
),
|
|
314
|
+
), i = i.replace(/\{%\s*endif\s*%\}/g, ""), l && (i = i.replace(r, l[0])), i = i.replace(/\n\s*\n\s*\n/g, `
|
|
316
315
|
|
|
317
|
-
`),
|
|
316
|
+
`), i;
|
|
318
317
|
}
|
|
319
318
|
/**
|
|
320
319
|
* Replaces template variables with default values from productPairs
|
|
@@ -326,32 +325,32 @@ class z {
|
|
|
326
325
|
* - {{purchased_item_formattedprice_5}} → '1,490.49' (PURCHASED_ITEMS)
|
|
327
326
|
*/
|
|
328
327
|
replaceTemplateVariables(t) {
|
|
329
|
-
const { PAIRS_FOR_EXTENSION:
|
|
330
|
-
return t.replace(/{{([^}]+)}}/g, (
|
|
331
|
-
const
|
|
332
|
-
if (!
|
|
333
|
-
return
|
|
334
|
-
const [,
|
|
335
|
-
if (!
|
|
336
|
-
return console.warn(`Unknown variable prefix: ${
|
|
337
|
-
const
|
|
338
|
-
if (!
|
|
339
|
-
return console.warn(`Unknown variable suffix mapping for: ${
|
|
340
|
-
const { pairsKey:
|
|
341
|
-
if (!
|
|
342
|
-
return console.warn(`No data found for: ${
|
|
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+)$/);
|
|
331
|
+
if (!n)
|
|
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;
|
|
343
342
|
if (S) {
|
|
344
|
-
const
|
|
345
|
-
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);
|
|
346
345
|
}
|
|
347
|
-
const I =
|
|
348
|
-
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);
|
|
349
348
|
});
|
|
350
349
|
}
|
|
351
350
|
}
|
|
352
|
-
function
|
|
353
|
-
return new
|
|
351
|
+
function G(e) {
|
|
352
|
+
return new V().migrate(e);
|
|
354
353
|
}
|
|
355
354
|
export {
|
|
356
|
-
|
|
355
|
+
G as migrateItemsBlock
|
|
357
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
|
};
|