Käyttäjä:Hunsvotti/Gadget-käännökset.js

Hei, olet tullut tänne etsimään sanan Käyttäjä:Hunsvotti/Gadget-käännökset.js merkitystä. DICTIOUS-sanakirjasta löydät paitsi kaikki sanan Käyttäjä:Hunsvotti/Gadget-käännökset.js sanakirjamerkitykset, myös sen etymologian, ominaisuudet ja sen, miten Käyttäjä:Hunsvotti/Gadget-käännökset.js sanotaan yksikössä ja monikossa. Kaikki mitä sinun tarvitsee tietää sanasta Käyttäjä:Hunsvotti/Gadget-käännökset.js on tässä. Sanan Käyttäjä:Hunsvotti/Gadget-käännökset.js määritelmä auttaa sinua olemaan täsmällisempi ja oikeampi puhuessasi tai kirjoittaessasi tekstejäsi. Kun tunnet sananKäyttäjä:Hunsvotti/Gadget-käännökset.js määritelmän sekä muiden sanojen määritelmät, rikastutat sanavarastoasi ja saat lisää ja parempia kielellisiä resursseja.
// Lomake, joka näytetään kun lisää...-nappia on painettu, ennen kuin kieli on kirjoitettu.

var $btn_ok_kieli = (function (e) {
    var $btn = $('<input type="button" id="gk_kieli_ok" value="OK" />');
    $btn.on('click', function(e) { 
	return gadget_kaannos.nimi_onchange(e);
    });
    return $btn;
})();

var $alkulomake = (function () {
    var $tb = $('<input type="text" class="gk_kieli" id="gk_kieli" style="width: 8em" title="Kirjoita kielen nimi tai kielikoodi." />');
    var $lomake = $('\
<div id="gk_alkulomake">\
<ul id="gk_kielilista"></ul>\
<label for="gk_luettelo">Kieli: </label>\
<span id="gk_luettelo"></span>\
<div id="gk_lisaparamt">\
</div>\
</div>\
');

    $lomake.children(":nth(1)").after($btn_ok_kieli);
    $lomake.children(":nth(1)").after($tb);
    return $lomake;
})();

// Käännöksen lisäyksen tallennusnappi.
var $btn_tallennus3 = (function () {
    var $btn = $('<input id="gk_kieli_tallenna" style="alignment: right;" type="button" value="OK" title="Generoi wikikoodi" />');
    $btn.on('click', function (e) {
	var $trg = $(e.target);
	var $div = $trg.closest(".käännöskohta");
	var $ots = $div.prev("h4").children(":contains(Käännökset)");
	var numero = $ots.attr("gk_numero");
	var $otsikko = $div.find(".NavHead>b");
	var tiedot = $otsikko.text().match("^(*)\\.? ?(.*)");
	var num = tiedot, teksti = tiedot;

	//alert("kohdan numero: " + num);
	tallennusnappi_onclick({ "lisätään" : "käännös", "käännöskohta" : num });
    });
    return $btn;
})();

// Uuden käännöskohdan tallennusnappi.
var $btn_tallennus2 = (function () {
    var $btn = $('<input type="button" value="Generoi" title="Generoi wikikoodi ja siirry tallentamaan muutokset." />');
    $btn.on('click', function (e) {
	// Lisätään mahdollinen muokattava luetteloon
	$btn_plus_kieli.click();
	var $trg = $(e.target);
	var $div = $trg.closest(".gk_editoitava");
	var $ots = $div.prev("h4").children(":contains(Käännökset)");
	var numero = $ots.attr("gk_numero");
	var kkohta = $div.attr("kkohta");
	//alert("tallennetaan uusi käännöskohta " + $btn_tallennus2.parent(".käännöskohta").data("kkindex"));
	tallennusnappi_onclick({ "lisätään" : "kohta", "otsikkonum" : numero, "käännöskohta" : kkohta });
    });
    return $btn;
})();

