From abd757df48d8ab7669e471ed9f63fbf38f3b5cf6 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Fri, 7 Apr 2017 02:49:24 +0200 Subject: added new app: specials diff --git a/www/js/specials.js b/www/js/specials.js new file mode 100644 index 0000000..8f85014 --- /dev/null +++ b/www/js/specials.js @@ -0,0 +1,209 @@ +/* + * rhrdweb + * + * Copyright (C) 2016 Christian Pointner + * + * 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 . + */ + +'use strict'; + +var rh = rh || {}; + + + +/***************** models *****************/ + +var shows = null; + +rh.ShowList = function(d) { + this.$this = $(this); + this.shows = []; + if(!is_valid_date(d)) { + this.current = new Date(); + } else { + this.current = d; + } + this.current_week = get_rd_week(this.current.valueOf()); + this.request_sent = false; +}; + +rh.ShowList.prototype.fetch = function() { + var self = this; + this.current_week = get_rd_week(this.current.valueOf()); + + this.request_sent = true; + self.$this.trigger('pre-update'); + $.getJSON( "/rh-bin/schedules.json?DAYS=1&START=" + format_date_iso(this.current), function(data) { + if(data.status == "OK") { + history.replaceState(null, null, '/specials/' + format_date_iso(self.current)); + self.last_succeeded = self.current; + self.shows = []; + $(data.shows).each(function(index, showdata) { + var show = new rh.Show(showdata); + self.shows.push(show); + }); + self.$this.trigger('update'); + } + }).fail(function() { + if(is_valid_date(self.last_succeeded)) { + self.current = self.last_succeeded; + self.current_week = get_rd_week(self.current.valueOf()); + self.$this.trigger('update'); + } + }).always(function() { + self.request_sent = false; + }); +}; + +rh.ShowList.prototype.prev = function() { + if(!this.request_sent) { + this.current = new Date(this.current.valueOf() - 24*3600*1000); + this.fetch(); + } +}; + +rh.ShowList.prototype.next = function() { + if(!this.request_sent) { + this.current = new Date(this.current.valueOf() + 24*3600*1000); + this.fetch(); + } +}; + +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('pre-update', function() { + self.render_hdr(); + self.render_loading(); + }); + $(this.model).on('update', function() { + self.render_hdr(); + self.render_list(); + }); + this.model.fetch(); +}; + +rh.ShowListView.prototype.render_hdr = function() { + var hdr = $('#header'); + $('span.date', hdr).text(format_date(this.model.current)); + var weekspan = $('span.week', hdr).removeClass().addClass('week').addClass('label'); + switch(this.model.current_week) { + case 1: + weekspan.addClass('label-info').text('Woche 1'); + break; + case 2: + weekspan.addClass('label-warning').text('Woche 2'); + break; + case 3: + weekspan.addClass('label-success').text('Woche 3'); + break; + case 4: + weekspan.addClass('label-danger').text('Woche 4'); + break; + default: + weekspan.addClass('label-default').text('Fehler'); + } +}; + +rh.ShowListView.prototype.render_list = function() { + $('#loading').hide(); + 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); + } + list.show(); +}; + +rh.ShowListView.prototype.render_loading = function() { + $('#shows').hide(); + $('#loading').show(); +}; + + +rh.ShowView = function(model, listView) { + this.model = model; + this.listView = listView; + + this.$el = $('
'); +}; + +rh.ShowView.prototype.render = function() { + var start = $('').addClass('show-start').text(format_time(this.model.start)); + var lenstr = "-"; + if(this.model.len > 0) { + lenstr = format_durationms(this.model.len); + } + var len = $('').addClass('show-len').text("(" + lenstr + ")"); + + var showlink = $('').attr('href', "https://import.helsinki.at/shows/" + this.model.id) + .attr('target', "import").text(this.model.title); + var title = $('').addClass('show-title').append(showlink); + + this.$el.empty().addClass('show').append(start).append(title).append(len); +} + + + +/***************** controller *****************/ + +function specials_init() { + var url = parseLocationHref(); + var d = new Date(); + if(url.path.length > 1) { + var tmp = new Date(url.path[1]); + if(is_valid_date(tmp)) { + d = tmp; + } + } + history.pushState(null, null, '/specials/' + format_date_iso(d)); + + shows = new rh.ShowList(d); + showListView = new rh.ShowListView(shows); + + $('#btn-earlier').click(specials_prev); + $('#btn-later').click(specials_next); +} + +function specials_prev() { + shows.prev(); +} + +function specials_next() { + shows.next(); +} diff --git a/www/specials.html b/www/specials.html new file mode 100644 index 0000000..e5fa4a6 --- /dev/null +++ b/www/specials.html @@ -0,0 +1,59 @@ + + + + Special Show Usage on Radio Helsinki + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + + + diff --git a/www/styles/specials.css b/www/styles/specials.css new file mode 100644 index 0000000..09726f2 --- /dev/null +++ b/www/styles/specials.css @@ -0,0 +1,92 @@ +/* + * rhrdweb + * + * Copyright (C) 2016 Christian Pointner + * + * 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 . + */ + +body { + font-family: "Droid Sans", Helvetica, Arial, Sans; + margin: 0 0 200px 0; + padding: 0; + font-size: 30px; +} + + +#header { + background-color: #36373B; + width: 100%; + color: white; + padding: 0.5em 0.3em 0.25em 5em; + margin-bottom: 0.5em; +} + +#control { + float: left; + margin-right: 1em; +} + +#header span.week { + font-size: 0.6em; + position: relative; + bottom: 0.35em; + padding-bottom: .15em; +} + +#header span.date { + font-size: 1.2em; + font-weight: bold; + padding-left: 0.3em; +} + + +#loading-inner { + width: 60px; + margin-top: 5em; + margin-left: auto; + margin-right: auto; +} + + +#shows div.show { + padding: 0.2em 0; +} + +#shows div:nth-child(even) { + background-color: #D8D8D8; +} + +div.show span { + font-weight: bold; +} + +div.show span.show-title { + white-space:nowrap; + overflow:hidden; +} + +div.show span.show-start { + font-size: 0.75em; + margin-left: 5em; + margin-right: 1em; +} + +div.show span.show-len { + font-size: 0.75em; + margin-left: 0.2em; + margin-right: 1em; +} diff --git a/www/todo.html b/www/todo.html index a569858..9351d3f 100644 --- a/www/todo.html +++ b/www/todo.html @@ -1,7 +1,7 @@ - Coming Up next on Radio Helsinki + Import Status on Radio Helsinki -- cgit v0.10.2