Oscar Ballot Bingo 2017
To print, go here and print from your browser in landscape:
http://bl.ocks.org/audionerd/raw/3fb820c3380a451f232822d5d52cc01a
To print, go here and print from your browser in landscape:
http://bl.ocks.org/audionerd/raw/3fb820c3380a451f232822d5d52cc01a
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<title>Oscar Ballot Bingo 2017</title> | |
<!-- | |
TIPS: | |
Print in Landscape | |
Edit LINES to change the lines (must be 24 lines) | |
Change x for # per cards page | |
Change y for # of pages | |
--> | |
<style> | |
*, *:before, *:after { | |
box-sizing: inherit; | |
} | |
html { | |
box-sizing: border-box; | |
} | |
body { | |
margin: 0; | |
font-size: 11px; | |
font-family: "Helvetica Neue"; | |
line-height: 1.4; | |
} | |
table { | |
padding: 0; | |
margin: 0; | |
border-collapse: collapse; | |
} | |
tr { | |
padding: 0; | |
margin: 0; | |
} | |
td { | |
margin: 0; | |
padding: 0; | |
border: 1px solid black; | |
} | |
.free { | |
background: url('http://static.rogerebert.com/uploads/review/primary_image/reviews/the-great-gatsby-2013/hero_gatsbywide.png') no-repeat center center; | |
background-size: cover; | |
color: white; | |
font-weight: bold; | |
-webkit-text-stroke-width: 1px; | |
-webkit-text-stroke-color: black; | |
font-size: 18px; | |
} | |
.page { | |
overflow: hidden; | |
clear: both; | |
border-collapse: collapse; | |
} | |
.area { | |
float: left; | |
margin: 0.1in; | |
} | |
.cell { | |
width: 0.96in; | |
height: 0.96in; | |
padding: 0.1in; | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
} | |
.inner { | |
text-align: center; | |
} | |
</style> | |
<style type="text/css" media="print"> | |
* { -webkit-print-color-adjust:exact; } | |
div.page { | |
page-break-after: always; | |
page-break-inside: avoid; | |
} | |
</style> | |
</head> | |
<body> | |
<script type="text/javascript"> | |
const LINES = [ | |
'Agent is thanked', | |
'Mom thanked but not Dad', | |
'Meryl Streep Looks Overly Enthusiastic', | |
'Climate change', | |
'Casey Affleck doesn’t laugh at a joke', | |
'Clooney’s having twins gets mentioned', | |
'Lin-Manuel Miranda is called a genius', | |
'Someone makes a Trump joke', | |
'Standing ovation', | |
'"Fake news"', | |
'"Alternative facts"', | |
'Winner cries', | |
'A loser doesn’t hide their disappointment', | |
'Academy is thanked', | |
'Trump is referenced without saying his name', | |
'Someone mentions #OscarsSoWhite', | |
'Jimmy Kimmel sings', | |
'La La Land gets spoofed', | |
'Someone mentions a hashtag in a speech', | |
'Wardrobe malfunction', | |
'Foreign winner speaks in foreign language', | |
'Speech cut off by music', | |
'Actress covers mouth with both hands in shock', | |
'Humbled' | |
] | |
</script> | |
<script type="text/javascript"> | |
// Fisher–Yates FTW | |
function shuffle(array) { | |
let counter = array.length; | |
// While there are elements in the array | |
while (counter > 0) { | |
// Pick a random index | |
let index = Math.floor(Math.random() * counter); | |
// Decrease counter by 1 | |
counter--; | |
// And swap the last element with it | |
let temp = array[counter]; | |
array[counter] = array[index]; | |
array[index] = temp; | |
} | |
return array; | |
} | |
let renderCell = (str, isFreeSpace) => | |
`<td class="${isFreeSpace ? 'free' : ''}"><div class="cell"><div class="inner">${str}</div></div></td>` | |
let y = 0 | |
while (y < 8) { | |
let el = document.createElement('div') | |
let str = [] | |
str.push(`<div class="page">`) | |
let x = 0 | |
while (x < 2) { | |
let lines = JSON.parse(JSON.stringify(LINES)) | |
shuffle(lines) | |
lines.splice(12, 0, 'FREE') | |
str.push(`<div class="area">`) | |
str.push(`<table cellpadding="0">`) | |
str.push(`<tr>`) | |
str.push(renderCell(lines[0])) | |
str.push(renderCell(lines[1])) | |
str.push(renderCell(lines[2])) | |
str.push(renderCell(lines[3])) | |
str.push(renderCell(lines[4])) | |
str.push(`</tr>`) | |
str.push(`<tr>`) | |
str.push(renderCell(lines[5])) | |
str.push(renderCell(lines[6])) | |
str.push(renderCell(lines[7])) | |
str.push(renderCell(lines[8])) | |
str.push(renderCell(lines[9])) | |
str.push(`</tr>`) | |
str.push(`<tr>`) | |
str.push(renderCell(lines[10])) | |
str.push(renderCell(lines[11])) | |
str.push(renderCell(lines[12], true)) | |
str.push(renderCell(lines[13])) | |
str.push(renderCell(lines[14])) | |
str.push(`</tr>`) | |
str.push(`<tr>`) | |
str.push(renderCell(lines[15])) | |
str.push(renderCell(lines[16])) | |
str.push(renderCell(lines[17])) | |
str.push(renderCell(lines[18])) | |
str.push(renderCell(lines[19])) | |
str.push(`</tr>`) | |
str.push(`<tr>`) | |
str.push(renderCell(lines[20])) | |
str.push(renderCell(lines[21])) | |
str.push(renderCell(lines[22])) | |
str.push(renderCell(lines[23])) | |
str.push(renderCell(lines[24])) | |
str.push(`</tr>`) | |
str.push(`</table>`) | |
str.push(`</div>`) | |
x++ | |
} | |
str.push(`</div>`) | |
el.innerHTML = str.join('') | |
document.body.appendChild(el) | |
y++ | |
} | |
</script> | |
</body> | |
</html> |