--- a/labs/tripPlannerTester.php +++ b/labs/tripPlannerTester.php @@ -3,7 +3,9 @@ <script src="openlayers/OpenLayers.js"></script> <SCRIPT TYPE="text/javascript" SRC="OpenStreetMap.js"></SCRIPT> <script type="text/javascript"> - + var map,select; + + function init() { var extent = new OpenLayers.Bounds(148.98, -35.48, 149.25, -35.15); @@ -16,13 +18,13 @@ }; // create the ol map object - var map = new OpenLayers.Map('map', options); + map = new OpenLayers.Map('map', options); var osmtiles = new OpenLayers.Layer.OSM("OSM"); var nearmap = new OpenLayers.Layer.OSM.NearMap("NearMap"); - var tripplantest = new OpenLayers.Layer.GML("tripplantest", "tripPlannerTester.kml.php", { + var tripplantest = new OpenLayers.Layer.GML("tripplantest", "tripPlannerTester.kml", { format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, @@ -44,9 +46,45 @@ { displayProjection: new OpenLayers.Projection("EPSG:900913") })); + + select = new OpenLayers.Control.SelectFeature(tripplantest); + + tripplantest.events.on({ + "featureselected": onFeatureSelect, + "featureunselected": onFeatureUnselect + }); + + map.addControl(select); + select.activate(); } - + function onPopupClose(evt) { + select.unselectAll(); + } + function onFeatureSelect(event) { + var feature = event.feature; + // Since KML is user-generated, do naive protection against + // Javascript. + var content = "<h2>"+feature.attributes.name + "</h2>" + feature.attributes.description; + if (content.search("<script") != -1) { + content = "Content contained Javascript! Escaped content below.<br />" + content.replace(/</g, "<"); + } + popup = new OpenLayers.Popup.FramedCloud("chicken", + feature.geometry.getBounds().getCenterLonLat(), + new OpenLayers.Size(100,100), + content, + null, true, onPopupClose); + feature.popup = popup; + map.addPopup(popup); + } + function onFeatureUnselect(event) { + var feature = event.feature; + if(feature.popup) { + map.removePopup(feature.popup); + feature.popup.destroy(); + delete feature.popup; + } + } </script> </head>