Display Wordle Stats

Shows the worlde stats without needing an NYT account.

// ==UserScript==
// @name         Display Wordle Stats
// @namespace    http://tampermonkey.net/
// @version      2024-05-08
// @description  Shows the worlde stats without needing an NYT account.
// @author       int
// @match        *://www.nytimes.com/games/wordle/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=nytimes.com/games/wordle
// @grant        none
// @license      MIT
// ==/UserScript==
setTimeout(function() {
    (function() {
        'use strict';
        var total;
        var amount;
        function myFunction(item, index) {
            if(index<6){
                total += (index+1)*item;
                amount += item;
            }
        }
        function displayStats(){
            if(document.getElementById('jsonDisplay')) document.getElementById('jsonDisplay').remove();
            const divElement = document.createElement('div');
            divElement.setAttribute('id', 'jsonDisplay');
            document.getElementById("wordle-app-game").appendChild(divElement);
            const jsonString = JSON.stringify(JSON.parse(localStorage.getItem("wordle-legacy-stats-ANON")), null, 2);
            if(localStorage.getItem("nyt-wordle-darkmode")=="true" ){
                document.getElementById('jsonDisplay').style.color = "white";
            }
            // Display JSON in the div element
            document.getElementById('jsonDisplay').innerText = 'Games Played: ' + JSON.parse(jsonString).gamesPlayed + '\n';
            document.getElementById('jsonDisplay').innerText += 'Games Won: ' + JSON.parse(jsonString).gamesWon + '\n';
            document.getElementById('jsonDisplay').innerText += 'Current Streak: ' + JSON.parse(jsonString).currentStreak + (JSON.parse(jsonString).currentStreak>0 ? '🔥' : '😢') + '\n';
            document.getElementById('jsonDisplay').innerText += 'Max Streak: ' + JSON.parse(jsonString).maxStreak + '\n';
            const guesses = Object.values(JSON.parse(jsonString).guesses);
            total = 0;
            amount = 0;
            guesses.forEach(myFunction);
            document.getElementById('jsonDisplay').innerText += 'Average Guesses: ' + total/amount + '\n';
            document.getElementById('jsonDisplay').innerText += 'Win Percentage: ' + JSON.parse(jsonString).gamesWon/JSON.parse(jsonString).gamesPlayed*100 + '%\n';
            const htmlContent = `
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Guesses Graph</title>
  <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
  <canvas id="guessesChart" width="400" height="200"></canvas>
  <script>
    const data = ` + jsonString + `

    const guessesData = Object.values(data.guesses);

    const ctx = document.getElementById('guessesChart').getContext('2d');
    const guessesChart = new Chart(ctx, {
      type: 'bar',
      data: {
        labels: Object.keys(data.guesses),
        datasets: [{
          label: 'Guesses',
          data: guessesData,
          backgroundColor: 'rgba(75, 192, 192, 0.2)',
          borderColor: 'rgba(75, 192, 192, 1)',
          borderWidth: 1
        }]
      },
      options: {
        scales: {
          y: {
            beginAtZero: true
          }
        }
      }
    });
  </script>
</body>
</html>
`;
        const iframe = document.createElement('iframe');
        iframe.id = 'frame'
        iframe.style.width = '100%';
        iframe.style.height = '400px';
        document.getElementById('jsonDisplay').appendChild(iframe);
        iframe.contentWindow.document.open();
        iframe.contentWindow.document.write(htmlContent);
        iframe.contentWindow.document.close();
        window.dispatchEvent(new Event('resize'));
    }
    if(inIframe()) return;
    var x = document.createElement("BUTTON");
    var t = document.createTextNode("Display Stats");
    x.appendChild(t);
    x.onclick = displayStats;
    x.className = "statsButton";
    x.style="z-index: 99 !important; " + `    --inter-ad-skip-button-height: 52px;
    --inter-ad-top-bar-height: 34px;
    --inter-ad-bottom-bar-height: 24px;
    --green: #6aaa64;
    --green-4: #538d4e;
    --beta-blue: #4f85e5;
    --wordle-high-contrast-green: #58a351;
    --spellingBeeYellow: #f7da21;
    --miniCrosswordBlue: #95befa;
    --connectionsPeriwinkle: #b4a8ff;
    --sudoku-orange: #fb9b00;
    --tiles-green: #b5e352;
    --dailyCrosswordBlue: #6493e6;
    --yellow-3: #c9b458;
    --yellow-4: #b59f3b;
    --newsGray-10: #dfdfdf;
    --newsGray-100: #121212;
    --newsGray-85: #363636;
    --gray-3: #ccc;
    --gray-4: #dcdcdc;
    --gray-6: #f4f4f4;
    --gray-13: #d3d6da;
    --gray-18: #787c7e;
    --gray-19: #878a8c;
    --gray-20: #edeff1;
    --gray-21: #f6f7f8;
    --gray-22: #e3e3e1;
    --gray-23: #a6a6a6;
    --gray-24: #818384;
    --gray-25: #565758;
    --gray-26: #3a3a3c;
    --gray-27: #424242;
    --gray-28: #59595a;
    --gray-29: #afafaf;
    --black: #000;
    --white: #fff;
    --newsDarkContentPrimary: #f8f8f8;
    --wordleBlack: #212121;
    --wordleBlack-2: #272729;
    --wordleBlack-3: #1a1a1b;
    --wordleBlack-4: #121213;
    --wordleBlack-5: #2f2f31;
    --linkBlue: #346eb7;
    --linkDarkBlue: #6ba1dd;
    --orange: #f5793a;
    --blue: #85c0f9;
    --outlineBlue: #2671dc;
    --svg-arrow-fill: var(--white);
    --svg-arrow-stroke: var(--black);
    --svg-arrow-fill-hover: var(--black);
    --svg-arrow-stroke-hover: var(--white);
    --color-tone-1: var(--black);
    --color-tone-2: var(--gray-18);
    --color-tone-3: var(--gray-19);
    --color-tone-4: var(--gray-13);
    --color-tone-5: var(--gray-20);
    --color-tone-6: var(--gray-21);
    --color-tone-7: var(--white);
    --color-tone-8: var(--newsGray-100);
    --color-tone-9: var(--newsGray-10);
    --color-tone-10: var(--black);
    --color-tone-11: var(--gray-18);
    --color-tone-12: var(--newsGray-85);
    --color-nav-hover: var(--gray-6);
    --opacity-50: rgba(255, 255, 255, 0.5);
    --error-background: var(--gray-22);
    --icon-disabled: var(--gray-23);
    --background-gray: var(--gray-29);
    --inline-links: var(--linkBlue);
    --warning-red: #d0021b;
    --color-background: var(--color-tone-7);
    --color-present: var(--yellow-3);
    --color-correct: var(--green);
    --color-absent: var(--color-tone-2);
    --tile-text-color: var(--color-tone-7);
    --key-text-color: var(--color-tone-1);
    --key-bg: var(--color-tone-4);
    --key-bg-present: var(--color-present);
    --key-bg-correct: var(--color-correct);
    --key-bg-absent: var(--color-absent);
    --key-evaluated-text-color: var(--color-tone-7);
    --key-evaluated-text-color-absent: var(--white);
    --modal-content-bg: var(--color-tone-7);
    --outline-focus: var(--outlineBlue);
    --color-correct-high-contrast: var(--wordle-high-contrast-green);
    --keyboard-height: 200px;
    --game-max-width: 500px;
    --error-z-index: 500;
    --toast-z-index: 1000;
    --modal-z-index: 2000;
    --page-z-index: 3000;
    --system-toast-z-index: 4000;
    --horizontal-warning-z-index: 5000;
    --spelling-bee: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/SpellingBee-Icon-Normalized.svg");
    --daily: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Crossword-Icon-Normalized.svg");
    --mini: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Mini-Icon-Normalized.svg");
    --tiles: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Tiles-Icon-Normalized.svg");
    --sudoku: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Sudoku-Icon-Normalized.svg");
    --vertex: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Vertex-Icon-Normalized.svg");
    --letter-boxed: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/LetterBoxed-Icon-Normalized.svg");
    --strands: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Strands-Icon-Normalized.svg");
    --connections: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Connections-Icon.svg");
    --nyt: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/NYT-Icon-Normalized.svg");
    --wirecutter: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Wirecutter-Icon-Normalized.svg");
    --cooking: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Cooking-Icon-Normalized.svg");
    --athletic: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/Athletic-Icon-Normalized.svg");
    --stats-auth: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/stats-auth-cta.svg");
    --wordlebot: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/WordleBot-Icon-Normalized.svg");
    --wordlebot-walking-icon: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/WordleBot-Walking-Icon-Normalized.svg");
    --wordle-icon: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/wordle-icon.svg");
    --wordle-star: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/wordle-green-star.svg");
    --wordle-progress-1: url("https://www.nytimes.com/games-assets/v2/assets/wordle/wordle_progress_1.svg");
    --wordle-progress-2: url("https://www.nytimes.com/games-assets/v2/assets/wordle/wordle_progress_2.svg");
    --wordle-progress-3: url("https://www.nytimes.com/games-assets/v2/assets/wordle/wordle_progress_3.svg");
    --wordle-progress-4: url("https://www.nytimes.com/games-assets/v2/assets/wordle/wordle_progress_4.svg");
    --wordle-progress-5: url("https://www.nytimes.com/games-assets/v2/assets/wordle/wordle_progress_5.svg");
    --gameslogo: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/gameslogo.svg");
    --stats-problem: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/transparent-wordle-issue.svg");
    --link-info: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/transparent-wordle-link.svg");
    --badge-confirm: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-badge-confirm.svg");
    --badge-fail: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-badge-fail.svg");
    --large-stats: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-large-stats.svg");
    --wordle-sb-mini: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-mini-sb.svg");
    --wordle-share-mini: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-mini-share.svg");
    --wordle-stats-confirm-mini: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-mini-stats-confirm.svg");
    --wordle-stats-loaded-mini: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-mini-stats-loaded.svg");
    --wordle-stats-mini: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-mini-stats.svg");
    --wordle-stats-mini-check: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-mini-stats-check.svg");
    --wordlebot-walking: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/WordleBot-walking.svg");
    --nyt-logo: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/nyt-logo.svg");
    --hybrid-back: url("https://www.nytimes.com/games-assets/v2/assets/hybrid-back-light-mode.svg");
    --hybrid-back-dark-mode: url("https://www.nytimes.com/games-assets/v2/assets/hybrid-back-dark-mode.svg");
    --icon-rotate-wordle: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/icon-rotate-wordle.svg");
    --california-privacy-icon: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/california-privacy-default.svg");
    --connections-np: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/Connections-Icon-np.svg");
    --spelling-bee-np: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/Spelling-Bee-Icon-np.svg");
    --mini-np: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/Mini-Icon-np.svg");
    --sudoku-np: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/Sudoku-Icon-np.svg");
    --tiles-np: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/Tiles-Icon-np.svg");
    --daily-np: url("https://www.nytimes.com/games-assets/v2/assets/wordle/page-icons/Crossword-Icon-np.svg");
    --promo-icon-height: 40px;
    --promo-icon-width: 40px;
    --promo-icon-padding: 0px;
    --spelling-bee-promo: url("https://www.nytimes.com/games-assets/v2/assets/wordle/nav-icons/SpellingBee-Icon-Normalized.svg");
    --header-height: 65px;
    --header-padding-x: 20px;
    -webkit-font-smoothing: antialiased;
    align-items: center;
    cursor: pointer !important;
    overflow: visible;
    text-transform: none;
    -webkit-appearance: button;
    position: relative;
    border: none;
    height: 3em;
    border-radius: 1.5em;
    align-content: center;
    letter-spacing: .05em;
    font-size: 16px;
    font-family: "nyt-franklin";
    line-height: 28px;
    padding: 0 2em;
    background: #000;
    color: #fff;
    margin: 0 10px 8px;
    font-weight: 400;
    width: 180px;`;
    x.style.position = "relative";
    x.style.left = "5%";
    x.style.top = "1%";
    document.body.appendChild(x);
})();
}, 2000);
function inIframe () {
    try {
        return window.self !== window.top;
    } catch (e) {
        return true;
    }
}