// Käännösosion tallennusnappi.
var $btn_tallennus1 = (function () {
    var $btn = $('<input type="button" value="Generoi" />');
    $btn.on('click', function (e) {
	var $trg = $(e.target);
	var $div = $trg.closest(".gk_editoitava");
	var $ots = $div.next("h2, h3, h4").children(".mw-headline");
	var numero = $ots.attr("gk_numero");
	//alert("lisätään ennen otsikkoa numero " + numero + " (" + $ots.text() + ")");

	// Lisätään mahdollinen muokattava luetteloon
	$btn_plus_kieli.click();
	var kknum = 0;
	//alert("tallennetaan uusi käännösosio otsikolle " + $btn_tallennus1.data("h3index"));
	tallennusnappi_onclick({ "lisätään" : "osio", "otsikkonum" : numero });
    });
    return $btn;
})();

// Kielen lisäysnappi.
var $btn_plus_kieli = (function () {
    var $btn = $('<input type="button" id="gk_lisaa_toinen_kieli" value="+" title="Lisää käännös toisella kielellä" />');
    $btn.on('click', function (e) {
	$("#gk_lisaa_toinen_kaannos").click(); // tallennetaan editoitava
	$sanat = $("#gk_luettelo").children().detach();
	if ( $sanat.length > 0 ) {
	    var nyk = $("#gk_kieli").prop("value");
	    var $nyk = tee_lisattykieli(nyk);
	    $nyk.append($sanat);
	    $("#gk_kielilista").append($nyk);
	    $("#gk_kieli").prop("value", "").focus();
	    $btn_ok_kieli.show();
	    $("#gk_lisaparamt").children().detach();
	}
    });
    return $btn;
})();


// Kielen lisäysnappi.
var $btn_plus_kaannos = (function () {
    var $btn = $('<input type="button" id="gk_lisaa_toinen_kaannos" value="+" title="Lisää toinen käännös." />');
    $btn.on('click', lisaa_sana_onclick);
    return $btn;
})();

var $tietolomake = (function () {

    // lisää toinen kieli -nappi


    // kaikille yhteinen alkuosa
    var $lomake = $('\
<div>\
<div style="border: solid black 1px; padding: 2px; background-color: #aef;">\
<label for="gk_sana">Käännös: </label><input type="text" id="gk_sana"/>\
<span id="gk_suvut"><br/><label>Suku: </label><input type="checkbox" class="gk_suku" id="gk_suku_m" style="width: 2em;"/><label for="gk_suku_m">maskuliini</label><input type="checkbox" class="gk_suku" id="gk_suku_f" style="width: 2em;"/><label for="gk_suku_f">feminiini</label><input type="checkbox" class="gk_suku" id="gk_suku_n" style="width: 2em;"/><label for="gk_suku_n">neutri</label></span>\
<span id="gk_latin"><br/><label for="gk_latinalaistus">Latinalaistus: </label><input type="text" id="gk_latinalaistus" style="width: 10em;" /></span>\
</div>\
</div>\
');

    $lomake.children("div").append($btn_plus_kaannos);
    $lomake.prepend($btn_plus_kieli);
    $lomake.append($btn_tallennus3);
    return $lomake;
})();

/**
 * Palauttaa numero:nnen osion edellisen välin alkukohdan, alkukohdan ja seuraavan otsikon alkukohdan.
 */
function hae_osio_nro(teksti, numero) {
    var pat = /(*)\n(==+)(.*?)\1/g;
    var c = 1;
    var result = null;
    var kohta = -1, kohtal = -1, kohtas = -1;
    while ( (result = pat.exec(teksti)) !== null ) {
	var s = pat.lastIndex - result.length;
	if ( c == numero ) {
	    kohta = result.index;
	    kohtal = kohta + result.length;
	    //alert("löytyi oikea otsikko: " + kohta + "-" + kohtal + ": " + c + " – " + numero);
	    //alert("kohta alkaa: " + teksti.substr(kohta));
	}
	else if ( c == numero+1 ) {
	    kohtas = result.index;
	    break;
	}

	c++;
    }
    if ( kohtas == -1 ) { kohtas = teksti.length; }
    return ;
}


/*
 * Näkymätön lomake, jolla tiedot lähetetään. Peräisin HotCatin koodista.
 */
