@useinsider/guido 3.22.0 → 3.23.0
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 +35 -4
- package/dist/components/Guido.vue.js +1 -1
- package/dist/components/Guido.vue2.js +118 -108
- package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +11 -11
- package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +9 -9
- package/dist/composables/useEditorOpenMetrics.js +167 -0
- package/dist/composables/useStripo.js +93 -82
- package/dist/config/compiler/utils/recommendationCompilerUtils.js +22 -22
- package/dist/config/migrator/recommendation/compositionMapper.js +56 -49
- package/dist/config/migrator/recommendation/extractors.js +100 -40
- package/dist/config/migrator/recommendation/htmlBuilder.js +285 -207
- package/dist/config/migrator/recommendation/settingsMapper.js +37 -36
- package/dist/config/migrator/recommendation/themeMapper.js +53 -41
- package/dist/config/migrator/recommendationMigrator.js +68 -61
- package/dist/extensions/Blocks/Items/controls/button/link.js +14 -17
- package/dist/extensions/Blocks/Items/controls/cardComposition.js +14 -17
- package/dist/extensions/Blocks/Items/controls/image/link.js +14 -17
- package/dist/extensions/Blocks/Items/controls/name/trimming.js +9 -10
- package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +24 -25
- package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +12 -13
- package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +29 -30
- package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +15 -16
- package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +25 -26
- package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +27 -28
- package/dist/extensions/Blocks/Items/controls/settingsControl.js +75 -80
- package/dist/extensions/Blocks/Recommendation/block.js +33 -24
- package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +3 -3
- package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +27 -26
- package/dist/extensions/Blocks/Recommendation/controls/customAttribute/textTrim.js +13 -13
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +165 -175
- package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +5 -5
- package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +8 -8
- package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +15 -15
- package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +12 -12
- package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +10 -10
- package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +1 -1
- package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +23 -22
- package/dist/extensions/Blocks/Recommendation/templates/list/template.js +19 -18
- package/dist/extensions/Blocks/Recommendation/templates/utils.js +82 -91
- package/dist/extensions/Blocks/Recommendation/utils/inlinePriceOrder.js +12 -0
- package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMap.js +3 -2
- package/dist/extensions/Blocks/common-control.js +62 -55
- package/dist/guido.css +1 -1
- package/dist/library.js +12 -10
- package/dist/package.json.js +6 -4
- package/dist/public/prefetchRuntime.js +4 -0
- package/dist/src/composables/useEditorOpenMetrics.d.ts +27 -0
- package/dist/src/composables/useStripo.d.ts +2 -1
- package/dist/src/config/migrator/recommendation/compositionMapper.d.ts +3 -1
- package/dist/src/config/migrator/recommendation/extractors.d.ts +35 -6
- package/dist/src/config/migrator/recommendation/htmlBuilder.d.ts +3 -1
- package/dist/src/config/migrator/recommendation/themeMapper.d.ts +3 -1
- package/dist/src/config/migrator/recommendation/types.d.ts +11 -1
- package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/block.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +5 -10
- package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +1 -13
- package/dist/src/extensions/Blocks/Recommendation/utils/inlinePriceOrder.d.ts +9 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMap.d.ts +2 -19
- package/dist/src/extensions/Blocks/common-control.d.ts +2 -0
- package/dist/src/library.d.ts +1 -0
- package/dist/src/public/prefetchRuntime.d.ts +1 -0
- package/dist/src/stores/unsubscribe.d.ts +10 -0
- package/dist/src/utils/runtimePrefetch.d.ts +4 -0
- package/dist/src/utils/stripoRuntime.d.ts +3 -0
- package/dist/static/stripo-runtime-manifest.json.js +9 -0
- package/dist/stores/unsubscribe.js +33 -29
- package/dist/utils/runtimePrefetch.js +26 -0
- package/dist/utils/stripoRuntime.js +13 -0
- package/package.json +7 -2
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { ModificationDescription as N, UEAttr as L } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
2
|
-
import { CommonControl as
|
|
3
|
-
import { reorientBlockCellPadding as D, nameMaxWidthFor as
|
|
4
|
-
import { ItemsBlockId as
|
|
5
|
-
import { productPairs as
|
|
6
|
-
import { SETTINGS_ENUMS as
|
|
2
|
+
import { CommonControl as F } from "../../common-control.js";
|
|
3
|
+
import { reorientBlockCellPadding as D, nameMaxWidthFor as $ } from "../constants/cardLayout.js";
|
|
4
|
+
import { ItemsBlockId as T } from "../enums/controlEnums.js";
|
|
5
|
+
import { productPairs as S, templateFirstLine as x } from "../enums/productEnums.js";
|
|
6
|
+
import { SETTINGS_ENUMS as I, ItemTypeOptions as H, OrientationOptions as w, ItemInCartOptions as O, DefaultConfigValues as U } from "../enums/settingsEnums.js";
|
|
7
7
|
import q from "../layouts/horizontal.html.js";
|
|
8
|
-
import
|
|
9
|
-
import { getDefaultTemplate as
|
|
8
|
+
import B from "../layouts/vertical.html.js";
|
|
9
|
+
import { getDefaultTemplate as V, wrapInTableRow as C, applyPriceOrientationStyles as G } from "../template.js";
|
|
10
10
|
import { findNameTextNode as Y } from "../utils/nameNode.js";
|
|
11
|
-
import { getItemsBlockConfig as _, setItemsBlockConfig as
|
|
11
|
+
import { getItemsBlockConfig as _, setItemsBlockConfig as b, escapeReplacement as g, deriveItemNumber as v } from "../utils/nodeConfigUtils.js";
|
|
12
12
|
const Q = "ui-elements-items-block", p = {
|
|
13
13
|
ITEMS_TYPE: "itemsType",
|
|
14
14
|
ORIENTATION: "orientation",
|
|
15
15
|
ITEM_IDS: "itemIds"
|
|
16
16
|
};
|
|
17
|
-
class
|
|
17
|
+
class oe extends F {
|
|
18
18
|
getId() {
|
|
19
19
|
return Q;
|
|
20
20
|
}
|
|
@@ -28,19 +28,14 @@ class se extends $ {
|
|
|
28
28
|
`;
|
|
29
29
|
}
|
|
30
30
|
onRender() {
|
|
31
|
-
|
|
32
|
-
this.api.updateValues({
|
|
33
|
-
[p.ORIENTATION]: (e == null ? void 0 : e.orientation) ?? T.ORIENTATION.VERTICAL,
|
|
34
|
-
[p.ITEMS_TYPE]: (e == null ? void 0 : e.type) ?? T.ITEMS_TYPE.CART_ITEMS,
|
|
35
|
-
[p.ITEM_IDS]: (e == null ? void 0 : e.itemsSelectValue) ?? ""
|
|
36
|
-
}), this._listenToFormUpdates();
|
|
31
|
+
this.forgetLastPanelNode(), this._listenToFormUpdates();
|
|
37
32
|
}
|
|
38
33
|
onTemplateNodeUpdated(e) {
|
|
39
34
|
super.onTemplateNodeUpdated(e), console.debug("Items Block Config", e.getNodeConfig()), this.handleBlockInstanceChange(() => {
|
|
40
35
|
const r = _(this.currentNode);
|
|
41
36
|
this.api.updateValues({
|
|
42
|
-
[p.ORIENTATION]: (r == null ? void 0 : r.orientation) ??
|
|
43
|
-
[p.ITEMS_TYPE]: (r == null ? void 0 : r.type) ??
|
|
37
|
+
[p.ORIENTATION]: (r == null ? void 0 : r.orientation) ?? I.ORIENTATION.VERTICAL,
|
|
38
|
+
[p.ITEMS_TYPE]: (r == null ? void 0 : r.type) ?? I.ITEMS_TYPE.CART_ITEMS,
|
|
44
39
|
[p.ITEM_IDS]: (r == null ? void 0 : r.itemsSelectValue) ?? ""
|
|
45
40
|
}), this._initializeSelectItems();
|
|
46
41
|
});
|
|
@@ -85,7 +80,7 @@ class se extends $ {
|
|
|
85
80
|
_onOrientationChange(e) {
|
|
86
81
|
this.api.updateValues({ [p.ORIENTATION]: e });
|
|
87
82
|
const r = this.api.getDocumentModifier();
|
|
88
|
-
|
|
83
|
+
b(this.currentNode, this.api, {
|
|
89
84
|
orientation: e,
|
|
90
85
|
priceOrientation: "horizontal"
|
|
91
86
|
}, r), r.apply(new N("Changed orientation")), this._reOrderTemplate(), setTimeout(() => {
|
|
@@ -93,15 +88,15 @@ class se extends $ {
|
|
|
93
88
|
}, 50);
|
|
94
89
|
}
|
|
95
90
|
_onItemsTypeChange(e) {
|
|
96
|
-
const r =
|
|
91
|
+
const r = I.ITEMS_TYPE[e], t = O[e], i = t == null ? void 0 : t[0];
|
|
97
92
|
if (!r || !i)
|
|
98
93
|
return;
|
|
99
|
-
const n = i.value,
|
|
100
|
-
|
|
94
|
+
const n = i.value, o = i.value.replace("Url}}", "Image}}"), a = this.api.getDocumentModifier();
|
|
95
|
+
b(this.currentNode, this.api, {
|
|
101
96
|
source: r,
|
|
102
97
|
type: r,
|
|
103
98
|
itemsSelectValue: i.value,
|
|
104
|
-
imageLink:
|
|
99
|
+
imageLink: o,
|
|
105
100
|
buttonLink: n
|
|
106
101
|
}, a), this._updateDataTypeAttributes(r, a), this._initializeSelectItems();
|
|
107
102
|
const l = this._getTemplateData(r, i.value);
|
|
@@ -110,7 +105,7 @@ class se extends $ {
|
|
|
110
105
|
_onItemIdsChange(e) {
|
|
111
106
|
this.api.updateValues({ [p.ITEM_IDS]: e });
|
|
112
107
|
const r = e, t = e.replace("Url}}", "Image}}"), i = this.api.getDocumentModifier();
|
|
113
|
-
|
|
108
|
+
b(this.currentNode, this.api, {
|
|
114
109
|
itemsSelectValue: e,
|
|
115
110
|
imageLink: t,
|
|
116
111
|
buttonLink: r
|
|
@@ -124,11 +119,11 @@ class se extends $ {
|
|
|
124
119
|
L.SELECTPICKER.items,
|
|
125
120
|
H
|
|
126
121
|
);
|
|
127
|
-
const e = _(this.currentNode), r = (e == null ? void 0 : e.type) ??
|
|
122
|
+
const e = _(this.currentNode), r = (e == null ? void 0 : e.type) ?? I.ITEMS_TYPE.CART_ITEMS, t = (e == null ? void 0 : e.itemsSelectValue) ?? "";
|
|
128
123
|
this.api.updateValues({
|
|
129
124
|
[p.ITEMS_TYPE]: r
|
|
130
125
|
});
|
|
131
|
-
const i =
|
|
126
|
+
const i = O[r];
|
|
132
127
|
this.api.setUIEAttribute(
|
|
133
128
|
p.ITEM_IDS,
|
|
134
129
|
L.SELECTPICKER.items,
|
|
@@ -150,113 +145,113 @@ class se extends $ {
|
|
|
150
145
|
);
|
|
151
146
|
}
|
|
152
147
|
_renderTemplate() {
|
|
153
|
-
const e = _(this.currentNode), r = (e == null ? void 0 : e.orientation) ??
|
|
154
|
-
this.api.getDocumentModifier().modifyHtml(this.currentNode).setInnerHtml(
|
|
148
|
+
const e = _(this.currentNode), r = (e == null ? void 0 : e.orientation) ?? I.ORIENTATION.VERTICAL, t = (e == null ? void 0 : e.type) ?? I.ITEMS_TYPE.CART_ITEMS, i = (e == null ? void 0 : e.itemsSelectValue) ?? "", n = (e == null ? void 0 : e.priceCurrencySymbol) ?? "", o = (e == null ? void 0 : e.priceCurrencyLocation) ?? "0", a = (e == null ? void 0 : e.priceFormatted) ?? !1;
|
|
149
|
+
this.api.getDocumentModifier().modifyHtml(this.currentNode).setInnerHtml(V({
|
|
155
150
|
orientation: r,
|
|
156
151
|
itemsType: t,
|
|
157
152
|
itemId: i,
|
|
158
153
|
currencySymbol: n,
|
|
159
|
-
currencyLocation:
|
|
154
|
+
currencyLocation: o,
|
|
160
155
|
formattedPrice: a
|
|
161
156
|
})).apply(new N("Updated template"));
|
|
162
157
|
}
|
|
163
158
|
_getTemplateData(e, r) {
|
|
164
|
-
const t = _(this.currentNode), i = e ?? (t == null ? void 0 : t.type) ??
|
|
159
|
+
const t = _(this.currentNode), i = e ?? (t == null ? void 0 : t.type) ?? I.ITEMS_TYPE.CART_ITEMS, n = r ?? (t == null ? void 0 : t.itemsSelectValue) ?? "", o = (t == null ? void 0 : t.priceFormatted) ?? !1, a = (t == null ? void 0 : t.priceSinglePrice) ?? !1, l = O[i].findIndex((h) => h.value === n), c = l > -1 ? l : 0, s = S.PAIRS_FOR_EXTENSION.price[i], d = S.PAIRS_FOR_EXTENSION.originalPrice[i];
|
|
165
160
|
let m, u;
|
|
166
|
-
return a ? (m =
|
|
167
|
-
imageSrc:
|
|
168
|
-
name:
|
|
161
|
+
return a ? (m = o ? s.DEFAULT_SINGLE_PRICE_FORMATTED : s.DEFAULT_SINGLE_PRICE, u = o ? d.DEFAULT_SINGLE_PRICE_FORMATTED : d.DEFAULT_SINGLE_PRICE) : (m = o ? s.DEFAULT_PRICE_FORMATTED : s.DEFAULT_PRICE, u = o ? d.DEFAULT_PRICE_FORMATTED : d.DEFAULT_PRICE), {
|
|
162
|
+
imageSrc: S.PAIRS_FOR_EXTENSION.imageSrc[i].DEFAULT[c],
|
|
163
|
+
name: S.PAIRS_FOR_EXTENSION.name[i].DEFAULT[c],
|
|
169
164
|
price: m,
|
|
170
165
|
originalPrice: u,
|
|
171
|
-
quantity:
|
|
172
|
-
button:
|
|
166
|
+
quantity: S.PAIRS_FOR_EXTENSION.quantity[i].DEFAULT,
|
|
167
|
+
button: S.PAIRS_FOR_EXTENSION.button[i].DEFAULT_LABEL
|
|
173
168
|
};
|
|
174
169
|
}
|
|
175
170
|
_updateImageSrc(e, r) {
|
|
176
171
|
var i;
|
|
177
|
-
const t = (i = this.currentNode) == null ? void 0 : i.querySelector(`[esd-extension-block-id="${
|
|
172
|
+
const t = (i = this.currentNode) == null ? void 0 : i.querySelector(`[esd-extension-block-id="${T.IMAGE}"] img`);
|
|
178
173
|
t && r.modifyHtml(t).setAttribute("src", e);
|
|
179
174
|
}
|
|
180
175
|
_updateName(e, r) {
|
|
181
|
-
var
|
|
182
|
-
const t = (
|
|
176
|
+
var o;
|
|
177
|
+
const t = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${T.NAME}"]`);
|
|
183
178
|
if (!t)
|
|
184
179
|
return;
|
|
185
180
|
const i = t.getInnerText().trim();
|
|
186
181
|
let n = t.getInnerHTML().trim();
|
|
187
|
-
n = n.replace(i,
|
|
182
|
+
n = n.replace(i, g(e)), r.modifyHtml(t).setInnerHtml(n);
|
|
188
183
|
}
|
|
189
184
|
_updatePrice(e, r) {
|
|
190
185
|
var a;
|
|
191
186
|
const t = ((a = this.currentNode) == null ? void 0 : a.querySelectorAll(
|
|
192
|
-
`[esd-extension-block-id="${
|
|
193
|
-
)) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "",
|
|
187
|
+
`[esd-extension-block-id="${T.PRICE}"]`
|
|
188
|
+
)) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", o = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
|
|
194
189
|
t.forEach((l) => {
|
|
195
190
|
const c = this._getParagraphFromBlock(l);
|
|
196
191
|
if (!c)
|
|
197
192
|
return;
|
|
198
|
-
const
|
|
199
|
-
r.modifyHtml(c).setInnerHtml(
|
|
193
|
+
const s = c.getInnerHTML().trim() || "", d = c.getInnerText().trim() || "", m = (n == null ? void 0 : n.trim()) || "", u = this._removeCurrencySymbol(d, m), h = this._replacePriceNumber(u, e), E = this._buildPriceContent(h, m, o), y = s.replace(d, g(E));
|
|
194
|
+
r.modifyHtml(c).setInnerHtml(y);
|
|
200
195
|
});
|
|
201
196
|
}
|
|
202
197
|
_updateOriginalPrice(e, r) {
|
|
203
198
|
var a;
|
|
204
199
|
const t = ((a = this.currentNode) == null ? void 0 : a.querySelectorAll(
|
|
205
|
-
`[esd-extension-block-id="${
|
|
206
|
-
)) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "",
|
|
200
|
+
`[esd-extension-block-id="${T.ORIGINAL_PRICE}"]`
|
|
201
|
+
)) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", o = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
|
|
207
202
|
t.forEach((l) => {
|
|
208
203
|
const c = this._getParagraphFromBlock(l);
|
|
209
204
|
if (!c)
|
|
210
205
|
return;
|
|
211
|
-
const
|
|
212
|
-
if (!
|
|
206
|
+
const s = c.querySelector("s");
|
|
207
|
+
if (!s)
|
|
213
208
|
return;
|
|
214
|
-
const d =
|
|
215
|
-
r.modifyHtml(c).setInnerHtml(
|
|
209
|
+
const d = s.getInnerHTML().trim() || "", m = s.getInnerText().trim() || "", u = (n == null ? void 0 : n.trim()) || "", h = this._removeCurrencySymbol(m, u), E = this._replacePriceNumber(h, e), y = this._buildPriceContent(E, u, o), A = `<s>${d.replace(m, g(y))}</s>`;
|
|
210
|
+
r.modifyHtml(c).setInnerHtml(A);
|
|
216
211
|
});
|
|
217
212
|
}
|
|
218
213
|
_updateQuantity(e, r, t) {
|
|
219
214
|
var h;
|
|
220
|
-
const i = _(this.currentNode),
|
|
215
|
+
const i = _(this.currentNode), o = (r ?? (i == null ? void 0 : i.type) ?? I.ITEMS_TYPE.CART_ITEMS) !== I.ITEMS_TYPE.BROWSED_ITEMS, a = (i == null ? void 0 : i.quantityControlEnabled) !== !1, l = o && a, c = (h = this.currentNode) == null ? void 0 : h.querySelector(`[esd-extension-block-id="${T.QUANTITY}"]`);
|
|
221
216
|
if (!c)
|
|
222
217
|
return;
|
|
223
|
-
const
|
|
224
|
-
if (!
|
|
218
|
+
const s = this._getParagraphFromBlock(c);
|
|
219
|
+
if (!s)
|
|
225
220
|
return;
|
|
226
|
-
const d =
|
|
227
|
-
let m =
|
|
228
|
-
function u(E,
|
|
221
|
+
const d = s.getInnerText().trim();
|
|
222
|
+
let m = s.getInnerHTML().trim();
|
|
223
|
+
function u(E, y, P) {
|
|
229
224
|
return E.replace(
|
|
230
|
-
new RegExp(`(>\\s*)?${
|
|
225
|
+
new RegExp(`(>\\s*)?${y}(\\s*<)?`, "g"),
|
|
231
226
|
`$1${P}$2`
|
|
232
227
|
);
|
|
233
228
|
}
|
|
234
|
-
m = u(m, d, e), t.modifyHtml(
|
|
229
|
+
m = u(m, d, e), t.modifyHtml(s).setInnerHtml(m), t.modifyHtml(c).setStyle("display", l ? "table-cell" : "none");
|
|
235
230
|
}
|
|
236
231
|
_reOrderTemplate(e) {
|
|
237
|
-
var h, E,
|
|
238
|
-
const r = (h = this.currentNode) == null ? void 0 : h.querySelector(`[esd-extension-block-id="${
|
|
239
|
-
`[esd-extension-block-id="${
|
|
232
|
+
var h, E, y, P, A, M;
|
|
233
|
+
const r = (h = this.currentNode) == null ? void 0 : h.querySelector(`[esd-extension-block-id="${T.IMAGE}"]`), t = (E = this.currentNode) == null ? void 0 : E.querySelector(`[esd-extension-block-id="${T.NAME}"]`), i = ((y = this.currentNode) == null ? void 0 : y.querySelectorAll(
|
|
234
|
+
`[esd-extension-block-id="${T.PRICE}"]`
|
|
240
235
|
)) || [], n = ((P = this.currentNode) == null ? void 0 : P.querySelectorAll(
|
|
241
|
-
`[esd-extension-block-id="${
|
|
242
|
-
)) || [], [
|
|
243
|
-
if (!r || !t || !
|
|
236
|
+
`[esd-extension-block-id="${T.ORIGINAL_PRICE}"]`
|
|
237
|
+
)) || [], [o] = i, [a] = n, l = (A = this.currentNode) == null ? void 0 : A.querySelector(`[esd-extension-block-id="${T.QUANTITY}"]`), c = (M = this.currentNode) == null ? void 0 : M.querySelector(`[esd-extension-block-id="${T.BUTTON}"]`);
|
|
238
|
+
if (!r || !t || !o || !a || !l || !c)
|
|
244
239
|
return;
|
|
245
|
-
const
|
|
246
|
-
let u = m ?
|
|
240
|
+
const s = _(this.currentNode), d = (s == null ? void 0 : s.orientation) ?? I.ORIENTATION.VERTICAL, m = d === I.ORIENTATION.VERTICAL;
|
|
241
|
+
let u = m ? B : q;
|
|
247
242
|
setTimeout(() => {
|
|
248
|
-
const
|
|
243
|
+
const f = g(D(o.getOuterHTML(), m)), k = g(
|
|
249
244
|
D(a.getOuterHTML(), m)
|
|
250
245
|
);
|
|
251
|
-
u = u.replace("{-{-TEMPLATE_FIRST_LINE-}-}", m ? x : "").replace("{-{-PRODUCT_IMAGE-}-}", C(r.getOuterHTML())).replace("{-{-PRODUCT_NAME-}-}", C(t.getOuterHTML())).replaceAll("{-{-PRODUCT_PRICE-}-}", C(
|
|
246
|
+
u = u.replace("{-{-TEMPLATE_FIRST_LINE-}-}", m ? x : "").replace("{-{-PRODUCT_IMAGE-}-}", C(r.getOuterHTML())).replace("{-{-PRODUCT_NAME-}-}", C(t.getOuterHTML())).replaceAll("{-{-PRODUCT_PRICE-}-}", C(f)).replaceAll("{-{-PRODUCT_ORIGINAL_PRICE-}-}", C(k)).replace("{-{-PRODUCT_QUANTITY-}-}", C(l.getOuterHTML())).replace("{-{-PRODUCT_BUTTON-}-}", C(c.getOuterHTML())), u = G(
|
|
252
247
|
u,
|
|
253
248
|
d,
|
|
254
|
-
(
|
|
255
|
-
(
|
|
256
|
-
(
|
|
249
|
+
(s == null ? void 0 : s.priceOrientation) ?? "horizontal",
|
|
250
|
+
(s == null ? void 0 : s.priceVisible) ?? !0,
|
|
251
|
+
(s == null ? void 0 : s.originalPriceVisible) ?? !0
|
|
257
252
|
), u = u.trim().replace(x, "").slice(0, -5);
|
|
258
|
-
const
|
|
259
|
-
|
|
253
|
+
const R = e ?? this.api.getDocumentModifier();
|
|
254
|
+
R.modifyHtml(r.querySelector("img")).setAttribute("width", U.productImageWidth).setAttribute("height", U.productImageWidth), R.modifyHtml(this.currentNode).setInnerHtml(u), e || R.apply(new N("Reordered template"));
|
|
260
255
|
}, 50);
|
|
261
256
|
}
|
|
262
257
|
_updateDataTypeAttributes(e, r) {
|
|
@@ -264,15 +259,15 @@ class se extends $ {
|
|
|
264
259
|
return;
|
|
265
260
|
const t = this.currentNode.closest(".ins-product-td");
|
|
266
261
|
t && r.modifyHtml(t).setAttribute("data-type", e), this.currentNode.querySelectorAll("[data-type]").forEach((n) => {
|
|
267
|
-
const
|
|
268
|
-
r.modifyHtml(
|
|
262
|
+
const o = n;
|
|
263
|
+
r.modifyHtml(o).setAttribute("data-type", e);
|
|
269
264
|
});
|
|
270
265
|
}
|
|
271
266
|
_updateDataNumberAttributes(e, r) {
|
|
272
267
|
if (!this.currentNode)
|
|
273
268
|
return;
|
|
274
|
-
const t = _(this.currentNode), i = (t == null ? void 0 : t.type) ??
|
|
275
|
-
|
|
269
|
+
const t = _(this.currentNode), i = (t == null ? void 0 : t.type) ?? I.ITEMS_TYPE.CART_ITEMS, n = v(e, i), o = this.currentNode.closest(".ins-product-td");
|
|
270
|
+
o && r.modifyHtml(o).setAttribute("data-number", n), this.currentNode.querySelectorAll("[data-number]").forEach((l) => {
|
|
276
271
|
const c = l;
|
|
277
272
|
r.modifyHtml(c).setAttribute("data-number", n);
|
|
278
273
|
});
|
|
@@ -282,16 +277,16 @@ class se extends $ {
|
|
|
282
277
|
this._updateImageSrc(r.imageSrc, t), this._updateName(r.name, t), this._updatePrice(r.price, t), this._updateOriginalPrice(r.originalPrice, t), this._updateQuantity(r.quantity, e, t), t.apply(new N("Refilled template"));
|
|
283
278
|
}
|
|
284
279
|
_recalculateTrimming() {
|
|
285
|
-
var
|
|
280
|
+
var o;
|
|
286
281
|
if (!this.currentNode)
|
|
287
282
|
return;
|
|
288
|
-
const e = (
|
|
283
|
+
const e = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${T.NAME}"]`);
|
|
289
284
|
if (!e)
|
|
290
285
|
return;
|
|
291
286
|
const r = Y(e);
|
|
292
287
|
if (!r)
|
|
293
288
|
return;
|
|
294
|
-
const t = _(this.currentNode), i = (t == null ? void 0 : t.nameTrimming) ?? !0, n =
|
|
289
|
+
const t = _(this.currentNode), i = (t == null ? void 0 : t.nameTrimming) ?? !0, n = $(t == null ? void 0 : t.orientation);
|
|
295
290
|
this.api.getDocumentModifier().modifyHtml(r).setStyle("overflow", "hidden").setStyle("white-space", i ? "nowrap" : "normal").setStyle("text-overflow", i ? "ellipsis" : "unset").setStyle("max-width", n).removeStyle("width").apply(new N("Recalculated trimming after orientation change"));
|
|
296
291
|
}
|
|
297
292
|
_getParagraphFromBlock(e) {
|
|
@@ -309,7 +304,7 @@ class se extends $ {
|
|
|
309
304
|
} else {
|
|
310
305
|
const n = t.match(/([^0-9.,\s]+)/);
|
|
311
306
|
if (n && n[1]) {
|
|
312
|
-
const
|
|
307
|
+
const o = n[1].trim(), a = new RegExp(`\\s*${this._escapeRegex(o)}\\s*`);
|
|
313
308
|
i = t.replace(a, "").trim();
|
|
314
309
|
}
|
|
315
310
|
}
|
|
@@ -325,5 +320,5 @@ class se extends $ {
|
|
|
325
320
|
}
|
|
326
321
|
export {
|
|
327
322
|
Q as CONTROL_BLOCK_ID,
|
|
328
|
-
|
|
323
|
+
oe as ItemsBlockControl
|
|
329
324
|
};
|
|
@@ -2,23 +2,24 @@ var b = Object.defineProperty;
|
|
|
2
2
|
var A = (m, c, e) => c in m ? b(m, c, { enumerable: !0, configurable: !0, writable: !0, value: e }) : m[c] = e;
|
|
3
3
|
var u = (m, c, e) => A(m, typeof c != "symbol" ? c + "" : c, e);
|
|
4
4
|
import { useConfig as g } from "../../../composables/useConfig.js";
|
|
5
|
-
import { BlockId as
|
|
6
|
-
import { getMigrationBannerHtml as
|
|
5
|
+
import { BlockId as E } from "../../../enums/block.js";
|
|
6
|
+
import { getMigrationBannerHtml as D } from "../../../utils/migrationBannerHtml.js";
|
|
7
7
|
import { Block as S, BlockCompositionType as v, ModificationDescription as _ } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
8
|
-
import { CURRENT_CONFIG_VERSION as
|
|
8
|
+
import { CURRENT_CONFIG_VERSION as M, PRE_RRS_CONFIG_VERSION as N } from "./constants/defaultConfig.js";
|
|
9
9
|
import { RECOMMENDATION_ID_ATTR as f } from "./constants/selectors.js";
|
|
10
|
-
import { ensureMobileFitRule as
|
|
11
|
-
import { regenerateMobileProductRows as
|
|
12
|
-
import { ensureMobileCssRulesExist as I, setMobileLayoutOptOut as R, hasMobileLayoutOptOut as
|
|
10
|
+
import { ensureMobileFitRule as T, syncHeightBound as w } from "./controls/image/index.js";
|
|
11
|
+
import { regenerateMobileProductRows as O } from "./controls/main/utils.js";
|
|
12
|
+
import { ensureMobileCssRulesExist as I, setMobileLayoutOptOut as R, hasMobileLayoutOptOut as x } from "./controls/mobileLayout/cssRules.js";
|
|
13
|
+
import { CSS_CLASS_TEXT_TRIM as H, ensureTextTrimCssRulesExist as $ } from "./controls/shared/textTrimCssRules.js";
|
|
13
14
|
import { RecommendationConfigService as a } from "./services/configService.js";
|
|
14
15
|
import { useRecommendationExtensionStore as p } from "./store/recommendation.js";
|
|
15
|
-
import { getDefaultTemplate as
|
|
16
|
+
import { getDefaultTemplate as q } from "./templates/grid/template.js";
|
|
16
17
|
import { useRecommendationBlockWarning as F } from "./useRecommendationBlockWarning.js";
|
|
17
|
-
import { registerNodeConfigWriter as y, readBlockNodeConfigs as
|
|
18
|
-
import { refreshArrivedStrategyBlocks as
|
|
19
|
-
const k =
|
|
18
|
+
import { registerNodeConfigWriter as y, readBlockNodeConfigs as L } from "./utils/nodeConfigWriter.js";
|
|
19
|
+
import { refreshArrivedStrategyBlocks as P, resolveSourceConfig as V, refreshDuplicatedStrategyBlocks as W } from "./utils/strategyCommit.js";
|
|
20
|
+
const k = E.Recommendation, h = "recommendation-block-v2", C = "hide-price";
|
|
20
21
|
let B = !1;
|
|
21
|
-
class
|
|
22
|
+
class ae extends S {
|
|
22
23
|
constructor() {
|
|
23
24
|
super();
|
|
24
25
|
/**
|
|
@@ -52,7 +53,7 @@ class se extends S {
|
|
|
52
53
|
);
|
|
53
54
|
}
|
|
54
55
|
getSettingsPanelTitleHtml() {
|
|
55
|
-
return
|
|
56
|
+
return D(
|
|
56
57
|
k,
|
|
57
58
|
this.api.translate("Recommendation Block"),
|
|
58
59
|
this.api.translate("This block is switched from the Old Version to the New Version. We recommend you check the Recommendation block and test your message to ensure it works properly.")
|
|
@@ -76,7 +77,7 @@ class se extends S {
|
|
|
76
77
|
*/
|
|
77
78
|
getTemplate() {
|
|
78
79
|
const e = this._generateNextId();
|
|
79
|
-
return this._pendingBlockId = e,
|
|
80
|
+
return this._pendingBlockId = e, q(e);
|
|
80
81
|
}
|
|
81
82
|
/**
|
|
82
83
|
* Called when a new block is dropped into the template
|
|
@@ -110,7 +111,7 @@ class se extends S {
|
|
|
110
111
|
e,
|
|
111
112
|
{
|
|
112
113
|
recommendationId: i,
|
|
113
|
-
configVersion: r ?
|
|
114
|
+
configVersion: r ? M : N,
|
|
114
115
|
...s ? { partnerName: g().partnerName.value } : {},
|
|
115
116
|
// An RRS block picks a strategy, not an algorithm, and its algorithm control is
|
|
116
117
|
// hidden. Keeping the `mostPopular` default would bake a most-popular feed URL
|
|
@@ -121,7 +122,7 @@ class se extends S {
|
|
|
121
122
|
if (l.setCurrentBlock(i), this._stampHidePrice(e, n.priceHideIfSameAsDiscounted), o) {
|
|
122
123
|
I(this.api);
|
|
123
124
|
const d = this._getBlockElement(e);
|
|
124
|
-
d && (R(this.api, d, !0),
|
|
125
|
+
d && (R(this.api, d, !0), O({
|
|
125
126
|
currentNode: e,
|
|
126
127
|
documentModifier: this.api.getDocumentModifier()
|
|
127
128
|
}));
|
|
@@ -155,13 +156,13 @@ class se extends S {
|
|
|
155
156
|
"Assign recommendation ID to legacy block"
|
|
156
157
|
);
|
|
157
158
|
}
|
|
158
|
-
this._healLingeringDuplicate(e), a.needsMigration(e) && this._migrateFromLegacy(e), this._healHidePriceAttr(e), this._ensureMobileFitRule(e), this._syncHeightBound(e);
|
|
159
|
+
this._healLingeringDuplicate(e), a.needsMigration(e) && this._migrateFromLegacy(e), this._healHidePriceAttr(e), this._ensureMobileFitRule(e), this._syncHeightBound(e), this._ensureTextTrimCss(e);
|
|
159
160
|
try {
|
|
160
161
|
B || (I(this.api), B = !0);
|
|
161
162
|
const t = a.getConfig(e), i = this._getBlockElement(e);
|
|
162
163
|
if (i) {
|
|
163
164
|
const r = !t.mobileLayoutEnabled;
|
|
164
|
-
|
|
165
|
+
x(i) !== r && R(this.api, i, r);
|
|
165
166
|
}
|
|
166
167
|
} catch {
|
|
167
168
|
}
|
|
@@ -179,7 +180,15 @@ class se extends S {
|
|
|
179
180
|
}
|
|
180
181
|
_ensureMobileFitRule(e) {
|
|
181
182
|
try {
|
|
182
|
-
|
|
183
|
+
T(this.api, e);
|
|
184
|
+
} catch {
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// A migrated block arrives with trimmed cells but without the stylesheet rules the toggle would have added.
|
|
188
|
+
_ensureTextTrimCss(e) {
|
|
189
|
+
var t;
|
|
190
|
+
try {
|
|
191
|
+
(t = this._getBlockElement(e)) != null && t.querySelector(`.${H}`) && $(this.api);
|
|
183
192
|
} catch {
|
|
184
193
|
}
|
|
185
194
|
}
|
|
@@ -187,7 +196,7 @@ class se extends S {
|
|
|
187
196
|
const t = this._getBlockElement(e);
|
|
188
197
|
if (t)
|
|
189
198
|
try {
|
|
190
|
-
|
|
199
|
+
w(this.api, t);
|
|
191
200
|
} catch {
|
|
192
201
|
}
|
|
193
202
|
}
|
|
@@ -270,7 +279,7 @@ class se extends S {
|
|
|
270
279
|
const d = { strategyId: l.strategyId };
|
|
271
280
|
return t.add(n), this._refreshClaims.set(n, d), [{ id: n, config: l, claim: d }];
|
|
272
281
|
});
|
|
273
|
-
i.length &&
|
|
282
|
+
i.length && P(i.map(({ id: r, config: s }) => ({ id: r, config: s }))).catch((r) => console.error("[recommendation] refreshing an arrived strategy failed", r)).finally(() => i.forEach(({ id: r, claim: s }) => this._releaseRefreshClaim(r, s)));
|
|
274
283
|
}
|
|
275
284
|
/**
|
|
276
285
|
* A new document reports each block to onCreated and onDocumentInit, not always in one batch, so a
|
|
@@ -282,7 +291,7 @@ class se extends S {
|
|
|
282
291
|
return !0;
|
|
283
292
|
if (i.strategyId === t)
|
|
284
293
|
return !1;
|
|
285
|
-
const r =
|
|
294
|
+
const r = L(e);
|
|
286
295
|
return r.length > 0 && r.every((s) => s.strategyId === t);
|
|
287
296
|
}
|
|
288
297
|
_releaseRefreshClaim(e, t) {
|
|
@@ -344,10 +353,10 @@ class se extends S {
|
|
|
344
353
|
if (r.cloneBlockState(t, i), r.setCurrentBlock(i), g().isFeatureEnabled("reusableRecommendationStrategy")) {
|
|
345
354
|
this._resetSourceIds.add(t), y(this.api);
|
|
346
355
|
const s = a.getConfig(e), n = [
|
|
347
|
-
{ id: t, claim: { strategyId:
|
|
356
|
+
{ id: t, claim: { strategyId: V(t, s).strategyId } },
|
|
348
357
|
{ id: i, claim: { strategyId: s.strategyId } }
|
|
349
358
|
].filter(({ id: o }) => !this._refreshClaims.has(o));
|
|
350
|
-
n.forEach(({ id: o, claim: l }) => this._refreshClaims.set(o, l)),
|
|
359
|
+
n.forEach(({ id: o, claim: l }) => this._refreshClaims.set(o, l)), W(t, i, s).catch((o) => console.error("[recommendation] refreshing a duplicated strategy failed", o)).finally(() => n.forEach(({ id: o, claim: l }) => this._releaseRefreshClaim(o, l)));
|
|
351
360
|
}
|
|
352
361
|
this._warnIfMultipleBlocks();
|
|
353
362
|
}
|
|
@@ -451,5 +460,5 @@ class se extends S {
|
|
|
451
460
|
}
|
|
452
461
|
export {
|
|
453
462
|
k as BLOCK_ID,
|
|
454
|
-
|
|
463
|
+
ae as RecommendationBlock
|
|
455
464
|
};
|
|
@@ -7,7 +7,7 @@ const u = "recommendation-card-background-color-control", e = {
|
|
|
7
7
|
GRID: ".product-card-segment",
|
|
8
8
|
LIST: ".product-card-wrapper"
|
|
9
9
|
};
|
|
10
|
-
class
|
|
10
|
+
class h extends s {
|
|
11
11
|
getId() {
|
|
12
12
|
return u;
|
|
13
13
|
}
|
|
@@ -18,7 +18,7 @@ class _ extends s {
|
|
|
18
18
|
]);
|
|
19
19
|
}
|
|
20
20
|
onRender() {
|
|
21
|
-
this.
|
|
21
|
+
this.forgetLastPanelNode(), this._listenToFormUpdates();
|
|
22
22
|
}
|
|
23
23
|
onTemplateNodeUpdated(r) {
|
|
24
24
|
super.onTemplateNodeUpdated(r), this._setFormValues();
|
|
@@ -72,5 +72,5 @@ class _ extends s {
|
|
|
72
72
|
}
|
|
73
73
|
export {
|
|
74
74
|
u as CARD_BACKGROUND_COLOR_CONTROL_ID,
|
|
75
|
-
|
|
75
|
+
h as CardBackgroundColorControl
|
|
76
76
|
};
|