Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
if (!mw.loader.getState("theway.utilities"))
  mw.loader.implement("theway.utilities", ["//de.wikivoyage.org/w/index.php?title=Benutzer:Theway-source/utilities.js&action=raw&ctype=text/javascript"], null,  null);

mw.loader.using(["theway.utilities"], function () {
Debug ("---- mapframe ----");
  // global vars
  gsHrefSmall = ""; 
  gsText2     = "";
  goWindow    = undefined;
  gsMapHeight = PreferenceDefault ("mapframe_height", "420");
  gsMapWidth  = PreferenceDefault ("mapframe_width",  "420");

  // local vars
  var sHref, sLocnameUnescape;
  var sText1, sMapText, sMapFrameLoad, sMapFrameWindow;
  var oElement, oValues, oLocation = {};
  var oGeo    = document.getElementById("mw-indicator-i3-geo");
//  var oMapPos = document.getElementById('Sehensw.C3.BCrdigkeiten');

  // works only if coordinates and propper section exists
//  if (oGeo && oMapPos) {
//  if (oMapPos) {
  if (document.getElementById('Sehensw.C3.BCrdigkeiten') || document.getElementById('St.C3.A4dte')) {

    var sMapLoad           = PreferenceDefault ("mapframe_load");
    var iMapArticleMinsize = PreferenceDefault ("mapframe_article_minsize", "2000") * 1;
    var iContentBytes      = jQuery("#mw-content-text").text().length;
Debug ("-- mapframe sMapLoad: " + sMapLoad + ", iContentBytes: " + iContentBytes + ", iMapArticleMinsize: " + iMapArticleMinsize);

    oLocation = LocationCoordinates();
    
Debug ("-- mapframe 1");
    // attach the image at the end of the headline; https:tools.wmflabs.org, http: maps.wikivoyage-ev.org
//    sHref       = 'https://tools.wmflabs.org/wikivoyage/w/poimap2.php?lat=' + sNorth + '&lon=' + sEast + '&lang=de&name=' + sLocname + '&layer='
    sHref = 'https://tools.wmflabs.org/wikivoyage/w/poimap2.php?lat=' + oLocation.north + '&lon=' + oLocation.east + '&lang=de&name=' + oLocation.name + '&layer='
      + PreferenceDefault("mapframe_layer", "M") 
      + (PreferenceDefault("mapframe_markers", "true") == "true" ? "P" : "")
      + (PreferenceDefault("mapframe_hill")    == "true" ? "S" : "") + (PreferenceDefault("mapframe_boundaries") == "true" ? "B" : "")
      + (PreferenceDefault("mapframe_cycling") == "true" ? "C" : "") + (PreferenceDefault("mapframe_maplabels")  == "true" ? "L" : "") 
      + (PreferenceDefault("mapframe_hiking")  == "true" ? "H" : "")
      + (PreferenceDefault("mapframe_tracks")  == "true" ? "T" : "") ;

//    gsHrefSmall = sHref + '&zoom=' + iMapZoom;
//    sHrefFull   = sHref + '&zoom=' + (iMapZoom+1);
    gsHrefSmall = sHref + '&zoom=' + oLocation.zoom;
    sHrefFull   = sHref + '&zoom=' + (oLocation.zoom+1);
Debug ("-- mapframe 3");

    // text for map image 1) without image, 2) with image inside of iframe
    sLocnameUnescape = unescape(oLocation.name);
    sText1  = '<a href="/wiki/Datei:Map_icon_long.svg" class="image" style="float:left; margin-right:5px;">'
      + '<img alt="Karte" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/66/Map_icon_long.svg/250px-Map_icon_long.svg.png" width="66" height="33">'
      + '</a>' 
      + 'Stadtplan von <i>' + sLocnameUnescape + 
      '</i> von externer Webseite <a href="javascript:MapframeIFrame();">hier</a> laden, in <a class="external text" href="javascript:MapframeWindow(&quot;' + 
      gsHrefSmall + '&quot;, &quot;' + sLocnameUnescape + '&quot;);">separatem Fenster</a> oder als <a class="external text" href="' + 
      sHrefFull + '">Vollansicht</a> zeigen.';
    gsText2 = 'Stadtplan von <i>' + sLocnameUnescape + 
      '</i>. Auch als <a class="external text" href="javascript:MapframeWindow(&quot;' + 
      gsHrefSmall + '&quot;, &quot;' + sLocnameUnescape + '&quot;);">separates Fenster</a> oder <a class="external text" href="' + 
      sHrefFull + '">Vollansicht</a>.';
Debug ("-- mapframe 4");
    
    sMapFrameLoad   = PreferenceDefault("mapframe_load",   "");
    sMapFrameWindow = PreferenceDefault("mapframe_window", "");
Debug ("-- mapframe 5");
    if (iContentBytes >= iMapArticleMinsize) {
Debug ("-- mapframe 4");
      if (sMapFrameWindow == "true" && sMapFrameLoad == "true") {
        MapframeWindow (gsHrefSmall, sLocnameUnescape);
      } else {
Debug ("-- mapframe 6");
        sMapText = 
          '<div class="thumb tright"><div class="thumbinner" id=mapinner>'
          + '<div id="iframemaptext" class="thumbcaption noprint" style="width:' + gsMapWidth + 'px;">' + sText1
          + '</div></div></div>';

Debug ("-- mapframe 7");
/*
        oElement = document.getElementById('mapframe');
Debug ("-- mapframe oElement: " + oElement);
Debug ("-- mapframe oElement.getAttribute(): " + oElement.getAttribute("title"));
*/
Debug ("-- mapframe document.getElementById('mapframe'): " + document.getElementById('mapframe'));
        if (document.getElementById('mapframe')) {       // attach after a element with id "mapframe"
Debug ("-- mapframe 8");
          jQuery("#mapframe").first().each (function() {
//          jQuery("#mapframe").each (function() {
Debug ("-- mapframe 9");
Debug ("-- mapframe this: " + this);
Debug ("-- mapframe this: " + this.getAttribute("title"));
Debug ("-- mapframe 9.2");
//Debug ("-- mapframe $this: " + $this);
Debug ("-- mapframe $this.attr(href): " + $(this).attr("title"));
Debug ("-- mapframe 9.4");
          	sText1 = $(this).attr("title");
          	
//          	oValue = JSON.parse(sText1);
//Debug ("-- mapframe mapframe_height: " + oValue.mapframe_height);
          	
//          	oValue = JSON.parse("{" + sText1 + "}");
//Debug ("-- mapframe mapframe_height: " + oValue.mapframe_height);
          	
          	oValue = [];
          	oValue.push("{" + sText1 + "}");
Debug ("-- mapframe mapframe_height: " + oValue[0].mapframe_height);
          	
          	
Debug ("-- mapframe sText1: " + sText1);
            $(this).after(sMapText);
            gsMapWidth  = 500;
            gsMapHeight = 500;
            sMapFrameLoad = "true";
          });
        }
        else       // attach after the "Sehenswürdigkeiten" headline
//          jQuery("#Sehensw\\.C3\\.BCrdigkeiten:parent").parent().after(sMapText);
          jQuery("#Sehensw\\.C3\\.BCrdigkeiten:parent,#St\\.C3\\.A4dte:parent").first().parent().after(sMapText);

        if (sMapFrameLoad == "true") {
          MapframeIFrame();
        }
      
        // switch other map boxes to off
        if (PreferenceDefault("mapframe_dynmapoff") == "true") {
Debug ("-- mapframe 10");
          oElement = jQuery("[class='infobox'] [href*='http://maps.wikivoyage-ev.org']").closest("[class='infobox']");
          if (oElement.length > 0) {
            oElement.attr("style", "display:none;");
          }
        }
      }
    }
  }
}
);

