diff options
-rw-r--r-- | www/js/specials.js | 209 | ||||
-rw-r--r-- | www/specials.html | 59 | ||||
-rw-r--r-- | www/styles/specials.css | 92 | ||||
-rw-r--r-- | www/todo.html | 2 |
4 files changed, 361 insertions, 1 deletions
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 <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(!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 = $('<div>'); +}; + +rh.ShowView.prototype.render = function() { + var start = $('<span>').addClass('show-start').text(format_time(this.model.start)); + var lenstr = "-"; + if(this.model.len > 0) { + lenstr = format_durationms(this.model.len); + } + var len = $('<span>').addClass('show-len').text("(" + lenstr + ")"); + + 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 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 @@ +<!DOCTYPE HTML> +<html> + <head> + <title>Special Show Usage on Radio Helsinki</title> + <meta charset="utf-8"> + <meta name="author" content="Christian Pointner <equinox@helsinki.at>"> + + <link rel="shortcut icon" href="/img/favicon.ico" /> + <link href="/javascript/bootstrap/css/bootstrap.min.css" rel="stylesheet"> + <link href="/styles/common.css" rel="stylesheet"> + <link href="/styles/specials.css" rel="stylesheet"> + <script src="/javascript/jquery/jquery.min.js"></script> + <script src="/js/utils.js"></script> + <script src="/js/specials.js"></script> + </head> + <body> + <div id="container"> + <div id="header"> + <div id="control"> + <div class="btn-group" role="group"> + <button type="button" class="btn btn-default" id="btn-earlier"><span class="glyphicon glyphicon-minus"></span></button> + <button type="button" class="btn btn-default" id="btn-later"><span class="glyphicon glyphicon-plus"></span></button> + </div> + </div> + <div> + <span class="week"></span> + <span class="date">--.--.----</span> + </div> + </div> + + <div id="loading"> + <div id="loading-inner"> + <div class="sk-fading-circle"> + <div class="sk-circle1 sk-circle"></div> + <div class="sk-circle2 sk-circle"></div> + <div class="sk-circle3 sk-circle"></div> + <div class="sk-circle4 sk-circle"></div> + <div class="sk-circle5 sk-circle"></div> + <div class="sk-circle6 sk-circle"></div> + <div class="sk-circle7 sk-circle"></div> + <div class="sk-circle8 sk-circle"></div> + <div class="sk-circle9 sk-circle"></div> + <div class="sk-circle10 sk-circle"></div> + <div class="sk-circle11 sk-circle"></div> + <div class="sk-circle12 sk-circle"></div> + </div> + </div> + </div> + + <div id="shows"> + </div> + </div> + + <script type="text/javascript"> + specials_init(); + </script> + + </body> +</html> 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 <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/>. + */ + +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 @@ <!DOCTYPE HTML> <html> <head> - <title>Coming Up next on Radio Helsinki</title> + <title>Import Status on Radio Helsinki</title> <meta charset="utf-8"> <meta name="author" content="Christian Pointner <equinox@helsinki.at>"> |