="ecom-scripts">
window.ecomNormaScripts = window.ecomNormaScripts || (function () {
/* =====================================
PROPIEDADES PRIVADAS
===================================== */
const privateProps = window.ecomNormaScripts?.privateProps || {
//test1: {},
//test2: 0
};
/* =====================================
INICIALIZACIÓN DE PROPERTIES PRIVADAS
===================================== */
(function initPrivateProps() {
/* privateProps.test1 = {
test11: "",
test111: {
test1112: "00,00",
test1113: "€",
test1114: "00",
test1115: "000-00-000",
test1116: "0000",
test1117: "000"
},
test2: ""
};*/
})();
/* =====================================
PROPIEDADES PÚBLICAS
===================================== */
const publicProps = {
funcsEcomGlobalScripts: null,
propsEcomGlobalScripts: null,
isDebug: false
};
/* =====================================
INICIALIZACIÓN DE PROPERTIES PÚBLICAS
===================================== */
(function initPublicProps() {
//publicProps.TEST1 = "";
//publicProps.TEST2 = 0;
})();
/* =====================================
FUNCIONES PÚBLICAS
===================================== */
//En functions declaramos la functions publicas
const functions = {};
functions.init = async function () {
await _initPublicProps();
await _DOMContentLoaded();
};
/* =====================================
FUNCIONES PRIVADAS
===================================== */
const _initPublicProps = async function() {
// Obtener referencias de ecomGlobalScripts
publicProps.funcsEcomGlobalScripts = window.ecomGlobalScripts?.functions || {};
publicProps.propsEcomGlobalScripts = window.ecomGlobalScripts?.properties || {};
// Configurar debug
publicProps.isDebug = (false || publicProps.propsEcomGlobalScripts?.isDebug) ?? false;
// Asegurar que querySelectors existe (crearlo si no existe)
publicProps.propsEcomGlobalScripts.querySelectors ??= {};
// Agregar las propiedades querySelectors
publicProps.propsEcomGlobalScripts.querySelectors.rootSelector = "#ecom-norma-detail-normas-referenced .standards-section";
};
const _DOMContentLoaded = async function () {
//Se llama desde [dxp-ecom-portal/misc/adt/tienda/Detalle producto/ECOM-Global-Scripts.ftl] desde: document.addEventListener("DOMContentLoaded")
if (publicProps.isDebug) console.log("DOMContentLoaded ecom Norma scripts");
window.ecomGlobalScripts?.functions?.pushViewItemEvent?.({
name: "NF EN 62271-201",
id: "FA179347",
category: "Normas AFNOR"
});
};
// ---- Execute Listener DOMContentLoaded ----
document.addEventListener("DOMContentLoaded", async function() {
//Se llama desde [dxp-ecom-portal/misc/adt/tienda/Detalle producto/ECOM-Global-Scripts.ftl] desde: document.addEventListener("DOMContentLoaded")
//await _DOMContentLoaded();
});
/* =====================================
API PÚBLICA
===================================== */
return {
properties: publicProps, // properties public
functions: functions // functions public
};
})();
',
'
//TODO: repasar y quitar lo relacionado con selectores y precio.
/*TODO:
-Se llama a la [async function init()] dentro de aqui [ecomNormaReferencedScript]
desde fragment [dxp-ecom-portal/misc/fragments/Collection Tienda/ECOM-Global_functions/index.js] de la siguiente manera:
if (typeof window.ecomNormaReferencedScript?.init === "function") {
await window.ecomNormaReferencedScript.init();
}
*/
window.ecomNormaReferencedScript = (function ($) {
/* === CONFIG === */
let DEBUG = false;
let ROOT_SELECTOR = null;
function log(...args) {
if (DEBUG) console.log("[ecomNorma]", ...args);
}
/* === FUNCIONES PRIVADAS === */
function _euros(v) {
const n = Number(v) || 0;
return n.toLocaleString("es-ES", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + " €";
}
function _uniq(a) {
return Array.from(new Set(a));
}
function _fill($sel, values, textFn) {
const keep = $sel.val();
$sel.empty();
values.forEach(v => {
$sel.append($("<option>", { value: v, text: textFn ? textFn(v) : v }));
});
if (keep && values.includes(keep)) $sel.val(keep);
else if (values.length) $sel.val(values[0]);
}
function _relabel($sel, textFn) {
$sel.find("option").each(function () {
const v = $(this).attr("value");
$(this).text(textFn ? textFn(v) : v);
});
}
/* === initCarousel — PÚBLICA === */
function initCarousel(force = false) {
const $owl = $(ROOT_SELECTOR + " .standards-container");
// no inicializar si no existe, está oculto o no tiene items
if (!$owl.length || !$owl.hasClass("owl-carousel") || !$owl.is(':visible') || $owl.children().length === 0) {
log("initCarousel abortado: no visible o sin items", $owl);
return;
}
if (force && $owl.hasClass("owl-loaded") && $owl.data("owl.carousel")) {
log("initCarousel Destruyendo Owl Carousel existent:", $owl);
$owl.trigger('destroy.owl.carousel');
// limpiar también owl-hidden para permitir reinicialización
$owl.removeClass('owl-loaded owl-hidden');
// limpiar markup de Owl
$owl.find('.owl-stage-outer').children().unwrap();
}
if ($owl.length && !$owl.hasClass("owl-loaded") && !$owl.data("owl.carousel")) {
$owl.owlCarousel({
nav: true,
navText: [
'<i class="fa-solid fa-chevron-left"></i>',
'<i class="fa-solid fa-chevron-right"></i>'
],
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);
NF EN 15080-8
Extended application of results from fire resistance tests - Part 8 : beams
| Edition date: |
2013-02-09
In Force
|
|---|---|
| Available languages: | English, French |
| Summary: | La présente partie de l'EN 15080 identifie les paramètres et facteurs qui affectent la résistance au feu des poutres et qui doivent être pris en compte si l'on considère l'application étendue des résultats des poutres soumises à un essai conformément à l'EN 1365-3. Elle fournit également la méthodologie à utiliser lors de l'élaboration d'une application étendue, notamment les règles et les méthodes de calcul qui peuvent être appliquées pour établit l'influence résultant d'une variation dans un ou plusieurs paramètres mais aussi pour déterminer le champ de l'application étendue. |
| Keywords: | STRUCTURAL MEMBERS|CONSTRUCTION MATERIALS|BEAMS : SUPPORTS|FIRE RESISTANCE|TEST RESULTS|VARIATION|MECHANICAL PROPERTIES|GEOMETRIC CHARACTERISTICS|DIMENSIONS|POSITION (LOCATION) |
| ICS: | 13.220.50-Fire-resistance of building materials and elements, 91.060.99-Other elements of buildings |
| CTN: | |
|
International Equivalence |
Identic EN 15080-8:2009 |










