summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@helsinki.at>2017-04-07 00:49:24 (GMT)
committerChristian Pointner <equinox@helsinki.at>2017-04-07 00:49:24 (GMT)
commitabd757df48d8ab7669e471ed9f63fbf38f3b5cf6 (patch)
tree46777eb29be2767dac8a5678f06974b533bf5bd2
parent7ca592a6d8378eb5474c6ee4935f157ee1f546d0 (diff)
added new app: specials
-rw-r--r--www/js/specials.js209
-rw-r--r--www/specials.html59
-rw-r--r--www/styles/specials.css92
-rw-r--r--www/todo.html2
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>">