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