User:Bene*/maps.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
( function( mw, $ ) {
var lang = mw.config.get( 'wgUserLanguage' );
// todo: import from http://meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js
switch ( lang ) {
case 'en':
default:
mw.messages.set( 'wikiminiatlas-tooltip', 'Show location on an interactive map' );
mw.messages.set( 'openstreetmap-tooltip', 'Show location in OpenStreetMap' );
break;
case 'de':
case 'de-at':
case 'de-ch':
case 'de-formal':
mw.messages.set( 'wikiminiatlas-tooltip', 'Ort auf interaktiver Karte' );
mw.messages.set( 'openstreetmap-tooltip', 'Ort in OpenStreetMap' );
break;
case 'fa':
mw.messages.set( 'wikiminiatlas-tooltip', 'نمایش مکان بر روی نقشهٔ تعاملی' );
mw.messages.set( 'openstreetmap-tooltip', 'نمایش مکان بر روی نقشهٔ باز شهری' );
break;
}
function init( $content ) {
$content.find( '.valueview' ).each( function() {
var $valueview = $( this );
var data = $valueview.data && $valueview.data();
var dataTypeId = data && data.valueview && data.valueview.options && data.valueview.options.dataTypeId;
if ( dataTypeId !== 'globe-coordinate' ) {
return;
}
var coordinates = coordinatesToDecimal( data.valueview.getFormattedValue() ),
// Button for WikiMiniAtlas
$wikiminiatlas = createButton(
'https://upload.wikimedia.org/wikipedia/commons/thumb/5/55/WMA_button2b.png/17px-WMA_button2b.png',
'wikiminiatlas',
function() {
showMap( '//toolserver.org/~dschwen/wma/iframe.html?wma=' + coordinates.n + '_' + coordinates.e + '_600_400_' + lang + '_20_' + lang + '&lang=' + lang, 'wikiminiatlas' );
}
),
// Button for OpenStreetMap
$openstreetmap = createButton(
'https://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/OpenStreetMapLogo.png/17px-OpenStreetMapLogo.png',
'openstreetmap',
function() {
showMap( 'https://tools.wmflabs.org/wiwosm/osm-on-ol/kml-on-ol.php?lang=wikidata&uselang=' + lang + '¶ms=' + coordinates.n + '_N_' + coordinates.e + '_E' + '&title=' + mw.util.wikiUrlencode( mw.config.get( 'wgTitle' ) ), 'openstreetmap' );
}
);
if( $( 'body' ).hasClass( 'rtl' ) ) {
$valueview.before( $wikiminiatlas ).before( $openstreetmap );
}
else {
$valueview.after( $wikiminiatlas ).after( $openstreetmap );
}
} );
}
function createButton( src, id, click ) {
return $( '<img>' )
.css( {
margin: '5px',
cursor: 'pointer'
} )
.attr( {
id: id + '-button',
height: 15,
width: 15,
alt: id,
src: src,
title: mw.msg( id + '-tooltip' )
} )
.click( click );
}
function showMap( url, id ) {
mw.loader.using( [ 'jquery.ui', 'jquery.spinner' ], function () {
$( '<div>' )
.append(
$( '<iframe>' )
.attr( {
id: 'maps-frame-' + id,
scrolling: 'no',
frameborder: 0
} )
.css( {
height: '100%',
width: '100%'
} )
.before(
$.createSpinner( {
id: 'maps-spinner-' + id,
size: 'large',
type: 'block'
} )
.css( {
position: 'absolute',
height: '90%',
'background-color': 'rgba(255,255,255,0.5)'
} )
)
)
.dialog( {
title: mw.msg( id + '-tooltip' ),
height: 460,
width: 640,
close: function() {
$( '#maps-frame-' + id ).remove();
$.removeSpinner( 'maps-spinner-' + id );
}
} );
$( '#maps-frame-' + id ).attr( 'src', url );
$( '#maps-frame-' + id ).load( function() {
$.removeSpinner( 'maps-spinner-' + id );
} );
} );
}
function coordinatesToDecimal( coordinates ) {
var ne = coordinates.split( ', ' );
return { n: toDecimal( ne[0] ), e: toDecimal( ne[1] ) };
}
function toDecimal( coordinate ) {
coordinate = coordinate.replace( /(\d*)°?(\d*)'?([\d.]*)"?(.*)/, '$1 ° $2 \' $3 " $4' ).replace( ' ', '0' );
var parts = coordinate.split( /[°'"]/ );
return ( ( parseInt( parts[2] ) / 60 + parseInt( parts[1] ) ) / 60 + parseInt( parts[0] ) ) * ( /[ws]/i.test( parts[3] ) ? -1 : 1 );
}
mw.hook( 'wikipage.content' ).add( init );
} )( mediaWiki, jQuery );