User:SDZeroBot/sync/User:SD0001/common.js

/******************************************************************************/
/**** 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==='en.wikipedia.org'),
  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('&nbsp;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>

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.