Merge branch 'andy-arbeit' into 'master'
Some andy stuff See merge request panki/bingo!3
This commit is contained in:
commit
55935bbd99
20
index.html
20
index.html
@ -1,21 +1,19 @@
|
||||
<!doctype html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>Bingo</title>
|
||||
<meta name="description" content="Stammtisch Bingo">
|
||||
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<title>Bingo</title>
|
||||
<meta name="description" content="Stammtisch Bingo">
|
||||
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script src="script.js" defer></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>7 vs. Wild Bingo</h1>
|
||||
<table>
|
||||
</table>
|
||||
<script src="script.js"></script>
|
||||
<h1>7 vs. Wild Bingo <span id="refresh-bingo">🔄</span></h1>
|
||||
<table id="bingo"></table>
|
||||
<p id="seeed">Seeed: <span id="seeed-value"></span> <span id="copy-permalink">📋</span></p>
|
||||
</body>
|
||||
</html>
|
||||
|
253
script.js
253
script.js
@ -1,102 +1,137 @@
|
||||
let fields = [
|
||||
// 'MARTINAA/JAAAAA??!!',
|
||||
// '"Du bist doch auch so einer, der ..."',
|
||||
// 'Brain-AFK',
|
||||
// 'Rant über Kollegen',
|
||||
// 'Redet in StammTV rein',
|
||||
// 'Häää?',
|
||||
// 'Bin mal kurz mitem Hund',
|
||||
// '*schnupft*',
|
||||
// 'Habt ihr des neue ... schon gesehen?',
|
||||
// 'Random Nonsense-Problem',
|
||||
// 'Auf Ausbildung freuen',
|
||||
// 'Erzählt von Hinz und Kunz',
|
||||
// 'Was heißt eigentlich ...?',
|
||||
// 'Wiederholung',
|
||||
// 'Story geht länger als nötig',
|
||||
// 'Labert direkt los',
|
||||
// 'Haljo',
|
||||
// 'Klicken im Mikro',
|
||||
// 'Schlafen',
|
||||
// 'Akustik',
|
||||
// 'Spielt LoL',
|
||||
// 'Tamme Story',
|
||||
// 'Ich kam heut morgen auf Arbeit...',
|
||||
// 'Crypto / Fiat / Inflation ...'
|
||||
'Krokodil',
|
||||
'Blut zu sehen',
|
||||
'„Ich kämpfe“',
|
||||
'„Ich kann nicht mehr“',
|
||||
'jemand trinkt unsauberes Wasser',
|
||||
'jemand schneidet von einem lebenden Baum was ab',
|
||||
'Knossi raucht',
|
||||
'nackt',
|
||||
'jemand isst eine Kokosnuss',
|
||||
'stufenlos verstellbare Knoten',
|
||||
'“ich frag mich wie es den anderen so geht“',
|
||||
'Kleidung ist feucht/nass',
|
||||
'Joris verwirft seinen Tagesplan',
|
||||
'Sasha flext für die Kamera',
|
||||
'„Bist du deppert?“',
|
||||
'Sonnenbrand',
|
||||
'7 in the wild',
|
||||
'Aus Plastik Müll wird was gebaut',
|
||||
'Es wird geschrien',
|
||||
'es wird gesungen',
|
||||
'„mir ist kalt“',
|
||||
'Dinge bekommen Namen',
|
||||
'„das ist auf einem anderen Level"',
|
||||
'kleine Krebse',
|
||||
// 'MARTINAA/JAAAAA??!!',
|
||||
// '"Du bist doch auch so einer, der ..."',
|
||||
// 'Brain-AFK',
|
||||
// 'Rant über Kollegen',
|
||||
// 'Redet in StammTV rein',
|
||||
// 'Häää?',
|
||||
// 'Bin mal kurz mitem Hund',
|
||||
// '*schnupft*',
|
||||
// 'Habt ihr des neue ... schon gesehen?',
|
||||
// 'Random Nonsense-Problem',
|
||||
// 'Auf Ausbildung freuen',
|
||||
// 'Erzählt von Hinz und Kunz',
|
||||
// 'Was heißt eigentlich ...?',
|
||||
// 'Wiederholung',
|
||||
// 'Story geht länger als nötig',
|
||||
// 'Labert direkt los',
|
||||
// 'Haljo',
|
||||
// 'Klicken im Mikro',
|
||||
// 'Schlafen',
|
||||
// 'Akustik',
|
||||
// 'Spielt LoL',
|
||||
// 'Tamme Story',
|
||||
// 'Ich kam heut morgen auf Arbeit...',
|
||||
// 'Crypto / Fiat / Inflation ...'
|
||||
'Krokodil',
|
||||
'Blut zu sehen',
|
||||
'„Ich kämpfe“',
|
||||
'„Ich kann nicht mehr“',
|
||||
'jemand trinkt unsauberes Wasser',
|
||||
'jemand schneidet von einem lebenden Baum was ab',
|
||||
'Knossi raucht',
|
||||
'nackt',
|
||||
'jemand isst eine Kokosnuss',
|
||||
'stufenlos verstellbare Knoten',
|
||||
'“ich frag mich wie es den anderen so geht“',
|
||||
'Kleidung ist feucht/nass',
|
||||
'Joris verwirft seinen Tagesplan',
|
||||
'Sasha flext für die Kamera',
|
||||
'„Bist du deppert?“',
|
||||
'Sonnenbrand',
|
||||
'7 in the wild',
|
||||
'Aus Plastik Müll wird was gebaut',
|
||||
'Es wird geschrien',
|
||||
'es wird gesungen',
|
||||
'„mir ist kalt“',
|
||||
'Dinge bekommen Namen',
|
||||
'„das ist auf einem anderen Level"',
|
||||
'kleine Krebse',
|
||||
|
||||
];
|
||||
|
||||
const FREE_FIELD_TEXT = "Freies Parken"
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const seed_elem = document.querySelector('#seeed-value');
|
||||
|
||||
const seed = Date.now().toString();
|
||||
var prng_hash_seed = cyrb128(seed);
|
||||
let rand = sfc32(prng_hash_seed[0], prng_hash_seed[1], prng_hash_seed[2], prng_hash_seed[3]);
|
||||
let seed;
|
||||
if (urlParams.has('seeed')) {
|
||||
seed = urlParams.get('seeed');
|
||||
} else {
|
||||
seed = Date.now().toString();
|
||||
}
|
||||
|
||||
let shuffled = fields
|
||||
.map(value => ({ value, sort: rand() }))
|
||||
.sort((a, b) => a.sort - b.sort)
|
||||
.map(({ value }) => value)
|
||||
const copyPermalinkButton = document.querySelector('#copy-permalink');
|
||||
const copyPermalinkToClipboard = function () {
|
||||
const permalink = window.location.href;
|
||||
navigator.clipboard.writeText(permalink);
|
||||
}
|
||||
copyPermalinkButton.addEventListener('click', copyPermalinkToClipboard);
|
||||
|
||||
shuffled.splice(12, 0, FREE_FIELD_TEXT);
|
||||
|
||||
function generateTable() {
|
||||
const generateTable = function () {
|
||||
let prng_hash_seed = cyrb128(seed);
|
||||
let rand = sfc32(prng_hash_seed[0], prng_hash_seed[1], prng_hash_seed[2], prng_hash_seed[3]);
|
||||
|
||||
let table = document.querySelector("table");
|
||||
let thead = table.createTHead();
|
||||
let row = null;//thead.insertRow();
|
||||
shuffled.forEach(function(field, index) {
|
||||
if (index % 5 == 0){
|
||||
row = thead.insertRow();
|
||||
}
|
||||
let cell = row.insertCell();
|
||||
let shuffled = fields
|
||||
.map(value => ({value, sort: rand()}))
|
||||
.sort((a, b) => a.sort - b.sort)
|
||||
.map(({value}) => value)
|
||||
|
||||
let text = document.createTextNode(field);
|
||||
if (field == FREE_FIELD_TEXT) {
|
||||
cell.id = 'center-field';
|
||||
}
|
||||
cell.appendChild(text);
|
||||
});
|
||||
table.addEventListener('click', (ev) => {
|
||||
let cell;
|
||||
let target_type = ev.target.tagName.toLowerCase();
|
||||
if (target_type === "td" || target_type === "img") {
|
||||
let cell = ev.target;
|
||||
if (target_type === "img") {
|
||||
cell = ev.target.parentNode;
|
||||
shuffled.splice(12, 0, FREE_FIELD_TEXT);
|
||||
|
||||
return shuffled;
|
||||
}
|
||||
|
||||
const drawTable = function () {
|
||||
let shuffled = generateTable();
|
||||
|
||||
const bingoTable = document.querySelector('#bingo');
|
||||
let table = document.createElement('table');
|
||||
table.id = 'bingo';
|
||||
let tableBody = document.createElement('tbody');
|
||||
let row;
|
||||
shuffled.forEach((field, index) => {
|
||||
if (index % 5 === 0) {
|
||||
row = tableBody.insertRow();
|
||||
}
|
||||
if (cell.style.borderColor == "green") {
|
||||
cell.style.borderColor = "black";
|
||||
cell.style.backgroundColor = "white";
|
||||
let cell = row.insertCell();
|
||||
|
||||
let text = document.createTextNode(field);
|
||||
if (field === FREE_FIELD_TEXT) {
|
||||
cell.className = 'center-field';
|
||||
}
|
||||
cell.appendChild(text);
|
||||
});
|
||||
table.appendChild(tableBody);
|
||||
bingoTable.replaceWith(table);
|
||||
|
||||
table.addEventListener('click', (ev) => {
|
||||
let cell;
|
||||
let target_type = ev.target.tagName.toLowerCase();
|
||||
|
||||
if (target_type === "td") {
|
||||
cell = ev.target;
|
||||
} else if (target_type === "img") {
|
||||
cell = ev.target.parentNode;
|
||||
}
|
||||
|
||||
if (cell) {
|
||||
if (cell.classList.contains('drawn')) {
|
||||
cell.classList.remove('drawn');
|
||||
} else {
|
||||
cell.classList.add('drawn');
|
||||
}
|
||||
} else {
|
||||
cell.style.borderColor = "green";
|
||||
cell.style.backgroundColor = "green";
|
||||
console.error('Sum ting wong (*  ̄︿ ̄)');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
seed_elem.innerText = seed;
|
||||
window.history.pushState(null, null, '?seeed=' + seed);
|
||||
|
||||
const center_field = document.querySelector('.center-field');
|
||||
center_field.innerHTML = '<img src="img/7-vs-wild-logo.svg" alt="7 vs. Wild Logo">'
|
||||
}
|
||||
|
||||
// hash function, thx stackoverflow :3
|
||||
@ -114,37 +149,41 @@ function cyrb128(str) {
|
||||
h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);
|
||||
h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);
|
||||
h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);
|
||||
return [(h1^h2^h3^h4)>>>0, (h2^h1)>>>0, (h3^h1)>>>0, (h4^h1)>>>0];
|
||||
return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];
|
||||
}
|
||||
|
||||
function sfc32(a, b, c, d) {
|
||||
return function() {
|
||||
a >>>= 0; b >>>= 0; c >>>= 0; d >>>= 0;
|
||||
var t = (a + b) | 0;
|
||||
a = b ^ b >>> 9;
|
||||
b = c + (c << 3) | 0;
|
||||
c = (c << 21 | c >>> 11);
|
||||
d = d + 1 | 0;
|
||||
t = t + d | 0;
|
||||
c = c + t | 0;
|
||||
return (t >>> 0) / 4294967296;
|
||||
return function () {
|
||||
a >>>= 0;
|
||||
b >>>= 0;
|
||||
c >>>= 0;
|
||||
d >>>= 0;
|
||||
var t = (a + b) | 0;
|
||||
a = b ^ b >>> 9;
|
||||
b = c + (c << 3) | 0;
|
||||
c = (c << 21 | c >>> 11);
|
||||
d = d + 1 | 0;
|
||||
t = t + d | 0;
|
||||
c = c + t | 0;
|
||||
return (t >>> 0) / 4294967296;
|
||||
}
|
||||
}
|
||||
|
||||
function mulberry32(a) {
|
||||
return function() {
|
||||
var t = a += 0x6D2B79F5;
|
||||
t = Math.imul(t ^ t >>> 15, t | 1);
|
||||
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
|
||||
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
||||
return function () {
|
||||
var t = a += 0x6D2B79F5;
|
||||
t = Math.imul(t ^ t >>> 15, t | 1);
|
||||
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
|
||||
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
generateTable();
|
||||
const center_field = document.querySelector('#center-field');
|
||||
center_field.innerHTML = '<img src="img/7-vs-wild-logo.svg" alt="7 vs. Wild Logo"></img>'
|
||||
drawTable();
|
||||
|
||||
let seed_elem = document.createElement('p');
|
||||
seed_elem.innerText = seed;
|
||||
document.body.appendChild(seed_elem);
|
||||
const refreshBingoButton = document.querySelector('#refresh-bingo');
|
||||
const redrawTable = function () {
|
||||
seed = Date.now().toString();
|
||||
drawTable()
|
||||
}
|
||||
refreshBingoButton.addEventListener('click', redrawTable)
|
||||
|
53
style.css
53
style.css
@ -1,25 +1,56 @@
|
||||
table, th, td {
|
||||
border: 1px solid;
|
||||
body {
|
||||
font-family: monospace;
|
||||
height: 95vh;
|
||||
width: 95vw;
|
||||
overflow: hidden;
|
||||
margin: 0 auto;
|
||||
|
||||
user-select: none;
|
||||
|
||||
background-color: #222;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
td {
|
||||
text-align: center;
|
||||
height: 100px;
|
||||
text-align: center;
|
||||
height: calc(100vh / 6);
|
||||
transition: background-color ease-out .350s;
|
||||
border-radius: 40px;
|
||||
font-size: xx-large;
|
||||
}
|
||||
|
||||
font-size: 200%;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
td:hover {
|
||||
background-color: blueviolet;
|
||||
}
|
||||
|
||||
td.drawn {
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
td.center-field {
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
max-height: calc(100vh / 6);
|
||||
max-width: calc(100vh / 6);
|
||||
}
|
||||
|
||||
h1, p {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
text-align: center;
|
||||
margin: 5px;
|
||||
text-align: center;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
p#seeed{
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
span#copy-permalink, span#refresh-bingo {
|
||||
cursor: pointer;
|
||||
}
|
Loading…
Reference in New Issue
Block a user