Benutzer:Mps/test.js

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 27. März 2009 um 14:18 Uhr durch Mps (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
// entnommen aus [[Benutzer:Dschwen/coordinates.js]] (http://de.wikipedia.org/w/index.php?title=Benutzer:Dschwen/coordinates.js&oldid=27146611) mit folgenden Änderungen:
// - Bugfixes, z.B. Nichtfunktion wegen nicht gescapten geschweiften Klammern auf Zeile 293
// - Cookie-Management entfernt, da unnötig
// - optisches: typographische Minuten- und Sekundenzeichen, bedarfsgerechtes Weglassen von Millisekunden und Sekunden
// - Liste der japanischen Präfekturen für region-Parameter
// - Unterstützung für Infoboxen mit den Parametern mps_lat_deg, mps_lat_min, mps_lat_sec, mps_lon_deg, mps_lon_min und mps_lon_sec
// - direkte Koordinateneingabe verbessert und keine Änderungen bei Fehleingabe
// - Unterstützung der neuen Koordinatenvorlage

//
// globals
//
var mps_wpSummary = null;
var mps_optionalBox = null;
var mps_optionalBoxLabel = null;
var mps_optionalNumber = null;
var mps_lat,mps_lon;
var mps_coordArticle = null;
var mps_coordText = null;

var mps_listTemplates = new Array( 'Koordinate_Artikel' );
var mps_listRegions = new Array('',
'Aichi JP-23',
'Akita JP-05',
'Aomori JP-02',
'Chiba JP-12',
'Ehime JP-38',
'Fukui JP-18',
'Fukuoka JP-40',
'Fukushima JP-07',
'Gifu JP-21',
'Gunma JP-10',
'Hiroshima JP-34',
'Hokkaidō JP-01',
'Hyōgo JP-28',
'Ibaraki JP-08',
'Ishikawa JP-17',
'Iwate JP-03',
'Kagawa JP-37',
'Kagoshima JP-46',
'Kanagawa JP-14',
'Kōchi JP-39',
'Kumamoto JP-43',
'Kyōto JP-26',
'Mie JP-24',
'Miyagi JP-04',
'Miyazaki JP-45',
'Nagano JP-20',
'Nagasaki JP-42',
'Nara JP-29',
'Niigata JP-15',
'Ōita JP-44',
'Okayama JP-33',
'Okinawa JP-47',
'Ōsaka JP-27',
'Saga JP-41',
'Saitama JP-11',
'Shiga JP-25',
'Shimane JP-32',
'Shizuoka JP-22',
'Tochigi JP-09',
'Tokushima JP-36',
'Tokio JP-13',
'Tottori JP-31',
'Toyama JP-16',
'Wakayama JP-30',
'Yamagata JP-06',
'Yamaguchi JP-35',
'Yamanashi JP-19',
'Deutschland DE' );
var mps_listTypes = new Array( 'landmark', 'city', 'mountain', 'waterbody', 'isle', 'airport', 'country', 'state', 'adm1st', 'adm2nd' );

var mps_typeSelect = null;
var mps_regionSelect = null;
var mps_editbox = null;
var mps_coordinatebox = null;

//
// Insert the coordinate Form into the edit box.
//
function mps_coordinatesInstall()
{
 var i=0;
 var copywarn = document.getElementById('specialchars');
 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="GoogleMaps-Link oder Koordinate mit Sekundenangabe einfügen" onclick="mps_interpretCoordinates();" /> ';
  CoordinatesHTML += '<input type="text" size="80" id="mps_coordinatebox" onfocus="mps_showDetails()" />';
  CoordinatesHTML += '<div id="CoordinateDetails" style="margin-top: 2px; position: relative"><a href="#" onclick="mps_hideDetails()" style="position:absolute; bottom:3px; right:3px; font-size:50%">schließen</a>';
  CoordinatesHTML += '<label for="CheckBoxArticle">Artikel</label> <input type="checkbox" name="CheckBoxArticle" value="CheckBoxArticle" id="CheckBoxArticle" title="Artikelkoordinate" /> ';
  CoordinatesHTML += '<label for="CheckBoxText">Text</label> <input type="checkbox" name="CheckBoxText" value="CheckBoxText" id="CheckBoxText" title="Fließtextkoordinate" /> ';
  CoordinatesHTML += '<label for="CoordinateRegion">Region:</label> <select title="Region" id="CoordinateRegion">';
  for (i=0; i<mps_listRegions.length; ++i) {
   CoordinatesHTML += '<option value="'+mps_listRegions[i]+'">'+mps_listRegions[i]+'</option>';
  }
  CoordinatesHTML += '</select> <label for="CoordinateType">Typ:</label> <select onchange="mps_toggleOptional()" title="Typ (bitte angeben)" id="CoordinateType">';
  for (i=0; i<mps_listTypes.length; ++i) {
   CoordinatesHTML += '<option value="'+mps_listTypes[i]+'">'+mps_listTypes[i]+'</option>';
  }
  CoordinatesHTML += '</select> <label for="CoordinateDimNumber">Durchmesser des <a href="/wiki/Umkreis" title="Umkreis">Umkreises</a> in Meter:</label> <input type="text" size="10" id="CoordinateDimNumber" /> <span id="CoordinateBoxOptional" style="visibility: hidden"><label for="CoordinateNumber" id="CoordinateBoxOptionalLabel"></label> <input type="text" size="9" id="CoordinateNumber" /></span></div></div>';
  copywarn.innerHTML = CoordinatesHTML + copywarn.innerHTML;
  mps_wpSummary = document.getElementById('wpSummary');
  mps_optionalBox = document.getElementById('CoordinateBoxOptional');
  mps_optionalBoxLabel = document.getElementById('CoordinateBoxOptionalLabel');
  mps_optionalNumber = document.getElementById('CoordinateNumber');
  detailBox = document.getElementById('CoordinateDetails');
  dimNumber = document.getElementById('CoordinateDimNumber');

  mps_typeSelect = document.getElementById('CoordinateType');
  mps_regionSelect = document.getElementById('CoordinateRegion');
  mps_coordArticle  = document.getElementById('CheckBoxArticle');
  mps_coordText = document.getElementById('CheckBoxText');

  mps_hideDetails();

  mps_editbox = document.getElementById('wpTextbox1');
  mps_coordinatebox = document.getElementById('mps_coordinatebox');
 
  // suche nach boilerplate text: Koordinaten 38,18° Nord, 122,26° West
  var boilerplate_filter = /Koordinaten.* ([^°]+)° (Nord|Süd), ([^°]+)° (West|Ost)/;
  var result;
  if( result = boilerplate_filter.exec(mps_editbox.value) )
  {
   mps_lat = result[1].replace(/,/, ".");
   if( result[2] == 'Süd' ) mps_lat*=-1;
   mps_lon = result[3].replace(/,/, ".");
   if( result[4] == 'West' ) mps_lon*=-1;
   mps_coordinatebox.value = 'boilerplate:'+mps_lat+','+mps_lon;
   mps_showDetails();
  }
  boilerplate_filter = / ([0-9.,]+) Einwohner/;
  if( result = boilerplate_filter.exec(mps_editbox.value) )
  {
   mps_optionalNumber.value = result[1].replace(/[,\.]/, "");
   mps_typeSelect.selectedIndex = 1;
   mps_toggleOptional();
  }  
 }
}

