split into multiple files again, change stats to use clipboard and add userscript for getting stats from original
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
@ -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…
Reference in new issue