Create cmsApiInit.js
This commit is contained in:
126
template/layout_templates/cmsApiInit.js
Normal file
126
template/layout_templates/cmsApiInit.js
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
class CmsApiClass {
|
||||||
|
constructor() {
|
||||||
|
this._traducciones = {};
|
||||||
|
this.loadingTraducciones = false;
|
||||||
|
}
|
||||||
|
hook(hook, data, callback,options = {}) {
|
||||||
|
try {
|
||||||
|
if (!hook) throw new Error("No se ha definido el endpoint del hook");
|
||||||
|
if (typeof data !== 'object' && typeof data !== 'null') throw new Error("Data no es un objeto, es un " + typeof data);
|
||||||
|
if(window.FORCE_BASE_DOMAIN && !hook.startsWith("http")) {
|
||||||
|
hook = window.FORCE_BASE_DOMAIN + hook;
|
||||||
|
}
|
||||||
|
return fetch(hook, {
|
||||||
|
method: 'post',
|
||||||
|
headers: new Headers({'X-Hooks-Token': hooksToken,'Content-Type': 'application/json', 'X-Acai-Accept-Language': language ? language : 'www'}),
|
||||||
|
body: JSON.stringify(data ? data : {}),
|
||||||
|
signal:options.signal
|
||||||
|
}).then(function (res) {
|
||||||
|
return res.json()
|
||||||
|
}).then(function (resJson) {
|
||||||
|
return typeof callback == 'function' ? callback(resJson) : resJson
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
Promise.resolve(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getSignal(signalName) {
|
||||||
|
if(!this.signals[signalName] || (this.signals[signalName].signal.aborted)) {
|
||||||
|
const controller = new AbortController();
|
||||||
|
this.signals[signalName] = controller;
|
||||||
|
}
|
||||||
|
return this.signals[signalName];
|
||||||
|
}
|
||||||
|
t_var(text) {
|
||||||
|
let slug = CmsApi.slugify(text);
|
||||||
|
if(this._traducciones[slug]) {
|
||||||
|
return this._traducciones[slug];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lo creamos con el texto pasado para evitar múltiples llamadas.
|
||||||
|
this._traducciones[slug] = text;
|
||||||
|
if (this.loadingTraducciones) return this._traducciones[slug];
|
||||||
|
|
||||||
|
this.loadingTraducciones = true;
|
||||||
|
// Enviamos a crear la traducción
|
||||||
|
var signal = this.getSignal('traducciones');
|
||||||
|
let callback = (response) => {
|
||||||
|
this.loadingTraducciones = false;
|
||||||
|
if(response['success'] == true) {
|
||||||
|
this._traducciones = response['data'];
|
||||||
|
console.log("Traducciones cargadas");
|
||||||
|
} else {
|
||||||
|
console.error('Problema al crear textos generales: ', response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
|
||||||
|
var datatoSendToHook = { clave: slug, valor: text};
|
||||||
|
if (window.REMOTE_URL) datatoSendToHook.remote = window.REMOTE_URL;
|
||||||
|
|
||||||
|
this.hook('/hooks/traducciones/', datatoSendToHook,
|
||||||
|
callback,
|
||||||
|
{
|
||||||
|
// signal:signal
|
||||||
|
});
|
||||||
|
} catch {
|
||||||
|
console.error('Problema al crear textos generales: ', text);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._traducciones[slug];
|
||||||
|
}
|
||||||
|
translate(text) {
|
||||||
|
let slug = CmsApi.slugify(text);
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if(this._traducciones[slug]) {
|
||||||
|
return resolve(this._traducciones[slug]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lo creamos con el texto pasado para evitar múltiples llamadas.
|
||||||
|
this._traducciones[slug] = text;
|
||||||
|
if (this.loadingTraducciones) return this._traducciones[slug];
|
||||||
|
|
||||||
|
this.loadingTraducciones = true;
|
||||||
|
// Enviamos a crear la traducción
|
||||||
|
var signal = this.getSignal('traducciones');
|
||||||
|
try {
|
||||||
|
|
||||||
|
var datatoSendToHook = { clave: slug, valor: text};
|
||||||
|
if (window.REMOTE_URL) datatoSendToHook.remote = window.REMOTE_URL;
|
||||||
|
|
||||||
|
return this.hook('/hooks/traducciones/', datatoSendToHook,
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
// signal:signal
|
||||||
|
}).then((response) => {
|
||||||
|
return resolve(this._traducciones[slug]);
|
||||||
|
});
|
||||||
|
} catch {
|
||||||
|
console.error('Problema al crear textos generales: ', text);
|
||||||
|
}
|
||||||
|
return resolve(this._traducciones[slug]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
slugify(string) {
|
||||||
|
// str.normalize("NFD").replace(/[\u0300-\u036f]/g, "")
|
||||||
|
// https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript
|
||||||
|
const a = 'àáäâãåăæąçćčđďèéěėëêęğǵḧìíïîįłḿǹńňñòóöôœøṕŕřßşśšșťțùúüûǘůűūųẃẍÿýźžż·/_,:;'
|
||||||
|
const b = 'aaaaaaaaacccddeeeeeeegghiiiiilmnnnnooooooprrsssssttuuuuuuuuuwxyyzzz______'
|
||||||
|
const p = new RegExp(a.split('').join('|'), 'g')
|
||||||
|
|
||||||
|
return string.toString().toLowerCase()
|
||||||
|
.replace(/\s+/g, '_') // Replace spaces with -
|
||||||
|
.replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters
|
||||||
|
.replace(/&/g, '_and_') // Replace & with 'and'
|
||||||
|
.replace(/[^\w\-]+/g, '') // Remove all non-word characters
|
||||||
|
.replace(/\_\_+/g, '_') // Replace multiple - with single -
|
||||||
|
.replace(/^_+/, '') // Trim - from start of text
|
||||||
|
.replace(/_+$/, '') // Trim - from end of text
|
||||||
|
.toUpperCase()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var CmsApi = new CmsApiClass();
|
||||||
|
CmsApi.signals = {};
|
||||||
|
//if(language !== 'www') window.addEventListener("load", () => { CmsApi.t_var('');});
|
||||||
Reference in New Issue
Block a user