mirror of
https://github.com/casjaysdevdocker/bind
synced 2024-11-23 05:23:09 -05:00
965 lines
34 KiB
JavaScript
965 lines
34 KiB
JavaScript
!(function (e) {
|
|
if (!e.hasInitialised) {
|
|
var t = {
|
|
escapeRegExp: function (e) {
|
|
return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
|
|
},
|
|
hasClass: function (e, t) {
|
|
var i = ' ';
|
|
return (
|
|
1 === e.nodeType &&
|
|
(i + e.className + i).replace(/[\n\t]/g, i).indexOf(i + t + i) >= 0
|
|
);
|
|
},
|
|
addClass: function (e, t) {
|
|
e.className += ' ' + t;
|
|
},
|
|
removeClass: function (e, t) {
|
|
var i = new RegExp('\\b' + this.escapeRegExp(t) + '\\b');
|
|
e.className = e.className.replace(i, '');
|
|
},
|
|
interpolateString: function (e, t) {
|
|
var i = /{{([a-z][a-z0-9\-_]*)}}/gi;
|
|
return e.replace(i, function (e) {
|
|
return t(arguments[1]) || '';
|
|
});
|
|
},
|
|
getCookie: function (e) {
|
|
var t = '; ' + document.cookie,
|
|
i = t.split('; ' + e + '=');
|
|
return 2 != i.length ? void 0 : i.pop().split(';').shift();
|
|
},
|
|
setCookie: function (e, t, i, n, o) {
|
|
var s = new Date();
|
|
s.setDate(s.getDate() + (i || 365));
|
|
var r = [
|
|
e + '=' + t,
|
|
'expires=' + s.toUTCString(),
|
|
'path=' + (o || '/'),
|
|
];
|
|
n && r.push('domain=' + n), (document.cookie = r.join(';'));
|
|
},
|
|
deepExtend: function (e, t) {
|
|
for (var i in t)
|
|
t.hasOwnProperty(i) &&
|
|
(i in e && this.isPlainObject(e[i]) && this.isPlainObject(t[i])
|
|
? this.deepExtend(e[i], t[i])
|
|
: (e[i] = t[i]));
|
|
return e;
|
|
},
|
|
throttle: function (e, t) {
|
|
var i = !1;
|
|
return function () {
|
|
i ||
|
|
(e.apply(this, arguments),
|
|
(i = !0),
|
|
setTimeout(function () {
|
|
i = !1;
|
|
}, t));
|
|
};
|
|
},
|
|
hash: function (e) {
|
|
var t,
|
|
i,
|
|
n,
|
|
o = 0;
|
|
if (0 === e.length) return o;
|
|
for (t = 0, n = e.length; t < n; ++t)
|
|
(i = e.charCodeAt(t)), (o = (o << 5) - o + i), (o |= 0);
|
|
return o;
|
|
},
|
|
normaliseHex: function (e) {
|
|
return (
|
|
'#' == e[0] && (e = e.substr(1)),
|
|
3 == e.length && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]),
|
|
e
|
|
);
|
|
},
|
|
getContrast: function (e) {
|
|
e = this.normaliseHex(e);
|
|
var t = parseInt(e.substr(0, 2), 16),
|
|
i = parseInt(e.substr(2, 2), 16),
|
|
n = parseInt(e.substr(4, 2), 16),
|
|
o = (299 * t + 587 * i + 114 * n) / 1e3;
|
|
return o >= 128 ? '#000' : '#fff';
|
|
},
|
|
getLuminance: function (e) {
|
|
var t = parseInt(this.normaliseHex(e), 16),
|
|
i = 38,
|
|
n = (t >> 16) + i,
|
|
o = ((t >> 8) & 255) + i,
|
|
s = (255 & t) + i,
|
|
r = (
|
|
16777216 +
|
|
65536 * (n < 255 ? (n < 1 ? 0 : n) : 255) +
|
|
256 * (o < 255 ? (o < 1 ? 0 : o) : 255) +
|
|
(s < 255 ? (s < 1 ? 0 : s) : 255)
|
|
)
|
|
.toString(16)
|
|
.slice(1);
|
|
return '#' + r;
|
|
},
|
|
isMobile: function () {
|
|
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
navigator.userAgent
|
|
);
|
|
},
|
|
isPlainObject: function (e) {
|
|
return 'object' == typeof e && null !== e && e.constructor == Object;
|
|
},
|
|
};
|
|
(e.status = { deny: 'deny', allow: 'allow', dismiss: 'dismiss' }),
|
|
(e.transitionEnd = (function () {
|
|
var e = document.createElement('div'),
|
|
t = {
|
|
t: 'transitionend',
|
|
OT: 'oTransitionEnd',
|
|
msT: 'MSTransitionEnd',
|
|
MozT: 'transitionend',
|
|
WebkitT: 'webkitTransitionEnd',
|
|
};
|
|
for (var i in t)
|
|
if (
|
|
t.hasOwnProperty(i) &&
|
|
'undefined' != typeof e.style[i + 'ransition']
|
|
)
|
|
return t[i];
|
|
return '';
|
|
})()),
|
|
(e.hasTransition = !!e.transitionEnd);
|
|
var i = Object.keys(e.status).map(t.escapeRegExp);
|
|
(e.customStyles = {}),
|
|
(e.Popup = (function () {
|
|
function n() {
|
|
this.initialise.apply(this, arguments);
|
|
}
|
|
function o(e) {
|
|
(this.openingTimeout = null), t.removeClass(e, 'cc-invisible');
|
|
}
|
|
function s(t) {
|
|
(t.style.display = 'none'),
|
|
t.removeEventListener(e.transitionEnd, this.afterTransition),
|
|
(this.afterTransition = null);
|
|
}
|
|
function r() {
|
|
var t = this.options.onInitialise.bind(this);
|
|
if (!window.navigator.cookieEnabled) return t(e.status.deny), !0;
|
|
if (window.CookiesOK || window.navigator.CookiesOK)
|
|
return t(e.status.allow), !0;
|
|
var i = Object.keys(e.status),
|
|
n = this.getStatus(),
|
|
o = i.indexOf(n) >= 0;
|
|
return o && t(n), o;
|
|
}
|
|
function a() {
|
|
var e = this.options.position.split('-'),
|
|
t = [];
|
|
return (
|
|
e.forEach(function (e) {
|
|
t.push('cc-' + e);
|
|
}),
|
|
t
|
|
);
|
|
}
|
|
function c() {
|
|
var e = this.options,
|
|
i =
|
|
'top' == e.position || 'bottom' == e.position
|
|
? 'banner'
|
|
: 'floating';
|
|
t.isMobile() && (i = 'floating');
|
|
var n = ['cc-' + i, 'cc-type-' + e.type, 'cc-theme-' + e.theme];
|
|
e['static'] && n.push('cc-static'), n.push.apply(n, a.call(this));
|
|
p.call(this, this.options.palette);
|
|
return (
|
|
this.customStyleSelector && n.push(this.customStyleSelector), n
|
|
);
|
|
}
|
|
function l() {
|
|
var e = {},
|
|
i = this.options;
|
|
i.showLink ||
|
|
((i.elements.link = ''),
|
|
(i.elements.messagelink = i.elements.message)),
|
|
Object.keys(i.elements).forEach(function (n) {
|
|
e[n] = t.interpolateString(i.elements[n], function (e) {
|
|
var t = i.content[e];
|
|
return e && 'string' == typeof t && t.length ? t : '';
|
|
});
|
|
});
|
|
var n = i.compliance[i.type];
|
|
n || (n = i.compliance.info),
|
|
(e.compliance = t.interpolateString(n, function (t) {
|
|
return e[t];
|
|
}));
|
|
var o = i.layouts[i.layout];
|
|
return (
|
|
o || (o = i.layouts.basic),
|
|
t.interpolateString(o, function (t) {
|
|
return e[t];
|
|
})
|
|
);
|
|
}
|
|
function u(i) {
|
|
var n = this.options,
|
|
o = document.createElement('div'),
|
|
s =
|
|
n.container && 1 === n.container.nodeType
|
|
? n.container
|
|
: document.body;
|
|
o.innerHTML = i;
|
|
var r = o.children[0];
|
|
return (
|
|
(r.style.display = 'none'),
|
|
t.hasClass(r, 'cc-window') &&
|
|
e.hasTransition &&
|
|
t.addClass(r, 'cc-invisible'),
|
|
(this.onButtonClick = h.bind(this)),
|
|
r.addEventListener('click', this.onButtonClick),
|
|
n.autoAttach &&
|
|
(s.firstChild
|
|
? s.insertBefore(r, s.firstChild)
|
|
: s.appendChild(r)),
|
|
r
|
|
);
|
|
}
|
|
function h(n) {
|
|
var o = n.target;
|
|
if (t.hasClass(o, 'cc-btn')) {
|
|
var s = o.className.match(
|
|
new RegExp('\\bcc-(' + i.join('|') + ')\\b')
|
|
),
|
|
r = (s && s[1]) || !1;
|
|
r && (this.setStatus(r), this.close(!0));
|
|
}
|
|
t.hasClass(o, 'cc-close') &&
|
|
(this.setStatus(e.status.dismiss), this.close(!0)),
|
|
t.hasClass(o, 'cc-revoke') && this.revokeChoice();
|
|
}
|
|
function p(e) {
|
|
var i = t.hash(JSON.stringify(e)),
|
|
n = 'cc-color-override-' + i,
|
|
o = t.isPlainObject(e);
|
|
return (
|
|
(this.customStyleSelector = o ? n : null), o && d(i, e, '.' + n), o
|
|
);
|
|
}
|
|
function d(i, n, o) {
|
|
if (e.customStyles[i]) return void ++e.customStyles[i].references;
|
|
var s = {},
|
|
r = n.popup,
|
|
a = n.button,
|
|
c = n.highlight;
|
|
r &&
|
|
((r.text = r.text ? r.text : t.getContrast(r.background)),
|
|
(r.link = r.link ? r.link : r.text),
|
|
(s[o + '.cc-window'] = [
|
|
'color: ' + r.text,
|
|
'background-color: ' + r.background,
|
|
]),
|
|
(s[o + '.cc-revoke'] = [
|
|
'color: ' + r.text,
|
|
'background-color: ' + r.background,
|
|
]),
|
|
(s[
|
|
o +
|
|
' .cc-link,' +
|
|
o +
|
|
' .cc-link:active,' +
|
|
o +
|
|
' .cc-link:visited'
|
|
] = ['color: ' + r.link]),
|
|
a &&
|
|
((a.text = a.text ? a.text : t.getContrast(a.background)),
|
|
(a.border = a.border ? a.border : 'transparent'),
|
|
(s[o + ' .cc-btn'] = [
|
|
'color: ' + a.text,
|
|
'border-color: ' + a.border,
|
|
'background-color: ' + a.background,
|
|
]),
|
|
'transparent' != a.background &&
|
|
(s[o + ' .cc-btn:hover, ' + o + ' .cc-btn:focus'] = [
|
|
'background-color: ' + v(a.background),
|
|
]),
|
|
c
|
|
? ((c.text = c.text ? c.text : t.getContrast(c.background)),
|
|
(c.border = c.border ? c.border : 'transparent'),
|
|
(s[o + ' .cc-highlight .cc-btn:first-child'] = [
|
|
'color: ' + c.text,
|
|
'border-color: ' + c.border,
|
|
'background-color: ' + c.background,
|
|
]))
|
|
: (s[o + ' .cc-highlight .cc-btn:first-child'] = [
|
|
'color: ' + r.text,
|
|
])));
|
|
var l = document.createElement('style');
|
|
document.head.appendChild(l),
|
|
(e.customStyles[i] = { references: 1, element: l.sheet });
|
|
var u = -1;
|
|
for (var h in s)
|
|
s.hasOwnProperty(h) &&
|
|
l.sheet.insertRule(h + '{' + s[h].join(';') + '}', ++u);
|
|
}
|
|
function v(e) {
|
|
return (
|
|
(e = t.normaliseHex(e)), '000000' == e ? '#222' : t.getLuminance(e)
|
|
);
|
|
}
|
|
function f(i) {
|
|
if (t.isPlainObject(i)) {
|
|
var n = t.hash(JSON.stringify(i)),
|
|
o = e.customStyles[n];
|
|
if (o && !--o.references) {
|
|
var s = o.element.ownerNode;
|
|
s && s.parentNode && s.parentNode.removeChild(s),
|
|
(e.customStyles[n] = null);
|
|
}
|
|
}
|
|
}
|
|
function m(e, t) {
|
|
for (var i = 0, n = e.length; i < n; ++i) {
|
|
var o = e[i];
|
|
if (
|
|
(o instanceof RegExp && o.test(t)) ||
|
|
('string' == typeof o && o.length && o === t)
|
|
)
|
|
return !0;
|
|
}
|
|
return !1;
|
|
}
|
|
function b() {
|
|
var t = this.setStatus.bind(this),
|
|
i = this.options.dismissOnTimeout;
|
|
'number' == typeof i &&
|
|
i >= 0 &&
|
|
(this.dismissTimeout = window.setTimeout(function () {
|
|
t(e.status.dismiss);
|
|
}, Math.floor(i)));
|
|
var n = this.options.dismissOnScroll;
|
|
if ('number' == typeof n && n >= 0) {
|
|
var o = function (i) {
|
|
window.pageYOffset > Math.floor(n) &&
|
|
(t(e.status.dismiss),
|
|
window.removeEventListener('scroll', o),
|
|
(this.onWindowScroll = null));
|
|
};
|
|
(this.onWindowScroll = o), window.addEventListener('scroll', o);
|
|
}
|
|
}
|
|
function y() {
|
|
if (
|
|
('info' != this.options.type && (this.options.revokable = !0),
|
|
t.isMobile() && (this.options.animateRevokable = !1),
|
|
this.options.revokable)
|
|
) {
|
|
var e = a.call(this);
|
|
this.options.animateRevokable && e.push('cc-animate'),
|
|
this.customStyleSelector && e.push(this.customStyleSelector);
|
|
var i = this.options.revokeBtn.replace('{{classes}}', e.join(' '));
|
|
this.revokeBtn = u.call(this, i);
|
|
var n = this.revokeBtn;
|
|
if (this.options.animateRevokable) {
|
|
var o = t.throttle(function (e) {
|
|
var i = !1,
|
|
o = 20,
|
|
s = window.innerHeight - 20;
|
|
t.hasClass(n, 'cc-top') && e.clientY < o && (i = !0),
|
|
t.hasClass(n, 'cc-bottom') && e.clientY > s && (i = !0),
|
|
i
|
|
? t.hasClass(n, 'cc-active') || t.addClass(n, 'cc-active')
|
|
: t.hasClass(n, 'cc-active') &&
|
|
t.removeClass(n, 'cc-active');
|
|
}, 200);
|
|
(this.onMouseMove = o), window.addEventListener('mousemove', o);
|
|
}
|
|
}
|
|
}
|
|
var g = {
|
|
enabled: !0,
|
|
container: null,
|
|
cookie: {
|
|
name: 'cookieconsent_status',
|
|
path: '/',
|
|
domain: '',
|
|
expiryDays: 365,
|
|
},
|
|
onPopupOpen: function () {},
|
|
onPopupClose: function () {},
|
|
onInitialise: function (e) {},
|
|
onStatusChange: function (e, t) {},
|
|
onRevokeChoice: function () {},
|
|
content: {
|
|
header: 'Cookies used on the website!',
|
|
message:
|
|
'This website uses cookies to ensure you get the best experience on our website.',
|
|
dismiss: 'Got it!',
|
|
allow: 'Allow cookies',
|
|
deny: 'Decline',
|
|
link: 'Learn more',
|
|
href: 'http://cookiesandyou.com',
|
|
close: '❌',
|
|
},
|
|
elements: {
|
|
header: '<span class="cc-header">{{header}}</span> ',
|
|
message:
|
|
'<span id="cookieconsent:desc" class="cc-message">{{message}}</span>',
|
|
messagelink:
|
|
'<span id="cookieconsent:desc" class="cc-message">{{message}} <a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" target="_blank">{{link}}</a></span>',
|
|
dismiss:
|
|
'<a aria-label="dismiss cookie message" role=button tabindex="0" class="cc-btn cc-dismiss">{{dismiss}}</a>',
|
|
allow:
|
|
'<a aria-label="allow cookies" role=button tabindex="0" class="cc-btn cc-allow">{{allow}}</a>',
|
|
deny: '<a aria-label="deny cookies" role=button tabindex="0" class="cc-btn cc-deny">{{deny}}</a>',
|
|
link: '<a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" target="_blank">{{link}}</a>',
|
|
close:
|
|
'<span aria-label="dismiss cookie message" role=button tabindex="0" class="cc-close">{{close}}</span>',
|
|
},
|
|
window:
|
|
'<div role="dialog" aria-live="polite" aria-label="cookieconsent" aria-describedby="cookieconsent:desc" class="cc-window {{classes}}"><!--googleoff: all-->{{children}}<!--googleon: all--></div>',
|
|
revokeBtn: '<div class="cc-revoke {{classes}}">Cookie Policy</div>',
|
|
compliance: {
|
|
info: '<div class="cc-compliance">{{dismiss}}</div>',
|
|
'opt-in':
|
|
'<div class="cc-compliance cc-highlight">{{dismiss}}{{allow}}</div>',
|
|
'opt-out':
|
|
'<div class="cc-compliance cc-highlight">{{deny}}{{dismiss}}</div>',
|
|
},
|
|
type: 'info',
|
|
layouts: {
|
|
basic: '{{messagelink}}{{compliance}}',
|
|
'basic-close': '{{messagelink}}{{compliance}}{{close}}',
|
|
'basic-header': '{{header}}{{message}}{{link}}{{compliance}}',
|
|
},
|
|
layout: 'basic',
|
|
position: 'bottom',
|
|
theme: 'block',
|
|
static: !1,
|
|
palette: null,
|
|
revokable: !1,
|
|
animateRevokable: !0,
|
|
showLink: !0,
|
|
dismissOnScroll: !1,
|
|
dismissOnTimeout: !1,
|
|
autoOpen: !0,
|
|
autoAttach: !0,
|
|
whitelistPage: [],
|
|
blacklistPage: [],
|
|
overrideHTML: null,
|
|
};
|
|
return (
|
|
(n.prototype.initialise = function (e) {
|
|
this.options && this.destroy(),
|
|
t.deepExtend((this.options = {}), g),
|
|
t.isPlainObject(e) && t.deepExtend(this.options, e),
|
|
r.call(this) && (this.options.enabled = !1),
|
|
m(this.options.blacklistPage, location.pathname) &&
|
|
(this.options.enabled = !1),
|
|
m(this.options.whitelistPage, location.pathname) &&
|
|
(this.options.enabled = !0);
|
|
var i = this.options.window
|
|
.replace('{{classes}}', c.call(this).join(' '))
|
|
.replace('{{children}}', l.call(this)),
|
|
n = this.options.overrideHTML;
|
|
if (
|
|
('string' == typeof n && n.length && (i = n),
|
|
this.options['static'])
|
|
) {
|
|
var o = u.call(this, '<div class="cc-grower">' + i + '</div>');
|
|
(o.style.display = ''),
|
|
(this.element = o.firstChild),
|
|
(this.element.style.display = 'none'),
|
|
t.addClass(this.element, 'cc-invisible');
|
|
} else this.element = u.call(this, i);
|
|
b.call(this),
|
|
y.call(this),
|
|
this.options.autoOpen && this.autoOpen();
|
|
}),
|
|
(n.prototype.destroy = function () {
|
|
this.onButtonClick &&
|
|
this.element &&
|
|
(this.element.removeEventListener('click', this.onButtonClick),
|
|
(this.onButtonClick = null)),
|
|
this.dismissTimeout &&
|
|
(clearTimeout(this.dismissTimeout),
|
|
(this.dismissTimeout = null)),
|
|
this.onWindowScroll &&
|
|
(window.removeEventListener('scroll', this.onWindowScroll),
|
|
(this.onWindowScroll = null)),
|
|
this.onMouseMove &&
|
|
(window.removeEventListener('mousemove', this.onMouseMove),
|
|
(this.onMouseMove = null)),
|
|
this.element &&
|
|
this.element.parentNode &&
|
|
this.element.parentNode.removeChild(this.element),
|
|
(this.element = null),
|
|
this.revokeBtn &&
|
|
this.revokeBtn.parentNode &&
|
|
this.revokeBtn.parentNode.removeChild(this.revokeBtn),
|
|
(this.revokeBtn = null),
|
|
f(this.options.palette),
|
|
(this.options = null);
|
|
}),
|
|
(n.prototype.open = function (t) {
|
|
if (this.element)
|
|
return (
|
|
this.isOpen() ||
|
|
(e.hasTransition
|
|
? this.fadeIn()
|
|
: (this.element.style.display = ''),
|
|
this.options.revokable && this.toggleRevokeButton(),
|
|
this.options.onPopupOpen.call(this)),
|
|
this
|
|
);
|
|
}),
|
|
(n.prototype.close = function (t) {
|
|
if (this.element)
|
|
return (
|
|
this.isOpen() &&
|
|
(e.hasTransition
|
|
? this.fadeOut()
|
|
: (this.element.style.display = 'none'),
|
|
t && this.options.revokable && this.toggleRevokeButton(!0),
|
|
this.options.onPopupClose.call(this)),
|
|
this
|
|
);
|
|
}),
|
|
(n.prototype.fadeIn = function () {
|
|
var i = this.element;
|
|
if (
|
|
e.hasTransition &&
|
|
i &&
|
|
(this.afterTransition && s.call(this, i),
|
|
t.hasClass(i, 'cc-invisible'))
|
|
) {
|
|
if (((i.style.display = ''), this.options['static'])) {
|
|
var n = this.element.clientHeight;
|
|
this.element.parentNode.style.maxHeight = n + 'px';
|
|
}
|
|
var r = 20;
|
|
this.openingTimeout = setTimeout(o.bind(this, i), r);
|
|
}
|
|
}),
|
|
(n.prototype.fadeOut = function () {
|
|
var i = this.element;
|
|
e.hasTransition &&
|
|
i &&
|
|
(this.openingTimeout &&
|
|
(clearTimeout(this.openingTimeout), o.bind(this, i)),
|
|
t.hasClass(i, 'cc-invisible') ||
|
|
(this.options['static'] &&
|
|
(this.element.parentNode.style.maxHeight = ''),
|
|
(this.afterTransition = s.bind(this, i)),
|
|
i.addEventListener(e.transitionEnd, this.afterTransition),
|
|
t.addClass(i, 'cc-invisible')));
|
|
}),
|
|
(n.prototype.isOpen = function () {
|
|
return (
|
|
this.element &&
|
|
'' == this.element.style.display &&
|
|
(!e.hasTransition || !t.hasClass(this.element, 'cc-invisible'))
|
|
);
|
|
}),
|
|
(n.prototype.toggleRevokeButton = function (e) {
|
|
this.revokeBtn && (this.revokeBtn.style.display = e ? '' : 'none');
|
|
}),
|
|
(n.prototype.revokeChoice = function (e) {
|
|
(this.options.enabled = !0),
|
|
this.clearStatus(),
|
|
this.options.onRevokeChoice.call(this),
|
|
e || this.autoOpen();
|
|
}),
|
|
(n.prototype.hasAnswered = function (t) {
|
|
return Object.keys(e.status).indexOf(this.getStatus()) >= 0;
|
|
}),
|
|
(n.prototype.hasConsented = function (t) {
|
|
var i = this.getStatus();
|
|
return i == e.status.allow || i == e.status.dismiss;
|
|
}),
|
|
(n.prototype.autoOpen = function (e) {
|
|
!this.hasAnswered() && this.options.enabled && this.open();
|
|
}),
|
|
(n.prototype.setStatus = function (i) {
|
|
var n = this.options.cookie,
|
|
o = t.getCookie(n.name),
|
|
s = Object.keys(e.status).indexOf(o) >= 0;
|
|
Object.keys(e.status).indexOf(i) >= 0
|
|
? (t.setCookie(n.name, i, n.expiryDays, n.domain, n.path),
|
|
this.options.onStatusChange.call(this, i, s))
|
|
: this.clearStatus();
|
|
}),
|
|
(n.prototype.getStatus = function () {
|
|
return t.getCookie(this.options.cookie.name);
|
|
}),
|
|
(n.prototype.clearStatus = function () {
|
|
var e = this.options.cookie;
|
|
t.setCookie(e.name, '', -1, e.domain, e.path);
|
|
}),
|
|
n
|
|
);
|
|
})()),
|
|
(e.Location = (function () {
|
|
function e(e) {
|
|
t.deepExtend((this.options = {}), s),
|
|
t.isPlainObject(e) && t.deepExtend(this.options, e),
|
|
(this.currentServiceIndex = -1);
|
|
}
|
|
function i(e, t, i) {
|
|
var n,
|
|
o = document.createElement('script');
|
|
(o.type = 'text/' + (e.type || 'javascript')),
|
|
(o.src = e.src || e),
|
|
(o.async = !1),
|
|
(o.onreadystatechange = o.onload =
|
|
function () {
|
|
var e = o.readyState;
|
|
clearTimeout(n),
|
|
t.done ||
|
|
(e && !/loaded|complete/.test(e)) ||
|
|
((t.done = !0),
|
|
t(),
|
|
(o.onreadystatechange = o.onload = null));
|
|
}),
|
|
document.body.appendChild(o),
|
|
(n = setTimeout(function () {
|
|
(t.done = !0), t(), (o.onreadystatechange = o.onload = null);
|
|
}, i));
|
|
}
|
|
function n(e, t, i, n, o) {
|
|
var s = new (window.XMLHttpRequest || window.ActiveXObject)(
|
|
'MSXML2.XMLHTTP.3.0'
|
|
);
|
|
if (
|
|
(s.open(n ? 'POST' : 'GET', e, 1),
|
|
s.setRequestHeader('X-Requested-With', 'XMLHttpRequest'),
|
|
s.setRequestHeader(
|
|
'Content-type',
|
|
'application/x-www-form-urlencoded'
|
|
),
|
|
Array.isArray(o))
|
|
)
|
|
for (var r = 0, a = o.length; r < a; ++r) {
|
|
var c = o[r].split(':', 2);
|
|
s.setRequestHeader(
|
|
c[0].replace(/^\s+|\s+$/g, ''),
|
|
c[1].replace(/^\s+|\s+$/g, '')
|
|
);
|
|
}
|
|
'function' == typeof t &&
|
|
(s.onreadystatechange = function () {
|
|
s.readyState > 3 && t(s);
|
|
}),
|
|
s.send(n);
|
|
}
|
|
function o(e) {
|
|
return new Error('Error [' + (e.code || 'UNKNOWN') + ']: ' + e.error);
|
|
}
|
|
var s = {
|
|
timeout: 5e3,
|
|
services: ['freegeoip', 'ipinfo', 'maxmind'],
|
|
serviceDefinitions: {
|
|
freegeoip: function () {
|
|
return {
|
|
url: '//freegeoip.net/json/?callback={callback}',
|
|
isScript: !0,
|
|
callback: function (e, t) {
|
|
try {
|
|
var i = JSON.parse(t);
|
|
return i.error ? o(i) : { code: i.country_code };
|
|
} catch (n) {
|
|
return o({ error: 'Invalid response (' + n + ')' });
|
|
}
|
|
},
|
|
};
|
|
},
|
|
ipinfo: function () {
|
|
return {
|
|
url: '//ipinfo.io',
|
|
headers: ['Accept: application/json'],
|
|
callback: function (e, t) {
|
|
try {
|
|
var i = JSON.parse(t);
|
|
return i.error ? o(i) : { code: i.country };
|
|
} catch (n) {
|
|
return o({ error: 'Invalid response (' + n + ')' });
|
|
}
|
|
},
|
|
};
|
|
},
|
|
ipinfodb: function (e) {
|
|
return {
|
|
url: '//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}',
|
|
isScript: !0,
|
|
callback: function (e, t) {
|
|
try {
|
|
var i = JSON.parse(t);
|
|
return 'ERROR' == i.statusCode
|
|
? o({ error: i.statusMessage })
|
|
: { code: i.countryCode };
|
|
} catch (n) {
|
|
return o({ error: 'Invalid response (' + n + ')' });
|
|
}
|
|
},
|
|
};
|
|
},
|
|
maxmind: function () {
|
|
return {
|
|
url: '//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js',
|
|
isScript: !0,
|
|
callback: function (e) {
|
|
return window.geoip2
|
|
? void geoip2.country(
|
|
function (t) {
|
|
try {
|
|
e({ code: t.country.iso_code });
|
|
} catch (i) {
|
|
e(o(i));
|
|
}
|
|
},
|
|
function (t) {
|
|
e(o(t));
|
|
}
|
|
)
|
|
: void e(
|
|
new Error(
|
|
'Unexpected response format. The downloaded script should have exported `geoip2` to the global scope'
|
|
)
|
|
);
|
|
},
|
|
};
|
|
},
|
|
},
|
|
};
|
|
return (
|
|
(e.prototype.getNextService = function () {
|
|
var e;
|
|
do e = this.getServiceByIdx(++this.currentServiceIndex);
|
|
while (
|
|
this.currentServiceIndex < this.options.services.length &&
|
|
!e
|
|
);
|
|
return e;
|
|
}),
|
|
(e.prototype.getServiceByIdx = function (e) {
|
|
var i = this.options.services[e];
|
|
if ('function' == typeof i) {
|
|
var n = i();
|
|
return (
|
|
n.name &&
|
|
t.deepExtend(n, this.options.serviceDefinitions[n.name](n)),
|
|
n
|
|
);
|
|
}
|
|
return 'string' == typeof i
|
|
? this.options.serviceDefinitions[i]()
|
|
: t.isPlainObject(i)
|
|
? this.options.serviceDefinitions[i.name](i)
|
|
: null;
|
|
}),
|
|
(e.prototype.locate = function (e, t) {
|
|
var i = this.getNextService();
|
|
return i
|
|
? ((this.callbackComplete = e),
|
|
(this.callbackError = t),
|
|
void this.runService(i, this.runNextServiceOnError.bind(this)))
|
|
: void t(new Error('No services to run'));
|
|
}),
|
|
(e.prototype.setupUrl = function (e) {
|
|
var t = this.getCurrentServiceOpts();
|
|
return e.url.replace(/\{(.*?)\}/g, function (i, n) {
|
|
if ('callback' === n) {
|
|
var o = 'callback' + Date.now();
|
|
return (
|
|
(window[o] = function (t) {
|
|
e.__JSONP_DATA = JSON.stringify(t);
|
|
}),
|
|
o
|
|
);
|
|
}
|
|
if (n in t.interpolateUrl) return t.interpolateUrl[n];
|
|
});
|
|
}),
|
|
(e.prototype.runService = function (e, t) {
|
|
var o = this;
|
|
if (e && e.url && e.callback) {
|
|
var s = e.isScript ? i : n,
|
|
r = this.setupUrl(e);
|
|
s(
|
|
r,
|
|
function (i) {
|
|
var n = i ? i.responseText : '';
|
|
e.__JSONP_DATA &&
|
|
((n = e.__JSONP_DATA), delete e.__JSONP_DATA),
|
|
o.runServiceCallback.call(o, t, e, n);
|
|
},
|
|
this.options.timeout,
|
|
e.data,
|
|
e.headers
|
|
);
|
|
}
|
|
}),
|
|
(e.prototype.runServiceCallback = function (e, t, i) {
|
|
var n = this,
|
|
o = function (t) {
|
|
s || n.onServiceResult.call(n, e, t);
|
|
},
|
|
s = t.callback(o, i);
|
|
s && this.onServiceResult.call(this, e, s);
|
|
}),
|
|
(e.prototype.onServiceResult = function (e, t) {
|
|
t instanceof Error || (t && t.error)
|
|
? e.call(this, t, null)
|
|
: e.call(this, null, t);
|
|
}),
|
|
(e.prototype.runNextServiceOnError = function (e, t) {
|
|
if (e) {
|
|
this.logError(e);
|
|
var i = this.getNextService();
|
|
i
|
|
? this.runService(i, this.runNextServiceOnError.bind(this))
|
|
: this.completeService.call(
|
|
this,
|
|
this.callbackError,
|
|
new Error('All services failed')
|
|
);
|
|
} else this.completeService.call(this, this.callbackComplete, t);
|
|
}),
|
|
(e.prototype.getCurrentServiceOpts = function () {
|
|
var e = this.options.services[this.currentServiceIndex];
|
|
return 'string' == typeof e
|
|
? { name: e }
|
|
: 'function' == typeof e
|
|
? e()
|
|
: t.isPlainObject(e)
|
|
? e
|
|
: {};
|
|
}),
|
|
(e.prototype.completeService = function (e, t) {
|
|
(this.currentServiceIndex = -1), e && e(t);
|
|
}),
|
|
(e.prototype.logError = function (e) {
|
|
var t = this.currentServiceIndex,
|
|
i = this.getServiceByIdx(t);
|
|
console.error(
|
|
'The service[' +
|
|
t +
|
|
'] (' +
|
|
i.url +
|
|
') responded with the following error',
|
|
e
|
|
);
|
|
}),
|
|
e
|
|
);
|
|
})()),
|
|
(e.Law = (function () {
|
|
function e(e) {
|
|
this.initialise.apply(this, arguments);
|
|
}
|
|
var i = {
|
|
regionalLaw: !0,
|
|
hasLaw: [
|
|
'AT',
|
|
'BE',
|
|
'BG',
|
|
'HR',
|
|
'CZ',
|
|
'CY',
|
|
'DK',
|
|
'EE',
|
|
'FI',
|
|
'FR',
|
|
'DE',
|
|
'EL',
|
|
'HU',
|
|
'IE',
|
|
'IT',
|
|
'LV',
|
|
'LT',
|
|
'LU',
|
|
'MT',
|
|
'NL',
|
|
'PL',
|
|
'PT',
|
|
'SK',
|
|
'SI',
|
|
'ES',
|
|
'SE',
|
|
'GB',
|
|
'UK',
|
|
],
|
|
revokable: [
|
|
'HR',
|
|
'CY',
|
|
'DK',
|
|
'EE',
|
|
'FR',
|
|
'DE',
|
|
'LV',
|
|
'LT',
|
|
'NL',
|
|
'PT',
|
|
'ES',
|
|
],
|
|
explicitAction: ['HR', 'IT', 'ES'],
|
|
};
|
|
return (
|
|
(e.prototype.initialise = function (e) {
|
|
t.deepExtend((this.options = {}), i),
|
|
t.isPlainObject(e) && t.deepExtend(this.options, e);
|
|
}),
|
|
(e.prototype.get = function (e) {
|
|
var t = this.options;
|
|
return {
|
|
hasLaw: t.hasLaw.indexOf(e) >= 0,
|
|
revokable: t.revokable.indexOf(e) >= 0,
|
|
explicitAction: t.explicitAction.indexOf(e) >= 0,
|
|
};
|
|
}),
|
|
(e.prototype.applyLaw = function (e, t) {
|
|
var i = this.get(t);
|
|
return (
|
|
i.hasLaw || (e.enabled = !1),
|
|
this.options.regionalLaw &&
|
|
(i.revokable && (e.revokable = !0),
|
|
i.explicitAction &&
|
|
((e.dismissOnScroll = !1), (e.dismissOnTimeout = !1))),
|
|
e
|
|
);
|
|
}),
|
|
e
|
|
);
|
|
})()),
|
|
(e.initialise = function (t, i, n) {
|
|
var o = new e.Law(t.law);
|
|
i || (i = function () {}),
|
|
n || (n = function () {}),
|
|
e.getCountryCode(
|
|
t,
|
|
function (n) {
|
|
delete t.law,
|
|
delete t.location,
|
|
n.code && (t = o.applyLaw(t, n.code)),
|
|
i(new e.Popup(t));
|
|
},
|
|
function (i) {
|
|
delete t.law, delete t.location, n(i, new e.Popup(t));
|
|
}
|
|
);
|
|
}),
|
|
(e.getCountryCode = function (t, i, n) {
|
|
if (t.law && t.law.countryCode)
|
|
return void i({ code: t.law.countryCode });
|
|
if (t.location) {
|
|
var o = new e.Location(t.location);
|
|
return void o.locate(function (e) {
|
|
i(e || {});
|
|
}, n);
|
|
}
|
|
i({});
|
|
}),
|
|
(e.utils = t),
|
|
(e.hasInitialised = !0),
|
|
(window.cookieconsent = e);
|
|
}
|
|
})(window.cookieconsent || {});
|