(function (){
'use strict';
if(document.body&&document.body.classList.contains('wp-admin')) return;
const raf=window.requestAnimationFrame.bind(window);
const CATEGORY_PREFIX='category-';
const SEL_CAT_BLOCKS='.gusta-post-taxonomies, .gusta-post-categories';
const SEL_CAT_LOOSE='.gusta-post-meta span:not(.ss-element-item), .entry-header .cat-links a';
const SEL_ZONES='.vc_gitem-zone';
const SEL_VC_CATS_WRAP='.vc_gitem-post-data-source-post_categories';
const SEL_VC_CATS_ITEM='.vc_grid-filter-item';
const SEL_VC_CATS_SPAN='span.vc_gitem-post-category-name';
const REV_MODULE_SEL='sr7-module';
const REV_LAYER_SEL='sr7-txt.sr7-layer';
const qsAll=(scope, sel)=> {
if(!scope||!sel) return [];
if(scope.matches&&scope.matches(sel)) return [scope];
return scope.querySelectorAll(sel);
};
const toKey=t => (t||'').trim().toLowerCase();
const SKIP_KEYS=new Set(['articoli', 'fci']);
const categoryRuleMap=new Map(
[
['articoli',       '#4d4d4d'], ['fuoristrada',   '#009344'],
['trial',          '#009344'], ['gravel',         '#009344'],
['strada',         '#968875'], ['pista',          '#D91B5B'],
['maglia azzurra', '#1a8ad8'], ['mtb/trials',     '#009344'],
['bmx',            '#009344'], ['ciclocross',     '#009344'],
['mountainbike',   '#009344'], ['paralimpico',    '#ED1C24'],
['paraciclismo',   '#ED1C24'], ['federazione',    '#007cc7'],
['sports',         '#4d4d4d'], ['ciclismo indoor','#7655be'],
['giovanile',      '#27a9e1'], ['amatoriale',     '#fbaf3f'],
['fci',            '#007cc7']
].map(([key, color])=> ([
key,
{ key, color, className: `${CATEGORY_PREFIX}${key.replace(/\s+/g, '-')}` }
]))
);
const getCategoryRuleByText=text=> categoryRuleMap.get(toKey(text));
let _styleInjected=false;
function injectCategoryStyles(activeThemeConfig){
if(_styleInjected) return;
let styleEl=document.getElementById('custom-categories-style');
if(!styleEl){
styleEl=document.createElement('style');
styleEl.id='custom-categories-style';
document.head.appendChild(styleEl);
}
let css='';
categoryRuleMap.forEach(rule=> { css +=`.${rule.className}{color:${rule.color}!important}\n`; });
if(activeThemeConfig){
css +=`.${activeThemeConfig.themeClass}{background-color:${activeThemeConfig.color}!important}\n`;
css +=`.${activeThemeConfig.textClass}{color:${activeThemeConfig.color}!important}\n`;
}
styleEl.textContent=css;
_styleInjected=true;
}
const idColorMap={
pista:        { color: '#d91a5b', themeClass: 'pista-theme',        textClass: 'pista-text'        },
strada:       { color: '#978775', themeClass: 'strada-theme',       textClass: 'strada-text'       },
fuoristrada:  { color: '#019345', themeClass: 'fuoristrada-theme',  textClass: 'fuoristrada-text'  },
amatoriale:   { color: '#fbaf3f', themeClass: 'amatoriale-theme',   textClass: 'amatoriale-text'   },
giovanile:    { color: '#27a9e1', themeClass: 'giovanile-theme',    textClass: 'giovanile-text'    },
maglia:       { color: '#1a8ad8', themeClass: 'maglia-theme',       textClass: 'maglia-text'       },
paraciclismo: { color: '#ed1d24', themeClass: 'paraciclismo-theme', textClass: 'paraciclismo-text' }};
function setCategoryClass(el, rule){
if(!rule||!el||!el.classList) return;
const prev=el.dataset.catClass;
if(prev===rule.className) return;
if(prev) el.classList.remove(prev);
el.classList.add(rule.className);
el.dataset.catClass=rule.className;
}
function processCategoryBlocks(scope){
qsAll(scope, SEL_CAT_BLOCKS).forEach(block=> {
const items=block.getElementsByClassName('ss-element-item');
if(!items.length) return;
const spans=[];
for (let i=0; i < items.length; i++){
if(!SKIP_KEYS.has(toKey(items[i].textContent))) spans.push(items[i]);
}
if(!spans.length){
block.textContent='';
return;
}
const idxMaglia=spans.findIndex(s=> toKey(s.textContent)==='maglia azzurra');
if(idxMaglia > 0) spans.unshift(spans.splice(idxMaglia, 1)[0]);
const frag=document.createDocumentFragment();
spans.forEach((el, i)=> {
setCategoryClass(el, getCategoryRuleByText(el.textContent));
frag.appendChild(el);
if(i < spans.length - 1) frag.appendChild(document.createTextNode(', '));
});
block.replaceChildren(frag);
});
}
function processVcGridCategories(scope){
qsAll(scope, SEL_VC_CATS_WRAP).forEach(wrap=> {
if(!wrap||wrap.nodeType!==1) return;
const sig=(wrap.textContent||'').trim();
if(wrap.dataset&&wrap.dataset.fciCatsSig===sig) return;
const items=qsAll(wrap, SEL_VC_CATS_ITEM);
if(!items.length){
if(wrap.dataset) wrap.dataset.fciCatsSig=sig;
return;
}
const kept=[];
items.forEach(item=> {
const span=item.querySelector(SEL_VC_CATS_SPAN);
if(!span) return;
if(SKIP_KEYS.has(toKey(span.textContent))) return;
const rule=getCategoryRuleByText(span.textContent);
if(rule) setCategoryClass(span, rule);
kept.push(item);
});
if(!kept.length){
wrap.textContent='';
if(wrap.dataset) wrap.dataset.fciCatsSig=sig;
return;
}
const idxMaglia=kept.findIndex(item=> {
const s=item.querySelector(SEL_VC_CATS_SPAN);
return s&&toKey(s.textContent)==='maglia azzurra';
});
if(idxMaglia > 0) kept.unshift(kept.splice(idxMaglia, 1)[0]);
const frag=document.createDocumentFragment();
kept.forEach((item, i)=> {
frag.appendChild(item);
if(i < kept.length - 1) frag.appendChild(document.createTextNode(', '));
});
wrap.replaceChildren(frag);
if(wrap.dataset) wrap.dataset.fciCatsSig=sig;
});
}
function colorizeLooseCategories(scope){
qsAll(scope, SEL_CAT_LOOSE).forEach(span=> {
const rule=getCategoryRuleByText(span.textContent);
if(rule) setCategoryClass(span, rule);
});
}
const _escMap={ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' };
const escapeHtml=s => (s||'').replace(/[&<>"']/g, m=> _escMap[m]);
function tokenizeCats(text){
if(!text||!text.includes(',')) return null;
return text
.split(/\s*,\s*/)
.map(r=> r.trim())
.filter(r=> r&&toKey(r)!=='articoli')
.map(r=> ({ raw: r, key: toKey(r) }));
}
function processRevLayer(layer){
const sig=(layer.textContent||'').trim();
if(layer.dataset.revSig===sig) return;
const tokens=tokenizeCats(sig);
if(!tokens||!tokens.length){ layer.dataset.revSig=sig; return; }
if(!tokens.some(t=> categoryRuleMap.has(t.key))){ layer.dataset.revSig=sig; return; }
if(tokens.every(t=> categoryRuleMap.has(t.key))){
layer.innerHTML=tokens
.map(t=> `<span class="${categoryRuleMap.get(t.key).className}">${escapeHtml(t.raw)}</span>`)
.join(', ');
}else{
layer.textContent=tokens.map(t=> t.raw).join(', ');
}
layer.dataset.revSig=sig;
}
function processActiveSlide(moduleEl){
const current=moduleEl.getAttribute('data-current');
if(!current) return;
const slide =
moduleEl.querySelector(`sr7-slide[data-key="${CSS.escape(current)}"]`) ||
moduleEl.querySelector(`sr7-slide[data-key="${current}"]`);
if(slide) slide.querySelectorAll(REV_LAYER_SEL).forEach(processRevLayer);
}
function processRevsliderInScope(scope){
qsAll(scope, REV_MODULE_SEL).forEach(processActiveSlide);
}
const FALLBACK_IMG='/wp-content/uploads/2024/09/box-4.jpg';
const PLACEHOLDER='vc_gitem_image.png';
function applyFallbackToZone(zone){
if(!zone||zone.dataset.fciFallbackApplied) return;
zone.dataset.fciFallbackApplied='1';
const styleAttr=zone.getAttribute('style')||'';
if(!styleAttr.includes(PLACEHOLDER)) return;
Object.assign(zone.style, {
backgroundImage:    `url("${FALLBACK_IMG}")`,
backgroundSize:     'contain',
backgroundRepeat:   'no-repeat',
backgroundPosition: 'center'
});
zone.style.setProperty('background-image', `url("${FALLBACK_IMG}")`, 'important');
}
function replaceDefaultImages(scope){
qsAll(scope, SEL_ZONES).forEach(applyFallbackToZone);
}
function getActiveThemeConfig(){
for (const id in idColorMap){
if(document.getElementById(id)) return idColorMap[id];
}
return null;
}
function applyIdBasedThemeClasses(cfg, scope){
if(!cfg) return;
qsAll(scope, '.gusta-post-title')
.forEach(el=> el.classList.add(cfg.textClass));
qsAll(scope, '.vc_tta-tabs-list li a, .vc_btn3, .vc_tta-panel .vc_tta-panel-heading')
.forEach(el=> el.classList.add(cfg.themeClass));
}
function hasAny(node, sel){
return node&&node.nodeType===1&&(node.matches?.(sel)||node.querySelector?.(sel)!==null);
}
function processCategoriesInScope(scope){
processCategoryBlocks(scope);
processVcGridCategories(scope);
colorizeLooseCategories(scope);
}
const SEL_CAT_ANY=`${SEL_CAT_BLOCKS}, ${SEL_VC_CATS_WRAP}, .gusta-post-meta, .entry-header .cat-links`;
const SEL_THEME_ANY='.gusta-post-title, .vc_tta-tabs-list, .vc_btn3, .vc_tta-panel';
function observeDynamicContentChanges(activeCfg){
const queue=new Set();
let scheduled=false;
const flush=()=> {
scheduled=false;
queue.forEach(node=> {
if(hasAny(node, SEL_CAT_ANY))       processCategoriesInScope(node);
if(hasAny(node, SEL_ZONES))          replaceDefaultImages(node);
if(hasAny(node, REV_MODULE_SEL))     processRevsliderInScope(node);
if(activeCfg&&hasAny(node, SEL_THEME_ANY)) applyIdBasedThemeClasses(activeCfg, node);
});
queue.clear();
};
const scheduleFlush=()=> {
if(!scheduled){ scheduled=true; raf(flush); }};
const observer=new MutationObserver(muts=> {
for (const m of muts){
if(m.type==='childList'){
m.addedNodes.forEach(n=> {
if(n&&n.nodeType===1) queue.add(n);
});
}else if(m.type==='attributes'){
const t=m.target;
if(!t||t.nodeType!==1) continue;
if(m.attributeName==='style'){
const zone=t.matches?.(SEL_ZONES) ? t:t.closest?.(SEL_ZONES);
if(zone){
delete zone.dataset.fciFallbackApplied;
applyFallbackToZone(zone);
}}
if(m.attributeName==='data-current'){
const mod=t.matches?.(REV_MODULE_SEL) ? t:t.closest?.(REV_MODULE_SEL);
if(mod) queue.add(mod);
}}
}
if(queue.size) scheduleFlush();
});
observer.observe(document.body, {
childList:       true,
subtree:         true,
attributes:      true,
attributeFilter: ['style', 'data-current']
});
}
const fireResize=(()=> {
let cooling=false;
return ()=> {
if(cooling) return;
cooling=true;
window.dispatchEvent(new Event('resize'));
setTimeout(()=> { cooling=false; }, 120);
};})();
document.addEventListener('DOMContentLoaded', ()=> {
const cfg=getActiveThemeConfig();
raf(()=> {
injectCategoryStyles(cfg);
processCategoriesInScope(document);
applyIdBasedThemeClasses(cfg, document);
replaceDefaultImages(document);
processRevsliderInScope(document);
observeDynamicContentChanges(cfg);
if(document.querySelector('.vc_tta-tabs, .vc_images_carousel')){
setTimeout(fireResize, 300);
setTimeout(fireResize, 700);
}
document.addEventListener('click', e=> {
if(e.target.closest?.('.vc_tta-tab a')){
setTimeout(fireResize, 80);
setTimeout(fireResize, 260);
}}, true);
document.body?.classList.add('loaded', 'custom-script-applied');
document.documentElement.classList.remove('loading');
});
});
})();