@surfside/ads-core-web 0.1.0 → 0.1.2
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 +15 -15
- package/lib/cjs/debug/carousel.js +74 -0
- package/lib/cjs/debug/carousel.js.map +1 -0
- package/lib/cjs/helpers/Dom.js +52 -0
- package/lib/cjs/helpers/Dom.js.map +1 -0
- package/lib/cjs/helpers/Trackers.js +20 -0
- package/lib/cjs/helpers/Trackers.js.map +1 -0
- package/lib/cjs/helpers/index.js +19 -0
- package/lib/cjs/helpers/index.js.map +1 -0
- package/lib/cjs/index.js +49 -6099
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/rendering/Banner.js +93 -0
- package/lib/cjs/rendering/Banner.js.map +1 -0
- package/lib/cjs/rendering/Carousel.js +350 -0
- package/lib/cjs/rendering/Carousel.js.map +1 -0
- package/lib/cjs/rendering/Framework.js +90 -0
- package/lib/cjs/rendering/Framework.js.map +1 -0
- package/lib/cjs/rendering/ProductCard.js +106 -0
- package/lib/cjs/rendering/ProductCard.js.map +1 -0
- package/lib/cjs/rendering/Video.js +299 -0
- package/lib/cjs/rendering/Video.js.map +1 -0
- package/lib/cjs/rendering/Watermark.js +59 -0
- package/lib/cjs/rendering/Watermark.js.map +1 -0
- package/lib/cjs/rendering/index.js +23 -0
- package/lib/cjs/rendering/index.js.map +1 -0
- package/lib/esm/debug/carousel.js +72 -0
- package/lib/esm/debug/carousel.js.map +1 -0
- package/lib/esm/helpers/Dom.js +43 -0
- package/lib/esm/helpers/Dom.js.map +1 -0
- package/lib/esm/helpers/Trackers.js +15 -0
- package/lib/esm/helpers/Trackers.js.map +1 -0
- package/lib/esm/helpers/index.js +3 -0
- package/lib/esm/helpers/index.js.map +1 -0
- package/lib/esm/index.js +26 -6063
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/rendering/Banner.js +88 -0
- package/lib/esm/rendering/Banner.js.map +1 -0
- package/lib/esm/rendering/Carousel.js +344 -0
- package/lib/esm/rendering/Carousel.js.map +1 -0
- package/lib/esm/rendering/Framework.js +83 -0
- package/lib/esm/rendering/Framework.js.map +1 -0
- package/lib/esm/rendering/ProductCard.js +101 -0
- package/lib/esm/rendering/ProductCard.js.map +1 -0
- package/lib/esm/rendering/Video.js +295 -0
- package/lib/esm/rendering/Video.js.map +1 -0
- package/lib/esm/rendering/Watermark.js +55 -0
- package/lib/esm/rendering/Watermark.js.map +1 -0
- package/lib/esm/rendering/index.js +7 -0
- package/lib/esm/rendering/index.js.map +1 -0
- package/package.json +37 -27
- package/lib/types/debug/dist/index-7was9ptg.d.ts +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+DAMmC;AACnC,mDAA6E;AAC7E,2CAAgE;AAChE,yDAAsF;AACtF,6CAAoE;AAEpE,8CAA4B;AAC5B,4CAA0B;AASnB,MAAM,sBAAsB,GAAG,KAAK,EACvC,WAA4C,EAChB,EAAE;IAC9B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,EACF,MAAM,EACN,aAAa,EACb,MAAM,EACN,GAAG,EACH,2BAA2B,EAC3B,SAAS,EACZ,GAAG,MAAM,CAAC,KAAK,CAAC;IAEjB,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAEhC,MAAM,YAAY,GAAG,wBAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,+BAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAC9D,aAAa,CAAC,SAAS,CAAC,qBAAqB,EAC7C,aAAa,CAAC,SAAS,CAAC,mBAAmB,EAC3C,2BAA2B,CAC9B,CAAC;IACF,MAAM,cAAc,GAAG,yBAAc,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EACxD,2BAA2B,EAC3B,aAAa,CAAC,QAAQ,CAAC,kBAAkB,KAAK,IAAI,EAClD,aAAa,CAAC,SAAS,CAAC,qBAAqB,EAC7C,aAAa,CAAC,SAAS,CAAC,kBAAkB,EAC1C,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAC9C,CAAC;IAEF,MAAM,WAAW,GAAG,mBAAW,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAE1F,OAAO,IAAA,oBAAE,EAAC;QACN,GAAG,MAAM,CAAC,KAAK;QACf,YAAY;QACZ,iBAAiB;QACjB,cAAc;QACd,WAAW;KACd,CAAC,CAAC;AACP,CAAC,CAAC;AA1CW,QAAA,sBAAsB,0BA0CjC;AAEK,MAAM,cAAc,GAAG,KAAK,EAC/B,SAAiB,EACjB,MAAc,EACd,SAAiB,EACjB,UAAkB,EAClB,MAA0B,EAC1B,MAAgB,EACY,EAAE;IAC9B,OAAO,IAAA,8BAAsB,EAAC,IAAA,uCAAqB,EAC/C,SAAS,EACT,MAAM,EACN,SAAS,EACT,UAAU,EACV,MAAM,EACN,MAAM,CACT,CAAC,CAAC;AACP,CAAC,CAAC;AAhBW,QAAA,cAAc,kBAgBzB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MissingNurlError = exports.RenderBanner = void 0;
|
|
4
|
+
const ads_core_1 = require("@surfside/ads-core");
|
|
5
|
+
const Framework_1 = require("./Framework");
|
|
6
|
+
const Watermark_1 = require("./Watermark");
|
|
7
|
+
const Trackers_1 = require("../helpers/Trackers");
|
|
8
|
+
const RenderBanner = (logger, builtBanner) => {
|
|
9
|
+
const log = (0, ads_core_1.Ctx)(logger)?.with('RenderBanner');
|
|
10
|
+
log?.info('Rendering banner');
|
|
11
|
+
log?.debug(builtBanner);
|
|
12
|
+
/* Create container dom element */
|
|
13
|
+
const bannerContainer = document.createElement('div');
|
|
14
|
+
const shadow = bannerContainer.attachShadow({ mode: 'open' });
|
|
15
|
+
const creativeContainerRes = (0, Framework_1.Template)(log, 'surfside-banner', template, style);
|
|
16
|
+
if (!creativeContainerRes.ok) {
|
|
17
|
+
return creativeContainerRes;
|
|
18
|
+
}
|
|
19
|
+
const creativeContainer = creativeContainerRes.value;
|
|
20
|
+
shadow.appendChild(creativeContainer);
|
|
21
|
+
log?.debug('aspect', `${builtBanner.bid.w} / ${builtBanner.bid.h}`);
|
|
22
|
+
if (builtBanner.bid.w !== undefined && builtBanner.bid.h !== undefined) {
|
|
23
|
+
creativeContainer.style.aspectRatio = `${builtBanner.bid.w} / ${builtBanner.bid.h}`;
|
|
24
|
+
}
|
|
25
|
+
/* Create adm container */
|
|
26
|
+
const admContainerRes = (0, Framework_1.Template)(log, 'surfside-banner-adm', builtBanner.adm);
|
|
27
|
+
if (!admContainerRes.ok) {
|
|
28
|
+
return admContainerRes;
|
|
29
|
+
}
|
|
30
|
+
/* Replace adm container in template with new adm container */
|
|
31
|
+
const admRes = (0, Framework_1.ReplaceWith)(creativeContainer, '.surfside-banner-adm', admContainerRes.value);
|
|
32
|
+
if (!admRes.ok) {
|
|
33
|
+
return admRes;
|
|
34
|
+
}
|
|
35
|
+
/* Create Watermark */
|
|
36
|
+
const watermark = (0, Watermark_1.RenderWatermark)(log);
|
|
37
|
+
if (!watermark.ok) {
|
|
38
|
+
return watermark;
|
|
39
|
+
}
|
|
40
|
+
/* Replace watermark container in template with new watermark container */
|
|
41
|
+
const watermarkRes = (0, Framework_1.ReplaceWith)(creativeContainer, '.surfside-banner-watermark', watermark.value);
|
|
42
|
+
if (!watermarkRes.ok) {
|
|
43
|
+
return watermarkRes;
|
|
44
|
+
}
|
|
45
|
+
const tracker = builtBanner.bid.nurl;
|
|
46
|
+
if (tracker === undefined) {
|
|
47
|
+
return (0, ads_core_1.Err)(new MissingNurlError(builtBanner));
|
|
48
|
+
}
|
|
49
|
+
log?.debug('Appending banner win pixel', tracker);
|
|
50
|
+
creativeContainer.appendChild((0, Trackers_1.PixelTracker)(tracker));
|
|
51
|
+
return (0, ads_core_1.Ok)(bannerContainer);
|
|
52
|
+
};
|
|
53
|
+
exports.RenderBanner = RenderBanner;
|
|
54
|
+
class MissingNurlError extends Error {
|
|
55
|
+
bannerResponse;
|
|
56
|
+
constructor(bannerResponse) {
|
|
57
|
+
super('Missing win URL in banner - cannot render banner as it would result in uncounted impressions');
|
|
58
|
+
this.bannerResponse = bannerResponse;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.MissingNurlError = MissingNurlError;
|
|
62
|
+
;
|
|
63
|
+
const template = `<div>
|
|
64
|
+
<div class="surfside-banner-adm">
|
|
65
|
+
|
|
66
|
+
</div>
|
|
67
|
+
<div class="surfside-banner-watermark">
|
|
68
|
+
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
`;
|
|
72
|
+
const style = `.surfside-banner {
|
|
73
|
+
position: relative;
|
|
74
|
+
display: inline-block;
|
|
75
|
+
overflow: hidden;
|
|
76
|
+
max-width: 100%;
|
|
77
|
+
height: auto;
|
|
78
|
+
width: 100%;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.surfside-banner-adm {
|
|
82
|
+
display: flex;
|
|
83
|
+
|
|
84
|
+
a {
|
|
85
|
+
width: 100%;
|
|
86
|
+
|
|
87
|
+
img {
|
|
88
|
+
width: 100%;
|
|
89
|
+
height: auto;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}`;
|
|
93
|
+
//# sourceMappingURL=Banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Banner.js","sourceRoot":"src/","sources":["rendering/Banner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmptyFirstPageError = exports.MalformedCarouselError = exports.RenderCarousel = void 0;
|
|
4
|
+
const ads_core_client_1 = require("@surfside/ads-core-client");
|
|
5
|
+
const ProductCard_1 = require("./ProductCard");
|
|
6
|
+
const Dom_1 = require("../helpers/Dom");
|
|
7
|
+
const Framework_1 = require("./Framework");
|
|
8
|
+
;
|
|
9
|
+
;
|
|
10
|
+
;
|
|
11
|
+
const RenderCarousel = async (logger, evaluateProductCardTemplate, sponsoredByEnabled, productCardStylesheet, carouselStylesheet, callbacks, carousel, cardMinWidth, carouselLimits, nextType) => {
|
|
12
|
+
const log = (0, ads_core_client_1.Ctx)(logger)?.with('RenderCarousel');
|
|
13
|
+
log?.info('Rendering Carousel', cardMinWidth, carouselLimits);
|
|
14
|
+
const container = (0, Framework_1.Template)(log, 'surf-carousel', template, style + '\n' + carouselStylesheet);
|
|
15
|
+
if (!container.ok) {
|
|
16
|
+
return container;
|
|
17
|
+
}
|
|
18
|
+
log?.debug(container.value.outerHTML);
|
|
19
|
+
const rightArrow = container.value.querySelector('.arrow.right') ?? null;
|
|
20
|
+
const leftArrow = container.value.querySelector('.arrow.left') ?? null;
|
|
21
|
+
const items = container.value.querySelector('.items') ?? null;
|
|
22
|
+
if (rightArrow === null || leftArrow === null || items === null) {
|
|
23
|
+
return (0, ads_core_client_1.Err)(new MalformedCarouselError(container.value));
|
|
24
|
+
}
|
|
25
|
+
const carouselState = {
|
|
26
|
+
element: container.value,
|
|
27
|
+
init: async () => {
|
|
28
|
+
const firstPage = await handleNextPage(log, evaluateProductCardTemplate, sponsoredByEnabled, productCardStylesheet, callbacks, container.value, items, cardMinWidth, carouselLimits, nextType, generator);
|
|
29
|
+
if (!firstPage.ok) {
|
|
30
|
+
return firstPage;
|
|
31
|
+
}
|
|
32
|
+
else if (firstPage.value.length === 0) {
|
|
33
|
+
log?.info('First page was empty!');
|
|
34
|
+
return (0, ads_core_client_1.Err)(new EmptyFirstPageError(container.value));
|
|
35
|
+
}
|
|
36
|
+
log?.info('First page not empty', firstPage);
|
|
37
|
+
return (0, ads_core_client_1.Ok)(true);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const generator = carousel.getProduct();
|
|
41
|
+
rightArrow.addEventListener('click', () => {
|
|
42
|
+
handleNextPage(log, evaluateProductCardTemplate, sponsoredByEnabled, productCardStylesheet, callbacks, container.value, items, cardMinWidth, carouselLimits, nextType, generator);
|
|
43
|
+
});
|
|
44
|
+
leftArrow.addEventListener('click', () => {
|
|
45
|
+
handleBackPage(log, sponsoredByEnabled, container.value, items, cardMinWidth);
|
|
46
|
+
});
|
|
47
|
+
return (0, ads_core_client_1.Ok)(carouselState);
|
|
48
|
+
};
|
|
49
|
+
exports.RenderCarousel = RenderCarousel;
|
|
50
|
+
const addItems = (logger, stylesheet, callbacks, evaluateProductCardTemplate, items, itemsDiv, minWidth) => {
|
|
51
|
+
const log = (0, ads_core_client_1.Ctx)(logger)?.with('addItems');
|
|
52
|
+
log?.info('Adding items to carousel', items.length);
|
|
53
|
+
const renderedCards = [];
|
|
54
|
+
for (const item of items) {
|
|
55
|
+
const productCard = (0, ProductCard_1.RenderProductCard)(log, stylesheet, callbacks, evaluateProductCardTemplate, item);
|
|
56
|
+
if (!productCard.ok) {
|
|
57
|
+
log?.warn('Failed to render product card, skipping', productCard.error);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
log?.debug('Rendering card', productCard.value.outerHTML);
|
|
61
|
+
const cardIndex = itemsDiv.children.length;
|
|
62
|
+
productCard.value.classList.add(`card-${cardIndex}`);
|
|
63
|
+
productCard.value.classList.add('surf-product-card');
|
|
64
|
+
productCard.value.style.width = `${minWidth}px`;
|
|
65
|
+
itemsDiv.appendChild(productCard.value);
|
|
66
|
+
renderedCards.push(item);
|
|
67
|
+
}
|
|
68
|
+
return renderedCards;
|
|
69
|
+
};
|
|
70
|
+
const handleNextPage = async (logger, evaluateProductCardTemplate, sponsoredByEnabled, stylesheet, callbacks, rootElement, itemsDiv, cardMinWidth, carouselLimits, nextType, carouselGenerator) => {
|
|
71
|
+
const log = (0, ads_core_client_1.Ctx)(logger)?.with('handleNextPage');
|
|
72
|
+
log?.info('Handling next page request');
|
|
73
|
+
log?.debug(cardMinWidth, carouselLimits);
|
|
74
|
+
/* Get the card which the carousel is currently scrolled to (i.e, the left-most card) */
|
|
75
|
+
const currentIndex = (0, Dom_1.GetNumberAttributeOr)(itemsDiv, 'current-index', 0);
|
|
76
|
+
/* Get the total number of cards which have been rendered so far */
|
|
77
|
+
const totalRendered = itemsDiv.childElementCount;
|
|
78
|
+
log?.debug('currentIndex', currentIndex);
|
|
79
|
+
log?.debug('totalRendered', totalRendered);
|
|
80
|
+
/* Calculate how many cards fit into view currently */
|
|
81
|
+
const slotsAvailable = Math.ceil(rootElement.clientWidth / cardMinWidth);
|
|
82
|
+
log?.debug('slotsAvailable', slotsAvailable);
|
|
83
|
+
/* Calculate the total number of cards which have already been rendered to the RIGHT of the current page */
|
|
84
|
+
const totalSlotsRenderedAfterThisPage = Math.max(0, Math.min(totalRendered, totalRendered - (currentIndex + slotsAvailable)));
|
|
85
|
+
logger?.table({
|
|
86
|
+
clientWidth: itemsDiv.clientWidth,
|
|
87
|
+
currentIndex,
|
|
88
|
+
totalRendered,
|
|
89
|
+
slotsAvailable,
|
|
90
|
+
totalSlotsRenderedAfterThisPage
|
|
91
|
+
});
|
|
92
|
+
const numberOfCardsToAdd = Math.max(0, (() => {
|
|
93
|
+
/* NextType = product means only request a single product */
|
|
94
|
+
if (nextType === 'product') {
|
|
95
|
+
return 1;
|
|
96
|
+
}
|
|
97
|
+
else if (carouselLimits.type === 'infinite') {
|
|
98
|
+
/* If infinite, that means we don't need to calculate how many slots are still available to fill,
|
|
99
|
+
* just request a whole page */
|
|
100
|
+
log?.debug('Infinite scroll, use slots available');
|
|
101
|
+
return slotsAvailable;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
/* If 'limited', we need to calculate how many slots are still available in the entire carousel */
|
|
105
|
+
const slotsRemaining = carouselLimits.limit - totalRendered;
|
|
106
|
+
return Math.min(slotsRemaining, slotsAvailable);
|
|
107
|
+
}
|
|
108
|
+
})() - totalSlotsRenderedAfterThisPage); /* Finally, remove the slots which have already been rendered within the
|
|
109
|
+
* next visible page scroll */
|
|
110
|
+
log?.debug('numberOfCardsToAdd', numberOfCardsToAdd);
|
|
111
|
+
const slotsVisible = Math.floor(rootElement.clientWidth / cardMinWidth);
|
|
112
|
+
if (numberOfCardsToAdd === 0) {
|
|
113
|
+
/* Scroll either to the calculated next page index, or to the last page, depending on which is smaller */
|
|
114
|
+
log?.info('No new cards requested');
|
|
115
|
+
log?.info('slotsVisible', slotsVisible);
|
|
116
|
+
const nextCardToScrollTo = Math.max(0, Math.min(totalRendered - slotsVisible, currentIndex + slotsVisible));
|
|
117
|
+
scrollTo(log, itemsDiv, nextCardToScrollTo);
|
|
118
|
+
checkSponsored(log, sponsoredByEnabled, rootElement, itemsDiv, nextCardToScrollTo, cardMinWidth);
|
|
119
|
+
return (0, ads_core_client_1.Ok)([]);
|
|
120
|
+
}
|
|
121
|
+
const [builtProducts] = await (0, ads_core_client_1.ConsumeNAsync)(carouselGenerator, numberOfCardsToAdd);
|
|
122
|
+
const nextCardToScrollTo = Math.min(currentIndex + slotsVisible, itemsDiv.childElementCount);
|
|
123
|
+
log?.info('Adding cards and scrolling!', numberOfCardsToAdd, builtProducts);
|
|
124
|
+
log?.info('builtProducts', builtProducts);
|
|
125
|
+
const items = addItems(log, stylesheet, callbacks, evaluateProductCardTemplate, builtProducts, itemsDiv, cardMinWidth);
|
|
126
|
+
scrollTo(log, itemsDiv, nextCardToScrollTo);
|
|
127
|
+
checkSponsored(log, sponsoredByEnabled, rootElement, itemsDiv, nextCardToScrollTo, cardMinWidth);
|
|
128
|
+
return (0, ads_core_client_1.Ok)(items);
|
|
129
|
+
};
|
|
130
|
+
const handleBackPage = (logger, sponsoredByEnabled, rootElement, itemsDiv, cardMinWidth) => {
|
|
131
|
+
const log = (0, ads_core_client_1.Ctx)(logger)?.with('handleBackPage');
|
|
132
|
+
log?.info('scrolling back');
|
|
133
|
+
const currentIndex = (0, Dom_1.GetNumberAttributeOr)(itemsDiv, 'current-index', 0);
|
|
134
|
+
const slotsInView = Math.floor(rootElement.clientWidth / cardMinWidth);
|
|
135
|
+
const nextIndex = Math.max(0, currentIndex - slotsInView);
|
|
136
|
+
scrollTo(log, itemsDiv, Math.max(0, currentIndex - slotsInView));
|
|
137
|
+
checkSponsored(log, sponsoredByEnabled, rootElement, itemsDiv, nextIndex, cardMinWidth);
|
|
138
|
+
};
|
|
139
|
+
const scrollTo = (logger, itemsDiv, index) => {
|
|
140
|
+
const log = (0, ads_core_client_1.Ctx)(logger)?.with('scrollTo');
|
|
141
|
+
if (index === 0) {
|
|
142
|
+
log?.debug('Going back to origin');
|
|
143
|
+
itemsDiv.style.transform = 'translateX(0)';
|
|
144
|
+
itemsDiv.setAttribute('current-index', `${index}`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
;
|
|
148
|
+
log?.info(`Scrolling to item #${index}`);
|
|
149
|
+
const item = itemsDiv.querySelector(`.card-${index}`);
|
|
150
|
+
if (item === null) {
|
|
151
|
+
log?.warn(`Unable to scroll to .card-${index}: element does not exists`);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const itemOffset = item.offsetLeft;
|
|
155
|
+
log?.info('itemOffset', itemOffset, item.clientWidth);
|
|
156
|
+
itemsDiv.setAttribute('current-index', `${index}`);
|
|
157
|
+
itemsDiv.style.transform = `translateX(calc(-${itemOffset}px + 37px))`;
|
|
158
|
+
};
|
|
159
|
+
const checkSponsored = (logger, sponsoredByEnabled, root, itemsDiv, index, cardMinWidth) => {
|
|
160
|
+
const log = (0, ads_core_client_1.Ctx)(logger)?.with('checkSponsored');
|
|
161
|
+
log?.info('Checking sponsored tags');
|
|
162
|
+
const totalVisibleCards = Math.ceil(root.clientWidth / cardMinWidth);
|
|
163
|
+
const visibleCards = [];
|
|
164
|
+
for (let i = index; i < index + totalVisibleCards; i++) {
|
|
165
|
+
const card = itemsDiv.querySelector(`.card-${i}`);
|
|
166
|
+
if (card === null) {
|
|
167
|
+
break; // end of carousel, probably;
|
|
168
|
+
}
|
|
169
|
+
visibleCards.push(card);
|
|
170
|
+
}
|
|
171
|
+
const products = visibleCards
|
|
172
|
+
.map(card => card.productData)
|
|
173
|
+
.filter(product => product.sponsored);
|
|
174
|
+
const brands = new Set();
|
|
175
|
+
for (const product of products) {
|
|
176
|
+
brands.add(product.product.brandName ?? '');
|
|
177
|
+
}
|
|
178
|
+
const allSponsored = visibleCards.length === products.length;
|
|
179
|
+
log?.info('visibleCards', visibleCards.length, index);
|
|
180
|
+
const setTitle = (item, title, by) => {
|
|
181
|
+
item.classList.remove('sponsoredByMany');
|
|
182
|
+
item.classList.remove('sponsoredByOne');
|
|
183
|
+
item.classList.remove('recommended');
|
|
184
|
+
if (by !== undefined) {
|
|
185
|
+
item.innerHTML = by;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
item.innerHTML = '';
|
|
189
|
+
}
|
|
190
|
+
item.classList.add(title);
|
|
191
|
+
};
|
|
192
|
+
if (sponsoredByEnabled === true) {
|
|
193
|
+
log?.info('Attempting sponsoredBy title');
|
|
194
|
+
const sponsoredBy = root.querySelector('.sponsored-by');
|
|
195
|
+
if (sponsoredBy === null) {
|
|
196
|
+
log?.error('Could not find sponsored by element');
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (allSponsored) {
|
|
200
|
+
log?.info('All products are sponsored');
|
|
201
|
+
visibleCards.forEach(card => {
|
|
202
|
+
card.shadowRoot
|
|
203
|
+
?.querySelector('.surf-product-card')
|
|
204
|
+
?.classList.remove('sponsored');
|
|
205
|
+
});
|
|
206
|
+
if (brands.size === 1) {
|
|
207
|
+
log?.info('All brands are the same');
|
|
208
|
+
setTitle(sponsoredBy, 'sponsoredByOne', [...brands.values()][0]);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
log?.info('Multiple brands', brands);
|
|
212
|
+
setTitle(sponsoredBy, 'sponsoredByMany');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
visibleCards.forEach(card => {
|
|
217
|
+
if (card.productData.sponsored) {
|
|
218
|
+
card.shadowRoot
|
|
219
|
+
?.querySelector('.surf-product-card')
|
|
220
|
+
?.classList.add('sponsored');
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
setTitle(sponsoredBy, 'recommended');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
class MalformedCarouselError extends Error {
|
|
228
|
+
parent;
|
|
229
|
+
constructor(parent) {
|
|
230
|
+
super('Failed to construct carousel template! Missing child components');
|
|
231
|
+
this.parent = parent;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.MalformedCarouselError = MalformedCarouselError;
|
|
235
|
+
;
|
|
236
|
+
class EmptyFirstPageError extends Error {
|
|
237
|
+
parent;
|
|
238
|
+
constructor(parent) {
|
|
239
|
+
super('First page of carousel was empty. Returning nothing');
|
|
240
|
+
this.parent = parent;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
exports.EmptyFirstPageError = EmptyFirstPageError;
|
|
244
|
+
;
|
|
245
|
+
const template = `<div class="carousel-wrapper">
|
|
246
|
+
<div class="sponsored-by"></div>
|
|
247
|
+
<div class="surf-carousel">
|
|
248
|
+
<div class="items"></div>
|
|
249
|
+
</div>
|
|
250
|
+
<div class="arrows">
|
|
251
|
+
<div class="arrow left"></div>
|
|
252
|
+
<div class="arrow right"></div>
|
|
253
|
+
</div>
|
|
254
|
+
</div>`;
|
|
255
|
+
const style = `.surf-carousel {
|
|
256
|
+
width: 100%;
|
|
257
|
+
display: flex;
|
|
258
|
+
position: relative;
|
|
259
|
+
flex-grow: 1;
|
|
260
|
+
|
|
261
|
+
.sponsored-by {
|
|
262
|
+
font-family: 'Helvetica', Verdana, Geneva, Tahoma, sans-serif;
|
|
263
|
+
margin: 10px 0;
|
|
264
|
+
font-size: 24px;
|
|
265
|
+
|
|
266
|
+
&.sponsoredByOne::before {
|
|
267
|
+
content: 'Sponsored by ';
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
&.recommended::before {
|
|
271
|
+
content: 'Recommended';
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
&.sponsoredByMany::before {
|
|
275
|
+
content: 'Sponsored';
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.items {
|
|
280
|
+
z-index: 1;
|
|
281
|
+
display: flex;
|
|
282
|
+
flex-direction: row;
|
|
283
|
+
flex-grow: 1;
|
|
284
|
+
flex-wrap: nowrap;
|
|
285
|
+
align-items: stretch;
|
|
286
|
+
padding: 0 37px;
|
|
287
|
+
box-sizing: border-box;
|
|
288
|
+
transition: transform 0.4s ease-out;
|
|
289
|
+
|
|
290
|
+
.surf-product-card {
|
|
291
|
+
flex: 1;
|
|
292
|
+
display: flex;
|
|
293
|
+
padding: 5px;
|
|
294
|
+
box-sizing: border-box;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.arrows {
|
|
302
|
+
|
|
303
|
+
.arrow {
|
|
304
|
+
z-index: 2;
|
|
305
|
+
position: absolute;
|
|
306
|
+
top: 50%;
|
|
307
|
+
transform: translateY(-50%);
|
|
308
|
+
width: 40px;
|
|
309
|
+
height: 40px;
|
|
310
|
+
display: flex;
|
|
311
|
+
background-color: rgba(0, 0, 0, 0.5);
|
|
312
|
+
margin: 0 1rem;
|
|
313
|
+
justify-content: center;
|
|
314
|
+
align-items: center;
|
|
315
|
+
border-radius: 50%;
|
|
316
|
+
cursor: pointer;
|
|
317
|
+
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.2),
|
|
318
|
+
0 2px 8px 0 rgba(0, 0, 0, 0.2);
|
|
319
|
+
|
|
320
|
+
&:hover {
|
|
321
|
+
background-color: rgba(0, 0, 0, 0.6);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
&.left {
|
|
325
|
+
left: -10px;
|
|
326
|
+
|
|
327
|
+
&:before {
|
|
328
|
+
content: "";
|
|
329
|
+
background: url('data:image/svg+xml;charset=UTF-8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" fill="none"><path stroke="%23fff" stroke-opacity=".9" stroke-width="2" d="M24 10 14 20l10 10"/></svg>')
|
|
330
|
+
no-repeat center;
|
|
331
|
+
width: 40px;
|
|
332
|
+
height: 40px;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
&.right {
|
|
337
|
+
right: 0;
|
|
338
|
+
|
|
339
|
+
&:before {
|
|
340
|
+
content: "";
|
|
341
|
+
background: url('data:image/svg+xml;charset=UTF-8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" fill="none"><path stroke="%23fff" stroke-opacity=".9" stroke-width="2" d="M16 30l10-10L16 10"/></svg>')
|
|
342
|
+
no-repeat center;
|
|
343
|
+
width: 40px;
|
|
344
|
+
height: 40px;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}`;
|
|
350
|
+
//# sourceMappingURL=Carousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Carousel.js","sourceRoot":"src/","sources":["rendering/Carousel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MissingTemplateElementError = exports.ReplaceWith = exports.QuerySelectorResult = exports.Template = void 0;
|
|
4
|
+
const ads_core_1 = require("@surfside/ads-core");
|
|
5
|
+
const BoundEvents = [
|
|
6
|
+
'click',
|
|
7
|
+
'mousemove',
|
|
8
|
+
'mouseover',
|
|
9
|
+
'mouseleave',
|
|
10
|
+
'mouseout',
|
|
11
|
+
'mouseup',
|
|
12
|
+
'mousedown',
|
|
13
|
+
'loadeddata',
|
|
14
|
+
'error',
|
|
15
|
+
'touchend',
|
|
16
|
+
'touchstart',
|
|
17
|
+
'touchmove'
|
|
18
|
+
];
|
|
19
|
+
;
|
|
20
|
+
const Template = (logger, className, template, style, callbacks) => {
|
|
21
|
+
const log = (0, ads_core_1.Ctx)(logger)?.with('Template');
|
|
22
|
+
log?.info('Rendering Template');
|
|
23
|
+
try {
|
|
24
|
+
const wrapper = document.createElement('div');
|
|
25
|
+
wrapper.classList.add(className);
|
|
26
|
+
if (style !== undefined) {
|
|
27
|
+
const styleElement = document.createElement('style');
|
|
28
|
+
styleElement.innerHTML = style;
|
|
29
|
+
wrapper.appendChild(styleElement);
|
|
30
|
+
}
|
|
31
|
+
wrapper.innerHTML += template;
|
|
32
|
+
if (callbacks !== undefined) {
|
|
33
|
+
log?.info('Adding callbacks');
|
|
34
|
+
for (const eventName of BoundEvents) {
|
|
35
|
+
log?.info('Adding', eventName);
|
|
36
|
+
const eventNameSelector = `_${eventName}`;
|
|
37
|
+
const boundNodes = wrapper.querySelectorAll(`[${eventNameSelector}]`);
|
|
38
|
+
log?.info('boundNodes', boundNodes);
|
|
39
|
+
boundNodes.forEach(node => {
|
|
40
|
+
log?.debug('binding node event ', eventNameSelector);
|
|
41
|
+
const handlerName = node.getAttribute(eventNameSelector);
|
|
42
|
+
if (handlerName === null) {
|
|
43
|
+
log?.warn('Failed to bind handler - handlerName is null');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const handler = callbacks.callbacks[handlerName];
|
|
47
|
+
if (handler === undefined) {
|
|
48
|
+
log?.warn('Could not find handler ', handlerName, callbacks.callbacks);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
log?.info('Added event ', eventNameSelector);
|
|
52
|
+
node.addEventListener(eventName, e => handler(e, callbacks.product));
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return (0, ads_core_1.Ok)(wrapper);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
return (0, ads_core_1.Err)(err);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
exports.Template = Template;
|
|
63
|
+
const QuerySelectorResult = (element, selector) => {
|
|
64
|
+
const child = element.querySelector(selector) ?? element.shadowRoot?.querySelector(selector) ?? null;
|
|
65
|
+
if (child === null) {
|
|
66
|
+
return (0, ads_core_1.Err)(new MissingTemplateElementError(element, selector));
|
|
67
|
+
}
|
|
68
|
+
return (0, ads_core_1.Ok)(child);
|
|
69
|
+
};
|
|
70
|
+
exports.QuerySelectorResult = QuerySelectorResult;
|
|
71
|
+
const ReplaceWith = (parent, originalSelector, element) => {
|
|
72
|
+
const original = (0, exports.QuerySelectorResult)(parent, originalSelector);
|
|
73
|
+
if (!original.ok) {
|
|
74
|
+
return original;
|
|
75
|
+
}
|
|
76
|
+
original.value.replaceWith(element);
|
|
77
|
+
return (0, ads_core_1.Ok)(element);
|
|
78
|
+
};
|
|
79
|
+
exports.ReplaceWith = ReplaceWith;
|
|
80
|
+
class MissingTemplateElementError extends Error {
|
|
81
|
+
parent;
|
|
82
|
+
selector;
|
|
83
|
+
constructor(parent, selector) {
|
|
84
|
+
super(`Missing child element "${selector}" on parent "${parent.tagName}"`);
|
|
85
|
+
this.parent = parent;
|
|
86
|
+
this.selector = selector;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.MissingTemplateElementError = MissingTemplateElementError;
|
|
90
|
+
//# sourceMappingURL=Framework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Framework.js","sourceRoot":"src/","sources":["rendering/Framework.ts"],"names":[],"mappings":"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"}
|