fixed transparent background of popups
fixed popup border image location fixed charset encoding issues
This commit is contained in:
parent
38b7268e27
commit
039c5947a5
3 changed files with 41 additions and 38 deletions
|
@ -31,3 +31,7 @@ div.event_map_info li {
|
||||||
font-size: x-small;
|
font-size: x-small;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.event_GroupDiv {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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_marker = 15;
|
||||||
var event_map_zoom_default_for_edit = 12;
|
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
|
// names of fields to be manipulated in "edit" mode
|
||||||
var event_map_fieldname_lat = "edit-field-lat-0-value";
|
var event_map_fieldname_lat = "edit-field-lat-0-value";
|
||||||
var event_map_fieldname_lon = "edit-field-long-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');
|
/* make sure, OpenLayers and OpenStreetMap js files are loaded in the correct order.
|
||||||
event_map_addJavascript('http://www.openstreetmap.org/openlayers/OpenStreetMap.js', 'head');
|
* 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
|
// 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(event_map_base_url + 'html/openlayers/style.css', 'head');
|
||||||
event_map_addCSSfile('http://openlayers.org/api/theme/default/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() {
|
function event_map_init() {
|
||||||
|
OpenLayers.ImgPath = openlayers_images_url;
|
||||||
|
OpenLayers.Lang.setCode("de");
|
||||||
event_map = new OpenLayers.Map('event_map', {
|
event_map = new OpenLayers.Map('event_map', {
|
||||||
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
|
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
|
||||||
numZoomLevels: 19,
|
numZoomLevels: 19,
|
||||||
|
@ -149,17 +160,19 @@ function event_map_init() {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var layerOePNV = new OpenLayers.Layer.OSM.OePNV("ÖPNV-Karte");
|
var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Stadtplan");
|
||||||
var layerCycle = new OpenLayers.Layer.OSM.CycleMap("Radweg-Karte");
|
var layerOePNV = new OpenLayers.Layer.OSM.OePNV("Nahverkehr");
|
||||||
var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
|
var layerCycle = new OpenLayers.Layer.OSM.CycleMap("Radwege");
|
||||||
var layerTah = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
|
var layerTah = new OpenLayers.Layer.OSM.Osmarender("Detailliert");
|
||||||
|
|
||||||
event_map.addLayers([layerOePNV, layerCycle, layerMapnik, layerTah]);
|
event_map.addLayers([layerOePNV, layerCycle, layerMapnik]);
|
||||||
// choose default layer
|
// choose default layer
|
||||||
event_map.setBaseLayer(layerMapnik);
|
event_map.setBaseLayer(layerMapnik);
|
||||||
|
|
||||||
event_map_marker_layer = new OpenLayers.Layer.Markers("Markierung");
|
if (event_map_display_type == 'marker') {
|
||||||
event_map.addLayer(event_map_marker_layer)
|
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)
|
// allow to change the current layer (mapnik/tah/oepnv/cycle)
|
||||||
event_map.addControl(new OpenLayers.Control.LayerSwitcher());
|
event_map.addControl(new OpenLayers.Control.LayerSwitcher());
|
||||||
|
@ -253,6 +266,7 @@ function event_map_show_marker(lonLat) {
|
||||||
|
|
||||||
|
|
||||||
function event_map_show_gml() {
|
function event_map_show_gml() {
|
||||||
|
OpenLayers.ImgPath = openlayers_images_url;
|
||||||
OpenLayers.Feature.prototype.popupClass = OpenLayers.Popup.FramedCloud;
|
OpenLayers.Feature.prototype.popupClass = OpenLayers.Popup.FramedCloud;
|
||||||
|
|
||||||
var pois = new OpenLayers.Layer.GML("Veranstaltungen", event_map_gml_file, {
|
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) {
|
function event_map_onFeatureSelect(feature) {
|
||||||
|
OpenLayers.ImgPath = openlayers_images_url;
|
||||||
selectedFeature = feature;
|
selectedFeature = feature;
|
||||||
var content = '<div class="event_map_info">';
|
var content = '<div class="event_map_info">';
|
||||||
content += '<h1>' + feature.attributes.title + '</h1>';
|
content += '<h1>' + feature.attributes.title + '</h1>';
|
||||||
|
@ -324,7 +339,9 @@ function event_map_onFeatureSelect(feature) {
|
||||||
feature.geometry.getBounds().getCenterLonLat(),
|
feature.geometry.getBounds().getCenterLonLat(),
|
||||||
new OpenLayers.Size(300, 200),
|
new OpenLayers.Size(300, 200),
|
||||||
content,
|
content,
|
||||||
null, true, event_map_onPopupClose);
|
null,
|
||||||
|
true,
|
||||||
|
event_map_onPopupClose);
|
||||||
popup.maxSize = new OpenLayers.Size(350, 300);
|
popup.maxSize = new OpenLayers.Size(350, 300);
|
||||||
feature.popup = popup;
|
feature.popup = popup;
|
||||||
event_map.addPopup(popup);
|
event_map.addPopup(popup);
|
||||||
|
|
|
@ -83,7 +83,6 @@ ICON_SIZES = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# used for "html_escape" below
|
|
||||||
HTML_ESCAPE_TABLE = {
|
HTML_ESCAPE_TABLE = {
|
||||||
"&": "&",
|
"&": "&",
|
||||||
'"': """,
|
'"': """,
|
||||||
|
@ -104,17 +103,12 @@ TIME_OFFSET_HOURS = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def htmlentitydecode(s):
|
def html_escape(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)
|
|
||||||
result = []
|
result = []
|
||||||
for char in s:
|
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))
|
result.append("&#%d;" % ord(char))
|
||||||
else:
|
else:
|
||||||
result.append(char)
|
result.append(char)
|
||||||
|
@ -202,7 +196,7 @@ class EventParser(HTMLParser.HTMLParser, object):
|
||||||
pass
|
pass
|
||||||
elif self.current_attribute == COLUMNS['title']:
|
elif self.current_attribute == COLUMNS['title']:
|
||||||
# maybe the title is splitted by an ampersand entity
|
# 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']:
|
elif self.current_attribute == COLUMNS['time']:
|
||||||
if event.has_key("time"):
|
if event.has_key("time"):
|
||||||
# the first "time" field is the start
|
# the first "time" field is the start
|
||||||
|
@ -223,13 +217,13 @@ class EventParser(HTMLParser.HTMLParser, object):
|
||||||
elif self.current_attribute == COLUMNS['category']:
|
elif self.current_attribute == COLUMNS['category']:
|
||||||
event['category'] = data.strip()
|
event['category'] = data.strip()
|
||||||
elif self.current_attribute == COLUMNS['place']:
|
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']:
|
elif self.current_attribute == COLUMNS['latitude']:
|
||||||
event['latitude'] = data.strip()
|
event['latitude'] = data.strip()
|
||||||
elif self.current_attribute == COLUMNS['longitude']:
|
elif self.current_attribute == COLUMNS['longitude']:
|
||||||
event['longitude'] = data.strip()
|
event['longitude'] = data.strip()
|
||||||
elif self.current_attribute == COLUMNS['organizer']:
|
elif self.current_attribute == COLUMNS['organizer']:
|
||||||
event['organizer'] = event.get('organizer', '') + htmlentityencode(data)
|
event['organizer'] = event.get('organizer', '') + html_escape(data)
|
||||||
else:
|
else:
|
||||||
sys.stderr.write("UNKNOWN ATTRIBUTE: %d (%s)\n" % (self.current_attribute, data.encode(INPUT_ENCODING)))
|
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) \
|
sys.stderr.write("Locales (%s) not found: %s\n" % (LOCALE, err_msg) \
|
||||||
+ " Maybe you should run 'aptitude install locales-all' on debian.\n")
|
+ " Maybe you should run 'aptitude install locales-all' on debian.\n")
|
||||||
localtime = time.localtime(timestamp)
|
localtime = time.localtime(timestamp)
|
||||||
return htmlentityencode(time.strftime(locale.nl_langinfo(locale.D_T_FMT), localtime))
|
return html_escape(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)
|
|
||||||
|
|
||||||
|
|
||||||
def get_data_from_html(html):
|
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):
|
for place in group_sorted_events_by_location(data):
|
||||||
result.append([])
|
result.append([])
|
||||||
event = place[0]
|
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]
|
items = result[-1]
|
||||||
# the 'point'
|
# the 'point'
|
||||||
items.append('%(latitude)s,%(longitude)s' % event)
|
items.append('%(latitude)s,%(longitude)s' % event)
|
||||||
|
@ -381,8 +363,8 @@ def get_gml_from_data(data):
|
||||||
description += '<li style="list-style-image:url(%s)">' \
|
description += '<li style="list-style-image:url(%s)">' \
|
||||||
% get_icon_url(other_event["category"], None)
|
% get_icon_url(other_event["category"], None)
|
||||||
description += '%s: <a href="%s" title="Details" target="_blank">%s</a></li>' \
|
description += '%s: <a href="%s" title="Details" target="_blank">%s</a></li>' \
|
||||||
% (html_escape(get_date_string(other_event["time"]).decode(DATE_ENCODING)),
|
% (get_date_string(other_event["time"]).decode(DATE_ENCODING),
|
||||||
other_event["event_url"], html_escape(other_event["title"]))
|
other_event["event_url"], other_event["title"])
|
||||||
description += '</ul></li>'
|
description += '</ul></li>'
|
||||||
description += '</ul>'
|
description += '</ul>'
|
||||||
items.append(description)
|
items.append(description)
|
||||||
|
|
Loading…
Reference in a new issue