{"id":5525,"date":"2026-04-02T15:00:41","date_gmt":"2026-04-02T13:00:41","guid":{"rendered":"https:\/\/basketcup.org\/?page_id=5525"},"modified":"2026-04-02T15:20:46","modified_gmt":"2026-04-02T13:20:46","slug":"live-statistika","status":"publish","type":"page","link":"https:\/\/basketcup.org\/?page_id=5525","title":{"rendered":"LIVE STATISTIKA"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5525\" class=\"elementor elementor-5525\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-88fb0c7 e-flex e-con-boxed e-con e-parent\" data-id=\"88fb0c7\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5481482 elementor-widget elementor-widget-html\" data-id=\"5481482\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div id=\"bc-stats-app\">\n  <style>\n    #bc-stats-app {\n      font-family: Arial, sans-serif;\n      max-width: 1280px;\n      margin: 0 auto;\n      color: #111827;\n    }\n\n    #bc-stats-app .bc-hero {\n      background: linear-gradient(135deg, #0f172a 0%, #1d4ed8 55%, #f97316 100%);\n      color: #fff;\n      border-radius: 22px;\n      padding: 30px 24px;\n      margin-bottom: 18px;\n      box-shadow: 0 12px 30px rgba(0,0,0,.14);\n    }\n\n    #bc-stats-app .bc-kicker {\n      font-size: 12px;\n      text-transform: uppercase;\n      letter-spacing: .12em;\n      font-weight: 700;\n      opacity: .9;\n      margin-bottom: 8px;\n    }\n\n    #bc-stats-app h2 {\n      margin: 0 0 10px;\n      font-size: clamp(28px, 4vw, 44px);\n      line-height: 1.05;\n    }\n\n    #bc-stats-app .bc-hero p {\n      margin: 0;\n      font-size: 16px;\n      line-height: 1.6;\n      color: rgba(255,255,255,.92);\n    }\n\n    #bc-stats-app .bc-controls {\n      display: grid;\n      grid-template-columns: 2fr 1fr auto;\n      gap: 12px;\n      margin-bottom: 16px;\n    }\n\n    #bc-stats-app input,\n    #bc-stats-app select,\n    #bc-stats-app button {\n      padding: 13px 14px;\n      border: 1px solid #dbe2ea;\n      border-radius: 12px;\n      font-size: 15px;\n      box-sizing: border-box;\n      width: 100%;\n    }\n\n    #bc-stats-app button {\n      background: #111827;\n      color: #fff;\n      font-weight: 700;\n      cursor: pointer;\n      border: none;\n      min-width: 130px;\n    }\n\n    #bc-stats-app .bc-meta {\n      font-size: 14px;\n      color: #64748b;\n      margin: 4px 2px 14px;\n      font-weight: 700;\n    }\n\n    #bc-stats-app .bc-table-wrap {\n      overflow-x: auto;\n      border: 1px solid #e5e7eb;\n      border-radius: 18px;\n      background: #fff;\n      box-shadow: 0 8px 24px rgba(15,23,42,.06);\n    }\n\n    #bc-stats-app table {\n      width: 100%;\n      border-collapse: collapse;\n      min-width: 1100px;\n    }\n\n    #bc-stats-app thead {\n      background: #facc15;\n    }\n\n    #bc-stats-app th,\n    #bc-stats-app td {\n      padding: 12px 14px;\n      border-bottom: 1px solid #e5e7eb;\n      text-align: left;\n      font-size: 14px;\n      vertical-align: middle;\n    }\n\n    #bc-stats-app tbody tr:hover {\n      background: #f9fafb;\n    }\n\n    #bc-stats-app .stat-btn {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      text-decoration: none;\n      background: linear-gradient(135deg, #f97316, #ea580c);\n      color: #fff;\n      padding: 9px 12px;\n      border-radius: 10px;\n      font-weight: 800;\n      font-size: 13px;\n      white-space: nowrap;\n    }\n\n    #bc-stats-app .empty {\n      color: #9ca3af;\n    }\n\n    #bc-stats-app .loading,\n    #bc-stats-app .error,\n    #bc-stats-app .no-results {\n      background: #fff;\n      border: 1px solid #e5e7eb;\n      border-radius: 18px;\n      padding: 24px 18px;\n      text-align: center;\n      box-shadow: 0 8px 24px rgba(15,23,42,.06);\n    }\n\n    #bc-stats-app .error {\n      color: #991b1b;\n    }\n\n    @media (max-width: 900px) {\n      #bc-stats-app .bc-controls {\n        grid-template-columns: 1fr;\n      }\n    }\n  <\/style>\n\n  <div class=\"bc-hero\">\n    <div class=\"bc-kicker\">14. Basket Cup Sarajevo 2026<\/div>\n    <h2>Llive statistika<\/h2>\n    <p>Pretra\u017euj po timu, filtriraj redove i jednim klikom otvori statistiku utakmice.<\/p>\n  <\/div>\n\n  <div class=\"bc-controls\">\n    <input type=\"text\" id=\"bcSearch\" placeholder=\"Pretra\u017ei po timu ili bilo kojoj \u0107eliji...\" \/>\n    <select id=\"bcCategoryFilter\">\n      <option value=\"\">Sve kategorije<\/option>\n    <\/select>\n    <button type=\"button\" id=\"bcReset\">Reset<\/button>\n  <\/div>\n\n  <div class=\"bc-meta\" id=\"bcCount\">U\u010ditavanje podataka...<\/div>\n\n  <div id=\"bcContent\">\n    <div class=\"loading\">U\u010ditavam podatke...<\/div>\n  <\/div>\n\n  <script>\n    (function () {\n      const CSV_URL = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQnNhu7GfUnBLJO8jJewrsSevgH0J7L48hRLphqdh3RuPR0vmu2dcv7OrPoUnH8sEWUVPuSnuOZO0vh\/pub?output=csv\";\n\n      const searchInput = document.getElementById(\"bcSearch\");\n      const categoryFilter = document.getElementById(\"bcCategoryFilter\");\n      const resetBtn = document.getElementById(\"bcReset\");\n      const content = document.getElementById(\"bcContent\");\n      const count = document.getElementById(\"bcCount\");\n\n      let headers = [];\n      let rows = [];\n\n      function parseCSV(text) {\n        const result = [];\n        let row = [];\n        let cell = \"\";\n        let inQuotes = false;\n\n        for (let i = 0; i < text.length; i++) {\n          const char = text[i];\n          const next = text[i + 1];\n\n          if (char === '\"') {\n            if (inQuotes && next === '\"') {\n              cell += '\"';\n              i++;\n            } else {\n              inQuotes = !inQuotes;\n            }\n          } else if (char === ',' && !inQuotes) {\n            row.push(cell);\n            cell = \"\";\n          } else if ((char === '\\n' || char === '\\r') && !inQuotes) {\n            if (char === '\\r' && next === '\\n') i++;\n            row.push(cell);\n            if (row.some(c => String(c).trim() !== \"\")) result.push(row);\n            row = [];\n            cell = \"\";\n          } else {\n            cell += char;\n          }\n        }\n\n        if (cell.length || row.length) {\n          row.push(cell);\n          if (row.some(c => String(c).trim() !== \"\")) result.push(row);\n        }\n\n        return result;\n      }\n\n      function escapeHtml(str) {\n        return String(str || \"\")\n          .replace(\/&\/g, \"&amp;\")\n          .replace(\/<\/g, \"&lt;\")\n          .replace(\/>\/g, \"&gt;\")\n          .replace(\/\"\/g, \"&quot;\")\n          .replace(\/'\/g, \"&#039;\");\n      }\n\n      function detectCategory(rowObj) {\n        const all = Object.values(rowObj).join(\" \");\n        const m = all.match(\/\\b(W?U\\d{2}|W\\d{2})\\b\/i);\n        return m ? m[1].toUpperCase() : \"\";\n      }\n\n      function findStatLink(rowObj) {\n        for (const value of Object.values(rowObj)) {\n          const v = String(value || \"\").trim();\n          if (\/^https?:\\\/\\\/\/i.test(v)) return v;\n        }\n        return \"\";\n      }\n\n      function buildRows(data) {\n        headers = data[0].map(h => String(h || \"\").trim());\n        rows = data.slice(1).map((r, idx) => {\n          const obj = {};\n          headers.forEach((h, i) => {\n            obj[h || `Kolona ${i + 1}`] = (r[i] || \"\").trim();\n          });\n          obj.__id = idx + 1;\n          obj.__category = detectCategory(obj);\n          obj.__link = findStatLink(obj);\n          return obj;\n        });\n\n        const cats = [...new Set(rows.map(r => r.__category).filter(Boolean))].sort();\n        categoryFilter.innerHTML = '<option value=\"\">Sve kategorije<\/option>';\n        cats.forEach(cat => {\n          const opt = document.createElement(\"option\");\n          opt.value = cat;\n          opt.textContent = cat;\n          categoryFilter.appendChild(opt);\n        });\n      }\n\n      function renderTable(list) {\n        if (!list.length) {\n          content.innerHTML = '<div class=\"no-results\">Nema rezultata za odabrani filter.<\/div>';\n          count.textContent = \"Prikazano utakmica: 0\";\n          return;\n        }\n\n        const visibleHeaders = headers.filter(h => {\n          const low = h.toLowerCase();\n          return !low.includes(\"url\") && !low.includes(\"link\");\n        });\n\n        let html = `\n          <div class=\"bc-table-wrap\">\n            <table>\n              <thead>\n                <tr>\n                  ${visibleHeaders.map(h => `<th>${escapeHtml(h)}<\/th>`).join(\"\")}\n                  <th>Statistika<\/th>\n                <\/tr>\n              <\/thead>\n              <tbody>\n        `;\n\n        list.forEach(row => {\n          html += \"<tr>\";\n          visibleHeaders.forEach(h => {\n            const value = row[h] || \"\";\n            html += `<td>${value ? escapeHtml(value) : '<span class=\"empty\">-<\/span>'}<\/td>`;\n          });\n\n          html += `<td>${\n            row.__link\n              ? `<a class=\"stat-btn\" href=\"${escapeHtml(row.__link)}\" target=\"_blank\" rel=\"noopener noreferrer\">Otvori statistiku<\/a>`\n              : `<span class=\"empty\">-<\/span>`\n          }<\/td>`;\n          html += \"<\/tr>\";\n        });\n\n        html += `\n              <\/tbody>\n            <\/table>\n          <\/div>\n        `;\n\n        content.innerHTML = html;\n        count.textContent = \"Prikazano utakmica: \" + list.length;\n      }\n\n      function applyFilters() {\n        const q = searchInput.value.toLowerCase().trim();\n        const cat = categoryFilter.value.toUpperCase().trim();\n\n        const filtered = rows.filter(row => {\n          const text = Object.values(row).join(\" \").toLowerCase();\n          const matchSearch = !q || text.includes(q);\n          const matchCat = !cat || row.__category === cat;\n          return matchSearch && matchCat;\n        });\n\n        renderTable(filtered);\n      }\n\n      resetBtn.addEventListener(\"click\", function () {\n        searchInput.value = \"\";\n        categoryFilter.value = \"\";\n        renderTable(rows);\n      });\n\n      searchInput.addEventListener(\"input\", applyFilters);\n      categoryFilter.addEventListener(\"change\", applyFilters);\n\n      fetch(CSV_URL)\n        .then(res => {\n          if (!res.ok) throw new Error(\"CSV nije dostupan.\");\n          return res.text();\n        })\n        .then(text => {\n          const parsed = parseCSV(text);\n          if (!parsed.length) throw new Error(\"CSV je prazan.\");\n          buildRows(parsed);\n          renderTable(rows);\n        })\n        .catch(err => {\n          content.innerHTML = '<div class=\"error\">Podaci se nisu mogli u\u010ditati. Provjeri da li je Google Sheet objavljen kao CSV.<\/div>';\n          count.textContent = \"Gre\u0161ka pri u\u010ditavanju\";\n          console.error(err);\n        });\n    })();\n  <\/script>\n<\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>14. Basket Cup Sarajevo 2026 Llive statistika Pretra\u017euj po timu, filtriraj redove i jednim klikom otvori statistiku utakmice. Sve kategorije Reset U\u010ditavanje podataka&#8230; U\u010ditavam podatke&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5525","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/basketcup.org\/index.php?rest_route=\/wp\/v2\/pages\/5525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/basketcup.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/basketcup.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/basketcup.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/basketcup.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5525"}],"version-history":[{"count":0,"href":"https:\/\/basketcup.org\/index.php?rest_route=\/wp\/v2\/pages\/5525\/revisions"}],"wp:attachment":[{"href":"https:\/\/basketcup.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}