70 lines
1.6 KiB
JavaScript
70 lines
1.6 KiB
JavaScript
const MAX_EXECUTIONS = 12;
|
|
const ROTATION_INTERVAL = 30000;
|
|
|
|
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();
|
|
$('#'+target).html(ele.media);
|
|
}
|
|
}
|
|
);
|
|
|
|
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;
|
|
} |