//----  ----
function MapframeIFrame(){
  var oMapInner      = document.getElementById("mapinner");
  var oIFrameMapText = document.getElementById("iframemaptext");

  oIFrameMapText.innerHTML = gsText2;
  oMapInner.innerHTML = '<iframe id="iframemap" width="' + gsMapWidth + '" height="' + gsMapHeight + '" style="border:0" src="' + gsHrefSmall + '"></iframe>' 
    + oMapInner.innerHTML;
}


//---- get coordinates and zoom ----
function LocationCoordinates () {
Debug ("-- LocationCoordinates --");
  var iPos1, iPos2, iPos3, iScale, iContrary;
  var sHref;
  var oElement={}, oLocation={};
  var iMapZoom = 14;
  
  // like <a class="external text" href="http://de.wikivoyage.org/w/index.php?title=Spezial%3AMapsources&amp;params=48.85694_N_2.34126_E_scale:25000&amp;locname=Paris">...</a>
  oElement = jQuery("[href^='http://de.wikivoyage.org/w/index.php?title=Spezial%3AMapsources']");
Debug ("-- LocationCoordinates 2");

  if (oElement.length > 0) {
Debug ("-- LocationCoordinates 3");
    sHref = oElement.attr("href");
    iPos1           = sHref.indexOf("params") + 7;
    iPos2           = sHref.indexOf("_N_");
    iContrary       = 1;
    if (iPos2 == -1) {
      iPos2         = sHref.indexOf("_S_");
      iContrary     = -1;
    }
    oLocation.north = sHref.slice(iPos1, iPos2) * iContrary;  // north coordinate
    iPos3           = sHref.indexOf("_E_");
    iContrary       = 1;
    if (iPos3 == -1) {
      iPos3         = sHref.indexOf("_W_");
      iContrary     = -1;
    }
    oLocation.east  = sHref.slice(iPos2 + 3, iPos3) * iContrary;     // east coordinate
        
    iPos1           = sHref.indexOf("scale") + 6;
    iPos2           = sHref.indexOf("&", iPos1);
    if (iPos2 == -1) iPos2 = 555;
    iScale          = sHref.slice(iPos1, iPos2); // scale value
    oLocation.zoom  = ZoomByScale (iScale);
    iPos1           = sHref.indexOf("locname") + 8;
    iPos2           = sHref.indexOf("&", iPos1);
    if (iPos2 == -1) iPos2 = 555;
    oLocation.name  = sHref.slice(iPos1, iPos2); // location name
Debug ("-- LocationCoordinates 9");
Debug ("-- LocationCoordinates oLocation.north: " + oLocation.north + ", oLocation.east: " + oLocation.east);
Debug ("-- LocationCoordinates oLocation.scale: " + oLocation.scale + ", oLocation.name: " + oLocation.name);
  }
Debug ("-- LocationCoordinates 10");

    // zoom level
  
    // zoom factor indirectly by population (unfortunately area don't exist)
    var sPopulation, xsPopulation, iPopulation;
    var oQuickBarHeads;
    if (document.getElementsByClassName) {
      oElement = document.getElementsByClassName("qb")[0];   // works in Opera, FF
      if (oElement !== undefined) {
Debug ("-- LocationCoordinates oElement: " + oElement + (oElement !== undefined) + (typeof oElement !== undefined));
        oQuickBarHeads = oElement.getElementsByTagName("th");   // works in Opera, FF
      }
    } else {
      oQuickBarHeads = document.getElementsByTagName("table")[0].getElementsByTagName("th");  //getElementsByClassName don't understand every browser
    }
Debug ("-- oQuickBarHeads oElement: " + oQuickBarHeads);
    if (oQuickBarHeads !== undefined) {
      for (i=0; i<oQuickBarHeads.length; i++) {
        if (GetInnerText (oQuickBarHeads[i]) == "Einwohner") {
          sPopulation  = GetInnerText (oQuickBarHeads[i].parentNode.getElementsByTagName("td")[0]);
          xsPopulation = sPopulation.split(" ");   // may be population + date comment
          iPopulation  = (xsPopulation[0].replace(".", "")) * 1;        // and converted to number
Debug ("xsPopulation: " + xsPopulation + ", iPopulation: " + iPopulation);

//Debug ("REVISIONSIZE: " + {{REVISIONSIZE}} );
          if      (iPopulation < 4000)   {iMapZoom = 15;}   // perhaps to adapt
          else if (iPopulation > 500000) {iMapZoom = 12;}
          else if (iPopulation > 150000) {iMapZoom = 13;}
    } } }

  if (!(oLocation.zoom >= 0 && oLocation.zoom < 20))
    oLocation.zoom = 14;

  return oLocation;
}

