User:Evad37/Custom GeoHack replacement.js

/* Use your own custom page instead of the regular GeoHack. * * It support the following replacement variables found in GeoHack: * {latdegdec} {londegdec} {scale} {span} {osmzoom} * * Based on a script by User:Dispenser: GeoHack/Replacement_script * * Instructions: * 1) Add the following line to your common.js (or skin-specific js): *     importScript('User:Evad37/Custom_GeoHack_replacement.js'); // User:Evad37/Custom_GeoHack_replacement.js * * 2) Create your custom GeoHack user subpage at User:YOURUSERNAME/GeoHack *   - use whatever content and formatting you like *   - use the replacement variables above in external links, e.g. for Google Maps use *       http://maps.google.com/maps?ll={latdegdec},{londegdec}&spn={span},{span}&q={latdegdec},{londegdec} *   - more urls can be found at Template:GeoTemplate *   - see User:Evad37/GeoHack for an example page * * 3) Now coordinates will link to this page instead of GeoHack (specifying real values to take the place of *   the replacement variables in external links) * */ jQuery( function( $ ) {

if ( mw.config.get("wgPageName") !== "User:" + mw.config.get("wgUserName") + "/GeoHack" ) {

var geohack_base = "//geohack.toolforge.org/geohack.php"; var coord_filter = /&params=([\d.+-]+)_([\d.+-]*)_?([\d.+-]*)_?([NSZ])_([\d.+-]+)_([\d.+-]*)_?([\d.+-]*)_?([EOW])([^&=]*)/; var link, lat, lon, scale; $("a[href*='" + geohack_base + "']").each(function {			if(coord_filter.exec($(this).attr("href"))) {				// latitude and longitude				lat=(1.0*RegExp.$1) + ((RegExp.$2||0)/60.0) + ((RegExp.$3||0)/3600.0);				if(RegExp.$4!='N') lat*=-1;				lon=(1.0*RegExp.$5) + ((RegExp.$6||0)/60.0) + ((RegExp.$7||0)/3600.0);				if(RegExp.$8=='W') lon*=-1;				// Determine scale/zoom				var params = RegExp.$9;				if(/_globe:(?!earth|_|$)/i.test(params)) return;				if(/_type:(adm3rd|city|mountain|isle|river|waterbody)/.test(params))scale = 100000;				else if(/_type:(event|forest|glacier)/.test(params))scale = 50000;				else if(/_type:(airport|edu|pass|landmark|railwaystation)/.test(params))scale = 10000;				else scale = 300000;				if(/_dim:([\d.+-]+)(km)?m?/.exec(params))scale = RegExp.$1 * (RegExp.$2?10000:10);				if(/_scale:(\d+)(_|$)/.exec(params))scale = RegExp.$1;				var osmzoom = 18 - Math.round(Math.log(scale/1693) / Math.log(2)); var zoom = Math.log( 1.5e8/scale) / Math.log(2); $(this).attr("href", "").attr("onclick","window.open(\"https://en.wikipedia.org/wiki/User:Evad37/GeoHack?lat=" + lat +"&lon=" + lon + "&scale=" + scale + "&span=" + span + "&osmzoom=" + osmzoom + "&zoom=" + zoom +"\")"); }		});

} else if ( mw.util.getParamValue( 'lat' ) ) {

var lat = mw.util.getParamValue( 'lat' ); var lon = mw.util.getParamValue( 'lon' ); var scale = mw.util.getParamValue( 'scale' ); var span = mw.util.getParamValue( 'span' ); var osmzoom = mw.util.getParamValue( 'osmzoom' ); var zoom = mw.util.getParamValue( 'zoom' );

$("a.external").each(function {			var old_url = $(this).attr("href");			var replacement_url = old_url.replace(/\{latdegdec\}/g, lat).replace(/\{londegdec\}/g, lon).replace(/\{scale\}/g, scale).replace(/\{span\}/g, scale/1e6).replace(/\{osmzoom\}/g, osmzoom).replace(/\{zoom\}/g, zoom);			$(this).attr("href", replacement_url);		});

$("#siteSub").append("  Coordinates loaded ");

} else {

$("#siteSub").append("  Note: No coordinates loaded (mapping service links will not work) ");

}

});