{"id":759,"date":"2025-12-08T01:28:12","date_gmt":"2025-12-08T01:28:12","guid":{"rendered":"https:\/\/homenorthbaseball.ca\/LNH\/?page_id=759"},"modified":"2026-03-16T02:28:48","modified_gmt":"2026-03-16T02:28:48","slug":"2026-standings","status":"publish","type":"page","link":"https:\/\/homenorthbaseball.ca\/LNH\/2026-standings\/","title":{"rendered":"2026 STANDINGS"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-text-align-center\">2026 REGULAR SEASON STANDINGS<\/h2>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>2025 League Standings<\/title>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\"><\/script>\n<style>\nbody {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    margin: 0px;\n    background: #fff;\n    color: #212529;\n}\nh1 { text-align: center; margin-bottom: 30px; font-size: 2em; font-weight: 600; }\n.container { max-width: 100%; margin: 0 auto; padding: 0 15px; }\n.table-wrapper {\n    max-width: 820px;\n    margin: 30px auto;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    border-radius: 8px;\n    box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\ntable { width: 100%; min-width: 720px; border-collapse: collapse; background: #fff; font-size: 16px; }\nth {\n    background: #980000; color: #ffffff; padding: 7px 4px; font-weight: 600; cursor: pointer;\n    user-select: none; text-align: center; border: 1px solid #dee2e6; font-size: 16px;\n    position: relative; white-space: nowrap;\n}\nth:hover { background: #000000; }\nth::after { content: \"\"; }\nth.sorted-asc::after { content: \" \u25b2\"; } \/* \u2190 Real up arrow *\/\nth.sorted-desc::after { content: \" \u25bc\"; } \/* \u2190 Real down arrow *\/\ntd { padding: 6px 4px; text-align: center; border: 1px solid #dee2e6; font-size: 16px; white-space: nowrap; }\ntr:nth-child(even) { background-color: #f8f9fa; }\ntr:hover { background-color: #e2e6ea; }\n.team { width: 80px !important; min-width: 80px; text-align: left !important; font-weight: 600; padding-left: 9px; }\nth:nth-child(1), td:nth-child(1) { width: 95px !important; }\nth:nth-child(n+2), td:nth-child(n+2) { width: 38px !important; }\n.gb { font-weight: bold; }\n@media (max-width: 768px) {\n    body { margin: 10px; }\n    h1 { font-size: 1.6em; }\n    .container { padding: 0 8px; }\n    .table-wrapper { margin: 20px auto; box-shadow: 0 3px 10px rgba(0,0,0,0.15); }\n    table { font-size: 0.88em; }\n    th, td { padding: 6px 3px; }\n}\n<\/style>\n<\/head>\n<body>\n<div class=\"container\">\n    <div id=\"standings-container\">Loading standings&#8230;<\/div>\n<\/div>\n<script>\nconst csvUrl = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vRP3WLxBJRDimMax92QtMP_EQfoY4ZYUGLe19x-n1xFV3nlW8MoXwzUA46PA-BxqaUaOLzYGfdQjO4O\/pub?gid=2080605275&single=true&output=csv\";\nPapa.parse(csvUrl, {\n    download: true,\n    header: true,\n    complete: function(results) {\n        const rows = results.data\n    .filter(r => (r.Team || r.TEAM) && (r.Team || r.TEAM).trim() !== \"\")\n    .map(r => ({\n        Team: (r.Team || r.TEAM)?.trim() || \"\",\n        Division: r.Division?.trim() || \"\",\n        GP: r.GP || \"\",\n        W: r.W || \"\",\n        L: r.L || \"\",\n        PCT: r.PCT || \"\",\n        GB: r.GB || \"\",\n        RS: r.RS || \"\",\n        RA: r.RA || \"\",\n        DIFF: r.DIFF || \"\",\n    }));\n        const hardy = rows.filter(r => r.Division === \"Hardy\");\n        const laurel = rows.filter(r => r.Division === \"Laurel\");\n        const all = [...rows];\n        function buildTable(data, captionText) {\n            return `\n            <div class=\"table-wrapper\">\n                <table>\n                    <caption>${captionText}<\/caption>\n                    <thead>\n                        <tr>\n                            <th onclick=\"sortThis(this,0)\">Team<\/th>\n                            <th onclick=\"sortThis(this,1)\">GP<\/th>\n                            <th onclick=\"sortThis(this,2)\">W<\/th>\n                            <th onclick=\"sortThis(this,3)\">L<\/th>\n                            <th onclick=\"sortThis(this,4)\">PCT<\/th>\n                            <th onclick=\"sortThis(this,5)\" class=\"gb\">GB<\/th>\n                            <th onclick=\"sortThis(this,6)\">RS<\/th>\n                            <th onclick=\"sortThis(this,7)\">RA<\/th>\n                            <th onclick=\"sortThis(this,8)\">DIFF<\/th>\n                        <\/tr>\n                    <\/thead>\n                    <tbody>\n                        ${data.map(r => {\n                            let logoSrc = \"\";\n                            let altText = r.Team;\n                            switch(r.Team) {\n                                case \"All Pro Systems\": logoSrc = \"\/logos\/APS.png\"; break;\n                                case \"Brant Cannabis\": logoSrc = \"\/logos\/BC.png\"; break;\n                                case \"Brant County Tire\": logoSrc = \"\/logos\/BCT.png\"; break;\n                                case \"Cainsville Tire\": logoSrc = \"\/logos\/CT.png\"; break;\n                                case \"Dayside Windows\": logoSrc = \"\/logos\/DAY.png\"; break; \/\/ note: typo in your list \"Windwos\" vs probably \"Windows\"\n                                case \"Frankie's\": logoSrc = \"\/logos\/FRA.png\"; break;\n                                case \"G2 Holdings\": logoSrc = \"\/logos\/G2.png\"; break;\n                                case \"Kreative Aluminum\": logoSrc = \"\/logos\/KA.png\"; break;\n                                case \"M&M Tree Service\": logoSrc = \"\/logos\/MM.png\"; break;\n                                case \"Polish Hall\": logoSrc = \"\/logos\/POL.png\"; break;\n                                case \"Roxy's\": logoSrc = \"\/logos\/ROX.png\"; break;\n                                case \"Sammy's\": logoSrc = \"\/logos\/SAM.png\"; break;\n                                case \"TJ Heating & Cooling\": logoSrc = \"\/logos\/TJ.png\"; break;\n                                case \"Waterford Caulking\": logoSrc = \"\/logos\/WFC.png\"; break;\n                            }\n                            const logoImg = logoSrc ? \n                                `<img loading=\"lazy\" decoding=\"async\" src=\"${logoSrc}\" alt=\"${altText}\" width=\"48\" height=\"48\" style=\"vertical-align:middle; margin-right:8px; object-fit:contain;\">` : \n                                \"\";\n                            return `\n                        <tr>\n                            <td class=\"team\">${logoImg}${r.Team}<\/td>\n                            <td>${r.GP}<\/td><td>${r.W}<\/td><td>${r.L}<\/td>\n                            <td>${r.PCT}<\/td><td class=\"gb\">${r.GB}<\/td>\n                            <td>${r.RS}<\/td><td>${r.RA}<\/td><td>${r.DIFF}<\/td>\n                        <\/tr>`;\n                        }).join('')}\n                    <\/tbody>\n                <\/table>\n            <\/div>`;\n        }\n        document.getElementById(\"standings-container\").innerHTML =\n            buildTable(all, \"\");\n        \/\/ Perfect initial sort by GB\n        document.querySelectorAll(\"table\").forEach(table => {\n            const tbody = table.tBodies[0];\n            const gbValue = t => {\n                const v = t.trim();\n                if (!v || v === \"\u2014\" || v === \"\u2013\" || v === \"-\" || v === \"--\") return 9999;\n                const n = parseFloat(v);\n                return isNaN(n) ? 9999 : n;\n            };\n            Array.from(tbody.rows)\n                .sort((a,b) => gbValue(a.cells[5].textContent) - gbValue(b.cells[5].textContent))\n                .forEach(r => tbody.appendChild(r));\n            table.querySelector(\"th:nth-child(6)\").classList.add(\"sorted-asc\");\n        });\n    }\n});\nwindow.sortThis = function(th, col) {\n    const table = th.closest(\"table\");\n    const tbody = table.tBodies[0];\n    const asc = !th.classList.contains(\"sorted-asc\");\n    table.querySelectorAll(\"th\").forEach(h => h.classList.remove(\"sorted-asc\",\"sorted-desc\"));\n    const getValue = text => {\n        const v = text.trim();\n        if (!v || v === \"\u2014\" || v === \"\u2013\" || v === \"-\" || v === \"--\") return 9999;\n        if (col === 5) { \/\/ GB column\n            const n = parseFloat(v);\n            return isNaN(n) ? 9999 : n;\n        }\n        const n = parseFloat(v);\n        return isNaN(n) ? v : n;\n    };\n    Array.from(tbody.rows)\n        .sort((a,b) => {\n            const A = getValue(a.cells[col].textContent);\n            const B = getValue(b.cells[col].textContent);\n            return asc ? (A > B ? 1 : -1) : (A < B ? 1 : -1);\n        })\n        .forEach(r => tbody.appendChild(r));\n    th.classList.toggle(\"sorted-asc\", asc);\n    th.classList.toggle(\"sorted-desc\", !asc);\n};\n<\/script>\n<\/body>\n<\/html>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>2026 REGULAR SEASON STANDINGS 2025 League Standings Loading standings&#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-759","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages\/759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/comments?post=759"}],"version-history":[{"count":40,"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages\/759\/revisions"}],"predecessor-version":[{"id":1250,"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages\/759\/revisions\/1250"}],"wp:attachment":[{"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/media?parent=759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}