function mps_toggleOptional()
{
 mps_optionalBox.style.visibility="hidden";

 if(mps_typeSelect.value == 'city')
 {
  mps_optionalBoxLabel.innerHTML='Einwohnerzahl:';
  mps_optionalBox.style.visibility="visible";
 }
 if(mps_typeSelect.value == 'mountain')
 {
  mps_optionalBoxLabel.innerHTML='Höhe (in Meter):';
  mps_optionalBox.style.visibility="visible";
 }
}

function mps_hideDetails()
{
 //detailBox.style.visibility="hidden";
 detailBox.style.display="none";
 return false;
}
function mps_showDetails()
{
 //detailBox.style.visibility="visible";
 detailBox.style.display="block";
}

//
// Hook up installation function
//
addOnloadHook(mps_coordinatesInstall);

//
// Coordinate interpretation
//
function mps_interpretCoordinates()
{
 var coordinate1 = mps_coordinatebox.value;
 var coordinate2 = '';
 var from_ll, result;
 var coord_filter = /http:\/\/www\.google\.([a-zA-Z]+)\/maps/;
 var latlon = new Array;
 
 // magic!
 if(coordinate1.substr(0,19)=='http://maps.google.' || coord_filter.test(coordinate1) )
 {
  var llidx = coordinate1.indexOf("&ll=");
  if (llidx == -1) llidx = coordinate1.indexOf("?ll=");
  if (llidx != -1) from_ll = coordinate1.substr(llidx+4);
  var ampers = from_ll.indexOf('&');
  if(ampers==-1) 
  {
   latlon = from_ll.split(",");
  }
  else
  {
   latlon = (from_ll.substr(0,ampers)).split(",");
  }
 } else
 
 //http://tools.wikimedia.de/~magnus/geo/geohack.php?params=39_18_S_175_35_E_type:mountain_region:NZ
 if(coordinate1.substr(0,49)=='http://tools.wikimedia.de/~magnus/geo/geohack.php')
 {
  latlon = from_ll.split(",");
 } else

 // gefundene boilerplate daten
 if( coordinate1.substr(0,12) == 'boilerplate:' )
 {
  from_ll = coordinate1.substr(12);
  latlon = from_ll.split(",");
 } else

 //31°46'14.44"N ; 35°14'5.88"E
 {
  coord_filter = /([\d.,]+)°\s*([\d.,]+)['`′]\s*([\d.,]+)["″]\s*([nN])\s*[;,]?\s*([\d.,]+)°\s*([\d.,]+)['`′]\s*([\d.,]+)["″]\s*([oOwWeE])/;
  if( result = coord_filter.exec(coordinate1 ) )
  {
   latlon[0] = result[1]*1.0 + result[2]/60.0 + result[3]/3600.0;
   if( result[4]=='s' || result[4]=='S' ) latlon[0] *= -1.0;
   latlon[1] = result[5]*1.0 + result[6]/60.0 + result[7]/3600.0;
   if( result[8]=='w' || result[8]=='W' ) latlon[1] *= -1.0;
  } else return;
 }

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

 mps_lat = latlon[0];
 mps_lon = latlon[1];
 
 if(mps_lat<0) { mps_lat*=-1; mark_ns='S'; }
 if(mps_lon<0) { mps_lon*=-1; mark_ew='W'; mark_ew_d='W';}

 var mps_lat_m = (( mps_lat - Math.floor(mps_lat) ) * 60.0);
 var mps_lon_m = (( mps_lon - Math.floor(mps_lon) ) * 60.0);

 var mps_lat_s = ( mps_lat_m - Math.floor(mps_lat_m) ) * 60.0;
 var mps_lon_s = ( mps_lon_m - Math.floor(mps_lon_m) ) * 60.0;

 var slat_m = Math.floor(mps_lat_m).toString();
 var slon_m = Math.floor(mps_lon_m).toString();
 if (slat_m.length == 1) slat_m = '0' + slat_m;
 if (slon_m.length == 1) slon_m = '0' + slon_m;

 var slat_s = "";
 var slon_s = "";
 if ((mps_lat_s != 0) || (mps_lon_s != 0))
 {
   slat_s = mps_lat_s.toFixed(2);
   slon_s = mps_lon_s.toFixed(2);

   if (slat_s.length < 5) slat_s = '0' + slat_s;
   if (slon_s.length < 5) slon_s = '0' + slon_s;
   // wenn beide _visuell_ keine Nachkommastellen aufweisen, diese Nullen entfernen
   var slat_s_delim_pos = slat_s.indexOf('.00');
   var slon_s_delim_pos = slon_s.indexOf('.00');
   if ((slat_s_delim_pos >= 0) && (slon_s_delim_pos >= 0))
   {
    slat_s = slat_s.substr(0, slat_s_delim_pos);
    slon_s = slon_s.substr(0, slon_s_delim_pos);
   }
 }

 var infoBoxRegEx = /(\|\s*mps_lat_deg\s*=\s*)[0-9]+(\s*\|\s*mps_lat_min\s*=\s*)[0-9]+(\s*\|\s*mps_lat_sec\s*=\s*)[0-9.]*(\s*\|\s*mps_lon_deg\s*=\s*)[0-9]+(\s*\|\s*mps_lon_min\s*=\s*)[0-9]+(\s*\|\s*mps_lon_sec\s*=\s*)[0-9.]*/;
 if (mps_editbox.value.match(infoBoxRegEx))
 {
  mps_editbox.value = mps_editbox.value.replace(infoBoxRegEx,
   "$1" + Math.floor(mps_lat) + "$2" + slat_m + "$3" + slat_s +
   "$4" + Math.floor(mps_lon) + "$5" + slon_m + "$6" + slon_s);
 }
 else
 {
  coordinate2 = '{{Coordinate';
  if (mps_coordText.checked == true)
  {
    if (mps_coordArticle.checked == true) coordinate2 += '|article=/';
    coordinate2 += '|text=/';
  }
  coordinate2 += '|NS='+mps_lat+'|EW='+mps_lon+'|type='+mps_typeSelect.value;

  if (mps_typeSelect.value=='city' && mps_optionalNumber.value!='')
  {
   coordinate2 += '|pop='+mps_optionalNumber.value;
  }
  if (mps_typeSelect.value=='mountain' && mps_optionalNumber.value!='')
  {
   coordinate2 += '|elevation='+mps_optionalNumber.value;
  }
  if( mps_regionSelect.value!='')
  {
   var regionWords = mps_regionSelect.value.split(" ");
   coordinate2 += '|region='+regionWords[regionWords.length - 1];
  }
  if (dimNumber.value != '')
  {
    coordinate2 += '|dim=' + dimNumber.value;
  }
  if (mps_coordText.checked == true)
  {
    coordinate2 += '|name=';
  }

  coordinate2 += '}}';

  // alte Koordinatenvorlage aktualisieren
  if (mps_editbox.value.match(/\{\{Koordinate[\s_]Artikel.*\}\}/))
  {
   mps_editbox.value = mps_editbox.value.replace(/\{\{Koordinate[\s_]Artikel.*\}\}/, coordinate2);
   if (mps_wpSummary.value == "") mps_wpSummary.value = "Geokoordinaten geändert";
  }
  // Koordinatenvorlage hinzufügen
  else
  {
   mps_editbox.value += coordinate2;
   if (mps_wpSummary.value == "") mps_wpSummary.value = "Geokoordinaten eingefügt";
  }
 }
}