// perustuu https://sv.wiktionary.orghttps://dictious.com/fi/MediaWiki:Gadget-nytt_uppslag.js
if ( (mw.config.get("wgAction") == "edit" ||
mw.config.get("wgAction") == "submit") &&
mw.config.get("wgNamespaceNumber") === 0) {
jQuery(document).ready(function($) {
/* Valintalistassa näkyvät sanaluokat. */
var h3s = {
adj: "adjektiivi",
adv: "adverbi",
subs: "substantiivi",
verbi: "verbi",
eris: "erisnimi",
lyh: "lyhenne",
artikkeli: "artikkeli",
fraasi: "fraasi",
interjektio: "interjektio",
konjunktio: "konjunktio",
numeraali: "numeraali",
prefiksi: "prefiksi",
prepositio: "prepositio",
pronomini: "pronomini",
suffiksi: "suffiksi"
};
/* Valintalistassa näkyvät kielet. */
var languages = {
fi: "suomi",
en: "englanti",
es: "espanja",
it: "italia",
pt: "portugali",
pl: "puola",
sv: "ruotsi",
fr: "ranska",
de: "saksa",
uk: "ukraina",
ru: "venäjä",
et: "viro"
};
function ucFirst(str) {
return str.charAt(0).toUpperCase() + str.substr(1);
}
// Kielikohtaiset mallineet, sisältää joka kielelle oman osan joka sisältää sanaluokille omat osat.
// %k korvataan kielikoodilla ja %t artikkelin nimellä
var sr_mallineet = {
fi: { adj: "fi-adj", adv: "fi-adv", subs: "fi-subs", verbi: "fi-verbi" },
en: { adj: "en-adj", adv: "en-adv", subs: "en-subs", verbi: "en-verbi" },
es: { verbi: "es-verbi" },
sv: { verbi: "sv-verbi" },
de: { verbi: "de-verbi" },
fr: { verbi: "fr-verbi" },
it: { verbi: "it-verbi" },
pt: { subs: "pt-subs", verbi: "pt-verbi" },
};
// oletusarvot, kun kielelle ei löydy omaa sanaluokkakohtaista mallinetta. Huom. kielikoodi lisätään perään
var sr_o_mallineet = { subs: "substantiivi|%k",
adj: "adjektiivi|%k",
adv: "adverbi|%k",
eris: "erisnimi|%k",
verbi: "verbi|%k",
lyh: "lyhenne|%k",
aakkonen: "aakkonen|k=%k",
fraasi: "fraasi|%k",
interjektio: "interjektio|%k",
kirjoitusmerkki: "kirjoitusmerkki|%k",
konjunktio: "konjunktio|%k",
partikkeli: "partikkeli|%k",
prepositio: "prepositio|%k",
prefiksi: "prefiksi|%k",
pronomini: "pronomini|%k",
suffiksi: "suffiksi|%k",
supistuma: "supistuma|%k" };
function malline_kielelle(kk, sl, title) {
// Tarkistetaan ettei syötteissä ole kiellettyjä merkkejä.
if ( title.match(//) !== null ) {
title = "";
}
if ( sr_mallineet !== undefined && sr_mallineet !== undefined ) {
return "{{" + sr_mallineet.replace("%t", title) + "}}";
}
if ( sr_o_mallineet ) {
return "{{" + sr_o_mallineet.replace("%k", kk).replace("%t", title) + "}}";
}
return "'''" + title + "'''";
}
/**
* Poistaa määritelmätekstistä linkkimerkit.
**/
function poistaLinkit(text) {
return text.replace(/\|]+\|(]+)\]\]/g, "$1") // Esim. "]" -> "katin"
.replace(/\{2}/g, ""); // Yksinkertaiset likit, esim. "]" -> "koira"
}
/**
* Palauttaa ikkunan leveyden selainriippumattomasti.
**/
function getScreenWidth() {
var width = 750; // viewport width
// för alla vanliga webbläsare
if (typeof window.innerWidth !== 'undefined') {
width = window.innerWidth;
// IE6
} else if (typeof document.documentElement !== 'undefined'
&& typeof document.documentElement.clientWidth !== 'undefined'
&& document.documentElement.clientWidth !== 0) {
width = document.documentElement.clientWidth;
} // annars uråldrig, ännu äldre IE - vi struntar i dem
return width;
}
/**
* Luo monivalintahimmelin, joka näyttää osan annetuista arvoista linkkeinä, osan valintalistassa.
* @param o: olio, jossa
* all: kaikki vaihtoehdot (dict), esim. { "adj": "adjektiivi", "subs": "substantiivi" }
* show: linkkeinä näytettävät vaihtoehdot; lista edellisen avaimia, esim.
* def: tekstilaatikossa näkyvä arvo ennen kuin mitään on valittu
* title: listassa näkyvä teksti
* id: luotavan tekstilaatikon id-attribuutti
* func: funktio, jota kutsutaan kun jokin valitaan
**/
function multipleChoice(o) {
var i,
$input, // Teksti-inputti.
links = ,
$select, // Listainputti.
options = ,
show_flip = {},
all = o.all,
show = o.show, // Linkkeinä näytettävät vaihtoehdot.
// Nykyinen valinta. Joko annettu oletusarvo tai ensimmäinen linkeistä.
valittu = (o.def ? o.def : all]);
function onclick () {
o.func(this.value);
return false;
}
for ( i = 0; i < show.length; i++ ) {
links.push($('<a href=""></a>')
.html(all])
.val(show)
.on("click", onclick));
links.push(" • ");
show_flip ] = true;
}
// Select-laatikossa näkyvä otsikkoteksti.
options.push($('<option value=""></option>')
.html(o.title));
// Muut vaihtoehdot.
for ( i in all ) {
if (!show_flip) { // lägg inte till den dubbelt;
options.push($('<option></option>')
.val(i)
.html(all));
}
}
$select = $('<select style="display:inline; size: small;"/>')
.html(options)
.on("change", function () {
o.func(this.value);
});
// Select-laatikossa näkyvä otsikkoteksti.
$input = $('<input type="text" tabindex="1" />')
.attr("id", o.id)
.val(valittu);
return $("<span></span>").append($input).append("<br/>").append(links).append($select);
}
/**
* Palauttaa avaimen dictistä 'all', joka on tai vastaa arvoa 'chosen'.
* @param all: Dict sanaluokista tai kielistä, esim. { "en": "englanti", "sv": "ruotsi" }
* @param chosen: valittu, esim. "englanti"
* @reutrn vastaava avain, esim. "en"
**/
function getCode(all, chosen) {
var code;
chosen = chosen.toLowerCase();
if ( all ) {
return chosen;
}
for ( code in all ) {
if (all == chosen) {
return code;
}
}
return null;
}
/**
* Generoi tekstin.
**/
window.nytt_uppslag.generate = function(e) {
var $nu_lang = $("#nu_lang"),
$nu_h3 = $("#nu_h3"),
$nu_definition = $("#nu_definition"),
$wpTextbox1 = $("#wpTextbox1"),
$wpSummary = $("#wpSummary"),
$wpSave = $("#wpSave"),
$nu_saveTooltip = $("#nu_saveTooltip"),
kieli = $nu_lang.val(), // kielen nimi tai kielikoodi
lang = null, // kielen tunnus
h3 = $nu_h3.val(), // sanaluokan nimi
h3code, // sanaluokan tunnus
definition = $nu_definition.val(),
output = ;
definition = definition.trim();
kieli = kieli.trim();
h3 = h3.trim();
if ( !kieli ) {
alert("Et ole antanut kieltä. Valitse listasta tai kirjoita tekstilaatikkoon.");
$nu_lang.focus();
return false;
}
if ( !h3 ) {
alert("Et ole antanut sanaluokkaa/H3-otsikkoa. Valitse listasta tai kirjoita tekstilaatikkoon.");
$nu_h3.focus();
return false;
}
if (!definition) {
alert("Sinun täytyy kirjoittaa sananselitys.");
$nu_definition.focus();
return false;
}
lang = getCode(languages, kieli);
if ( !lang ) { lang = "{{su" + "bst:kielikoodi|" + kieli + "}}"; }
h3code = getCode(h3s, h3);
// Tallennetaan kieli ja sanaluokka evästeeseen.
jQuery.cookie( 'edellinen_nu_lang', kieli, { expires: 1, path: '/' } );
jQuery.cookie( 'edellinen_nu_h3', h3, { expires: 1, path: '/' } );
function print(str) {
output.push(str);
}
print("==" + ucFirst(kieli) + "==\n");
print("===" + ucFirst(h3) + "===\n");
print(malline_kielelle(lang, h3code, mw.config.get("wgTitle")) + "\n");
print("\n");
print("# " + definition + "\n");
print("");
if ( $("#cb_aant").is(":checked") ) {
print("\n");
print("====Ääntäminen====\n");
print("\n");
}
if ( $("#cb_taiv").is(":checked") ) {
print("\n");
print("====Taivutus====\n");
print("\n");
}
if ( $("#cb_ety").is(":checked") ) {
print("\n");
print("====Etymologia====\n");
print("\n");
}
if ( lang == "fi" ) {
print("\n");
print("====Käännökset====\n");
print("{{subst" + ":kohta|1|" + poistaLinkit(definition) + "|\n");
print("\n");
print("|loppu}}\n");
print("\n");
}
if ( $("#cb_liit").is(":checked") ) {
print("\n");
print("====Liittyvät sanat====\n");
print("\n");
}
if ( $("#cb_laht").is(":checked") ) {
print("\n");
print("====Lähteet====\n");
print("\n");
}
$nu_definition.val("");
// Käytetään Artikkeliyhdistäjä-gadgettia järjestämään osiot, jos se on päällä.
if ( window.articleMerger && window.articleMerger.mergeToArticle ) {
window.articleMerger.mergeToArticle(output.join(""), "3+");
} else {
$wpTextbox1.val($wpTextbox1.val() + ($wpTextbox1.val() ? "\n\n" : "") + output.join(""));
}
// Muutetaan tekstilaatikon rivimäärää TODO tarviiko??
$wpTextbox1.attr('rows', $wpTextbox1.val().split("\n", 17).length + 8); // standard: 25
//$wpSummary.val(($wpSummary.val() ? "; " : "") + "uusi artikkeli ("+ kieli +")");
// Tooltippi näkyväksi.
$nu_saveTooltip.css("display", "block");
$wpSave.focus();
return false;
};
/**
* Alustus.
**/
(function() {
var i,
$container = $("#nytt_uppslag"),
$lang_input = $("#nu_language_input"),
$h3_input = $("#nu_h3_input"),
$tips = $("#nu_tips"),
$help_link = $("#nu_help_link"),
$mo_input = $("#muut_otsikot_input"),
$wpSave = $("#wpSave"),
$nu_saveTooltip = $("#nu_saveTooltip"),
$nu_submit,
$wpSave,
showLangs,
showH3s;
console.log("Gadget-nytt_uppslag.js");
if ( $container.length === 0 ) {
return;
}
// Luetaan mahdolliset käyttäjän asettamat kielet tai luetaan lomakkeesta.
if ( typeof window.nyttUppslagKielet === "undefined" ) {
showLangs = $lang_input.html();
} else {
showLangs = window.nyttUppslagKielet;
}
// Luetaan mahdolliset käyttäjän asettamat sanaluokat tai luetaan lomakkeesta.
if ( typeof window.nyttUppslagSanaluokat === "undefined" ) {
showH3s = $h3_input.html();
} else {
showH3s = window.nyttUppslagSanaluokat;
}
showLangs = showLangs.split(",");
showH3s = showH3s.split(",");
var $mc_lang = multipleChoice({
show: showLangs,
all: languages,
func: function(lang) {
console.log("lang: " + lang);
if (lang) $("#nu_lang").val(languages);
},
id: "nu_lang",
def: jQuery.cookie('edellinen_nu_lang'),
title: "Lisää kieliä..."
});
var $mc_h3 = multipleChoice({
show: showH3s,
all: h3s,
func: function(h3) {
console.log("h3: " + h3);
if (h3) $("#nu_h3").val(h3s);
},
id: "nu_h3",
def: jQuery.cookie('edellinen_nu_h3'),
title: "Lisää H3-otsikoita..."
});
// sätt en <form> runt alltihop
$container.wrap("<form></form>");
// tips
if ( $tips.length > 0 ) {
var $new_tips = $tips.clone();
$new_tips.attr("id", "nu_tips_new");
$new_tips.attr("class", "");
$("#nu_tips_position").append($new_tips);
$tips.remove();
}
// Määritelmäkenttä.
$nu_definition = $('<input type="text" id="nu_definition" tabindex="1"/>');
$("#nu_definition_input").replaceWith($nu_definition);
// Luodaan generointinappi.
$nu_submit = $('<button tabindex="1"></button>');
$nu_submit.html($("#nu_submit_button").html());
$nu_submit.on("click", window.nytt_uppslag.generate);
$("#nu_submit_button").replaceWith($nu_submit);
$help_link.children(":first").attr("target", "_blank"); // hjälplänken öppnas i nytt fönster
$lang_input.replaceWith($mc_lang);
$h3_input.replaceWith($mc_h3);
$mo_input.html('<label><input type="checkbox" id="cb_aant" tabindex="1"/> Ääntäminen </label>' +
'<label><input type="checkbox" id="cb_taiv" tabindex="1"/> Taivutus </label>' +
'<label><input type="checkbox" id="cb_ety" tabindex="1"/> Etymologia </label>' +
'<label><input type="checkbox" id="cb_liit" tabindex="1" /> Liittyvät sanat </label>' +
'<label><input type="checkbox" id="cb_laht" tabindex="1"/> Lähteet </label>');
$container.addClass("enabled");
if ( getScreenWidth() < 750 ) {
$container.addClass("smallscreen");
}
$nu_saveTooltip.on("mouseout", function() { $(this).fadeOut(500); });
$wpSave.before($nu_saveTooltip);
}());
});
}