Utilisateur:Adehertogh/inserttemplate.js

De Wikivoyage

Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
  • Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
  • Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
  • Opera : appuyez sur Ctrl + F5.
function liste_region_en_fr() {
  var textbox = $('#wpTextbox1');
  var alltext = textbox.val();
  var selstart = textbox[0].selectionStart;
  var selend = textbox[0].selectionEnd;
  var before = alltext.substr(0, selstart);
  var selected = alltext.substr(selstart, selend - selstart);
  var after = alltext.substr(selend);
  var text = selected;
  var expr = /region([0-9]+)([^=]+)/m;
  var newtext = '';
  for (; ; ) {
    var res = expr.exec(text);
    if (res === null) {
      newtext += text;
      break;
    }
    var repl = res[2];
    if (repl == 'name') {
      repl = 'nom';
    } else if (repl == 'color') {
      repl = 'couleur';
    } else if (repl == 'items') {
      repl = 'elements';
    }
    newtext = newtext + text.substr(0, res.index) + repl + 'region' + res[1];
    text = text.substr(res.index + res[0].length);
  }
  textbox.val(before+newtext+after);
}


$(document).ready(function () {
	var myhtml = "<div style='overflow: hidden; height: 33px;clear: both;float: left;width: 100%' id='my-tbl-links'>";
	myhtml += '<style>#my-tbl-links a{margin-left: 1em;margin-rigth: 1em}</style>';
	myhtml += '<a href="#">Horaire</a><a href="#">Heure</a><a href="#">Minutes</a><a href="#">€</a>';
	myhtml += '<a href="#">Lang=</a><a href="#">Regionlist_enfr</a><a href="#">Unité</a>';
	myhtml += '<a href="#">Marqueur</a><a href="#">Bienvenue</a>';
	myhtml += '<a href="#">coordPrecision</a>';
	myhtml += "</div>";
	
	$(myhtml).insertAfter($(".sections"));
	$("#my-tbl-links a").click(function(event){
	  event.preventDefault();
	  var sel = $(this).text();
	  var text = null;
	  // test type of action
	  if (sel=="Regionlist_enfr") {
	  	liste_region_en_fr();
	  	return;
	  }  else if (sel=="coordPrecision") {
	  	coordPrecision();
	  } else if (sel=="Horaire") {
	    text = ["{{Horaire|", "|||||||}}"];
	  } else if (sel=="Heure") {
	    text = ["{{Heure|", "}}"];
	  } else if (sel=="Minutes") {
	    text = ["{{Heure||", "}}"];
	  } else if (sel=="€") {
	    text = ["{{Prix|", "|€}}"];
	  } else if (sel=="Lang=") {
	    text = ["{{Lang||", "}}"];
	  } else if (sel=="Unité") {
	    text = ["{{Unité|", "|}}"];
	  } else if (sel=="Marqueur") {
	    text = ["{{Marqueur|nom=", "|type=|latitude=|longitude=}}"];
	  } else if (sel=="Bienvenue") {
	    text = ["{{subst", ":Modèle:Bienvenue|}}"];
	  }
	  if (text===null) {
	    return;
	  }
	  var textbox = $("#wpTextbox1");
	  var alltext = textbox.val();
	  var selstart = textbox[0].selectionStart;
	  var selend = textbox[0].selectionEnd;
	  var before = alltext.substr(0, selstart);
	  var selected = alltext.substr(selstart, selend-selstart);
	  var after = alltext.substr(selend);
	  textbox.val(before+text[0]+selected+text[1]+after);
	});

        addSourceLink("Permalink", "Permalink");
});

function addSourceLink(special, label) {
	var target = $("#ResumeDeluxe");
	target.append(" • ");
	var tmp = $("<a href='#'>"+label+" 'En'</a>").appendTo(target);
	
	tmp.click(function(event){
	  event.preventDefault();
	  var target = $("#wpSummary");
	  target.val(target.val()+" Depuis Wikivoyage en anglais ([[en:Special:"+special+"/VERSION|source]])");
	});
}

