diff --git a/website/agenda/js/calcms.js b/website/agenda/js/calcms.js index e2101ba..239752b 100644 --- a/website/agenda/js/calcms.js +++ b/website/agenda/js/calcms.js @@ -1,786 +1,786 @@ var calcms = (function($) { - // define this - var my = {}; - - // calcms base functions - // event handlers are customized at herbstradio.org - - my.updateContainer = function updateContainer(id, url, onLoading, callback) { - if (id == null) - return; - if ($("#" + id).length == 0) - return; - // if (onLoading)document.getElementById(id).innerHTML="lade ..."; - $("#" + id).load(url, null, callback); - } - - my.load = function load(url) { - window.location.href = url; - // $(window).load(url); - // $('html').load(url); - } - - my.postContainer = function postContainer(url, parameters, callback) { - if (url != '') - $.post(url, parameters, callback); - } - - // 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(''); - } - - // set calcms_settings to parameters from URL - my.evaluateParametersFromUrl = function evaluateParametersFromUrl() { - var location = new String(window.location); - - if (!location.match(my.get("base_url"))) - return; - - if (window.location.search != "") { - var parameters = window.location.search.split("?")[1].split("&"); - for (var i = 0; i < parameters.length; i++) { - var pair = parameters[i]; - var name_values = pair.split("="); - if (name_values != null) { - // alert(name_values[0]+"="+name_values[1]); - // set(name_values[0],name_values[1]); - var element = document.getElementById(name_values[0]); - if (element != null) - element.value = name_values[1]; - } - } - } - - var sendung = /\/sendung\/(\d+)\//; - sendung.exec(location); - - if (RegExp.$1 != null && RegExp.$1 != '') { - // alert(RegExp.$1); - set('event_id', RegExp.$1); - set('last_event_id', my.get('event_id')); - } else { - - var sendungen = /\/sendungen\/(\d{4}\-\d{2}\-\d{2})\/(\d{4}\-\d{2}\-\d{2})\/(\d)\//; - sendungen.exec(location); - if (RegExp.$1 != '' && RegExp.$2 != '' && RegExp.$3 != '') { - set('from_date', RegExp.$1); - set('till_date', RegExp.$2); - set('weekday', RegExp.$3); - } else { - - var sendungen = /\/sendungen\/(\d{4}\-\d{2}\-\d{2})\/(\d{4}\-\d{2}\-\d{2})\//; - sendungen.exec(location); - if (RegExp.$1 != '' && RegExp.$2 != '') { - set('from_date', RegExp.$1); - set('till_date', RegExp.$2); - } else { - var sendungen = /\/sendungen\/(\d{4}\-\d{2}\-\d{2})\//; - sendungen.exec(location); - if (RegExp.$1 != '') { - set('date', RegExp.$1); - } - } - - } - - var kalender = /\/kalender\/(\d{4}\-\d{2}\-\d{2})\/(\d{4}\-\d{2}\-\d{2})\//; - kalender.exec(location); - if (RegExp.$1 != '' && RegExp.$2 != '') { - set('from_date', RegExp.$1); - set('till_date', RegExp.$2); - } else { - var kalender = /\/kalender\/(\d{4}\-\d{2}\-\d{2})\//; - kalender.exec(location); - if (RegExp.$1 != '') { - set('date', RegExp.$1); - } - } - } - } - - // 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 != '') { - // alert(target+" "+field+" "+value); - set(field, value); - } - - // read fields - var debug = my.get('debug'); - 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_of_day = ''; - var time = ''; - var program = my.get('program'); - var series_name = my.get('series_name'); - var category = my.get('category'); - var tag = my.get('tag'); - var search_field = my.get('search'); - - // delete filters by current action - if ((field == 'search' && search_field != '') - || (field == 'category' && category != '') - || (field == 'series_name' && series_name != '') - || (field == 'program' && program != '') || (field == 'tag') - && tag != '') { - weekday = ''; - date = ''; - from_date = ''; - till_date = ''; - } - - if (field == 'search') { - category = ''; - series_name = ''; - program = ''; - } - - if (field == 'category') { - search_field = ''; - series_name = ''; - program = ''; - } - - if (field == 'program') { - search_field = ''; - series_name = ''; - category = ''; - } - - if (field == 'series_name') { - search_field = ''; - program = ''; - category = ''; - } - - if (field == 'month') { - if (month != '') { - from_date = month; - till_date = month.substring(0, month.length - 2) + "31"; - } - weekday = ''; - date = ''; - category = ''; - program = ''; - series_name = ''; - tags = ''; - search_field = ''; - } - - if (field == 'week') { - weekday = ''; - date = ''; - category = ''; - program = ''; - series_name = ''; - tags = ''; - search_field = ''; - } - - if (field == 'weekday') { - /* - * if (month != ''){ from_date=month; - * till_date=month.substring(0,month.length-2)+"31" ; } - */ - category = ''; - program = ''; - series_name = ''; - tags = ''; - search_field = ''; - } - - if (field == 'date') { - weekday = ''; - from_date = ''; - till_date = ''; - category = ''; - program = ''; - series_name = ''; - tags = ''; - search_field = ''; - } - - if (field == 'time') { - if (time == 'null') { - return - - - - - - - - } else { - weekday = ''; - time_of_day = ''; - } - } - - if (field == 'month' || field == 'week' || field == 'weekday' - || field == 'time_of_day') { - 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 (category != null && category != '') { - url += "/kategorie/" + category; - } - - if (series_name != null && series_name != '') { - url += "/sendereihe/" + series_name; - } - - if (url.substr(url.length - 1, url.length) != '/') { - url += '/'; - } - - if (time_of_day != '') { - url += "&time_of_day=" + time_of_day; - } else if (time != '' && time != 'null') { - url += "&" + time; - } - - if (tag != null && tag != '') { - url += "&tag=" + tag; - } - - if (program != null && program != '') { - url += "&program=" + program; - } - - if (field == 'print') { - url += "&print=1"; - } - - if (debug != '') { - url += '&debug=' + debug; - } - - return url; - } - - // show current project categories - my.showProjectCategories = function showProjectCategories(project) { - var projectJsName = calcms.getJsName(project); - $('#calcmsCategoryForm select').each(function() { - var id = $(this).attr('id'); - if (id == "calcms_category_" + projectJsName) { - if ($(this).css('display') == 'none') - $(this).show(); - } else { - if ($(this).css('display') != 'none') - $(this).hide(); - } - }); - } - - // show current series categories - 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 categories and series_names - my.removeEmptyProjects = function removeEmptyProjects() { - $('#calcms_project option').each( - function() { - var project = $(this).val(); - var hasCategories = $('#calcms_category_' - + calcms.getJsName(project)).length; - var hasSeries = $('#calcms_series_name_' - + calcms.getJsName(project)).length; - if ((hasCategories == 0) && (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); - } - - // 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 += escape(project) + '/'; - else - url += 'all/'; - if (value != '' && value != null) - url += escape(value) + '/'; - if (archive != null && archive == 0) - url += 'kommende/'; - if (archive != null && archive == 1) - url += 'vergangene/'; - my.updateContainer('calcms_list', url, 1); - } - } - - // show all events for a given category - my.showEventsByCategory = function showEventsByCategory(value) { - if (value != '' && value != null) { - my.updateContainer('calcms_list', my.get('search_category_url') - + escape(value) + '/', 1); - } - } - - // show all events for a given project and category - my.showEventsByProjectAndCategory = function showEventsByProjectAndCategory( - project, category, archive) { - if (category != '' && category != null) { - var url = my.get('search_category_url'); - if (project != '' && project != null) - url += escape(project) + '/'; - if (category != '' && category != null) - url += escape(category) + '/'; - if (archive != null && archive == 0) - url += 'kommende/'; - if (archive != null && archive == 1) - url += 'vergangene/'; - my.updateContainer('calcms_list', url, 1); - } - } - - // 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 += escape(project) + '/'; - if (seriesName != '' && seriesName != null) - url += escape(seriesName) + '/'; - if (archive != null && archive == 0) - url += 'kommende/'; - if (archive != null && archive == 1) - url += 'vergangene/'; - my.updateContainer('calcms_list', url, 1); - } - } - - // 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') - + escape(value) + '/', 1); - } - } - - // 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', events_url+url, 1); - my.updateContainer('calcms_list', url, 1); - } - } - - // 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, 1); - - 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, 1); - 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, 1); - } 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, - 1, - function(responseText, textStatus, XMLHttpRequest) { - var back_link = 'zurück'; - document.getElementById('calcms_list').innerHTML = back_link - + document - .getElementById('calcms_list').innerHTML - + '