Files
DESKTOP-GBA0BK8\Admin 7c8c8b1c76 first commit
2023-04-08 12:19:53 -04:00

102 lines
2.7 KiB
JavaScript

import Record from './models/record';
import Cookies from 'js-cookie';
if (!window.jQuery) {
console.error('Geoip-detect: window.jQuery is missing!');
}
const $ = window.jQuery;
if (!window.geoip_detect) {
console.error('Geoip-detect: window.geoip_detect')
}
const options = window.geoip_detect.options || {};
let ajaxPromise = null;
function get_info_raw() {
if (!ajaxPromise) {
// Do Ajax Request only once per page load
ajaxPromise = $.ajax(options.ajaxurl, {
dataType: 'json',
type: 'GET',
data: {
action: 'geoip_detect2_get_info_from_current_ip'
}
});
}
return ajaxPromise;
}
async function get_info_cached() {
let response = false;
// 1) Load Info from cookie cache, if possible
if (options.cookie_name) {
response = Cookies.getJSON(options.cookie_name)
}
// 2) Get response
try {
response = await get_info_raw();
} catch(err) {
response = err.responseJSON || err;
}
// 3) Save info to cookie cache
if (options.cookie_name) {
let cookie_options = { path: '/' };
if (options.cookie_duration_in_days) {
cookie_options.expires = options.cookie_duration_in_days;
}
Cookies.set(options.cookie_name, JSON.stringify(response), cookie_options);
}
return response;
}
export async function get_info() {
let response = await get_info_cached();
if (typeof(response) !== 'object') {
console.error('Geoip-detect: Record should be an object, not a ' + typeof(response), response);
response = { 'extra': { 'error': response || 'Network error, look at the original server response ...' }};
}
const record = new Record(response, options.default_locales);
return record;
}
async function add_body_classes() {
const record = await get_info();
if (record.error()) {
console.error('Geodata Error (could not add CSS-classes to body): ' + record.error());
}
const css_classes = {
country: record.get('country.iso_code'),
'country-is-in-european-union': record.get('country.is_in_european_union'),
continent: record.get('continent.code'),
province: record.get('most_specific_subdivision.iso_code'),
};
for(let key of Object.keys(css_classes)) {
const value = css_classes[key];
if (value) {
if (typeof(value) == 'string') {
$('body').addClass(`geoip-${key}-${value}`);
} else {
$('body').addClass(`geoip-${key}`);
}
}
}
}
if (options.do_body_classes) {
add_body_classes();
}
// Extend window object
window.geoip_detect.get_info = get_info;