Järjestelmäviesti:Gadget-Kaannosartikkeli.js
Huomautus: Selaimen välimuisti pitää tyhjentää asetusten tallentamisen jälkeen, jotta muutokset tulisivat voimaan.
- Firefox ja Safari: Napsauta Shift-näppäin pohjassa Päivitä, tai paina Ctrl-F5 tai Ctrl-R (⌘-R Macilla)
- Google Chrome: Paina Ctrl-Shift-R (⌘-Shift-R Macilla)
- Internet Explorer ja Edge: Napsauta Ctrl-näppäin pohjassa Päivitä tai paina Ctrl-F5
- Opera: Paina Ctrl-F5.
/**
* Pienoisohjelma artikkelien generoimiseen käännöslaatikon tiedoista.
*
* Ohjelmalla voi aloittaa artikkelin nopeasti täyttämällä artikkelipohja [[Malline:käännös]]
* -mallineella merkityillä tiedoilla.
**/
(function () {
/**
* Palauttaa sopivan artikkelipohjan annetuille parametriarvoille.
*
* Tässä funktiossa voi määrittää käytettävät kielikohtaiset artikkelipohjat eri parametriarvoille
* ja niiden yhdistelmille. Artikkelipohjien tulee olla sellaisia, että ne ottavat para-
* metrit järjestyksessä: 1. kielen nimi (kieliotsikko), 2. sanaluokka (otsikko), 3. kielikoodi,
* 4. viittaavan artikkelin nimi (johon luotava on käännös), 5. selite (käännöslaatikon teksti),
* 6. latinisointi, 7. suku, 8. artikkelin nimi, nimi painomerkeillä tai vokaalimerkeillä. Artikkelipohjassa
* voi jättää tarpeettomat parametrit huomiotta.
*
* TODO: painomerkitty sana (puuttuu käännökset-gadgetista)
*
* @param kielikoodi: kielikoodi, esim. "fr"
* @param sanaluokka: esim. "Substantiivi"
* @param suku: esim. "m."; undefined, jos sukua ei ole
* @param lat: latinisointi. Undefined, jos ei ole.
* @return: käytettävä artikkelipohja, esim. "Malline:artikkelipohja-fr-subs", tai null
**/
function kielikohtainenArtikkelipohja(kielikoodi, sanaluokka, suku, lat) {
if ( sanaluokka === "Adjektiivi" ) {
switch ( kielikoodi ) {
case "en":
case "es":
case "pt":
return "Malline:artikkelipohja-standardi-adj";
}
} else if ( sanaluokka === "Adverbi" ) {
switch ( kielikoodi ) {
case "en":
case "es":
return "Malline:artikkelipohja-standardi-adv";
}
} else if ( sanaluokka === "Substantiivi" ) {
switch ( kielikoodi ) {
case "es":
case "pt":
return "Malline:artikkelipohja-standardi-subs-suku";
}
} else if ( sanaluokka === "Verbi" ) {
switch ( kielikoodi ) {
case "en":
case "es":
return "Malline:artikkelipohja-standardi-verbi";
}
}
return null;
}
/**
* Artikkelipohjat, joita käytetään, jos kielikohtaista ei ole määritetty
* kielikohtainenArtikkelipohja-funktiossa.
**/
var yleisetArtikkelipohjat = {
// sanaluokka, suku?, lat?
'Adjektiivi' : { 0 : { 0 : 'Malline:artikkelipohja-yleinen-adjektiivi',
1 : 'Malline:artikkelipohja-yleinen-adjektiivi-lat' } },
'Adverbi' : { 0 : { 0 : 'Malline:artikkelipohja-yleinen-adverbi',
1 : 'Malline:artikkelipohja-yleinen-adverbi-lat' } },
'Erisnimi' : { 0 : { 0 : 'Malline:artikkelipohja-yleinen-erisnimi',
1 : 'Malline:artikkelipohja-yleinen-erisnimi-lat' } },
'Interjektio' : { 0 : { 0 : 'Malline:artikkelipohja-yleinen-interjektio',
1 : 'Malline:artikkelipohja-yleinen-interjektio-lat' } },
'Numeraali' : { 0 : { 0 : 'Malline:artikkelipohja-yleinen-numeraali',
1 : 'Malline:artikkelipohja-yleinen-numeraali-lat' } },
'Substantiivi' : { 0 : { 0 : 'Malline:artikkelipohja-yleinen-substantiivi',
1 : 'Malline:artikkelipohja-yleinen-substantiivi-lat' },
1 : { 0 : 'Malline:artikkelipohja-yleinen-substantiivi-suku',
1 : 'Malline:artikkelipohja-yleinen-substantiivi-suku-lat' } },
'Verbi' : { 0 : { 0 : 'Malline:artikkelipohja-yleinen-verbi' ,
1 : 'Malline:artikkelipohja-yleinen-verbi-lat' } },
};
function haeArtikkelipohja(kielikoodi, sanaluokka, suku, lat) {
var pohja = kielikohtainenArtikkelipohja(kielikoodi, sanaluokka, suku, lat);
if ( pohja ) {
return pohja;
}
if ( yleisetArtikkelipohjat[sanaluokka] ) {
return yleisetArtikkelipohjat[sanaluokka][suku ? 1 : 0][lat ? 1 : 0];
}
return null;
}
/**
* Muuttaa käännös-mallineen luoman sukutekstin takaisin parametrimuotoon.
**/
function haeSukuparametri(suku) {
return suku.replace(/[\./]/g, "");
}
/**
* Palauttaa urlin johon on perään lisätty parametrit.
**/
function teeLinkki(url, pohja, kieli, sanaluokka, kielikoodi, viittaava_sivu, selite, lat, suku, luotava_sivu) {
var params = [ kieli.substr(0, 1).toUpperCase() + kieli.substr(1),
sanaluokka,
kielikoodi,
viittaava_sivu,
selite,
lat,
suku,
luotava_sivu ];
return url + '&preload=' + pohja + params.map(function (elt) {
return '&preloadparams[]=' + encodeURIComponent(elt);
}).join('');
}
function main() {
var sanaluokka;
// Käydään läpi sanaluokkaotsikot ja käännöslaatikoiden rivit.
$('h3 > .mw-headline, .käännöstaulukko > tbody > tr > td > ul > li').each(function () {
var $this = $(this);
var kieli, selite;
if ( $this.attr('class') === 'mw-headline' ) {
// Luetaan sanaluokka otsikosta.
sanaluokka = $this.text();
} else {
// Luetaan kieli käännösrivin alusta.
kieli = $this.text().match(/^[^:]+/) [0];
if ( kieli && sanaluokka ) {
// Luetaan seliteteksti käännöslaatikosta.
selite = $this.parents(".käännöskohta").find(".NavHead > b").html();
// Poistetaan numero alusta.
selite = selite.replace(/^[0-9]+\. /, "");
// Muutetaan mahdollinen kursivointi tai lihavointi wikimuotoon.
selite = selite.replace(/<\/?i>/g, "''").replace(/<\/?b>/g, "'''");
// Käydään läpi punalinkit, jotka ovat käännösmallineiden sisällä.
$this.find('.käännös a.new').each(function () {
var $kaannosMalline = $(this).closest('.käännös'), // käännös-mallinetta vastaava html-elementti merkitty [class=käännös]
kielikoodi = $kaannosMalline.children('.linkki').attr('lang');
suku = haeSukuparametri($kaannosMalline.find('.käännös-suku').text()),
lat = $kaannosMalline.find('.käännös-lat').text(),
pohja = haeArtikkelipohja(kielikoodi, sanaluokka, suku, lat),
viittaava_sivu = mw.config.get('wgTitle'),
$luolinkki = $("<a></a>"),
url = $(this).attr('href'),
luotava_sivu = $(this).text();
if ( pohja ) {
$(this).attr('href', teeLinkki(url, pohja, kieli, sanaluokka, kielikoodi, viittaava_sivu, selite, lat, suku, luotava_sivu));
$(this).attr('class', 'avustettu-luonti-linkki');
$(this).attr('title', $(this).attr('title').replace(/\(sivua ei ole\)/,
'(luo käännösartikkeli automaattisesti tälle sanalle)'));
}
});
}
}
});
}
if ( mw.config.get("wgAction") === "view" ||
mw.config.get("wgAction") === "submit" ) {
jQuery(document).ready(main);
}
}());