Benutzer:Dschwen/wikiminiatlas.js

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 16. Mai 2006 um 13:10 Uhr durch Dschwen (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//<pre>
// Script to embed interactive maps into pages that have coordinate templates
// also check my commons page [[:commons:User:Dschwen]] for more tools

//
// defaults
//
var wikiminiatlas_coordinate_region = '';
var wikiminiatlas_width = 500;
var wikiminiatlas_height = 300;

//
// globals
//
var wikiminiatlas_widget = null;
var wikiminiatlas_map = 0;
var wikiminiatlas_nx;
var wikiminiatlas_ny;
var wikiminiatlas_tile;
var wikiminiatlas_old_onmouseup;
var wikiminiatlas_old_onmousemove;
var wikiminiatlas_dragging = null;
var wikiminiatlas_gx = 0;
var wikiminiatlas_gy = 0;
var wikiminiatlas_zoom = 0;
var wikiminiatlas_zoomsize = [ 3, 6 ,12 ,24 ,48 ];

//
// Insert the map Widget into the page.
//
function wikiminiatlasInstall()
{
 coordinates = document.getElementById('coordinates');
 if (coordinates != null && wikiminiatlas_widget == null) {
  var region_index = (coordinates.innerHTML).indexOf('region:');
  if(region_index>-1)
  {
   wikiminiatlas_coordinate_region = (coordinates.innerHTML).substr(region_index+7);
   wikiminiatlas_coordinate_region = wikiminiatlas_coordinate_region.substr(0,wikiminiatlas_coordinate_region.indexOf('"'));
  }
  WikiMiniAtlasHTML =  '&nbsp;<a href="#" onclick="return toggleWikiMiniAtlas();">Atlas</a>';
  WikiMiniAtlasHTML += '<div id="wikiminiatlas_widget" style="z-index:10; position:absolute; right:1em; top: 1em; width:'+(wikiminiatlas_width)+'px; height:'+(wikiminiatlas_height)+'px; border: 1px solid gray; background-color: white; padding: 5px; margin: 0px; visibility: hidden">';
  WikiMiniAtlasHTML += '<div style="z-index:11; position:absolute; right:10px; top: 10px; width:1em; text-align:center; border:1px solid black; background-color:white; cursor:pointer" onclick="wmaZoomIn()">+</div>'
  WikiMiniAtlasHTML += '<div style="z-index:11; position:absolute; right:10px; top: 40px; width:1em; text-align:center; border:1px solid black; background-color:white; cursor:pointer" onclick="wmaZoomOut()">-</div>'
  WikiMiniAtlasHTML += '<a href="http://www.schwen.de" style="z-index:11; position:absolute; bottom:10px; right: 10px; color:black; font-size:5pt">MiniWikiAtlas</a>'
  WikiMiniAtlasHTML += '<div id="wikiminiatlas_map" style="position:absolute; width:'+wikiminiatlas_width+'px; height:'+wikiminiatlas_height+'px; border: 1px solid gray; cursor: move; background-color: #aaaaaa; clip:rect(0px, '+wikiminiatlas_width+'px, '+wikiminiatlas_height+'px, 0px);"></div>';
  WikiMiniAtlasHTML += '</div>';

  coordinates.innerHTML = coordinates.innerHTML + WikiMiniAtlasHTML ;
  wikiminiatlas_widget  = document.getElementById('wikiminiatlas_widget');

  wikiminiatlas_old_onmouseup = document.onmouseup;
  wikiminiatlas_old_onmousemove = document.onmousemove;

  initializeWikiMiniAtlasMap();
  moveWikiMiniAtlasMapTo();
 }
}

//
// Hook up instalation function
//
addOnloadHook(wikiminiatlasInstall);

//
// Coordinate interpretation
//
function toggleWikiMiniAtlas()
{
 if(wikiminiatlas_widget.style.visibility != "visible")
 {
   wikiminiatlas_widget.style.visibility="visible";
 }
 else
 {
   wikiminiatlas_widget.style.visibility="hidden";
 }

 return false;
}

function initializeWikiMiniAtlasMap()
{
 if(wikiminiatlas_map == 0)
 {
  wikiminiatlas_map = document.getElementById('wikiminiatlas_map');
  wikiminiatlas_map.onmousedown = mouseDownWikiMiniAtlasMap;
  document.onmousemove = mouseMoveWikiMiniAtlasMap;
  document.onmouseup = mouseUpWikiMiniAtlasMap;

  wikiminiatlas_nx = Math.floor(wikiminiatlas_width/128)+2;
  wikiminiatlas_ny = Math.floor(wikiminiatlas_height/128)+2;
  wikiminiatlas_tile = new Array(wikiminiatlas_nx*wikiminiatlas_ny);

  var n = 0;
  var thistile;

  for(var j = 0; j < wikiminiatlas_ny; j++)
   for(var i = 0; i < wikiminiatlas_nx; i++)
   {
    //wikiminiatlas_map.innerHTML += '<image id="wmatile'+n+'" style="position:absolute" />';
    //wikiminiatlas_map.innerHTML += '<div id="wmatile'+n+'" style="position:absolute; width:128px; height:128px; border: 1px solid red">'+n+'</div>';
    wikiminiatlas_map.innerHTML += '<div id="wmatile'+n+'" style="position:absolute; width:128px; height:128px;"></div>';
    //wikiminiatlas_tile[n] = new Image(128,128);

    thistile = document.getElementById('wmatile'+n);
    thistile.onmousedown = mouseDownWikiMiniAtlasMap;
    //thistile.onmouseup = mouseUpWikiMiniAtlasMap;

    n++;
   }
 }
}

//
// Set new map Position (to wikiminiatlas_gx, wikiminiatlas_gy)
//
function moveWikiMiniAtlasMapTo()
{
 var lx = Math.floor(wikiminiatlas_gx/128) % wikiminiatlas_nx;
 var ly = Math.floor(wikiminiatlas_gy/128) % wikiminiatlas_ny;
 var fx = wikiminiatlas_gx % 128;
 var fy = wikiminiatlas_gy % 128;
 var n;
 var thistile;
 var tileurl;

 //document.getElementById('debugbox').innerHTML='';

 for(var j = 0; j < wikiminiatlas_ny; j++)
  for(var i = 0; i < wikiminiatlas_nx; i++)
  {
   n = ((i+lx) % wikiminiatlas_nx) + ((j+ly) % wikiminiatlas_ny)*wikiminiatlas_nx;

   thistile = document.getElementById('wmatile'+n);
   thistile.style.left = (i*128-fx) + 'px';
   thistile.style.top  = (j*128-fy) + 'px';

   //thistile.innerHTML = (Math.floor(wikiminiatlas_gx/128)+i)+','+(Math.floor(wikiminiatlas_gy/128)+j);
   tileurl='url("'+wmaGetTileURL((Math.floor(wikiminiatlas_gy/128)+j),(Math.floor(wikiminiatlas_gx/128)+i),wikiminiatlas_zoom)+'")';

   if(wikiminiatlas_tile[n]!=tileurl)
   {
    wikiminiatlas_tile[n] = tileurl;
    thistile.style.backgroundImage=tileurl;

    //thistile.innerHTML=tileurl;
   }

   //document.getElementById('debugbox').innerHTML+=wmaGetTileURL((Math.floor(wikiminiatlas_gy/128)+j),(Math.floor(wikiminiatlas_gx/128)+i),1)+'<br />';
  }
}

//
// Mouse down handler (start map-drag)
//
function mouseDownWikiMiniAtlasMap(ev)
{
 ev = ev || window.event;
 wikiminiatlas_dragging = wmaMouseCoords(ev);
}

//
// Mouse up handler (finish map-drag)
//
function mouseUpWikiMiniAtlasMap()
{
 wikiminiatlas_dragging = null;
 if( wikiminiatlas_old_onmouseup != null ) wikiminiatlas_old_onmouseup();
}

// Mouse move handler
function mouseMoveWikiMiniAtlasMap(ev)
{
 if( wikiminiatlas_dragging != null )
 {
  var newev = ev || window.event;
  var newcoords = wmaMouseCoords(newev);

  wikiminiatlas_gx -= ( newcoords.x - wikiminiatlas_dragging.x );
  wikiminiatlas_gy -= ( newcoords.y - wikiminiatlas_dragging.y );
  wikiminiatlas_dragging = newcoords;

  if(wikiminiatlas_gy<0) wikiminiatlas_gy=0;
  if(wikiminiatlas_gx<0) wikiminiatlas_gx+=Math.floor(wikiminiatlas_zoomsize[wikiminiatlas_zoom]*256);

  moveWikiMiniAtlasMapTo();
 }

 if( wikiminiatlas_old_onmousemove != null ) wikiminiatlas_old_onmousemove(ev); 
}

function wmaMouseCoords(ev)
{
 if(ev.pageX || ev.pageY)
 {
  return {x:ev.pageX, y:ev.pageY};
 }
 return {
  x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
  y:ev.clientY + document.body.scrollTop  - document.body.clientTop
 };
}

function wmaGetTileURL(y,x,z)
{
 return 'http://up2p77.gwdg.de/~daniel/MiniWikiAtlas/tiles/zoom'+(z+1)+'/tile_'+(wikiminiatlas_zoomsize[z]-y-1)+'_'+(x % (wikiminiatlas_zoomsize[z]*2) )+'.png';
}

function wmaZoomIn()
{
 if(wikiminiatlas_zoom<4) wikiminiatlas_zoom++; 
 moveWikiMiniAtlasMapTo();
}

function wmaZoomOut()
{
 if(wikiminiatlas_zoom>0) wikiminiatlas_zoom--; 
 moveWikiMiniAtlasMapTo();
}

//</pre>