/* Artemag Magazine: filtri dell'agenda (ricerca, città, momento, mostre concluse) senza ricaricare la pagina. Ogni filtro ha il suo ordine: in programma per data di apertura, aperte dalla più recente, in chiusura per data di chiusura. Le righe escono in dissolvenza, l'elenco cambia altezza con calma e le nuove entrano una dopo l'altra. */ document.querySelectorAll('[data-amm-agenda]').forEach(function (box) { var limit = parseInt(box.getAttribute('data-limit'), 10) || 6; var list = box.querySelector('.amm-list'); var rows = Array.prototype.slice.call(box.querySelectorAll('.amm-row')); var empty = box.querySelector('.amm-empty'); var pastBox = box.querySelector('[data-amm-past]'); var calm = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; var turn = 0; function current(attr) { var on = box.querySelector('.amm-chip.is-active[' + attr + ']'); return on ? on.getAttribute(attr) : ''; } var state = { city: current('data-city'), when: current('data-when'), past: !!(pastBox && pastBox.checked), q: '' }; // Ricerca libera: solo nella pagina completa dell'agenda (quella con la casella delle mostre concluse). function norm(s) { return (s || '').toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/\s+/g, ' ').trim(); } rows.forEach(function (r) { var b = r.querySelector('.amm-body'); r.ammText = norm(b ? b.textContent : ''); }); var searchBox = null; if (pastBox) { if (!document.getElementById('amm-search-css')) { var css = document.createElement('style'); css.id = 'amm-search-css'; css.textContent = '.amm-search{flex-basis:100%;position:relative;max-width:460px}' + '.amm-search input{width:100%;box-sizing:border-box;font:400 16px/1.3 var(--amm-sans);color:var(--amm-ink);background:#fff;border:1px solid #c9c2b5;border-radius:999px;padding:10px 16px 10px 42px;-webkit-appearance:none;appearance:none}' + '.amm-search input:focus{outline:none;border-color:var(--amm-ink)}' + '.amm-search::before{content:"";position:absolute;left:16px;top:50%;width:12px;height:12px;margin-top:-9px;border:2px solid #8b8377;border-radius:50%;pointer-events:none}' + '.amm-search::after{content:"";position:absolute;left:29px;top:50%;width:2px;height:7px;margin-top:2px;background:#8b8377;transform:rotate(-45deg);pointer-events:none}'; document.head.appendChild(css); } var wrap = document.createElement('div'); wrap.className = 'amm-search'; wrap.innerHTML = ''; var head = box.querySelector('.amm-agenda__head'); if (head) { head.insertBefore(wrap, head.querySelector('.amm-chips') || pastBox.parentNode); searchBox = wrap.querySelector('input'); try { searchBox.value = new URL(window.location.href).searchParams.get('cerca') || ''; } catch (err) {} state.q = norm(searchBox.value); } } function g(r, k) { return r.getAttribute('data-' + k) || ''; } function has(r, group) { return (' ' + g(r, 'groups') + ' ').indexOf(' ' + group + ' ') > -1; } function cmp(a, b) { return a < b ? -1 : (a > b ? 1 : 0); } function byIndex(a, b) { return parseInt(g(a, 'i'), 10) - parseInt(g(b, 'i'), 10); } function sorter(when) { if (when === 'programma') { return function (a, b) { return cmp(g(a, 'start'), g(b, 'start')) || byIndex(a, b); }; } if (when === 'aperte') { return function (a, b) { return cmp(g(b, 'start'), g(a, 'start')) || byIndex(a, b); }; } if (when === 'chiusura') { return function (a, b) { return cmp(g(a, 'end'), g(b, 'end')) || byIndex(a, b); }; } return byIndex; } function apply() { var ok = rows.filter(function (r) { if (state.q && r.ammText.indexOf(state.q) < 0) { return false; } if (state.city && g(r, 'city') !== state.city) { return false; } if (has(r, 'conclusa')) { return state.past && !state.when; } return !state.when || has(r, state.when); }); ok.sort(sorter(state.when)); var rest = rows.filter(function (r) { return ok.indexOf(r) < 0; }); var visible = []; ok.concat(rest).forEach(function (r, i) { var show = ok.indexOf(r) > -1 && i < limit; r.hidden = !show; r.classList.remove('is-in'); r.style.animationDelay = ''; if (show) { visible.push(r); } list.appendChild(r); }); if (empty) { empty.hidden = visible.length > 0; } return visible; } function run() { if (calm || !list) { apply(); return; } var mine = ++turn; var from = list.offsetHeight; list.style.height = from + 'px'; list.classList.add('is-leaving'); setTimeout(function () { if (mine !== turn) { return; } var visible = apply(); list.style.height = 'auto'; var to = list.offsetHeight; list.style.height = from + 'px'; void list.offsetHeight; list.classList.remove('is-leaving'); list.style.height = to + 'px'; visible.forEach(function (r, i) { r.style.animationDelay = (i * 45) + 'ms'; r.classList.add('is-in'); }); setTimeout(function () { if (mine === turn) { list.style.height = ''; } }, 450); }, 200); } function remember(key, value) { try { var u = new URL(window.location.href); if (value) { u.searchParams.set(key, value); } else { u.searchParams.delete(key); } history.replaceState(null, '', u.toString()); } catch (err) {} } box.querySelectorAll('.amm-chip').forEach(function (chip) { chip.addEventListener('click', function (e) { e.preventDefault(); if (chip.classList.contains('is-active')) { return; } var attr = chip.hasAttribute('data-when') ? 'data-when' : 'data-city'; box.querySelectorAll('.amm-chip[' + attr + ']').forEach(function (c) { var on = c === chip; c.classList.toggle('is-active', on); c.setAttribute('aria-pressed', on ? 'true' : 'false'); }); if (attr === 'data-when') { state.when = chip.getAttribute(attr); remember('stato', state.when); } else { state.city = chip.getAttribute(attr); remember('citta', state.city); } run(); }); }); if (pastBox) { pastBox.addEventListener('change', function () { state.past = pastBox.checked; remember('concluse', state.past ? '1' : ''); // Le città con sole mostre concluse compaiono solo con la casella attiva. box.querySelectorAll('[data-past-only]').forEach(function (c) { c.hidden = !state.past; }); var on = box.querySelector('.amm-chip.is-active[data-city]'); if (on && on.hidden) { on.classList.remove('is-active'); on.setAttribute('aria-pressed', 'false'); var all = box.querySelector('.amm-chip[data-city=""]'); if (all) { all.classList.add('is-active'); all.setAttribute('aria-pressed', 'true'); } state.city = ''; remember('citta', ''); } run(); }); } if (searchBox) { var wait = null; searchBox.addEventListener('input', function () { clearTimeout(wait); wait = setTimeout(function () { var q = norm(searchBox.value); if (q === state.q) { return; } state.q = q; remember('cerca', searchBox.value.trim()); run(); }, 250); }); } // Ordine giusto anche quando la pagina si apre con un filtro o una ricerca già scelti. if (state.when || state.q) { apply(); } }); /* Artemag Magazine: striscia rossa che scorre. Duplica le voci per un giro senza stacchi. */ document.querySelectorAll('.amm-ticker').forEach(function (t) { if (t.getAttribute('data-amm-marquee')) { return; } var items = Array.prototype.slice.call(t.children); if (!items.length) { return; } t.setAttribute('data-amm-marquee', '1'); var track = document.createElement('span'); track.className = 'amm-ticker__track'; items.forEach(function (i) { track.appendChild(i); }); var copy = track.cloneNode(true); copy.setAttribute('aria-hidden', 'true'); copy.querySelectorAll('a').forEach(function (a) { a.setAttribute('tabindex', '-1'); }); t.appendChild(track); t.appendChild(copy); t.classList.add('is-marquee'); // Circa 60 px al secondo, qualunque sia la lunghezza dei titoli. t.style.setProperty('--amm-marquee-duration', Math.max(20, Math.round(track.scrollWidth / 60)) + 's'); }); Arte Magazine - Il quotidiano di Arte e Cultura - Page 330

Mercoledì 28 Ottobre 2026

Spazio pubblicitario240 × 150

Il quotidiano di arte e cultura

Spazio pubblicitario240 × 150
Spazio pubblicitario970 × 120

[am_agenda limit=”6″ columns=”2″]

Spazio pubblicitario970 × 250