Wikivoyage:Quelltext von poimap2.php
Erscheinungsbild
Im Folgenden findet sich der Quelltext von poimap2.php
vom Nutzer Mey2008 in der Fassung vom 19. Juli 2016.
<!DOCTYPE html>
<html>
<!--
PoiMap2:
Version 2016-07-19
Author:
https://de.wikivoyage.org/wiki/User:Mey2008
Contributors:
https://en.wikivoyage.org/wiki/User:Torty3
https://en.wikivoyage.org/wiki/Benutzer:Nicolas1981
https://it.wikivoyage.org/wiki/Utente:Andyrom75
License:
Affero GPL v3 or later https://www.gnu.org/licenses/agpl-3.0.html
Recent changes:
2016-07-19: New geocoder
2016-07-13: Wikimedia tiles(Mapquest stop service)
2016-03-05: GPX files special case for "de"
2015-12-22: Improve tooltip
2015-12-20: Improve tooltip, default layer to "W", mapnik external
2015-11-01: Mapnik layer wmlabs + default
2015-10-05: Mapnik layer extern
2015-09-28: default new layer: wikimedia
2015-09-23: fix bug in layers control
2015-09-22: new translate for layers
2015-09-15: debug script
2015-09-09: track.gpx only when gpxcontent
2015-09-06: fix GPX error
2015-08-30: external content warning
ToDo:
nothing
-->
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title> <?php echo $_GET["name"]," — Wikivoyage Map" ?></title>
<link rel="icon" href="./lib/images/favicon.png" type= "image/png" />
<link rel="stylesheet" href="./lib/leaflet.css" />
<link rel="stylesheet" href="./lib/poimap.css" />
<link rel="stylesheet" href="./lib/PruneCluster.css" />
<link rel="stylesheet" href="./lib/locate.css" />
<link rel="stylesheet" href="./lib/Control.Geocoder.css" />
</head>
<body>
<div id="map">
<div id="logo">
<img src="./lib/images/logo.png" alt= "Logo" title= "Version 2016-07-19" width="64" height="64">
</div>
<script type="text/javascript" src="./lib/leaflet.js"></script>
<script type="text/javascript" src="./lib/Leaflet.EdgeMarker.js"></script>
<script type="text/javascript" src="./lib/leaflet.markercluster.js"></script>
<script type="text/javascript" src="./lib/PruneCluster.js"></script>
<script type="text/javascript" src="./lib/buttons-new.js"></script>
<script type="text/javascript" src="./lib/zoomdisplay.js"></script>
<script type="text/javascript" src="./lib/markers.js"></script>
<script type="text/javascript" src="./lib/gpx.js"></script>
<script type="text/javascript" src="./lib/locate.js"></script>
<script type="text/javascript" src="./lib/Control.Geocoder.js"></script>
<script type="text/javascript" src="./lib/i18n.js"></script>
<script type="text/javascript" src="./data/<?php echo $_GET['lang'] ?: 'en'; ?>-articles.js"></script>
<script type="text/javascript" src="./locale/<?php echo $_GET['lang'] ?: 'en'; ?>.js"></script>
<script type="text/javascript" src="./lib/maptiles.js"></script>
<?php
/* //PHP error reporting *** TEST ***
error_reporting (E_ALL | E_STRICT);
ini_set ('display_errors' , 1);
*/
include ('./readpage.php');
$gpxcontent = "";
if ($lang != 'de') {
// Gpx data --> Template:GPX/Articlename
$gpxcontent = @file_get_contents("https://" . $lang . ".wikivoyage.org/w/index.php?title=Template:GPX/" . $file . "&action=raw");
}
else {
// Gpx data --> Articlename/Gpx
$gpxcontent = @file_get_contents("https://" . $lang . ".wikivoyage.org/w/index.php?title=" . $file . "/Gpx&action=raw");
}
if (!$gpxcontent) {
$gpxdata = "no";
}
else {
// gpx.js needs seq. file
$gpxdata = "yes";
$fp = fopen("./tracks.gpx", "wb+");
fwrite($fp, $gpxcontent);
fclose($fp);
}
// search for fixed color
$fixedcolor = strpos($gpxcontent, 'fixedcolor="yes"');
// echo '<pre>'; print_r($GLOBALS); echo '</pre>'; // *** TEST ***
?>
<noscript>
<h2><a href="http://activatejavascript.org/en/">This application needs JavaScript. - See instructions:</a></h2>
</noscript>
<script type='text/javascript'>
// stop for testing // *** TEST ***
// alert("stop for testing"); // *** TEST ***
var lang = "<?php echo $_GET['lang'] ?: 'en'; ?>";
L.registerLocale(lang, mylocale);
L.setLocale(lang);
maptiles();
var zoomtoggle= "center";
var layertoggle= "pois";
function sleep(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
}
function onAll() {
map.removeLayer(wvarticles);
map.addLayer(markers);
map.addLayer(tracks);
if (zoomtoggle == "center") {
map.fitBounds(markers.getBounds());
zoomtoggle= "all";
layertoggle= "pois";
}
else {
map.setView([jslat,jslon],jszoom,true);
zoomtoggle= "center";
layertoggle= "pois";
}
}
function onDest() {
if (layertoggle == "pois") {
map.removeLayer(markers);
map.removeLayer(tracks);
map.addLayer(wvarticles);
map.setView([jslat,jslon],destzoom,true);
layertoggle= "destinations";
zoomtoggle= "center";
}
else {
map.removeLayer(wvarticles);
map.addLayer(markers);
map.addLayer(tracks);
map.setView([jslat,jslon],jszoom,true);
layertoggle= "pois";
zoomtoggle= "center";
}
}
function onMapMenu(e) {
var fmlat=e.latlng.lat.toFixed(map.getZoom() * 0.25 + 0.5);
var fmlng=e.latlng.lng.toFixed(map.getZoom() * 0.25 + 0.5);
popup
.setLatLng(e.latlng)
.setContent(L._('You clicked the map at') + '<br> lat=' + fmlat + ' | long=' + fmlng)
.openOn(map);
}
// All arrays to js
var jslat = '<?php echo $_GET["lat"] ?: "0";?>';
if (isNaN(jslat)) { jslat= "0"; alert("ERROR: Lat must be numeric!");}
jslat =parseFloat(jslat);
var jslon = '<?php echo $_GET["lon"] ?: "0"; ?>';
if (isNaN(jslon)) { jslon= "0";alert("ERROR: Lon must be numeric!");}
jslon =parseFloat(jslon);
var jszoom = '<?php echo $_GET["zoom"] ?: "14"; ?>';
var autozoom = "no";
if (jszoom == "auto") {autozoom = "yes";}
if (parseInt(jszoom) < 0 | parseInt(jszoom) > 18 | isNaN(jszoom) | jslat === 0 | jslon === 0) {jszoom = 10;}
var jslayer = '<?php echo $_GET["layer"] ?: "W"; ?>'.toUpperCase();
if (jslayer == "UNDEFINED") {jslayer = "W";}
var jslayer = jslayer.replace('O','W'); // Mapquest to Wikimedia
if (jslayer == "E") {jslayer = "WDE-P";}
var jslang = '<?php echo $_GET["lang"]; ?>'.toLowerCase();
var jsmax = <?php echo $max; ?>;
var jsp = <?php echo json_encode($p); ?>;
var jsc = <?php echo json_encode($c); ?>;
var jsx = <?php echo json_encode($x); ?>;
var jsy = <?php echo json_encode($y); ?>;
var jsn = <?php echo json_encode($n); ?>;
var jsf = <?php echo json_encode($f); ?>;
var jfixcol = <?php echo $fixedcolor ?: "0"; ?>;
var jgpxdata = '<?php echo $gpxdata; ?>';
var artname = "<?php echo $_GET["name"]?>";
var mask = <?php echo $mask; ?>;
// Make map
var map = new L.Map('map', {center: new L.LatLng(jslat,jslon), zoom: jszoom, zoomControl: false, doubleClickZoom: false});
if (jslang == "en") {
map.scrollWheelZoom.disable();
}
var popup = L.popup();
map.on('click', function(e) {
map.scrollWheelZoom.enable();
});
map.on('contextmenu', onMapMenu);
map.on('dblclick', function(e) {
map.setView(e.latlng, map.getZoom() + 1);
});
// Base layer "Mapnik" https
if (jslayer.indexOf("M") != -1 || jslayer.indexOf("C") != -1){
map.addLayer(mapnik);
}
// Base layer "Wikimedia" http
if (jslayer.indexOf("W") != -1) {
map.addLayer(wikimedia);
}
// Layer "Traffic" http
if (jslayer.indexOf("N") != -1) {
map.addLayer(traffic);
}
// Base layer "Landscape" http
if (jslayer.indexOf("R") != -1) {
map.addLayer(landscape);
}
// Layer "Labels" https
if (jslayer.indexOf("L") != -1) {
map.addLayer(maplabels);
}
// Layer "Boundaries" http
if (jslayer.indexOf("B") != -1) {
map.addLayer(boundaries);
}
// Layer "Cycling" http
if (jslayer.indexOf("C") != -1) {
map.addLayer(cycling);
}
// Layer "Hiking trails" http
if (jslayer.indexOf("H") != -1) {
map.addLayer(hiking);
}
// Layer "Hill shading" http
if (jslayer.indexOf("S") != -1) {
map.addLayer(hill);
}
// load local image
function imgError(image) {
image.onerror = "";
image.src = image.src.replace("wikipedia/commons","wikivoyage/" + jslang);
return true;
}
// Layer "POI"
// var markers = new L.featureGroup();
var markers = new L.MarkerClusterGroup({
showCoverageOnHover: false, maxClusterRadius: 13, iconCreateFunction: function(cluster) {
return L.icon({iconUrl: './ico24/cluster.png', iconAnchor: [12,12]});
}
});
var mi = 1;
var tooltip = "no";
var poilink = "no";
while(mi <= jsmax){
if (jsx[mi] != "0"){
var tooltip = jsn[mi].replace("<br />","");
var article = tooltip;
if (jsn[mi].indexOf("[[") != -1) {
tooltip = tooltip.substring(tooltip.indexOf("[[") + 2, (tooltip + "]]").indexOf("]]"));
article= '<a href= "https://' + jslang + '.wikivoyage.org/wiki/' + tooltip.replace(/ /g, "_") + '"title="Link to article" target="_blank">' + tooltip + '</a>';
tooltip= tooltip + " \u2197";
}
else if (jslang == "it") {
var tooltip = jsn[mi].replace("<br />","");
poilink = encodeURI(tooltip).replace(/%20/g, "_").replace(/%/g, ".");
article= '<a href= "https://' + jslang + '.wikivoyage.org/wiki/' + artname.replace(/ /g, "_") + '#' + poilink + '"title="Link to listing" target="_blank">' + tooltip + '</a>';
tooltip= tooltip + " \u21A9";
}
if (jsf[mi] == "0/01/no"){
var content = article;
var minw = 10;
var maxw = 240;
}
else {
tooltip = tooltip + " \u273f";
var imgurl = '"https://' + jslang + '.m.wikivoyage.org/wiki/File:' + jsf[mi].substr(5) + '" target="_blank"';
var content = '<a href = ' + imgurl + '><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/' +
jsf[mi] + '/120px-' + jsf[mi].substr(5) + '" width="120" title="⇱⇲" onerror="imgError(this);"></a><br />' + article + ' <a href = ' + imgurl + '>';
var minw = 120;
var maxw = 120;
}
var zio = 1000 - (mi * 2);
var marker = new L.Marker([jsx[mi], jsy[mi]], {title: tooltip, zIndexOffset: zio,
icon: new L.NumberedDivIcon({number: jsp[mi],
iconUrl: "./ico24/" + jsc[mi] + ".png"
})}).bindPopup(content,{minWidth:minw, maxWidth:maxw}).addTo(markers);
}
mi++;
}
if (jslayer.indexOf("-P") == -1) {
map.addLayer(markers);
L.edgeMarker({"radius":10,"weight":3}).addTo(map);
}
if (autozoom == "yes" && tooltip != "no") {
map.setView([0,0],jszoom);
map.fitBounds(markers.getBounds());
jslat = map.getCenter(markers).lat;
jslon = map.getCenter(markers).lng;
jszoom = map.getZoom(markers);
}
function mousepopup (marker, data) {
marker.bindPopup(data.title,{minWidth:120, maxWidth:120});
marker.on('mouseover', function (e) {
this.openPopup();
});
}
// Layer wvarticles
var destzoom= 9;
var nr = (addressPoints.length);
if (navigator.appVersion.substring(0, 1) == 4){
nr = nr - 1; // fix for old Explorers
}
var wvarticles = new PruneClusterForLeaflet(70);
var a = addressPoints[0];
var tp = '//upload.wikimedia.org/wikipedia/commons/thumb/'; // thumbnail path
var ap = '//' + jslang + '.wikivoyage.org/wiki/'; // WV article path
for (var i = 0; i < nr; i++) {
a = addressPoints[i];
wvarticles.RegisterMarker(new PruneCluster.Marker(a[0], a[1], {title:'<img src="' + tp + a[3] + '/120px-' + a[3].substring(5) + '"> <a href="' + ap + a[2] + '" target="_blank">' + a[2] + '</a>'}));
wvarticles.PrepareLeafletMarker = mousepopup;
}
if (jslayer.indexOf("D") != -1) {
map.addLayer(wvarticles);
}
// GPX-Layer
if (jgpxdata == "yes"){
var tracks = new L.GPX("./tracks.gpx", {async: true});
// .on("loaded", function(e) {} );
map.addLayer(tracks);
}
else {
var tracks = new L.GPX("./lib/empty.gpx", {async: true});
// .on("loaded", function(e) {} );
}
// MapMask
var mcolor = "black", mweight = 0, mopacity = 0, mfillOpacity = 0.2;
if (L.Browser.android) {
var mcolor = "blue", mweight = 5, mopacity = 0.2, mfillOpacity = 0;
}
if (mask != "") {
var mapmask = L.polygon(
[[[90, -180],[90, 180],[-90, 180],[-90, -180]],mask], // world, mask
{color: mcolor, weight: mweight, opacity: mopacity, fillOpacity: mfillOpacity, clickable: false}
).addTo(tracks);
map.addLayer(tracks);
}
// Controls
if (jslayer.indexOf("E") != -1) {
map.addControl(new L.Control.Geocoder({placeholder: L._("Locate!")}));
}
var basemaps = [];
basemaps[L._('Wikimedia') + ' <img src="./lib/images/wmf-logo-12.png" />'] = wikimedia;
basemaps[L._('Mapnik') + ' <img src="./lib/images/external.png" />'] = mapnik;
basemaps[L._('Relief_map') + ' <img src="./lib/images/external.png" />'] = landscape;
var overlays = [];
overlays[L._('Traffic_line_network') + ' <img src="./lib/images/external.png" />'] = traffic;
overlays[L._('Boundaries') + ' <img src="./lib/images/external.png" />'] = boundaries;
overlays[L._('Hill_shading') + ' <img src="./lib/images/external.png" />'] = hill;
overlays[L._('Cycling') + ' <img src="./lib/images/external.png" />'] = cycling;
overlays[L._('Hiking') + ' <img src="./lib/images/external.png" />'] = hiking;
overlays[L._('Points_of_interest') + ' <img src="./lib/images/wv-logo-12.png" />'] = markers;
overlays[L._('Destinations') + ' <img src="./lib/images/wv-logo-12.png" />'] = wvarticles;
overlays[L._('GPX_tracks_Map_mask') + ' <img src="./lib/images/wv-logo-12.png" />'] = tracks;
map.addControl(new L.Control.Layers(basemaps, overlays));
map.addControl(new L.Control.Scale());
var maptype = 'poimap2';
map.addControl(new L.Control.Buttons());
map.addControl(new L.Control.Locate());
// External content warning
var imgpath = "../lib/images/";
if (L.Browser.ie) {
imgpath = "./lib/images/";
}
var warning = 'url(' + imgpath + 'line.png) "' + L._('Content with {external} is hosted externally, so enabling it shares your data with other sites.',{external:' "url(' + imgpath + 'external.png)" '}) + '"';
document.styleSheets[1].cssRules[4].style.content = warning;
</script>
</div>
</body>
</html>