(function () {
var buttons = [
{
selector: '.max-bot-btn',
suffix: '_maxbot'
},
{
selector: '.tg-bot-btn',
suffix: '_tgbot'
},
{
selector: '.vk-bot-btn',
suffix: '_vkbot'
}
];
function addSuffixToUtmTerm(href, suffix) {
try {
var url = new URL(href, window.location.href);
var params = url.searchParams;
var term = params.get('utm_term') || '';
// Убираем старые bot-суффиксы, чтобы не получилось creative1_tgbot_maxbot
term = term
.replace(/_tgbot/g, '')
.replace(/_maxbot/g, '')
.replace(/_vkbot/g, '');
if (term) {
params.set('utm_term', term + suffix);
} else {
params.set('utm_term', suffix.replace(/^_/, ''));
}
return url.toString();
} catch (e) {
return href;
}
}
function getLinkByElement(element) {
if (!element) return null;
if (element.tagName && element.tagName.toLowerCase() === 'a') {
return element;
}
var parentLink = element.closest('a');
if (parentLink) {
return parentLink;
}
var innerLink = element.querySelector('a');
if (innerLink) {
return innerLink;
}
return null;
}
function findButtonConfigByElement(element) {
for (var i = 0; i < buttons.length; i++) {
var button = buttons[i];
if (element.matches && element.matches(button.selector)) {
return button;
}
if (element.closest && element.closest(button.selector)) {
return button;
}
var link = getLinkByElement(element);
if (link && link.querySelector(button.selector)) {
return button;
}
}
return null;
}
function updateLinks() {
buttons.forEach(function (button) {
var elements = document.querySelectorAll(button.selector);
elements.forEach(function (element) {
var link = getLinkByElement(element);
if (!link) return;
var href = link.getAttribute('href');
if (!href) return;
var newHref = addSuffixToUtmTerm(href, button.suffix);
link.setAttribute('href', newHref);
});
});
}
// Обновляем ссылки несколько раз после загрузки,
// чтобы основной UTM-скрипт сайта успел сначала подставить метки
document.addEventListener('DOMContentLoaded', function () {
setTimeout(updateLinks, 500);
setTimeout(updateLinks, 1500);
setTimeout(updateLinks, 3000);
setTimeout(updateLinks, 5000);
});
window.addEventListener('load', function () {
setTimeout(updateLinks, 1000);
setTimeout(updateLinks, 3000);
});
// Самая важная страховка:
// прямо при клике формируем финальную ссылку и отправляем пользователя по ней
document.addEventListener('click', function (event) {
var clickedElement = event.target;
var link = getLinkByElement(clickedElement);
if (!link) return;
var button = findButtonConfigByElement(clickedElement);
if (!button) return;
var href = link.getAttribute('href');
if (!href) return;
var newHref = addSuffixToUtmTerm(href, button.suffix);
link.setAttribute('href', newHref);
// Гарантированно уводим по исправленной ссылке
event.preventDefault();
var target = link.getAttribute('target');
if (target === '_blank') {
window.open(newHref, '_blank');
} else {
window.location.href = newHref;
}
}, true);
})();