@builder.io/sdk-qwik 0.18.12 → 0.18.13
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/lib/browser/blocks/personalization-container/component-info.qwik.cjs +48 -0
- package/lib/browser/blocks/personalization-container/component-info.qwik.mjs +48 -0
- package/lib/browser/blocks/personalization-container/helpers/inlined-fns.qwik.cjs +82 -0
- package/lib/browser/blocks/personalization-container/helpers/inlined-fns.qwik.mjs +82 -0
- package/lib/browser/blocks/personalization-container/helpers.qwik.cjs +86 -0
- package/lib/browser/blocks/personalization-container/helpers.qwik.mjs +87 -0
- package/lib/browser/blocks/personalization-container/personalization-container.qwik.cjs +382 -0
- package/lib/browser/blocks/personalization-container/personalization-container.qwik.mjs +382 -0
- package/lib/browser/components/blocks/blocks.qwik.cjs +37 -34
- package/lib/browser/components/blocks/blocks.qwik.mjs +38 -35
- package/lib/browser/components/content-variants/content-variants.qwik.cjs +42 -21
- package/lib/browser/components/content-variants/content-variants.qwik.mjs +42 -21
- package/lib/browser/constants/builder-registered-components.qwik.cjs +14 -10
- package/lib/browser/constants/builder-registered-components.qwik.mjs +14 -10
- package/lib/browser/constants/sdk-version.qwik.cjs +1 -1
- package/lib/browser/constants/sdk-version.qwik.mjs +1 -1
- package/lib/edge/blocks/personalization-container/component-info.qwik.cjs +48 -0
- package/lib/edge/blocks/personalization-container/component-info.qwik.mjs +48 -0
- package/lib/edge/blocks/personalization-container/helpers/inlined-fns.qwik.cjs +82 -0
- package/lib/edge/blocks/personalization-container/helpers/inlined-fns.qwik.mjs +82 -0
- package/lib/edge/blocks/personalization-container/helpers.qwik.cjs +86 -0
- package/lib/edge/blocks/personalization-container/helpers.qwik.mjs +87 -0
- package/lib/edge/blocks/personalization-container/personalization-container.qwik.cjs +382 -0
- package/lib/edge/blocks/personalization-container/personalization-container.qwik.mjs +382 -0
- package/lib/edge/components/blocks/blocks.qwik.cjs +37 -34
- package/lib/edge/components/blocks/blocks.qwik.mjs +38 -35
- package/lib/edge/components/content-variants/content-variants.qwik.cjs +42 -21
- package/lib/edge/components/content-variants/content-variants.qwik.mjs +42 -21
- package/lib/edge/constants/builder-registered-components.qwik.cjs +14 -11
- package/lib/edge/constants/builder-registered-components.qwik.mjs +14 -11
- package/lib/edge/constants/sdk-version.qwik.cjs +1 -1
- package/lib/edge/constants/sdk-version.qwik.mjs +1 -1
- package/lib/node/blocks/personalization-container/component-info.qwik.cjs +48 -0
- package/lib/node/blocks/personalization-container/component-info.qwik.mjs +48 -0
- package/lib/node/blocks/personalization-container/helpers/inlined-fns.qwik.cjs +82 -0
- package/lib/node/blocks/personalization-container/helpers/inlined-fns.qwik.mjs +82 -0
- package/lib/node/blocks/personalization-container/helpers.qwik.cjs +86 -0
- package/lib/node/blocks/personalization-container/helpers.qwik.mjs +87 -0
- package/lib/node/blocks/personalization-container/personalization-container.qwik.cjs +382 -0
- package/lib/node/blocks/personalization-container/personalization-container.qwik.mjs +382 -0
- package/lib/node/components/blocks/blocks.qwik.cjs +37 -34
- package/lib/node/components/blocks/blocks.qwik.mjs +38 -35
- package/lib/node/components/content-variants/content-variants.qwik.cjs +42 -21
- package/lib/node/components/content-variants/content-variants.qwik.mjs +42 -21
- package/lib/node/constants/builder-registered-components.qwik.cjs +14 -11
- package/lib/node/constants/builder-registered-components.qwik.mjs +14 -11
- package/lib/node/constants/sdk-version.qwik.cjs +1 -1
- package/lib/node/constants/sdk-version.qwik.mjs +1 -1
- package/package.json +2 -2
- package/types/src/blocks/personalization-container/helpers/inlined-fns.d.ts +4 -1
- package/types/src/blocks/personalization-container/helpers.d.ts +24 -4
- package/types/src/blocks/personalization-container/personalization-container.types.d.ts +2 -2
- package/types/src/components/blocks/blocks-wrapper.d.ts +13 -1
- package/types/src/components/blocks/blocks.types.d.ts +1 -1
- package/types/src/constants/sdk-version.d.ts +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const componentInfo = {
|
|
4
|
+
name: "PersonalizationContainer",
|
|
5
|
+
shouldReceiveBuilderProps: {
|
|
6
|
+
builderBlock: true,
|
|
7
|
+
builderContext: true,
|
|
8
|
+
builderComponents: true
|
|
9
|
+
},
|
|
10
|
+
noWrap: true,
|
|
11
|
+
image: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F37229ed30d8c41dfb10b8cca1992053a",
|
|
12
|
+
canHaveChildren: true,
|
|
13
|
+
inputs: [
|
|
14
|
+
{
|
|
15
|
+
name: "variants",
|
|
16
|
+
defaultValue: [],
|
|
17
|
+
behavior: "personalizationVariantList",
|
|
18
|
+
type: "list",
|
|
19
|
+
subFields: [
|
|
20
|
+
{
|
|
21
|
+
name: "name",
|
|
22
|
+
type: "text"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: "query",
|
|
26
|
+
friendlyName: "Targeting rules",
|
|
27
|
+
type: "BuilderQuery",
|
|
28
|
+
defaultValue: []
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "startDate",
|
|
32
|
+
type: "date"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: "endDate",
|
|
36
|
+
type: "date"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "blocks",
|
|
40
|
+
type: "uiBlocks",
|
|
41
|
+
hideFromUI: true,
|
|
42
|
+
defaultValue: []
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
};
|
|
48
|
+
exports.componentInfo = componentInfo;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const componentInfo = {
|
|
2
|
+
name: "PersonalizationContainer",
|
|
3
|
+
shouldReceiveBuilderProps: {
|
|
4
|
+
builderBlock: true,
|
|
5
|
+
builderContext: true,
|
|
6
|
+
builderComponents: true
|
|
7
|
+
},
|
|
8
|
+
noWrap: true,
|
|
9
|
+
image: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F37229ed30d8c41dfb10b8cca1992053a",
|
|
10
|
+
canHaveChildren: true,
|
|
11
|
+
inputs: [
|
|
12
|
+
{
|
|
13
|
+
name: "variants",
|
|
14
|
+
defaultValue: [],
|
|
15
|
+
behavior: "personalizationVariantList",
|
|
16
|
+
type: "list",
|
|
17
|
+
subFields: [
|
|
18
|
+
{
|
|
19
|
+
name: "name",
|
|
20
|
+
type: "text"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: "query",
|
|
24
|
+
friendlyName: "Targeting rules",
|
|
25
|
+
type: "BuilderQuery",
|
|
26
|
+
defaultValue: []
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "startDate",
|
|
30
|
+
type: "date"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "endDate",
|
|
34
|
+
type: "date"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "blocks",
|
|
38
|
+
type: "uiBlocks",
|
|
39
|
+
hideFromUI: true,
|
|
40
|
+
defaultValue: []
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
};
|
|
46
|
+
export {
|
|
47
|
+
componentInfo
|
|
48
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
function filterWithCustomTargeting(userAttributes, query, startDate, endDate) {
|
|
4
|
+
function isString(val) {
|
|
5
|
+
return typeof val === "string";
|
|
6
|
+
}
|
|
7
|
+
function isNumber(val) {
|
|
8
|
+
return typeof val === "number";
|
|
9
|
+
}
|
|
10
|
+
function objectMatchesQuery(userattr, query2) {
|
|
11
|
+
const result = (() => {
|
|
12
|
+
const property = query2.property;
|
|
13
|
+
const operator = query2.operator;
|
|
14
|
+
let testValue = query2.value;
|
|
15
|
+
if (query2 && query2.property === "urlPath" && query2.value && typeof query2.value === "string" && query2.value !== "/" && query2.value.endsWith("/"))
|
|
16
|
+
testValue = query2.value.slice(0, -1);
|
|
17
|
+
if (!(property && operator))
|
|
18
|
+
return true;
|
|
19
|
+
if (Array.isArray(testValue)) {
|
|
20
|
+
if (operator === "isNot")
|
|
21
|
+
return testValue.every((val) => objectMatchesQuery(userattr, {
|
|
22
|
+
property,
|
|
23
|
+
operator,
|
|
24
|
+
value: val
|
|
25
|
+
}));
|
|
26
|
+
return !!testValue.find((val) => objectMatchesQuery(userattr, {
|
|
27
|
+
property,
|
|
28
|
+
operator,
|
|
29
|
+
value: val
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
const value = userattr[property];
|
|
33
|
+
if (Array.isArray(value))
|
|
34
|
+
return value.includes(testValue);
|
|
35
|
+
switch (operator) {
|
|
36
|
+
case "is":
|
|
37
|
+
return value === testValue;
|
|
38
|
+
case "isNot":
|
|
39
|
+
return value !== testValue;
|
|
40
|
+
case "contains":
|
|
41
|
+
return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));
|
|
42
|
+
case "startsWith":
|
|
43
|
+
return isString(value) && value.startsWith(String(testValue));
|
|
44
|
+
case "endsWith":
|
|
45
|
+
return isString(value) && value.endsWith(String(testValue));
|
|
46
|
+
case "greaterThan":
|
|
47
|
+
return isNumber(value) && isNumber(testValue) && value > testValue;
|
|
48
|
+
case "lessThan":
|
|
49
|
+
return isNumber(value) && isNumber(testValue) && value < testValue;
|
|
50
|
+
case "greaterThanOrEqualTo":
|
|
51
|
+
return isNumber(value) && isNumber(testValue) && value >= testValue;
|
|
52
|
+
case "lessThanOrEqualTo":
|
|
53
|
+
return isNumber(value) && isNumber(testValue) && value <= testValue;
|
|
54
|
+
default:
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
})();
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
const item = {
|
|
61
|
+
query,
|
|
62
|
+
startDate,
|
|
63
|
+
endDate
|
|
64
|
+
};
|
|
65
|
+
const now = userAttributes.date && new Date(userAttributes.date) || /* @__PURE__ */ new Date();
|
|
66
|
+
if (item.startDate && new Date(item.startDate) > now)
|
|
67
|
+
return false;
|
|
68
|
+
else if (item.endDate && new Date(item.endDate) < now)
|
|
69
|
+
return false;
|
|
70
|
+
if (!item.query || !item.query.length)
|
|
71
|
+
return true;
|
|
72
|
+
return item.query.every((filter) => {
|
|
73
|
+
return objectMatchesQuery(userAttributes, filter);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const PERSONALIZATION_SCRIPT = "function getPersonalizedVariant(variants, blockId, isHydrationTarget, locale) {\n if (!navigator.cookieEnabled) {\n return;\n }\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const attributes = JSON.parse(getCookie('builder.userAttributes') || '{}');\n if (locale) {\n attributes.locale = locale;\n }\n const winningVariantIndex = variants?.findIndex(function (variant) {\n return window.filterWithCustomTargeting(attributes, variant.query, variant.startDate, variant.endDate);\n });\n const parentDiv = document.currentScript?.parentElement;\n const variantId = parentDiv?.getAttribute('data-variant-id');\n const isDefaultVariant = variantId === `${blockId}-default`;\n const isWinningVariant = winningVariantIndex !== -1 && variantId === `${blockId}-${winningVariantIndex}` || winningVariantIndex === -1 && isDefaultVariant;\n if (isWinningVariant && !isDefaultVariant) {\n parentDiv?.removeAttribute('hidden');\n parentDiv?.removeAttribute('aria-hidden');\n } else if (!isWinningVariant && isDefaultVariant) {\n parentDiv?.setAttribute('hidden', 'true');\n parentDiv?.setAttribute('aria-hidden', 'true');\n }\n if (isHydrationTarget) {\n if (!isWinningVariant) {\n const itsStyleEl = parentDiv?.previousElementSibling;\n if (itsStyleEl) {\n itsStyleEl.remove();\n }\n parentDiv?.remove();\n }\n const thisScript = document.currentScript;\n if (thisScript) {\n thisScript.remove();\n }\n }\n}";
|
|
77
|
+
const FILTER_WITH_CUSTOM_TARGETING_SCRIPT = "function filterWithCustomTargeting(userAttributes, query, startDate, endDate) {\n function isString(val) {\n return typeof val === 'string';\n }\n function isNumber(val) {\n return typeof val === 'number';\n }\n function objectMatchesQuery(userattr, query) {\n const result = (() => {\n const property = query.property;\n const operator = query.operator;\n let testValue = query.value;\n if (query && query.property === 'urlPath' && query.value && typeof query.value === 'string' && query.value !== '/' && query.value.endsWith('/')) {\n testValue = query.value.slice(0, -1);\n }\n if (!(property && operator)) {\n return true;\n }\n if (Array.isArray(testValue)) {\n if (operator === 'isNot') {\n return testValue.every(val => objectMatchesQuery(userattr, {\n property,\n operator,\n value: val\n }));\n }\n return !!testValue.find(val => objectMatchesQuery(userattr, {\n property,\n operator,\n value: val\n }));\n }\n const value = userattr[property];\n if (Array.isArray(value)) {\n return value.includes(testValue);\n }\n switch (operator) {\n case 'is':\n return value === testValue;\n case 'isNot':\n return value !== testValue;\n case 'contains':\n return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));\n case 'startsWith':\n return isString(value) && value.startsWith(String(testValue));\n case 'endsWith':\n return isString(value) && value.endsWith(String(testValue));\n case 'greaterThan':\n return isNumber(value) && isNumber(testValue) && value > testValue;\n case 'lessThan':\n return isNumber(value) && isNumber(testValue) && value < testValue;\n case 'greaterThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value >= testValue;\n case 'lessThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value <= testValue;\n default:\n return false;\n }\n })();\n return result;\n }\n const item = {\n query,\n startDate,\n endDate\n };\n const now = userAttributes.date && new Date(userAttributes.date) || new Date();\n if (item.startDate && new Date(item.startDate) > now) {\n return false;\n } else if (item.endDate && new Date(item.endDate) < now) {\n return false;\n }\n if (!item.query || !item.query.length) {\n return true;\n }\n return item.query.every(filter => {\n return objectMatchesQuery(userAttributes, filter);\n });\n}";
|
|
78
|
+
const UPDATE_VISIBILITY_STYLES_SCRIPT = "function updateVisibilityStylesScript(variants, blockId, isHydrationTarget, locale) {\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const visibilityStylesEl = document.currentScript?.previousElementSibling;\n if (!visibilityStylesEl) {\n return;\n }\n if (isHydrationTarget) {\n visibilityStylesEl.remove();\n const currentScript = document.currentScript;\n if (currentScript) {\n currentScript.remove();\n }\n } else {\n const attributes = JSON.parse(getCookie('builder.userAttributes') || '{}');\n if (locale) {\n attributes.locale = locale;\n }\n const winningVariantIndex = variants?.findIndex(function (variant) {\n return window.filterWithCustomTargeting(attributes, variant.query, variant.startDate, variant.endDate);\n });\n if (winningVariantIndex !== -1) {\n let newStyleStr = variants?.map((_, index) => {\n if (index === winningVariantIndex) return '';\n return `div[data-variant-id=\"${blockId}-${index}\"] { display: none !important; } `;\n }).join('') || '';\n newStyleStr += `div[data-variant-id=\"${blockId}-default\"] { display: none !important; } `;\n visibilityStylesEl.innerHTML = newStyleStr;\n }\n }\n}";
|
|
79
|
+
exports.FILTER_WITH_CUSTOM_TARGETING_SCRIPT = FILTER_WITH_CUSTOM_TARGETING_SCRIPT;
|
|
80
|
+
exports.PERSONALIZATION_SCRIPT = PERSONALIZATION_SCRIPT;
|
|
81
|
+
exports.UPDATE_VISIBILITY_STYLES_SCRIPT = UPDATE_VISIBILITY_STYLES_SCRIPT;
|
|
82
|
+
exports.filterWithCustomTargeting = filterWithCustomTargeting;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
function filterWithCustomTargeting(userAttributes, query, startDate, endDate) {
|
|
2
|
+
function isString(val) {
|
|
3
|
+
return typeof val === "string";
|
|
4
|
+
}
|
|
5
|
+
function isNumber(val) {
|
|
6
|
+
return typeof val === "number";
|
|
7
|
+
}
|
|
8
|
+
function objectMatchesQuery(userattr, query2) {
|
|
9
|
+
const result = (() => {
|
|
10
|
+
const property = query2.property;
|
|
11
|
+
const operator = query2.operator;
|
|
12
|
+
let testValue = query2.value;
|
|
13
|
+
if (query2 && query2.property === "urlPath" && query2.value && typeof query2.value === "string" && query2.value !== "/" && query2.value.endsWith("/"))
|
|
14
|
+
testValue = query2.value.slice(0, -1);
|
|
15
|
+
if (!(property && operator))
|
|
16
|
+
return true;
|
|
17
|
+
if (Array.isArray(testValue)) {
|
|
18
|
+
if (operator === "isNot")
|
|
19
|
+
return testValue.every((val) => objectMatchesQuery(userattr, {
|
|
20
|
+
property,
|
|
21
|
+
operator,
|
|
22
|
+
value: val
|
|
23
|
+
}));
|
|
24
|
+
return !!testValue.find((val) => objectMatchesQuery(userattr, {
|
|
25
|
+
property,
|
|
26
|
+
operator,
|
|
27
|
+
value: val
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
const value = userattr[property];
|
|
31
|
+
if (Array.isArray(value))
|
|
32
|
+
return value.includes(testValue);
|
|
33
|
+
switch (operator) {
|
|
34
|
+
case "is":
|
|
35
|
+
return value === testValue;
|
|
36
|
+
case "isNot":
|
|
37
|
+
return value !== testValue;
|
|
38
|
+
case "contains":
|
|
39
|
+
return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));
|
|
40
|
+
case "startsWith":
|
|
41
|
+
return isString(value) && value.startsWith(String(testValue));
|
|
42
|
+
case "endsWith":
|
|
43
|
+
return isString(value) && value.endsWith(String(testValue));
|
|
44
|
+
case "greaterThan":
|
|
45
|
+
return isNumber(value) && isNumber(testValue) && value > testValue;
|
|
46
|
+
case "lessThan":
|
|
47
|
+
return isNumber(value) && isNumber(testValue) && value < testValue;
|
|
48
|
+
case "greaterThanOrEqualTo":
|
|
49
|
+
return isNumber(value) && isNumber(testValue) && value >= testValue;
|
|
50
|
+
case "lessThanOrEqualTo":
|
|
51
|
+
return isNumber(value) && isNumber(testValue) && value <= testValue;
|
|
52
|
+
default:
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
})();
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
const item = {
|
|
59
|
+
query,
|
|
60
|
+
startDate,
|
|
61
|
+
endDate
|
|
62
|
+
};
|
|
63
|
+
const now = userAttributes.date && new Date(userAttributes.date) || /* @__PURE__ */ new Date();
|
|
64
|
+
if (item.startDate && new Date(item.startDate) > now)
|
|
65
|
+
return false;
|
|
66
|
+
else if (item.endDate && new Date(item.endDate) < now)
|
|
67
|
+
return false;
|
|
68
|
+
if (!item.query || !item.query.length)
|
|
69
|
+
return true;
|
|
70
|
+
return item.query.every((filter) => {
|
|
71
|
+
return objectMatchesQuery(userAttributes, filter);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const PERSONALIZATION_SCRIPT = "function getPersonalizedVariant(variants, blockId, isHydrationTarget, locale) {\n if (!navigator.cookieEnabled) {\n return;\n }\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const attributes = JSON.parse(getCookie('builder.userAttributes') || '{}');\n if (locale) {\n attributes.locale = locale;\n }\n const winningVariantIndex = variants?.findIndex(function (variant) {\n return window.filterWithCustomTargeting(attributes, variant.query, variant.startDate, variant.endDate);\n });\n const parentDiv = document.currentScript?.parentElement;\n const variantId = parentDiv?.getAttribute('data-variant-id');\n const isDefaultVariant = variantId === `${blockId}-default`;\n const isWinningVariant = winningVariantIndex !== -1 && variantId === `${blockId}-${winningVariantIndex}` || winningVariantIndex === -1 && isDefaultVariant;\n if (isWinningVariant && !isDefaultVariant) {\n parentDiv?.removeAttribute('hidden');\n parentDiv?.removeAttribute('aria-hidden');\n } else if (!isWinningVariant && isDefaultVariant) {\n parentDiv?.setAttribute('hidden', 'true');\n parentDiv?.setAttribute('aria-hidden', 'true');\n }\n if (isHydrationTarget) {\n if (!isWinningVariant) {\n const itsStyleEl = parentDiv?.previousElementSibling;\n if (itsStyleEl) {\n itsStyleEl.remove();\n }\n parentDiv?.remove();\n }\n const thisScript = document.currentScript;\n if (thisScript) {\n thisScript.remove();\n }\n }\n}";
|
|
75
|
+
const FILTER_WITH_CUSTOM_TARGETING_SCRIPT = "function filterWithCustomTargeting(userAttributes, query, startDate, endDate) {\n function isString(val) {\n return typeof val === 'string';\n }\n function isNumber(val) {\n return typeof val === 'number';\n }\n function objectMatchesQuery(userattr, query) {\n const result = (() => {\n const property = query.property;\n const operator = query.operator;\n let testValue = query.value;\n if (query && query.property === 'urlPath' && query.value && typeof query.value === 'string' && query.value !== '/' && query.value.endsWith('/')) {\n testValue = query.value.slice(0, -1);\n }\n if (!(property && operator)) {\n return true;\n }\n if (Array.isArray(testValue)) {\n if (operator === 'isNot') {\n return testValue.every(val => objectMatchesQuery(userattr, {\n property,\n operator,\n value: val\n }));\n }\n return !!testValue.find(val => objectMatchesQuery(userattr, {\n property,\n operator,\n value: val\n }));\n }\n const value = userattr[property];\n if (Array.isArray(value)) {\n return value.includes(testValue);\n }\n switch (operator) {\n case 'is':\n return value === testValue;\n case 'isNot':\n return value !== testValue;\n case 'contains':\n return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));\n case 'startsWith':\n return isString(value) && value.startsWith(String(testValue));\n case 'endsWith':\n return isString(value) && value.endsWith(String(testValue));\n case 'greaterThan':\n return isNumber(value) && isNumber(testValue) && value > testValue;\n case 'lessThan':\n return isNumber(value) && isNumber(testValue) && value < testValue;\n case 'greaterThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value >= testValue;\n case 'lessThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value <= testValue;\n default:\n return false;\n }\n })();\n return result;\n }\n const item = {\n query,\n startDate,\n endDate\n };\n const now = userAttributes.date && new Date(userAttributes.date) || new Date();\n if (item.startDate && new Date(item.startDate) > now) {\n return false;\n } else if (item.endDate && new Date(item.endDate) < now) {\n return false;\n }\n if (!item.query || !item.query.length) {\n return true;\n }\n return item.query.every(filter => {\n return objectMatchesQuery(userAttributes, filter);\n });\n}";
|
|
76
|
+
const UPDATE_VISIBILITY_STYLES_SCRIPT = "function updateVisibilityStylesScript(variants, blockId, isHydrationTarget, locale) {\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const visibilityStylesEl = document.currentScript?.previousElementSibling;\n if (!visibilityStylesEl) {\n return;\n }\n if (isHydrationTarget) {\n visibilityStylesEl.remove();\n const currentScript = document.currentScript;\n if (currentScript) {\n currentScript.remove();\n }\n } else {\n const attributes = JSON.parse(getCookie('builder.userAttributes') || '{}');\n if (locale) {\n attributes.locale = locale;\n }\n const winningVariantIndex = variants?.findIndex(function (variant) {\n return window.filterWithCustomTargeting(attributes, variant.query, variant.startDate, variant.endDate);\n });\n if (winningVariantIndex !== -1) {\n let newStyleStr = variants?.map((_, index) => {\n if (index === winningVariantIndex) return '';\n return `div[data-variant-id=\"${blockId}-${index}\"] { display: none !important; } `;\n }).join('') || '';\n newStyleStr += `div[data-variant-id=\"${blockId}-default\"] { display: none !important; } `;\n visibilityStylesEl.innerHTML = newStyleStr;\n }\n }\n}";
|
|
77
|
+
export {
|
|
78
|
+
FILTER_WITH_CUSTOM_TARGETING_SCRIPT,
|
|
79
|
+
PERSONALIZATION_SCRIPT,
|
|
80
|
+
UPDATE_VISIBILITY_STYLES_SCRIPT,
|
|
81
|
+
filterWithCustomTargeting
|
|
82
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const target = require("../../constants/target.qwik.cjs");
|
|
4
|
+
const isBrowser = require("../../functions/is-browser.qwik.cjs");
|
|
5
|
+
const isEditing = require("../../functions/is-editing.qwik.cjs");
|
|
6
|
+
const inlinedFns = require("./helpers/inlined-fns.qwik.cjs");
|
|
7
|
+
const DEFAULT_INDEX = "default";
|
|
8
|
+
const FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME = "filterWithCustomTargeting";
|
|
9
|
+
const BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME = "builderIoPersonalization";
|
|
10
|
+
const UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME = "updateVisibilityStylesScript";
|
|
11
|
+
const SDKS_SUPPORTING_PERSONALIZATION = [
|
|
12
|
+
"react",
|
|
13
|
+
"vue",
|
|
14
|
+
"svelte"
|
|
15
|
+
];
|
|
16
|
+
const SDKS_REQUIRING_RESET_APPROACH = [
|
|
17
|
+
"vue",
|
|
18
|
+
"svelte"
|
|
19
|
+
];
|
|
20
|
+
function checkShouldRenderVariants(variants, canTrack) {
|
|
21
|
+
const hasVariants = variants && variants.length > 0;
|
|
22
|
+
if (!hasVariants)
|
|
23
|
+
return false;
|
|
24
|
+
if (!canTrack)
|
|
25
|
+
return false;
|
|
26
|
+
if (SDKS_REQUIRING_RESET_APPROACH.includes(target.TARGET))
|
|
27
|
+
return true;
|
|
28
|
+
if (isBrowser.isBrowser())
|
|
29
|
+
return false;
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
function getBlocksToRender({ variants, previewingIndex, isHydrated, filteredVariants, fallbackBlocks }) {
|
|
33
|
+
const fallback = {
|
|
34
|
+
blocks: fallbackBlocks ?? [],
|
|
35
|
+
path: "this.children",
|
|
36
|
+
index: DEFAULT_INDEX
|
|
37
|
+
};
|
|
38
|
+
if (isHydrated && isEditing.isEditing()) {
|
|
39
|
+
if (typeof previewingIndex === "number" && previewingIndex < ((variants == null ? void 0 : variants.length) ?? 0)) {
|
|
40
|
+
const variant = variants == null ? void 0 : variants[previewingIndex];
|
|
41
|
+
if (variant)
|
|
42
|
+
return {
|
|
43
|
+
blocks: variant.blocks,
|
|
44
|
+
path: `variants.${previewingIndex}.blocks`,
|
|
45
|
+
index: previewingIndex
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return fallback;
|
|
49
|
+
}
|
|
50
|
+
if (isBrowser.isBrowser()) {
|
|
51
|
+
const winningVariant = filteredVariants == null ? void 0 : filteredVariants[0];
|
|
52
|
+
if (winningVariant && variants) {
|
|
53
|
+
const variantIndex = variants.indexOf(winningVariant);
|
|
54
|
+
if (variantIndex !== -1)
|
|
55
|
+
return {
|
|
56
|
+
blocks: winningVariant.blocks,
|
|
57
|
+
path: `variants.${variantIndex}.blocks`,
|
|
58
|
+
index: variantIndex
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return fallback;
|
|
63
|
+
}
|
|
64
|
+
const getInitPersonalizationVariantsFnsScriptString = () => {
|
|
65
|
+
return `
|
|
66
|
+
window.${FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME} = ${inlinedFns.FILTER_WITH_CUSTOM_TARGETING_SCRIPT}
|
|
67
|
+
window.${BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME} = ${inlinedFns.PERSONALIZATION_SCRIPT}
|
|
68
|
+
window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME} = ${inlinedFns.UPDATE_VISIBILITY_STYLES_SCRIPT}
|
|
69
|
+
`;
|
|
70
|
+
};
|
|
71
|
+
const isHydrationTarget = target.TARGET === "react";
|
|
72
|
+
const getPersonalizationScript = (variants, blockId, locale) => {
|
|
73
|
+
return `window.${BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME}(${JSON.stringify(variants)}, "${blockId}", ${isHydrationTarget}${locale ? `, "${locale}"` : ""})`;
|
|
74
|
+
};
|
|
75
|
+
const getUpdateVisibilityStylesScript = (variants, blockId, locale) => {
|
|
76
|
+
return `window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME}(${JSON.stringify(variants)}, "${blockId}", ${isHydrationTarget}${locale ? `, "${locale}"` : ""})`;
|
|
77
|
+
};
|
|
78
|
+
exports.filterWithCustomTargeting = inlinedFns.filterWithCustomTargeting;
|
|
79
|
+
exports.DEFAULT_INDEX = DEFAULT_INDEX;
|
|
80
|
+
exports.SDKS_REQUIRING_RESET_APPROACH = SDKS_REQUIRING_RESET_APPROACH;
|
|
81
|
+
exports.SDKS_SUPPORTING_PERSONALIZATION = SDKS_SUPPORTING_PERSONALIZATION;
|
|
82
|
+
exports.checkShouldRenderVariants = checkShouldRenderVariants;
|
|
83
|
+
exports.getBlocksToRender = getBlocksToRender;
|
|
84
|
+
exports.getInitPersonalizationVariantsFnsScriptString = getInitPersonalizationVariantsFnsScriptString;
|
|
85
|
+
exports.getPersonalizationScript = getPersonalizationScript;
|
|
86
|
+
exports.getUpdateVisibilityStylesScript = getUpdateVisibilityStylesScript;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { TARGET } from "../../constants/target.qwik.mjs";
|
|
2
|
+
import { isBrowser } from "../../functions/is-browser.qwik.mjs";
|
|
3
|
+
import { isEditing } from "../../functions/is-editing.qwik.mjs";
|
|
4
|
+
import { FILTER_WITH_CUSTOM_TARGETING_SCRIPT, PERSONALIZATION_SCRIPT, UPDATE_VISIBILITY_STYLES_SCRIPT } from "./helpers/inlined-fns.qwik.mjs";
|
|
5
|
+
import { filterWithCustomTargeting } from "./helpers/inlined-fns.qwik.mjs";
|
|
6
|
+
const DEFAULT_INDEX = "default";
|
|
7
|
+
const FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME = "filterWithCustomTargeting";
|
|
8
|
+
const BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME = "builderIoPersonalization";
|
|
9
|
+
const UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME = "updateVisibilityStylesScript";
|
|
10
|
+
const SDKS_SUPPORTING_PERSONALIZATION = [
|
|
11
|
+
"react",
|
|
12
|
+
"vue",
|
|
13
|
+
"svelte"
|
|
14
|
+
];
|
|
15
|
+
const SDKS_REQUIRING_RESET_APPROACH = [
|
|
16
|
+
"vue",
|
|
17
|
+
"svelte"
|
|
18
|
+
];
|
|
19
|
+
function checkShouldRenderVariants(variants, canTrack) {
|
|
20
|
+
const hasVariants = variants && variants.length > 0;
|
|
21
|
+
if (!hasVariants)
|
|
22
|
+
return false;
|
|
23
|
+
if (!canTrack)
|
|
24
|
+
return false;
|
|
25
|
+
if (SDKS_REQUIRING_RESET_APPROACH.includes(TARGET))
|
|
26
|
+
return true;
|
|
27
|
+
if (isBrowser())
|
|
28
|
+
return false;
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
function getBlocksToRender({ variants, previewingIndex, isHydrated, filteredVariants, fallbackBlocks }) {
|
|
32
|
+
const fallback = {
|
|
33
|
+
blocks: fallbackBlocks ?? [],
|
|
34
|
+
path: "this.children",
|
|
35
|
+
index: DEFAULT_INDEX
|
|
36
|
+
};
|
|
37
|
+
if (isHydrated && isEditing()) {
|
|
38
|
+
if (typeof previewingIndex === "number" && previewingIndex < ((variants == null ? void 0 : variants.length) ?? 0)) {
|
|
39
|
+
const variant = variants == null ? void 0 : variants[previewingIndex];
|
|
40
|
+
if (variant)
|
|
41
|
+
return {
|
|
42
|
+
blocks: variant.blocks,
|
|
43
|
+
path: `variants.${previewingIndex}.blocks`,
|
|
44
|
+
index: previewingIndex
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return fallback;
|
|
48
|
+
}
|
|
49
|
+
if (isBrowser()) {
|
|
50
|
+
const winningVariant = filteredVariants == null ? void 0 : filteredVariants[0];
|
|
51
|
+
if (winningVariant && variants) {
|
|
52
|
+
const variantIndex = variants.indexOf(winningVariant);
|
|
53
|
+
if (variantIndex !== -1)
|
|
54
|
+
return {
|
|
55
|
+
blocks: winningVariant.blocks,
|
|
56
|
+
path: `variants.${variantIndex}.blocks`,
|
|
57
|
+
index: variantIndex
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return fallback;
|
|
62
|
+
}
|
|
63
|
+
const getInitPersonalizationVariantsFnsScriptString = () => {
|
|
64
|
+
return `
|
|
65
|
+
window.${FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME} = ${FILTER_WITH_CUSTOM_TARGETING_SCRIPT}
|
|
66
|
+
window.${BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME} = ${PERSONALIZATION_SCRIPT}
|
|
67
|
+
window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME} = ${UPDATE_VISIBILITY_STYLES_SCRIPT}
|
|
68
|
+
`;
|
|
69
|
+
};
|
|
70
|
+
const isHydrationTarget = TARGET === "react";
|
|
71
|
+
const getPersonalizationScript = (variants, blockId, locale) => {
|
|
72
|
+
return `window.${BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME}(${JSON.stringify(variants)}, "${blockId}", ${isHydrationTarget}${locale ? `, "${locale}"` : ""})`;
|
|
73
|
+
};
|
|
74
|
+
const getUpdateVisibilityStylesScript = (variants, blockId, locale) => {
|
|
75
|
+
return `window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME}(${JSON.stringify(variants)}, "${blockId}", ${isHydrationTarget}${locale ? `, "${locale}"` : ""})`;
|
|
76
|
+
};
|
|
77
|
+
export {
|
|
78
|
+
DEFAULT_INDEX,
|
|
79
|
+
SDKS_REQUIRING_RESET_APPROACH,
|
|
80
|
+
SDKS_SUPPORTING_PERSONALIZATION,
|
|
81
|
+
checkShouldRenderVariants,
|
|
82
|
+
filterWithCustomTargeting,
|
|
83
|
+
getBlocksToRender,
|
|
84
|
+
getInitPersonalizationVariantsFnsScriptString,
|
|
85
|
+
getPersonalizationScript,
|
|
86
|
+
getUpdateVisibilityStylesScript
|
|
87
|
+
};
|