Add Fahrplan + other fixes
This commit is contained in:
parent
5f1b207d6a
commit
a6d0ea52f4
133
index.css
133
index.css
|
@ -1,71 +1,136 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: orbitron-bold;
|
||||||
|
src: url(assets/Orbitron-Bold.ttf);
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: montserrat;
|
||||||
|
src: url(assets/Montserrat-Regular.ttf);
|
||||||
|
}
|
||||||
|
|
||||||
|
* { box-sizing: border-box; }
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background: #000;
|
background: #000;
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* === FAHRPLAN === */
|
||||||
|
#schedule {
|
||||||
|
position: fixed;
|
||||||
|
left: 5%;
|
||||||
|
right: 5%;
|
||||||
|
top: 10%;
|
||||||
|
bottom: 10%;
|
||||||
|
|
||||||
|
font-family: orbitron-bold;
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schedule .header {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schedule .list .item {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schedule .list .item .title {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schedule .list .item .sub {
|
||||||
|
color: #7b7b7b;
|
||||||
|
font-size: 24px;
|
||||||
|
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schedule-here-container {
|
||||||
|
position: absolute;
|
||||||
|
right: 52%;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schedule-main-container {
|
||||||
|
position: absolute;
|
||||||
|
right: 52%;
|
||||||
|
left: 0;
|
||||||
|
top: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schedule-other-container {
|
||||||
|
position: absolute;
|
||||||
|
left: 52%;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schedule-here-container .header {
|
||||||
|
color: #b145fb;
|
||||||
|
}
|
||||||
|
#schedule-main-container .header {
|
||||||
|
color: #6820e4;
|
||||||
|
}
|
||||||
|
#schedule-other-container .header {
|
||||||
|
color: #45b5e3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* === TICKER === */
|
||||||
#bottom-bar {
|
#bottom-bar {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
/*left: 0;*/
|
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
/*padding-left: 100%;
|
|
||||||
box-sizing: content-box;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
* { box-sizing: border-box; }
|
|
||||||
|
|
||||||
/* OUTER CONTAINER */
|
|
||||||
#bottom-bar {
|
|
||||||
width: 100%;
|
|
||||||
overflow: hidden; /* Hide scroll bar */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MIDDLE CONTAINER */
|
|
||||||
#ticker-wrap {
|
#ticker-wrap {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding-left: 100%; /* Push contents to right side of screen */
|
padding-left: 100%; /* Push contents to right side of screen */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* INNER CONTAINER */
|
|
||||||
@keyframes ticker {
|
@keyframes ticker {
|
||||||
0% { transform: translate3d(-20%, 0, 0); }
|
0% { transform: translate3d(-20%, 0, 0); }
|
||||||
100% { transform: translate3d(-100%, 0, 0); }
|
100% { transform: translate3d(-100%, 0, 0); }
|
||||||
}
|
}
|
||||||
|
|
||||||
#ticker {
|
#ticker {
|
||||||
/* Basically move items from right side of screen to left in infinite loop */
|
/* Basically move items from right side of screen to left in infinite loop */
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
padding-right: 100%;
|
padding-right: 100%;
|
||||||
animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
||||||
animation-timing-function: linear;
|
animation-timing-function: linear;
|
||||||
animation-name: ticker;
|
animation-name: ticker;
|
||||||
animation-duration: 120s;
|
animation-duration: 120s;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ITEMS */
|
#ticker > .item{
|
||||||
.item{
|
display: inline-block; /* Lay items in a horizontal line */
|
||||||
display: inline-block; /* Lay items in a horizontal line */
|
padding: 10px 36px;
|
||||||
padding: 10px 36px;
|
|
||||||
|
font-size: 22px;
|
||||||
font-size: 22px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.item > img {
|
#ticker > .item > img {
|
||||||
height: 32px;
|
height: 32px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item > span.user {
|
#ticker > .item > span.user {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
margin: 0 20px;
|
margin: 0 20px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item > span.content {
|
#ticker > .item > span.content {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
77
index.html
77
index.html
|
@ -10,6 +10,29 @@
|
||||||
</head>
|
</head>
|
||||||
<body style="background:#000">
|
<body style="background:#000">
|
||||||
<main>
|
<main>
|
||||||
|
<div id="schedule">
|
||||||
|
<div id="schedule-here-container">
|
||||||
|
<div class="header">
|
||||||
|
Next up here:
|
||||||
|
</div>
|
||||||
|
<div class="list" id="schedule-here">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="schedule-main-container">
|
||||||
|
<div class="header">
|
||||||
|
Next up on Main:
|
||||||
|
</div>
|
||||||
|
<div class="list" id="schedule-main">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="schedule-other-container">
|
||||||
|
<div class="header">
|
||||||
|
Next up on other channels:
|
||||||
|
</div>
|
||||||
|
<div class="list" id="schedule-other">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div id="bottom-bar" class="visible">
|
<div id="bottom-bar" class="visible">
|
||||||
<div id="ticker-wrap">
|
<div id="ticker-wrap">
|
||||||
<div id="ticker">
|
<div id="ticker">
|
||||||
|
@ -18,58 +41,6 @@
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script>
|
<script src="index.js"></script>
|
||||||
var tweets = {};
|
|
||||||
|
|
||||||
function update_tweets() {
|
|
||||||
var request = new XMLHttpRequest();
|
|
||||||
request.open('GET', 'https://api.oct.re/tweets-rc3.json', true);
|
|
||||||
request.onload = function() {
|
|
||||||
if (this.status >= 200 && this.status < 400) {
|
|
||||||
tweets = JSON.parse(this.response);
|
|
||||||
update_tweet_ticker();
|
|
||||||
} else {
|
|
||||||
// We reached our target server, but it returned an error
|
|
||||||
console.log(this);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
request.onerror = function(e) {
|
|
||||||
console.log(e);
|
|
||||||
};
|
|
||||||
request.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
function update_tweet_ticker() {
|
|
||||||
var ticker = document.getElementById("ticker");
|
|
||||||
ticker.innerHTML = "";
|
|
||||||
for (var i in tweets.data) {
|
|
||||||
//console.log(tweets.data[i].text);
|
|
||||||
var item = document.createElement("div");
|
|
||||||
item.className = "item";
|
|
||||||
|
|
||||||
var img = document.createElement("img");
|
|
||||||
img.src = tweets.includes.users[i].profile_image_url;
|
|
||||||
item.appendChild(img);
|
|
||||||
|
|
||||||
var user = document.createElement("span");
|
|
||||||
user.className = "user";
|
|
||||||
var uname = tweets.includes.users[i].username;
|
|
||||||
user.innerText = "@" + uname;
|
|
||||||
item.appendChild(user);
|
|
||||||
|
|
||||||
var content = document.createElement("span");
|
|
||||||
content.className = "content";
|
|
||||||
var text = tweets.data[i].text;
|
|
||||||
text = text.replace(/\n/g, "↲");
|
|
||||||
content.innerText = text;
|
|
||||||
item.appendChild(content);
|
|
||||||
|
|
||||||
ticker.appendChild(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
update_tweets();
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
var channel_here = "60dd7f55-9f88-4de6-ad98-b9c4e2810300";
|
||||||
|
var channel_main_1 = "rc1";
|
||||||
|
var channel_main_2 = "rc2";
|
||||||
|
|
||||||
|
var fahrplan = {};
|
||||||
|
var tweets = {};
|
||||||
|
|
||||||
|
/* === EXTERNAL DATA === */
|
||||||
|
function update_tweets() {
|
||||||
|
var request = new XMLHttpRequest();
|
||||||
|
request.open('GET', 'https://api.oct.re/tweets-rc3.json', true);
|
||||||
|
request.onload = function() {
|
||||||
|
if (this.status >= 200 && this.status < 400) {
|
||||||
|
tweets = JSON.parse(this.response);
|
||||||
|
update_tweet_ticker();
|
||||||
|
} else { console.log(this); }
|
||||||
|
};
|
||||||
|
request.onerror = function(e) { console.log(e); };
|
||||||
|
request.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_fahrplan() {
|
||||||
|
var request = new XMLHttpRequest();
|
||||||
|
request.open('GET', 'https://api.oct.re/fahrplan.json', true);
|
||||||
|
request.onload = function() {
|
||||||
|
if (this.status >= 200 && this.status < 400) {
|
||||||
|
fahrplan = JSON.parse(this.response);
|
||||||
|
update_fahrplan_html();
|
||||||
|
} else { console.log(this); }
|
||||||
|
};
|
||||||
|
request.onerror = function(e) { console.log(e); };
|
||||||
|
request.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === FAHRPLAN === */
|
||||||
|
var n_here = 3;
|
||||||
|
var n_main = 3;
|
||||||
|
var n_other = 7;
|
||||||
|
|
||||||
|
function parse_schedule() {
|
||||||
|
var fahrplan_parsed = {
|
||||||
|
"here": [],
|
||||||
|
"main": [],
|
||||||
|
"other": [],
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i in fahrplan) {
|
||||||
|
if (fahrplan_parsed.here.length < n_here
|
||||||
|
&& (fahrplan[i].roomguid == channel_here || fahrplan[i].room == channel_here)) {
|
||||||
|
fahrplan_parsed.here.push({
|
||||||
|
title: fahrplan[i].title,
|
||||||
|
sub: fahrplan[i].start + " D" + fahrplan[i].day + ", " + fahrplan[i].personnames,
|
||||||
|
});
|
||||||
|
} else if (fahrplan_parsed.main.length < n_main
|
||||||
|
&& (fahrplan[i].roomguid == channel_main_1 || fahrplan[i].room == channel_main_1
|
||||||
|
|| fahrplan[i].roomguid == channel_main_2 || fahrplan[i].room == channel_main_2)) {
|
||||||
|
fahrplan_parsed.main.push({
|
||||||
|
title: fahrplan[i].title,
|
||||||
|
sub: fahrplan[i].start + " D" + fahrplan[i].day + " @ " + fahrplan[i].room + ", " + fahrplan[i].personnames,
|
||||||
|
});
|
||||||
|
} else if (fahrplan_parsed.other.length < n_other) {
|
||||||
|
fahrplan_parsed.other.push({
|
||||||
|
title: fahrplan[i].title,
|
||||||
|
sub: fahrplan[i].start + " D" + fahrplan[i].day + " @ " + fahrplan[i].room,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fahrplan_parsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_fahrplan_html() {
|
||||||
|
fahrplan_parsed = parse_schedule();
|
||||||
|
var els = {
|
||||||
|
here: document.getElementById("schedule-here"),
|
||||||
|
main: document.getElementById("schedule-main"),
|
||||||
|
other: document.getElementById("schedule-other"),
|
||||||
|
}
|
||||||
|
|
||||||
|
els.here.innerHTML = "";
|
||||||
|
els.main.innerHTML = "";
|
||||||
|
els.other.innerHTML = "";
|
||||||
|
|
||||||
|
for (var group in els) {
|
||||||
|
for (var i in fahrplan_parsed[group]) {
|
||||||
|
var el = document.createElement("div");
|
||||||
|
el.className = "item";
|
||||||
|
|
||||||
|
var title = document.createElement("div");
|
||||||
|
title.className = "title";
|
||||||
|
title.innerText = fahrplan_parsed[group][i].title;
|
||||||
|
el.appendChild(title);
|
||||||
|
|
||||||
|
var sub = document.createElement("div");
|
||||||
|
sub.className = "sub";
|
||||||
|
sub.innerText = fahrplan_parsed[group][i].sub;
|
||||||
|
el.appendChild(sub);
|
||||||
|
|
||||||
|
els[group].appendChild(el);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
update_fahrplan();
|
||||||
|
|
||||||
|
|
||||||
|
/* === TWEETS === */
|
||||||
|
function update_tweet_ticker() {
|
||||||
|
var ticker = document.getElementById("ticker");
|
||||||
|
ticker.innerHTML = "";
|
||||||
|
for (var i in tweets.data) {
|
||||||
|
//console.log(tweets.data[i].text);
|
||||||
|
var item = document.createElement("div");
|
||||||
|
item.className = "item";
|
||||||
|
|
||||||
|
// Look up user
|
||||||
|
var user;
|
||||||
|
for (var useri in tweets.includes.users) {
|
||||||
|
if (tweets.includes.users[useri].id == tweets.data[i].author_id)
|
||||||
|
user = tweets.includes.users[useri];
|
||||||
|
}
|
||||||
|
|
||||||
|
var img = document.createElement("img");
|
||||||
|
img.src = user.profile_image_url;
|
||||||
|
item.appendChild(img);
|
||||||
|
|
||||||
|
var user_el = document.createElement("span");
|
||||||
|
user_el.className = "user";
|
||||||
|
var uname = user.username;
|
||||||
|
user_el.innerText = "@" + uname;
|
||||||
|
item.appendChild(user_el);
|
||||||
|
|
||||||
|
var content = document.createElement("span");
|
||||||
|
content.className = "content";
|
||||||
|
var text = tweets.data[i].text;
|
||||||
|
text = text.replace(/\n/g, "↲");
|
||||||
|
content.innerText = text;
|
||||||
|
item.appendChild(content);
|
||||||
|
|
||||||
|
ticker.appendChild(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
update_tweets();
|
Loading…
Reference in New Issue