e : fnOpen, aa = close ? site.aaClose : site.aaShow; $item[fnItem](_CLASSNAME_ITEM_IS_OPEN); $item.find(".item-apercu")[fnApercu](aa); $item.find(".item-content")[fnContent](aa); }, /** * Ferme un Item Exposition * @param {jQuery} $item Item Exposition * @param {boolean?} noAa Sans animation JS */ close : ($item, noAa) => { _item.open($item, true, !!noAa); }, /** * Ferme tous les Items Exposition * @param {boolean?} noAa Sans animation JS */ closeAll : (noAa) => { _$liste.find(".item").each(function(index, element) { _item.close($(element), !!noAa); }); } }; // ========================================================================= /** * Traite la position du scroll de la page liste */ var _handleScroll = function() { _handleScrollHeader(); }; // ------------------------------------------------------------------------- /** * Traite HEADER site par rapport au scroll */ var _handleScrollHeader = function() { if (_scrollLocked || site.scrolls.locked) { return; } let scrollTop = $(document).scrollTop(), deltaY = _scrollTop - scrollTop; _scrollTop = scrollTop; site.header.reduced(deltaY < 0); }; /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Events */ // ==== // eb.INIT eb.event('eb.init', () => { _$liste = $expositions.find("#expositions__liste .liste"); }); // ===== // eb.READY eb.event('eb.ready', () => { // ===================================================================== // LISTE // --------------------------------------------------------------------- /** * @event scroll Document */ $(document).on('scroll', event => { if (eb.route.section != 'expositions') { return; } if (eb.route.page == 'liste') { if (_scrollLocked) { event.preventDefault(); return false; } _handleScroll(); } }); // --------------------------------------------------------------------- /** * @event click Entête d'un Item */ $expositions.find("#expositions__liste") .on('click', ".liste .item:not(.no-content) .item-heading", function() { let id = $(this).parent().data('id'); site.expositions.item.toggle(id, true); }); // --------------------------------------------------------------------- /** * @event click sur un des Liens Publication d'un Item */ $expositions.find("#expositions__liste") .on('click', ".liste .item:not(.no-content) .item-content .metas .meta-publication a", function(evt) { evt.preventDefault(); let id = $(this).data('id'), isPresse = !!$(this).data('is-presse'); site.publications.open(id, true, isPresse); return false; }); // ===================================================================== // ZOOM // --------------------------------------------------------------------- /** * @event click Zoom / Bouton "Précédent" */ $expositions.find("#expositions__zoom") .on('click', ".navigation .precedent", function() { site.pageUp.precedentImages(); }); // --------------------------------------------------------------------- /** * @event click Zoom / Bouton "Suivant" */ $expositions.find("#expositions__zoom") .on('click', ".navigation .suivant", function() { site.pageUp.suivantImages(); }); // --------------------------------------------------------------------- /** * @event click Zoom / Photo */ $expositions.find("#expositions__zoom") .on('click', ".images-list .image-item .image img", function() { site.pageUp.suivantImages(); }); // --------------------------------------------------------------------- /** * @event click Zoom / Bouton "Fermer" */ $expositions.find("#expositions__zoom") .on('click', ".fermer", function() { window.history.length > 1 ? window.history.back() : eb.show('expositions'); }); }); /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Fonctions */ return { beforeShow: (route) => { if (route.page == 'zoom') { site.header.reduced(true, true); } }, afterShow: (route) => { if (route.page == 'zoom') { site.pageUp.init(); } }, // --------------------------------------------------------------------- open: (id, scroll) => { if (scroll) { site.scrolls.locked = true; } if (id) { site.expositions.item.open(id, scroll); } if (!(eb.route.section == 'expositions' && eb.route.page == 'liste')) { eb.show('expositions/liste'); } }, // --------------------------------------------------------------------- item: { open: (id, scroll) => { const $item = _item.getById(id); const noContent = $item.hasClass('no-content'); if (noContent) { return; } site.header.reduced(true); site.header.lock(); _item.open($item); if (scroll) { setTimeout(() => { const top = $item.offset().top - $header.height() - 5; eb.scroll(top, site.aa.show, site.header.unlock); }, site.aaShow); } else { site.header.unlock(); } }, close: (id) => { let $item = _item.getById(id); _item.close($item); }, toggle: (id, scroll) => { let $item = _item.getById(id); _item.isOpen($item) ? site.expositions.item.close(id) : site.expositions.item.open(id, !!scroll); }, closeAll: () => { _item.closeAll(); } } }; })(); /** * @name blog / JS * @package jeremy_liron * @author Samuel Diakité (sdiakite@extrafine.fr) * @copyright © 2026 Samuel Diakité */ site.blog = (() => { /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Variables */ /** @var {int} _scrollTop Mémo du scrollTop */ var _scrollTop = 0; /** @var {boolean} _scrollLocked Verrouillage des traitements du scroll */ var _scrollLocked = false; // ========================================================================= /** * Traite la position du scroll de la page liste */ var _handleScroll = function() { _handleScrollHeader(); }; // ------------------------------------------------------------------------- /** * Traite HEADER site par rapport au scroll */ var _handleScrollHeader = function() { if (_scrollLocked || site.scrolls.locked) { return; } let scrollTop = $(document).scrollTop(), deltaY = _scrollTop - scrollTop; _scrollTop = scrollTop; site.header.reduced(deltaY < 0); }; /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Events */ // ===== // eb.READY eb.event('eb.ready', () => { // --------------------------------------------------------------------- /** * @event scroll Document */ $(document).on('scroll', event => { if (eb.route.section != 'blog') { return; } if (_scrollLocked) { event.preventDefault(); return false; } _handleScroll(); }); }); /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Fonctions */ return { beforeShow: (route) => { if (route.page == 'liste') { site.scrolls['blog']['post'] = null; } }, }; })(); /** * @name actualites / JS * @package jeremy_liron * @author Samuel Diakité (sdiakite@extrafine.fr) * @copyright © 2025 Samuel Diakité */ site.actualites = (() => { /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Variables */ /** @var {int} _scrollTop Mémo du scrollTop */ var _scrollTop = 0; /** @var {boolean} _scrollLocked Verrouillage des traitements du scroll */ var _scrollLocked = false; // ========================================================================= var _openerPlusInfos = ($item, close) => { let fnBtn = close ? 'slideDown' : 'slideUp', fnContent = close ? 'slideUp' : 'slideDown'; $item.find(".item-btn-plus_infos")[fnBtn](); $item.find(".item-content-plus_infos")[fnContent](); }; // ------------------------------------------------------------------------- /** * Traite HEADER site par rapport au scroll */ var _handleScroll = function() { if (_scrollLocked) { return; } let scrollTop = $(document).scrollTop(), deltaY = _scrollTop - scrollTop; _scrollTop = scrollTop; site.header.reduced(deltaY < 0); }; /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Events */ // ===== // eb.READY eb.event('eb.ready', () => { // --------------------------------------------------------------------- /** * @event scroll Document */ $(document).on('scroll', event => { if (eb.route.section != 'actualites') { return; } if (eb.route.page == 'liste') { _handleScroll(); } }); // --------------------------------------------------------------------- /** * @event click Bouton Plus d'infos Item Actualite */ $actualites.find("#actualites__liste") .on('click', ".liste .item .item-btn-plus_infos", function() { let $item = $(this).parents(".item"); _openerPlusInfos($item, false); }); // --------------------------------------------------------------------- /** * @event click Contenu Plus d'infos Item Actualite */ $actualites.find("#actualites__liste") .on('click', ".liste .item .item-content-plus_infos", function() { let $item = $(this).parents(".item"); _openerPlusInfos($item, true); }); }); /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Fonctions */ return { beforeShow: (route) => { site.header.reduced(false); }, }; })(); /** * @name apropos / JS * @package jeremy_liron * @author Samuel Diakité (sdiakite@extrafine.fr) * @copyright © 2025 Samuel Diakité */ site.apropos = (() => { /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Variables */ /** @var {int} _HEADING_MARGIN_TOP Marge "top" du Menu Heading de la page (utilisé pour position scroll section) */ const _HEADING_MARGIN_TOP = 160; const _HEADING_MARGIN_TOP_MOBILE = 100; // ------------------------------------------------------------------------- /** @var {jQuery} _$heading */ var _$heading; /** @var {jQuery} _$listing */ var _$listing; // ------------------------------------------------------------------------- /** @var {int} _scrollTop Mémo du scrollTop */ var _scrollTop = 0; /** @var {boolean} _scrollLocked Verrouillage des traitements du scroll */ var _scrollLocked = false; // ========================================================================= /** * Traite la position du scroll de la page liste */ var _handleScroll = function() { _handleScrollHeader(); _handleScrollHeadingSection(); }; // ------------------------------------------------------------------------- /** * Traite HEADER site par rapport au scroll */ var _handleScrollHeader = function() { if (_scrollLocked) { return; } let scrollTop = $(document).scrollTop(), deltaY = _scrollTop - scrollTop; _scrollTop = scrollTop; site.header.reduced(deltaY < 0); }; // ------------------------------------------------------------------------- /** * Gère l'activation de l'item de la section en cours au sein du Menu Heading Page */ var _handleScrollHeadingSection = function() { let scrollTop = $(document).scrollTop(), fn = scrollTop < 10 ? 'addClass' : 'removeClass'; _$heading[fn]("full-black"); let $sections = _$listing.find(".section"), margin = window.innerHeight * .3, current = null;//$sections.eq(0).data('code'); $sections.each((index, element) => { if ($(element).offset().top > scrollTop + margin) { return false; } current = $(element).data('code'); }); _$heading.find(".categorie").removeClass("on"); if (current) { _$heading.find(`[data-code=${current}]`).addClass("on"); } }; /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Events */ // ==== // eb.INIT eb.event('eb.init', () => { _$heading = $apropos.find("#apropos__page .categories"); _$listing = $apropos.find("#apropos__page .sections"); }); // ===== // eb.READY eb.event('eb.ready', () => { // --------------------------------------------------------------------- /** * @event scroll Document */ $(document).on('scroll', event => { if (eb.route.section != 'apropos') { return; } if (eb.route.page == 'page') { _handleScroll(); } }); // --------------------------------------------------------------------- /** * @event click Occurrence du Menu Publications */ $apropos.find("#apropos__page") .on('click', ".categories .categorie", function() { let code = $(this).data('code'); site.apropos.section.goto(code); }); }); /* *** *** * *** ** *** ** * * *** *** * ** *** ** ** *** ** ** * *** *** ** * ** ** **** * *** * *** * *** ** */ /* Fonctions */ return { beforeShow: (route) => { _scrollLocked = true; setTimeout(() => _scrollLocked = false, 800); site.header.reduced(false); }, // --------------------------------------------------------------------- section: { goto: (codeSection) => { let $section = _$listing.find(`.section[data-code=${codeSection}]`); if ($section.lenght < 1) { return false; } _scrollLocked = true; setTimeout(() => _scrollLocked = false, 800); site.header.reduced(true); let margin = eb.isMobile ? _HEADING_MARGIN_TOP_MOBILE : _HEADING_MARGIN_TOP; eb.scroll($section.offset().top - margin); } } }; })();