summaryrefslogtreecommitdiff
path: root/www/js
diff options
context:
space:
mode:
authorChristian Pointner <equinox@helsinki.at>2017-01-14 01:37:01 (GMT)
committerChristian Pointner <equinox@helsinki.at>2017-01-14 01:37:33 (GMT)
commit39e95df6f4a2677bb0023c1b787c7cef0ebaee25 (patch)
treef1fd5ec255db14a716e1b25bef7ce192accb4c03 /www/js
parent193d1e4d2e408ef00d8ff900e2022d2a04afa1c9 (diff)
added todo app
Diffstat (limited to 'www/js')
-rw-r--r--www/js/todo.js126
-rw-r--r--www/js/utils.js16
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));