// Helper function for base64 encoding (works in both browser and Node.js) const btoa = typeof window !== 'undefined' ? btoa : (str) => Buffer.from(str).toString('base64'); export const builderData = { "data-field-type" : { type:"ATTRIBUTE", description:`Determina que el elemento es editable desde el Builder para los clientes. Se puede añadir un elemento multi que da la posibilidad de añadir distintos bloques a los clientes. Dentro de cada multi se podrán poner campos de edición

Nota : Los componentes de estos ejemplos pueden variar dependiendo del analizador léxico utilizado.`, example : `
Elemento editable
Elemento editable
Elemento editable
Elemento editable
Elemento editable
Elemento editable
{{record.name}}
{{contenido.name}}
Si se desea que sea multi añadir el atributo data-list-multi
`, shortcode : ``, directLinks : { TextField : `

Elemento editable

`, HeadField : `

Elemento editable

`, 'List (Options)' : `
`, 'List (Table)' : `
{{record.name}}
`, Link : `Elemento editable`, TextBox : `
Elemento editable
`, Wysiwyg : `
Elemento editable
`, Upload : `
`, UploadBackground : `
Elemento editable
`, UploadMulti : `
`, Multi : ``, }, shortcuts: { 'C-Form' : ` `, Hook: ``, Dump: `
{{dump(thisrecord)}}
`, TextoGeneral: `{{'' | translate}}` }, replace : (el,prefixVar) => { // ACAI ANALYZER let attr = el.getAttribute("data-field-type"); if (!attr) return el.outerHTML; el.removeAttribute("data-field-type"); let label = el.getAttribute("data-field-label"); if (!label) { label = "Untitled " + new Date().getTime(); }else{ el.removeAttribute("data-field-label"); } let width = el.getAttribute("data-field-width"); if (!width){ width = 1600; }else{ el.removeAttribute("data-field-width"); } let infos = []; for (let i=1;i<5;i++){ var info = el.getAttribute("data-field-info"+i); if (info){ infos.push(info); el.removeAttribute("data-field-info"+i); } } const field = prefixVar ? `${prefixVar}["${appParser.cleanString(label)}"]` : `$${appParser.cleanString(label)}`; const field_anchor = prefixVar ? `${prefixVar}["${appParser.cleanString(label)}_anchor"]` : `$${appParser.cleanString(label)}_anchor`; const field_tag = prefixVar ? `${prefixVar}["${appParser.cleanString(label)}_tag"]` : `$${appParser.cleanString(label)}_tag`; let rand = el.getAttribute("data-field-rand"); if (!rand){ rand = ``; }else{ rand = ``; } switch(attr){ case "multiv2": let php1 = '|*' + btoa(` $record){ ?>`) + '*|'; let php2 = '|*' + btoa(``) + '*|'; let string = `${php1}${appParser.parseComponents(el.outerHTML,`$record`)}${php2}`; el.outerHTML = string; break; case "link": if (el.tagName!='A'){ let php1 = '|*' + btoa(``) + '*|'; let php2 = '|*' + btoa(``) + '*|'; el.innerHTML = el.hasChildNodes() && Array.from(el.childNodes).filter(node => node.nodeType !== 3).length ? `${appParser.parseComponents(el.innerHTML,prefixVar)}` : `${php2}`; }else{ el.setAttribute('href','|*' + btoa(``) + '*|'); el.innerHTML = el.hasChildNodes() && Array.from(el.childNodes).filter(node => node.nodeType !== 3).length ? appParser.parseComponents(el.innerHTML,prefixVar) : '|*' + btoa(``) + '*|'; } break; case "uploadMulti": let php1up = '|*' + btoa(`${rand} $uploadMulti){ ?>`) + '*|'; let php2up = '|*' + btoa(``) + '*|'; let resultVariables = appParser.parseVariables2(el.outerHTML); let preStringVars = resultVariables[0]; let stringVars = resultVariables[1]; let stringup = `${php1up}${preStringVars}${stringVars}${php2up}`; el.outerHTML = stringup; break; case "list": const isTable = el.hasAttribute("data-list-table"); const tableSelect = el.getAttribute("data-list-table"); const valueSelect = el.getAttribute("data-list-value"); const labelSelect = el.getAttribute("data-list-label"); const querySelect = el.getAttribute("data-list-query"); el.removeAttribute("data-list-table"); el.removeAttribute("data-list-options"); el.removeAttribute("data-list-value"); el.removeAttribute("data-list-label"); el.removeAttribute("data-list-multi"); el.removeAttribute("data-list-query"); let php1li = '|*' + btoa(` $record){ ?>`) + '*|'; if (isTable) php1li += '|*' + btoa(``) + '*|'; let php2li = '|*' + btoa(``) + '*|'; let stringli = `${php1li}${appParser.parseComponents(el.outerHTML,`$record`)}${php2li}`; el.outerHTML = stringli; break; case "upload": if (el.hasAttribute("src")){ el.setAttribute('src','|*' + btoa(`${rand}`) + '*|'); }else{ // let classString = el.getAttribute("class"); // let styleString = el.getAttribute("style"); // let altString = el.getAttribute("alt"); var srcAttr = "src"; var output = ""; const attrs = el.attributes; for(var i = attrs.length - 1; i >= 0; i--) { if (attrs[i].name.toLowerCase() == "src") continue; if (attrs[i].name.toLowerCase() == "data-lazy") { srcAttr="data-src"; continue;} output += `${attrs[i].name}="${attrs[i].value}" `; } console.log({output:output}); let php = '|*' + btoa(`${rand}`) + '*|'; el.outerHTML = ``; } break; case "uploadBackground": let php3 = '|*' + btoa(`${rand}`) + '*|'; el.setAttribute('style',`background-image:url('${php3}')`); break; case "headfield": let outputh = ""; const attrs = el.attributes; for(var i = attrs.length - 1; i >= 0; i--) { outputh += `${attrs[i].name}="${attrs[i].value}" `; } let phph1 = '|*' + btoa(``) + '*|'; let phph2 = '|*' + btoa(`'; ?>`) + '*|'; let phph3 = '|*' + btoa(`'; ?>`) + '*|'; el.outerHTML = `${phph2} ${phph1} ${phph3}`; break; default: //el.classList.add(`wed_${field.replace(/\$/g,"")}:${attr}`); el.innerHTML = '|*' + btoa(``) + '*|'; } return el; }, replace2 : (el,prefixVar) => { // TWIG ANALYZER let attr = el.getAttribute("data-field-type"); if (!attr) return el.outerHTML; el.removeAttribute("data-field-type"); let label = el.getAttribute("data-field-label"); if (!label) { label = "Untitled " + new Date().getTime(); }else{ el.removeAttribute("data-field-label"); } let width = el.getAttribute("data-field-width"); if (!width){ width = 1600; }else{ el.removeAttribute("data-field-width"); } let infos = []; for (let i=1;i<5;i++){ var info = el.getAttribute("data-field-info"+i); if (info){ infos.push(info); el.removeAttribute("data-field-info"+i); } } const field = prefixVar ? `${prefixVar}.${appParser.cleanString(label)}` : `${appParser.cleanString(label)}`; const field_anchor = prefixVar ? `${prefixVar}.${appParser.cleanString(label)}_anchor` : `${appParser.cleanString(label)}_anchor`; const field_tag = prefixVar ? `${prefixVar}.${appParser.cleanString(label)}_tag` : `${appParser.cleanString(label)}_tag`; let rand = el.getAttribute("data-field-rand"); if (!rand){ rand = ``; }else{ rand = `{% ${field} = ${field} | shuffle %}\n`; } switch(attr){ case "multiv2": let php1 = `\n{% for record in ${field} %} {% set index = loop.index0 %}\n`; let php2 = `\n{% endfor %}\n`; let string = `${php1}${appParser.parseComponents(el.outerHTML,`record`,2)}${php2}`; el.outerHTML = string; break; case "link": if (el.tagName!='A'){ let php1 = `{{ ${field} }}`; let php2 = `{{ ${field_anchor} }}`; el.innerHTML = el.hasChildNodes() && Array.from(el.childNodes).filter(node => node.nodeType !== 3).length ? `${appParser.parseComponents(el.innerHTML,prefixVar)}` : `${php2}`; }else{ el.setAttribute('href',`{{ ${field} }}`); el.innerHTML = el.hasChildNodes() && Array.from(el.childNodes).filter(node => node.nodeType !== 3).length ? appParser.parseComponents(el.innerHTML,prefixVar) : `{{ ${field_anchor} }}`; } break; case "uploadMulti": let php1up = `\n ${rand} \n {% for uploadMulti in ${field} %} \n {% set index = loop.index0 %} \n`; let php2up = `\n {% endfor %} \n `; let stringup = `${php1up}${el.outerHTML}${php2up}`; el.outerHTML = stringup; break; case "list": const isTable = el.hasAttribute("data-list-table"); const tableSelect = el.getAttribute("data-list-table"); const valueSelect = el.getAttribute("data-list-value"); const labelSelect = el.getAttribute("data-list-label"); const querySelect = el.getAttribute("data-list-query"); el.removeAttribute("data-list-table"); el.removeAttribute("data-list-options"); el.removeAttribute("data-list-value"); el.removeAttribute("data-list-label"); el.removeAttribute("data-list-multi"); el.removeAttribute("data-list-query"); let php1li = `\n {% set list_values = ${field} | trim | split("\t") %} \n `; php1li += `\n {% if record %} \n {% set auxRecord = record %} \n {% endif %} \n `; php1li += `\n {% for record in list_values %} \n {% set index = loop.index0 %} \n `; if (isTable) { php1li += `\n {% if '${tableSelect}' | loadSchema %} \n {% set record = '${tableSelect}' | get([{'column':'${valueSelect}','operator':'=','value':record}]) %} \n {% set record = record.0 %} \n {% else %} \n {% set record = 'cms_${tableSelect}' | get([{'column':'${valueSelect}','operator':'=','value':record}],'num desc',1,{'ignoreSchema':true}) %} {% set record = record.0 %} {% endif %} `; } php2li = `\n {% endfor %}\n {% if auxRecord %} {% set record = auxRecord %} {% endif %} `; /*let php1li = '|*' + btoa(` $record){ ?>`) + '*|'; if (isTable) php1li += '|*' + btoa(``) + '*|'; let php2li = '|*' + btoa(``) + '*|';*/ let stringli = `${php1li}${appParser.parseComponents(el.outerHTML,`record`,2)}${php2li}`; el.outerHTML = stringli; break; case "upload": if (el.hasAttribute("src")){ el.setAttribute('src',`${rand}{{ ${field}.0.urlPath | imagec(${width}) }}`); }else{ // let classString = el.getAttribute("class"); // let styleString = el.getAttribute("style"); // let altString = el.getAttribute("alt"); var srcAttr = "src"; var output = ""; const attrs = el.attributes; for(var i = attrs.length - 1; i >= 0; i--) { if (attrs[i].name.toLowerCase() == "src") continue; if (attrs[i].name.toLowerCase() == "data-lazy") { srcAttr="data-src"; continue;} output += `${attrs[i].name}="${attrs[i].value}" `; } console.log({output:output}); let php = `${rand}{{ ${field}.0.urlPath | imagec(${width}) }}`; el.outerHTML = ``; } break; case "uploadBackground": let php3 = `${rand}{{ ${field}.0.urlPath | imagec(${width}) }}`; el.setAttribute('style',`background-image:url('${php3}')`); break; case "textbox": //el.classList.add(`wed_${field.replace(/\$/g,"")}:${attr}`); var filter = "nl2br"; var expre = new RegExp("<(\\S*?)[^>]*>.*?|<.*?/>"); el.innerHTML = ` {% if ${field} %} \n {% if ${field} | isHTML %} {{ ${field} | raw }} \n {% else %} {{ ${field} | nl2br }} \n {% endif %} {% else %} \n {{ "${el.innerHTML.replace(/\x22/g, '\\\x22')}" | nl2br }} \n {% endif %} `; break; case "headfield": let outputh = ""; const attrs = el.attributes; for(var i = attrs.length - 1; i >= 0; i--) { outputh += `${attrs[i].name}="${attrs[i].value}" `; } let phph1 = `{{ ${field} }}`; let phph2 = `{{ '<' ~ (${field_tag} ? ${field_tag} : 'P') ~ '${outputh}>' }}`; let phph3 = `{{ '< /' ~ (${field_tag} ? ${field_tag} : 'P') ~ '>' }}`; // ESTA CODIFICADO EN BASE64 PORQUE ACAI LO CONVIERTE A COMENTARIO POR EL ANALIZADOR LEXICO DE ACAI QUE YA NO DEBE DE ESTAR let php4 = ``; let phph4 = ``; if (prefixVar){ // {% set record = record|merge({'nombre_tag':record.nombre_tag ?: 'P'}) %} phph4 = ` {% set ${prefixVar} = ${prefixVar}|merge({'${appParser.cleanString(label)}_tag': ${field_tag} ?: 'P'}) %} {{ ('<' ~ ${field_tag} ~ ' ${outputh}>' ~ (${field} ? ${field} : '${el.innerHTML.replace(/\x22/g, '\\\x22')}') ~ ('PC8=' | base64_decode) ~ ${field_tag} ~ '>') | raw }} `; }else{ phph4 = ` {% set ${field_tag} = ${field_tag} ?: 'P' %} {{ ('<' ~ ${field_tag} ~ ' ${outputh}>' ~ (${field} ? ${field} : '${el.innerHTML.replace(/\x22/g, '\\\x22')}') ~ ('PC8=' | base64_decode) ~ ${field_tag} ~ '>') | raw }} `; } el.outerHTML = `${phph4}`; break; default: //el.classList.add(`wed_${field.replace(/\$/g,"")}:${attr}`); el.innerHTML = ` {% if ${field} %} \n {{ ${field} | raw }} \n {% else %} \n {{ "${el.innerHTML.replace(/\x22/g, '\\\x22')}" | raw }} \n {% endif %} `; } return el; } } };