var tallennuslomake = '<form id="commitForm" method="post" enctype="multipart/form-data" action="'
    + wgScript + '?title=' + encodeURIComponent (wgPageName)
    + '&action=edit">'
    + '<input type="hidden" name="wpTextbox1" />'
    + '<input type="hidden" name="wpSummary" value="" />'
    + '<input type="hidden" name="wpMinoredit" value="0" />'
    + '<input type="hidden" name="wpWatchthis" value="0" />'
    + '<input type="hidden" name="wpAutoSummary" value="" />'
    + '<input type="hidden" name="wpEdittime" />'
    + '<input type="hidden" name="wpStarttime" />'
    + '<input type="hidden" name="wpEditToken" />'
    + '<input type="hidden" name="wpDiff" value="wpDiff" />'
    + '<input type="hidden" name="oldid" value="0" />'
    + '</form>';



function tallennusnappi_onclick(data) {
    var numero = data;
    var kkohta = data;
    var lisataan = data;

    if ( $("#gk_kieli").prop('value') !== "" ) {
	$btn_plus_kieli.click();
    }

    var kielet = {};
    $("#gk_kielilista > li").each(function (index) {
	var kieli = $(this).children(".gk_kielilista_kieli").text();
	var luettelo = ;
	$(this).children(".gk_lisattysana").each(function (index) {
	    luettelo.push($(this).data("tiedot"));
	});
	kielet = luettelo;
    });


    if ( Object.keys(kielet).length > 0 ) { // TODO  ei toimi kai IEssä
	// lisätään palautuslomake
	$("#mw-content-text").prepend(tallennuslomake);
	getPage(function (json) { 
	    //alert("lisätään: " + lisataan + ", numero: " + numero + ", kkohta: " + kkohta);
//	    alert(JSON.stringify(kielet));
//	    koodi_ladattu(); 
	    var kieleto = ;
	    var kielennimet = ;
	    for ( var k in kielet ) {
//		alert(k);
		kielennimet.push(k);
		var sanat = kielet;
		var sanato = ;
		for ( var s in sanat ) {
		    var tiedot = sanat;

		    var oput = "{{käännös|{{sub" + "st:kielikoodiksi|" + k + "}}|" + tiedot + ("suku" in tiedot ? ("|suku=" + tiedot) : "") + ("latin" in tiedot ? ("|latin=" + tiedot) : "") + "}}";
		    sanato.push(oput);
		}
		kieleto.push("*" + k + ": " + sanato.join(", "));
	    }
//	    alert(kieleto.join("\n"));

	    var page = parse_result(json);
	    page = "\n" + page;
	    var data = hae_osio_nro(page, numero);
	    var kohta = data, kohtal = data, kohtas = data;

	    if ( kohta == -1 ) { console.log("VIRHE: kohta == -1"); }

	    if ( lisataan == "osio" ) {
		page = page.substring(0, kohta) + "\n\n====Käännökset====\n{{kohta|1|testi|\n" + kieleto.join("\n") + "\n|loppu}}\n" + page.substring(kohtal);
	    }
	    else if ( lisataan == "kohta" || lisataan == "käännös" ) {
		var osio = page.substring(kohtal, kohtas);
		alert("OSIO:" + osio);
		var kohdat = osio.split("{{kohta|");
		if ( lisataan == "kohta" ) {
		    var kohdato = ;
		    var lisatty = false;
		    for ( var i in kohdat ) {
			if ( parseInt(kohdat.substr(0,kohdat.indexOf("|")), 10) >  kkohta ) {
			    kohdato.push("" + kkohta + "|\n" + kieleto.join("\n") + "\n|loppu}}\n");
			    lisatty = true;
			}
			kohdato.push(kohdat);
		    }
		    if ( !lisatty ) {
			kohdato.push("" + kkohta + "|\n" + kieleto.join("\n") + "\n|loppu}}\n");
			lisatty = true;
		    }
		}
		else if ( lisataan == "käännös" ) {
		    for ( var i in kohdat ) {
			if ( parseInt(kohdat.substr(0,kohdat.indexOf("|")), 10) == kkohta ) {
			    var p = kohdat.indexOf("\n");
			    if ( p ) {
				kohdat = kohdat.substring(0, p) + kieleto.join("\n") + kohdat.substring(p);
			    }
			}
		    }
		}
		page = page.substring(0, kohta) + kohdato.join("\n{{sub" + "st:kohta|") + page.substring(kohtal);
	    }

//	    alert("sivu: \n" + page;)
	    laheta(page, "+(" + kielennimet.join(", ") + ")");
	});
    }
    else {
	alert("Tarvitaan kieli ja ainakin yksi käännös.");
    }
}


