An unexpected error occurred.
', '' ], loop: false, dots: false, pagination: false, margin: 25, autoHeight: false, responsive: { 0: { items: 1 }, 500: { items: 1 }, 767: { items: 2 }, 1000: { items: 3 }, 1200: { items: 4 } } }); $owl.off("initialized.owl.carousel refreshed.owl.carousel resized.owl.carousel translated.owl.carousel") .on("initialized.owl.carousel refreshed.owl.carousel resized.owl.carousel translated.owl.carousel", adjustHeights); log("initCarousel executed"); } } /* === initCard — PÚBLICA === */ function initCard($card) { const dataNode = $card.find("script.normas-data")[0]; let data = []; if (dataNode) { try { data = JSON.parse(dataNode.textContent); } catch {} } const hasData = Array.isArray(data) && data.length > 0; let langMap = {}; const mapNode = $card.find("script.lang-map")[0]; try { if (mapNode) langMap = JSON.parse(mapNode.textContent); } catch {} const $lang = $card.find(".select-language"); const $fmt = $card.find(".select-format"); const $price = $card.find(".price-ae"); const toUC = s => (s || "").toString().toUpperCase(); const labelOf = lang => langMap[toUC(lang)] || lang; const formatsFor = lang => _uniq(data.filter(d => d.language === lang).map(d => d.format)); const languagesFor = fmt => _uniq(data.filter(d => d.format === fmt).map(d => d.language)); const priceOf = (lang, fmt) => { const m = data.find(d => d.language === lang && d.format === fmt); return m ? Number(m.price) || 0 : 0; }; const parsePriceText = (text) => { if (!text) return 0; const clean = String(text).replace(/[^\d,.-]/g, "").trim(); if (!clean) return 0; if (clean.includes(",") && clean.includes(".")) { const normalized = clean.replace(/\./g, "").replace(",", "."); return Number(normalized) || 0; } const normalized = clean.replace(",", "."); return Number(normalized) || 0; }; if (hasData) { function onLanguageChange() { const lang = $lang.val(); const fmts = formatsFor(lang); _fill($fmt, fmts); $price.text(_euros(priceOf(lang, $fmt.val()))); } function onFormatChange() { const fmt = $fmt.val(); const langs = languagesFor(fmt); _fill($lang, langs, labelOf); $price.text(_euros(priceOf($lang.val(), fmt))); } const l0 = $lang.val(); const f0 = $fmt.val(); if (!data.find(d => d.language === l0 && d.format === f0)) onLanguageChange(); else $price.text(_euros(priceOf(l0, f0))); _relabel($lang, labelOf); $lang.off("change.ae").on("change.ae", onLanguageChange); $fmt.off("change.ae").on("change.ae", onFormatChange); } async function onAdd(e) { e.preventDefault(); var entryType = ($card.data('entrytype') || 'Norma'); var code = ($card.data('code') || '').toString(); var codIdioma = ($card.find('.select-language').val() || '').toString(); var codFormato = ($card.find('.select-format').val() || '').toString(); if (!code) code = ($card.find('.title-standard').text() || '').trim(); await window.ecomGlobalScripts.functions.addToCart({ entryType: entryType, code: code, codIdioma: codIdioma, codFormato: codFormato, price: Number(priceOf(codIdioma, codFormato)) || 0, name: ($card.data('title') || '').toString(), amount: 1 }); } $card.find(".standard-button").off("click.ae").on("click.ae", function(e){ const btn = this; const run = () => onAdd(e); const helper = window.ecomGlobalScripts?.functions?.withButtonSpinner; if (typeof helper === "function") { return helper(btn, run, { spinnerClass: "spinner-border spinner-border-sm text-light", mode: "replace" }); } return run(); }); // Evita que Owl Carousel interprete el click como drag horizontal $card.find(".standard-button") .off("pointerdown.owl mousedown.owl touchstart.owl") .on("pointerdown.owl mousedown.owl touchstart.owl", function(e){ e.stopPropagation(); }); } /* === adjustHeights — PÚBLICA === */ function adjustHeights() { if ($(window).width() > 766.98) { let hT = 0, hD = 0; $(ROOT_SELECTOR + " .title-standard").css("height","auto").each(function(){ hT=Math.max(hT,$(this).outerHeight()); }); $(ROOT_SELECTOR + " .description-text").css("height","auto").each(function(){ hD=Math.max(hD,$(this).outerHeight()); }); $(ROOT_SELECTOR + " .title-standard").height(hT); $(ROOT_SELECTOR + " .description-text").height(hD); } else { $(ROOT_SELECTOR + " .title-standard, .description-text").css("height","auto"); } log("adjustHeights executed"); } /* === init — PÚBLICA === */ async function init() { // debug externo DEBUG = window.ecomNormaScripts?.properties?.isDebug === true; // prefijo para todos los selectores ROOT_SELECTOR = window.ecomGlobalScripts?.properties?.querySelectors?.rootSelector || window.ecomNormaScripts?.properties?.querySelectors?.rootSelector || "#ecom-norma-detail-normas-referenced .standards-section"; log("window.ecomNormaReferencedScript init"); $(ROOT_SELECTOR + " .item-standard").each(function(){ initCard($(this)); }); initCarousel(true); adjustHeights(); $(window).off("resize.standards").on("resize.standards", adjustHeights); log("init executed"); } /* === API pública === */ return { init, initCard, adjustHeights, initCarousel }; })(jQuery);

UNE-ETS 300909 Ed1