views/wonk.js (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
export function addguesscontrols(elem, word, wordlist, xid) { var host = elem.parentElement elem.innerHTML = "loading..." host.correctAnswer = word host.guesses = [] host.xid = xid var xhr = new XMLHttpRequest() xhr.open("GET", "/bloat/wonkles?w=" + escape(wordlist)) xhr.responseType = "json" xhr.onload = function() { var wordlist = xhr.response.wordlist var validguesses = {} console.log("valid " + wordlist.length) for (var i = 0; i < wordlist.length; i++) { validguesses[wordlist[i]] = true } host.validGuesses = validguesses var div = document.createElement( 'div' ); div.innerHTML = "<p><input> <button onclick='return makeaguess(this)'>guess</button>" host.append(div) elem.remove() } xhr.send() } export function makeaguess(btn) { var host = btn.parentElement.parentElement.parentElement var correct = host.correctAnswer var valid = host.validGuesses var inp = btn.previousElementSibling var g = inp.value.toLowerCase() var res = "" if (valid[g]) { var letters = {} var obfu = "" for (var i = 0; i < correct.length; i++) { var l = correct[i] letters[l] = (letters[l] | 0) + 1 } for (var i = 0; i < g.length && i < correct.length; i++) { if (g[i] == correct[i]) { letters[g[i]] = letters[g[i]] - 1 } } for (var i = 0; i < g.length; i++) { if (i < correct.length && g[i] == correct[i]) { res += g[i].toUpperCase() obfu += "🟩" } else if (letters[g[i]] > 0) { res += g[i] obfu += "🟨" letters[g[i]] = letters[g[i]] - 1 } else { obfu += "⬛" res += "." } } var div = document.createElement( 'div' ); div.innerHTML = "<p style='font-family: monospace'>" + res host.append(div) host.guesses.push(obfu) } else { var div = document.createElement( 'div' ); div.innerHTML = "<p> invalid guess" host.append(div) } var div = document.createElement( 'div' ); if (res == correct.toUpperCase()) { var mess = "<p>you are very smart!" mess += "<p>" + host.xid for (var i = 0; i < host.guesses.length; i++) { mess += "<p>" + host.guesses[i] } div.innerHTML = mess if (typeof(csrftoken) != "undefined") post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "wonk", "guesses": host.guesses.join("<p>"), "what": host.xid})) } else { div.innerHTML = "<p><input> <button onclick='return makeaguess(this)'>guess</button>" } host.append(div) btn.parentElement.remove() } |