Skip to content

Commit 4fe61a4

Browse files
Kacper WoźniakAlessandroDG
Kacper Woźniak
authored andcommitted
Merged in RVR-1214-invoke-handlers-on-rendering (pull request #7)
RVR-1214 Invoke handlers on rendering * RVR-1214 Invoked handlers right after ad is displayed. * Applied feedback. Approved-by: Alessandro Di Giovanni <[email protected]>
1 parent bf9840b commit 4fe61a4

File tree

1 file changed

+56
-37
lines changed

1 file changed

+56
-37
lines changed

modules/rivrAnalyticsAdapter.js

+56-37
Original file line numberDiff line numberDiff line change
@@ -194,44 +194,64 @@ function reportClickEvent(event) {
194194
}, JSON.stringify(req));
195195
};
196196

197-
function addClickHandlers(bannersIds) {
198-
setTimeout(function () {
199-
bannersIds.forEach(function (bannerId) {
200-
let doc = document.getElementById(bannerId);
201-
if (doc) {
202-
let iframe = doc.getElementsByTagName('iframe')[0];
203-
if (iframe) {
204-
iframe.contentDocument.addEventListener('click', reportClickEvent);
205-
}
206-
}
207-
});
208-
}, 1500);
197+
function addClickHandler(bannerId) {
198+
pinHandlerToHTMLElement(bannerId, dataLoaderForHandler, addClickListener);
209199
};
210200

211-
function displayedImpressionHandler(bannersIds) {
212-
setTimeout(function () {
213-
bannersIds.forEach((bannerId) => {
214-
let doc = document.getElementById(bannerId);
215-
if (doc) {
216-
let iframe = doc.getElementsByTagName('iframe')[0];
217-
if (iframe) {
218-
let displayedImpressionImg = iframe.contentDocument.getElementsByTagName('img').length > 0;
219-
if (displayedImpressionImg) {
220-
let timestamp = new Date().toISOString();
221-
let requestId = generateUUID();
222-
let impression = {
223-
timestamp,
224-
'request_id': requestId,
225-
};
226-
if (rivrAnalytics.context.queue) {
227-
rivrAnalytics.context.queue.push(impression);
228-
}
229-
}
230-
}
201+
function addDisplayedImpHandler(bannerId) {
202+
pinHandlerToHTMLElement(bannerId, dataLoaderForHandler, impHandler);
203+
};
204+
205+
function pinHandlerToHTMLElement(elementId, dataLoaderForHandler, specializedHandler) {
206+
function waitForElement() {
207+
let element = document.getElementById(elementId);
208+
if (!element) {
209+
window.requestAnimationFrame(waitForElement);
210+
} else {
211+
dataLoaderForHandler(element, specializedHandler);
212+
}
213+
}
214+
waitForElement();
215+
}
216+
217+
function dataLoaderForHandler(element, specializedHandler) {
218+
function waitForElement() {
219+
let iframe = element.getElementsByTagName('iframe')[0];
220+
if (!iframe) {
221+
window.requestAnimationFrame(waitForElement);
222+
} else {
223+
let displayedImpression = iframe.contentDocument.getElementsByTagName('img').length > 0;
224+
if (!displayedImpression) {
225+
window.requestAnimationFrame(waitForElement);
226+
} else {
227+
specializedHandler(iframe);
231228
}
232-
});
233-
sendImpressions();
234-
}, 3000);
229+
}
230+
}
231+
waitForElement();
232+
};
233+
234+
function addClickListener(iframe) {
235+
iframe.contentDocument.addEventListener('click', reportClickEvent);
236+
}
237+
238+
function impHandler(iframe) {
239+
let timestamp = new Date().toISOString();
240+
let requestId = generateUUID();
241+
let impression = {
242+
timestamp,
243+
'request_id': requestId,
244+
};
245+
if (rivrAnalytics.context.queue) {
246+
rivrAnalytics.context.queue.push(impression);
247+
}
248+
}
249+
250+
function addHandlers(bannersIds) {
251+
bannersIds.forEach((bannerId) => {
252+
addClickHandler(bannerId);
253+
addDisplayedImpHandler(bannerId);
254+
})
235255
};
236256

237257
function fulfillAuctionObject() {
@@ -353,8 +373,7 @@ rivrAnalytics.enableAnalytics = (config) => {
353373
clientURL: window.location.href,
354374
queue: new ExpiringQueue(sendImpressions, sendAuction, config.options.queueTimeout || DEFAULT_QUEUE_TIMEOUT)
355375
};
356-
addClickHandlers(config.options.bannersIds);
357-
displayedImpressionHandler(config.options.bannersIds);
376+
addHandlers(config.options.bannersIds);
358377
logInfo('Rivr Analytics enabled with config', rivrAnalytics.context);
359378
rivrAnalytics.originEnableAnalytics(config);
360379
};

0 commit comments

Comments
 (0)