var calcms = (function($) { // define this var my = {}; // calcms base functions my.updateContainer = function updateContainer(id, url, callback) { if (id == null) return; var elem = document.querySelector('#' + id); if (elem == null) return; fetch( url ) .then( response => response.text()) .then( text => { elem.innerHTML = text; if (callback != null) callback(); }) .catch( error => { console.error('Error:', error); }); } my.load = function load(url) { window.location.href = url; } my.show = function (elem) { elem.style.display = 'block'; }; my.hide = function (elem) { elem.style.display = 'none'; }; my.toggle = function (elem) { if (window.getComputedStyle(elem).display === 'block') { my.hide(elem); }else{ my.show(elem); } }; // get calcms setting my.get = function get(name) { if (calcms_settings[name] == null) return ''; return calcms_settings[name]; } // set calcms setting my.set = function set(name, value) { calcms_settings[name] = value; } // get select box value my.selectValue = function selectValue(element) { value = element.options[element.selectedIndex].value; return value; } my.selectFirstOption = function selectFirstOption(id) { if ($(id) && $(id).length > 0) $(id)[0].selectedIndex = 0; } my.contains = function contains(s, t) { if (s == false) return false; if (t == false) return false; return s.indexOf(t) != -1; } my.getJsName = function getJsName(s) { s = s.replace(/[^a-zA-Z\_0-9]/g, '_'); s = s.replace(/_+/g, '_'); return s; } my.isArchive = function isArchive() { if ($('#calcms_archive:checked').length == 0) return 0; return 1; } my.getSearchElement = function getSearchElement() { return $("#calcms_search input[name='search']"); } my.resetSearch = function resetSearch() { $("#calcms_search_field").val(''); } // return URL from calcms_settings // parameters can be overwritten by field and value // This handles main controller interaction logics my.setAndGetUrlParameters = function setAndGetUrlParameters(field, value) { // overwrite fields by field and value if (field != null && value != null && field != '') set(field, value); // read fields var from_date = my.get('from_date'); var till_date = my.get('till_date'); var date = my.get('date'); var month = my.get('month'); var weekday = my.get('weekday'); var time = ''; var series_name = my.get('series_name'); var search_field = my.get('search'); // delete filters by current action if ((field == 'search' && search_field != '') || (field == 'series_name' && series_name != '')) { weekday = ''; date = ''; from_date = ''; till_date = ''; } if (field == 'search') { series_name = ''; program = ''; } if (field == 'series_name') { search_field = ''; program = ''; } if (field == 'month') { if (month != null && month != '') { let date = month; let year = date.substring(0,4); let mon = date.substring(5,7); from_date = date; till_date = date.substring(0, date.length - 2) + new Date(year, mon , 0).getDate(); } weekday = ''; date = ''; series_name = ''; search_field = ''; } if (field == 'week') { weekday = ''; date = ''; series_name = ''; search_field = ''; } if (field == 'weekday') { series_name = ''; search_field = ''; } if (field == 'date') { weekday = ''; from_date = ''; till_date = ''; series_name = ''; search_field = ''; } if (field == 'time') { if (time == 'null') { return; } else { weekday = ''; } } if (field == 'month' || field == 'week' || field == 'weekday') { time = ''; } // build target URL var url = ''; if (field == 'month' || field == 'week') { if (from_date != '') url += '/' + from_date; if (till_date != '') url += '/' + till_date; } else if (weekday != '') { if (from_date != '') url += '/' + from_date; if (till_date != '') url += '/' + till_date; url += '/' + weekday; } else if (date != '') { if (date == 'today') { url += '/heute/'; } else { url += '/' + date; } } if (search_field != '') { url += "/suche/" + search_field; } if (series_name != null && series_name != '') { url += "/sendereihe/" + series_name; } if (url.substr(url.length - 1, url.length) != '/') { url += '/'; } if (field == 'print') { url += "&print=1"; } return url; } // show current series my.showProjectSeriesNames = function showProjectSeriesNames(project) { var projectJsName = calcms.getJsName(project); $('#calcmsSeriesNamesForm select').each(function() { var id = $(this).attr('id'); if (id == "calcms_series_name_" + projectJsName) { if ($(this).css('display') == 'none') $(this).show(); } else { if ($(this).css('display') != 'none') $(this).hide(); } }); } // get current project my.getProject = function getProject() { var project = $('#calcms_project'); if (project.length == 0) return 'all'; return project.val(); } // remove projects from form without series_names my.removeEmptyProjects = function removeEmptyProjects() { $('#calcms_project option').each( function() { var project = $(this).val(); var hasSeries = $('#calcms_series_name_' + calcms.getJsName(project)).length; if (hasSeries == 0) { $(this).remove(); } }); } my.clearOnChangeArchive = function clearOnChangeArchive() { $('#calcms_archive').off(); } // register action on changing archive my.registerOnChangeArchive = function registerOnChangeArchive(action) { my.clearOnChangeArchive(); $('#calcms_archive').on('click', action); } function escapeString(s){ return encodeURIComponent(s.replaceAll(" ","+")); } // show all events for a given project my.showSearchResultsByProject = function showSearchResultsByProject( project, value, archive) { if (value != null && value != '') { var url = my.get('search_url'); if (project != '' && project != null) url += encodeURIComponent(project) + '/'; else url += 'all/'; if (value != '' && value != null) url += escapeString(value) + '/'; if (archive != null && archive == 0) url += 'kommende/'; if (archive != null && archive == 1) url += 'vergangene/'; my.updateContainer('calcms_list', url); } } // show all events for a given project and series my.showEventsByProjectAndSeriesName = function showEventsByProjectAndSeriesName( project, seriesName, archive) { if (seriesName != '' && seriesName != null) { var url = my.get('search_series_name_url'); if (project != '' && project != null) url += escapeString(project) + '/'; if (seriesName != '' && seriesName != null) url += escapeString(seriesName) + '/'; if (archive != null && archive == 0) url += 'kommende/'; if (archive != null && archive == 1) url += 'vergangene/'; my.updateContainer('calcms_list', url); } } // show all events for a given series my.showEventsBySeriesName = function showEventsBySeriesName(value) { if (value != '' && value != null) { my.updateContainer('calcms_list', my.get('search_series_name_url') + escapeString(value) + '/' ); } } // show all events for a given program my.showEventsByProgram = function showEventsByProgram(value) { var events_url = my.get('events_url'); var url = my.setAndGetUrlParameters('program', value); if (value != '' && value != null) { my.updateContainer('calcms_list', url); } } // show next event of a given series my.showNextSeriesEvent = function showNextSeriesEvent(value) { var events_url = my.get('next_series_url'); my.load(events_url + '/' + value + '.html'); } // show previous event of a given series my.showPrevSeriesEvent = function showPrevSeriesEvent(value) { var events_url = my.get('prev_series_url'); my.load(events_url + '/' + value + '.html'); } my.showMenuAndList = function showMenuAndList(target, field, value) { var events_url = my.get('events_url'); var menu_url = my.get('menu_url'); var event_id = my.get('event_id'); var url = my.setAndGetUrlParameters(field, value); if (target == 'window') { window.location.href = events_url + url; } else { my.updateContainer('calcms_menu', menu_url + url); if (event_id != '' && event_id != null && Number(event_id) != 'NaN') { // load list selected by url my.showEvents(event_id, ''); my.set('event_id', ''); } else { // load event list my.updateContainer('calcms_list', events_url + url); my.set('last_list_url', events_url + url); } } return false; } // load given event details into list my.showEvents = function showEvents(event_id, view) { if (view == null || view == '') view = 'list_url'; if (event_id != '') { var url = my.get(view) + '/' + event_id + '/'; my.updateContainer('calcms_list', url); } else { document.getElementById('calcms_list').innerHTML = 'keine Sendung gefunden...'; } } // load given event details into list my.showEvent = function showEvent(event_id) { var old_url = my.get('last_list_url'); var url = my.get('list_url') + '/' + event_id + '/'; if (url != old_url) { my.set('last_event_id', event_id); my .updateContainer( 'calcms_list', url, function(responseText, textStatus, XMLHttpRequest) { var back_link = 'zurück'; document.getElementById('calcms_list').innerHTML = back_link + document .getElementById('calcms_list').innerHTML + '