split into multiple files again, change stats to use clipboard and add userscript for getting stats from original

main
Holly 2 years ago
parent cd4bec28e2
commit 2df43500aa

@ -0,0 +1,54 @@
document.getElementById("save-close").addEventListener("click", (function(a) {
let s = document.querySelector('#save');
s.classList.toggle('hidden');
}));
function n(e, a, s) {
return a in e ? Object.defineProperty(e, a, {
value: s,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[a] = s, e
}
const default_stats = {
currentStreak: 0,
maxStreak: 0,
guesses: n({
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0
}, 'fail', 0),
winPercentage: 0,
gamesPlayed: 0,
gamesWon: 0,
averageGuesses: 0
};
document.getElementById("saveButton").addEventListener("click", (function(a) {
let s = document.querySelector('#saveButton');
console.log('save-button')
s.classList.add('flash');
setTimeout(() =>
s.classList.remove('flash'), 200);
// get statistics from local storage!
let stats = window.localStorage.getItem('statistics') || JSON.stringify(default_stats);
navigator.clipboard.writeText(stats);
}))
document.getElementById("inputload").addEventListener("click", (function(a) {
let s = document.querySelector('#inputtext');
console.log(s);
let json = s.value;
window.localStorage.setItem('statistics', json);
console.debug('loaded stats! refreshing', json);
window.location.reload();
}))

@ -0,0 +1,301 @@
<!-- Saved from http://127.0.0.1:8080/src/wordle.html at 2022-02-01T09:09:09Z using monolith v2.6.1 -->
<!DOCTYPE html><html lang="en"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>Wordle - A daily word game</title>
<meta name="description" content="Guess the hidden word in 6 tries. A new puzzle is available each day.">
<!-- FB Meta Tags -->
<meta property="og:url" content="https://www.powerlanguage.co.uk/wordle/">
<meta property="og:type" content="website">
<meta property="og:title" content="Wordle - A daily word game">
<meta property="og:description" content="Guess the hidden word in 6 tries. A new puzzle is available each day.">
<meta property="og:image" content="wordle_og_1200x630.png">
<!-- Twitter Meta Tags -->
<meta name="twitter:card" content="summary_large_image">
<!-- <meta property="twitter:domain" content="powerlanguage.co.uk"> -->
<meta name="theme-color" content="#6aaa64">
<!-- <link rel="manifest" href="https://www.powerlanguage.co.uk/wordle/manifest.json"> -->
<link href="http://127.0.0.1:8080/src/wordle_logo_32x32.png" rel="icon shortcut" sizes="3232">
<!-- <link href="https://www.powerlanguage.co.uk/wordle/images/wordle_logo_192x192.png" rel="apple-touch-icon"> -->
<link rel="stylesheet" type="text/css" href="data:text/css;charset=UTF-8;base64,LmhpZGRlbiB7CglkaXNwbGF5OiBub25lOwoJb3BhY2l0eTogMDsKCXRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKfQoKLm92ZXJsYXkgewoJcG9zaXRpb246IGFic29sdXRlOwoJd2lkdGg6IDEwMCU7CgloZWlnaHQ6IDEwMCU7Cgl0b3A6IDA7CglsZWZ0OiAwOwoJanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CgliYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kKTsKCWFuaW1hdGlvbjogU2xpZGVJbiAxMDBtcyBsaW5lYXI7Cgl6LWluZGV4OiAyMDAwOwp9Cgo6aG9zdChbb3Blbl0pIC5vdmVybGF5IHsKCWRpc3BsYXk6IGZsZXg7Cn0KCi5jb250ZW50IHsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCWNvbG9yOiB2YXIoLS1jb2xvci10b25lLTEpOwoJcGFkZGluZzogMCAzMnB4OwoJbWF4LXdpZHRoOiA1MDBweDsKCW1hcmdpbjogYXV0bzsKCW92ZXJmbG93LXk6IGF1dG87CgloZWlnaHQ6IDEwMCU7CglkaXNwbGF5OiBmbGV4OwoJZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoKLmNvbnRlbnQtY29udGFpbmVyIHsKCWhlaWdodDogMTAwJTsKfQoKLm92ZXJsYXkuY2xvc2luZyB7CglhbmltYXRpb246IFNsaWRlT3V0IDE1MG1zIGxpbmVhcjsKfQoKaGVhZGVyIHsKCWRpc3BsYXk6IGZsZXg7CglqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKCWFsaWduLWl0ZW1zOiBjZW50ZXI7Cglwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCmgxIHsKCWZvbnQtd2VpZ2h0OiA3MDA7Cglmb250LXNpemU6IDE2cHg7CglsZXR0ZXItc3BhY2luZzogMC41cHg7Cgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKZ2FtZS1pY29uIHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXJpZ2h0OiAwOwoJdXNlci1zZWxlY3Q6IG5vbmU7CgljdXJzb3I6IHBvaW50ZXI7Cn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6MzIwcHgpIGFuZCAobWF4LWRldmljZS13aWR0aDo0ODBweCkgewoJLmNvbnRlbnQgewoJCW1heC13aWR0aDogMTAwJTsKCQlwYWRkaW5nOiAwOwoJfQoKCWdhbWUtaWNvbiB7CgkJcGFkZGluZzogMCAxNnB4OwoJfQoKfQoKQGtleWZyYW1lcyBTbGlkZUluIHsKCTAlIHsKCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzBweCk7CgkJb3BhY2l0eTogMDsKCX0KCgkxMDAlIHsKCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKCQlvcGFjaXR5OiAxOwoJfQoKfQoKQGtleWZyYW1lcyBTbGlkZU91dCB7CgkwJSB7CgkJdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CgkJb3BhY2l0eTogMTsKCX0KCgk5MCUgewoJCW9wYWNpdHk6IDA7Cgl9CgoJMTAwJSB7CgkJb3BhY2l0eTogMDsKCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNjBweCk7Cgl9Cgp9CgoKICAuc2V0dGluZyB7CgogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjI1czsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXRvbmUtNCk7CiAgICBwYWRkaW5nOiAxNnB4IDA7CiAgfQoKICBhLCBhOnZpc2l0ZWQgewogICAgY29sb3I6IHZhcigtLWNvbG9yLXRvbmUtMik7CiAgfQoKICAudGl0bGUgewogICAgZm9udC1zaXplOiAxOHB4OwogIH0KICAudGV4dCB7CiAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgfQogIC5kZXNjcmlwdGlvbiB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29sb3ItdG9uZS0yKTsKICB9CgogICNmb290bm90ZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgY29sb3I6IHZhcigtLWNvbG9yLXRvbmUtMik7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgfQoKICAjcHJpdmFjeS1wb2xpY3ksCiAgI2NvcHlyaWdodCB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogIH0KCiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IDMyMHB4KSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiA0ODBweCkgewogICAgLnNldHRpbmcgewogICAgICBwYWRkaW5nOiAxNnB4OwogICAgfQogIH0KCgoKLmZsYXNoIHsKCWJhY2tncm91bmQtY29sb3I6ICB2YXIoLS1jb2xvci10b25lLTIpOwoJdHJhbnNpdGlvbjogIGJhY2tncm91bmQtY29sb3IgMC4xcyBlYXNlLW91dDsKfQoKI2lucHV0bG9hZCB7CglwYWRkaW5nOiAgMC41ZW0gMDsKfQ==">
<style>
/* Global Styles & Colors */
:root {
--green: #6aaa64;
--darkendGreen: #538d4e;
--yellow: #c9b458;
--darkendYellow: #b59f3b;
--lightGray: #d8d8d8;
--gray: #86888a;
--darkGray: #939598;
--white: #fff;
--black: #212121;
/* Colorblind colors */
--orange: #f5793a;
--blue: #85c0f9;
font-family: "Clear Sans", "Helvetica Neue", Arial, sans-serif;
font-size: 16px;
--header-height: 50px;
--keyboard-height: 200px;
--game-max-width: 500px;
}
/* Light theme colors */
:root {
--color-tone-1: #1a1a1b;
--color-tone-2: #787c7e;
--color-tone-3: #878a8c;
--color-tone-4: #d3d6da;
--color-tone-5: #edeff1;
--color-tone-6: #f6f7f8;
--color-tone-7: #ffffff;
--opacity-50: rgba(255, 255, 255, 0.5);
}
/* Dark Theme Colors */
.nightmode {
--color-tone-1: #d7dadc;
--color-tone-2: #818384;
--color-tone-3: #565758;
--color-tone-4: #3a3a3c;
--color-tone-5: #272729;
--color-tone-6: #1a1a1b;
--color-tone-7: #121213;
--opacity-50: rgba(0, 0, 0, 0.5);
}
/* Constant colors and colors derived from theme */
:root,
.nightmode {
--color-background: var(--color-tone-7);
}
:root {
--color-present: var(--yellow);
--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-evaluated-text-color: var(--color-tone-7);
--key-bg: var(--color-tone-4);
--key-bg-present: var(--color-present);
--key-bg-correct: var(--color-correct);
--key-bg-absent: var(--color-absent);
--modal-content-bg: var(--color-tone-7);
}
.nightmode {
--color-present: var(--darkendYellow);
--color-correct: var(--darkendGreen);
--color-absent: var(--color-tone-4);
--tile-text-color: var(--color-tone-1);
--key-text-color: var(--color-tone-1);
--key-evaluated-text-color: var(--color-tone-1);
--key-bg: var(--color-tone-2);
--key-bg-present: var(--color-present);
--key-bg-correct: var(--color-correct);
--key-bg-absent: var(--color-absent);
--modal-content-bg: var(--color-tone-7);
}
.colorblind {
--color-correct: var(--orange);
--color-present: var(--blue);
--tile-text-color: var(--white);
--key-bg-present: var(--color-present);
--key-bg-correct: var(--color-correct);
--key-bg-absent: var(--color-absent);
}
html {
height: 100%;
}
body {
height: 100%;
background-color: var(--color-background);
margin: 0;
padding: 0;
/* Prevent scrollbar appearing on page transition */
overflow-y: hidden;
}
</style>
</head>
<body class="nightmode">
<game-app></game-app>
<div id="header-container" style="display: none;">
<style>
.toaster {
position: absolute;
top: 10%;
left: 50%;
transform: translate(-50%, 0);
pointer-events: none;
width: fit-content;
}
#game-toaster {
z-index: ".concat(1e3, ";
}
#system-toaster {
z-index: ").concat(4e3, ";
}
#game {
width: 100%;
max-width: var(--game-max-width);
margin: 0 auto;
height: 100%;
display: flex;
flex-direction: column;
}
header {
display: flex;
justify-content: space-between;
align-items: center;
height: var(--header-height);
color: var(--color-tone-1);
border-bottom: 1px solid var(--color-tone-4);
}
header .title {
font-weight: 700;
font-size: 36px;
letter-spacing: 0.2rem;
text-transform: uppercase;
text-align: center;
position: absolute;
left: 0;
right: 0;
pointer-events: none;
}
@media (max-width: 360px) {
header .title {
font-size: 22px;
letter-spacing: 0.1rem;
}
}
#board-container {
display: flex;
justify-content: center;
align-items: center;
flex-grow: 1;
overflow: hidden;
}
#board {
display: grid;
grid-template-rows: repeat(6, 1fr);
grid-gap: 5px;
padding: 10px;
box-sizing: border-box;
}
button.icon {
background: none;
border: none;
cursor: pointer;
padding: 0 4px;
}
#debug-tools {
position: absolute;
bottom: 0;
}
#save-buttion game-icon svg path {
transform: translate(-1.99 -2.72);
fill: none !important;
stroke: #000;
stroke-miterlimit: 10;
stroke-width: 2px
}
</style>
<game-theme-manager>
<div id="game">
<header>
<div class="menu">
<button id="help-button" class="icon" aria-label="help">
<game-icon icon="help"></game-icon>
</button>
</div>
<div class="title">
WORDLE
</div>
<div class="menu">
<button id="save-button" class="icon" aria-label="save">
<game-icon icon="save"></game-icon>
</button>
<button id="statistics-button" class="icon" aria-label="statistics">
<game-icon icon="statistics"></game-icon>
</button>
<button id="settings-button" class="icon" aria-label="settings">
<game-icon icon="settings"></game-icon>
</button>
</div>
</header>
<div id="board-container">
<div id="board"></div>
</div>
<game-keyboard></game-keyboard>
<game-modal></game-modal>
<game-page></game-page>
<div class="toaster" id="game-toaster"></div>
<div class="toaster" id="system-toaster"></div>
</div>
<div id="debug-tools"></div>
</game-theme-manager></div>
<div id="save" class="hidden">
<div class="overlay">
<div class="content">
<header>
<h1>
<slot></slot>
</h1>
<game-icon id="save-close" icon="close"></game-icon>
</header>
<div class="content-container">
<slot name="content">
<div class="sections">
<section>
<div class="setting" id="saveButton">
<div class="text">
<div class="title">Save Stats</div>
<div class="description">Save stats to the clipboard</div>
</div>
</div>
<div class="setting" id="loadButton">
<div class="text">
<div class="title">Load Stats</div>
<div class="description">To get your stats from <a href="https://www.powerlanguage.co.uk/wordle/">original wordle</a>, install <a href="https://www.tampermonkey.net/">Tampermonkey</a> and <a href="wordle_stats_export.user.js">this script</a>. Then go to that page, right click, and select Tampermonkey > Wordle Export Stats.</div>
<input id="inputtext" type="text">
<input id="inputload" type="button" value="Import">
</div>
</div>
</section>
</div>
</slot>
</div>
</div>
</div>
</div>
<script async="" src="wordle.js"></script>
<script async="" src="custom.js"></script>
<script>
(function() {
// Defining the hash before the main bundle allows the bundle access window.hash
window.wordle = window.wordle || {};
window.wordle.hash = 'e65ce0a5';
})();
</script>
</body></html>

@ -1,17 +0,0 @@
{
"currentStreak": 0,
"maxStreak": 0,
"guesses": {
"1": 0,
"2": 20,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"fail": 0
},
"winPercentage": 0,
"gamesPlayed": 0,
"gamesWon": 0,
"averageGuesses": 0
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,17 @@
// ==UserScript==
// @name Wordle Export Stats
// @namespace https://hollymcfarland.com
// @version 1.0
// @description Export stats from wordle to clipboard
// @author monorail
// @match https://www.powerlanguage.co.uk/wordle/
// @icon https://www.google.com/s2/favicons?domain=powerlanguage.co.uk
// @grant none
// @run-at context-menu
// ==/UserScript==
(function() {
'use strict';
navigator.clipboard.writeText(window.localStorage.getItem('statistics'));
})();
Loading…
Cancel
Save