{"id":1266,"date":"2026-05-06T14:21:14","date_gmt":"2026-05-06T14:21:14","guid":{"rendered":"https:\/\/homenorthbaseball.ca\/LNH\/?page_id=1266"},"modified":"2026-05-07T17:58:51","modified_gmt":"2026-05-07T17:58:51","slug":"2026-game-logs","status":"publish","type":"page","link":"https:\/\/homenorthbaseball.ca\/LNH\/2026-game-logs\/","title":{"rendered":"2026 Game Logs"},"content":{"rendered":"\n<h4 class=\"wp-block-heading has-text-align-center\" style=\"padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">2026 PLAYER GAME LOGS<\/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>LNH Game Logs<\/title>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@400;500;700&#038;display=swap\" rel=\"stylesheet\">\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\"><\/script>\n    <style>\n        body {\n            font-family:'Roboto',Arial,sans-serif;\n            margin:0;\n            padding:0;\n            background:#f4f4f4;\n            color:#333;\n        }\n       \n        .search-container {\n            background:#980000;\n            padding:35px 20px;\n            text-align:center;\n            margin-bottom:30px;\n            border-radius:8px;\n        }\n       \n        .search-container label {\n            color:white;\n            font-size:12px;\n            font-weight:700;\n            display:block;\n            margin-bottom:12px;\n        }\n       \n        select {\n            padding:12px 16px;\n            width: 420px;\n            max-width: 94%;\n            font-size: 12px;\n            border: none;\n            border-radius: 0px;\n            background: white;\n            color: #333;\n            box-shadow: 0 2px 6px rgba(0,0,0,0.2);\n        }\n       \n        button {\n            padding:11px 32px;\n            font-size: 15px;\n            background:white;\n            color:#980000;\n            border:none;\n            border-radius:4px;\n            cursor:pointer;\n            font-weight:700;\n            margin-top: 12px;\n        }\n       \n        button:hover {\n            background:#f0f0f0;\n        }\n       \n        h2 {\n            text-align:center;\n            color:#980000;\n            margin:25px 0 10px;\n            font-size:28px;\n            font-weight:700;\n        }\n       \n        table {\n            width:100%;\n            border-collapse:collapse;\n            background:white;\n            margin:20px 0;\n            box-shadow:0 4px 12px rgba(0,0,0,0.1);\n            border:1px solid #980000;\n            font-size:15px;\n        }\n       \n        th, td {\n            border: 1px solid black !important;\n            padding:12px 10px;\n            text-align:center;\n        }\n       \n        th {\n            background:#980000;\n            color:white;\n            font-weight:700;\n            text-transform:uppercase;\n        }\n       \n        tr:nth-child(even) {background-color:#f9f9f9;}\n        tr:hover {background-color:#d9d9d9;}\n       \n        .total-row {\n            background:#d9d9d9 !important;\n            font-weight:700;\n            border-top:4px double #980000;\n            border-bottom:4px double #980000;\n        }\n       \n        .total-row td {\n            color:#980000;\n        }\n       \n        .no-data {\n            text-align:center;\n            color:#666;\n            font-style:italic;\n            padding:60px;\n            font-size:18px;\n        }\n       \n        .table-wrapper {\n            overflow-x:auto;\n            -webkit-overflow-scrolling:touch;\n        }\n\n        @media (max-width:768px){\n            select { width: 94%; max-width: 94%; }\n        }\n    <\/style>\n<\/head>\n<body>\n\n<div class=\"search-container\">\n    <label for=\"playerSelect\">Select Player:<\/label>\n    <select id=\"playerSelect\"><\/select>\n    <br><br>\n    <button id=\"showLogs\">SHOW GAME LOGS<\/button>\n<\/div>\n\n<div id=\"logsContainer\"><\/div>\n\n<script>\n    const GAMELOGS_URL = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vRP3WLxBJRDimMax92QtMP_EQfoY4ZYUGLe19x-n1xFV3nlW8MoXwzUA46PA-BxqaUaOLzYGfdQjO4O\/pub?gid=1713440440&single=true&output=csv\";\n    const TOTALS_URL   = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vRP3WLxBJRDimMax92QtMP_EQfoY4ZYUGLe19x-n1xFV3nlW8MoXwzUA46PA-BxqaUaOLzYGfdQjO4O\/pub?gid=724629549&single=true&output=csv\";\n   \n    let gameLogsData = [];\n    let totalsData = [];\n\n    Promise.all([\n        fetch(GAMELOGS_URL).then(r => r.text()),\n        fetch(TOTALS_URL).then(r => r.text())\n    ])\n    .then(([logsText, totalsText]) => {\n        Papa.parse(logsText, {\n            header: true,\n            skipEmptyLines: true,\n            complete: res => gameLogsData = res.data\n        });\n\n        Papa.parse(totalsText, {\n            header: true,\n            skipEmptyLines: true,\n            complete: res => {\n                totalsData = res.data;\n                populateDropdown();\n            }\n        });\n    })\n    .catch(err => console.error(\"Error loading data:\", err));\n\n    function populateDropdown() {\n        const players = [...new Set(gameLogsData.map(r => r.Player || r.player || r.NAME).filter(Boolean))].sort();\n        const select = document.getElementById('playerSelect');\n        select.innerHTML = '<option value=\"\">-- Select a Player --<\/option>';\n        \n        players.forEach(p => {\n            const opt = document.createElement('option');\n            opt.value = p;\n            opt.textContent = p;\n            select.appendChild(opt);\n        });\n    }\n\n    document.getElementById('showLogs').addEventListener('click', showGameLogs);\n    document.getElementById('playerSelect').addEventListener('change', showGameLogs);\n\n    function showGameLogs() {\n        const playerName = document.getElementById('playerSelect').value.trim();\n        if (!playerName) return;\n\n        const playerGames = gameLogsData.filter(row => {\n            const nameField = row.Player || row.player || row.NAME;\n            return nameField && nameField.trim() === playerName;\n        });\n\n        const container = document.getElementById('logsContainer');\n\n        if (playerGames.length === 0) {\n            container.innerHTML = `<p class=\"no-data\">No game logs found for \"${playerName}\"<\/p>`;\n            return;\n        }\n\n        const columnsToHide = ['Player', 'player', 'NAME', 'Team', 'TEAM', 'Tm'];\n\n        \/\/ Get all visible columns\n        let visibleHeaders = Object.keys(playerGames[0]).filter(h => !columnsToHide.includes(h));\n\n        \/\/ Custom ordering: First column stays first, Opponent becomes second\n        let orderedHeaders = [];\n        \n        \/\/ 1. First column (usually Game # or Date)\n        if (visibleHeaders.length > 0) {\n            orderedHeaders.push(visibleHeaders[0]);\n        }\n\n        \/\/ 2. Opponent column (forced to second position)\n        if (visibleHeaders.includes('Opponent')) {\n            orderedHeaders.push('Opponent');\n        }\n\n        \/\/ 3. All remaining columns in original order\n        visibleHeaders.forEach(header => {\n            if (!orderedHeaders.includes(header)) {\n                orderedHeaders.push(header);\n            }\n        });\n\n        \/\/ Build headers\n        let headersHTML = orderedHeaders.map(h => `<th>${h}<\/th>`).join('');\n\n        \/\/ Build game rows with correct order\n        let rowsHTML = '';\n        playerGames.forEach(game => {\n            let rowHTML = '<tr>';\n            orderedHeaders.forEach(header => {\n                rowHTML += `<td>${game[header] || ''}<\/td>`;\n            });\n            rowHTML += '<\/tr>';\n            rowsHTML += rowHTML;\n        });\n\n        \/\/ Year Totals (matching column order)\n        const playerTotals = totalsData.filter(row => {\n            const nameField = row.Player || row.player || row.NAME;\n            return nameField && nameField.trim() === playerName;\n        });\n\n        let totalsHTML = '';\n        if (playerTotals.length > 0) {\n            playerTotals.forEach(totalRow => {\n                let rowHTML = '<tr class=\"total-row\">';\n                orderedHeaders.forEach(header => {\n                    const value = totalRow[header] !== undefined ? totalRow[header] : '';\n                    rowHTML += `<td>${value}<\/td>`;\n                });\n                rowHTML += '<\/tr>';\n                totalsHTML += rowHTML;\n            });\n        } else {\n            let rowHTML = '<tr class=\"total-row\">';\n            orderedHeaders.forEach(() => rowHTML += `<td>\u2014<\/td>`);\n            rowHTML += '<\/tr>';\n            totalsHTML = rowHTML;\n        }\n\n        const html = `\n            <h2>${playerName} \u2014 Game Logs (${playerGames.length} games)<\/h2>\n            <div class=\"table-wrapper\">\n                <table>\n                    <thead>\n                        <tr>${headersHTML}<\/tr>\n                    <\/thead>\n                    <tbody>\n                        ${rowsHTML}\n                        ${totalsHTML}\n                    <\/tbody>\n                <\/table>\n            <\/div>\n        `;\n\n        container.innerHTML = html;\n    }\n<\/script>\n\n<\/body>\n<\/html>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>2026 PLAYER GAME LOGS LNH Game Logs Select Player: SHOW GAME LOGS<\/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-1266","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages\/1266","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=1266"}],"version-history":[{"count":39,"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages\/1266\/revisions"}],"predecessor-version":[{"id":1307,"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/pages\/1266\/revisions\/1307"}],"wp:attachment":[{"href":"https:\/\/homenorthbaseball.ca\/LNH\/wp-json\/wp\/v2\/media?parent=1266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}