Jump to content

User:ZBroz/common.js

From Wiktionary, the free dictionary

Note: You may have to bypass your browser’s cache to see the changes. In addition, after saving a sitewide CSS file such as MediaWiki:Common.css, it will take 5-10 minutes before the changes take effect, even if you clear your cache.

  • Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh);
  • Konqueror and Chrome: click Reload or press F5;
  • Opera: clear the cache in Tools → Preferences;
  • Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5.

This JavaScript is executed for ZBroz on every page load.


// <nowiki>
/** Returns the content of a parameter passed via URL. Does not 
  * treat booleans in a dedicated manner, returning their string
  * content instead. If the parameter is not found, returns either
  * a default value (iDefaultValue) or an empty string.
  * Based on Wiktionary's MediaWiki:Edit.js. */
function getURLParameter(parameterName, /*optional*/ iDefaultValue) {   
    var defaultValue = typeof iDefaultValue != 'undefined' ? iDefaultValue : "";

    if (! (window.location.search && window.location.search.split("?")[1]))
      return defaultValue;
    try {
      urlParts=window.location.search.split("?")[1].split("&"); }
    catch (e) {
      return defaultValue; } //not an edit page
    
    for (var k = 0; k < urlParts.length; ++k) {
      pair=urlParts[k].split("=")
      if (pair[0]==parameterName)
        return decodeURIComponent(pair[1].replace(/\+/gi," "));
    }
    return defaultValue;
}

/** Alerts the user by adding a new div to the center of the page rather than
  * via a pop up. */
function divAlert(message) {
  var div = document.createElement("div");

  div.style.position = "fixed";
  div.style.zIndex = 100;
  div.style.top = "40%";
  div.style.left = "30%";
  div.style.marginRight = "30%";
  div.style.padding = "15pt"; 
  div.style.backgroundColor = "brown";
  div.style.color = "white";
  div.style.fontSize = "15pt";
  
  div.innerHTML = message;
  document.body.appendChild(div);
}


/** Adds a translation or several translations in one languages to the page,
  * to the translation section with the heading containg the gloss.
  * There can be multiple translations, separated by semicolon.
  * A single translation element can contain gender indicated by a single letter,
  * separated from the translation using space, as in "jezevec m". Supported
  * genders are m, f, n, and c. There is no support for transliteration.
  */
function addTranslations(language, langCode, translationString, gloss, buttonToPress) {

  /** Returns a pair of [translation, gender] given a string with a translation followed
      by a space and then by a single letter indicating the gender. If no gender is found,
      return a pair of [translation, ""]. */
  function genderSplit(translationWithGender) {
    var translation=translationWithGender;
    genderMatches = translationWithGender.match(/^(.*) ([mfnc])$/);
    if (genderMatches!=null)
      return [genderMatches[1], genderMatches[2]];
    else
      return [translation,""];
  };

  if (gloss=="" || translationString=="") {
    divAlert("The gloss or the translation is empty. No translation added.");
    return; }
  if (language=="" || langCode=="") {
    divAlert("The language or language code is missing. No translation added.");
    return; }

  // Trim the translation string, split it by semicolon and create the new translation line
  var translations=translationString.replace(/^ +/g,"").replace(/ +$/g,"").split(/ *; */);
  var newTranslationLine = "* "+language+": ";
  for (i=0; i<translations.length;i++) {
    if (i>0)
      newTranslationLine+= ", "

    genderSplitPair = genderSplit(translations[i]);
    translation=genderSplitPair[0];
    gender=genderSplitPair[1];
    newTranslationLine += "{{t|"+langCode+"|"+translation+(gender!=""?"|"+gender:"")+"}}";
  }
    
  var content=document.getElementById("wpTextbox1").value;
  var i = content.indexOf("{{trans-top|"+gloss,0);
  if (i<0) {
    divAlert("The gloss was not found on the page: \""+gloss+"\".  No translation added.");
    //console.log("The gloss was not found on the page: \""+gloss+"\".  No translation added."); Does not seem to do anything.
    return; }
  var j = content.indexOf("{{trans-bottom}}",i);
  var part1 = content.substring(0,i);
  var part2 = content.substring(i,j);
  var part3 = content.substring(j,content.length);
  
  if (part2.indexOf(language,0)>=0) {
    divAlert("A "+language+" translation is already present in the translation table with the gloss \""+gloss+"\". No translation added.")
    return; }
  
  // Break the part2 by newlines and insert the new translation at the right place.
  var part2lines = part2.split("\n");
  var newPart2 = "";  
  var newTranslationAdded=false;
  for (i=0; i<part2lines.length;i++) {
    if (i>0)
      newPart2 += "\n";
    // Add the new translation if it was not yet added and if this is the right place.
    // Example of the presentation of a language on the line: "* Danish:", "* [[Aragonese]]:
    var languageArray = part2lines[i].match(/^\* \[?\[?(.*?)\]?\]?:/);
    if (languageArray!=null) {
      var lineLanguage=languageArray[1];
      if (!newTranslationAdded && (language < lineLanguage)) {
        newPart2 += newTranslationLine+"\n";
        newTranslationAdded = true; }}
    newPart2 += part2lines[i]; }
  if (!newTranslationAdded) { // Thus, the added language is the last translation to be added.
    newPart2 += newTranslationLine+"\n";
    newTranslationAdded = true; }

  document.getElementById("wpTextbox1").value=part1+newPart2+part3;
 
  var summary = "/* translation gloss:"+gloss+" */ ";
  for (i=0; i<translations.length;i++) {
    if (i>0)
      summary+= "; "
    genderSplitPair = genderSplit(translations[i]);
    translation=genderSplitPair[0];
    summary += "+"+langCode+":[["+translation+"]]"; }
  document.getElementById("wpSummary").value=summary;
  
  if (buttonToPress)
    document.getElementById(buttonToPress).click();    
  // buttonToPress: "wpSave", "wpPreview", "wpDiff"
 
}

function enableAddingTranslations() {
  if (getURLParameter("task")=="addtrans")
    addTranslations(getURLParameter("language"), getURLParameter("langCode"),
                    getURLParameter("translation"), getURLParameter("gloss"), getURLParameter("button"));
}

$(enableAddingTranslations);

//----------------------------------
// Ruakh's Tbot
//----------------------------------
//importScript('User:Ruakh/Tbot.js');
importScript('User:ZBroz/Tbot.js');

/*
Tbot.getHeadLine['cs~adjective'] =
Tbot.getHeadLine['cs~adverb'] =
Tbot.getHeadLine['cs~noun'] =
Tbot.getHeadLine['cs~proper noun'] =
Tbot.getHeadLine['cs~verb'] = function (tbotData)
{
  var ret = '{{cs-';
  if(tbotData.pos === 'adjective' || tbotData.pos === 'adverb')
    ret += tbotData.pos.substr(0, 3); // 'adj' or 'adv'
  else
    ret += tbotData.pos; // 'noun', 'proper noun', 'verb'
  if(tbotData.head)
    ret += '|head=' + tbotData.head;
  if(tbotData.g)
    if(tbotData.pos === 'noun' || tbotData.pos === 'proper noun')
      ret += '|g=' + tbotData.g.replace(/[|]/g, '');
  ret += '}}';
  return ret;
};
*/

$(function() { Tbot.greenifyTranslinks('cs'); });