diff --git a/osm/dynamic_markers/html/event_map.css b/osm/dynamic_markers/html/event_map.css index 81f34a2..e9c2790 100644 --- a/osm/dynamic_markers/html/event_map.css +++ b/osm/dynamic_markers/html/event_map.css @@ -31,3 +31,7 @@ div.event_map_info li { font-size: x-small; } +div.event_GroupDiv { + background-color: white; +} + diff --git a/osm/dynamic_markers/html/event_map.js b/osm/dynamic_markers/html/event_map.js index 21989d3..db2930c 100644 --- a/osm/dynamic_markers/html/event_map.js +++ b/osm/dynamic_markers/html/event_map.js @@ -20,6 +20,10 @@ var event_map_zoom_default_for_events = 13; var event_map_zoom_default_for_marker = 15; var event_map_zoom_default_for_edit = 12; +// location of the "cloud popup" mini images (e.g. "west-mini.png") +// checkout from: http://svn.openlayers.org/trunk/openlayers/img +var openlayers_images_url = "/event_map/html/external/openlayers-img/"; + // names of fields to be manipulated in "edit" mode var event_map_fieldname_lat = "edit-field-lat-0-value"; var event_map_fieldname_lon = "edit-field-long-0-value"; @@ -117,8 +121,13 @@ function event_map_addCSSfile(cssfile, pos) { } -event_map_addJavascript('http://www.openlayers.org/api/OpenLayers.js', 'head'); -event_map_addJavascript('http://www.openstreetmap.org/openlayers/OpenStreetMap.js', 'head'); +/* make sure, OpenLayers and OpenStreetMap js files are loaded in the correct order. + * We accomplish this by providing a combined download file for both. + */ +//event_map_addJavascript('http://www.openlayers.org/api/OpenLayers.js', 'head'); +//event_map_addJavascript('http://www.openstreetmap.org/openlayers/OpenStreetMap.js', 'head'); +event_map_addJavascript(event_map_base_url + 'html/external/combined.js', 'head') + // in case of problems of a browser with loading external ccs files, we could use the local copy //event_map_addCSSfile(event_map_base_url + 'html/openlayers/style.css', 'head'); event_map_addCSSfile('http://openlayers.org/api/theme/default/style.css', 'head'); @@ -126,6 +135,8 @@ event_map_addCSSfile(event_map_css_file, 'head'); function event_map_init() { + OpenLayers.ImgPath = openlayers_images_url; + OpenLayers.Lang.setCode("de"); event_map = new OpenLayers.Map('event_map', { maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34), numZoomLevels: 19, @@ -149,17 +160,19 @@ function event_map_init() { }); - var layerOePNV = new OpenLayers.Layer.OSM.OePNV("ÖPNV-Karte"); - var layerCycle = new OpenLayers.Layer.OSM.CycleMap("Radweg-Karte"); - var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik"); - var layerTah = new OpenLayers.Layer.OSM.Osmarender("Osmarender"); + var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Stadtplan"); + var layerOePNV = new OpenLayers.Layer.OSM.OePNV("Nahverkehr"); + var layerCycle = new OpenLayers.Layer.OSM.CycleMap("Radwege"); + var layerTah = new OpenLayers.Layer.OSM.Osmarender("Detailliert"); - event_map.addLayers([layerOePNV, layerCycle, layerMapnik, layerTah]); + event_map.addLayers([layerOePNV, layerCycle, layerMapnik]); // choose default layer event_map.setBaseLayer(layerMapnik); - event_map_marker_layer = new OpenLayers.Layer.Markers("Markierung"); - event_map.addLayer(event_map_marker_layer) + if (event_map_display_type == 'marker') { + event_map_marker_layer = new OpenLayers.Layer.Markers("Markierung"); + event_map.addLayer(event_map_marker_layer); + } // allow to change the current layer (mapnik/tah/oepnv/cycle) event_map.addControl(new OpenLayers.Control.LayerSwitcher()); @@ -253,6 +266,7 @@ function event_map_show_marker(lonLat) { function event_map_show_gml() { + OpenLayers.ImgPath = openlayers_images_url; OpenLayers.Feature.prototype.popupClass = OpenLayers.Popup.FramedCloud; var pois = new OpenLayers.Layer.GML("Veranstaltungen", event_map_gml_file, { @@ -292,6 +306,7 @@ function event_map_edit_clicked(evnt) { function event_map_onFeatureSelect(feature) { + OpenLayers.ImgPath = openlayers_images_url; selectedFeature = feature; var content = '
'; content += '

