Files
2026-03-02 20:23:05 +01:00

192 lines
7.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(function () {
var year = document.getElementById('year');
if (year) {
year.textContent = String(new Date().getFullYear());
}
var heroAssetByVariant = {
v1: {
primary: '/assets/da/openai/hero-pcb-routing-map.png',
secondary: '/assets/da/openai/hero-measurement-rig.png',
primaryCaption: 'Routage PCB actif — voie signal, couche signal, décision',
secondaryCaption: 'Banc de mesure — timing, calibration, signal utile'
},
v2: {
primary: '/assets/da/openai/proof-prototype-bench.png',
secondary: '/assets/da/openai/proof-soldering-macro.png',
primaryCaption: 'Prototype prêt à valider — preuve de terrain',
secondaryCaption: 'Contrôle local — soudures, continuité, stabilité'
},
v3: {
primary: '/assets/da/openai/hero-pcb-routing-map.png',
secondary: '/assets/da/openai/oscilloscope-waveform-panel.png',
primaryCaption: 'Routage multi-couches, topologie mesurable',
secondaryCaption: 'Fenêtre waveform — signature de validation'
},
v4: {
primary: '/assets/da/openai/control-rack-detail.png',
secondary: '/assets/da/openai/hero-measurement-rig.png',
primaryCaption: 'Infrastructure labo en situation réelle',
secondaryCaption: 'Mesure instrumentée — rétention et fiabilité'
},
v5: {
primary: '/assets/da/openai/impact-montage-prototype-test-deploy.png',
secondary: '/assets/da/openai/hands-calibrating-board.png',
primaryCaption: 'Montage preuve dimpact — passage bench à scène',
secondaryCaption: 'Main datelier, calibration, ajustements'
},
v6: {
primary: '/assets/da/openai/texture-pcb-seamless-tile.png',
secondary: '/assets/da/openai/overlay-via-glow-particles.png',
primaryCaption: 'Texture technique — signal, route, densité visuelle',
secondaryCaption: 'Particle overlay — détails vias et micro-défauts'
},
v7: {
primary: '/assets/da/openai/proof-prototype-bench.png',
secondary: '/assets/da/openai/control-rack-detail.png',
primaryCaption: 'Cadence production — preuve de bench réelle',
secondaryCaption: 'Pointes de route technique et instrumentation'
},
v8: {
primary: '/assets/da/openai/overlay-blueprint-grid.png',
secondary: '/assets/da/openai/proof-soldering-macro.png',
primaryCaption: 'Fond blueprint — cadre dindustrial design',
secondaryCaption: 'Soudures macro — détail dassemblage'
},
v9: {
primary: '/assets/da/openai/hero-pcb-routing-map.png',
secondary: '/assets/da/openai/hands-calibrating-board.png',
primaryCaption: 'Bus de traces et architecture signal',
secondaryCaption: 'Ajustement terrain — boucle de calibration'
},
v10: {
primary: '/assets/da/openai/hero-measurement-rig.png',
secondary: '/assets/da/openai/oscilloscope-waveform-panel.png',
primaryCaption: 'Mesure visuelle instantanée',
secondaryCaption: 'Courbe et métrique — validation signal'
},
v11: {
primary: '/assets/da/openai/overlay-via-glow-particles.png',
secondary: '/assets/da/openai/hero-pcb-routing-map.png',
primaryCaption: 'Vias glow — lecture micro-électrique',
secondaryCaption: 'Routage principal avec repères visuels'
},
v12: {
primary: '/assets/da/openai/hero-pcb-routing-map.png',
secondary: '/assets/da/openai/proof-prototype-bench.png',
primaryCaption: 'Carnet de labo actuel — traces, vias, direction',
secondaryCaption: 'Test terrain et preuve de résultat'
}
};
var variant = document.documentElement && document.documentElement.getAttribute('data-da-variant');
var heroAssets = heroAssetByVariant[variant] || heroAssetByVariant.v12;
var heroPrimaryFigure = document.querySelector('[data-hero-asset="primary"]');
var heroSecondaryFigure = document.querySelector('[data-hero-asset="secondary"]');
if (heroPrimaryFigure && heroSecondaryFigure) {
var heroPrimaryImage = heroPrimaryFigure.querySelector('[data-hero-image]');
var heroSecondaryImage = heroSecondaryFigure.querySelector('[data-hero-image]');
var heroPrimaryCaption = heroPrimaryFigure.querySelector('figcaption');
var heroSecondaryCaption = heroSecondaryFigure.querySelector('figcaption');
if (heroPrimaryImage) {
heroPrimaryImage.src = heroAssets.primary;
}
if (heroSecondaryImage) {
heroSecondaryImage.src = heroAssets.secondary;
}
if (heroPrimaryCaption) {
heroPrimaryCaption.textContent = heroAssets.primaryCaption || 'Vue planifiée';
}
if (heroSecondaryCaption) {
heroSecondaryCaption.textContent = heroAssets.secondaryCaption || 'Vue labo';
}
}
var revealEls = document.querySelectorAll('[data-reveal]');
if ('IntersectionObserver' in window) {
var io = new IntersectionObserver(
function (entries) {
for (var i = 0; i < entries.length; i += 1) {
if (entries[i].isIntersecting) {
entries[i].target.classList.add('is-visible');
io.unobserve(entries[i].target);
}
}
},
{ threshold: 0.14 }
);
for (var r = 0; r < revealEls.length; r += 1) {
io.observe(revealEls[r]);
}
} else {
for (var f = 0; f < revealEls.length; f += 1) {
revealEls[f].classList.add('is-visible');
}
}
var navLinks = Array.prototype.slice.call(document.querySelectorAll('.site-navlink[href^="#"]'));
var sections = navLinks
.map(function (link) {
var id = link.getAttribute('href').replace('#', '');
var target = document.getElementById(id);
return { link: link, id: id, target: target };
})
.filter(function (item) {
return !!item.target;
});
function updateActiveNav() {
var threshold = window.scrollY + window.innerHeight * 0.32;
var activeId = '';
for (var i = 0; i < sections.length; i += 1) {
if (sections[i].target.offsetTop <= threshold) {
activeId = sections[i].id;
}
}
for (var n = 0; n < sections.length; n += 1) {
var isActive = sections[n].id === activeId;
sections[n].link.classList.toggle('is-active', isActive);
if (isActive) {
sections[n].link.setAttribute('aria-current', 'location');
} else {
sections[n].link.removeAttribute('aria-current');
}
}
}
updateActiveNav();
window.addEventListener('scroll', updateActiveNav, { passive: true });
window.addEventListener('resize', updateActiveNav);
function pushEvent(eventName, destination) {
if (!eventName) {
return;
}
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: eventName,
event_category: 'engagement',
event_label: eventName,
destination: destination || 'unknown'
});
}
var trackEls = document.querySelectorAll('[data-track]');
for (var t = 0; t < trackEls.length; t += 1) {
trackEls[t].addEventListener('click', function () {
var destination = this.getAttribute('data-destination') || this.getAttribute('href') || 'unknown';
var eventName = this.getAttribute('data-track');
var legacyName = this.getAttribute('data-track-legacy');
pushEvent(eventName, destination);
if (legacyName) {
pushEvent(legacyName, destination);
}
});
}
})();