//---- zoom level by scale ----
// http://wiki.openstreetmap.org/wiki/Zoom_levels
function ZoomByScale (iScale) {
  var iZoom = 14;

  if      (iScale <=      1000) iZoom = 19;
  else if (iScale <=      2000) iZoom = 18;
  else if (iScale <=      4000) iZoom = 17;
  else if (iScale <=      8000) iZoom = 16;
  else if (iScale <=     15000) iZoom = 15;
  else if (iScale <=     35000) iZoom = 14;
  else if (iScale <=     70000) iZoom = 13;
  else if (iScale <=    150000) iZoom = 12;
  else if (iScale <=    250000) iZoom = 11;
  else if (iScale <=    500000) iZoom = 10;
  else if (iScale <=   1000000) iZoom =  9;
  else if (iScale <=   2000000) iZoom =  8;
  else if (iScale <=   4000000) iZoom =  7;
  else if (iScale <=  10000000) iZoom =  6;
  else if (iScale <=  15000000) iZoom =  5;
  else if (iScale <=  35000000) iZoom =  4;
  else if (iScale <=  70000000) iZoom =  3;
  else if (iScale <= 150000000) iZoom =  2;
  else if (iScale <= 250000000) iZoom =  1;
  else if (iScale <= 500000000) iZoom =  0;

Debug ("-- ZoomByScale iZoom: " + iZoom);
  return iZoom;
}




