{"id":62391,"date":"2026-04-28T10:02:59","date_gmt":"2026-04-28T10:02:59","guid":{"rendered":"https:\/\/azud.com\/documentation-azud\/"},"modified":"2026-05-13T13:13:44","modified_gmt":"2026-05-13T13:13:44","slug":"documentation-azud","status":"publish","type":"page","link":"https:\/\/azud.com\/en\/documentation-azud\/","title":{"rendered":"Documentation &#8211; AZUD"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"62391\" class=\"elementor elementor-62391 elementor-56418\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-001f207 e-flex e-con-boxed e-con e-parent\" data-id=\"001f207\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[],&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-521c719 e-con-full e-flex e-con e-child\" data-id=\"521c719\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-38cd5c1 elementor-widget elementor-widget-html\" data-id=\"38cd5c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"selector-idioma\"><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-229d537 e-con-full e-flex e-con e-child\" data-id=\"229d537\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[],&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f1fcecc elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"f1fcecc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"producto-titulo\"><\/div>\r\n<div id=\"producto-imagen\"><\/div>\r\n<div id=\"descargas\"><\/div>\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n\r\n    const params = new URLSearchParams(window.location.search);\r\n\r\n    let productId = params.get(\"id\") || 1742;\r\n    let selectedLang = params.get(\"lang\");\r\n\r\n    const selectorContainer = document.getElementById(\"selector-idioma\");\r\n    const imagenContainer = document.getElementById(\"producto-imagen\");\r\n    const descargasContainer = document.getElementById(\"descargas\");\r\n    const tituloContainer = document.getElementById(\"producto-titulo\");\r\n\r\n    if (!selectorContainer || !imagenContainer || !descargasContainer) {\r\n        console.error(\"Faltan contenedores: selector-idioma, producto-imagen o descargas\");\r\n        return;\r\n    }\r\n\r\n    const selectorSection = selectorContainer.closest(\".e-con\");\r\n    const selectorWidget = selectorContainer.closest(\".elementor-widget-html\");\r\n\r\n    const imagenSection = imagenContainer.closest(\".e-con\");\r\n    const imagenWidget = imagenContainer.closest(\".elementor-widget-html\");\r\n\r\n    const descargasSection = descargasContainer.closest(\".e-con\");\r\n    const descargasWidget = descargasContainer.closest(\".elementor-widget-html\");\r\n\r\n    if (selectorSection) selectorSection.classList.add(\"azud-selector-section\");\r\n    if (selectorWidget) selectorWidget.classList.add(\"azud-selector-widget\");\r\n\r\n    if (imagenSection) imagenSection.classList.add(\"azud-imagen-section\");\r\n    if (imagenWidget) imagenWidget.classList.add(\"azud-imagen-widget\");\r\n\r\n    if (descargasSection) descargasSection.classList.add(\"azud-descargas-section\");\r\n    if (descargasWidget) descargasWidget.classList.add(\"azud-descargas-widget\");\r\n\r\n    fetch(`\/wp-json\/playroom\/v1\/descargas?id=${encodeURIComponent(productId)}`)\r\n        .then(res => res.json())\r\n        .then(data => {\r\n\r\n            \/*\r\n             * Si el producto no existe, la API falla,\r\n             * no devuelve datos o no tiene idiomas,\r\n             * redirigimos al home.\r\n             *\/\r\n            if (\r\n                !data ||\r\n                !data.success ||\r\n                !data.data ||\r\n                !data.data.length ||\r\n                !data.idiomas ||\r\n                !data.idiomas.length\r\n            ) {\r\n                window.location.href = window.location.origin;\r\n                return;\r\n            }\r\n\r\n            if (tituloContainer && data.product_title) {\r\n                tituloContainer.innerHTML = `\r\n                    <div class=\"azud-titulo-header\">\r\n                        <h1 class=\"azud-titulo-nombre\">${data.product_title}<\/h1>\r\n                        <p class=\"azud-titulo-sub\">${data.product_title}<\/p>\r\n                    <\/div>\r\n                `;\r\n            }\r\n\r\n            if (data.image) {\r\n                imagenContainer.innerHTML = `\r\n                    <img decoding=\"async\" src=\"${data.image}\" alt=\"${data.product_title || ''}\">\r\n                `;\r\n            }\r\n\r\n            let html = `\r\n                <div class=\"azud-select-wrapper\">\r\n                    <select id=\"azud-lang-select\">\r\n                        <option value=\"\" disabled ${!selectedLang ? \"selected\" : \"\"}>\r\n                            Select your language\r\n                        <\/option>\r\n            `;\r\n\r\n            data.idiomas.forEach(idioma => {\r\n                const iso = idioma.iso || \"\";\r\n                const selected = selectedLang === iso ? \"selected\" : \"\";\r\n                html += `<option value=\"${iso}\" ${selected}>${iso.toUpperCase()}<\/option>`;\r\n            });\r\n\r\n            html += `\r\n                    <\/select>\r\n                <\/div>\r\n            `;\r\n\r\n            selectorContainer.innerHTML = html;\r\n\r\n            const select = document.getElementById(\"azud-lang-select\");\r\n\r\n            select.addEventListener(\"change\", function () {\r\n                selectedLang = this.value;\r\n\r\n                const url = new URL(window.location.href);\r\n                url.searchParams.set(\"lang\", selectedLang);\r\n                window.history.pushState({}, \"\", url);\r\n\r\n                mostrarResultado();\r\n                pintarDescargas(data, selectedLang);\r\n            });\r\n\r\n            if (selectedLang) {\r\n                mostrarResultado();\r\n                pintarDescargas(data, selectedLang);\r\n            } else {\r\n                mostrarSelector();\r\n            }\r\n        })\r\n        .catch(err => {\r\n            console.error(err);\r\n\r\n            \/*\r\n             * Si hay error cargando el producto,\r\n             * tambi\u00e9n redirigimos al home.\r\n             *\/\r\n            window.location.href = window.location.origin;\r\n        });\r\n\r\n    function mostrarSelector() {\r\n        document.body.classList.remove(\"azud-lang-selected\");\r\n\r\n        if (selectorSection) selectorSection.style.cssText = \"\";\r\n        if (selectorWidget) selectorWidget.style.cssText = \"\";\r\n    }\r\n\r\n    function mostrarResultado() {\r\n        document.body.classList.add(\"azud-lang-selected\");\r\n\r\n        if (selectorSection) {\r\n            selectorSection.style.cssText = \"display: none !important; height: 0 !important; min-height: 0 !important; padding: 0 !important; margin: 0 !important; overflow: hidden !important;\";\r\n        }\r\n\r\n        if (selectorWidget) {\r\n            selectorWidget.style.cssText = \"display: none !important; height: 0 !important; overflow: hidden !important;\";\r\n        }\r\n    }\r\n\r\n    function pintarDescargas(data, idiomaSeleccionado) {\r\n        let html = `\r\n            <div class=\"azud-descargas-inner\">\r\n                <p class=\"azud-doc-title\">${traducirDocumentacionDisponible(idiomaSeleccionado)}<\/p>\r\n                <ul class=\"descargas\">\r\n        `;\r\n\r\n        let total = 0;\r\n\r\n        data.data.forEach(descarga => {\r\n            if (descarga.items && descarga.items.length) {\r\n                descarga.items.forEach(item => {\r\n                    if (!coincideIdioma(item, idiomaSeleccionado)) return;\r\n\r\n                    const itemHtml = pintarItem(item, descarga.titulo);\r\n\r\n                    if (itemHtml) {\r\n                        html += itemHtml;\r\n                        total++;\r\n                    }\r\n                });\r\n            } else {\r\n                if (descarga.idioma && descarga.idioma.iso === idiomaSeleccionado && descarga.url) {\r\n                    html += `\r\n                        <li>\r\n                            <a class=\"file\" href=\"${descarga.url}\" target=\"_blank\">\r\n                                <span class=\"azud-download-icon\">\u2197<\/span>\r\n                                <span class=\"azud-download-text\">\r\n                                    ${limpiarNombre(descarga.nombre || descarga.titulo || \"Descargar\")}\r\n                                <\/span>\r\n                            <\/a>\r\n                        <\/li>\r\n                    `;\r\n                    total++;\r\n                }\r\n            }\r\n        });\r\n\r\n        html += `\r\n                <\/ul>\r\n            <\/div>\r\n        `;\r\n\r\n        descargasContainer.innerHTML = total\r\n            ? html\r\n            : \"<p>No hay descargas disponibles para este idioma.<\/p>\";\r\n    }\r\n\r\n    function coincideIdioma(item, idiomaSeleccionado) {\r\n        if (item.idioma && item.idioma.iso === idiomaSeleccionado) return true;\r\n\r\n        if (item.mostrar_en && item.mostrar_en.length) {\r\n            return item.mostrar_en.some(idioma => idioma.iso === idiomaSeleccionado);\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    function pintarItem(item, tituloFallback) {\r\n        const nombre = limpiarNombre(item.nombre || tituloFallback || \"Descargar\");\r\n\r\n        if (item.archivo) {\r\n            return `\r\n                <li>\r\n                    <a class=\"file\" href=\"${item.archivo}\" target=\"_blank\">\r\n                        <span class=\"azud-download-icon\">\u2197<\/span>\r\n                        <span class=\"azud-download-text\">${nombre}<\/span>\r\n                    <\/a>\r\n                <\/li>\r\n            `;\r\n        }\r\n\r\n        if (item.id_video) {\r\n            return `\r\n                <li class=\"azud-video-item\">\r\n                    <strong>${nombre}<\/strong>\r\n                    <iframe \r\n                        width=\"100%\" \r\n                        height=\"220\" \r\n                        src=\"https:\/\/www.youtube.com\/embed\/${item.id_video}\" \r\n                        frameborder=\"0\" \r\n                        allowfullscreen>\r\n                    <\/iframe>\r\n                <\/li>\r\n            `;\r\n        }\r\n\r\n        if (item.enlace_externo) {\r\n            return `\r\n                <li>\r\n                    <a class=\"link\" href=\"${item.enlace_externo}\" target=\"_blank\">\r\n                        <span class=\"azud-download-icon\">\u2197<\/span>\r\n                        <span class=\"azud-download-text\">${nombre}<\/span>\r\n                    <\/a>\r\n                <\/li>\r\n            `;\r\n        }\r\n\r\n        return \"\";\r\n    }\r\n\r\n    function limpiarNombre(nombre) {\r\n        return String(nombre)\r\n            .replace(\"Privado: \", \"\")\r\n            .replace(\": \", \"\")\r\n            .trim();\r\n    }\r\n\r\n    function traducirDocumentacionDisponible(iso) {\r\n        const textos = {\r\n            es: \"Documentaci\u00f3n disponible\",\r\n            en: \"Available documentation\",\r\n            fr: \"Documentation disponible\",\r\n            pt: \"Documenta\u00e7\u00e3o dispon\u00edvel\",\r\n            it: \"Documentazione disponibile\",\r\n            de: \"Verf\u00fcgbare Dokumentation\"\r\n        };\r\n\r\n        return textos[iso] || textos.en;\r\n    }\r\n\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":8,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-62391","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/azud.com\/en\/wp-json\/wp\/v2\/pages\/62391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/azud.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/azud.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/azud.com\/en\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/azud.com\/en\/wp-json\/wp\/v2\/comments?post=62391"}],"version-history":[{"count":0,"href":"https:\/\/azud.com\/en\/wp-json\/wp\/v2\/pages\/62391\/revisions"}],"wp:attachment":[{"href":"https:\/\/azud.com\/en\/wp-json\/wp\/v2\/media?parent=62391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}