Initial commit
This commit is contained in:
commit
83a9fdc6dd
47 changed files with 11174 additions and 0 deletions
587
index_files/cookieconsent.js
Normal file
587
index_files/cookieconsent.js
Normal file
|
|
@ -0,0 +1,587 @@
|
|||
! 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 || {});
|
||||
Loading…
Add table
Add a link
Reference in a new issue