/*
 * Sanaluettelon sana.
 */
function tee_lisattysana(teksti) {
    var $sana = $('<span class="gk_lisattysana">' + teksti + '</span>');
    var $btn = $('<span class="gk_lisattysanapois" title="Poista">×</span>');
    $btn.on('click', function (e) {
	$(e.target).parent().remove();
    });
    $sana.append($btn);
    return $sana;
}

/*
 * Kieliluettelon kieli.
 */
function tee_lisattykieli(teksti) {
    var $k = $('<li><span class="gk_kielilista_kieli" title="Muokkaa">' + teksti + '</span>: </li>');
    // Kielen valinta kielilistasta takaisin muokattavaksi
    $k.children("span").on('click', function (e) {
	var $trg = $(e.target).parent();

	// Siirretään nykyinen editoitava listaan.
	$btn_plus_kieli.click();

	// Siirretään sanat takaisin muokkauskohtaan
	var $cs = $trg.children(".gk_lisattysana").detach();
	$("#gk_kieli").prop('value', $trg.children("span").text());
	$trg.remove();
	$("#gk_kieli_ok").click();
	$("#gk_luettelo").html($cs);
    });
    return $k;
}



function lisaa_sana_onclick () {
    var tiedot = lue_tiedot();

    if ( tiedot.sana !== "" )
    {
	var $l = $("#gk_luettelo");
	var $sana = tee_lisattysana(tiedot.sana);

	// tallennetaan tiedot sanan yhteyteen
	$sana.data("tiedot", tiedot);
	$l.append($sana);

	$(".gk_suku").prop('checked', false);
	$("#gk_latinalaistus").prop('value', '');
	$("#gk_sana").prop('value', '').focus();

    }
}


/*
 *  Lukee tällä hetkellä editoitavan sanan tiedot assosiatiiveksi taulukoksi.
 */
function lue_tiedot(num) {
    var tiedot = {};
    tiedot.sana = $("#gk_sana").prop('value');
    tiedot.suku = ($("#gk_suku_m").prop('checked') ? "m" : "") + ($("#gk_suku_f").prop('checked') ? "f" : "") + ($("#gk_suku_n").prop('checked') ? "n" : "");
    tiedot.latin = $("#gk_latinalaistus").prop('value');
    return tiedot;
}


/*
 * Muotoilee aikaleiman tämänhetkisestä ajasta. Peräisin HotCatin koodista.
 */
function currentTimestamp () {
    var now = new Date();
    var ts  = "" + now.getUTCFullYear();
    function two (s) { return s.substr (s.length - 2); }
    ts = ts 
	+ two ('0' + (now.getUTCMonth() + 1)) 
	+ two ('0' + now.getUTCDate()) 
	+ two ('00' + now.getUTCHours()) 
	+ two ('00' + now.getUTCMinutes()) 
	+ two ('00' + now.getUTCSeconds());
    return ts;
}

/*
 * Muotoilee urlista absoluuttisen. Peräisin HotCatin koodista.
 */
function armorUri (uri) {
    // Avoid protocol-relative URIs, IE7 has a bug with them in Ajax calls
    if (uri.length >= 2 && uri.substring(0, 2) == '//') { return document.location.protocol + uri; }
    return uri;
}

/*
 * Lähettää kyselyn palvelimelle. Muutettu HotCatin koodista.
 */
function getPage (func) {
    // callback näkyväksi api-skripitille
    window.gadget_kaannos.koodi_ladattu = func; 
    // apin latauskripti joka kutsuu callbackia palautetulla arvolla
    var url = wgServer + wgScriptPath 
	+ '/api.php?format=json&callback=window.gadget_kaannos.koodi_ladattu&action=query&titles=' 
	+ encodeURIComponent (wgPageName)
	+ '&prop=info%7Crevisions&rvprop=content%7Ctimestamp%7Cids&meta=siteinfo&rvlimit=1&rvstartid='
	+ wgCurRevisionId;
    var s = document.createElement('script');
    s.src = armorUri(url);
    s.type = 'text/javascript';
    document.getElementsByTagName ('head').appendChild (s);
}


/*
 * Purkaa palvelimen palauttamat tiedot. Muutettu HotCatin setPage koodista.
 */
