/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict" ;
/**
* Bug 1734130 - Shim AdNexus AST
*
* Some sites expect AST to successfully load, or they break.
* This shim mitigates that breakage.
*/
if (!window.apntag?.loaded) {
const anq = window.apntag?.anq || [];
const gTags =
new Map();
const gAds =
new Map();
const gEventHandlers = {};
const Ad =
class {
adType =
"banner" ;
auctionId =
"-" ;
banner = {
width: 1,
height: 1,
content:
"" ,
trackers: {
impression_urls: [],
video_events: {},
},
};
brandCategoryId = 0;
buyerMemberId = 0;
cpm = 0.1;
cpm_publisher_currency = 0.1;
creativeId = 0;
dealId = undefined;
height = 1;
mediaSubtypeId = 1;
mediaTypeId = 1;
publisher_currency_code =
"US" ;
source =
"-" ;
tagId = -1;
targetId =
"" ;
width = 1;
constructor(tagId, targetId) {
this .tagId = tagId;
this .targetId = targetId;
}
};
const fireAdEvent = (type, adObj) => {
const { targetId } = adObj;
const handlers = gEventHandlers[type]?.[targetId];
if (!handlers) {
return Promise.resolve();
}
const evt = { adObj, type };
return new Promise(done => {
setTimeout(() => {
for (
const cb of handlers) {
try {
cb(evt);
}
catch (e) {
console.error(e);
}
}
done();
}, 1);
});
};
const refreshTag = targetId => {
const tag = gTags.get(targetId);
if (!tag) {
return ;
}
if (!gAds.has(targetId)) {
gAds.set(targetId,
new Ad(tag.tagId, targetId));
}
const adObj = gAds.get(targetId);
fireAdEvent(
"adRequested" , adObj).then(() => {
// TODO: do some sites expect adAvailable+adLoaded instead of adNoBid?
fireAdEvent(
"adNoBid" , adObj);
});
};
const off = (type, targetId, cb) => {
gEventHandlers[type]?.[targetId]?.
delete (cb);
};
const on = (type, targetId, cb) => {
gEventHandlers[type] = gEventHandlers[type] || {};
gEventHandlers[type][targetId] =
gEventHandlers[type][targetId] ||
new Set();
gEventHandlers[type][targetId].add(cb);
};
const Tag =
class {
static #nextId = 0;
debug = undefined;
displayed =
false ;
initialHeight = 1;
initialWidth = 1;
keywords = {};
member = 0;
showTagCalled =
false ;
sizes = [];
targetId =
"" ;
utCalled =
true ;
utDivId =
"" ;
utiframeId =
"" ;
uuid =
"" ;
constructor(raw) {
const { keywords, sizes, targetId } = raw;
this .tagId = Tag.#nextId++;
this .keywords = keywords || {};
this .sizes = sizes || [];
this .targetId = targetId ||
"" ;
}
modifyTag() {}
off(type, cb) {
off(type,
this .targetId, cb);
}
on(type, cb) {
on(type,
this .targetId, cb);
}
setKeywords(kw) {
this .keywords = kw;
}
};
window.apntag = {
anq,
attachClickTrackers() {},
checkAdAvailable() {},
clearPageTargeting() {},
clearRequest() {},
collapseAd() {},
debug:
false ,
defineTag(dfn) {
const { targetId } = dfn;
if (!targetId) {
return ;
}
gTags.set(targetId,
new Tag(dfn));
},
disableDebug() {},
dongle: undefined,
emitEvent(adObj, type) {
fireAdEvent(type, adObj);
},
enableCookieSet() {},
enableDebug() {},
fireImpressionTrackers() {},
getAdMarkup: () =>
"" ,
getAdWrap() {},
getAstVersion: () =>
"0.49.0" ,
getPageTargeting() {},
getTag(targetId) {
return gTags.get(targetId);
},
handleCb() {},
handleMediationBid() {},
highlightAd() {},
loaded:
true ,
loadTags() {
for (
const tagName of gTags.keys()) {
refreshTag(tagName);
}
},
modifyTag() {},
notify() {},
offEvent(type, target, cb) {
off(type, target, cb);
},
onEvent(type, target, cb) {
on(type, target, cb);
},
recordErrorEvent() {},
refresh() {},
registerRenderer() {},
requests: {},
resizeAd() {},
setEndpoint() {},
setKeywords() {},
setPageOpts() {},
setPageTargeting() {},
setSafeFrameConfig() {},
setSizes() {},
showTag() {},
};
const push =
function (fn) {
if (
typeof fn ===
"function" ) {
try {
fn();
}
catch (e) {
console.trace(e);
}
}
};
anq.push = push;
anq.forEach(push);
}
Messung V0.5 C=91 H=95 G=92
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland