{"id":401,"date":"2025-11-28T02:32:07","date_gmt":"2025-11-28T02:32:07","guid":{"rendered":"https:\/\/homenorthbaseball.ca\/LNH\/?page_id=401"},"modified":"2025-12-07T03:06:04","modified_gmt":"2025-12-07T03:06:04","slug":"2025-regular-season-standings","status":"publish","type":"page","link":"https:\/\/homenorthbaseball.ca\/LNH\/2025-regular-season-standings\/","title":{"rendered":"2025 Regular Season Standings"},"content":{"rendered":"\n<h4 class=\"wp-block-heading has-text-align-center\" style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)\">2025 REGULAR SEASON STANDINGS<\/h4>\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: 0.92em; }\ncaption { background: #000; color: #fff; font-size: 1.35em; font-weight: 600; padding: 12px; text-align: center; }\nth {\n    background: #f0c53c; color: #000; padding: 7px 4px; font-weight: 600; cursor: pointer;\n    user-select: none; text-align: center; border: 1px solid #dee2e6; font-size: 0.9em;\n    position: relative; white-space: nowrap;\n}\nth:hover { background: #e0b52b; }\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: 0.92em; white-space: nowrap; }\ntr:nth-child(even) { background-color: #f8f9fa; }\ntr:hover { background-color: #e2e6ea; }\n.team { width: 95px !important; min-width: 95px; 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\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\n<script>\nconst csvUrl = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQ9UPrNtLTGq4TisHjvKCskSRJtf3EOGG2WXqTSMPQUIoKzxzg37Eym9jlXViFeyrKgy07KyiXMxOqD\/pub?gid=2080605275&single=true&output=csv\";\n\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.trim() !== \"\")\n            .map(r => ({\n                Team: r.Team?.trim() || \"\",\n                Division: r.Division?.trim() || \"\",\n                GP: r.GP || \"\", W: r.W || \"\", L: r.L || \"\", PCT: r.PCT || \"\",\n                GB: r.GB || \"\", RS: r.RS || \"\", RA: r.RA || \"\", DIFF: r.DIFF || \"\",\n            }));\n\n        const hardy = rows.filter(r => r.Division === \"Hardy\");\n        const laurel = rows.filter(r => r.Division === \"Laurel\");\n        const all = [...rows];\n\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                        <tr>\n                            <td class=\"team\">${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>`).join('')}\n                    <\/tbody>\n                <\/table>\n            <\/div>`;\n        }\n\n        document.getElementById(\"standings-container\").innerHTML =\n            buildTable(hardy, \"OLIVER HARDY DIVISION\") +\n            buildTable(laurel, \"STAN LAUREL DIVISION\") +\n            buildTable(all, \"OVERALL LEAGUE STANDINGS\");\n\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});\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\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\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\n    th.classList.toggle(\"sorted-asc\", asc);\n    th.classList.toggle(\"sorted-desc\", !asc);\n};\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>2025 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-401","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages\/401","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=401"}],"version-history":[{"count":44,"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages\/401\/revisions"}],"predecessor-version":[{"id":746,"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages\/401\/revisions\/746"}],"wp:attachment":[{"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/media?parent=401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}