function parse_result (json) {
    //alert(JSON.stringify(json, undefined, 2));
    var pageText;
    var startTime = null;
    if (json && json.query) {
	if (json.query.pages) {
	    //var page = json.query.pages;
	    var page = json.query.pages];
	    if (page) {
		if (page.revisions && page.revisions.length > 0) {
		    // Revisions are sorted by revision ID, hence  is the one we asked for, and possibly there's a  if we're
		    // not on the latest revision (edit conflicts and such).
		    pageText = page.revisions;
		    if (page.revisions.timestamp) pageTime = page.revisions.timestamp.replace (/\D/g, "");
		    if (page.revisions.revid) pageTextRevId = page.revisions.revid;
		    if (page.revisions.length > 1) conflictingUser = page.revisions.user;
		}
		if (page.lastrevid) lastRevId = page.lastrevid;
		if (page.starttimestamp) startTime = page.starttimestamp.replace (/\D/g, "");
		pageWatched = typeof (page.watched) == 'string';
		editToken = page.edittoken;            
	    }
	}
    }
    return pageText;
}


	    /*
	     * Tallennuslomakkeen tiedot.
	     */
	    var setupTimeout;
	    var pageText;
	    var pageTime;
	    var pageTextRevId = null;
	    var conflictingUser = null;
	    var lastRevId = null;
	    var serverTime = null;
	    var startTime = null;
	    var pageWatched = null;
	    var editToken = null;
	    var commitForm = null;


/*
 * Lähettää muutokset palvelimelle.
 */
function laheta(teksti, muutoskom) {
    // Täytetään näkymätön lomake joka lähettää tiedot submit()illa.
    var commitForm = document.getElementById ('commitForm');
    commitForm.wpAutoSummary.value = 'd41d8cd98f00b204e9800998ecf8427e'; // MD5 hash of the empty string
    commitForm.removeChild(commitForm.wpMinoredit);
    //		commitForm.wpWatchthis.checked = 1;
    commitForm.wpSummary.value = muutoskom;
    commitForm.wpTextbox1.value = teksti;
    commitForm.wpStarttime.value = serverTime || currentTimestamp ();
    commitForm.wpEdittime.value = pageTime || commitForm.wpStarttime.value;
    commitForm.submit();
    //console.log("Muutoskommentti: " + muutoskom);
    //console.log("Teksti: " + teksti);
    //console.log("Lähetetty");
}



/******************************************************************/


