From 4ecd7fafa37259c8af909b36ba2a9b3f65641646 Mon Sep 17 00:00:00 2001 From: claude-cc1 Date: Tue, 5 May 2026 00:01:13 +0200 Subject: [PATCH] =?UTF-8?q?CC1=20R3B-P1=20=E2=80=94=20sporta=C5=A1=20panel?= =?UTF-8?q?=20klikabilnost?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Klub naziv → openKlub(klub_id) on click - Sport, mjesto rođenja, datum (godina) → cross-section filter - HOO / REPR / AKTIVAN / STIP badges → clickable filters - OIB → opens sudreg.pravosudje.hr lookup - New helpers: filterSportasiBy, filterSportasiByYear, filterKluboviByCity/Sport, filterObjektiByCity, openOIB - New CSS .link-chip for inline cyan→gold underlined chips Co-Authored-By: Claude Opus 4.7 (1M context) --- static/sport2.html | 99 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 92 insertions(+), 7 deletions(-) diff --git a/static/sport2.html b/static/sport2.html index 824e137..fc6ac9e 100644 --- a/static/sport2.html +++ b/static/sport2.html @@ -143,6 +143,12 @@ table tbody tr.no-click:hover{background:transparent} @keyframes spin{to{transform:rotate(360deg)}} .tag{display:inline-block;padding:2px 7px;font-size:10px;border-radius:3px;background:var(--bg4);color:var(--t1);font-weight:600;text-transform:uppercase;letter-spacing:.5px;margin-right:3px} +a.tag,.tag[onclick]{cursor:pointer;text-decoration:none;transition:transform .12s,filter .12s} +a.tag:hover,.tag[onclick]:hover{transform:translateY(-1px);filter:brightness(1.15)} +.link-chip{color:var(--cyan);cursor:pointer;text-decoration:none;border-bottom:1px dashed transparent;transition:all .15s} +.link-chip:hover{color:var(--pgz-gold);border-bottom-color:var(--pgz-gold)} +.kv .v a{color:var(--cyan)} +.kv .v a:hover{color:var(--pgz-gold)} .tag.b{background:var(--pgz-blue);color:#fff} .tag.gd{background:var(--pgz-gold);color:var(--bg0)} .tag.gr{background:var(--green);color:var(--bg0)} @@ -1078,6 +1084,72 @@ function renderSportasiShell(){ $('#sp-rep').addEventListener('change', applySportasiFilter); $('#sp-foto').addEventListener('change', applySportasiFilter); } +function openOIB(oib){ + const cleanOib = String(oib||'').replace(/[^0-9]/g,''); + const url = 'https://sudreg.pravosudje.hr/registar/oc/index.html#osnovniPodaci?o='+encodeURIComponent(cleanOib); + // Open external — sudreg supports OIB lookup + window.open(url, '_blank', 'noopener'); +} +function filterKluboviByCity(grad){ + closePanel(); + navTo('klubovi'); + setTimeout(() => { + const sel = $('#kl-grad'); + if(sel){ sel.value = grad; applyKluboviFilter(); } + }, 100); +} +function filterKluboviBySport(sport){ + closePanel(); + navTo('klubovi'); + setTimeout(() => { + const sel = $('#kl-sport'); + if(sel){ sel.value = sport; applyKluboviFilter(); } + }, 100); +} +function filterObjektiByCity(grad){ + closePanel(); + navTo('objekti'); + setTimeout(() => { + const sel = $('#ob-grad'); + if(sel){ sel.value = grad; applyObjektiFilter(); } + }, 100); +} +function filterSportasiBy(field, value){ + closePanel(); + navTo('sportasi'); + setTimeout(() => { + if(field === 'sport'){ + // Use search box since there's no sport dropdown + const q = $('#sp-q'); if(q){ q.value = value; } + } else if(field === 'mjesto_rodjenja' || field === 'grad'){ + const q = $('#sp-q'); if(q){ q.value = value; } + } else if(field === 'reprezentativac'){ + const cb = $('#sp-rep'); if(cb){ cb.checked = !!value; } + } else if(field === 'hoo'){ + const sel = $('#sp-hoo'); if(sel){ sel.value = String(value); } + } else if(field === 'aktivan'){ + // Add to extra-filters slot if exists; else search by status string + _state.spExtraAktivan = value ? 'true' : 'false'; + } else if(field === 'stipendiran'){ + _state.spExtraStipendiran = !!value; + } + applySportasiFilter(); + }, 100); +} +function filterSportasiByYear(year){ + closePanel(); + navTo('sportasi'); + setTimeout(() => { + _state.spYear = String(year); + applySportasiFilter(); + }, 100); +} +function clearSportasiExtras(){ + _state.spExtraAktivan = ''; + _state.spExtraStipendiran = false; + _state.spYear = ''; +} + function setSportasiView(v){ _state.viewSportasi = v; $('#sp-card').classList.toggle('active', v==='card'); @@ -1094,6 +1166,12 @@ function applySportasiFilter(){ if(rep) rows = rows.filter(c => c.reprezentativac); if(foto) rows = rows.filter(c => c.slika_url); if(hoo) rows = rows.filter(c => String(c.hoo_kategorija||c.kategorija_hoo||'')===hoo); + if(_state.spYear){ + rows = rows.filter(c => String(c.datum_rodenja||c.datum_rodjenja||'').slice(0,4) === _state.spYear); + } + if(_state.spExtraAktivan==='true') rows = rows.filter(c => c.aktivan); + if(_state.spExtraAktivan==='false') rows = rows.filter(c => !c.aktivan); + if(_state.spExtraStipendiran) rows = rows.filter(c => c.stipendiran); if(_sort.sportasi) rows = sortRows(rows, _sort.sportasi.key, _sort.sportasi.dir); $('#sp-cnt').textContent = rows.length+' sportaša'; const top = rows.slice(0, 300); @@ -1165,14 +1243,21 @@ async function openSportas(id){
${photo}
${esc(d.ime||'')} ${esc(d.prezime||'')}
-
${txt(d.sport,'—')} · ${txt(d.pozicija,'')} · ${esc(d.klub_naziv_full||d.klub_naziv_godisnjak||'—')}
-
📅 ${fmtDate(dob)}${(d.mjesto_rodjenja||d.mjesto_rodenja)?' · '+esc(d.mjesto_rodjenja||d.mjesto_rodenja):''}
+
+ ${d.sport?''+esc(d.sport)+'':'—'} · + ${txt(d.pozicija,'')} · + ${d.klub_id ? ''+esc(d.klub_naziv_full||d.klub_naziv_godisnjak||'—')+'' : ''+esc(d.klub_naziv_full||d.klub_naziv_godisnjak||'—')+''} +
+
+ ${dob ? '📅 '+fmtDate(dob)+'' : '📅 —'} + ${(d.mjesto_rodjenja||d.mjesto_rodenja)?' · '+esc(d.mjesto_rodjenja||d.mjesto_rodenja)+'':''} +
- ${d.aktivan?'AKTIVAN':'NEAKTIVAN'} - ${d.reprezentativac?'REPR':''} - ${hooCat?'HOO '+esc(hooCat)+'':''} + ${d.aktivan?'AKTIVAN':'NEAKTIVAN'} + ${d.reprezentativac?'REPR':''} + ${hooCat?'HOO '+esc(hooCat)+'':''} ${d.broj_dresa?'#'+esc(d.broj_dresa)+'':''} - ${d.stipendiran?'STIP':''} + ${d.stipendiran?'STIP':''}
@@ -1233,7 +1318,7 @@ async function openSportas(id){