diff options
author | Joey Hess <joey@kitenet.net> | 2012-03-03 17:32:02 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-03-03 17:32:02 -0400 |
commit | 4b3ce9df72f4c2204156d0705937f36b0e08e155 (patch) | |
tree | fc3c68bfd0ddb5123c6253e79c260b5131f5c07c /IkiWiki/Plugin/osm.pm | |
parent | 2e21e45f7d426a954fe150e7335b224822fc6a9c (diff) | |
parent | 0f7c148494a0b35b6949d2cf0a130e38ecfa8ab9 (diff) | |
download | ikiwiki-4b3ce9df72f4c2204156d0705937f36b0e08e155.tar ikiwiki-4b3ce9df72f4c2204156d0705937f36b0e08e155.tar.gz |
Merge remote-tracking branch 'anarcat/osm-fixes'
Diffstat (limited to 'IkiWiki/Plugin/osm.pm')
-rw-r--r-- | IkiWiki/Plugin/osm.pm | 143 |
1 files changed, 7 insertions, 136 deletions
diff --git a/IkiWiki/Plugin/osm.pm b/IkiWiki/Plugin/osm.pm index 0fd7ca400..d8db01dbb 100644 --- a/IkiWiki/Plugin/osm.pm +++ b/IkiWiki/Plugin/osm.pm @@ -529,7 +529,7 @@ sub include_javascript ($) { } } if ($loader) { - return embed_map_code() . "<script type=\"text/javascript\" charset=\"utf-8\">$loader</script>"; + return embed_map_code($page) . "<script type=\"text/javascript\" charset=\"utf-8\">$loader</script>"; } else { return ''; @@ -553,147 +553,18 @@ sub cgi($) { print ("\r\n"); print "<html><body>"; print "<div id=\"mapdiv-$map\"></div>"; - print embed_map_code($map); + print embed_map_code(); print "<script type=\"text/javascript\" charset=\"utf-8\">mapsetup( 'mapdiv-$map', { 'map': '$map', 'lat': urlParams['lat'], 'lon': urlParams['lon'], 'zoom': urlParams['zoom'], 'fullscreen': 1, 'editable': 1, 'format': '" . prefered_format() . "'});</script>"; print "</body></html>"; exit 0; } -sub embed_map_code() { - return <<EOF; -<script src="http://www.openlayers.org/api/OpenLayers.js"></script> -<script> -// taken from http://stackoverflow.com/questions/901115/get-query-string-values-in-javascript -var urlParams = {}; -(function () { - var e, - a = /\\+/g, // Regex for replacing addition symbol with a space - r = /([^&=]+)=?([^&]*)/g, - d = function (s) { return decodeURIComponent(s.replace(a, " ")); }, - q = window.location.search.substring(1); - - while (e = r.exec(q)) - urlParams[d(e[1])] = d(e[2]); -})(); - -function mapsetup(divname, options) { - div = document.getElementById(divname); - if (options.fullscreen) { - permalink = 'permalink'; - div.style.top = 0; - div.style.left = 0; - div.style.position = 'absolute'; - div.style.width = '100%'; - div.style.height = '100%'; - } - else { - div.style.height = options.height; - div.style.width = options.width; - div.style.float = options.float; - permalink = {base: options.href, title: "View larger map"}; - } - map = new OpenLayers.Map(divname, { - controls: [ - new OpenLayers.Control.Navigation(), - new OpenLayers.Control.ScaleLine(), - new OpenLayers.Control.Permalink(permalink) - ], - displayProjection: new OpenLayers.Projection("EPSG:4326"), - numZoomLevels: 18 - }); - - - map.addLayer(new OpenLayers.Layer.OSM()); - if (options.format == 'CSV') { - pois = new OpenLayers.Layer.Text( "CSV", - { location:"/" + options.map + "/pois.txt", - projection: map.displayProjection - }); - } else if (options.format == 'GeoJSON') { - pois = new OpenLayers.Layer.Vector("GeoJSON", { - protocol: new OpenLayers.Protocol.HTTP({ - url: "/" + options.map + "/pois.json", - format: new OpenLayers.Format.GeoJSON() - }), - strategies: [new OpenLayers.Strategy.Fixed()] - }); - } else { - pois = new OpenLayers.Layer.Vector("KML", { - protocol: new OpenLayers.Protocol.HTTP({ - url: "/" + options.map + "/pois.kml", - format: new OpenLayers.Format.KML({ - extractStyles: true, - extractAttributes: true - }) - }), - strategies: [new OpenLayers.Strategy.Fixed()]}); - } - map.addLayer(pois); - select = new OpenLayers.Control.SelectFeature(pois); - map.addControl(select); - select.activate(); - - pois.events.on({ - "featureselected": function (event) { - var feature = event.feature; - var content = '<h2><a href="' + feature.attributes.href + '">' +feature.attributes.name + "</a></h2>" + feature.attributes.description; - popup = new OpenLayers.Popup.FramedCloud("chicken", - feature.geometry.getBounds().getCenterLonLat(), - new OpenLayers.Size(100,100), - content, - null, true, function () {select.unselectAll()}); - feature.popup = popup; - map.addPopup(popup); - }, - "featureunselected": function (event) { - var feature = event.feature; - if (feature.popup) { - map.removePopup(feature.popup); - feature.popup.destroy(); - delete feature.popup; - } - } - }); - - if (options.editable) { - vlayer = new OpenLayers.Layer.Vector( "Editable" ); - map.addControl(new OpenLayers.Control.EditingToolbar(vlayer)); - map.addLayer(vlayer); - } - - if (options.fullscreen) { - map.addControl(new OpenLayers.Control.PanZoomBar()); - map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false})); - map.addControl(new OpenLayers.Control.MousePosition()); - map.addControl(new OpenLayers.Control.KeyboardDefaults()); - } else { - map.addControl(new OpenLayers.Control.ZoomPanel()); - } - - //Set start centrepoint and zoom - if (!options.lat || !options.lon) { - options.lat = urlParams['lat']; - options.lon = urlParams['lon']; - } - if (!options.zoom) { - options.zoom = urlParams['zoom']; - } - if (options.lat && options.lon) { - var lat = options.lat; - var lon = options.lon; - var zoom= options.zoom || 10; - center = new OpenLayers.LonLat( lon, lat ).transform( - new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984 - map.getProjectionObject() // to Spherical Mercator Projection - ); - map.setCenter (center, zoom); - } else { - pois.events.register("loadend", this, function () { map.zoomToExtent(pois.getDataExtent()); }); - } -} -</script> -EOF +sub embed_map_code(;$) { + my $page=shift; + return '<script src="http://www.openlayers.org/api/OpenLayers.js" type="text/javascript" charset="utf-8"></script>'. + '<script src="'.urlto("ikiwiki/osm.js", $page). + '" type="text/javascript" charset="utf-8"></script>'."\n"; } 1; |