diff options
Diffstat (limited to 'www/js')
-rw-r--r-- | www/js/todo.js | 126 | ||||
-rw-r--r-- | www/js/utils.js | 16 |
2 files changed, 141 insertions, 1 deletions
diff --git a/www/js/todo.js b/www/js/todo.js new file mode 100644 index 0000000..259c123 --- /dev/null +++ b/www/js/todo.js @@ -0,0 +1,126 @@ +/* + * 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(d) { + this.$this = $(this); + this.shows = []; + if((Object.prototype.toString.call(d) !== '[object Date]') || (d.toString() === 'Invalid Date')) { + this.current = new Date(); + } else { + this.current = d; + } +}; + +rh.ShowList.prototype.fetch = function() { + var self = this; + + var d = this.current + var dstr = d.getFullYear() + '-' + Number(d.getMonth() + 1).pad(2) + '-' + Number(d.getDate()).pad(2); + $.getJSON( "/rh-bin/schedules.json?DAYS=1&START=" + dstr, function(data) { + if(data.status == "OK") { + self.shows = []; + $(data.shows).each(function(index, showdata) { + var show = new rh.Show(showdata); + self.shows.push(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) { + this.model = model; + + this.showViews = []; + + var self = this; + $(this.model).on('update', function() { + self.render(); + }); + this.model.fetch(); +}; + +rh.ShowListView.prototype.render = function() { + var hdr = $('#header'); + $('div.date', hdr).text(format_date(this.model.current)); + + var list = $('#shows'); + $('div.show', list).remove(); + this.showViews = []; + + for (var i = 0; i < this.model.shows.length; i++) { + var showView = new rh.ShowView(this.model.shows[i], this); + this.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 start = $('<span>').addClass('show-start').text(format_time(this.model.start)); + var len = $('<span>').addClass('show-len').text("(" + format_durationms(this.model.len) + ")"); + + var showlink = $('<a>').attr('href', "https://import.helsinki.at/shows/" + this.model.id) + .attr('target', "import").text(this.model.title); + var title = $('<span>').addClass('show-title').append(showlink); + + this.$el.empty().addClass('show').append(start).append(title).append(len); +} + + + +/***************** controller *****************/ + +function todo_init() { + shows = new rh.ShowList(); + showListView = new rh.ShowListView(shows); +} diff --git a/www/js/utils.js b/www/js/utils.js index c09628c..ad64c17 100644 --- a/www/js/utils.js +++ b/www/js/utils.js @@ -54,6 +54,20 @@ monthname[11] = 'Dezember'; var monthname_short = new Array('Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'); +function format_date(d) { + if(Object.prototype.toString.call(d) !== '[object Date]') { + return '-'; + } + if (d.toString() === 'Invalid Date') { + return '-'; + } + var datestr = weekday_short[d.getDay()]; + datestr += ' ' + Number(d.getDate()).pad(2); + datestr += '.' + Number(d.getMonth() + 1).pad(2); + datestr += '.' + d.getFullYear(); + return datestr; +} + function format_time(d) { if(Object.prototype.toString.call(d) !== '[object Date]') { return '-'; @@ -84,7 +98,7 @@ function format_datetime(d) { return datetimestr; } -function msToTimeString(time) { +function format_durationms(time) { if(time == '-') return time; var h = Number(Math.floor(time / 3600000)); |