/* * rhwebimport * * Copyright (C) 2014-2015 Christian Pointner * Copyright (C) 2015 Peter Grassberger * * This file is part of rhwebimport. * * rhwebimport 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. * * rhwebimport 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 rhwebimport. If not, see . */ 'use strict'; var rivendell = null; var musicgrid = null; function musicgrid_init() { rivendell = new Rivendell.Rivendell(auth_username, auth_token, '/rd-bin/rdxport.cgi'); rivendell.setListDropboxesEndpoint('/rh-bin/listdropboxes.cgi'); rivendell.setMusicgridEndpoint('/rh-bin/musicgrid.cgi'); musicgrid = new Musicgrid(); } function musicgrid_cleanup() { rivendell = null; } var Musicgrid = function() { this.clocks = []; this.fetch(); }; Musicgrid.prototype.fetch = function() { this.clocks = []; var self = this; rivendell.getMusicgrid(function(gridXml, status, req) { var dbs = $(gridXml).find("grid").children(); dbs.each(function(index, clockXml) { var clock = new MusicgridClock( $('name', clockXml).text(), $('color', clockXml).text(), $('title', clockXml).text(), $(clockXml).attr('dow'), $(clockXml).attr('hour') ); self.clocks.push(clock); }); self.updateTable(); }); }; Musicgrid.prototype.updateTable = function() { var $table = $('#app-musicgrid table'); $('tr td', $table).html('').removeClass('clock').css('background-color', '').css('color', '').attr('title', null); $(this.clocks).each(function(index, clock) { var $td = $('tr[data-dow="' + clock.dow + '"] td[data-hour="' + clock.hour +'"]', $table); $td.addClass('clock'); $td.html(clock.name); $td.attr('title', clock.title); $td.css('background-color', clock.color); if($td.isBackgroundDark()) { $td.css('color', '#ffffff'); } // todo: move this css to stylesheet $td.css('text-align', 'center'); $td.on('click', function() { selectClock(clock.dow, clock.hour, clock.name); }); }); $('tr td:not(.clock)', $table).on('click', function() { selectClock($(this).parent().data('dow'), $(this).data('hour'), null); }); }; var selectClock = function(dow, hour, clockName) { $('#musicpoolModal').modal({keyboard: true}); var $modalHeader = $('#musicpoolModal .modal-header'); var $modalBody = $('#musicpoolModal .modal-body'); $('h3', $modalHeader).html('Musikpool auswählen für Tag: ' + dow + ' Stunde: ' + hour + '.'); Musicpools.prototype.updateSelector = function() { $('tbody', $modalBody).html(''); $(this.musicpools).each(function(index, musicpool) { var $button = null; if (clockName === musicpool.clock) { $button = $(''); } else { $button = $(''); } $button.on('click', function() { rivendell.setMusicgrid(dow, hour, musicpool.clock, function() { $('#musicpoolModal').modal('hide'); musicgrid.fetch(); }); }); var $tr = $(''); $tr.append($('').html(musicpool.clock)); $tr.append($('').html(musicpool.title)); $tr.append($('').html($button)); $('tbody', $modalBody).append($tr); }); }; var musicpools = new Musicpools(); }; var MusicgridClock = function(name, color, title, dow, hour) { this.name = name; this.color = color; this.title = title; this.dow = dow; this.hour = hour; };