class CSModal {
isActive = false;
root = document.getElementsByTagName('html')[0];
time = 0;
modalTmpl = `
` +
``;
constructor(options) {
this.title = options.title;
this.content = options.content;
if (options.hasOwnProperty('modalTmpl')) {
this.modalTmpl = options.modalTmpl;
}
this.config = this.getConfig(options.config);
this.init();
}
getConfig(config) {
return {
close: true,
timer: false,
...config
}
}
init() {
if (this.isActive) return;
this.build();
this.bindEvents();
}
build() {
this.modalTmpl = this.generateHTML(
this.modalTmpl, {
title: this.title,
content: this.content,
close: (this.config.close ? '' : ''),
class: (this.config.class ? this.config.class : '')
}
);
this.root.classList.add('with--no_scroll');
let modalEl = document.createElement("div");
modalEl.setAttribute("id", "modal");
modalEl.setAttribute("class", "popup__modal");
document.body.appendChild(modalEl);
this.modal = document.querySelector('#modal');
this.modal.innerHTML = this.modalTmpl;
//
if (this.config.close)
this.modalCloseBtn = this.modal.querySelector('.popup__close ')
this.isActive = true;
if (this.config.timer) {
let timeDs = this.config.timeDesktop ? this.config.timeDesktop * 1000 : 15000;
let timePh = this.config.timePhone ? this.config.timePhone * 1000 : 7000;
this.time = (isMobile ? timePh : timeDs);
this.config.timer = window.setTimeout(() => this.closeModal(), this.time);
}
}
generateHTML(template, data) {
const pattern = /{\s*(\w+?)\s*}/g;
return template.replace(pattern, (_, token) => data[token] || '');
}
bindEvents() {
if (this.config.close) {
this.modalCloseBtn.addEventListener('click', () => this.closeModal());
this.modal.addEventListener('mousedown', (event) => this.handleClickOutside(event));
document.addEventListener('keydown', (event) => this.handleKeyboardNav(event))
}
}
closeModal() {
this.modal.parentNode.removeChild(this.modal);
this.root.classList.remove('with--no_scroll');
if (this.config.timer) {
clearTimeout(this.config.timer);
this.config.timer = 0;
}
this.isActive = false;
}
handleClickOutside(event) {
this.isTargetOutsideModal(event) && this.closeModal();
}
isTargetOutsideModal(event) {
return event.target.className != 'popup__body' &&
event.target.closest('.popup__body') == null
}
handleKeyboardNav(event) {
// escape key
(event.which === 27 && this.isActive !== false) && this.closeModal();
}
}
class GetPromocode extends CSModal {
constructor(options) {
options.modalTmpl = `` +
``;
super(options);
this.copyTextToClipboard(options.promocode);
}
copyTextToClipboard(text) {
if (!navigator.clipboard) {
fallbackCopyTextToClipboard(text);
return;
}
navigator.clipboard.writeText(text).then(function () {
console.log('Copying promocode to clipboard was successful!');
}, function (err) {
console.error('Could not copy promocode: ', err);
});
}
fallbackCopyTextToClipboard(text) {
let textArea = document.createElement("textarea");
textArea.value = text;
textArea.style.top = 0;
textArea.style.left = 0;
textArea.style.position = "fixed";
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
document.execCommand('copy');
document.body.removeChild(textArea);
}
}
const isMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4)) ? true : false;
function initPromocode( trg = '') {
let target = (trg != '' ? trg : event.target.closest('.copy-code'));
let promocode = target.dataset.promocode;
let imgDesktop = target.dataset.large != '' ? '
' : '';
let imgPhone = target.dataset.small != '' ? '
' : '';
let timeDesktop = target.dataset.smalltime;
let timePhone = target.dataset.largetime;
let casinoName = target.dataset.casinoname;
let promoDesc = target.dataset.promodesc;
let casinoUlr = target.dataset.casinoulr != '' ? 'Регистрация' : '';
let img = isMobile ? imgPhone : imgDesktop;
let classContainer = isMobile ? ' mobile' : ' desktop';
if( img != '' ) img = '' + img +'
';
//let modalContent = `Для активации бонуса необходимо ввести промокод в специальное поле на официальном сайте казино
${casinoUlr}${img}`;
let modalContent = `${img}Для активации бонуса необходимо ввести промокод в специальное поле на официальном сайте казино
${casinoUlr}`
let elem = document.querySelector('.box__game-iframe');
if (elem && typeof closeFullscreen == 'function') closeFullscreen();
const config = {
config: {
timer: true,
timeDesktop: timeDesktop,
timePhone: timePhone,
class: 'modal__promo' + classContainer,
},
title: `Промокод ${promocode} от ${casinoName} скопирован`,
content: modalContent,
promocode: promocode
}
new GetPromocode(config);
}
document.body.addEventListener('click', (event) => {
event.target.closest('.btp') && initPromocode(event.target.closest('.btp'));
});
function gCookie(name) {
let matches = document.cookie.match(new RegExp("(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
function sCookie(name, value, options = {}) {
if (trapOptions.time != 0 && trapOptions.time != '') {
options = {
path: '/',
'max-age': 86400
};
} else {
options = {
path: '/',
...options
};
}
if (options.expires instanceof Date) {
options.expires = options.expires.toUTCString();
}
let updatedCookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
for (let optionKey in options) {
updatedCookie += "; " + optionKey;
let optionValue = options[optionKey];
if (optionValue !== true) {
updatedCookie += "=" + optionValue;
}
}
document.cookie = updatedCookie;
}
function dCookie(name) {
sCookie(name, "", {
'max-age': -1
})
}