(function(w){
    window.Kaannosgadgetti = {
	kieliominaisuudet: { 
	    uk: { nimi: "ukraina", suku: true, latin: true }, 
	    be: { nimi: "valkovenäjä", suku: true, latin: true }, 
	    bg: { nimi: "bulgaria", suku: true, latin: true }, 
	    ch: { nimi: "kiina", suku: false, latin: true }, 
	    de: { nimi: "saksa", suku: true, latin: false }, 
	    el: { nimi: "kreikka", suku: true, latin: true }, 
	    en: { nimi: "englanti", suku: false, latin: false }, 
	    es: { nimi: "espanja", suku: true, latin: false }, 
	    et: { nimi: "viro", suku: false, latin: false }, 
	    fr: { nimi: "ranska", suku: true, latin: false }, 
	    it: { nimi: "italia", suku: true, latin: false }, 
	    jp: { nimi: "japani", suku: false, latin: true }, 
	    pt: { nimi: "portugali", suku: true, latin: false }, 
	    ru: { nimi: "venäjä", suku: true, latin: true }, 
	    sr: { nimi: "serbia", suku: true, latin: true }, 
	    sv: { nimi: "ruotsi", suku: false, latin: false }, 
	},
	kielikoodit: function () { 
	    var kielikoodit = {};
	    for (k in this.kieliominaisuudet) {
		kielikoodit.nimi] = k;
	    }
	    return kielikoodit;
	}(),

    };

    function run($) {



	/*
	 * Käännöksen lisäyslomakkeen avausnappi ja taulukkoon lisättävä rivi.
	 */
	function tee_nappi(index) {
	    var $btn = $('<input class="gk_lisaa_kaannos" type="button" value="Lisää käännös..." />');
	    $btn.on('click', function (e) {
		$(e.target).replaceWith($alkulomake.detach());
		$("#gk_kieli").focus();
	    });
	    return $btn;
	}

	function tee_syottolomake(index) {
	    var $form =  $('<tr class="gk_kaannoslomake"><td colspan="5" id="gk_kaannoslomake' + index + '"></td></tr>');
	    $form.find("td").append(tee_nappi(index));
	    return $form;
	}



	/*
	 * Palauttaa kielen kielikoodin, jos sellainen on. Muuten, jos parametrin pituus on 2 tai 3
	 * olettaa että parametri on kielikoodi ja palauttaa sen. Muuten palauttaa null.
	 */
	function kielikoodiksi(kn) {
	    if ( Kaannosgadgetti.kielikoodit )
		return Kaannosgadgetti.kielikoodit;
	    if ( kn.length == 2 || kn.length == 3 )
		return kn;
	    return null;
	}

	/*
	 * Kielikoodia vastaavan nimen, jos sellainen on.
	 * on kielikoodi ja palauttaa sen.
	 */
	function kieleksi(kk) {
	    if ( Kaannosgadgetti.kieliominaisuudet != undefined )
		return Kaannosgadgetti.kieliominaisuudet.nimi;
	    return kk;
	}



	/*
	 * Callback-funktio, jota kutsutaan kun sivun wikiteksti on ladattu.
	 */
        function koodi_ladattu(json) {
	    //alert("koodi ladattu");	    
	    


	    /*
	     * Muuttaa syötteen wikikoodiksi.
	     */
	    function kasittele_syote(syote, kielikoodi, kielinimi) {
		//console.log("kielikoodi: " + kielikoodi + ", kieli: " + kielinimi);
		var tulos = ;
		for ( var i = 0; i < syote.length; i++ )
		{
		    // jos sana alkaa :-merkillä lisätään sellaisenaan (ilman :-merkkiä)
		    if ( syote.sana.charAt(0) == ':' )
		    {
			tulos.push(syote.sana.substr(1));
		    }
		    else {
			tulos.push("{{käännös|");
			if ( kielikoodi ) tulos.push(kielikoodi); 
			else tulos.push(kielinimi.slice(0,1).toUpperCase() + kielinimi.slice(1));
			tulos.push("|");
			tulos.push(syote.sana);
			if ( syote.suku ) {
			    tulos.push("|suku=");
			    tulos.push(syote.suku);
			}
			if ( syote.latin ) {
			    tulos.push("|lat=");
			    tulos.push(syote.latin);
			}
			tulos.push("}}");
			if ( i < syote.length - 1 )
			    tulos.push(", ");
		    }
		}
		return tulos.join("");
	    }

	    var kieli = window.gadget_kaannos.kieli;
	    var num = window.gadget_kaannos.numero;
	    var sanat = window.gadget_kaannos.sanat;

	    //console.log("Lataus: ok");

	    // tallentaa sivun tekstin pageText-muuttujaan
	    setPage (json); 

	    // etsitään oikea käännöslaatikko
	    var lisays = "*" + kieli + ": " + kasittele_syote(sanat, kielikoodiksi(kieli), kieleksi(kieli)) + "\n";
	    var e = '{{kohta|';
	    var a, l, i = 0;
	    while ( i <= num )
	    {
		a = pageText.indexOf(e, l);
		if ( a == -1 )
		    return;
		l = a + e.length;
		i++;
	    }
	    l = pageText.indexOf('\n', l) + 1;

	    // korvataan kohta subst:kohtalla ja lisätään uusi käännös seuraavalle riville
	    pageText = pageText.substring(0, a) + '{{sub' + 'st:' +  pageText.substring(a + 2, l) + lisays + pageText.substring(l);
	    laheta(pageText, "/* Käännökset */ +" + kieli);
	};




	/************
	 * Alustus. *
	 ************/  
	(function() {

	    // Lisätyt sanat.
	    var luettelo = new Array();

	    // Avatun lisäyslaatikon numero. Laatikot numeroidaan 0:sta alkaen.
	    var numero = -1;


	    function hae_kielikohtainen_lomake(kieli, itsenainen) {
		
		var kieliominaisuudet = Kaannosgadgetti.kieliominaisuudet;

		if ( itsenainen )
		    $btn_tallennus3.show();
		else
		    $btn_tallennus3.hide();

		if ( typeof kieliominaisuudet == "undefined" 
		     || kieliominaisuudet.suku ) {
		    $tietolomake.find("#gk_suvut").show();
		} else {
		    $tietolomake.find("#gk_suvut").hide();
		}

		if ( typeof kieliominaisuudet == "undefined" 
		     || kieliominaisuudet.latin ) {
		    $tietolomake.find("#gk_latin").show();
		} else {
		    $tietolomake.find("#gk_latin").hide();
		}

		return $tietolomake;
	    }

	    /*
	     * Palauttaa lomakkeen tiedot oliona. 
	     */

	    // ei käytössä
	    function lataa_tiedot(tiedot) {
		$("#gk_sana").prop('value', tiedot.sana);
		$("#gk_suku_m").prop('checked', (tiedot.suku.indexOf("m") != -1 ? true : false));
		$("#gk_suku_f").prop('checked', (tiedot.suku.indexOf("f") != -1 ? true : false));
		$("#gk_suku_n").prop('checked', (tiedot.suku.indexOf("n") != -1 ? true : false)) ;   
		$("#gk_latinalaistus").prop('value', tiedot.latin);
	    }


	    window.gadget_kaannos = {};


	    window.gadget_kaannos.nimi_onchange = function(e) {
		var itsenainen = false;
		var $trg = $(e.target).closest(".gk_kaannoslomake");
		var kieli = $("#gk_kieli").prop('value');

		// Jos laatikossa on kielikoodi, korvataan se kielen nimellä, jos tiedossa.
		if ( Kaannosgadgetti.kieliominaisuudet != undefined )
		    $("#gk_kieli").prop('value', kieleksi(kieli));

		$btn_ok_kieli.hide();
		if ( $trg.closest(".gk_editoitava").length > 0 ) {
		    //alert("ylin taso");
		} else if ( $trg.closest(".uusikäännöskohta").lenght > 0 ) {
		    //alert("keskimmäinen taso");
		} else {
		    //alert("alin taso");
		    itsenainen = true;
		}

		$("#gk_luettelo").html("");
		$("#gk_lisaparamt").html(hae_kielikohtainen_lomake(kielikoodiksi(kieli), itsenainen));
		$("#gk_sana").prop('value', '').focus();
	    };


	    
	    window.Kaannosgadgetti.lisaa_kaannos_onclick = function(e) {
		// piilotetaan mahdollinen edellinen avonainen
		piilota(numero);
		var num = 1;
		numero = num;
		$(e.target).replaceWith($alkulomake.detach());
		$("#gk_kieli").focus();
	    };


	    // Käydään läpi Suomi-otsikosta alkaen kaikki h3:t seuraavaan h2:een tai loppuun asti.
	    $("#Suomi").parent().nextUntil("h2", "h3").each(function(index) {
		$(this).data("index", index);
		// Etsitään määritelmät
		var $slotsikko = $(this);
		var $maaritelmat = $slotsikko.nextAll("ol:first");
		var maaritelmat = ;
		if ( $maaritelmat ) {
		    $maaritelmat.children().each(function (index) {
			maaritelmat.push($(this).text());
			console.log("määritelmä " + (index+1) + ": " + maaritelmat);
		    });
		}

		// Etsitään käännösosio.
		// kaikki h4:t seuraavaan h3:een (tai loppuun) asti
		var $h4t = $(this).nextUntil("h3", "h4");
		var $kaannosots = $h4t.children(":contains('Käännökset')").parent();
		if ( $kaannosots.length != 0 ) {

		    /*
		     * Tekee käännöskohtaobjektin.
		     * @param numero    uuden kohdan numero
		     * @param alkumaar  maaritelmän teksti
		     */
		    function tee_lisaa_kaannoskohta(numero, alkumaar) {
			var $div = $("<div style='float: right; font-size: small; '></div>");
			var $btn = $("<input type='button' value='Lisää käännöskohta " + (numero) + "' />");
			$btn.on('click', function () {
			    var $uusi = $("<div class='käännöskohta uusikäännöskohta'><strong>" + (numero) + ".</strong> <input type='text' id='gk_määritelmäteksti' value='" + alkumaar + "' /><table><tbody></tbody></table></div>");
			    $(this).parent().replaceWith($uusi);
			    var $lmk = tee_syottolomake(index);
			    $uusi.find("table>tbody").append($lmk);
			    $lmk.find(".gk_lisaa_kaannos").click();
			    $uusi.append($btn_tallennus2);
			    $uusi.data("kkindex", numero);  // tallennetaan käännöskohdan numero
			});
			$div.append($btn);
			return $div;
		    }



		    var $kohdat = $kaannosots.nextUntil("h4", ".käännöskohta");
		    var ed_num = 0;
		    // Lisätään kohtien väliin tulevat lisäysnapit.
		    $kohdat.each(function (index) {
			var $otsikko = $(this).find(".NavHead>b");
			var data = $otsikko.text().match("^(*)\\.? ?(.*)");
			var num = data, teksti = data;
			console.log("otsikko: " + $otsikko.text());
			if ( parseInt(num) == num ) {
			    while ( ++ed_num < num ) {
				console.log("ed_num: " + ed_num + ", num: " + num);
				var $div = tee_lisaa_kaannoskohta(ed_num, maaritelmat);
				$(this).before($div);
			    }
			    console.log("lopussa ed_num: " + ed_num + ", num: " + num);
			}
			$(this).filter(":not(.käännöskohta_ohjaus)").find("table>tbody").append(tee_syottolomake(index));
		    });
		    // Lisätään viimeisen kohdan jälkeen tulevat lisäysnapit.
		    console.log("Määritlemiä: " + (maaritelmat.length) + ", ed_num: " + ed_num);
		    var $ed = $kohdat.filter(":last");
		    //		    alert($kohdat.text());
		    while ( ++ed_num < maaritelmat.length+1 ) {
			console.log("ed_num: " + ed_num + ", num: " + (maaritelmat.length+1));
			var $div = tee_lisaa_kaannoskohta(ed_num, maaritelmat);
			$ed.after($div);
			$ed = $div;
		    }


		} else {
		    // Jos käännösosiota ei ole, lisätään lisää käännösosio -nappi.

		    var h3index = index;

		    // Etsitään seuraava otsikko ja lisätään sen eteen.
		    var $seuraava = $h4t.children(":contains('Liittyvät sanat'),:contains('Idiomit')").parent();
		    if ( $seuraava.length == 0 ) {
			$seuraava = $slotsikko.nextAll("h2:first, h3:first");
		    }
//		    if ( $seuraava.length == 0 ) {
//			$seuraava = $slotsikko.nextAll("h2:first");
//		    }

		    //			alert("index: " + index + ", ennen otsikkoa: " + $seuraava.text());
		    //			alert($seuraava.text());
		    var $div = $('<div class="gk_lisaa_kaannososio"></div>');
		    var $btn = $("<input type='button' value='Lisää käännösosio' />");
		    $btn.on('click', function (evt) {
			var $kaannososio = $("<div class='gk_editoitava'><h4>Käännökset</h4></div>");
			var $optiot = ;
			for ( i = 0; i < maaritelmat.length; i++ ) {
			    $optiot.push("<option>" + (i+1) + "</option>");
			}
			var $uusi = $("<div class='käännöskohta uusikäännöskohta'><select>" + $optiot + "</select> <input type='text' value='" + maaritelmat + "' /><table><tbody></tbody></table></div>");
			$uusi.children("select").on('change', function (e) {
			    $uusi.children("input").prop('value', maaritelmat);
			});
			$(this).parent().replaceWith($kaannososio);
			$kaannososio.append($uusi);
			var $lmk = tee_syottolomake(index);
			$uusi.find("table>tbody").append($lmk);
			$lmk.find(".gk_lisaa_kaannos").click();
			$btn_tallennus1.data("h3index", h3index);
			$kaannososio.append($btn_tallennus1);
		    });

		    $div.append($btn);

		    // Lisätään lisäysnappi ennen seuraavaa otsikkoa tai sivun loppuun (sivun lopussa on navigointivalikon otsikko)
		    if ( $seuraava.length != 0 ) {
			$seuraava.before($div);
		    } 
		}
	    });

	    // Numeroidaan otsikot. Ensimmäinen h2 saa arvon 1. 
	    $(".mw-headline").each(function (index) { 
		$(this).attr("gk_numero", index);
	    });
	    
	})() // alustus
    }

    if ( wgAction == "view" ) {
	jQuery(document).ready(run);
    }

})(window);