var coordPrecision = function () {
  function radians(deg) {
    return deg * Math.PI / 180;
  }
  function distance(lon1, lat1, lon2, lat2) {
    var radius = 6371; // km
    var dlat = radians(lat2 - lat1);
    var dlon = radians(lon2 - lon1);
    var a = Math.sin(dlat / 2) * Math.sin(dlat / 2) + Math.cos(radians(lat1)) * Math.cos(radians(lat2)) * Math.sin(dlon / 2) * Math.sin(dlon / 2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    var d = radius * c;
    return d;
  }
  function distance_text(lon1, lat1, lon2, lat2) {
    var d = distance(lon1, lat1, lon2, lat2);
    return (d > 1) ? (d + 'km')  : (d * 1000 + 'm');
  }
  function distance_l(lon, lat) {
    return distance(lon, lat, lon + 1, lat);
  }
  function distance_n(lon, lat, n) {
    var threshold = Math.pow(10, - n);
    return distance(lon, lat, lon + threshold, lat + threshold) * 1000;
  }
  function round1(num) {
    if (num - Math.floor(num) === 0) {
      return num;
    }
    var sign = Math.sign(num);
    var positive = num / sign;
    var nb_dec = ('' + num).split('.') [1].length;
    var mult = Math.pow(10, nb_dec - 1);
    return Math.round(num * mult) / mult;
  }
  function round1_(num) {
    if (num - Math.floor(num) === 0) {
      return num;
    }
    var nb_dec = ('' + num).split('.') [1].length;
    return parseFloat(num.toFixed(nb_dec - 1));
  }
  function precision(lorig_lon, orig_lat, lon, lat) {
    var lon1 = round1(lon);
    var lat1 = round1(lat);
    console.log("precision", lon, lon1, lat, lat1);
    var p_lon = lon==lon1 ? null : new Point(lon1, lat, distance(lorig_lon, orig_lat, lon1, lat));
    var p_lat = lat==lat1 ? null : new Point(lon, lat1, distance(lorig_lon, orig_lat, lon, lat1));
    return [p_lon, p_lat];
  }
  function Point(lon, lat, prec) {
    this.lon = lon;
    this.lat = lat;
    this.prec = prec;
    this.label = '';
  }
  Point.prototype.prec_text = function () {
    if (this.prec > 1) {
      return this.prec.toFixed(1) + 'km';
    } else if (this.prec > 0.001) {
      return (this.prec * 1000).toFixed(1) + 'm';
    } else {
      return (this.prec * 100000).toFixed(1) + 'cm';
    }
  };
  function process(orig_lon, orig_lat) {
    var lat = orig_lat;
    var lon = orig_lon;
    var all_choices = [];
    for (var cnt=0; cnt<30;++cnt) {
      var res = precision(orig_lon, orig_lat, lon, lat);
      var res1 = res[0];
      var res2 = res[1];
      var choice = null;
      //console.log(res1, res2);
      if (res1 === null) {
        if (res2 !== null) {
          choice = res2;
        }
      } else if (res2 === null) {
        choice = res1;
      } else {
        choice = res1.prec < res2.prec ? res1 : res2;
      }
      if (choice === null) {
        break;
      }
      all_choices.push(choice);
      console.log('longitude=' + choice.lon + ' | latitude=' + choice.lat + ' => ' + choice.prec_text());
      lon = choice.lon;
      lat = choice.lat;
    }
    // display

    var limits = [
      ['shop',
      0.001],
      [
        'city',
        0.25
      ],
      [
        'big city',
        3
      ]
    ];
    var prev = null;
    for (cnt in all_choices) {
      var choice2 = all_choices[cnt];
      console.log(limits);
      if (limits.length > 0 && choice2.prec > limits[0][1]) {
        if (prev === null) {
          choice2.label = limits[0][0];
        } else {
          prev.label = limits[0][0];
        }
        limits.shift();
      }
      prev = choice2;
    }
    // display result

    $('#coordPrecision').remove();
    $('.editOptions').before('<div id=\'coordPrecision\'><ul/></div>');
    var out = $('#coordPrecision ul');
    for (cnt in all_choices) {
      var choice3 = all_choices[cnt];
      var txt = 'latitude=' + choice3.lat + ' | longitude=' + choice3.lon + ' => ' + choice3.prec_text();
      if (choice3.label !== '') {
        txt += ' (' + choice3.label + ')';
      }
      out.append('<li>' + txt + '</li>');
    }
  }
  function processGUI() {
    var textbox = $('#wpTextbox1');
    var alltext = textbox.val();
    var selstart = textbox[0].selectionStart;
    var selend = textbox[0].selectionEnd;
    var selected = alltext.substr(selstart, selend - selstart);
    var res = /latitude *= *(-?[0-9.]+)/.exec(selected);
    if (res != null) {
      var lat = res[1];
      var res = /longitude *= *(-?[0-9.]+)/.exec(selected);
      if (res != null) {
        process(parseFloat(res[1]), parseFloat(lat));
      }
    }
  }
  return processGUI;
}();