@useinsider/guido 3.18.1-beta.178a3ec → 3.18.1-beta.20bdab6
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/migrator/itemsBlockMigrator.js +163 -225
- package/dist/extensions/Blocks/Items/controls/name/trimming.js +17 -18
- package/dist/extensions/Blocks/Items/controls/settingsControl.js +105 -114
- package/dist/extensions/Blocks/Items/enums/productEnums.js +9 -14
- package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +9 -11
- package/dist/extensions/Blocks/Items/template.js +201 -212
- package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +29 -28
- package/dist/package.json.js +1 -1
- package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +0 -3
- package/dist/src/extensions/Blocks/Items/template.d.ts +0 -19
- package/dist/utils/pairProductVariables.js +71 -71
- package/package.json +3 -3
- package/dist/extensions/Blocks/Items/constants/cardLayout.js +0 -20
- package/dist/src/extensions/Blocks/Items/constants/cardLayout.d.ts +0 -44
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
var v = Object.defineProperty;
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { BLOCK_ID as
|
|
5
|
-
import { productPairs as
|
|
6
|
-
import { ItemInCartOptions as I, DefaultConfigValues as
|
|
7
|
-
import { getDefaultTemplate as
|
|
8
|
-
import { useTemplateStore as
|
|
2
|
+
var U = (o, t, r) => t in o ? v(o, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[t] = r;
|
|
3
|
+
var M = (o, t, r) => U(o, typeof t != "symbol" ? t + "" : t, r);
|
|
4
|
+
import { BLOCK_ID as w } from "../../extensions/Blocks/Items/block.js";
|
|
5
|
+
import { productPairs as K } from "../../extensions/Blocks/Items/enums/productEnums.js";
|
|
6
|
+
import { ItemInCartOptions as I, DefaultConfigValues as g, SETTINGS_ENUMS as p } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
|
|
7
|
+
import { getDefaultTemplate as F } from "../../extensions/Blocks/Items/template.js";
|
|
8
|
+
import { useTemplateStore as q } from "../../stores/template.js";
|
|
9
9
|
const x = {
|
|
10
10
|
img: {
|
|
11
11
|
pairsKey: "imageSrc",
|
|
@@ -73,129 +73,126 @@ const x = {
|
|
|
73
73
|
isArray: !1
|
|
74
74
|
}
|
|
75
75
|
};
|
|
76
|
-
function
|
|
76
|
+
function O() {
|
|
77
77
|
return String(Date.now() + Math.floor(Math.random() * 1e3));
|
|
78
78
|
}
|
|
79
|
-
function
|
|
80
|
-
return
|
|
79
|
+
function k(o) {
|
|
80
|
+
return o ? {
|
|
81
81
|
CartItems: p.ITEMS_TYPE.CART_ITEMS,
|
|
82
82
|
BrowsedItems: p.ITEMS_TYPE.BROWSED_ITEMS,
|
|
83
83
|
PurchasedItems: p.ITEMS_TYPE.PURCHASED_ITEMS,
|
|
84
84
|
CART_ITEMS: p.ITEMS_TYPE.CART_ITEMS,
|
|
85
85
|
BROWSED_ITEMS: p.ITEMS_TYPE.BROWSED_ITEMS,
|
|
86
86
|
PURCHASED_ITEMS: p.ITEMS_TYPE.PURCHASED_ITEMS
|
|
87
|
-
}[
|
|
87
|
+
}[o] || p.ITEMS_TYPE.CART_ITEMS : p.ITEMS_TYPE.CART_ITEMS;
|
|
88
88
|
}
|
|
89
|
-
function
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (l && !l.includes("{{") && /^\d+$/.test(l)) {
|
|
97
|
-
const s = parseInt(l) - 1, c = I[o];
|
|
98
|
-
c && c[s] && (l = c[s].value);
|
|
89
|
+
function h(o) {
|
|
90
|
+
var e;
|
|
91
|
+
const t = (l, u) => l == null ? u : l === "1" || l === "true", r = (l, u) => l || u, c = o["data-type"] || o["data-source"], a = k(c), i = I[a];
|
|
92
|
+
let n = o["data-cart_items_select_control_value"] || ((e = i == null ? void 0 : i[0]) == null ? void 0 : e.value) || g.cartItemsSelectControlValue;
|
|
93
|
+
if (n && !n.includes("{{") && /^\d+$/.test(n)) {
|
|
94
|
+
const l = parseInt(n) - 1, u = I[a];
|
|
95
|
+
u && u[l] && (n = u[l].value);
|
|
99
96
|
}
|
|
100
97
|
return {
|
|
101
98
|
initialized: !0,
|
|
102
|
-
blockInstanceId:
|
|
103
|
-
source:
|
|
104
|
-
type:
|
|
105
|
-
itemsSelectValue:
|
|
106
|
-
orientation:
|
|
107
|
-
nameTrimming: t(
|
|
108
|
-
priceHideDiscount: t(
|
|
109
|
-
priceFormatted: t(
|
|
110
|
-
priceSinglePrice: t(
|
|
111
|
-
priceCurrencySymbol:
|
|
112
|
-
|
|
113
|
-
|
|
99
|
+
blockInstanceId: r(o["data-block-instance-id"], O()),
|
|
100
|
+
source: a,
|
|
101
|
+
type: a,
|
|
102
|
+
itemsSelectValue: n,
|
|
103
|
+
orientation: o["data-card_orientation_control_value"] || p.ORIENTATION.VERTICAL,
|
|
104
|
+
nameTrimming: t(o["data-product_name_control_trim"], !0),
|
|
105
|
+
priceHideDiscount: t(o["data-product_price_control_nodup"], !0),
|
|
106
|
+
priceFormatted: t(o["data-product_price_control_formated"], !0),
|
|
107
|
+
priceSinglePrice: t(o["data-product_price_control_single_price"], !1),
|
|
108
|
+
priceCurrencySymbol: r(
|
|
109
|
+
o["data-product_price_control_currency_symbol"],
|
|
110
|
+
g.productPriceCurrencySymbolControlValue
|
|
114
111
|
),
|
|
115
|
-
priceCurrencyLocation:
|
|
116
|
-
|
|
117
|
-
|
|
112
|
+
priceCurrencyLocation: r(
|
|
113
|
+
o["data-product_price_currency_location"],
|
|
114
|
+
g.productPriceCurrencyLocationControlValue
|
|
118
115
|
),
|
|
119
|
-
priceOrientation:
|
|
120
|
-
quantityControlEnabled: t(
|
|
121
|
-
buttonLink:
|
|
122
|
-
imageLink:
|
|
123
|
-
buttonLabel:
|
|
124
|
-
buttonFullWidth: t(
|
|
125
|
-
imageVisible: t(
|
|
126
|
-
nameVisible: t(
|
|
127
|
-
quantityVisible: t(
|
|
128
|
-
priceVisible: t(
|
|
129
|
-
originalPriceVisible: t(
|
|
130
|
-
buttonVisible: t(
|
|
116
|
+
priceOrientation: o["data-product_original_price_control_orientation"] || "horizontal",
|
|
117
|
+
quantityControlEnabled: t(o["data-product_quantity_control_enabled"], !0),
|
|
118
|
+
buttonLink: r(o["data-product_button_link"], g.productButtonLinkControlValue),
|
|
119
|
+
imageLink: r(o["data-product_image_link"], g.productImageLinkControlValue),
|
|
120
|
+
buttonLabel: r(o["data-product_button_control_label"], "Buy"),
|
|
121
|
+
buttonFullWidth: t(o["data-product_button_control_atw"], !0),
|
|
122
|
+
imageVisible: t(o["data-product_image_control_enabled"], !0),
|
|
123
|
+
nameVisible: t(o["data-product_name_control_enabled"], !0),
|
|
124
|
+
quantityVisible: t(o["data-product_quantity_control_enabled"], !0),
|
|
125
|
+
priceVisible: t(o["data-product_price_control_enabled"], !0),
|
|
126
|
+
originalPriceVisible: t(o["data-product_original_price_control_enabled"], !0),
|
|
127
|
+
buttonVisible: t(o["data-product_button_control_enabled"], !0)
|
|
131
128
|
};
|
|
132
129
|
}
|
|
133
|
-
const
|
|
130
|
+
const V = {
|
|
134
131
|
ins_apr: "CART_ITEMS",
|
|
135
132
|
browsed_item: "BROWSED_ITEMS",
|
|
136
133
|
purchased_item: "PURCHASED_ITEMS"
|
|
137
134
|
};
|
|
138
|
-
function
|
|
139
|
-
const
|
|
135
|
+
function $(o, t) {
|
|
136
|
+
const r = {
|
|
140
137
|
CART_ITEMS: `{{Abandoned Cart Item (${t}) Image}}`,
|
|
141
138
|
BROWSED_ITEMS: `{{Browsed Item (${t}) Image}}`,
|
|
142
139
|
PURCHASED_ITEMS: `{{Purchased Item (${t}) Image}}`
|
|
143
140
|
};
|
|
144
|
-
return
|
|
141
|
+
return r[o] || r.CART_ITEMS;
|
|
145
142
|
}
|
|
146
|
-
function
|
|
147
|
-
const
|
|
143
|
+
function N(o, t) {
|
|
144
|
+
const r = {
|
|
148
145
|
CART_ITEMS: `{{Abandoned Cart Item (${t}) Url}}`,
|
|
149
146
|
BROWSED_ITEMS: `{{Browsed Item (${t}) Url}}`,
|
|
150
147
|
PURCHASED_ITEMS: `{{Purchased Item (${t}) Url}}`
|
|
151
148
|
};
|
|
152
|
-
return
|
|
149
|
+
return r[o] || r.CART_ITEMS;
|
|
153
150
|
}
|
|
154
|
-
class
|
|
151
|
+
class H {
|
|
155
152
|
constructor() {
|
|
156
|
-
|
|
153
|
+
M(this, "parser");
|
|
157
154
|
this.parser = new DOMParser();
|
|
158
155
|
}
|
|
159
156
|
migrate(t) {
|
|
160
157
|
try {
|
|
161
158
|
if (!this.containsItemsBlock(t))
|
|
162
159
|
return this.backfillV2ProductTdAttributes(t);
|
|
163
|
-
let
|
|
164
|
-
|
|
165
|
-
const
|
|
160
|
+
let r = this.removeJinjaConditionals(t);
|
|
161
|
+
r = this.replaceTemplateVariables(r);
|
|
162
|
+
const c = this.parser.parseFromString(r, "text/html"), a = c.querySelectorAll(
|
|
166
163
|
"td.esd-cart-items-block, td.esd-browsed-items-block, td.esd-purchased-items-block"
|
|
167
164
|
);
|
|
168
|
-
return
|
|
169
|
-
|
|
170
|
-
}),
|
|
171
|
-
const
|
|
172
|
-
orientation:
|
|
173
|
-
itemsType:
|
|
174
|
-
itemId:
|
|
175
|
-
currencySymbol:
|
|
176
|
-
currencyLocation:
|
|
177
|
-
formattedPrice:
|
|
178
|
-
configBlockAttributes:
|
|
165
|
+
return q().$patch((n) => {
|
|
166
|
+
n.migrations = { ...n.migrations, [w]: a.length };
|
|
167
|
+
}), a.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), r) : (a.forEach((n) => {
|
|
168
|
+
const e = this.extractConfiguration(n), l = F({
|
|
169
|
+
orientation: e.orientation,
|
|
170
|
+
itemsType: e.itemsType,
|
|
171
|
+
itemId: e.itemId,
|
|
172
|
+
currencySymbol: e.currencySymbol,
|
|
173
|
+
currencyLocation: e.currencyLocation,
|
|
174
|
+
formattedPrice: e.formattedPrice,
|
|
175
|
+
configBlockAttributes: e.configBlockAttributes,
|
|
179
176
|
migrate: !0,
|
|
180
|
-
nameStyles:
|
|
181
|
-
buttonStyles:
|
|
182
|
-
priceStyles:
|
|
183
|
-
originalPriceStyles:
|
|
184
|
-
quantityStyles:
|
|
185
|
-
nodeConfig:
|
|
186
|
-
}),
|
|
187
|
-
`<table><tbody><tr>${
|
|
177
|
+
nameStyles: e.nameStyles,
|
|
178
|
+
buttonStyles: e.buttonStyles,
|
|
179
|
+
priceStyles: e.priceStyles,
|
|
180
|
+
originalPriceStyles: e.originalPriceStyles,
|
|
181
|
+
quantityStyles: e.quantityStyles,
|
|
182
|
+
nodeConfig: h(e.configBlockAttributes)
|
|
183
|
+
}), s = this.parser.parseFromString(
|
|
184
|
+
`<table><tbody><tr>${l}</tr></tbody></table>`,
|
|
188
185
|
"text/html"
|
|
189
186
|
).querySelector("td");
|
|
190
|
-
if (
|
|
191
|
-
const _ =
|
|
192
|
-
|
|
193
|
-
const
|
|
194
|
-
|
|
187
|
+
if (s && n.parentNode) {
|
|
188
|
+
const _ = h(e.configBlockAttributes);
|
|
189
|
+
s.setAttribute("esd-ext-config", JSON.stringify(_)), s.setAttribute("data-type", _.type);
|
|
190
|
+
const d = s.querySelector("esd-config-block");
|
|
191
|
+
d && d.remove(), n.parentNode.replaceChild(s, n);
|
|
195
192
|
}
|
|
196
|
-
}),
|
|
197
|
-
} catch (
|
|
198
|
-
return console.error("ItemsBlockMigrator failed:",
|
|
193
|
+
}), c.documentElement.outerHTML);
|
|
194
|
+
} catch (r) {
|
|
195
|
+
return console.error("ItemsBlockMigrator failed:", r), t;
|
|
199
196
|
}
|
|
200
197
|
}
|
|
201
198
|
/**
|
|
@@ -205,85 +202,28 @@ class Y {
|
|
|
205
202
|
* - UI styles from product elements (name, price, button, quantity, etc.)
|
|
206
203
|
*/
|
|
207
204
|
extractConfiguration(t) {
|
|
208
|
-
var D;
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
),
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
_ && (u = _ === "after" ? "1" : "0"), r["data-product_price_currency_location"] = u, r["data-product_price_control_currency_symbol"] = d;
|
|
216
|
-
const A = (c == null ? void 0 : c.getAttribute("data-formated")) ?? r["data-product_price_control_formated"], C = A !== "false" && A !== "0", m = r["data-card_orientation_control_value"];
|
|
217
|
-
let g;
|
|
218
|
-
m ? g = m === "horizontal" ? "horizontal" : "vertical" : g = t.querySelector('[colspan="2"]') !== null ? "vertical" : "horizontal";
|
|
219
|
-
const y = t.querySelector('a[product-attr="name"]'), b = (y == null ? void 0 : y.getAttribute("style")) || void 0, E = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), L = (E == null ? void 0 : E.getAttribute("style")) || void 0, w = (s == null ? void 0 : s.getAttribute("style")) || void 0, f = t.querySelector("p.original-price") ?? t.querySelector('[product-attr="originalPrice"]'), T = f != null && f.getAttribute("style") ? f : (f == null ? void 0 : f.closest("p")) ?? f, k = (T == null ? void 0 : T.getAttribute("style")) || void 0, h = t.querySelector('[product-attr="quantity"]'), q = (h == null ? void 0 : h.getAttribute("style")) || void 0;
|
|
205
|
+
var C, D, P;
|
|
206
|
+
const r = k(
|
|
207
|
+
((C = t.querySelector("[data-type]")) == null ? void 0 : C.getAttribute("data-type")) ?? null
|
|
208
|
+
), c = ((D = t.querySelector("[data-number]")) == null ? void 0 : D.getAttribute("data-number")) || "1", a = parseInt(c) - 1, i = I[r], n = ((P = i == null ? void 0 : i[a]) == null ? void 0 : P.value) || i[0].value, e = t.querySelector('[product-attr="price"]'), l = (e == null ? void 0 : e.getAttribute("data-currency_symbol")) || "USD", s = ((e == null ? void 0 : e.getAttribute("data-curency")) || "before") === "after" ? "1" : "0", _ = (e == null ? void 0 : e.getAttribute("data-formated")) !== "false", d = this.extractConfigBlockAttributes(t, r, c), b = d["data-card_orientation_control_value"];
|
|
209
|
+
let S;
|
|
210
|
+
b ? S = b === "horizontal" ? "horizontal" : "vertical" : S = t.querySelector('[colspan="2"]') !== null ? "vertical" : "horizontal";
|
|
211
|
+
const y = t.querySelector('a[product-attr="name"]'), A = (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, R = (e == null ? void 0 : e.getAttribute("style")) || void 0, E = t.querySelector("p.original-price"), L = (E == null ? void 0 : E.getAttribute("style")) || void 0, T = t.querySelector('[product-attr="quantity"]'), B = (T == null ? void 0 : T.getAttribute("style")) || void 0;
|
|
220
212
|
return {
|
|
221
|
-
orientation:
|
|
222
|
-
itemsType:
|
|
223
|
-
itemId:
|
|
224
|
-
currencySymbol:
|
|
225
|
-
currencyLocation:
|
|
226
|
-
formattedPrice:
|
|
227
|
-
configBlockAttributes:
|
|
228
|
-
nameStyles:
|
|
229
|
-
buttonStyles:
|
|
230
|
-
priceStyles:
|
|
231
|
-
originalPriceStyles:
|
|
232
|
-
quantityStyles:
|
|
213
|
+
orientation: S,
|
|
214
|
+
itemsType: r,
|
|
215
|
+
itemId: n,
|
|
216
|
+
currencySymbol: l,
|
|
217
|
+
currencyLocation: s,
|
|
218
|
+
formattedPrice: _,
|
|
219
|
+
configBlockAttributes: d,
|
|
220
|
+
nameStyles: A,
|
|
221
|
+
buttonStyles: m,
|
|
222
|
+
priceStyles: R,
|
|
223
|
+
originalPriceStyles: L,
|
|
224
|
+
quantityStyles: B
|
|
233
225
|
};
|
|
234
226
|
}
|
|
235
|
-
/**
|
|
236
|
-
* DOM fallback for hand-edited templates whose esd-config-block was deleted. With no
|
|
237
|
-
* toggle record left, derive each field's enabled state from whether its product-attr
|
|
238
|
-
* element still exists and read the button label from the live caption — a deleted
|
|
239
|
-
* element means the field is off, not an all-ON default. A present config block stays
|
|
240
|
-
* authoritative (a missing flag there still means "default on"), so we no-op for it.
|
|
241
|
-
*/
|
|
242
|
-
applyDomFallbacks(t, e) {
|
|
243
|
-
var c;
|
|
244
|
-
const n = t.querySelector("esd-config-block");
|
|
245
|
-
if (Object.entries({
|
|
246
|
-
image: '[product-attr="imageSrc"]',
|
|
247
|
-
name: '[product-attr="name"]',
|
|
248
|
-
price: '[product-attr="price"]',
|
|
249
|
-
original_price: '[product-attr="originalPrice"], p.original-price',
|
|
250
|
-
quantity: '[product-attr="quantity"]',
|
|
251
|
-
button: '[product-attr="button"]'
|
|
252
|
-
}).forEach(([d, _]) => {
|
|
253
|
-
const u = `data-product_${d}_control_enabled`;
|
|
254
|
-
(!n || !n.hasAttribute(u)) && (e[u] = t.querySelector(_) ? "true" : "false");
|
|
255
|
-
}), n)
|
|
256
|
-
return;
|
|
257
|
-
e["data-card_orientation_control_value"] = t.querySelector('[colspan="2"]') ? "vertical" : "horizontal";
|
|
258
|
-
const i = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), l = (c = i == null ? void 0 : i.textContent) == null ? void 0 : c.replace(/\s+/g, " ").trim();
|
|
259
|
-
l && (e["data-product_button_control_label"] = l), /display:\s*inline/.test((i == null ? void 0 : i.getAttribute("style")) || "") && (e["data-product_button_control_atw"] = "false");
|
|
260
|
-
const r = t.querySelector('[product-attr="imageSrc"]'), s = r ? this.readImageDimension(r) : null;
|
|
261
|
-
s && (e["data-product_image_control_image-height"] = s, e["data-product_image_control_image-width"] = s);
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Reads an attribute from the block element itself before falling back to a descendant.
|
|
265
|
-
* Real legacy markup carries data-type/data-number on the `.ins-product-td` AND on the
|
|
266
|
-
* esd-config-block; when an author deletes the config block only the td's copy survives.
|
|
267
|
-
*/
|
|
268
|
-
readSelfOrDescendantAttribute(t, e) {
|
|
269
|
-
var n;
|
|
270
|
-
return t.getAttribute(e) || ((n = t.querySelector(`[${e}]`)) == null ? void 0 : n.getAttribute(e)) || null;
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Reads a pixel dimension for the product image from its DOM element — the legacy
|
|
274
|
-
* `width` attribute first, then a px value in the inline style. An explicit `width` wins
|
|
275
|
-
* over `max-width`, which is only an upper bound; `max-width` still covers the common
|
|
276
|
-
* `width: 100%` case, where no pixel size can be read from `width` itself.
|
|
277
|
-
* Returns null when no pixel size is present.
|
|
278
|
-
*/
|
|
279
|
-
readImageDimension(t) {
|
|
280
|
-
var i;
|
|
281
|
-
const e = (i = t.getAttribute("width")) == null ? void 0 : i.trim();
|
|
282
|
-
if (e && /^\d+$/.test(e))
|
|
283
|
-
return e;
|
|
284
|
-
const n = t.getAttribute("style") || "", o = n.match(/(?:^|;)\s*width:\s*(\d+)px/) || n.match(/max-width:\s*(\d+)px/);
|
|
285
|
-
return o ? o[1] : null;
|
|
286
|
-
}
|
|
287
227
|
/**
|
|
288
228
|
* Extracts all data-* attributes from the esd-config-block element
|
|
289
229
|
* Returns a key-value mapping of all configuration attributes
|
|
@@ -291,27 +231,27 @@ class Y {
|
|
|
291
231
|
* @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
|
|
292
232
|
* @param itemNumber - The item number (1-based index)
|
|
293
233
|
*/
|
|
294
|
-
extractConfigBlockAttributes(t,
|
|
295
|
-
const
|
|
296
|
-
if (
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
}
|
|
306
|
-
if (i["data-product_price_control_curency"]) {
|
|
307
|
-
const r = i["data-product_price_control_curency"];
|
|
308
|
-
let s = r;
|
|
309
|
-
r === "before" ? s = "0" : r === "after" && (s = "1"), i["data-product_price_control_curency"] = s, i["data-product_price_currency_location"] = s;
|
|
234
|
+
extractConfigBlockAttributes(t, r, c) {
|
|
235
|
+
const a = t.querySelector("esd-config-block"), i = {};
|
|
236
|
+
if (!a)
|
|
237
|
+
return this.getDefaultConfigBlockAttributes();
|
|
238
|
+
if (Array.from(a.attributes).forEach((e) => {
|
|
239
|
+
e.name.startsWith("data-") && (i[e.name] = e.value);
|
|
240
|
+
}), i["data-cart_items_select_control_value"]) {
|
|
241
|
+
const e = i["data-cart_items_select_control_value"];
|
|
242
|
+
if (/^\d+$/.test(e)) {
|
|
243
|
+
const l = parseInt(e) - 1, u = I[r];
|
|
244
|
+
u && u[l] && (i["data-cart_items_select_control_value"] = u[l].value);
|
|
310
245
|
}
|
|
311
|
-
(!i["data-product_price_control_currency_symbol"] || i["data-product_price_control_currency_symbol"].trim() === "") && (i["data-product_price_control_currency_symbol"] = "USD");
|
|
312
246
|
}
|
|
313
|
-
|
|
314
|
-
|
|
247
|
+
if (i["data-product_price_control_curency"]) {
|
|
248
|
+
const e = i["data-product_price_control_curency"];
|
|
249
|
+
let l = e;
|
|
250
|
+
e === "before" ? l = "0" : e === "after" && (l = "1"), i["data-product_price_control_curency"] = l, i["data-product_price_currency_location"] = l;
|
|
251
|
+
}
|
|
252
|
+
(!i["data-product_price_control_currency_symbol"] || i["data-product_price_control_currency_symbol"].trim() === "") && (i["data-product_price_control_currency_symbol"] = "USD");
|
|
253
|
+
const n = { ...this.getDefaultConfigBlockAttributes(), ...i };
|
|
254
|
+
return n["data-type"] = r, n["data-source"] = r, n["data-product_image_link"] = $(r, c), n["data-product_button_link"] = N(r, c), n;
|
|
315
255
|
}
|
|
316
256
|
/**
|
|
317
257
|
* Returns default esd-config-block attributes based on the old template structure
|
|
@@ -385,27 +325,25 @@ class Y {
|
|
|
385
325
|
backfillV2ProductTdAttributes(t) {
|
|
386
326
|
if (!t.includes("ins-product-td") || !t.includes("esd-ext-config"))
|
|
387
327
|
return t;
|
|
388
|
-
const
|
|
389
|
-
let
|
|
390
|
-
return
|
|
391
|
-
|
|
392
|
-
const i =
|
|
393
|
-
|
|
394
|
-
const l = o.getAttribute("esd-ext-config");
|
|
395
|
-
let r = null;
|
|
328
|
+
const r = this.parser.parseFromString(t, "text/html");
|
|
329
|
+
let c = !1;
|
|
330
|
+
return r.querySelectorAll(".ins-product-td").forEach((a) => {
|
|
331
|
+
a.hasAttribute("width") && (a.removeAttribute("width"), c = !0);
|
|
332
|
+
const i = a.getAttribute("esd-ext-config");
|
|
333
|
+
let n = null;
|
|
396
334
|
try {
|
|
397
|
-
|
|
335
|
+
n = i ? JSON.parse(i) : null;
|
|
398
336
|
} catch {
|
|
399
337
|
}
|
|
400
|
-
if (!
|
|
338
|
+
if (!n || (!a.getAttribute("data-nodup") && typeof n.priceHideDiscount == "boolean" && (a.setAttribute("data-nodup", String(n.priceHideDiscount)), c = !0), a.getAttribute("data-type")))
|
|
401
339
|
return;
|
|
402
|
-
const
|
|
403
|
-
if (!
|
|
340
|
+
const e = n.type || n.source;
|
|
341
|
+
if (!e)
|
|
404
342
|
return;
|
|
405
|
-
|
|
406
|
-
const
|
|
407
|
-
|
|
408
|
-
}),
|
|
343
|
+
a.setAttribute("data-type", e), c = !0;
|
|
344
|
+
const l = typeof n.itemsSelectValue == "string" ? n.itemsSelectValue.match(/\((\d+)\)/) : null;
|
|
345
|
+
l && a.getAttribute("data-number") !== l[1] && a.setAttribute("data-number", l[1]);
|
|
346
|
+
}), c ? r.documentElement.outerHTML : t;
|
|
409
347
|
}
|
|
410
348
|
/**
|
|
411
349
|
* Fast check for the presence of any items block (cart / browsed / purchased)
|
|
@@ -426,17 +364,17 @@ class Y {
|
|
|
426
364
|
* contains display condition Jinja scripts that should NOT be removed.
|
|
427
365
|
*/
|
|
428
366
|
removeJinjaConditionals(t) {
|
|
429
|
-
const
|
|
430
|
-
let
|
|
431
|
-
return
|
|
367
|
+
const r = "__ESD_DISPLAY_CONDITIONS_PLACEHOLDER__", c = t.match(/esd-custom-display-conditions="[^"]*"/);
|
|
368
|
+
let a = c ? t.replace(c[0], r) : t;
|
|
369
|
+
return a = a.replace(
|
|
432
370
|
/\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_total_product_kind\s*(>|>)\s*\d+\s*%\}/g,
|
|
433
371
|
""
|
|
434
|
-
),
|
|
372
|
+
), a = a.replace(
|
|
435
373
|
/\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_price_\d+\s*(!=|!=)\s*\1_originalprice_\d+\s*%\}/g,
|
|
436
374
|
""
|
|
437
|
-
),
|
|
375
|
+
), a = a.replace(/\{%\s*endif\s*%\}/g, ""), c && (a = a.replace(r, c[0])), a = a.replace(/\n\s*\n\s*\n/g, `
|
|
438
376
|
|
|
439
|
-
`),
|
|
377
|
+
`), a;
|
|
440
378
|
}
|
|
441
379
|
/**
|
|
442
380
|
* Replaces template variables with default values from productPairs
|
|
@@ -448,32 +386,32 @@ class Y {
|
|
|
448
386
|
* - {{purchased_item_formattedprice_5}} → '1,490.49' (PURCHASED_ITEMS)
|
|
449
387
|
*/
|
|
450
388
|
replaceTemplateVariables(t) {
|
|
451
|
-
const { PAIRS_FOR_EXTENSION:
|
|
452
|
-
return t.replace(/{{([^}]+)}}/g, (
|
|
453
|
-
const i =
|
|
389
|
+
const { PAIRS_FOR_EXTENSION: r } = K;
|
|
390
|
+
return t.replace(/{{([^}]+)}}/g, (c, a) => {
|
|
391
|
+
const i = a.match(/^(ins_apr|browsed_item|purchased_item)_([a-z_]+)_(\d+)$/);
|
|
454
392
|
if (!i)
|
|
455
|
-
return
|
|
456
|
-
const [,
|
|
457
|
-
if (!
|
|
458
|
-
return console.warn(`Unknown variable prefix: ${
|
|
459
|
-
const
|
|
460
|
-
if (!
|
|
461
|
-
return console.warn(`Unknown variable suffix mapping for: ${
|
|
462
|
-
const { pairsKey: _, defaultKey:
|
|
463
|
-
if (!
|
|
464
|
-
return console.warn(`No data found for: ${_}.${
|
|
465
|
-
if (
|
|
466
|
-
const
|
|
467
|
-
return Array.isArray(
|
|
393
|
+
return c;
|
|
394
|
+
const [, n, e, l] = i, u = V[n];
|
|
395
|
+
if (!u)
|
|
396
|
+
return console.warn(`Unknown variable prefix: ${n}`), c;
|
|
397
|
+
const s = x[e];
|
|
398
|
+
if (!s)
|
|
399
|
+
return console.warn(`Unknown variable suffix mapping for: ${e}`), c;
|
|
400
|
+
const { pairsKey: _, defaultKey: d, isArray: b } = s, y = r[_][u];
|
|
401
|
+
if (!y)
|
|
402
|
+
return console.warn(`No data found for: ${_}.${u}`), c;
|
|
403
|
+
if (b) {
|
|
404
|
+
const f = parseInt(l) - 1, m = y[d];
|
|
405
|
+
return Array.isArray(m) && m[f] ? m[f] : (console.warn(`Array value not found: ${_}.${u}.${d}[${f}]`), c);
|
|
468
406
|
}
|
|
469
|
-
const
|
|
470
|
-
return
|
|
407
|
+
const A = y[d];
|
|
408
|
+
return A !== void 0 ? String(A) : (console.warn(`Default value not found: ${_}.${u}.${d}`), c);
|
|
471
409
|
});
|
|
472
410
|
}
|
|
473
411
|
}
|
|
474
|
-
function
|
|
475
|
-
return new
|
|
412
|
+
function Q(o) {
|
|
413
|
+
return new H().migrate(o);
|
|
476
414
|
}
|
|
477
415
|
export {
|
|
478
|
-
|
|
416
|
+
Q as migrateItemsBlock
|
|
479
417
|
};
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { ModificationDescription as
|
|
2
|
-
import { CommonControl as
|
|
3
|
-
import { nameMaxWidthFor as h } from "../../constants/cardLayout.js";
|
|
1
|
+
import { ModificationDescription as l, UIElementType as s, UEAttr as d } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
2
|
+
import { CommonControl as p } from "../../../common-control.js";
|
|
4
3
|
import { ItemsBlockControlId as a } from "../../enums/controlEnums.js";
|
|
5
|
-
import { findNameTextNode as
|
|
6
|
-
import { getItemsBlockConfig as r, setItemsBlockConfig as
|
|
7
|
-
const
|
|
4
|
+
import { findNameTextNode as T } from "../../utils/nameNode.js";
|
|
5
|
+
import { getItemsBlockConfig as r, setItemsBlockConfig as c } from "../../utils/nodeConfigUtils.js";
|
|
6
|
+
const g = a.NAME_TRIMMING, i = {
|
|
8
7
|
TRIMMING: "trimming"
|
|
9
8
|
};
|
|
10
|
-
class
|
|
9
|
+
class y extends p {
|
|
11
10
|
getId() {
|
|
12
|
-
return
|
|
11
|
+
return g;
|
|
13
12
|
}
|
|
14
13
|
getTemplate() {
|
|
15
14
|
return `
|
|
@@ -20,39 +19,39 @@ class E extends T {
|
|
|
20
19
|
}
|
|
21
20
|
onRender() {
|
|
22
21
|
const e = r(this.currentNode);
|
|
23
|
-
this.api.updateValues({ [
|
|
22
|
+
this.api.updateValues({ [i.TRIMMING]: (e == null ? void 0 : e.nameTrimming) ?? !0 }), this.api.onValueChanged(i.TRIMMING, (t) => {
|
|
24
23
|
this._onTrimmingChange(t);
|
|
25
24
|
});
|
|
26
25
|
}
|
|
27
26
|
onTemplateNodeUpdated(e) {
|
|
28
27
|
super.onTemplateNodeUpdated(e), this.handleBlockInstanceChange(() => {
|
|
29
28
|
const t = r(this.currentNode);
|
|
30
|
-
this.api.updateValues({ [
|
|
29
|
+
this.api.updateValues({ [i.TRIMMING]: (t == null ? void 0 : t.nameTrimming) ?? !0 });
|
|
31
30
|
});
|
|
32
31
|
}
|
|
33
32
|
_onTrimmingChange(e) {
|
|
34
|
-
|
|
33
|
+
c(this.currentNode, this.api, { nameTrimming: e }), this.api.updateValues({ [i.TRIMMING]: e }), this._applyTrimmingStyles(e);
|
|
35
34
|
}
|
|
36
35
|
_applyTrimmingStyles(e) {
|
|
37
|
-
const t =
|
|
36
|
+
const t = T(this.currentNode);
|
|
38
37
|
if (!t)
|
|
39
38
|
return;
|
|
40
|
-
const
|
|
41
|
-
m ? o.setStyle("white-space", "nowrap").setStyle("overflow", "hidden").setStyle("text-overflow", "ellipsis") : o.removeStyle("white-space").removeStyle("overflow").removeStyle("text-overflow"), o.setStyle("max-width",
|
|
39
|
+
const n = r(this.currentNode), m = e !== void 0 ? e : (n == null ? void 0 : n.nameTrimming) ?? !0, o = this.api.getDocumentModifier().modifyHtml(t);
|
|
40
|
+
m ? o.setStyle("white-space", "nowrap").setStyle("overflow", "hidden").setStyle("text-overflow", "ellipsis") : o.removeStyle("white-space").removeStyle("overflow").removeStyle("text-overflow"), o.setStyle("max-width", "100%").apply(new l(`Text Trimming ${m ? "Enabled" : "Disabled"}`));
|
|
42
41
|
}
|
|
43
42
|
_getTextTrimming() {
|
|
44
43
|
return `
|
|
45
44
|
<div class="display-flex align-items-center justify-content-between">
|
|
46
45
|
<${s.LABEL}
|
|
47
|
-
${
|
|
46
|
+
${d.LABEL.text}="${this.api.translate("Text Trimming")}"
|
|
48
47
|
>
|
|
49
48
|
</${s.LABEL}>
|
|
50
|
-
${this._GuToggle(
|
|
49
|
+
${this._GuToggle(i.TRIMMING)}
|
|
51
50
|
</div>
|
|
52
51
|
`;
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
export {
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
g as CONTROL_BLOCK_ID,
|
|
56
|
+
y as NameTrimmingControl
|
|
58
57
|
};
|