|
|
Line 1: |
Line 1: |
| // [[File:Erioll_world.svg|18px]] '''WikiMiniAtlas''' <br>
| | Imported from http://www.splra.org/wiki/index.php?title=File:Tsp2012-05-26-RiRL-posterad.jpg |
| // Script to embed interactive maps into pages that have coordinate templates <br>
| |
| // also check my user page [[User:Dschwen]] for more tools
| |
| // <nowiki>
| |
| //
| |
| // Revision 16.5
| |
| | |
| jQuery(function ($) {
| |
| var config = {
| |
| width : 600,
| |
| height : 400,
| |
| timeout : 5000,
| |
| zoom : -1,
| |
| quicklink : false,
| |
| quicklinkurl : '//maps.google.com/maps?ll={latdegdec},{londegdec}&spn={span},{span}&q={latdegdec},{londegdec}',
| |
| enabled : true,
| |
| onlytitle : false,
| |
| flowTextTooltips: (location.host === "en.wikipedia.org"),
| |
| alwaysTooltips: false,
| |
| iframeurl : '//toolserver.org/~dschwen/wma/iframe2.html',
| |
| imgbase : '//toolserver.org/~dschwen/wma/tiles/',
| |
| buttonImage: '//upload.wikimedia.org/wikipedia/commons/thumb/5/55/WMA_button2b.png/17px-WMA_button2b.png'
| |
| },
| |
| strings = {
| |
| buttonTooltip : {
| |
| af:'Vertoon ligging op \'n interaktiwe kaart.',
| |
| als:'Ort uf dr interaktivä Chartä zeigä',
| |
| ar:'شاهد الموقع على الخريطة التفاعلية',
| |
| 'be-tarask':'паказаць месцазнаходжаньне на інтэрактыўнай мапе',
| |
| 'be-x-old':'паказаць месцазнаходжаньне на інтэрактыўнай мапе',
| |
| bar:'Ort af da interaktivn Kartn zoagn',
| |
| bg:'покажи местоположението на интерактивната карта',
| |
| bpy:'জীবন্ত মানচিত্রগর মা মাপাহান দেখাদিতই',
| |
| br:'diskouez al lec\'hiadur war ur gartenn etrewezhiat',
| |
| ca:'mostra la localització en un mapa interactiu',
| |
| cs:'zobraz místo na interaktivní mapě',
| |
| da:'vis beliggenhed på interaktivt kort',
| |
| de:'Ort auf interaktiver Karte anzeigen',
| |
| dsb:'Městno na interaktiwnej kórśe zwobrazniś',
| |
| fa:'نمایش مکان در نقشهای پویا',
| |
| el:'εμφάνιση τοποθεσίας σε διαδραστικό χάρτη',
| |
| en:'Show location on an interactive map',
| |
| bn:'সক্রিয় মানচিত্রে অবস্থান চিহ্নিত করুন',
| |
| 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:'הראה מיקום במפה האינטראקטיבית',
| |
| hi:'सक्रिय नक्शे पर लोकेशन या स्थान दिखायें',
| |
| hr:'prikaži lokaciju na interaktivnom zemljovidu',
| |
| hsb:'Městno na interaktiwnej karće zwobraznić',
| |
| hu:'Mutasd a helyet egy interaktív térképen!',
| |
| hy:'ցուցադրել դիրքը ինտերակտիվ քարտեզի վրա',
| |
| id:'Tunjukkan lokasi di peta interaktif',
| |
| ilo:'Ipakita ti lokasion idiay interaktibo a mapa',
| |
| is:'sýna staðsetningu á gagnvirku korti',
| |
| it:'mostra la località su una carta interattiva',
| |
| ja:'インタラクティブ地図上に位置を表示',
| |
| km:'បង្ហាញទីតាំងនៅលើផែនទីអន្តរកម្ម',
| |
| ko:'인터랙티브 지도에 위치를 표시',
| |
| lt:'Rodyti vietą interaktyviame žemėlapyje',
| |
| lv:'Rādīt atrašanās vietu interaktīvajā kartē',
| |
| mk:'прикажи положба на интерактивна карта',
| |
| nl:'de locatie op een interactieve kaart tonen',
| |
| no:'vis beliggenhet på interaktivt kart',
| |
| nv:'kéyah tʼáá dah siʼą́ą́ ńtʼę́ę́ʼ beʼelyaaígíí',
| |
| 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 lego na interaktivnem zemljevidu',
| |
| sq:'trego vendndodhjen në hartë',
| |
| fi:'näytä paikka interaktiivisella kartalla',
| |
| sv:'visa platsen på en interaktiv karta',
| |
| tr:'Yeri interaktif bir haritada göster',
| |
| uk:'показати положення на інтерактивній карті',
| |
| vi:'xem 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ä',
| |
| ar:'غلق',
| |
| 'be-tarask':'закрыць',
| |
| 'be-x-old':'закрыць',
| |
| bar:'zuamachn',
| |
| bg:'затвори',
| |
| bpy:'জিপা',
| |
| br:'serriñ',
| |
| ca:'tanca',
| |
| cs:'zavřít',
| |
| da:'luk',
| |
| de:'schließen',
| |
| dsb:'zacyniś',
| |
| nv:'doo yishʼį́ nisin da',
| |
| el:'έξοδος',
| |
| en:'close',
| |
| bn:'বন্ধ করুন',
| |
| eo:'fermu',
| |
| eu:'itxi',
| |
| es:'cerrar',
| |
| fa:'بستن',
| |
| fr:'Quitter',
| |
| fur:'siere',
| |
| fy:'ticht',
| |
| gl:'pechar',
| |
| he:'לסגור',
| |
| hi:'बंद करें',
| |
| hr:'zatvori',
| |
| hsb:'začinić',
| |
| hu:'bezárás',
| |
| hy:'փակել',
| |
| id:'tutup',
| |
| ilo:'irikep',
| |
| is:'loka',
| |
| it:'chiudi',
| |
| ja:'閉じる',
| |
| km:'បិទ',
| |
| ko:'닫기',
| |
| lt:'uždaryti',
| |
| lv:'aizvērt',
| |
| mk:'затвори',
| |
| nl:'sluiten',
| |
| no:'lukk',
| |
| pl:'zamknij',
| |
| pt:'fechar',
| |
| ro:'închide',
| |
| ru:'закрыть',
| |
| sk:'zatvoriť',
| |
| sl:'zapri',
| |
| sq:'mbylle',
| |
| fi:'sulje',
| |
| sv:'stäng',
| |
| tr:'kapat',
| |
| uk:'закрити',
| |
| vi:'đóng',
| |
| vo:'färmükön',
| |
| zh:'关闭',
| |
| 'zh-cn':'关闭',
| |
| 'zh-sg':'关闭',
| |
| 'zh-tw':'關閉',
| |
| 'zh-hk':'關閉'
| |
| },
| |
| resize : {
| |
| ar: 'تغيير حجم',
| |
| ca: 'redimensionar',
| |
| de: 'Größe ändern',
| |
| dk: 'ændre størrelse',
| |
| en: 'resize',
| |
| es: 'cambiar el tamaño',
| |
| fi: 'muuttaa jonkin kokoa',
| |
| fr: 'redimensionner',
| |
| ja: 'サイズを変更する',
| |
| nl: 'vergroten of verkleinen',
| |
| no: 'endre størrelse',
| |
| sv: 'ändra storlek'
| |
| }
| |
| },
| |
| | |
| language = '', site = '',
| |
| iframe = { div: null, iframe: null, closebutton: null, resizebutton: null, resizehelper: null, indom: false },
| |
|
| |
| page_title = (mw.config.get( 'wgNamespaceNumber' )==0) ? encodeURIComponent(mw.config.get( 'wgTitle' )) : '',
| |
| | |
| bodyc,
| |
| coord_filter = /¶ms=([\d.+-]+)_([\d.+-]*)_?([\d.+-]*)_?([NSZ])_([\d.+-]+)_([\d.+-]*)_?([\d.+-]*)_?([EOW])([^&=<>|]{0,250})/,
| |
| coord_list = [],
| |
| coord_highlight = -1,
| |
| //region_index = 0,
| |
| //coordinate_region = '',
| |
| | |
| kml = null,
| |
| mes = null,
| |
| | |
| quicklinkbox = null,
| |
| quicklinkdest = null;
| |
| | |
| // check if we are in a right-to-left-script project
| |
| function isRTL() {
| |
| return /(^|\s)rtl(\s|$)/.test(document.body.className);
| |
| }
| |
| | |
| // get position on page
| |
| function yPos(el) {
| |
| return $(el).offset().top + $(el).outerHeight();
| |
| }
| |
| | |
| // show, move, and update iframe
| |
| function showIFrame(e) {
| |
| var wi = iframe, my = yPos(this),
| |
| newurl = config.iframeurl + '?wma=' + e.data.param + '&lang=' + site + '&page=' + page_title;
| |
| | |
| // insert iframe into DOM on demand (to preserve page caching)
| |
| if( !wi.indom ) {
| |
| $('#content,#mw_content').prepend(wi.div);
| |
| wi.indom = true;
| |
| }
| |
| | |
| if( wi.iframe.attr('src') !== newurl ) {
| |
| wi.iframe.attr( 'src', newurl );
| |
| } else if( wi.div.css('display') !== 'none' ) {
| |
| wi.div.hide();
| |
| return false;
| |
| }
| |
| wi.div.css( 'top', my+'px' ).show();
| |
| return false;
| |
| }
| |
| | |
| // fill in the map-service templates
| |
| function qlURL( lat, lon, zoom ) {
| |
| var url = config.quicklinkurl,
| |
| span = Math.pow( 2.0, zoom) / 150.0;
| |
| | |
| url = url.replace( /\{latdegdec\}/g, lat );
| |
| url = url.replace( /\{londegdec\}/g, lon );
| |
| url = url.replace( /\{span\}/g, span.toFixed(4) );
| |
| | |
| return url;
| |
| }
| |
| | |
| function highlight(i) {
| |
| if( coord_highlight >= 0 ) {
| |
| $(coord_list[coord_highlight].obj).css('background-color','').find('span:visible').css('background-color','');
| |
| }
| |
| coord_highlight = i;
| |
| if( coord_highlight >= 0 ) {
| |
| $(coord_list[coord_highlight].obj).css('background-color','yellow').find('span:visible').css('background-color','yellow');
| |
| }
| |
| }
| |
| | |
| function messageHub(e) {
| |
| var i, d, clist = { coords: [] }
| |
| , geoext = [], sx=0, sy=0, s
| |
| , minlat = Infinity, maxlat = -Infinity, ineg = -1, ipos = -1;
| |
| e = e.originalEvent;
| |
| d = e.data.split(',');
| |
| mes = e.source;
| |
| switch(d[0]) {
| |
| case 'request' :
| |
| // make a JSON encodable copy of coord_list (no HTML objects!)
| |
| // find center and extent
| |
| for( i = 0; i < coord_list.length; ++i ) {
| |
| clist.coords[i] = {
| |
| lat: coord_list[i].lat,
| |
| lon: coord_list[i].lon,
| |
| title: coord_list[i].title.replace(/[\+_]/g,' ')
| |
| };
| |
| if( coord_list[i].lat < minlat ) { minlat = coord_list[i].lat; }
| |
| if( coord_list[i].lat > maxlat ) { maxlat = coord_list[i].lat; }
| |
| geoext[i] = {
| |
| x: Math.cos(coord_list[i].lon/180.0*Math.PI),
| |
| y: Math.sin(coord_list[i].lon/180.0*Math.PI)
| |
| }
| |
| sx += geoext[i].x;
| |
| sy += geoext[i].y;
| |
| }
| |
| clist.loncenter = Math.atan2(sy,sx)*180.0/Math.PI;
| |
| clist.latmax = maxlat;
| |
| clist.latmin = minlat;
| |
| // extent in longitude
| |
| for( i = 0; i < geoext.length; ++i ) {
| |
| s = (geoext[i].x*sy-geoext[i].y*sx);
| |
| geoext[i].z = (geoext[i].x*sx+geoext[i].y*sy);
| |
| if( s<0 && ( ineg<0 || geoext[i].z<geoext[ineg].z ) ) { ineg=i; }
| |
| if( s>0 && ( ipos<0 || geoext[i].z<geoext[ipos].z ) ) { ipos=i; }
| |
| }
| |
| if( ipos>=0 && ineg>=0 ) {
| |
| clist.lonleft = coord_list[ipos].lon;
| |
| clist.lonright = coord_list[ineg].lon;
| |
| }
| |
| mes.postMessage( JSON.stringify(clist), document.location.protocol+'//toolserver.org' );
| |
| if( kml !== null ) {
| |
| mes.postMessage( JSON.stringify(kml), document.location.protocol+'//toolserver.org' );
| |
| }
| |
| case 'unhighlight' :
| |
| highlight(-1);
| |
| break;
| |
| case 'toggle' :
| |
| coord_list[parseInt(d[1])].mb.click();
| |
| break;
| |
| case 'scroll' :
| |
| $("html:not(:animated),body:not(:animated)").animate({ scrollTop: $(coord_list[parseInt(d[1])].obj).offset().top - 20 + parseInt(d[2]||0) }, 500 );
| |
| iframe.div.css( { top: yPos( coord_list[parseInt(d[1])].obj ) + 'px'} );
| |
| // make sure scroll target gets highlighted
| |
| setTimeout( function () { highlight(parseInt(d[1])); }, 200 );
| |
| break;
| |
| case 'highlight' :
| |
| highlight(parseInt(d[1]));
| |
| break;
| |
| }
| |
| }
| |
| | |
| // parse url parameters into a hash
| |
| function parseParams(url) {
| |
| var map = {}, h, i, pair = url.substr(url.indexOf('?')+1).split('&');
| |
| for( i=0; i<pair.length; ++i ) {
| |
| h = pair[i].split('=');
| |
| map[h[0]] = h[1];
| |
| }
| |
| return map;
| |
| }
| |
| | |
| // Insert the IFrame into the page.
| |
| | |
| var wi = iframe,
| |
| wc = config,
| |
| marker = { lat:0, lon:0 }, coordinates = null,
| |
| link, links, key, len, coord_title, icons, startTime, content, mapbutton;
| |
| | |
| // apply settings
| |
| if( typeof(wma_settings) === 'object' ) {
| |
| for( key in wma_settings ) {
| |
| if( typeof(wma_settings[key]) === typeof(wc[key]) ) {
| |
| wc[key] = wma_settings[key];
| |
| }
| |
| }
| |
| }
| |
| | |
| if( wc.enabled === false ) { return; }
| |
| | |
| site = ( wgNoticeProject == "commons" ) ? "commons" : wgPageContentLanguage;
| |
| language = mw.config.get( 'wgUserLanguage' );
| |
| | |
| // remove icons from title coordinates
| |
| $('#coordinates,#coordinates-title,#tpl_Coordinaten').find('a.image').detach();
| |
|
| |
| bodyc = $( wc.onlytitle ? '#coordinates,#coordinates-title' : 'html' );
| |
| startTime = (new Date()).getTime();
| |
| | |
| bodyc.find('a.external.text').each( function( key, link ) {
| |
| var ws, coord_params, params, zoomlevel, globe="Earth";
| |
| | |
| // check for timeout (every 10 links only)
| |
| if( key % 10 === 9 && (new Date()).getTime() > startTime + wc.timeout ) {
| |
| return false; // break out of each
| |
| }
| |
| | |
| if(!coord_filter.exec(link.href)){
| |
| return true;
| |
| }
| |
| marker.lat=(1.0*RegExp.$1) + ((RegExp.$2||0)/60.0) + ((RegExp.$3||0)/3600.0);
| |
| if( RegExp.$4 !== 'N' ) { marker.lat*=-1; }
| |
| marker.lon=(1.0*RegExp.$5) + ((RegExp.$6||0)/60.0) + ((RegExp.$7||0)/3600.0);
| |
| if( RegExp.$8 === 'W' ) { marker.lon*=-1; }
| |
| coord_params = RegExp.$9;
| |
| | |
| // Zoom based on coordinate N/S precision
| |
| var coord_digits = RegExp.$3 ? 4 : RegExp.$2 ? 2 : RegExp.$1.length - (RegExp.$1+".").indexOf('.') - 1;
| |
| zoomlevel = coord_digits * Math.log(10)/Math.log(2);
| |
| | |
| // Find a sensible Zoom-level based on type
| |
| if( /_type:(airport|edu|pass|landmark|railwaystation)/.test(coord_params) ) {
| |
| zoomlevel = 8;
| |
| } else if( /_type:(event|forest|glacier)/.test(coord_params) ) {
| |
| zoomlevel = 6;
| |
| } else if( /_type:(adm3rd|city|mountain|isle|river|waterbody)/.test(coord_params) ) {
| |
| zoomlevel = 4;
| |
| }
| |
| | |
| // wma shows dim approx 4e7m at zoom 0 or 1.5e8 is the scale of zoomlevel 0
| |
| if( /_dim:([\d.+-]+)(km|m|_|$)/.exec(coord_params) ) {
| |
| zoomlevel = Math.log( ( RegExp.$2 === "km" ? 4e4 : 4e7 ) / RegExp.$1 ) / Math.log(2);
| |
| }
| |
| if( /_scale:(\d+)(_|$)/.exec(coord_params) ) {
| |
| zoomlevel = Math.log( 1.5e8/RegExp.$1 ) / Math.log(2);
| |
| }
| |
| | |
| if( wc.zoom !== -1 ) { zoomlevel = wc.zoom; }
| |
| if( zoomlevel > 12 ) { zoomlevel = 12; }
| |
| if( zoomlevel < 0 ) { zoomlevel = 0; }
| |
| | |
| function capitalize(s) { return s.substr(0,1).toUpperCase()+s.substr(1).toLowerCase(); }
| |
| if( /_globe:([^_&]+)/.test(coord_params) ) { globe = capitalize(RegExp.$1); }
| |
| if( globe!="Earth" && globe!="Moon" && globe!="Mars" && globe!="Venus" && globe!="Mercury" && globe!="Io" ) { return; }
| |
| | |
| // Test the unicode Symbol
| |
| if( site === 'de' && link.parentNode.id !== 'coordinates' ) {
| |
| mapbutton = $('<span>♁</span>').css('color','blue');
| |
| } else {
| |
| mapbutton = $('<img>').attr('src', wc.buttonImage);
| |
| }
| |
| mapbutton.attr( {
| |
| title: strings.buttonTooltip[language] || strings.buttonTooltip.en,
| |
| alt: ''
| |
| } )
| |
| .css('opacity', 0.75)
| |
| .hover(function (){ $(this).fadeTo(50, 1.0); }, function () { $(this).fadeTo(250, 0.75); })
| |
| .addClass('noprint')
| |
| .css('padding', isRTL() ? '0px 0px 0px 3px' : '0px 3px 0px 0px' ).css('cursor', 'pointer');
| |
| | |
| if( wc.alwaysTooltips || ( wc.flowTextTooltips && $(link).parents('li, table, #coordinates').length == 0 ) ) {
| |
| // insert tooltip rather than icon to improve text readability
| |
| mapbutton = $('<span>').append(mapbutton).append(" WikiMiniAtlas").css('cursor','pointer');
| |
| var tooltip = $('<div>').css( {
| |
| backgroundColor: 'white', padding: '0.2em', border: '1px solid black',
| |
| position: 'absolute', top: '1em', left: '0em',
| |
| display: 'none', zIndex : 15
| |
| }).append(mapbutton);
| |
| $(link).wrap(
| |
| $('<span/>')
| |
| .css( { position: 'relative', whiteSpace: 'nowrap' } )
| |
| .mouseleave( function () { tooltip.fadeOut() } )
| |
| )
| |
| .before( tooltip )
| |
| .mouseenter( function () { tooltip.fadeIn() } );
| |
| } else {
| |
| // insert icon directly
| |
| ws = $(link).css('whiteSpace');
| |
| $(link).wrap( $('<span/>').css('whiteSpace', 'nowrap') ).css('whiteSpace', ws).before(mapbutton);
| |
| }
| |
| | |
| mapbutton.bind( 'click', { param:
| |
| marker.lat + '_' + marker.lon + '_' +
| |
| wc.width + '_' + wc.height + '_' +
| |
| site + '_' + zoomlevel + '_' + language + '&globe=' + globe }, showIFrame );
| |
| | |
| // store coordinates
| |
| coordinates = link.href;
| |
| params = parseParams(link.href);
| |
| coord_list.push( { lat: marker.lat, lon: marker.lon, obj: link, mb: mapbutton, title: params.title || params.pagename || '' } );
| |
| | |
| if ( wc.quicklink ) {
| |
| link.href = qlURL( marker.lat, marker.lon, zoomlevel );
| |
| }
| |
| } ); //end each
| |
| | |
| // detect and load KML
| |
| // also insert globe even if no title coords are given
| |
| (function () {
| |
| var i, l = $('table.metadata').find('a')
| |
| ,alat = 0, alon = 0, np = 0
| |
| ,la1 = Infinity, la2 =- Infinity
| |
| ,lo1 = Infinity, lo2 =- Infinity
| |
| ,ex,ey;
| |
| for( i = 0; i < l.length; ++i ) {// TODO: replace with .each
| |
| if( $(l[i]).attr('href') === '//en.wikipedia.org/w/index.php?title=Template:Attached_KML/'+mw.config.get( 'wgPageName' )+'&action=raw' ) {
| |
| coordinates = 1;
| |
| $.ajax({
| |
| url: l[i].href,
| |
| dataType: 'xml',
| |
| success: function (xml) {
| |
| function processCoords(t) {
| |
| var way = [], c, p = t.split(' '), i, lat, lon;
| |
| for( i=0; i<p.length; ++i ) {
| |
| c=p[i].split(',');
| |
| if( c.length >= 2 ) {
| |
| lat = parseFloat(c[1]);
| |
| lon = parseFloat(c[0]);
| |
| way.push( { lat: lat, lon: lon } );
| |
| | |
| // determine extent of way
| |
| if( lat<la1 ) { la1=lat; }
| |
| if( lon<lo1 ) { lo1=lon; }
| |
| if( lat>la2 ) { la2=lat; }
| |
| if( lon>lo2 ) { lo2=lon; }
| |
| }
| |
| }
| |
| return way;
| |
| }
| |
| | |
| // initialize transfer datastructure
| |
| kml = { ways: [], areas: [] };
| |
| window.kmldata = xml; // DEBUG!
| |
| | |
| // ways
| |
| $(xml).find('LineString > coordinates').each(function () {
| |
| var way = processCoords( $(this).text() );
| |
| if( way.length > 0 ) { kml.ways.push(way); }
| |
| });
| |
| | |
| // areas
| |
| $(xml).find('Polygon').each(function () {
| |
| var i, j, c,
| |
| area = { inner: [], outer: [] };
| |
| | |
| // outer boundary
| |
| $(this).find('outerBoundaryIs > LinearRing > coordinates').each(function () {
| |
| var way = processCoords( $(this).text() );
| |
| if( way.length > 0 ) {
| |
| area.outer.push(way);
| |
| }
| |
| });
| |
| | |
| // inner boundary (holes in the polygon)
| |
| $(this).find('innerBoundaryIs > LinearRing > coordinates').each(function () {
| |
| var way = processCoords( $(this).text() );
| |
| if( way.length > 0 ) { area.inner.push(way); }
| |
| });
| |
| | |
| // only add if we have an outer boundary
| |
| if( area.outer.length>0 ) { kml.areas.push(area); }
| |
| });
| |
| | |
| // inset min/max extent
| |
| kml.minlon = lo1;
| |
| kml.maxlon = lo2;
| |
| kml.minlat = la1;
| |
| kml.maxlat = la2;
| |
| window.kml = kml; // DEBUG!
| |
| | |
| // already got a request message
| |
| if( mes !== null && kml.ways.length > 0) {
| |
| mes.postMessage( JSON.stringify(kml), document.location.protocol+'//toolserver.org' );
| |
| }
| |
| | |
| // insert blue globe
| |
| if( coord_list.length == 0 ) {
| |
| // determine center
| |
| alat = (la1+la2)/2;
| |
| alon = (lo1+lo2)/2;
| |
| | |
| //determine zoomfactor
| |
| ex = (lo2-lo1)/180.0 * 3.0*128;
| |
| ey = (la2-la1)/180.0 * 3.0*128; // max extent in degrees, zoom0 has 3*128/180 px/degree
| |
| for( zoomlevel = 0; zoomlevel < 12; ++zoomlevel ) {
| |
| if( ex>config.width/2 || ey>config.height/2 ) break;
| |
| ex *= 2; ey *= 2;
| |
| }
| |
| | |
| // add mapbutton
| |
| mapbutton = $('<img>')
| |
| .attr('src', wc.buttonImage)
| |
| .bind( 'click', { param:
| |
| alat + '_' + alon + '_' +
| |
| wc.width + '_' + wc.height + '_' +
| |
| site + '_' + zoomlevel + '_' + language
| |
| }, showIFrame ); // zoomlevel!
| |
| | |
| if( $('#coordinates').length ) {
| |
| $('#coordinates').append(mapbutton);
| |
| } else {
| |
| $('<span id="coordinates">Map </span>').append(mapbutton).appendTo('#bodyContent');
| |
| }
| |
| }
| |
| }
| |
| });
| |
| break;
| |
| }
| |
| }
| |
| })();
| |
| | |
| // prepare quicklink menu box
| |
| if ( coordinates !== null && wc.quicklink ) {
| |
| quicklinkbox = document.createElement('div');
| |
| // more to come :-)
| |
| }
| |
| | |
| // prepare iframe to house the map
| |
| if ( coordinates !== null ) {
| |
| wi.div = $('<div/>').css( {
| |
| width: (wc.width+2)+'px', height: (wc.height+2)+'px',
| |
| margin: '0px', padding: '0px',
| |
| backgroundColor : 'white', border: '1px solid gray',
| |
| position: 'absolute', top: '1em', zIndex: 13, boxShadow: '3px 3px 25px rgba(0,0,0,0.3)'
| |
| } ).css( isRTL() ? 'left' : 'right', '2em' ).hide();
| |
| | |
| var rbrtl = [ '//upload.wikimedia.org/wikipedia/commons/b/b5/Button_resize.png',
| |
| '//upload.wikimedia.org/wikipedia/commons/3/30/Button_resize_rtl.png' ]
| |
| wi.resizebutton = $('<img>').attr( {
| |
| title : strings.resize[language] || strings.resize.en,
| |
| src : rbrtl[isRTL()?1:0]
| |
| } ).hide().attr('ondragstart','return false');
| |
|
| |
| // cover the iframe to prevent loosing the mouse to the iframe during resizing
| |
| wi.resizehelper = $('<div/>').css( { position: 'absolute', top:0, left:0, zIndex: 20 } ).hide();
| |
| | |
| wi.closebutton = $('<img>').attr( {
| |
| title : strings.close[language] || strings.close.en,
| |
| src : '//upload.wikimedia.org/wikipedia/commons/d/d4/Button_hide.png'
| |
| } ).css( {
| |
| zIndex : 15, position : 'absolute', right : '11px', top : '9px', width : '18px', cursor : 'pointer'
| |
| } ).click( function(e) { wi.div.hide() } );
| |
| | |
| wi.iframe = $('<iframe/>').attr( {
| |
| scrolling: 'no',
| |
| frameBorder : 0
| |
| } ).css( {
| |
| zIndex: 14, position: 'absolute', right: '1px', top: '1px',
| |
| width: (wc.width)+'px', height: (wc.height)+'px',
| |
| margin: '0px', padding: '0px'
| |
| } );
| |
| | |
| wi.div.append(wi.iframe);
| |
| wi.div.append(wi.resizehelper);
| |
| wi.div.append(wi.closebutton);
| |
| (function () {
| |
| var startx, starty, idle = true, dir = isRTL()?-1:1;
| |
| function adjusthelper() {
| |
| wi.resizehelper.css( { width: (wc.width+2)+'px', height: (wc.height+2)+'px' } );
| |
| }
| |
| wi.div.append(
| |
| $('<div/>')
| |
| .css( {
| |
| zIndex : 15, position : 'absolute', bottom : '3px',
| |
| width : '18px', height: '18px', cursor : (isRTL()?'se-resize':'sw-resize'),
| |
| 'user-select': 'none', '-moz-user-select': 'none', '-ms-user-select': 'none'
| |
| } ).css( (isRTL()?'right':'left'), '3px' )
| |
| .mouseenter( function(e) { wi.resizebutton.fadeIn() } )
| |
| .mouseleave( function(e) { if( idle ) { wi.resizebutton.fadeOut(); } } )
| |
| .mousedown( function(e) {
| |
| if( idle ) {
| |
| wi.resizehelper.show();
| |
| adjusthelper();
| |
| lastx = e.pageX;
| |
| lasty = e.pageY;
| |
| $('body').bind('mouseup.wmaresize', function(e) {
| |
| $('body').unbind('mousemove.wmaresize');
| |
| $('body').unbind('mouseup.wmaresize');
| |
| idle = true;
| |
| wi.resizehelper.hide();
| |
| } );
| |
| $('body').bind('mousemove.wmaresize', function(e) {
| |
| wc.width -= dir*(e.pageX-lastx);
| |
| wc.height += (e.pageY-lasty);
| |
| lastx = e.pageX; lasty = e.pageY;
| |
| wi.div.css( { width: (wc.width+2)+'px', height: (wc.height+2)+'px' } );
| |
| wi.iframe.css( { width: wc.width+'px', height: wc.height+'px' } );
| |
| adjusthelper();
| |
| } );
| |
| idle = false;
| |
| }
| |
| } )
| |
| .append(wi.resizebutton)
| |
| );
| |
| })();
| |
| | |
| $(window).bind('message', messageHub);
| |
| }
| |
| });
| |
| | |
| // </nowiki>
| |