@useinsider/guido 3.20.0 → 3.20.1-beta.8a05319
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/config/compiler/itemsCompilerRules.js +14 -5
- package/dist/config/compiler/utils/itemsCompilerUtils.js +48 -21
- package/dist/config/migrator/itemsBlockMigrator.js +112 -108
- package/dist/extensions/Blocks/Items/block.js +78 -67
- package/dist/extensions/Blocks/Items/constants/cardWidth.js +20 -0
- package/dist/extensions/Blocks/Items/layouts/vertical.html.js +1 -1
- package/dist/extensions/Blocks/Recommendation/block.js +51 -44
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +90 -73
- package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +209 -203
- package/dist/extensions/Blocks/Recommendation/store/recommendation.js +122 -90
- package/dist/extensions/Blocks/Recommendation/utils/blockUrlConfig.js +25 -0
- package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +46 -25
- package/dist/extensions/Blocks/Recommendation/utils/strategyCommit.js +40 -17
- package/dist/src/config/compiler/utils/itemsCompilerUtils.d.ts +5 -0
- package/dist/src/extensions/Blocks/Items/block.d.ts +5 -0
- package/dist/src/extensions/Blocks/Items/constants/cardWidth.d.ts +12 -0
- package/dist/src/extensions/Blocks/Recommendation/block.d.ts +2 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +2 -0
- package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +18 -5
- package/dist/src/extensions/Blocks/Recommendation/utils/blockUrlConfig.d.ts +4 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/nodeConfigWriter.d.ts +3 -1
- package/dist/src/extensions/Blocks/Recommendation/utils/strategyCommit.d.ts +7 -0
- package/dist/src/utils/liquidProtection.d.ts +3 -0
- package/dist/utils/liquidProtection.js +5 -0
- package/dist/utils/templatePreparation.js +61 -85
- package/package.json +1 -1
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { pairProductVariables as o } from "../../utils/pairProductVariables.js";
|
|
2
|
-
import {
|
|
3
|
-
const
|
|
2
|
+
import { normalizeItemsBlockWidths as r, wrapHiddenPriceTdsForOutlook as e, MSO_ITEMS_HIDE_START as t, MSO_ITEMS_HIDE_END as s } from "./utils/itemsCompilerUtils.js";
|
|
3
|
+
const d = [
|
|
4
|
+
{
|
|
5
|
+
id: "normalize-items-block-widths",
|
|
6
|
+
// Runs before the other items rules so they see non-zero widths; not AMP-safe.
|
|
7
|
+
description: "Normalize zero Items card widths in the compiled email",
|
|
8
|
+
type: "custom",
|
|
9
|
+
processor: r,
|
|
10
|
+
priority: 55
|
|
11
|
+
// Before pair-product-variables (60)
|
|
12
|
+
},
|
|
4
13
|
{
|
|
5
14
|
id: "pair-product-variables",
|
|
6
15
|
description: "Replace product default values with template variables",
|
|
@@ -16,7 +25,7 @@ const a = [
|
|
|
16
25
|
// with safe placeholder comments and collapse them inline for web-engine Outlook.
|
|
17
26
|
description: "Mark hidden Items price tds for Outlook conditional hiding",
|
|
18
27
|
type: "custom",
|
|
19
|
-
processor:
|
|
28
|
+
processor: e,
|
|
20
29
|
priority: 65
|
|
21
30
|
// After pair-product-variables (60), before outlook rules (70+)
|
|
22
31
|
},
|
|
@@ -26,10 +35,10 @@ const a = [
|
|
|
26
35
|
// and reco swap P100) keeps it out of every whitespace/comment-mangling pass.
|
|
27
36
|
description: "Swap Items MSO markers into [if !mso] conditional comments",
|
|
28
37
|
type: "custom",
|
|
29
|
-
processor: (i) => i.replaceAll(`<!--${
|
|
38
|
+
processor: (i) => i.replaceAll(`<!--${t}-->`, "<!--[if !mso]><!-- -->").replaceAll(`<!--${s}-->`, "<!--<![endif]-->"),
|
|
30
39
|
priority: 101
|
|
31
40
|
}
|
|
32
41
|
];
|
|
33
42
|
export {
|
|
34
|
-
|
|
43
|
+
d as itemsCompilerRules
|
|
35
44
|
};
|
|
@@ -1,28 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { PRODUCT_WRAPPER_SELECTOR as A, hasZeroWidthDeclaration as E, isZeroWidthValue as u, withWidthPin as h, PRODUCT_TD_SELECTOR as S, withoutZeroWidth as _ } from "../../../extensions/Blocks/Items/constants/cardWidth.js";
|
|
2
|
+
import { protectLiquid as m, restoreLiquid as y } from "../../../utils/liquidProtection.js";
|
|
3
|
+
const f = "MSO_ITEMS_HIDE_START", D = "MSO_ITEMS_HIDE_END", T = "mso-hide:all; max-height:0; overflow:hidden; font-size:0; line-height:0;", M = ".ins-product-cart td.horizontal-price, .ins-product-cart td.vertical-price";
|
|
4
|
+
function g(e) {
|
|
5
|
+
if (!e.includes("vertical-price") || !e.includes("ins-product-cart"))
|
|
6
|
+
return e;
|
|
7
|
+
const n = e.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->"), r = new DOMParser().parseFromString(n, "text/html");
|
|
8
|
+
let s = !1;
|
|
9
|
+
if (r.querySelectorAll(M).forEach((t) => {
|
|
10
|
+
var d, a;
|
|
11
|
+
const o = t.getAttribute("style") || "";
|
|
10
12
|
if (!/display\s*:\s*none/i.test(o))
|
|
11
13
|
return;
|
|
12
|
-
const
|
|
13
|
-
if (((
|
|
14
|
-
const
|
|
15
|
-
|
|
14
|
+
const l = t.previousSibling;
|
|
15
|
+
if (((l == null ? void 0 : l.nodeType) !== Node.COMMENT_NODE || l.data !== f) && ((d = t.parentNode) == null || d.insertBefore(r.createComment(f), t), (a = t.parentNode) == null || a.insertBefore(r.createComment(D), t.nextSibling)), !/mso-hide/i.test(o)) {
|
|
16
|
+
const p = o.trim().endsWith(";") ? " " : "; ";
|
|
17
|
+
t.setAttribute("style", `${o}${p}${T}`);
|
|
16
18
|
}
|
|
17
|
-
|
|
18
|
-
}), !
|
|
19
|
-
return
|
|
20
|
-
const
|
|
21
|
-
return ((
|
|
19
|
+
s = !0;
|
|
20
|
+
}), !s)
|
|
21
|
+
return e;
|
|
22
|
+
const c = n.match(/<!DOCTYPE[^>]*>/i);
|
|
23
|
+
return ((c ? `${c[0]}
|
|
22
24
|
` : "") + r.documentElement.outerHTML).replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}");
|
|
23
25
|
}
|
|
26
|
+
function I(e) {
|
|
27
|
+
if (!e.includes("ins-product-wrapper") && !e.includes("ins-product-td"))
|
|
28
|
+
return e;
|
|
29
|
+
const n = new DOMParser().parseFromString(m(e), "text/html");
|
|
30
|
+
let r = !1;
|
|
31
|
+
if (n.querySelectorAll(A).forEach((i) => {
|
|
32
|
+
const t = i.getAttribute("style") || "";
|
|
33
|
+
if (!E(t) && !u(i.getAttribute("width")))
|
|
34
|
+
return;
|
|
35
|
+
const o = h(t);
|
|
36
|
+
o !== t && (i.setAttribute("style", o), r = !0), u(i.getAttribute("width")) && (i.setAttribute("width", "100%"), r = !0);
|
|
37
|
+
}), n.querySelectorAll(S).forEach((i) => {
|
|
38
|
+
const t = i.getAttribute("style") || "";
|
|
39
|
+
if (E(t)) {
|
|
40
|
+
const o = _(t);
|
|
41
|
+
o ? i.setAttribute("style", o) : i.removeAttribute("style"), r = !0;
|
|
42
|
+
}
|
|
43
|
+
u(i.getAttribute("width")) && (i.removeAttribute("width"), r = !0);
|
|
44
|
+
}), !r)
|
|
45
|
+
return e;
|
|
46
|
+
const s = e.match(/<!DOCTYPE[^>]*>/i), c = s ? `${s[0]}
|
|
47
|
+
` : "";
|
|
48
|
+
return y(c + n.documentElement.outerHTML);
|
|
49
|
+
}
|
|
24
50
|
export {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
51
|
+
D as MSO_ITEMS_HIDE_END,
|
|
52
|
+
f as MSO_ITEMS_HIDE_START,
|
|
53
|
+
I as normalizeItemsBlockWidths,
|
|
54
|
+
g as wrapHiddenPriceTdsForOutlook
|
|
28
55
|
};
|
|
@@ -1,84 +1,86 @@
|
|
|
1
|
-
var
|
|
2
|
-
var v = (
|
|
3
|
-
var M = (
|
|
1
|
+
var B = Object.defineProperty;
|
|
2
|
+
var v = (n, t, e) => t in n ? B(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
|
|
3
|
+
var M = (n, t, e) => v(n, typeof t != "symbol" ? t + "" : t, e);
|
|
4
4
|
import { BLOCK_ID as R } from "../../extensions/Blocks/Items/block.js";
|
|
5
|
+
import { hasZeroWidthDeclaration as L, withoutZeroWidth as x } from "../../extensions/Blocks/Items/constants/cardWidth.js";
|
|
5
6
|
import { ItemInCartOptions as h, DefaultConfigValues as b, SETTINGS_ENUMS as _ } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
|
|
6
|
-
import { getDefaultTemplate as
|
|
7
|
-
import { useTemplateStore as
|
|
8
|
-
|
|
7
|
+
import { getDefaultTemplate as V } from "../../extensions/Blocks/Items/template.js";
|
|
8
|
+
import { useTemplateStore as O } from "../../stores/template.js";
|
|
9
|
+
import { protectLiquid as H, restoreLiquid as $ } from "../../utils/liquidProtection.js";
|
|
10
|
+
function F() {
|
|
9
11
|
return String(Date.now() + Math.floor(Math.random() * 1e3));
|
|
10
12
|
}
|
|
11
|
-
function
|
|
12
|
-
return
|
|
13
|
+
function D(n) {
|
|
14
|
+
return n ? {
|
|
13
15
|
CartItems: _.ITEMS_TYPE.CART_ITEMS,
|
|
14
16
|
BrowsedItems: _.ITEMS_TYPE.BROWSED_ITEMS,
|
|
15
17
|
PurchasedItems: _.ITEMS_TYPE.PURCHASED_ITEMS,
|
|
16
18
|
CART_ITEMS: _.ITEMS_TYPE.CART_ITEMS,
|
|
17
19
|
BROWSED_ITEMS: _.ITEMS_TYPE.BROWSED_ITEMS,
|
|
18
20
|
PURCHASED_ITEMS: _.ITEMS_TYPE.PURCHASED_ITEMS
|
|
19
|
-
}[
|
|
21
|
+
}[n] || _.ITEMS_TYPE.CART_ITEMS : _.ITEMS_TYPE.CART_ITEMS;
|
|
20
22
|
}
|
|
21
|
-
function
|
|
22
|
-
return
|
|
23
|
+
function U(n) {
|
|
24
|
+
return n.classList.contains("esd-browsed-items-block") ? _.ITEMS_TYPE.BROWSED_ITEMS : n.classList.contains("esd-purchased-items-block") ? _.ITEMS_TYPE.PURCHASED_ITEMS : _.ITEMS_TYPE.CART_ITEMS;
|
|
23
25
|
}
|
|
24
|
-
function
|
|
26
|
+
function P(n) {
|
|
25
27
|
var o;
|
|
26
|
-
const t = (i,
|
|
27
|
-
let
|
|
28
|
-
if (
|
|
29
|
-
const i = parseInt(
|
|
30
|
-
|
|
28
|
+
const t = (i, d) => i == null ? d : i === "1" || i === "true", e = (i, d) => i || d, a = n["data-type"] || n["data-source"], r = D(a), u = h[r];
|
|
29
|
+
let c = n["data-cart_items_select_control_value"] || ((o = u == null ? void 0 : u[0]) == null ? void 0 : o.value) || b.cartItemsSelectControlValue;
|
|
30
|
+
if (c && !c.includes("{{") && /^\d+$/.test(c)) {
|
|
31
|
+
const i = parseInt(c) - 1, d = h[r];
|
|
32
|
+
d && d[i] && (c = d[i].value);
|
|
31
33
|
}
|
|
32
34
|
return {
|
|
33
35
|
initialized: !0,
|
|
34
|
-
blockInstanceId: e(
|
|
36
|
+
blockInstanceId: e(n["data-block-instance-id"], F()),
|
|
35
37
|
source: r,
|
|
36
38
|
type: r,
|
|
37
|
-
itemsSelectValue:
|
|
38
|
-
orientation:
|
|
39
|
-
nameTrimming: t(
|
|
40
|
-
priceHideDiscount: t(
|
|
41
|
-
priceFormatted: t(
|
|
42
|
-
priceSinglePrice: t(
|
|
39
|
+
itemsSelectValue: c,
|
|
40
|
+
orientation: n["data-card_orientation_control_value"] || _.ORIENTATION.VERTICAL,
|
|
41
|
+
nameTrimming: t(n["data-product_name_control_trim"], !0),
|
|
42
|
+
priceHideDiscount: t(n["data-product_price_control_nodup"], !0),
|
|
43
|
+
priceFormatted: t(n["data-product_price_control_formated"], !0),
|
|
44
|
+
priceSinglePrice: t(n["data-product_price_control_single_price"], !1),
|
|
43
45
|
priceCurrencySymbol: e(
|
|
44
|
-
|
|
46
|
+
n["data-product_price_control_currency_symbol"],
|
|
45
47
|
b.productPriceCurrencySymbolControlValue
|
|
46
48
|
),
|
|
47
49
|
priceCurrencyLocation: e(
|
|
48
|
-
|
|
50
|
+
n["data-product_price_currency_location"],
|
|
49
51
|
b.productPriceCurrencyLocationControlValue
|
|
50
52
|
),
|
|
51
|
-
priceOrientation:
|
|
52
|
-
quantityControlEnabled: t(
|
|
53
|
-
buttonLink: e(
|
|
54
|
-
imageLink: e(
|
|
55
|
-
buttonLabel: e(
|
|
56
|
-
buttonFullWidth: t(
|
|
57
|
-
imageVisible: t(
|
|
58
|
-
nameVisible: t(
|
|
59
|
-
quantityVisible: t(
|
|
60
|
-
priceVisible: t(
|
|
61
|
-
originalPriceVisible: t(
|
|
62
|
-
buttonVisible: t(
|
|
53
|
+
priceOrientation: n["data-product_original_price_control_orientation"] || "horizontal",
|
|
54
|
+
quantityControlEnabled: t(n["data-product_quantity_control_enabled"], !0),
|
|
55
|
+
buttonLink: e(n["data-product_button_link"], b.productButtonLinkControlValue),
|
|
56
|
+
imageLink: e(n["data-product_image_link"], b.productImageLinkControlValue),
|
|
57
|
+
buttonLabel: e(n["data-product_button_control_label"], "Buy"),
|
|
58
|
+
buttonFullWidth: t(n["data-product_button_control_atw"], !0),
|
|
59
|
+
imageVisible: t(n["data-product_image_control_enabled"], !0),
|
|
60
|
+
nameVisible: t(n["data-product_name_control_enabled"], !0),
|
|
61
|
+
quantityVisible: t(n["data-product_quantity_control_enabled"], !0),
|
|
62
|
+
priceVisible: t(n["data-product_price_control_enabled"], !0),
|
|
63
|
+
originalPriceVisible: t(n["data-product_original_price_control_enabled"], !0),
|
|
64
|
+
buttonVisible: t(n["data-product_button_control_enabled"], !0)
|
|
63
65
|
};
|
|
64
66
|
}
|
|
65
|
-
function
|
|
67
|
+
function Y(n, t) {
|
|
66
68
|
const e = {
|
|
67
69
|
CART_ITEMS: `{{Abandoned Cart Item (${t}) Image}}`,
|
|
68
70
|
BROWSED_ITEMS: `{{Browsed Item (${t}) Image}}`,
|
|
69
71
|
PURCHASED_ITEMS: `{{Purchased Item (${t}) Image}}`
|
|
70
72
|
};
|
|
71
|
-
return e[
|
|
73
|
+
return e[n] || e.CART_ITEMS;
|
|
72
74
|
}
|
|
73
|
-
function
|
|
75
|
+
function W(n, t) {
|
|
74
76
|
const e = {
|
|
75
77
|
CART_ITEMS: `{{Abandoned Cart Item (${t}) Url}}`,
|
|
76
78
|
BROWSED_ITEMS: `{{Browsed Item (${t}) Url}}`,
|
|
77
79
|
PURCHASED_ITEMS: `{{Purchased Item (${t}) Url}}`
|
|
78
80
|
};
|
|
79
|
-
return e[
|
|
81
|
+
return e[n] || e.CART_ITEMS;
|
|
80
82
|
}
|
|
81
|
-
class
|
|
83
|
+
class z {
|
|
82
84
|
constructor() {
|
|
83
85
|
M(this, "parser");
|
|
84
86
|
this.parser = new DOMParser();
|
|
@@ -90,10 +92,10 @@ class F {
|
|
|
90
92
|
const e = this.removeJinjaConditionals(t), a = this.parser.parseFromString(e, "text/html"), r = a.querySelectorAll(
|
|
91
93
|
"td.esd-cart-items-block, td.esd-browsed-items-block, td.esd-purchased-items-block"
|
|
92
94
|
);
|
|
93
|
-
return
|
|
94
|
-
|
|
95
|
-
}), r.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), e) : (r.forEach((
|
|
96
|
-
const o = this.extractConfiguration(
|
|
95
|
+
return O().$patch((c) => {
|
|
96
|
+
c.migrations = { ...c.migrations, [R]: r.length };
|
|
97
|
+
}), r.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), this.backfillV2ProductTdAttributes(e)) : (r.forEach((c) => {
|
|
98
|
+
const o = this.extractConfiguration(c), i = V({
|
|
97
99
|
orientation: o.orientation,
|
|
98
100
|
itemsType: o.itemsType,
|
|
99
101
|
itemId: o.itemId,
|
|
@@ -107,18 +109,18 @@ class F {
|
|
|
107
109
|
priceStyles: o.priceStyles,
|
|
108
110
|
originalPriceStyles: o.originalPriceStyles,
|
|
109
111
|
quantityStyles: o.quantityStyles,
|
|
110
|
-
nodeConfig:
|
|
112
|
+
nodeConfig: P(o.configBlockAttributes)
|
|
111
113
|
}), l = this.parser.parseFromString(
|
|
112
114
|
`<table><tbody><tr>${i}</tr></tbody></table>`,
|
|
113
115
|
"text/html"
|
|
114
116
|
).querySelector("td");
|
|
115
|
-
if (l &&
|
|
116
|
-
const s =
|
|
117
|
+
if (l && c.parentNode) {
|
|
118
|
+
const s = P(o.configBlockAttributes);
|
|
117
119
|
l.setAttribute("esd-ext-config", JSON.stringify(s)), l.setAttribute("data-type", s.type);
|
|
118
120
|
const p = l.querySelector("esd-config-block");
|
|
119
|
-
p && p.remove(),
|
|
121
|
+
p && p.remove(), c.parentNode.replaceChild(l, c);
|
|
120
122
|
}
|
|
121
|
-
}), a.documentElement.outerHTML);
|
|
123
|
+
}), this.backfillV2ProductTdAttributes(a.documentElement.outerHTML));
|
|
122
124
|
} catch (e) {
|
|
123
125
|
return console.error("ItemsBlockMigrator failed:", e), t;
|
|
124
126
|
}
|
|
@@ -131,24 +133,24 @@ class F {
|
|
|
131
133
|
*/
|
|
132
134
|
extractConfiguration(t) {
|
|
133
135
|
var C;
|
|
134
|
-
const e =
|
|
135
|
-
this.readSelfOrDescendantAttribute(t, "data-type") ||
|
|
136
|
-
), a = this.readSelfOrDescendantAttribute(t, "data-number") || "1", r = parseInt(a) - 1,
|
|
136
|
+
const e = D(
|
|
137
|
+
this.readSelfOrDescendantAttribute(t, "data-type") || U(t)
|
|
138
|
+
), a = this.readSelfOrDescendantAttribute(t, "data-number") || "1", r = parseInt(a) - 1, u = h[e], c = ((C = u == null ? void 0 : u[r]) == null ? void 0 : C.value) || u[0].value, o = this.extractConfigBlockAttributes(t, e, a);
|
|
137
139
|
this.applyDomFallbacks(t, o);
|
|
138
|
-
const i = t.querySelector('[product-attr="price"]'),
|
|
140
|
+
const i = t.querySelector('[product-attr="price"]'), d = o["data-product_price_control_currency_symbol"], l = o["data-product_price_currency_location"] || "0", s = o["data-product_price_control_formated"], p = s !== "false" && s !== "0", S = o["data-card_orientation_control_value"] === "horizontal" ? "horizontal" : "vertical", f = t.querySelector('a[product-attr="name"]'), y = (f == null ? void 0 : f.getAttribute("style")) || void 0, g = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), I = (g == null ? void 0 : g.getAttribute("style")) || void 0, k = (i == null ? void 0 : i.getAttribute("style")) || void 0, m = t.querySelector("p.original-price") ?? t.querySelector('[product-attr="originalPrice"]'), A = m != null && m.getAttribute("style") ? m : (m == null ? void 0 : m.closest("p")) ?? m, q = (A == null ? void 0 : A.getAttribute("style")) || void 0, E = t.querySelector('[product-attr="quantity"]'), w = (E == null ? void 0 : E.getAttribute("style")) || void 0;
|
|
139
141
|
return {
|
|
140
142
|
orientation: S,
|
|
141
143
|
itemsType: e,
|
|
142
|
-
itemId:
|
|
143
|
-
currencySymbol:
|
|
144
|
+
itemId: c,
|
|
145
|
+
currencySymbol: d,
|
|
144
146
|
currencyLocation: l,
|
|
145
147
|
formattedPrice: p,
|
|
146
148
|
configBlockAttributes: o,
|
|
147
|
-
nameStyles:
|
|
149
|
+
nameStyles: y,
|
|
148
150
|
buttonStyles: I,
|
|
149
|
-
priceStyles:
|
|
150
|
-
originalPriceStyles:
|
|
151
|
-
quantityStyles:
|
|
151
|
+
priceStyles: k,
|
|
152
|
+
originalPriceStyles: q,
|
|
153
|
+
quantityStyles: w
|
|
152
154
|
};
|
|
153
155
|
}
|
|
154
156
|
/**
|
|
@@ -159,8 +161,8 @@ class F {
|
|
|
159
161
|
* card migrates with the boilerplate defaults: caption "Buy", USD, full-width button.
|
|
160
162
|
*/
|
|
161
163
|
applyDomFallbacks(t, e) {
|
|
162
|
-
var S,
|
|
163
|
-
const a = t.querySelector("esd-config-block"), r = (...
|
|
164
|
+
var S, f;
|
|
165
|
+
const a = t.querySelector("esd-config-block"), r = (...y) => !a || y.every((g) => !(a.getAttribute(g) ?? "").trim());
|
|
164
166
|
Object.entries({
|
|
165
167
|
image: '[product-attr="imageSrc"]',
|
|
166
168
|
name: '[product-attr="name"]',
|
|
@@ -168,17 +170,17 @@ class F {
|
|
|
168
170
|
original_price: '[product-attr="originalPrice"], p.original-price',
|
|
169
171
|
quantity: '[product-attr="quantity"]',
|
|
170
172
|
button: '[product-attr="button"]'
|
|
171
|
-
}).forEach(([
|
|
172
|
-
const I = `data-product_${
|
|
173
|
+
}).forEach(([y, g]) => {
|
|
174
|
+
const I = `data-product_${y}_control_enabled`;
|
|
173
175
|
r(I) && (e[I] = t.querySelector(g) ? "true" : "false");
|
|
174
176
|
}), r("data-card_orientation_control_value") && (e["data-card_orientation_control_value"] = t.querySelector('[colspan="2"]') ? "vertical" : "horizontal");
|
|
175
|
-
const
|
|
177
|
+
const c = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), o = (S = c == null ? void 0 : c.textContent) == null ? void 0 : S.replace(/\s+/g, " ").trim();
|
|
176
178
|
o && r("data-product_button_control_label") && (e["data-product_button_control_label"] = o);
|
|
177
|
-
const i = (
|
|
179
|
+
const i = (c == null ? void 0 : c.getAttribute("style")) || "";
|
|
178
180
|
r("data-product_button_control_atw") && /display:\s*inline/.test(i) && !/(?:^|;)\s*width\s*:\s*100%/.test(i) && (e["data-product_button_control_atw"] = "false");
|
|
179
|
-
const
|
|
181
|
+
const d = t.querySelector('[product-attr="imageSrc"]'), l = d ? this.readImageSize(d) : null, s = (l == null ? void 0 : l.height) ?? (l == null ? void 0 : l.width), p = (l == null ? void 0 : l.width) ?? (l == null ? void 0 : l.height);
|
|
180
182
|
s && r("data-product_image_control_image-height") && (e["data-product_image_control_image-height"] = s), p && r("data-product_image_control_image-width") && (e["data-product_image_control_image-width"] = p), this.applyPriceDomFallbacks(t, e, r);
|
|
181
|
-
const T = ((
|
|
183
|
+
const T = ((f = t.querySelector('[product-attr="name"]')) == null ? void 0 : f.getAttribute("style")) || "";
|
|
182
184
|
r("data-product_name_control_trim") && /white-space:\s*normal/.test(T) && (e["data-product_name_control_trim"] = "0");
|
|
183
185
|
}
|
|
184
186
|
/**
|
|
@@ -189,15 +191,15 @@ class F {
|
|
|
189
191
|
* the default back over the real value.
|
|
190
192
|
*/
|
|
191
193
|
applyPriceDomFallbacks(t, e, a) {
|
|
192
|
-
var
|
|
194
|
+
var d;
|
|
193
195
|
const r = t.querySelector('[product-attr="price"]') ?? t.querySelector('[product-attr="originalPrice"]');
|
|
194
196
|
if (!r)
|
|
195
197
|
return;
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
const
|
|
199
|
-
if (
|
|
200
|
-
const l =
|
|
198
|
+
const u = (d = r.getAttribute("data-currency_symbol")) == null ? void 0 : d.trim();
|
|
199
|
+
u && a("data-product_price_control_currency_symbol") && (e["data-product_price_control_currency_symbol"] = u);
|
|
200
|
+
const c = r.getAttribute("data-curency");
|
|
201
|
+
if (c && a("data-product_price_currency_location", "data-product_price_control_curency")) {
|
|
202
|
+
const l = c === "after" ? "1" : "0";
|
|
201
203
|
e["data-product_price_currency_location"] = l, e["data-product_price_control_curency"] = l;
|
|
202
204
|
}
|
|
203
205
|
const o = r.getAttribute("data-formated");
|
|
@@ -232,14 +234,14 @@ class F {
|
|
|
232
234
|
* to nothing, so only a positive integer counts as an answer.
|
|
233
235
|
*/
|
|
234
236
|
readImageDimension(t, e) {
|
|
235
|
-
var
|
|
237
|
+
var d;
|
|
236
238
|
const a = (l) => {
|
|
237
239
|
const s = (l ?? "").trim().match(/^(\d+(?:\.\d+)?)(?:px)?$/i), p = s ? Math.floor(parseFloat(s[1])) : 0;
|
|
238
240
|
return p > 0 ? String(p) : null;
|
|
239
|
-
}, r = a((
|
|
241
|
+
}, r = a((d = t.getAttribute(e)) == null ? void 0 : d.trim());
|
|
240
242
|
if (r)
|
|
241
243
|
return r;
|
|
242
|
-
const
|
|
244
|
+
const u = t.getAttribute("style") || "", c = new RegExp(`(?:^|;)\\s*${e}:\\s*(\\d+(?:\\.\\d+)?)px`), o = new RegExp(`max-${e}:\\s*(\\d+(?:\\.\\d+)?)px`), i = u.match(c) || u.match(o);
|
|
243
245
|
return a(i == null ? void 0 : i[1]);
|
|
244
246
|
}
|
|
245
247
|
/**
|
|
@@ -250,26 +252,26 @@ class F {
|
|
|
250
252
|
* @param itemNumber - The item number (1-based index)
|
|
251
253
|
*/
|
|
252
254
|
extractConfigBlockAttributes(t, e, a) {
|
|
253
|
-
const r = t.querySelector("esd-config-block"),
|
|
255
|
+
const r = t.querySelector("esd-config-block"), u = {};
|
|
254
256
|
if (r) {
|
|
255
257
|
if (Array.from(r.attributes).forEach((o) => {
|
|
256
|
-
o.name.startsWith("data-") && (
|
|
257
|
-
}),
|
|
258
|
-
const o =
|
|
258
|
+
o.name.startsWith("data-") && (u[o.name] = o.value);
|
|
259
|
+
}), u["data-cart_items_select_control_value"]) {
|
|
260
|
+
const o = u["data-cart_items_select_control_value"];
|
|
259
261
|
if (/^\d+$/.test(o)) {
|
|
260
|
-
const i = parseInt(o) - 1,
|
|
261
|
-
|
|
262
|
+
const i = parseInt(o) - 1, d = h[e];
|
|
263
|
+
d && d[i] && (u["data-cart_items_select_control_value"] = d[i].value);
|
|
262
264
|
}
|
|
263
265
|
}
|
|
264
|
-
if (
|
|
265
|
-
const o =
|
|
266
|
+
if (u["data-product_price_control_curency"]) {
|
|
267
|
+
const o = u["data-product_price_control_curency"];
|
|
266
268
|
let i = o;
|
|
267
|
-
o === "before" ? i = "0" : o === "after" && (i = "1"),
|
|
269
|
+
o === "before" ? i = "0" : o === "after" && (i = "1"), u["data-product_price_control_curency"] = i, u["data-product_price_currency_location"] = i;
|
|
268
270
|
}
|
|
269
|
-
(!
|
|
271
|
+
(!u["data-product_price_control_currency_symbol"] || u["data-product_price_control_currency_symbol"].trim() === "") && (u["data-product_price_control_currency_symbol"] = "USD");
|
|
270
272
|
}
|
|
271
|
-
const
|
|
272
|
-
return
|
|
273
|
+
const c = { ...this.getDefaultConfigBlockAttributes(), ...u };
|
|
274
|
+
return c["data-type"] = e, c["data-source"] = e, c["data-product_image_link"] = Y(e, a), c["data-product_button_link"] = W(e, a), c;
|
|
273
275
|
}
|
|
274
276
|
/**
|
|
275
277
|
* Returns default esd-config-block attributes based on the old template structure
|
|
@@ -343,27 +345,29 @@ class F {
|
|
|
343
345
|
backfillV2ProductTdAttributes(t) {
|
|
344
346
|
if (!t.includes("ins-product-td") || !t.includes("esd-ext-config"))
|
|
345
347
|
return t;
|
|
346
|
-
const e = this.parser.parseFromString(t, "text/html");
|
|
348
|
+
const e = this.parser.parseFromString(H(t), "text/html");
|
|
347
349
|
let a = !1;
|
|
348
350
|
return e.querySelectorAll(".ins-product-td").forEach((r) => {
|
|
349
|
-
r.hasAttribute("width") && (r.removeAttribute("width"), a = !0), r.classList.contains("esd-container-frame") && (r.classList.remove("esd-container-frame"), a = !0)
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
351
|
+
r.hasAttribute("width") && (r.removeAttribute("width"), a = !0), r.classList.contains("esd-container-frame") && (r.classList.remove("esd-container-frame"), a = !0), r.querySelectorAll("table.ins-product-wrapper").forEach((d) => {
|
|
352
|
+
d.hasAttribute("width") && d.getAttribute("width") !== "100%" && (d.setAttribute("width", "100%"), a = !0);
|
|
353
|
+
const l = d.getAttribute("style");
|
|
354
|
+
l && L(l) && (d.setAttribute("style", x(l)), d.setAttribute("width", "100%"), a = !0);
|
|
355
|
+
});
|
|
356
|
+
const u = r.getAttribute("esd-ext-config");
|
|
357
|
+
let c = null;
|
|
354
358
|
try {
|
|
355
|
-
|
|
359
|
+
c = u ? JSON.parse(u) : null;
|
|
356
360
|
} catch {
|
|
357
361
|
}
|
|
358
|
-
if (!
|
|
362
|
+
if (!c || (!r.getAttribute("data-nodup") && typeof c.priceHideDiscount == "boolean" && (r.setAttribute("data-nodup", String(c.priceHideDiscount)), a = !0), r.getAttribute("data-type")))
|
|
359
363
|
return;
|
|
360
|
-
const
|
|
361
|
-
if (!
|
|
364
|
+
const o = c.type || c.source;
|
|
365
|
+
if (!o)
|
|
362
366
|
return;
|
|
363
|
-
r.setAttribute("data-type",
|
|
364
|
-
const
|
|
365
|
-
|
|
366
|
-
}), a ? e.documentElement.outerHTML : t;
|
|
367
|
+
r.setAttribute("data-type", o), a = !0;
|
|
368
|
+
const i = typeof c.itemsSelectValue == "string" ? c.itemsSelectValue.match(/\((\d+)\)/) : null;
|
|
369
|
+
i && r.getAttribute("data-number") !== i[1] && r.setAttribute("data-number", i[1]);
|
|
370
|
+
}), a ? $(e.documentElement.outerHTML) : t;
|
|
367
371
|
}
|
|
368
372
|
/**
|
|
369
373
|
* Fast check for the presence of any items block (cart / browsed / purchased)
|
|
@@ -397,9 +401,9 @@ class F {
|
|
|
397
401
|
`), r;
|
|
398
402
|
}
|
|
399
403
|
}
|
|
400
|
-
function
|
|
401
|
-
return new
|
|
404
|
+
function X(n) {
|
|
405
|
+
return new z().migrate(n);
|
|
402
406
|
}
|
|
403
407
|
export {
|
|
404
|
-
|
|
408
|
+
X as migrateItemsBlock
|
|
405
409
|
};
|