Järjestelmäviesti:Gadget-Interwikihaku.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)
- Edge: Napsauta Ctrl-näppäin pohjassa Päivitä tai paina Ctrl-F5
(function(w){
var USERAGENT = 'Iw-injektio/0.5';
var ohjeurl = "https://fi.wiktionary.org/wiki/Ohje:Gadget-Interwikihaku";
var fiwiki = {
nimi : "Wikipedia (fi)",
apiurl : "https://fi.wikipedia.org/w/api.php",
sivu_url : "https://fi.wikipedia.org/wiki/",
tekstit : [ "{{Wikipedia|%t}}", "[[:w:%t]]" ],
};
/* Wikit, joista sivua etsitään. Sivua etsitään wikisanakirjan otsikolla,
joten käytännössä mahdollisia ovat kai vain Wikipedia ja Wikisanakirja. */
var wikit = {
"Wikipedia" : {
nimi : "Wikipedia (%k)",
apiurl : "https://%k.wikipedia.org/w/api.php",
sivu_url : "https://%k.wikipedia.org/wiki/",
tekstit : [ "{{Wikipedia|%k:%t}}", "[[%k:w:%t]]", "*{{muualla-wp|%k|%t}}" ],
},
"Wiktionary" : {
nimi : "Wiktionary (%k)",
apiurl : "https://%k.wiktionary.org/w/api.php",
sivu_url : "https://%k.wiktionary.org/wiki/",
tekstit : [ "[[:%k:%t]]" ],
},
};
var oletusasetukset = {
/* Valmiiksi näytettävät kielet. */
"iwi.naytetyt" : { "Wikipedia" : [ "fi" ],
"Wiktionary" : [ "en",
"es",
"fr",
"sv",
"de",
"ru",
"et" ]
},
/* Valmiiksi ruksitut kielet. */
"iwi.valitut" : { "Wikipedia" : [],
"Wiktionary" : []
}
};
/**
* Asettaa löytyneen otsikon.
* @param title: sivun otsikko
* @param wiki: wikitiedot-listan alkio
* @param tulos: true, jos sivu löytyi
* false, jos ei
* virheviesti, jos tapahtui virhe
*/
function aseta(title, wiki, tulos) {
var i;
var tekstit;
var on_click_func = function() {
$('#wpTextbox1').textSelection('replaceSelection', $(this).attr("title"));
return false;
};
if ( tulos === true ) {
wiki.$kentta.html("" + wiki.kieli + ': <a target="_BLANK" href="'
+ hae_sivu_url(wiki) + title + '">'
+ title + '</a>');
if ( mw.config.get("wgAction") == "edit" ) {
tekstit = hae_tekstit(wiki);
//console.log("tekstejä: " + tekstit.length);
for ( i in tekstit ) {
var teksti = tekstit[i].replace("%t", title);
//console.log("teksti: " + teksti);
var $lisaysnappi = $('<a href="#" title="'
+ teksti + '">↓</a>');
$lisaysnappi.click(on_click_func);
wiki.$kentta.append($lisaysnappi);
}
if ( wiki.tyyppi == "Wiktionary" ) {
wiki.$kentta.data("kielilinkki", "[["
+ wiki.kieli + ":" + title + "]]");
lisaa_kielilinkit([wiki.$kentta.data("kielilinkki")]);
}
}
} else if ( tulos === false ) {
wiki.$kentta.html("" + wiki.kieli + ': sivua ei ole');
} else {
wiki.$kentta.html("" + wiki.kieli + ': virhe: ' + tulos + '');
}
}
/**
* Testaa onko sivu 'title' olemassa wikissä 'wiki'.
* Kutsuu antaa tuloksen funktiolle aseta.
**/
function on_olemassa(title, wiki) {
//console.log("on olemassa, wiki: " + wiki.kieli);
var q = {
format: 'json',
action: 'query',
titles: title,
};
var url = hae_apiurl(wiki) + "?" + $.param(q, true) + "&callback=?";
//console.log("url: " +url);
$.ajax({
url: url,
dataType: 'json',
timeout: 3000 // 3 sekuntia
})
.done( function(data) {
var e;
if ( data && data.query && data.query.pages ) {
if ( data.query.pages[-1] ) {
aseta(title, wiki, false);
} else {
for ( e in data.query.pages ) {
title = data.query.pages[e].title;
break;
}
aseta(title, wiki, true);
}
} else {
aseta(title, wiki, "?");
}
})
.fail(function (jqXHR, status, error) {
aseta(title, wiki, status);
})
.always(function () {
//console.log("haku valmis");
});
}
function hae_nimi(w) {
if ( !w.nimi ) {
w.nimi = w.malli.nimi.replace("%k", w.kieli);
}
return w.nimi;
}
function hae_apiurl(w) {
return w.malli.apiurl.replace("%k", w.kieli);
}
function hae_sivu_url(w) {
return w.malli.sivu_url.replace("%k", w.kieli);
}
function hae_tekstit(w) {
var i;
var a = [];
for ( i in w.malli.tekstit ) {
a.push(w.malli.tekstit[i].replace("%k", w.kieli));
}
return a;
}
function hae_asetus(nimi) {
var arvo = JSON.parse($.cookie(nimi));
if ( arvo === null ) {
arvo = oletusasetukset[nimi];
$.cookie(nimi, JSON.stringify(arvo));
}
return arvo;
}
function run($) {
var $ydiv = null;
var $nayta_btn = null;
var $aukimerkki = null;
var $div = null;
var $linkkialue = null;
var $ohje_btn = null;
var title;
$.ajaxSetup({ headers: { 'Api-User-Agent': USERAGENT }});
/**
* Tekee linkki-lomakkeen.
* @param title: Sivun nimi, jota etsitään.
* @return: jquery-muotoisen li-elementtiluettelon linkeistä
*/
function tee_linkkialue(title) {
var k, i;
var naytetyt, valitut;
// Näytettävät kielet
naytetyt = hae_asetus("iwi.naytetyt");
// Valitut kielet
valitut = hae_asetus("iwi.valitut");
var on_dblclick_func = function() {
var data = $(this).data("tiedot");
$(this).text("" + data.kieli + ": haetaan");
on_olemassa(title, data);
return false;
};
var ryhma = [];
for ( k in naytetyt ) {
var kieliversiot = [];
var $li = $('<li class="iwi-ryhma" style="'
+ 'margin: 0.2em; '
+ 'line-height: 2.2em; '
+ 'display: inline; '
+ 'border: 1px solid lightblue; '
+ 'padding: 5px; '
+ 'border-radius: 5px; '
+ '">' + k + ': </li>');
for ( i in naytetyt[k] ) {
var instanssi = {};
var kieli = naytetyt[k][i];
if ( k == "Wikipedia" && kieli == "fi" ) {
instanssi.malli = fiwiki;
} else {
instanssi.malli = wikit[k];
}
instanssi.tyyppi = k;
instanssi.kieli = kieli;
var $label = $('<label style="margin: 0.5em; "></label>');
var $ch = $('<input type="checkbox" id="iwi-'
+ k + "-" + kieli + '" />');
if ( valitut[k] && valitut[k].indexOf(kieli) > -1 ) {
$ch.attr("checked", true);
}
$label.html([ $ch, kieli ]);
$label.data('tiedot', instanssi);
$label.on('dblclick', on_dblclick_func);
$label.attr('title', "Ruksita ja paina Hae-nappia tai tuplaklikkaa hakeaksesi suoraan.");
instanssi.$kentta = $label;
$li.append($label);
}
var $muuta = $('<a '
+ 'style="font-size: 0.8em; margin-left: 0.5em;" '
+ 'href="#" '
+ 'title="Valitse näytettävät kieliversiot"'
+ '>[±]</a>');
$muuta.data("iwi.ryhmä", k);
try {
$muuta.data("iwi.kielet", naytetyt[k].join(" "));
} catch ( e ) {
$muuta.data("iwi.kielet" ,"");
}
$muuta.click(function (e) {
var ryhma = $(this).data("iwi.ryhmä");
var kielet = $(this).data("iwi.kielet");
do {
var halutut = window.prompt(
'Luettele halutut kieliversiot välilyönnillä ' +
'eroteltuina (esim. "en fr et"):', kielet);
} while ( halutut != null
&& halutut.search(/[^a-z- ]/) != -1 );
if ( halutut ) {
naytetyt[ryhma] = halutut.split(" ");
$.cookie("iwi.naytetyt", JSON.stringify(naytetyt));
$linkkialue.children("li.iwi-ryhma").remove();
$linkkialue.prepend(tee_linkkialue(title));
}
return false;
});
$li.append($muuta);
ryhma.push($li);
}
return ryhma;
}
/**
* Rakentaa interwikilinkit-napista avautuvan lomakkeen.
* @param title: Etsittävän sivun nimi, joka liitetään painikkeisiin.
*/
function tee_lomake(title) {
// Linkkialue
$linkkialue = $('<ul style=""></ul>');
$linkkialue.html(tee_linkkialue(title));
var $hae_btn = $('<input type="button" value="Hae" '
+ 'title="Hae artikkelia '
+ title
+ ' valituista wikeistä" />');
$hae_btn.click(function (e) {
var h = {};
for ( w in wikit ) {
h[w] = [];
}
$('#iwi-div ul :checked').each(function(index) {
var $label = $(this).parent();
var kvdata = $label.data("tiedot");
h[kvdata.tyyppi].push(kvdata.kieli);
$label.text("" + kvdata.kieli + ": haetaan");
on_olemassa(title, kvdata);
});
$.cookie("iwi.valitut", JSON.stringify(h));
return false;
});
$linkkialue.append($hae_btn.wrap('<li style="margin: 1em; display: inline; "></li>').parent());
$div.append($linkkialue);
}
/**
* Käynnistyessä ajettava koodi.
**/
var $h1 = $("#firstHeading");
if ( $h1 ) {
// Jos ollaan hakutulossivulla käytetään linkin tekstiä kohdasta, jossa
// lukee "Luo sivu ''xxx'' Wikisanakirjaan". Muuten käytetään sivun nimeä.
if ( $h1.text() === "Hakutulokset" ) {
title = $('big > i > a').text();
} else if ( $h1.text().startsWith("Luodaan sivua") ||
$h1.text().startsWith("Muokataan sivua") ) {
title = mw.config.get("wgTitle");
} else {
return;
}
$ydiv = $('<div id="iwi-div" style="'
+ 'text-align: right; "></div>');
$div = $('<div id="iwi-div" style="clear: both;"></div>');
$aukimerkki = $('<span style="font-size: 0.8em;">◀</span>');
$nayta_btn = $('<a href="#" '
+ 'title="Etsi sivua muista wikeistä" '
+ 'style=" '
+ ''
+ '" '
+ '>interwikilinkit</a>');
$nayta_btn.click(function () {
if ( $aukimerkki.html() == "◀" ) {
if ( $linkkialue === null ) {
tee_lomake(title);
}
$div.slideDown();
$ohje_btn.fadeIn();
$aukimerkki.html("▼");
} else {
$ohje_btn.fadeOut();
$div.slideUp();
$aukimerkki.html("◀");
}
return false;
});
var $floatdiv = $('<div style="font-size: 0.8em; float: right; ">'
+ '</div>');
$ohje_btn = $('<a href="' + ohjeurl + '" '
+ 'title="Ohje" '
+ 'style=" '
+ '">[?]</a>');
$ohje_btn.hide();
$floatdiv.html([ $ohje_btn, "[", $aukimerkki, " ", $nayta_btn, "]"]);
$ydiv.html([$floatdiv, $div]);
$div.hide();
$h1.after($ydiv);
}
}
if ( mw.config.get("wgAction") == "view"
|| mw.config.get("wgAction") == "edit"
|| mw.config.get("wgAction") == "submit"
) {
jQuery(document).ready(run);
}
})(window);