// 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);