Files

92 lines
2.5 KiB
JavaScript

const MAX_EXECUTIONS = 12;
const ROTATION_INTERVAL = 12000;
const executions = {};
function banner(mapping) {
Object.keys(mapping).forEach(
(cur) => {
bannerGroup(mapping[cur], cur);
}
);
}
function bannerGroup(group, grpName) {
resortGroup(group);
executions[grpName] = executions[grpName] ? executions[grpName] + 1 : 1;
const amount = group.placeholders.length;
const rval = group.banners.prio.slice(0, amount);
if (rval.length < amount) {
rval.push(
...group.banners.generic.slice(0, amount - rval.length)
);
}
if (rval.length > 0) {
$.ajax({
url: "stats/bannerMultiImpression.php",
method: "POST",
data: {
banners: rval.map(e => e.id).join(","),
source: document.URL
},
dataType: "html"
});
rval.forEach(v => {
v.views++;
});
const enough = rval.length == amount;
group.placeholders.forEach(
(target) => {
if (rval.length > 0) {
const ele = rval.shift();
let mediaHtml = ele.media;
if (ele.link) {
const a = document.createElement('a');
a.href = ele.link;
a.target = "_blank";
a.innerHTML = ele.media;
mediaHtml = a;
}
mediaHtml.addEventListener(
'click',
() => {
$.ajax({
url: "stats/bannerClick.php",
method: "POST",
data: {
banner: ele.id,
source: document.URL
},
dataType: "html"
});
}
);
$('#'+target).html(mediaHtml);
}
}
);
if (enough && executions[grpName] <= MAX_EXECUTIONS) {
setTimeout(
() => {
bannerGroup(group, grpName);
},
ROTATION_INTERVAL
);
}
}
}
function resortGroup(group) {
group.banners.prio.sort(compareEle)
group.banners.generic.sort(compareEle)
}
function compareEle(a, b) {
return a.views - b.views;
}