User:SDZeroBot/sync/MediaWiki:Gadget-ondemand-WikiMiniAtlas.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:SDZeroBot/sync/MediaWiki:Gadget-ondemand-WikiMiniAtlas. |
/******************************************************************************/
/**** THIS PAGE TRACKS [[meta:MediaWiki:Wikiminiatlas.js]]. PLEASE AVOID EDITING DIRECTLY.
/**** EDITS SHOULD BE PROPOSED DIRECTLY to [[meta:MediaWiki:Wikiminiatlas.js]].
/**** A BOT WILL RAISE AN EDIT REQUEST IF IT BECOMES DIFFERENT FROM UPSTREAM.
/******************************************************************************/
// '''WikiMiniAtlas'''
// Script to embed interactive maps into pages that have coordinate templates
// also check my user page [[User:Dschwen]] for more tools
//
// Revision 16.11
// Source: https://github.com/dschwen/wikiminiatlas/blob/master/wikiminiatlas.js
/* jshint laxcomma:true, smarttabs:true, quotmark:single, curly:false, es3:true, browser:true */
/* global mw,jQuery */
jQuery(function ($) {
// WMA config
var wc = {
width : 600,
height : 400,
timeout : 5000,
zoom : -1,
enabled : true,
onlytitle : false,
flowTextTooltips: (location.host==='wiki.riteme.site'),
alwaysTooltips: false,
iframeurl : '//wma.wmcloud.org/iframe.html',
imgbase : '//wma.wmcloud.org/tiles/',
buttonImage: '//upload.wikimedia.org/wikipedia/commons/thumb/5/55/WMA_button2b.png/17px-WMA_button2b.png',
buttonImage2x: '//upload.wikimedia.org/wikipedia/commons/thumb/5/55/WMA_button2b.png/34px-WMA_button2b.png'
},
strings = {
buttonTooltip : {
'af':'Vertoon ligging op \'n interaktiwe kaart.',
'als':'Ort uf dr interaktivä Chartä zeigä',
'ar':'شاهد الموقع على الخريطة التفاعلية',
'ast':'Ver el llugar nun mapa interactivu',
'az':'Yeri interaktiv bir xəritədə göstər',
'bar':'Ort af da interaktivn Kartn zoagn',
'be-tarask':'паказаць месцазнаходжаньне на інтэрактыўнай мапе',
'be-x-old':'паказаць месцазнаходжаньне на інтэрактыўнай мапе',
'bg':'Покажи местоположението на интерактивната карта',
'bn':'সক্রিয় মানচিত্রে অবস্থান চিহ্নিত করুন',
'bpy':'জীবন্ত মানচিত্রগর মা মাপাহান দেখাদিতই',
'br':'diskouez al lec\'hiadur war ur gartenn etrewezhiat',
'bs':'Prikaži lokaciju na interaktivnoj mapi',
'ca':'Mostra la localització en un mapa interactiu',
'cs':'zobrazit 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ś',
'el':'Εμφάνιση τοποθεσίας σε διαδραστικό χάρτη',
'en':'Show location on an interactive map',
'eo':'Montru lokigon sur interaktiva karto',
'es':'Mostrar el lugar en un mapa interactivo',
'eu':'erakutsi kokalekua mapa interaktibo batean',
'fa':'نمایش مکان در نقشهای پویا',
'fi':'näytä paikka interaktiivisella kartalla',
'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 iti interaktibo a mapa',
'is':'sýna staðsetningu á gagnvirku korti',
'it':'mostra la località su una carta interattiva',
'ja':'インタラクティブ地図上に位置を表示',
'kk':'интерактивті картадан орналасуын көрсету',
'km':'បង្ហាញទីតាំងនៅលើផែនទីអន្តរកម្ម',
'kn':'ನಕ್ಷೆಯಲ್ಲಿ ಸ್ಥಳವನ್ನು ತೋರಿಸು',
'ko':'인터랙티브 지도에 위치를 표시',
'ku':'Vî cihê li ser nexşeyekî înteraktifê nişan bide',
'lt':'Rodyti vietą interaktyviame žemėlapyje',
'lv':'Rādīt atrašanās vietu interaktīvajā kartē',
'min':'Tunjuakan lokasi pado peta',
'mk':'прикажи положба на интерактивна карта',
'ml':'സ്ഥാനം സംവേദനക്ഷമമായ ഒരു ഭൂപടത്തിൽ കാണിക്കുക',
'ms':'Tunjukkan lokasi pada peta interaktif',
'my':'မြေပုံပေါ်တွင် တည်နေရာပြရန်',
'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',
'ps':'د ځاي نخشه ښکاره کول په متقابله نخشه کې',
'pt':'mostrar a localidade num mapa interactivo',
'ro':'Arată locaţia pe o hartă interactivă',
'ru':'показать положение на интерактивной карте',
'sco':'Shaw location on an interactive cairt',
'sh':'Prikaži lokaciju na interaktivnoj mapi',
'sk':'zobraz miesto na interaktívnej mape',
'sl':'Prikaži lego na interaktivnem zemljevidu',
'sq':'trego vendndodhjen në hartë',
'sr':'Прикажи локацију на интерактивној мапи',
'sr-ec':'Прикажи локацију на интерактивној мапи',
'sr-el':'Prikaži lokaciju na interaktivnoj mapi',
'sv':'visa platsen på en interaktiv karta',
'th':'แสดงตำแหน่งบนแผนที่เชิงโต้ตอบ',
'ti': 'ቦታ ኣብ ተገባባሪ ካርታ ኣርእይ',
'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-hk':'顯示該地在地圖上的位置',
'zh-sg':'显示该地在地图上的位置',
'zh-tw':'顯示該地在地圖上的位置',
'zh-yue':'顯示當地喺地圖度嘅位置'
},
'map': {
'ast':'Mapa',
'az':'Xəritə',
'bg':'Карта',
'bn':'মানচিত্র',
'bs':'Mapa',
'ca':'Mapa',
'cs':'Mapa',
'de':'Karte',
'el':'Χάρτης',
'en':'Map',
'es':'Mapa',
'fa':'نقشه',
'fi':'Kartalla',
'fr':'Carte',
'gl':'Mapa',
'hr':'Zemljovid',
'hu':'Térkép',
'id':'peta',
'ilo':'Mapa',
'it':'Mappa',
'ja':'地図',
'kn':'ನಕ್ಷೆ',
'ku':'Nexşe',
'min':'peta',
'mk':'Карта',
'ml':'ഭൂപടം',
'ms':'Peta',
'my':'မြေပုံညွှန်း',
'nl':'Kaart',
'ps':'نخشه',
'pt':'Mapa',
'ru':'карте',
'sco':'Cairt',
'sh':'Mapa',
'sr':'Мапа',
'sr-ec':'Мапа',
'sr-el':'Mapa',
'sv':'Karta',
'th':'แผนที่',
'ti':'ካርታ',
'uk':'мапі',
'zh':'地圖',
'zh-cn':'地图',
'zh-hk':'地圖',
'zh-sg':'地图',
'zh-tw':'地圖',
'zh-yue':'地圖'
},
close : {
'af':'Sluit',
'als':'Zuä machä',
'ar':'غلق',
'ast':'zarrar',
'az':'bağla',
'be-tarask':'закрыць',
'be-x-old':'закрыць',
'bar':'zuamachn',
'bg':'Затвори',
'bn':'বন্ধ করুন',
'bpy':'জিপা',
'br':'serriñ',
'bs':'zatvori',
'ca':'Tanca',
'cs':'zavřít',
'da':'luk',
'de':'schließen',
'dsb':'zacyniś',
'el':'έξοδος',
'en':'close',
'eo':'fermu',
'es':'cerrar',
'eu':'itxi',
'fa':'بستن',
'fi':'sulje',
'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':'閉じる',
'kk':'жабу',
'km':'បិទ',
'kn':'ಮುಚ್ಚಿರಿ',
'ko':'닫기',
'ku':'daxe',
'lt':'uždaryti',
'lv':'aizvērt',
'min':'tutuik',
'mk':'затвори',
'ml':'അടയ്ക്കുക',
'ms':'tutup',
'my':'ပိတ်ရန်',
'nl':'sluiten',
'no':'lukk',
'ps':'تړل',
'nv':'doo yishʼį́ nisin da',
'pl':'zamknij',
'pt':'fechar',
'ro':'închide',
'ru':'закрыть',
'sh':'zatvori',
'sk':'zatvoriť',
'sl':'zapri',
'sq':'mbylle',
'sr':'затвори',
'sr-ec':'затвори',
'sr-el':'zatvori',
'sv':'stäng',
'th':'ปิด',
'ti':'ዕጸው',
'tr':'kapat',
'uk':'закрити',
'vi':'đóng',
'vo':'färmükön',
'zh':'关闭',
'zh-cn':'关闭',
'zh-hk':'關閉',
'zh-sg':'关闭',
'zh-tw':'關閉',
'zh-yue':'收埋'
},
resize : {
'ar':'تغيير حجم',
'ast':'redimensionar',
'az':'ölçüləri dəyiş',
'bg':'Промени големина',
'bn':'মাপ পরিবর্তন করুন',
'bs':'promijeni veličinu',
'ca':'Redimensiona',
'cs':'změnit velikost',
'de':'Größe ändern',
'dk':'ændre størrelse',
'el':'αλλαγή μεγέθους',
'en':'resize',
'es':'cambiar el tamaño',
'fa':'تغییر اندازه',
'fi':'muuta kokoa',
'fr':'redimensionner',
'gl':'cambiar o tamaño',
'hr':'promijeni veličinu',
'hu':'átméretezés',
'ilo':'baliwan ti kadakkel',
'it':'ridimensiona',
'ja':'サイズを変更する',
'kk':'өлшемін өзгерту',
'kn':'ಗಾತ್ರ ಬದಲಿಸು',
'min':'gadangan',
'mk':'промени големина',
'ml':'വലിപ്പം മാറ്റുക',
'ms':'ubah saiz',
'my':'အရွယ်အစားညှိရန်',
'nl':'vergroten of verkleinen',
'no':'endre størrelse',
'ps':'د کچې بدلول',
'pt':'alterar tamanho',
'ro':'redimensionare',
'sh':'promijeni veličinu',
'sl':'spremeni velikost',
'sr':'промени величину',
'sr-ec':'промени величину',
'sr-el':'promeni veličinu',
'sv':'ändra storlek',
'th':'ปรับขนาด',
'ti':'መጠን ለውጥ',
'uk':'змінити розмір',
'zh':'调整大小',
'zh-cn':'调整大小',
'zh-hk':'調整大小',
'zh-sg':'调整大小',
'zh-tw':'調整大小',
'zh-yue':'改大細'
}
},
// domain of the WMA
wma_domain = '//wma.wmcloud.org',
language = '', site = '', awt='0', rtl = /(^|\s)rtl(\s|$)/.test(document.body.className),
// Get a specific, localized string
_msg = function(k) {
return strings[k][language] || strings[k].en;
},
dbName = mw.config.get( 'wgDBname' ),
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 = /[?&]params=([\d.+-]+)_([\d.+-]*)_?([\d.+-]*)_?([NSZ])_([\d.+-]+)_([\d.+-]*)_?([\d.+-]*)_?([EOW])([^&=<>|]{0,250})/,
coord_list = [],
coord_highlight = -1,
kml = null,
mes = null,
initPromises = [];
// 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 = wc.iframeurl + '?wma=' + e.data.param + '&lang=' + site + '&page=' + page_title + '&awt=' + awt;
// 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;
}
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;
if (!e || !e.data || !e.data.split) {
// avoid Uncaught TypeError: e.data.split is not a function
return;
}
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;
}
if ('JSON' in window) {
mes.postMessage(JSON.stringify(clist), document.location.protocol + wma_domain);
if (kml!==null) {
mes.postMessage(JSON.stringify(kml), document.location.protocol + wma_domain);
}
}
break;
case 'unhighlight' :
highlight(-1);
break;
case 'toggle' :
coord_list[parseInt(d[1],10)].mb.click();
break;
case 'scroll' :
$('html:not(:animated),body:not(:animated)').animate({ scrollTop: $(coord_list[parseInt(d[1],10)].obj).offset().top - 20 + parseInt(d[2]||'0',10) }, 500 );
iframe.div.css( { top: yPos( coord_list[parseInt(d[1],10)].obj ) + 'px'} );
// make sure scroll target gets highlighted
setTimeout(function () { highlight(parseInt(d[1],10)); }, 200);
break;
case 'highlight' :
highlight(parseInt(d[1],10));
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,
marker = { lat:0, lon:0 }, coordinates = null,
links, key, startTime, 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 = (dbName==='commonswiki') ? 'commons' : (mw.config.get('wgUserVariant') || mw.config.get('wgPageContentLanguage'));
language = mw.config.get( 'wgUserLanguage' );
// bhwiki reports bho as language. I do not understand that yet, so let's add an exception
if (site === 'bho') site = 'bh';
// remove icons from title coordinates
$('#coordinates,#coordinates-title,#tpl_Coordinaten').find('a.image, span[typeof*="mw:File"]').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 (!('href' in link) || !coord_filter.exec(link.href)) { // invalid links do not contain href attribute in IE!
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 ($.inArray(globe,['Earth','Moon','Mars','Venus','Mercury','Io','Titan']) < 0 ) { 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).attr('srcset', wc.buttonImage + ' 1x, ' + wc.buttonImage2x + ' 2x');
}
mapbutton.addClass('wmamapbutton noprint').attr( {
title: _msg('buttonTooltip'),
alt: ''
} )
.on('mouseenter', function (){ $(this).css('opacity', 0.75); })
.on('mouseleave', function () { $(this).css('opacity', ''); })
.css('padding', rtl ? '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' } )
.on('mouseleave', function () { tooltip.fadeOut(); })
)
.before(tooltip)
.on('mouseenter', function () { tooltip.fadeIn(); });
} else {
// insert icon directly
ws = $(link).css('whiteSpace');
if (site!=='de' || link.parentNode.id!=='coordinates') {
$(link).wrap( $('<span>').css('whiteSpace', 'nowrap') ).css('whiteSpace', ws).before(mapbutton);
} else {
$('#coordinates').append('<span class="noprint coordinates-separator"> | </span>').append(mapbutton);
}
}
mapbutton.on( '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 || '' } );
} ); //end each
var titlebutton = false;
function addTitleButton( alat, alon, zoomlevel ) {
mapbutton = $('<img>')
.on('mouseenter', function (){ $(this).css('opacity', 0.75); })
.on('mouseleave', function () { $(this).css('opacity', ''); })
.css('padding', rtl ? '0px 3px 0px 0px' : '0px 0px 0px 3px' ).css('cursor', 'pointer')
.attr('src', wc.buttonImage).attr('srcset', wc.buttonImage + ' 1x, ' + wc.buttonImage2x + ' 2x')
.addClass('wmamapbutton noprint')
.on( 'click', { param:
alat + '_' + alon + '_' +
wc.width + '_' + wc.height + '_' +
site + '_' + zoomlevel + '_' + language
}, showIFrame ); // zoomlevel!
if (!titlebutton) {
if ($('#coordinates').length) {
$('#coordinates').find('img').detach();
$('#coordinates').append(mapbutton);
} else {
$('<span id="coordinates"></span>').text(_msg('map')).append(mapbutton).appendTo('#bodyContent');
}
titlebutton = true;
}
}
// detect and load KML
// also insert globe even if no title coords are given
(function () {
var i, l = $('div.kmldata')
,alat = 0, alon = 0
,la1 = Infinity, la2 =- Infinity
,lo1 = Infinity, lo2 =- Infinity
,ex,ey, req;
for (i=0; i<l.length; ++i) {// TODO: replace with .each
coordinates = true;
req = $.ajax({
url: '/wiki/' + encodeURI(l.eq(i).attr('title')) + '?action=raw',
dataType: 'xml',
success: function (xml) {
var zoomlevel;
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: [] };
// 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 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;
// already got a request message
if (mes!==null && kml.ways.length>0 && 'JSON' in window) {
mes.postMessage(JSON.stringify(kml), document.location.protocol + wma_domain);
}
// insert blue globe
if (coord_list.length===0 || (!$('#coordinates').find('.wmamapbutton').length)) {
// 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>wc.width/2 || ey>wc.height/2 ) break;
ex *= 2; ey *= 2;
}
// add mapbutton
addTitleButton( alat, alon, zoomlevel );
}
}
});
// Add request promise to init array, and cast any errors to success so that
// we don't abort init early when one of the requests failed. These are expected
// to fail for titles we can't find.
initPromises.push(req.then(null, function () { return $.Deferred().resolve(); } ));
} // end for
})();
// detect "All Coordinates"
links = $('#coordinates>span>a');
if (links.length && links[0].href.indexOf('http://www.lenz-online.de/cgi-bin/wiki/wiki-osm.pl') === 0) {
addTitleButton( 0, 0, 1 );
coordinates = true;
}
// 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( rtl ? '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 : _msg('resize'),
src : rbrtl[rtl?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 : _msg('close'),
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 idle = true, dir = rtl?-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 : (rtl?'se-resize':'sw-resize'),
'user-select': 'none', '-moz-user-select': 'none', '-ms-user-select': 'none'
} ).css( (rtl?'right':'left'), '3px' )
.on('mouseenter', function(e) { wi.resizebutton.fadeIn(); } )
.on('mouseleave', function(e) { if( idle ) { wi.resizebutton.fadeOut(); } } )
.on('mousedown', function(e) {
if (idle) {
var lastx = e.pageX, lasty = e.pageY;
wi.resizehelper.show();
adjusthelper();
$('body')
.on('mouseup.wmaresize', function(e) {
$('body').off('mousemove.wmaresize');
$('body').off('mouseup.wmaresize');
idle = true;
wi.resizehelper.hide();
} )
.on('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).on('message', messageHub);
// Fire event for other code to extend or integrate with WMA
if (initPromises.length) {
$.when.apply( null, initPromises ).then(function () {
mw.hook('WikiMiniAtlas.load').fire();
} );
} else {
mw.hook('WikiMiniAtlas.load').fire();
}
}
});
// </nowiki>