git.s-ol.nu mmm / 3564a93
games/fake-artist: better UI s-ol 3 years ago
2 changed file(s) with 74 addition(s) and 17 deletion(s). Raw diff Collapse all Expand all
2424 overflow: hidden;
2525 }
2626
27 h2 {
28 display: block;
29 margin: 0;
27 header {
3028 padding: .5rem;
3129 background: #696969;
3230 color: #eeeeee;
31 }
32
33 h2 {
34 margin: 0;
3335 }
3436
3537 #main, #setup {
5254 }
5355 main .inner > div > input {
5456 flex: 1;
57 width: 0;
5558 margin-left: 1em;
5659 }
5760
6265 display: block;
6366 }
6467
65 span {
68 .sensitive {
69 position: relative;
70
71 padding: 0.3em;
72 border: 0.2em solid #696969;
73 }
74
75 .sensitive .cover {
76 position: absolute;
77 top: 0;
78 left: 0;
79 right: 0;
80 bottom: 0;
81 padding: 0.5em;
82 color: #eeeeee;
83 background: #696969;
84 transition: opacity 300ms;
85 }
86
87 .sensitive:hover .cover {
88 opacity: 0;
89 pointer-events: none;
90 }
91
92 pre {
6693 font-size: 2em;
6794 font-weight: bold;
95 margin: 0;
6896 }
69 span.spy {
97 pre.spy {
7098 color: #c33;
7199 }
72100
75103 </head>
76104 <body>
77105 <main>
78 <h2>Fake Artist</h2>
106 <header>
107 <h2>Fake Artist</h2>
108 <div id="head"></div>
109 </header>
79110 <div id="setup" class="inner">
80111 <div>spies: <input id="spies" type="number" value="1" /></div>
81112 <div>players:</div>
231231 ];
232232
233233 const main = document.getElementById('main');
234 const head = document.getElementById('head');
234235 const players = document.getElementById('players');
235236 const spies = document.getElementById('spies');
236237 const name = document.getElementById('name');
251252 };
252253
253254 const genSeed = rng => (
254 words[Math.floor(rng() * words.length)].replace(' ', '-')
255 + '_' + words[Math.floor(rng() * words.length)].replace(' ', '-')
256 + '_' + words[Math.floor(rng() * words.length)].replace(' ', '-')
255 words[Math.floor(rng() * words.length)].replace(' ', '-').toLowerCase()
256 + '_' + words[Math.floor(rng() * words.length)].replace(' ', '-').toLowerCase()
257 + '_' + words[Math.floor(rng() * words.length)].replace(' ', '-').toLowerCase()
257258 );
258259
259260 const update = (hash) => {
264265 while (main.lastChild)
265266 main.removeChild(main.lastChild);
266267
268 while (head.lastChild)
269 head.removeChild(head.lastChild);
270
267271 if (mode === '#link') {
272 const code = document.createElement('code');
273 code.innerText = seed;
274 head.append(code);
275
268276 document.body.className = '';
269277 names.forEach((name, i) => {
270278 const a = document.createElement('a');
285293 main.append(document.createElement('br'));
286294 main.append(a);
287295 } else if (mode === '#play') {
296 const code = document.createElement('code');
297 code.innerText = seed;
298 head.append(code);
299
288300 document.body.className = '';
289301 const i = names.pop();
290302
292304 const list = names.map((x, i) => i < +n);
293305 shuffle(list, rng);
294306
307 const div = document.createElement('div');
308 div.className = 'sensitive';
309
295310 if (list[+i]) {
296 main.append("you are a");
297 main.append(document.createElement('br'));
298 const span = document.createElement('span');
311 const span = document.createElement('pre');
299312 span.className = 'spy';
300313 span.innerText = 'SPY!';
301 main.append(span);
314 div.append("you are a");
315 div.append(document.createElement('br'));
316 div.append(span);
302317 } else {
303 main.append("the word is");
304 main.append(document.createElement('br'));
305 const span = document.createElement('span');
318 const span = document.createElement('pre');
306319 span.innerText = word;
307 main.append(span);
320 div.append("the word is");
321 div.append(document.createElement('br'));
322 div.append(span);
308323 }
324
325 const cover = document.createElement('div');
326 cover.className = 'cover';
327 cover.innerText = '(hover here)';
328 cover.innerText = `${names[i]}, please hover here to read.`;
329 div.append(cover);
309330
310331 const a = document.createElement('a');
311332 a.innerText = 'next round';
312333 a.href = `#play,${nextSeed},${n},${names.join(',')},${i}`;
313334 infect(a);
335
336 main.append(div);
314337 main.append(document.createElement('br'));
315338 main.append(a);
316339 } else {
324347 infect(a);
325348
326349 add.onclick = () => {
350 if (!name.value)
351 return;
352
327353 const li = document.createElement('li');
328354 li.innerText = name.value;
329355 players.append(li);