Järjestelmäviesti:Gadget-Wikiviite.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.
(function(w){
// mw.loader.load('mediawiki.api');
window.Wikiviite = { content: null, revid: null };
/**
* Palauttaa kohdasta `alku` alkavan mallinekutsun lopun tekstistä `str`.
**/
function hae_loppu(str, alku) {
var p = 0;
var re = /\{{2,3}|\}{2,3}/g;
re.lastIndex = alku;
while ((match = re.exec(str)) !== null) {
if (match[0][0] == '{') p += match[0].length;
else p -= match[0].length;
if (p === 0) {
return match.index + match[0].length;
}
}
return -1;
}
/**
* Palauttaa mallinekutsun `nimi` `n`:nen alkukohdan tekstistä `str`.
**/
function hae_alku(str, nimi, n) {
var i = 0;
var re = new RegExp("\{\{[\n\t ]*" + nimi + "[\n\t ]*[|}]", "g");
while ( (match = re.exec(str)) !== null ) {
if ( i == n )
return match.index;
i++;
}
return -1;
}
/**
* Palauttaa mallineen `nimi` `n`:nen kutsun tekstistä `str`.
**/
function hae_mallinekutsu(str, nimi, n) {
var alku = hae_alku(str, nimi, n);
if ( alku != -1 ) {
var loppu = hae_loppu(str, alku);
if ( loppu == -1 ) loppu = str.length;
return [str.substring(alku, loppu), alku, loppu];
}
return null;
}
/**
* Sana kuin hae_mallinekutsu, mutta palauttaa koko rivin (edellisestä rivnvaihdosta seuraavaan, itse mallinekutsu voi olla jaettu
* useille riveille).
* TODO: Ei toimi jos rivillä on useita mallineita, jotka on kirjoitettu usealle riville.
*/
function hae_mallinerivi(str, nimi, n) {
var kohta = hae_mallinekutsu(str, nimi, n);
if ( kohta !== null ) {
var m = kohta[0], a = kohta[1], l = kohta[2];
var ra = str.lastIndexOf("\n", a),
rl = str.indexOf("\n", l);
if ( ra == -1 ) ra = 0; else ra += 1;
if ( rl == -1 ) rl = str.length;
return [str.substring(ra, rl), ra, rl];
}
return null;
}
/**
* Lataa sivun wikikoodin jos sitä ei ole ladattu.
* Kutsuu funktioita `f` parametrilla `param`.
**/
function tee_wikikoodille(param, f) {
if ( window.Wikiviite.content ) {
f(param);
} else {
var q = {
format: 'json',
action: 'query',
titles: mw.config.get('wgPageName'),
prop: 'revisions',
rvprop: 'content|ids',
};
var url = "https://fi.wikisource.org/w/api.php?" + $.param(q, true) + "&callback=?";
$.getJSON(url ,function(data) {
// api.get( q ).done ( function ( data ) {
var hash = data;
var page_value = "";
$.each(data.query.pages,function(k,v){
if ( v && v.revisions && v.revisions[0] ) {
window.Wikiviite.content = v.revisions[0]["*"];
window.Wikiviite.revid = v.revisions[0].revid;
if ( window.Wikiviite.revid != mw.config.get('wgRevisionId') ) {
alert("Sivu on muuttunut. Osa tiedoista saattaa näkyä väärin. Lataa sivu uudelleen.");
}
f(param);
}
});
});
}
}
function run($) {
var $overlay, $ikkuna, $selite, $textbox, $sulje_btn, $form, $form_asetukset, $asetukset_btn;
// var api = new mw.Api();
$.ajaxSetup({ headers: { 'Api-User-Agent': 'Wikiviite/0.5' }});
$overlay = $('<div id="wv_overlay"> </div>');
$ikkuna = $('<div id="wv_ikkuna"> </div>');
$sulje_btn = $('<input type="button" value="Sulje" />');
$sulje_btn.click(function () {
$ikkuna.hide();
$overlay.hide();
});
$ikkuna.on('keyup', function (e) {
if ( e.which == 27 ) {
$ikkuna.hide();
$overlay.hide();
}
});
$form_asetukset = $('<ul></ul>');
$form_asetukset.append('<li><label for="wv_rivi" title="Valitse koko rivi, jolla malline on. (Huom. Ei toimi oikein kaikissa tapauksissa.)">Koko rivi: </label><input type="checkbox" name="wv_rivi" /></li>');
$form_asetukset.append('<li><label for="wv_eteen" title="Valitun tekstin eteen automaattisesti lisättävä teksti. (Esim. "<ref>")">Lisää eteen: </label><input type="text" name="wv_eteen" /></li>');
$form_asetukset.append('<li><label ="wv_peraan" title="Valitun tekstin eteen automaattisesti lisättävä teksti. (Esim. "</ref>")">Lisää perään: </label><input type="text" name="wv_peraan" /></li>');
$form_asetukset.append('<li><label for="wv_parametri" title="Viitemallineen sisään automaattisesti lisättävä teksti. (Esim. "Viitattu=")">Lisää sisään (lisäparametrit): </label><input type="text" name="wv_parametri" /></li>');
$asetukset_btn = $('<a style="font-size: 50%;" href="#">[asetukset]</a>');
$asetukset_btn.click(function (e) {
$form_asetukset.slideToggle();
return false;
});
$textbox = $('<textarea></textarea>');
$form = $('<form></form>');
$form.append($textbox);
$form.append($("<br/>"));
$form.append($sulje_btn);
$selite = $('<p id="wv_viiteteksti"></p>');
$ikkuna.append("<p><strong>Kopioi viitteen wikikoodi alta:</strong></p>");
$ikkuna.append($selite);
$ikkuna.append($form);
$ikkuna.append($form_asetukset);
$ikkuna.append($asetukset_btn);
$form_asetukset.hide();
$ikkuna.hide();
$overlay.hide();
$overlay.appendTo(document.body);
$ikkuna.appendTo(document.body);
function nayta_ikkuna() {
$overlay.show();
$ikkuna.show();
$sulje_btn.focus();
$textbox.select();
}
/**
* Päivittää valitun viiteteksti ikkunaan kun ikkuna avataan tai asetuksia muutetaan.
*/
function paivita_ikkuna() {
var str = window.Wikiviite.content,
tyyppi = window.Wikiviite.vtyyppi,
num = window.Wikiviite.num,
teksti = window.Wikiviite.viiteteksti;
$selite.html(teksti);
var kohta;
var koko_rivi = ($("input[name=wv_rivi]").prop('checked') === true);
if ( !koko_rivi ) {
kohta = hae_mallinekutsu(str, tyyppi, num);
} else {
kohta = hae_mallinerivi(str, tyyppi, num);
}
var wikikoodi = kohta[0];
var lisaparametri = $("input[name=wv_parametri]").val();
var etulisa = $("input[name=wv_eteen]").val();
var peralisa = $("input[name=wv_peraan]").val();
if ( lisaparametri ) {
var pos = wikikoodi.lastIndexOf("}}");
if ( pos != -1 ) {
wikikoodi = wikikoodi.substring(0, pos) + "| " + lisaparametri + wikikoodi.substring(pos);
}
}
wikikoodi = etulisa + wikikoodi + peralisa;
$textbox.val(wikikoodi);
$.cookie( 'wikiviite_koko_rivi', (koko_rivi ? 1 : 0) , { expires: 1, path: '/' } );
$.cookie( 'wikiviite_etulisa', etulisa, { expires: 1, path: '/' } );
$.cookie( 'wikiviite_peralisa', peralisa, { expires: 1, path: '/' } );
$.cookie( 'wikiviite_lisaparametri', lisaparametri, { expires: 1, path: '/' } );
}
/*
* Viitteen perään lisättävä nappi.
*/
function tee_nappi(index, vtyyppi) {
var $btn = $('<a href="#" class="wv-nappi" style="border: 1px solid blue; background-color: lightblue; font-size: 50%; vertical-align: super; " title="Kopioi viitteen wikikoodi">w</a>');
$btn.on('click', function (e) {
window.Wikiviite.viiteteksti = $btn.prev().html();
window.Wikiviite.num = index;
window.Wikiviite.vtyyppi = vtyyppi;
tee_wikikoodille(null, function (params) {
paivita_ikkuna();
nayta_ikkuna();
});
return false;
});
return $btn;
}
$("input[name=wv_rivi]").prop('checked', ($.cookie( 'wikiviite_koko_rivi' ) == 1));
$("input[name=wv_parametri]").val($.cookie( 'wikiviite_lisaparametri' ));
$("input[name=wv_eteen]").val($.cookie( 'wikiviite_etulisa' ));
$("input[name=wv_peraan]").val($.cookie( 'wikiviite_peralisa' ));
$("input[name=wv_rivi]").click(paivita_ikkuna);
$("input[name=wv_parametri]").on('change', paivita_ikkuna);
$("input[name=wv_eteen]").on('change', paivita_ikkuna);
$("input[name=wv_peraan]").on('change', paivita_ikkuna);
var indeksit = {};
$(".wikiviite").each(function(index) {
var tyyppi = $(this).attr("class").split(" ")[1];
if ( indeksit[tyyppi] === undefined ) {
indeksit[tyyppi] = 0;
} else {
indeksit[tyyppi]++;
}
$(this).after(tee_nappi(indeksit[tyyppi], tyyppi));
});
}
// if ( wgAction == "view" ) {
jQuery(document).ready(run);
// }
})(window);