' + feature.attributes.title + '

'; @@ -324,7 +339,9 @@ function event_map_onFeatureSelect(feature) { feature.geometry.getBounds().getCenterLonLat(), new OpenLayers.Size(300, 200), content, - null, true, event_map_onPopupClose); + null, + true, + event_map_onPopupClose); popup.maxSize = new OpenLayers.Size(350, 300); feature.popup = popup; event_map.addPopup(popup); diff --git a/osm/dynamic_markers/scripts/convert_raw2gml.py b/osm/dynamic_markers/scripts/convert_raw2gml.py index fa7e014..c22f99c 100755 --- a/osm/dynamic_markers/scripts/convert_raw2gml.py +++ b/osm/dynamic_markers/scripts/convert_raw2gml.py @@ -83,7 +83,6 @@ ICON_SIZES = { } -# used for "html_escape" below HTML_ESCAPE_TABLE = { "&": "&", '"': """, @@ -104,17 +103,12 @@ TIME_OFFSET_HOURS = { } -def htmlentitydecode(s): - # convert html enitities to unicode (taken from: http://wiki.python.org/moin/EscapingHtml) - return re.sub('&(%s);' % '|'.join(htmlentitydefs.name2codepoint), - lambda m: unichr(htmlentitydefs.name2codepoint[m.group(1)]), s) - - -def htmlentityencode(s): - # convert unicode to html enitities (taken from: http://wiki.python.org/moin/EscapingHtml) +def html_escape(s): result = [] for char in s: - if ord(char) > 127: + if char in HTML_ESCAPE_TABLE: + result.append(HTML_ESCAPE_TABLE[char]) + elif ord(char) > 127: result.append("&#%d;" % ord(char)) else: result.append(char) @@ -202,7 +196,7 @@ class EventParser(HTMLParser.HTMLParser, object): pass elif self.current_attribute == COLUMNS['title']: # maybe the title is splitted by an ampersand entity - event['title'] = event.get('title', '') + htmlentityencode(data) + event['title'] = event.get('title', '') + html_escape(data) elif self.current_attribute == COLUMNS['time']: if event.has_key("time"): # the first "time" field is the start @@ -223,13 +217,13 @@ class EventParser(HTMLParser.HTMLParser, object): elif self.current_attribute == COLUMNS['category']: event['category'] = data.strip() elif self.current_attribute == COLUMNS['place']: - event['place'] = event.get('place', '') + htmlentityencode(data) + event['place'] = event.get('place', '') + html_escape(data) elif self.current_attribute == COLUMNS['latitude']: event['latitude'] = data.strip() elif self.current_attribute == COLUMNS['longitude']: event['longitude'] = data.strip() elif self.current_attribute == COLUMNS['organizer']: - event['organizer'] = event.get('organizer', '') + htmlentityencode(data) + event['organizer'] = event.get('organizer', '') + html_escape(data) else: sys.stderr.write("UNKNOWN ATTRIBUTE: %d (%s)\n" % (self.current_attribute, data.encode(INPUT_ENCODING))) @@ -268,15 +262,7 @@ def get_date_string(timestamp): sys.stderr.write("Locales (%s) not found: %s\n" % (LOCALE, err_msg) \ + " Maybe you should run 'aptitude install locales-all' on debian.\n") localtime = time.localtime(timestamp) - return htmlentityencode(time.strftime(locale.nl_langinfo(locale.D_T_FMT), localtime)) - - -def html_escape(text): - """Produce entities within text.""" - chars = [] - for c in text: - chars.append(HTML_ESCAPE_TABLE.get(c, c)) - return "".join(chars) + return html_escape(time.strftime(locale.nl_langinfo(locale.D_T_FMT), localtime)) def get_data_from_html(html): @@ -353,10 +339,6 @@ def get_gml_from_data(data): for place in group_sorted_events_by_location(data): result.append([]) event = place[0] - # escape some html entities - for item in ["title", "place", "organizer"]: - if event.has_key(item): - event[item] = html_escape(event[item]) items = result[-1] # the 'point' items.append('%(latitude)s,%(longitude)s' % event) @@ -381,8 +363,8 @@ def get_gml_from_data(data): description += '
  • ' \ % get_icon_url(other_event["category"], None) description += '%s: %s
  • ' \ - % (html_escape(get_date_string(other_event["time"]).decode(DATE_ENCODING)), - other_event["event_url"], html_escape(other_event["title"])) + % (get_date_string(other_event["time"]).decode(DATE_ENCODING), + other_event["event_url"], other_event["title"]) description += '' description += '' items.append(description)