/*
* Lomakkeidenkäsittelyskripti, joka ladataan getScriptillä tarvittaessa.
*/
var yhteinen_lomakkeet = "//fi.wiktionary.orghttps://fi.wiktionary.org/w/index.php?title=Käyttäjä:Hunsvotti/Yhteinen.js";
(function(w){
/*
* Kehys kielilomakkesta irrotettavan määritelmän lisäys -osan ympärille
*/
var maaritelmalomake_its = '\
<fieldset id="gm_its_maaritelma" style="background-color: #ddf; border: 3px solid #aaf; border-radius: 5px; padding: 0.5em; font-size: normal; margin-left: -1.5em;">\n\
<legend>Uusi määritelmä</legend>\n\
<div style="text-align: right; margin-top: -1em; "><a href="#" id="gm_piilotanappi" style="font-size: x-small; margin: 0 0 0 0; "></a></div>\n\
<span style="color: red;">Huom! Tämä toiminnallisuus on kokeellinen, eikä välttämättä toimi oikein. Palautetta voi laittaa <a href="https://fi.wiktionary.orghttps://fi.wiktionary.org/w/index.php?title=Keskustelu_k%C3%A4ytt%C3%A4j%C3%A4st%C3%A4:Hunsvotti/Gadget-m%C3%A4%C3%A4ritelm%C3%A4t.js">keskustelusivulle</a>.</span>\n\
<div id="gm_inline_maaritelma"/>\n\
<p style="clear: both;">\n\
<input type="button" id="gm_generointi" value="Generoi wikiteksti ←"/>\n\
</p>\n\
</fieldset>\n\
';
/*
* Kehys kielilomakkesta irrotettavan sanaluokan lisäys -osan ympärille
*/
var sanalklomake_its = '\
<fieldset id="gm_its_sanalk" style="background-color: #ddf; border: 3px solid #aaf; border-radius: 5px; padding: 0.5em; font-size: normal; ">\n\
<div style="text-align: right; margin-top: -1em; "><a href="#" id="gm_piilotanappi" style="font-size: x-small;"></a></div>\n\
<span style="color: red;">Huom! Tämä toiminnallisuus on kokeellinen, eikä välttämättä toimi oikein. Palautetta voi laittaa <a href="https://fi.wiktionary.orghttps://fi.wiktionary.org/w/index.php?title=Keskustelu_k%C3%A4ytt%C3%A4j%C3%A4st%C3%A4:Hunsvotti/Gadget-m%C3%A4%C3%A4ritelm%C3%A4t.js">keskustelusivulle</a>.</span>\n\
<legend>Uusi sanaluokkaotsikko</legend>\n\
<div id="gm_inline_sanalk"><!-- sanalklomake tänne --></div>\n\
<p style="clear: both;">\n\
<input type="button" id="gm_generointi" value="Generoi wikiteksti ←"/>\n\
</p>\n\
</fieldset>\n\
';
function main($) {
/*
* 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>';
/*
* 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;
}
/*
* Purkaa palvelimen palauttamat tiedot. Muutettu HotCatin koodista.
* json: apin palauttama wikitekstin sisältävä json-olio
* return (string): sivun wikiteksti
*/
function setPage (json) {
var pageText = null;
//alertJSON.stringify(json, undefined, 2));
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;
}
/*
* Callback-funktio, jota kutsutaan kun sivun wikiteksti on ladattu.
*/
function wikiteksti_ladattu(json) {
var pageText = setPage(json);
var a = data.kasittele_teksti(pageText, function(teksti, selite) {
alert("SELITE: " + selite + "\n\n" + teksti);
//laheta(teksti, selite);
});
}
/*
* Lähettää apille kyselyn. Muutettu HotCatin koodista.
*/
function getPage () {
// apin latauskripti joka kutsuu callbackia palautetulla arvolla
var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '\
/api.php?format=json&callback=gadget_maaritelma.wikiteksti_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);
// callback näkyväksi api-skripitille
window.gadget_maaritelma.wikiteksti_ladattu = wikiteksti_ladattu;
}
/************
* Alustus. *
************/
(function() {
// Lisätyt tyylit ja käyttöyhteydet
var yhteys = new Array();
window.gadget_maaritelma = {};
// Avatun lisäyslaatikon numero. Laatikot numeroidaan 0:sta alkaen.
window.gadget_maaritelma.numero = -1;
window.gadget_maaritelma.tyyppi = -1;
var avattu = null;
/*
* Tallenna uusi määritelmä.
*/
function tallennusnappi_m_onclick(numero) {
// kaikille lisäyksille yhteiset tiedot, jotka välitetään callback-funktiolle
data.lue_yhteiset_tiedot(numero);
var $ol = $("#gm_its_maaritelma").closest("ol");
// Haetaan kieli.
window.gadget_maaritelma.kieli =
$ol.prevAll("h2").children(".mw-headline").first().text();
// Haetaan sanaluokka edellisestä h3-otsikosta (muutoskommenttiin).
var $sanalk_h3 = $ol.prevAll("h3").children(".mw-headline").first();
window.gadget_maaritelma.sanalk = $sanalk_h3.text();
window.gadget_maaritelma.sanalk_ankkuri = $sanalk_h3.prop("id");
////console.log("sanalk: " + sanalk_h3.text());
// lisättävän määritelmän numero
window.gadget_maaritelma.uuden_num = $ol.children("li").length + 1;
////console.log("uuden numero: " + window.gadget_maaritelma.uuden_num);
window.gadget_maaritelma.lisattava = "määritelmä";
if ( !data.on_puutteita() ) {
// lisätään palautuslomake
$("#mw-content-text").prepend(tallennuslomake);
getPage();
}
}
/*
* Tallenna uusi sanaluokkamääritelmä.
*/
function tallennusnappi_l_onclick(numero) {
////console.log("numero: " + numero);
// kaikille lisäyksille yhteiset tiedot, jotka välitetään callback-funktiolle
data.lue_yhteiset_tiedot(numero);
// Haetaan kieli edellisestä h2 otsikosta
var kieli = window.gadget_maaritelma.kieli =
$("#gm_its_sanalk").parent().prevAll("h2").children(".mw-headline").first().text();
var sanalk = window.gadget_maaritelma.sanalk = $("#gm_sanalkotsikko").prop('value');
window.gadget_maaritelma.uuden_num = 1;
window.gadget_maaritelma.lisattava = "sanaluokka";
if ( !data.on_puutteita() ) {
// tallennetaan sanaluokka cookiehen
jQuery.cookie( 'gm_edellinen_sanalk', sanalk, { expires: 1, path: '/' } );
// lisätään palautuslomake
$("#mw-content-text").prepend(tallennuslomake);
getPage();
}
}
/*
* Tallenna uusi kielimääritelmä.
*/
function tallennusnappi_onclick(numero) {
// kaikille lisäyksille yhteiset tiedot, jotka välitetään callback-funktiolle
data.lue_yhteiset_tiedot(numero);
var kieli = window.gadget_maaritelma.kieli = $("#gm_kieliotsikko").prop('value');
var sanalk = window.gadget_maaritelma.sanalk = $("#gm_sanalkotsikko").prop('value');
window.gadget_maaritelma.uuden_num = 1;
window.gadget_maaritelma.lisattava = "kieli";
if ( !data.on_puutteita() ) {
// tallennetaan sanaluokka cookiehen
jQuery.cookie( 'gm_edellinen_kieli', kieli, { expires: 1, path: '/' } );
jQuery.cookie( 'gm_edellinen_sanalk', sanalk, { expires: 1, path: '/' } );
// lisätään palautuslomake
$("#mw-content-text").prepend(tallennuslomake);
getPage();
}
}
function piilota() {
if ( window.gadget_maaritelma.numero != -1 ) {
////console.log("avattu: " + $(avattu).html());
if ( window.gadget_maaritelma.tyyppi == 1 ) {
$("#gm_its_maaritelma").replaceWith(avattu);
} else if ( window.gadget_maaritelma.tyyppi == 2 ) {
$("#gm_sanalklomake" + gadget_maaritelma.numero).html("");
} else if ( window.gadget_maaritelma.tyyppi == 3 ) {
$("#gm_kielilomake" + gadget_maaritelma.numero).html("");
}
window.gadget_maaritelma.avattu = null;
window.gadget_maaritelma.numero = -1;
window.gadget_maaritelma.tyyppi = -1;
}
return false;
}
function avaa_maaritelma_onclick(num) {
// piilotetaan mahdollinen edellinen avonainen
piilota();
window.gadget_maaritelma.numero = num;
window.gadget_maaritelma.tyyppi = 1;
avattu = $("#gm_maaritelmalomake" + num).children("*");
$.getScript(yhteinen_lomakkeet).done(function () {
$kielilomake = data.tee_kielilomake(true, num);
var $lomake = $(maaritelmalomake_its);
$lomake.find("#gm_piilotanappi").on('click', piilota);
$lomake.find("#gm_inline_maaritelma").replaceWith($kielilomake.find("#gm_inline_maaritelma"));
$lomake.find("#gm_generointi").on('click', function() { tallennusnappi_m_onclick(num); });
// vaihdetaan nuolen suunta
$lomake.find("#gm_generointi").attr('value', "Generoi wikiteksti →");
$("#gm_maaritelmalomake" + num).html($lomake);
$("#gm_maaritelma").focus();
});
}
/*
* Avaa lisäyslomakkeen.
*/
function avaa_sanalk_onclick(num) {
// piilotetaan mahdollinen edellinen avonainen
piilota();
window.gadget_maaritelma.numero = num;
window.gadget_maaritelma.tyyppi = 2;
avattu = $("#gm_sanalklomake" + num).children("*");
$.getScript(yhteinen_lomakkeet).done(function () {
var $kielilomake = data.tee_kielilomake(true, num);
var $lomake = $(sanalklomake_its);
$lomake.find("#gm_piilotanappi").on('click', piilota);
$lomake.find("#gm_inline_sanalk").replaceWith($kielilomake.find("#gm_inline_sanalk"));
$lomake.find("#gm_generointi").on('click', function() { tallennusnappi_l_onclick(num); });
// vaihdetaan nuolen suunta
$lomake.find("#gm_generointi").attr('value', "Generoi wikiteksti →");
$("#gm_sanalklomake" + num).html($lomake);
console.log("ed. kieli: " + jQuery.cookie('gm_edellinen_kieli') + ", ed. sanalk: " + jQuery.cookie('gm_edellinen_sanalk'));
$("#gm_sanalkluettelo").val(jQuery.cookie('gm_edellinen_sanalk'));
$("#gm_sanalkotsikko").val(jQuery.cookie('gm_edellinen_sanalk'));
$("#gm_sanalkluettelo").focus();
});
}
function avaa_kieli_onclick(num) {
// piilotetaan mahdollinen edellinen avonainen
piilota();
window.gadget_maaritelma.numero = num;
window.gadget_maaritelma.tyyppi = 3;
avattu = $("#gm_kielilomake" + num);
$.getScript(yhteinen_lomakkeet).done(function () {
var $kielilomake = data.tee_kielilomake(true, num);
// lisätään piilotusnappi
$kielilomake.prepend('<div style="text-align: right; margin-top: -1em; "><a href="#" id="gm_piilotanappi" style="font-size: x-small; "></a></div>\n');
$kielilomake.find("#gm_piilotanappi").on('click', piilota);
// vaihdetaan nuolen suunta
$kielilomake.find("#gm_generointi").attr('value', "Generoi wikiteksti →");
$kielilomake.find("#gm_generointi").on('click', function() { tallennusnappi_onclick(num); });
$("#gm_kielilomake" + num).html($kielilomake);
console.log("ed. kieli: " + jQuery.cookie('gm_edellinen_kieli') + ", ed. sanalk: " + jQuery.cookie('gm_edellinen_sanalk'));
$("#gm_kieliluettelo").val(jQuery.cookie('gm_edellinen_kieli'));
$("#gm_kieliotsikko").val(jQuery.cookie('gm_edellinen_kieli'));
$("#gm_sanalkluettelo").val(jQuery.cookie('gm_edellinen_sanalk'));
$("#gm_sanalkotsikko").val(jQuery.cookie('gm_edellinen_sanalk'));
$("#gm_kieliluettelo").focus();
});
}
// console.log("hello: "+ gadget_maaritelma.avaa_kieli_onclick);
function tee_nappi(teksti, title, id, func, flt) {
var i = document.createElement("input");
i.type = "button";
i.title = title;
i.setAttribute("style", "font-size: x-small; border: 3px solid #aaf; border-radius: 5px;");
i.value = teksti;
i.onclick = func;
var d = document.createElement("span");
d.appendChild(i);
d.setAttribute("class", "gm_nappikehys");
d.setAttribute("style", "text-align: right; clear: both; vertical-align: middle; margin-left: 1px; margin-right: 1px; float: " + flt + ";");
return d;
}
// lisätään kaikkien ol-listojen, jotka seuraavat h3 ja p elementtejä, perään
$("h3").next("p").next( "ol" ).each(function( index ) {
//////console.log( index + ": " + $(this).text() );
var n = tee_nappi("+ määritelmä...", "Lisää uusi määritelmä.",
"gm_maaritelmalomake" + index, function () { avaa_maaritelma_onclick(index); }, "none");
$(this).append('<div id="gm_maaritelmalomake' + index + '"/>');
var d = $("#gm_maaritelmalomake" + index);
$(n).children(".gm_nappikehys").css("margin-left", "0");
$(n).children(".gm_nappikehys").css("margin-top", "0");
$(n).css("margin-left", "-1.5em");
$(n).css("margin-top", "0");
$(d).append(n);
});
// Lisätään kaikkien h2-otsikoiden, paitsi Viitteet-otsikon, perään. (Sisällysluettelon otsikko yms.??
// ei sisällä span.wm-headline-elementtiä)
$( "h2:has(span.mw-headline)" ).not("#Viitteet").each(function( index ) {
//////console.log( index + ": " + $(this).text() );
$(this).children(".mw-editsection").prepend(
tee_nappi("+ sanaluokka...", "Lisää määritelmä sanalle uuteen sanaluokkaan.",
"gm_sanalklomake" + index, function () { avaa_sanalk_onclick(index); }, "none"));
$(this).after('<div id="gm_sanalklomake' + index + '"/>');
});
// pääotsikon perään
$( "h1#firstHeading" ).each(function( index ) {
//////console.log( index + ": " + $(this).text() );
$(this).append(tee_nappi("+ kieli...", "Lisää sanalle määritelmä uudella kielellä",
"gm_kielilomake" + index, function () { avaa_kieli_onclick(index); }, "right"));
$(this).after('<div id="gm_kielilomake' + index + '"/>');
});
// $("body").prepend("<button onclick='gadget_maaritelma.testaa_onclick();'>Testaa</button>");
})(); // alustus
} // main
if ( wgAction == "view" ) {
// Ladattujen getScript-skriptien cachetus.
jQuery.ajaxSetup({
cache: true
});
jQuery(document).ready(main);
}
})(window);