|
|
Line 1: |
Line 1: |
| // [[image:Erioll_world.svg|18px]] '''WikiMiniAtlas''' <br>
| | Imported from http://www.splra.org/wiki/index.php?title=File:Tsp1994-03-23-ticket.jpg |
| // Script to embed interactive maps into pages that have coordinate templates <br>
| |
| // also check my user page [[User:Dschwen]] for more tools<pre>
| |
| //
| |
| // Revision 11.1
| |
| | |
| var wikiminiatlas =
| |
| {
| |
| config:
| |
| {
| |
| width : 600,
| |
| height : 400,
| |
| zoom : -1,
| |
| quicklink : false,
| |
| quicklinkurl : 'http://maps.google.com/maps?ll={latdegdec},{londegdec}&spn={span},{span}&q={latdegdec},{londegdec}',
| |
| enabled : true,
| |
| onlytitle : false,
| |
| iframeurl : 'http://stable.toolserver.org/wma/iframe.html',
| |
| imgbase : 'http://stable.toolserver.org/wma/tiles/',
| |
| coordurls : new Array (
| |
| 'http://stable.toolserver.org/geohack/geohack.php?',
| |
| 'http://stable.ts.wikimedia.org/geohack/geohack.php?',
| |
| 'http://toolserver.org/~magnus/geo/geohack.php?',
| |
| 'http://tools.wikimedia.de/~magnus/geo/geohack.php?',
| |
| 'http://www8.brinkster.com/erikbaas/wiki/maps.asp?',
| |
| 'http://www.nsesoftware.nl/wiki/maps.asp?'
| |
| ),
| |
| buttonImage:
| |
| 'http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Erioll_world.svg/18px-Erioll_world.svg.png'
| |
| },
| |
| | |
| strings:
| |
| {
| |
| buttonTooltip : {
| |
| af:'Vertoon ligging op \'n interaktiwe kaart.',
| |
| als:'Ort uf dr interaktivä Chartä zeigä',
| |
| ar:'شاهد الموقع على الخريطة التفاعلية',
| |
| bg:'покажи местоположението на интерактивната карта',
| |
| ca:'mostra la localització en un mapa interactiu',
| |
| da:'vis beliggenhed på interaktivt kort',
| |
| de:'Ort auf interaktiver Karte anzeigen',
| |
| el:'εμφάνιση τοποθεσίας σε διαδραστικό χάρτη',
| |
| en:'show location on an interactive map',
| |
| eo:'Montru lokigon sur interaktiva karto',
| |
| eu:'erakutsi kokalekua mapa interaktibo batean',
| |
| es:'mostrar el lugar en un mapa interactivo',
| |
| fr:'Montrer la localisation sur une carte interactive',
| |
| fur:'mostre la localizazion suntune mape interative',
| |
| fy:'it plak op in oanpasbere kaart oanjaan',
| |
| gl:'Amosar o lugar nun mapa interactivo',
| |
| he:'הראה מיקום במפה האינטראקטיבית',
| |
| hr:'prikaži lokaciju na interaktivnom zemljovidu',
| |
| hu:'Mutasd a helyet egy interaktív térképen!',
| |
| it:'mostra la località su una carta interattiva',
| |
| is:'sýna staðsetningu á gagnvirku korti',
| |
| id:'Tunjukkan letak di peta interaktif',
| |
| ja:'インタラクティブ地図上に位置を表示',
| |
| lt:'Rodyti vietą interaktyviame žemėlapyje',
| |
| mk:'Prikazi go mestoto na interaktivnata mapa',
| |
| nl:'de locatie op een interactieve kaart tonen',
| |
| no:'vis beliggenhet på interaktivt kart',
| |
| pl:'Pokaż lokalizację na mapie interaktywnej',
| |
| pt:'mostrar a localidade num mapa interactivo',
| |
| ro:'arată locaţia pe o hartă interactivă',
| |
| ru:'показать положение на интерактивной карте',
| |
| sk:'zobraz miesto na interaktívnej mape',
| |
| sl:'prikaži lokacijo na interaktivnem zemljevidu',
| |
| sq:'trego vendndodhjen në hartë',
| |
| fi:'näytä paikka interaktiivisella kartalla',
| |
| sv:'visa platsen på en interaktiv karta',
| |
| uk:'показати положення на інтерактивній карті',
| |
| vi:'mở lên vị trí này trên bản đồ tương tác',
| |
| vo:'Jonön topi su kaed itjäfidik',
| |
| zh:'显示该地在地图上的位置',
| |
| 'zh-cn':'显示该地在地图上的位置',
| |
| 'zh-sg':'显示该地在地图上的位置',
| |
| 'zh-tw':'顯示該地在地圖上的位置',
| |
| 'zh-hk':'顯示該地在地圖上的位置'
| |
| },
| |
| close : {
| |
| af:'Sluit',
| |
| als:'Zuä machä',
| |
| bg:'затвори',
| |
| ca:'tanca',
| |
| da:'luk',
| |
| de:'schließen',
| |
| el:'έξοδος',
| |
| en:'close',
| |
| eo:'fermu',
| |
| eu:'itxi',
| |
| es:'cerrar',
| |
| fr:'Quitter',
| |
| fur:'siere',
| |
| fy:'ticht',
| |
| gl:'pechar',
| |
| he:'לסגור',
| |
| hr:'zatvori',
| |
| hu:'bezárás',
| |
| id:'tutup',
| |
| is:'loka',
| |
| it:'chiudi',
| |
| ja:'閉じる',
| |
| lt:'uždaryti',
| |
| mk:'zatvori',
| |
| nl:'sluiten',
| |
| no:'lukk',
| |
| pl:'zamknij',
| |
| pt:'fechar',
| |
| ro:'închide',
| |
| ru:'закрыть',
| |
| sk:'zatvoriť',
| |
| sl:'zapri',
| |
| sq:'mbylle',
| |
| fi:'sulje',
| |
| sv:'stäng',
| |
| uk:'закрити',
| |
| vi:'đóng',
| |
| vo:'färmükön',
| |
| zh:'关闭',
| |
| 'zh-cn':'关闭',
| |
| 'zh-sg':'关闭',
| |
| 'zh-tw':'關閉',
| |
| 'zh-hk':'關閉',
| |
| ar:'غلق'
| |
| }
| |
| },
| |
| | |
| link : null,
| |
| links : null,
| |
| bodyc : null,
| |
| | |
| language : '',
| |
| site: '',
| |
| iframe : { div: null, iframe: null, closebutton: null},
| |
| mapbutton: null,
| |
| marker : { lat:0, lon:0 },
| |
| | |
| coordinates : null,
| |
| coord_index: 0,
| |
| coord_params: '',
| |
| coord_filter: null,
| |
| | |
| quicklinkbox : null,
| |
| quicklinkdest : null,
| |
| | |
| region_index : 0,
| |
| coordinate_region : '',
| |
| | |
| WikiMiniAtlasHTML : '',
| |
| | |
| // cross-browser event attachment (John Resig)
| |
| // http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
| |
| addEvent : function ( obj, type, fn )
| |
| {
| |
| if (obj.addEventListener)
| |
| obj.addEventListener( type, fn, false );
| |
| else if (obj.attachEvent)
| |
| {
| |
| obj["e"+type+fn] = fn;
| |
| obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
| |
| obj.attachEvent( "on"+type, obj[type+fn] );
| |
| }
| |
| },
| |
|
| |
| // vertikale position auf der Seite bestimmen
| |
| totalOffset : function( obj, offset )
| |
| {
| |
| if( obj.offsetParent == null ||
| |
| obj.offsetParent.id == 'content' )
| |
| return offset + obj.offsetTop;
| |
| else
| |
| return wikiminiatlas.totalOffset(obj.offsetParent, offset + obj.offsetTop );
| |
| },
| |
| | |
| // move iframe around and toggle visibility
| |
| toggleIFrame : function( e )
| |
| {
| |
| with(wikiminiatlas)
| |
| {
| |
| var newurl = config.iframeurl + '?' + this.mapparam;
| |
| | |
| if(iframe.div.style.visibility != "visible" ||
| |
| ( ( iframe.iframe.src != newurl ) && ( this.mapparam != '' ) ) )
| |
| {
| |
| if( iframe.iframe.src != newurl )
| |
| {
| |
| iframe.iframe.src = newurl;
| |
| }
| |
| iframe.div.style.top = (totalOffset( this, 0 ) + 20 ) + 'px';
| |
| iframe.div.style.visibility="visible";
| |
| }
| |
| else
| |
| iframe.div.style.visibility="hidden";
| |
| }
| |
| return false;
| |
| },
| |
| | |
| // start the timer to fade in the quicklink tooltip
| |
| qlStart : function()
| |
| {
| |
| },
| |
| | |
| // abort the timer, hide the tooltip
| |
| qlStop : function()
| |
| {
| |
| },
| |
|
| |
| // show the tooltip menu
| |
| qlShowMenu : function()
| |
| {
| |
| },
| |
|
| |
| // fill in the map-service templates
| |
| qlURL : function( lat, lon, zoom )
| |
| {
| |
| var url = wikiminiatlas.config.quicklinkurl;
| |
| | |
| url = url.replace( /\{latdegdec\}/g, lat );
| |
| url = url.replace( /\{londegdec\}/g, lon );
| |
| | |
| var span = Math.pow( 2.0, zoom) / 150.0;
| |
| url = url.replace( /\{span\}/g, span.toFixed(4) );
| |
| | |
| return url;
| |
| },
| |
|
| |
| // Check against coordinate urls
| |
| isMaplink : function( url_orig )
| |
| {
| |
| if( typeof(url_orig) != 'string' ) return false;
| |
| | |
| // needed for the russian WP
| |
| var url, err;
| |
| try { url = decodeURI( url_orig ) } catch( err ) { url = url_orig }
| |
| | |
| with(wikiminiatlas)
| |
| {
| |
| // for( var key = 0; key < config.coordurls.length; key++ ) {
| |
| for( var key in config.coordurls ) {
| |
| if( url.substr(0,config.coordurls[key].length) == config.coordurls[key] )
| |
| return true;
| |
| }
| |
| }
| |
|
| |
| return false;
| |
| },
| |
| | |
| // Insert the IFrame into the page.
| |
| loader : function()
| |
| {
| |
| // apply settings
| |
| if( typeof(wma_settings) == 'object' )
| |
| for (var key in wma_settings)
| |
| {
| |
| if( typeof(wma_settings[key]) == typeof(wikiminiatlas.config[key]) )
| |
| wikiminiatlas.config[key] = wma_settings[key];
| |
| }
| |
| | |
| if( wikiminiatlas.config.enabled == false ) return;
| |
| | |
| with(wikiminiatlas)
| |
| {
| |
| site = window.location.host.substr(0,window.location.host.indexOf('.'));
| |
| language = wgUserLanguage;
| |
| | |
| var len; // cache array length for iterations
| |
| | |
| // remove stupid icons from title coordinates
| |
| var coord_title = document.getElementById('coordinates') || document.getElementById('coordinates-title');
| |
| if( coord_title ) {
| |
| var icons = coord_title.getElementsByTagName('a');
| |
| len = icons.length;
| |
| for( var key = 0; key < len; key++ ) {
| |
| if( typeof(icons[key]) == 'object' &&
| |
| icons[key] != null &&
| |
| icons[key].className == 'image' )
| |
| icons[key].parentNode.removeChild(icons[key]);
| |
| }
| |
| }
| |
| | |
| | |
| if( config.onlytitle )
| |
| {
| |
| bodyc = document.getElementById('coordinates') || document.getElementById('coordinates-title');
| |
| if( bodyc == null ) return;
| |
| }
| |
| else
| |
| {
| |
| // the french moved their title coordinates outside of bodyContent!
| |
| if( site == 'fr' )
| |
| bodyc = document.getElementById('content') || document;
| |
| else
| |
| bodyc = document.getElementById('bodyContent') || document;
| |
| }
| |
| | |
| links = bodyc.getElementsByTagName('a');
| |
| len = links.length;
| |
| for( var key = 0; key < len; key++ )
| |
| {
| |
| link = links[key];
| |
| if( link.className == 'external text' && isMaplink(link.href) )
| |
| {
| |
| coordinates = link.href;
| |
| coord_index = coordinates.indexOf('params=');
| |
| if(coord_index>-1)
| |
| {
| |
| coord_params = coordinates.substr(coord_index+7);
| |
| | |
| // degrees
| |
| coord_filter = /([\d+-.]+)_([NS])_([\d+-.]+)_([EOW])/;
| |
| if(coord_filter.test(coord_params))
| |
| {
| |
| coord_filter.exec(coord_params);
| |
| marker.lat=RegExp.$1;
| |
| if(RegExp.$2=='S') marker.lat*=-1;
| |
| marker.lon=RegExp.$3;
| |
| if(RegExp.$4=='W') marker.lon*=-1;
| |
| }
| |
| | |
| // degrees, minutes
| |
| coord_filter = /([\d+-.]+)_([\d+-.]+)_([NS])_([\d+-.]+)_([\d+-.]+)_([EOW])/;
| |
| if(coord_filter.test(coord_params))
| |
| {
| |
| coord_filter.exec(coord_params);
| |
| marker.lat=(1.0*RegExp.$1) + (RegExp.$2/60.0);
| |
| if(RegExp.$3=='S') marker.lat*=-1;
| |
| marker.lon=(1.0*RegExp.$4) + (RegExp.$5/60.0);
| |
| if(RegExp.$6=='W') marker.lon*=-1;
| |
| }
| |
| | |
| // degrees, minutes, seconds (+ fix for weird russian coords)
| |
| coord_filter = /([\d+-.]+)_([\d+-.]*)_([\d+-.]*)_([NS])_([\d+-.]+)_([\d+-.]*)_([\d+-.]*)_([EOW])/;
| |
| if(coord_filter.test(coord_params))
| |
| {
| |
| coord_filter.exec(coord_params);
| |
| marker.lat=(1.0*RegExp.$1) + (RegExp.$2/60.0) + (RegExp.$3/3600.0);
| |
| if(RegExp.$4=='S') marker.lat*=-1;
| |
| marker.lon=(1.0*RegExp.$5) + (RegExp.$6/60.0) + (RegExp.$7/3600.0);
| |
| if(RegExp.$8=='W') marker.lon*=-1;
| |
| }
| |
|
| |
| /*
| |
| region_index = coordinates.indexOf('region:');
| |
| if(region_index>-1)
| |
| {
| |
| coordinate_region = coordinates.substr(region_index+7);
| |
| coordinate_region = coordinate_region.substr(0,coordinate_region.indexOf('"'));
| |
| }
| |
| */
| |
| | |
| // check the globe parameter
| |
| var clc = coordinates.toLowerCase();
| |
| if( ( clc.indexOf('globe:') > -1 ) && ( clc.indexOf('globe:earth') == -1 ) )
| |
| {
| |
| break;
| |
| }
| |
| | |
| // If given use dim or scale for a zoomlevel
| |
| var zoomlevel = config.zoom;
| |
| if( zoomlevel < 0 )
| |
| {
| |
| var ds_filter = /(dim|scale):([\d+-.]+)/;
| |
| if( ds_filter.test( clc ) )
| |
| {
| |
| ds_filter.exec(coord_params);
| |
| var val = ( RegExp.$2 )
| |
| if( RegExp.$1 == 'dim' )
| |
| {
| |
| }
| |
| else // scale
| |
| {
| |
| }
| |
| }
| |
| }
| |
| | |
| // Find a sensible Zoom-level based on type
| |
| if( zoomlevel < 0 )
| |
| {
| |
| zoomlevel = 1;
| |
| if( coord_params.indexOf('type:landmark') >= 0 ) zoomlevel = 8;
| |
| if( coord_params.indexOf('type:city') >= 0 ) zoomlevel = 4;
| |
| }
| |
| | |
| // Test the unicode Symbol
| |
| if( site == 'de' && link.parentNode.id != 'coordinates' )
| |
| {
| |
| mapbutton = document.createElement('SPAN');
| |
| mapbutton.appendChild( document.createTextNode('♁') );
| |
| mapbutton.style.color = 'blue';
| |
| }
| |
| else
| |
| {
| |
| mapbutton = document.createElement('img');
| |
| mapbutton.src = config.buttonImage;
| |
| }
| |
| mapbutton.title = strings.buttonTooltip[language] || strings.buttonTooltip.en;
| |
| mapbutton.style.padding = '0px 3px 0px 0px';
| |
| mapbutton.style.cursor = 'pointer';
| |
| mapbutton.className = 'noprint';
| |
| mapbutton.mapparam =
| |
| marker.lat + '_' + marker.lon + '_' +
| |
| config.width + '_' + config.height + '_' +
| |
| site + '_' + zoomlevel + '_' + language;
| |
| addEvent( mapbutton, 'click', toggleIFrame );
| |
| | |
| // link.parentNode.insertBefore(mapbutton, link.nextSibling);
| |
| link.parentNode.insertBefore(mapbutton,link);
| |
| | |
| if ( config.quicklink ) {
| |
| link.href = qlURL( marker.lat, marker.lon, zoomlevel );
| |
| addEvent( link, 'mouseover', qlStart );
| |
| addEvent( link, 'mouseout', qlStop );
| |
| }
| |
| }
| |
| | |
| /* var def_zoom = '';
| |
| if( typeof(wikiminiatlas_defaultzoom) == 'number' )
| |
| def_zoom = '_' + wikiminiatlas_defaultzoom; */
| |
| | |
| }
| |
| | |
| } //for
| |
| | |
| // prepare quicklink menu box
| |
| if ( coordinates != null && config.quicklink ) {
| |
| quicklinkbox = document.createElement('div');
| |
| // more to come :-)
| |
| }
| |
| | |
| // prepare iframe to house the map
| |
| if ( coordinates != null ) {
| |
| iframe.div = document.createElement('div');
| |
| iframe.div.style.visibility = 'hidden';
| |
| iframe.div.style.width = (config.width+2)+'px';
| |
| iframe.div.style.height = (config.height+2)+'px';
| |
| iframe.div.style.margin = '0px';
| |
| iframe.div.style.padding = '0px';
| |
| iframe.div.style.backgroundColor = 'white';
| |
| iframe.div.style.position = 'absolute';
| |
| iframe.div.style.right = '2em';
| |
| iframe.div.style.top = '1em';
| |
| iframe.div.style.border = '1px solid gray';
| |
| iframe.div.style.zIndex = 13;
| |
| | |
| iframe.closebutton = document.createElement('img');
| |
| iframe.closebutton.title = strings.close[language] || strings.close.en;
| |
| // was: config.imgbase + 'button_hide.png'
| |
| iframe.closebutton.src = 'http://upload.wikimedia.org/wikipedia/commons/d/d4/Button_hide.png'
| |
| iframe.closebutton.style.zIndex = 15;
| |
| iframe.closebutton.style.position = 'absolute';
| |
| iframe.closebutton.style.right = '11px';
| |
| iframe.closebutton.style.top = '9px';
| |
| iframe.closebutton.style.width = '18px';
| |
| iframe.closebutton.style.cursor = 'pointer';
| |
| iframe.closebutton.mapparam = '';
| |
| addEvent( iframe.closebutton, 'click', toggleIFrame );
| |
| | |
| iframe.iframe = document.createElement('iframe');
| |
| iframe.iframe.scrolling = 'no';
| |
| iframe.iframe.frameBorder = '0';
| |
| iframe.iframe.style.zIndex = 14;
| |
| iframe.iframe.style.position = 'absolute';
| |
| iframe.iframe.style.right = '1px';
| |
| iframe.iframe.style.top = '1px';
| |
| iframe.iframe.style.width = (config.width)+'px';
| |
| iframe.iframe.style.height = (config.height)+'px';
| |
| iframe.iframe.style.margin = '0px';
| |
| iframe.iframe.style.padding = '0px';
| |
| | |
| iframe.div.appendChild(iframe.iframe);
| |
| iframe.div.appendChild(iframe.closebutton);
| |
| | |
| var content = document.getElementById('content') || document.getElementById('mw_content');
| |
| if(content)
| |
| content.insertBefore(iframe.div,content.childNodes[0]);
| |
| }
| |
| } //with
| |
| }
| |
| | |
| }
| |
| | |
| //
| |
| // Hook up installation function
| |
| //
| |
| addOnloadHook(wikiminiatlas.loader);
| |
| | |
| //</pre>
| |