summaryrefslogtreecommitdiff
path: root/www/js/nextshows.js
blob: 0ab6c8388c806d9f5940ff4a8151e1cb7bf3d173 (plain)
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');
  $('div.show', 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 = $('<div>');
};

rh.ShowView.prototype.render = function() {
  var startstr = "Beginn: " + format_time(this.model.start);
  var start = $('<span>').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 = $('<span>').addClass('show-end').text(endstr);

  var title = $('<span>').addClass('show-title').text(this.model.title);

  this.$el.empty().addClass('show').append(start).append(end).append(title);
}



/***************** controller  *****************/

function nextshows_init() {
  shows = new rh.ShowList();
  showListView = new rh.ShowListView(shows, 10);

  setInterval("shows.fetch()", 5000);
}