+ function get_feature_title(feature) {
+ var title = feature.get('type');
+ if (title == 'sledrun') return feature.get('name');
+ title = title.charAt(0).toUpperCase() + title.slice(1); // first letter uppercase
+ if (feature.get('name')) title += ': ' + feature.get('name');
+ return title;
+ }
+
+ // Returns 0 to 5 for features that represent sledruns as their condition
+ var get_sledrun_condition = function(feature) {
+ var condition = feature.get('condition');
+ if (condition === undefined) return 0;
+ return condition;
+ }
+
+ function style_point_function(feature, resolution) {
+ if (feature.get('type') == 'sledrun') {
+ let condition = get_sledrun_condition(feature);
+ let src = img_path + '/marker_c_sledrun_' + condition + 'nn.png';
+ let marker_style = new ol.style.Style({
+ image: new ol.style.Icon({
+ src: src,
+ imgSize: [17, 17],
+ anchor: [0.5, 0.5]
+ }),
+ });
+ let shadow_style = new ol.style.Style({
+ image: new ol.style.Icon({
+ src: img_path + '/marker_c_shadow.png',
+ imgSize: [23, 23],
+ anchor: [0.4, 0.4]
+ }),
+ });
+ return [shadow_style, marker_style];
+
+ } else {
+ let src = img_path + '/marker_p_' + feature.get('type') + '.png';
+ let marker_style = new ol.style.Style({
+ image: new ol.style.Icon({
+ src: src,
+ imgSize: [20, 34],
+ anchor: [0.5, 1.0]
+ }),
+ });
+ return [marker_style];
+ }
+ }
+
+ function style_point_function_selected(feature, resolution) {
+ let style_array = style_point_function(feature, resolution);
+ style_array[0].setText(new ol.style.Text({
+ text: get_feature_title(feature),
+ font: 'icon',
+ offsetY: 14,
+ stroke: new ol.style.Stroke({
+ color: '#ddd',
+ width: 2,
+ }),
+ }));
+ return style_array;
+ }
+
+ function style_path_function(feature, resolution) {
+ var line_color = {
+ 'rodelbahn': '#014e9a',
+ 'gehweg': '#e98401',
+ 'alternative': '#7f7fff',
+ 'lift': '#000000',
+ 'anfahrt': '#e1e100'
+ };
+ var color = feature.get('strokeColor') || line_color[feature.get('type')] || '#e7525b';
+ var width = (feature.get('type') in ['lift', 'anfahrt']) ? 3 : 6;
+ return new ol.style.Style({
+ stroke: new ol.style.Stroke({
+ color: color,
+ width: width
+ })
+ });
+ }
+
+ function style_function(feature, resolution) {
+ if (feature.getGeometry() instanceof ol.geom.Point) return style_point_function(feature, resolution);
+ return style_path_function(feature, resolution);
+ };
+
+ function style_function_selected(feature, resolution) {
+ if (feature.getGeometry() instanceof ol.geom.Point) return style_point_function_selected(feature, resolution);
+ return style_path_function(feature, resolution);
+ };
+
+
+ // popup overlay
+ // -------------
+ var popup_container = document.getElementById('popup');
+ var popup_content = document.getElementById('popup-content');
+ var popup_closer = document.getElementById('popup-closer');
+ var popup_overlay = new ol.Overlay({element: popup_container, autoPan: {animation: {duration: 250}}});
+ popup_closer.onclick = function() {popup_overlay.setPosition(undefined); popup_closer.blur(); return false;};
+
+ function create_popup_dom(feature) {
+ var popup_div = createElement('div');
+
+ // name
+ if (feature.get('name') !== undefined && (feature.get('wiki') !== undefined || feature.get('thumb_url') !== undefined)) {
+ var h2 = appendElement(popup_div, 'h2');
+ if (feature.get('wiki') === undefined) h2.text(feature.get('name'));
+ else appendElement(h2, 'a', {href: feature.get('wiki')}).text(feature.get('name'));
+ }
+
+ // sledrun information
+ if (feature.get('type') == 'sledrun') {
+ var p = appendElement(popup_div, 'p').text('Rodelbahnzustand').append(createElement('br'));
+ if (feature.get('condition') !== undefined) {
+ var condition_text = {1: 'Sehr gut', 2: 'Gut', 3: 'Mittelmäßig', 4: 'Schlecht', 5: 'Geht nicht'};
+ var year_month_day = feature.get('date_report').split('-');
+ p.append(createElement('a', {href: feature.get('wiki') + '#Eintr.C3.A4ge'}).text(condition_text[feature.get('condition')]), ' ');
+ p.append(createElement('small').text(year_month_day[2] + '.' + year_month_day[1] + '.'), ' ');
+ p.append(createElement('em').append(createElement('a', {href: feature.get('wiki') + '#Eintragen'}).text('Neu')));
+ } else {
+ p.append(createElement('em').append(createElement('a', {href: feature.get('wiki') + '#Eintragen'}).text('Bitte eintragen')));
+ }
+ }
+
+ // wiki link
+ if (feature.get('wiki') !== undefined) {
+ var a = appendElement(appendElement(popup_div, 'p'), 'a', {href: feature.get('wiki')});
+ var detail_text = 'Details';
+ if (feature.get('type') == 'sledrun') detail_text += ' zur Rodelbahn';
+ if (feature.get('type') == 'gasthaus') detail_text += ' zum Gasthaus';
+ if (feature.get('thumb_url') === undefined) a.text(detail_text);
+ else a.append(createElement('img', {src: feature.get('thumb_url'), alt: detail_text, title: detail_text}));
+ }
+
+ return popup_div;
+ }
+
+
+ /*