User:Magister Mathematicae/coordinates.js

From Meta, a Wikimedia project coordination wiki

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.
//<pre>
// Script to embed Coordinate template generation in MediaWiki's edit page
// copied from [[:commons:User:Dschwen/coordinates.js]] to tinker with an own copy
// inspired by [[:en:User:Pilaf/livepreview.js]]

//
// defaults
//
if( typeof( coord_templatename ) == "undefined" )
 var coord_templatename = 'coor dms'; 

if( typeof( accuracy ) == "undefined" )
 var accuracy = 2; 

if( typeof( defaulttype ) == "undefined" )
 var defaulttype = "city"; 

 // can be overridden in your monobook.js ( insert: var coord_templatename = 'something'; )

//
// Insert the coordinate Form into the edit box.
//
function coordinatesInstall()
{
 copywarn = document.getElementById('editpage-copywarn');
 if (copywarn != null) {
  var cleaner = "<br style=\\'clear:both;\\' />";
  CoordinatesHTML =  '<div style="border: 1px solid gray; padding: 3px; margin-top: 2px; margin-bottom:2px;">'
  CoordinatesHTML += '<input type="button" value="Insert as '+coord_templatename+'" onclick="interpretCoordinates();" /> ';
  CoordinatesHTML += '<input type="text" size="80" id="CoordinateBox" /></div>';
  copywarn.innerHTML = CoordinatesHTML + copywarn.innerHTML;
 }
}

//
// Hook up instalation function
//
$(coordinatesInstall);

//
// Coordinate interpretation
//
function interpretCoordinates()
{
 var coordinate1 = document.getElementById('CoordinateBox').value;
 var coordinate2 = '';
 var coord_filter = /http:\/\/www\.google\.([a-zA-Z]+)\/maps/;
 var latlon;
 
 // magic!
 if(coordinate1.substr(0,19)=='http://maps.google.' || coord_filter.test(coordinate1) )
 {
  var from_ll = coordinate1.substr(coordinate1.indexOf("&ll=")+4);
  var ampers = from_ll.indexOf('&');
  if(ampers==-1) 
  {
   latlon = from_ll.split(",");
  }
  else
  {
   latlon = (from_ll.substr(0,ampers)).split(",");
  }
 }
 
 // more magic!
 if(coordinate1.substr(0,27)=='http://www.wikimapia.org/##' )
 {
  var from_ll = coordinate1.substr(29);
  var ampers = from_ll.indexOf('&z=');
  latlon = (from_ll.substr(0,ampers)).split("&x=");
  latlon[0] /= 1000000.0;
  latlon[1] /= 1000000.0;
 }
 

 var mark_ns = 'N';
 var mark_ew = 'E';

 var lat = latlon[0];
 var lon = latlon[1];

 if(lat<0) { lat*=-1; mark_ns='S'; }
 if(lon<0) { lon*=-1; mark_ew='W'; }

 var lat_m = ( lat - Math.floor(lat) ) * 60.0;
 var lon_m = ( lon - Math.floor(lon) ) * 60.0;

 var lat_s = ( lat_m - Math.floor(lat_m) ) * 60.0;
 var lon_s = ( lon_m - Math.floor(lon_m) ) * 60.0;

 //coordinate2 = '{{coor_d|'+lat+'|'+mark_ns+'|'+lon+'|'+mark_ew+'|type:landmark}}';
 coordinate2 = ' ({{'+coord_templatename+'|'+Math.floor(lat)+'|'+Math.floor(lat_m)+'|'+lat_s.toPrecision(accuracy)+'|'+mark_ns+'|'+
                    Math.floor(lon)+'|'+Math.floor(lon_m)+'|'+lon_s.toPrecision(accuracy)+'|'+mark_ew+'|type:'+defaulttype+'}})';

 var editbox = document.getElementById('wpTextbox1');
 var posicion1 = (editbox.value).indexOf("''' ");
 var posicion2 = (editbox.value).indexOf("''',");
 var posicion=0;
 if (posicion1 > -1 && posicion2 >-1 ) 
   {
     posicion = Math.min(posicion1,posicion2); 
   } else {
     posicion = Math.max(posicion1,posicion2);
   }

 if (posicion>0)
 {   
  posicion=posicion+3;
  var editbox_content_1 = (editbox.value).substr(0,posicion);
  var editbox_content_2 = (editbox.value).substr(posicion);
  editbox.value = editbox_content_1 + coordinate2 + editbox_content_2;
 }
 else
 {
  var editbox_content = editbox.value;
  editbox.value = coordinate2 + editbox_content;
 }
}
//</pre>