X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/5a7f1ebcd4d00bb1ba163c9559435f6c0aa78fb4..06aa145676c198e4b9c0ab26108aedd139bfd895:/IkiWiki/Plugin/osm.pm diff --git a/IkiWiki/Plugin/osm.pm b/IkiWiki/Plugin/osm.pm index 9f43e03e6..ef6bc5b11 100644 --- a/IkiWiki/Plugin/osm.pm +++ b/IkiWiki/Plugin/osm.pm @@ -101,6 +101,14 @@ sub preprocess { if ($zoom !~ /^\d\d?$/ || $zoom < 2 || $zoom > 18) { error("Bad zoom"); } + + if (! defined $href || ! length $href) { + $href=IkiWiki::cgiurl( + do => "osm", + map => $map, + ); + } + $pagestate{$page}{'osm'}{$map}{'displays'}{$name} = { height => $height, width => $width, @@ -151,21 +159,18 @@ sub process_waypoint { last; } } - $icon = urlto($icon, $dest); + $icon = urlto($icon, $dest, 1); $tag = '' unless $tag; if ($page eq $dest) { - if (!defined($config{'osm_format'}) || !$config{'osm_format'}) { - $config{'osm_format'} = 'KML'; - } - my %formats = map { $_ => 1 } split(/, */, $config{'osm_format'}); + my %formats = get_formats(); if ($formats{'GeoJSON'}) { - will_render($page,$config{destdir} . "/$map/pois.json"); + will_render($page, "$map/pois.json"); } if ($formats{'CSV'}) { - will_render($page,$config{destdir} . "/$map/pois.txt"); + will_render($page, "$map/pois.txt"); } if ($formats{'KML'}) { - will_render($page,$config{destdir} . "/$map/pois.kml"); + will_render($page, "$map/pois.kml"); } } my $href = IkiWiki::cgiurl( @@ -176,7 +181,8 @@ sub process_waypoint { zoom => $zoom, ); if (defined($destsources{htmlpage($map)})) { - $href = urlto($map,$page) . "?lat=$lat&lon=$lon&zoom=$zoom"; + $href = urlto($map,$page) . "?lat=$lat&lon=$lon&zoom=$zoom"; + $href =~ s!&!&!g; } $pagestate{$page}{'osm'}{$map}{'waypoints'}{$name} = { page => $page, @@ -196,7 +202,6 @@ sub process_waypoint { $output .= preprocess(%params); } if (!$hidden) { - $href =~ s!&!&!g; $output .= ""; } return $output; @@ -292,10 +297,7 @@ sub savestate { } } - if (!defined($config{'osm_format'}) || !$config{'osm_format'}) { - $config{'osm_format'} = 'KML'; - } - my %formats = map { $_ => 1 } split(/, */, $config{'osm_format'}); + my %formats = get_formats(); if ($formats{'GeoJSON'}) { writejson(\%waypoints, \%linestrings); } @@ -436,7 +438,7 @@ Sample style: $writer->endTag(); $writer->end(); - writefile("pois.kmp", $config{destdir} . "/$map", $output); + writefile("pois.kml", $config{destdir} . "/$map", $output); } } @@ -484,7 +486,7 @@ sub format (@) { return $params{content}; } -sub prefered_format() { +sub preferred_format() { if (!defined($config{'osm_format'}) || !$config{'osm_format'}) { $config{'osm_format'} = 'KML'; } @@ -492,19 +494,21 @@ sub prefered_format() { return shift @spl; } +sub get_formats() { + if (!defined($config{'osm_format'}) || !$config{'osm_format'}) { + $config{'osm_format'} = 'KML'; + } + map { $_ => 1 } split(/, */, $config{'osm_format'}); +} + sub include_javascript ($) { my $page=shift; my $loader; - eval q{use JSON}; - error $@ if $@; if (exists $pagestate{$page}{'osm'}) { foreach my $map (keys %{$pagestate{$page}{'osm'}}) { foreach my $name (keys %{$pagestate{$page}{'osm'}{$map}{'displays'}}) { - my %options = %{$pagestate{$page}{'osm'}{$map}{'displays'}{$name}}; - $options{'map'} = $map; - $options{'format'} = prefered_format(); - $loader .= "mapsetup(\"mapdiv-$name\", " . to_json(\%options) . ");\n"; + $loader .= map_setup_code($map, $name, %{$pagestate{$page}{'osm'}{$map}{'displays'}{$name}}); } } } @@ -521,6 +525,8 @@ sub cgi($) { return unless defined $cgi->param('do') && $cgi->param("do") eq "osm"; + + IkiWiki::loadindex(); IkiWiki::decode_cgi_utf8($cgi); @@ -534,7 +540,15 @@ sub cgi($) { print ""; print "
"; print embed_map_code(); - print ""; + print ""; print ""; exit 0; @@ -547,4 +561,28 @@ sub embed_map_code(;$) { '" type="text/javascript" charset="utf-8">'."\n"; } +sub map_setup_code($;@) { + my $map=shift; + my $name=shift; + my %options=@_; + + eval q{use JSON}; + error $@ if $@; + + $options{'format'} = preferred_format(); + + my %formats = get_formats(); + if ($formats{'GeoJSON'}) { + $options{'jsonurl'} = urlto($map."/pois.json"); + } + if ($formats{'CSV'}) { + $options{'csvurl'} = urlto($map."/pois.txt"); + } + if ($formats{'KML'}) { + $options{'kmlurl'} = urlto($map."/pois.kml"); + } + + return "mapsetup('mapdiv-$name', " . to_json(\%options) . ");"; +} + 1;