(function (){
'use strict';
if(document.body&&document.body.classList.contains('wp-admin')) return;
const raf=window.requestAnimationFrame
? window.requestAnimationFrame.bind(window)
: cb=> setTimeout(cb, 16);
const ric=window.requestIdleCallback
? cb=> window.requestIdleCallback(cb, { timeout: 300 })
: cb=> setTimeout(cb, 80);
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 SEL_CAT_ANY=[
'.gusta-post-taxonomies',
'.gusta-post-categories',
'.vc_gitem-post-data-source-post_categories',
'.gusta-post-meta',
'.entry-header .cat-links'
].join(',');
const SEL_THEME_ANY=[
'.gusta-post-title',
'.vc_tta-tabs-list',
'.vc_btn3',
'.vc_tta-panel'
].join(',');
const SEL_DYNAMIC_ANY=[
SEL_CAT_ANY,
SEL_ZONES,
REV_MODULE_SEL,
SEL_THEME_ANY
].join(',');
const toKey=text=> (text||'').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 qsa(scope, selector){
if(!scope||!selector) return [];
if(scope.nodeType===1&&scope.matches&&scope.matches(selector)){
return [scope];
}
return scope.querySelectorAll ? scope.querySelectorAll(selector):[];
}
function hasAny(node, selector){
if(!node||node.nodeType!==1) return false;
return node.matches?.(selector)||!!node.querySelector?.(selector);
}
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){
qsa(scope, SEL_CAT_BLOCKS).forEach(block=> {
const currentSig=(block.textContent||'').trim();
if(block.dataset.fciCatBlockSig===currentSig) return;
const items=block.getElementsByClassName('ss-element-item');
if(!items.length){
block.dataset.fciCatBlockSig=currentSig;
return;
}
const kept=[];
for (let i=0; i < items.length; i++){
const item=items[i];
const key=toKey(item.textContent);
if(!SKIP_KEYS.has(key)){
kept.push(item);
}}
if(!kept.length){
block.textContent='';
block.dataset.fciCatBlockSig='';
return;
}
const idxMaglia=kept.findIndex(el=> toKey(el.textContent)==='maglia azzurra');
if(idxMaglia > 0){
kept.unshift(kept.splice(idxMaglia, 1)[0]);
}
const frag=document.createDocumentFragment();
kept.forEach((el, index)=> {
setCategoryClass(el, getCategoryRuleByText(el.textContent));
frag.appendChild(el);
if(index < kept.length - 1){
frag.appendChild(document.createTextNode(', '));
}});
block.replaceChildren(frag);
block.dataset.fciCatBlockSig=(block.textContent||'').trim();
});
}
function processVcGridCategories(scope){
qsa(scope, SEL_VC_CATS_WRAP).forEach(wrap=> {
if(!wrap||wrap.nodeType!==1) return;
const sig=(wrap.textContent||'').trim();
if(wrap.dataset.fciCatsSig===sig) return;
const items=qsa(wrap, SEL_VC_CATS_ITEM);
if(!items.length){
wrap.dataset.fciCatsSig=sig;
return;
}
const kept=[];
items.forEach(item=> {
const span=item.querySelector(SEL_VC_CATS_SPAN);
if(!span) return;
const key=toKey(span.textContent);
if(SKIP_KEYS.has(key)) return;
const rule=categoryRuleMap.get(key);
if(rule) setCategoryClass(span, rule);
kept.push(item);
});
if(!kept.length){
wrap.textContent='';
wrap.dataset.fciCatsSig='';
return;
}
const idxMaglia=kept.findIndex(item=> {
const span=item.querySelector(SEL_VC_CATS_SPAN);
return span&&toKey(span.textContent)==='maglia azzurra';
});
if(idxMaglia > 0){
kept.unshift(kept.splice(idxMaglia, 1)[0]);
}
const frag=document.createDocumentFragment();
kept.forEach((item, index)=> {
frag.appendChild(item);
if(index < kept.length - 1){
frag.appendChild(document.createTextNode(', '));
}});
wrap.replaceChildren(frag);
wrap.dataset.fciCatsSig=(wrap.textContent||'').trim();
});
}
function colorizeLooseCategories(scope){
qsa(scope, SEL_CAT_LOOSE).forEach(el=> {
const rule=getCategoryRuleByText(el.textContent);
if(rule){
setCategoryClass(el, rule);
}});
}
function processCategoriesInScope(scope){
processCategoryBlocks(scope);
processVcGridCategories(scope);
colorizeLooseCategories(scope);
}
const escMap={
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;'
};
const escapeHtml=text=> (text||'').replace(/[&<>"']/g, char=> escMap[char]);
function tokenizeCats(text){
if(!text||!text.includes(',')) return null;
return text
.split(/\s*,\s*/)
.map(item=> item.trim())
.filter(item=> item&&toKey(item)!=='articoli')
.map(raw=> ({
raw,
key: toKey(raw)
}));
}
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(token=> categoryRuleMap.has(token.key))){
layer.dataset.revSig=sig;
return;
}
if(tokens.every(token=> categoryRuleMap.has(token.key))){
layer.innerHTML=tokens
.map(token=> {
const rule=categoryRuleMap.get(token.key);
return `<span class="${rule.className}">${escapeHtml(token.raw)}</span>`;
})
.join(', ');
}else{
layer.textContent=tokens.map(token=> token.raw).join(', ');
}
layer.dataset.revSig=sig;
}
function safeCssEscape(value){
if(window.CSS&&typeof window.CSS.escape==='function'){
return window.CSS.escape(value);
}
return String(value).replace(/["\\]/g, '\\$&');
}
function processActiveSlide(moduleEl){
if(!moduleEl||moduleEl.nodeType!==1) return;
const current=moduleEl.getAttribute('data-current');
if(!current) return;
const escaped=safeCssEscape(current);
const slide =
moduleEl.querySelector(`sr7-slide[data-key="${escaped}"]`) ||
moduleEl.querySelector(`sr7-slide[data-key="${current}"]`);
if(!slide) return;
slide.querySelectorAll(REV_LAYER_SEL).forEach(processRevLayer);
}
const observedRevModules=new WeakSet();
function observeRevModule(moduleEl){
if(!moduleEl||observedRevModules.has(moduleEl)) return;
observedRevModules.add(moduleEl);
processActiveSlide(moduleEl);
const obs=new MutationObserver(mutations=> {
for (const mutation of mutations){
if(mutation.type==='attributes'&&mutation.attributeName==='data-current'){
raf(()=> processActiveSlide(moduleEl));
break;
}}
});
obs.observe(moduleEl, {
attributes: true,
attributeFilter: ['data-current']
});
}
function processRevsliderInScope(scope){
qsa(scope, REV_MODULE_SEL).forEach(observeRevModule);
}
const FALLBACK_IMG='/wp-content/uploads/2024/09/box-4.jpg';
const PLACEHOLDER='vc_gitem_image.png';
function applyFallbackToZone(zone){
if(!zone||zone.nodeType!==1) return;
const styleAttr=zone.getAttribute('style')||'';
if(zone.dataset.fciFallbackSig===styleAttr) return;
zone.dataset.fciFallbackSig=styleAttr;
if(!styleAttr.includes(PLACEHOLDER)) return;
zone.style.backgroundImage=`url("${FALLBACK_IMG}")`;
zone.style.backgroundSize='contain';
zone.style.backgroundRepeat='no-repeat';
zone.style.backgroundPosition='center';
zone.style.setProperty('background-image', `url("${FALLBACK_IMG}")`, 'important');
zone.dataset.fciFallbackApplied='1';
}
function replaceDefaultImages(scope){
qsa(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;
qsa(scope, '.gusta-post-title').forEach(el=> {
if(!el.classList.contains(cfg.textClass)){
el.classList.add(cfg.textClass);
}});
qsa(scope, '.vc_tta-tabs-list li a, .vc_btn3, .vc_tta-panel .vc_tta-panel-heading').forEach(el=> {
if(!el.classList.contains(cfg.themeClass)){
el.classList.add(cfg.themeClass);
}});
}
function processScope(scope, cfg){
if(!scope) return;
if(scope===document||hasAny(scope, SEL_CAT_ANY)){
processCategoriesInScope(scope);
}
if(scope===document||hasAny(scope, SEL_ZONES)){
replaceDefaultImages(scope);
}
if(scope===document||hasAny(scope, REV_MODULE_SEL)){
processRevsliderInScope(scope);
}
if(cfg&&(scope===document||hasAny(scope, SEL_THEME_ANY))){
applyIdBasedThemeClasses(cfg, scope);
}}
function observeDynamicContentChanges(cfg){
const queue=new Set();
let scheduled=false;
function addCandidate(node){
if(!node||node.nodeType!==1) return;
if(node.matches?.(SEL_DYNAMIC_ANY)){
queue.add(node);
return;
}
if(node.querySelector?.(SEL_DYNAMIC_ANY)){
queue.add(node);
}}
function flush(){
scheduled=false;
if(!queue.size) return;
queue.forEach(node=> {
processScope(node, cfg);
});
queue.clear();
}
function scheduleFlush(){
if(scheduled) return;
scheduled=true;
ric(flush);
}
const observer=new MutationObserver(mutations=> {
for (const mutation of mutations){
if(mutation.type!=='childList') continue;
mutation.addedNodes.forEach(addCandidate);
}
if(queue.size){
scheduleFlush();
}});
observer.observe(document.body, {
childList: true,
subtree: true
});
}
const fireResize=(()=> {
let cooling=false;
return ()=> {
if(cooling) return;
cooling=true;
window.dispatchEvent(new Event('resize'));
setTimeout(()=> {
cooling=false;
}, 120);
};})();
function bindResizeHelpers(){
if(document.querySelector('.vc_tta-tabs, .vc_images_carousel')){
setTimeout(fireResize, 300);
setTimeout(fireResize, 700);
}
document.addEventListener('click', event=> {
if(event.target.closest?.('.vc_tta-tab a')){
setTimeout(fireResize, 80);
setTimeout(fireResize, 260);
}}, true);
}
function init(){
const cfg=getActiveThemeConfig();
injectCategoryStyles(cfg);
raf(()=> {
processScope(document, cfg);
observeDynamicContentChanges(cfg);
bindResizeHelpers();
setTimeout(()=> processScope(document, cfg), 350);
setTimeout(()=> processScope(document, cfg), 1200);
document.body?.classList.add('loaded', 'custom-script-applied');
document.documentElement.classList.remove('loading');
});
}
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', init, { once: true });
}else{
init();
}})();