//---- separate popup window ----
function MapframeWindow(sLink, sLocname)
{
  var sLeft   = PreferenceDefault("mapframe_window_left",    "0");
  var sTop    = PreferenceDefault("mapframe_window_top",     "0");
  var sWidth  = PreferenceDefault ("mapframe_window_width",  gsMapWidth);
  var sHeight = PreferenceDefault ("mapframe_window_height", gsMapHeight);

  // screenLeft, screenTop for Opera
  goWindow = window.open("", "mapframe-window", 
      "width="    + sWidth + ",height="  + sHeight +   
      ",left="    + sLeft  + ",top="     + sTop +
      ",screenX=" + sLeft  + ",screenY=" + sTop +
      ",screenLeft=" + sLeft  + ",screenTop=" + sTop +
      ",status=yes,resizable,scrollbars=no,dependent=yes");
  if (goWindow !== null) {
    var sCollapseUseChecked = PreferenceDefault("collapse_enable");

  	goWindow.document.open();
    goWindow.document.write(' \
<html><head><title>Stadtplan ' + sLocname + '</title> \
</head> \
\
<frameset onbeforeunload="document.cookie=&quot;mapframe_window_left=test;expires=1 Dec 2020 12:00 UTC&quot;;"> \
  <frame src="' + sLink + '"> \
</frameset></html>');
    goWindow.document.close();

    // store the last position and size of the popup window
    // onbeforeunload don't work in opera
    if (IsEventSupported("onbeforeunload"))
      oWindow.onbeforeunload=function() {StoreWindowPosition(goWindow, "mapframe_window"); };
    else
      oWindow.onunload=function()       {StoreWindowPosition(goWindow, "mapframe_window"); };

//    setInterval(MapframeWindowOnTop, 1000);
//    setInterval(function() {goWindow.focus();}, 2000);
  }
}

// ---- Popup window on top ----
function MapframeWindowOnTop () {
//  goWindow.focus();
  window.mapframe-window.focus();
}