diff --git a/ansible/playbooks/roles/video-control-server/files/all.css b/ansible/playbooks/roles/video-control-server/files/all.css
new file mode 100644
index 00000000..08ad25df
--- /dev/null
+++ b/ansible/playbooks/roles/video-control-server/files/all.css
@@ -0,0 +1,27 @@
+body {
+ margin: 0px;
+ background: #1f212a;
+ color: #fefefe;
+}
+img {
+ width: 100%
+}
+td {
+ /* width: 100px; */
+ box-shadow: inset 0px 0px 3px #575a5f;
+ background: #1f212a;
+ color: #fefefe;
+ padding: 2px
+}
+
+#list td > * {
+ display: block;
+}
+
+h3 {
+ padding: 0px;
+ margin: 0px;
+ text-align: center;
+ font-weight: 400;
+ font-size: 1em;
+}
diff --git a/ansible/playbooks/roles/video-control-server/files/all.html b/ansible/playbooks/roles/video-control-server/files/all.html
index c7abd96d..b4e0f403 100644
--- a/ansible/playbooks/roles/video-control-server/files/all.html
+++ b/ansible/playbooks/roles/video-control-server/files/all.html
@@ -2,396 +2,13 @@
-
-
- janson
-
-
-
-
-
-
-
-
-
-
- |
-
-
- aw1120
-
-
-
-
-
-
-
-
-
-
- |
-
- aw1121
-
-
-
-
-
-
-
-
-
-
- |
-
-
- aw1125
-
-
-
-
-
-
-
-
-
-
- |
-
-
- aw1126
-
-
-
-
-
-
-
-
-
-
- |
-
-
- h1302
-
-
-
-
-
-
-
-
-
-
- |
-
-
- h1308
-
-
-
-
-
-
-
-
-
-
- |
-
-
- h1309
-
-
-
-
-
-
-
-
-
-
- |
-
- h2213
-
-
-
-
-
-
-
-
-
-
- |
-
-
-
-
-
- h2214
-
-
-
-
-
-
-
-
-
-
- |
-
-
- h2215
-
-
-
-
-
-
-
-
-
-
- |
-
-
- k1105
-
-
-
-
-
-
-
-
-
-
- |
-
-
- k3201
-
-
-
-
-
-
-
-
-
-
- |
-
-
- k3401
-
-
-
-
-
-
-
-
-
-
- |
-
-
- k4201
-
-
-
-
-
-
-
-
-
-
- |
-
-
- k4401
-
-
-
-
-
-
-
-
-
-
- |
-
-
- k4601
-
-
-
-
-
-
-
-
-
-
- |
-
-
- ua2114
-
-
-
-
-
-
-
-
-
-
- |
-
- ua2118
-
-
-
-
-
-
-
-
-
-
- |
-
-
-
-
-
- ua2220
-
-
-
-
-
-
-
-
-
-
- |
-
- ub5132
-
-
-
-
-
-
-
-
-
-
- |
-
-
- ub2252a
-
-
-
-
-
-
-
-
-
-
- |
-
-
- ud2120
-
-
-
-
-
-
-
-
-
-
- |
- ud2119
-
-
-
-
-
-
-
-
-
-
- |
-
- ud2208
-
-
-
-
-
-
-
-
-
-
- |
-
-
-
- ud2218a
-
-
-
-
-
-
-
-
-
-
- |
-
+
+
-
-
diff --git a/ansible/playbooks/roles/video-control-server/files/all.js b/ansible/playbooks/roles/video-control-server/files/all.js
new file mode 100644
index 00000000..8d650f71
--- /dev/null
+++ b/ansible/playbooks/roles/video-control-server/files/all.js
@@ -0,0 +1,65 @@
+function create_add (tag, parent) {
+ var el = document.createElement(tag);
+ parent.appendChild(el);
+ return el;
+}
+function getSearchParams () {
+ return window.location.search.slice(1)
+ .split('&').map(exp => exp.split('='))
+ .reduce((params, exp) => Object.assign({}, params, {[exp[0]]: exp[1]}), {});
+}
+function fetch_images() {
+ return Array.from(document.getElementsByTagName('img'));
+}
+function refresh() {
+ fetch_images().forEach(function(img) {
+ var src = img.src + '?';
+ src = src.split('?')[0];
+ img.src = src + '?' + Date.now()
+ })
+}
+function add_room (room_code, parent) {
+ var room = create_add("td", parent);
+ room.innerHTML = `
+ ${room_code}
+
+
+
+
+
+
+
+
+
+ `;
+}
+function init (cols) {
+ var params = getSearchParams();
+ console.log(params);
+ var listTable = document.querySelector('#list tbody');
+ listTable.innerHTML = '';
+ cols = cols || 10;
+ fetch('./config.json')
+ .then(res => res.json())
+ // .then(conf => Object.keys(conf))
+ .then(buildings => {
+ var rooms = params.building && buildings[params.building]
+ ? Object.keys(buildings[params.building])
+ : Object.keys(buildings)
+ .reduce((rooms, building) => [].concat(rooms, Object.keys(buildings[building])), []);
+ cols = rooms.length < cols ? rooms.length : cols;
+ rows = Math.ceil(rooms.length / cols);
+ new Array(rows).fill({})
+ .map(() => create_add('tr', listTable))
+ .map((row, y) => new Array(cols).fill({})
+ .map((n1, x) => rooms[y * cols + x] && add_room(
+ rooms[y * cols + x],
+ row
+ ))
+ .forEach(col => {
+ col && col.setAttribute('width', (100 / cols).toFixed(2) + '%');
+ })
+ )
+ setInterval(refresh, 10000);
+ })
+}
diff --git a/ansible/playbooks/roles/video-control-server/files/config.json b/ansible/playbooks/roles/video-control-server/files/config.json
new file mode 100644
index 00000000..af29faa6
--- /dev/null
+++ b/ansible/playbooks/roles/video-control-server/files/config.json
@@ -0,0 +1,45 @@
+{
+ "aw": {
+ "aw1120" : "aw1120-voctop.video.fosdem.org",
+ "aw1121" : "aw1121-voctop.video.fosdem.org",
+ "aw1125" : "aw1125-voctop.video.fosdem.org",
+ "aw1126" : "aw1126-voctop.video.fosdem.org"
+ },
+ "h": {
+ "h1301" : "h1301-voctop.video.fosdem.org",
+ "h1302" : "h1302-voctop.video.fosdem.org",
+ "h1308" : "h1308-voctop.video.fosdem.org",
+ "h1309" : "h1309-voctop.video.fosdem.org",
+ "h2213" : "h2213-voctop.video.fosdem.org",
+ "h2214" : "h2214-voctop.video.fosdem.org",
+ "h2215" : "h2215-voctop.video.fosdem.org"
+ },
+ "janson": {
+ "janson" : "janson-voctop.video.fosdem.org"
+ },
+ "k": {
+ "k1105" : "k1105-voctop.video.fosdem.org",
+ "k3201" : "k3201-voctop.video.fosdem.org",
+ "k3401" : "k3401-voctop.video.fosdem.org",
+ "k4201" : "k4201-voctop.video.fosdem.org",
+ "k4401" : "k4401-voctop.video.fosdem.org",
+ "k4601" : "k4601-voctop.video.fosdem.org"
+ },
+ "ua": {
+ "ua2114" : "ua2114-voctop.video.fosdem.org",
+ "ua2220" : "ua2220-voctop.video.fosdem.org"
+ },
+ "ub": {
+ "ub2147" : "ub2147-voctop.video.fosdem.org",
+ "ub2252a" : "ub2252a-voctop.video.fosdem.org",
+ "ub4136" : "ub4136-voctop.video.fosdem.org",
+ "ub5132" : "ub5132-voctop.video.fosdem.org",
+ "ub5230" : "ub5230-voctop.video.fosdem.org"
+ },
+ "ud": {
+ "ud2119" : "ud2119-voctop.video.fosdem.org",
+ "ud2120" : "ud2120-voctop.video.fosdem.org",
+ "ud2208" : "ud2208-voctop.video.fosdem.org",
+ "ud2218a" : "ud2218a-voctop.video.fosdem.org"
+ }
+}