1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
/*
* rhrdweb
*
* Copyright (C) 2016 Christian Pointner <equinox@helsinki.at>
*
* This file is part of rhrdweb.
*
* rhrdweb is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* rhrdweb is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with rhrdweb. If not, see <http://www.gnu.org/licenses/>.
*/
'use strict';
var rh = rh || {};
/***************** models *****************/
var shows = null;
rh.ShowList = function() {
this.$this = $(this);
this.shows = [];
};
rh.ShowList.prototype.fetch = function() {
var self = this;
var yd = new Date((new Date()) - 24 * 3600 * 1000);
var ydstr = yd.getFullYear() + '-' + Number(yd.getMonth() + 1).pad(2) + '-' + Number(yd.getDate()).pad(2);
$.getJSON( "/rh-bin/schedules.json?DAYS=3&START=" + ydstr, function(data) {
if(data.status == "OK") {
self.shows = [];
$(data.shows).each(function(index, show) {
self.shows.push(new rh.Show(show));
});
self.$this.trigger('update');
}
});
};
rh.Show = function(show) {
this.id = show.id;
this.title = show.title;
this.start = new Date(show.start);
this.len = show.len;
};
/***************** views *****************/
var showListView = null;
rh.ShowListView = function(model, len) {
this.model = model;
this.len = len;
this.showViews = [];
var self = this;
$(this.model).on('update', function() {
self.render();
});
this.model.fetch();
};
rh.ShowListView.prototype.render = function() {
var list = $('#shows table');
$('tr', list).remove();
this.showViews = [];
var self = this;
$(this.model.shows).each(function(index, show) {
var showView = new rh.ShowView(show, self);
self.showViews.push(showView);
showView.render();
list.append(showView.$el);
});
};
rh.ShowView = function(model, listView) {
this.model = model;
this.listView = listView;
this.$el = $('<tr>');
};
rh.ShowView.prototype.render = function() {
var title = $('<td>').addClass('show-title').text(this.model.title);
var startstr = "Beginn: " + format_time(this.model.start);
var start = $('<td>').addClass('show-start').text(startstr);
var endstr = "Live";
if(this.model.len > 0) {
var end = new Date(this.model.start.valueOf() + this.model.len);
endstr = "Ende: " + format_time(end);
}
var end = $('<td>').addClass('show-end').text(endstr);
this.$el.empty().addClass('show').append(start).append(title).append(end);
}
/***************** controller *****************/
function nextshows_init() {
shows = new rh.ShowList();
showListView = new rh.ShowListView(shows, 10);
setInterval("shows.fetch()", 5000);
}
|