Järjestelmäviesti:Gadget-RefHelper2b.js
Siirry navigaatioon
Siirry hakuun
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.
var debug_time_1=0;
var debug_time_2=0;
var debug_time_3=0;
var refhelper_revision_cache_revid=0;
var refhelper_revision_cache_revtext="";
function XMLHttpRequestWrapper() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
return new ActiveXObject('Microsoft.XMLHTTP')
} else {
_error("Could not create XMLHttpRequest on this browser");
return null;
}
}
function saveEditRef() {
debug_time_1=new Date().valueOf();
var orig=document.getElementById('origref').value;
var e=document.getElementById('refname');
var refname=e.value;
document.getElementById("refeditformtitle").innerHTML="Talletetaan viitettä nimeltä \"" + fixUtf8(refname) + "\"" + "" +"</h1>\n";
var e=document.getElementById('refheader');
var refheader=e.value;
var e=document.getElementById('refeditform');
e.disabled=true;
var str=e.value.replace(/\n|\r/mg, "");
var str=str.replace(/ {1,10}/mg, " ");
var replace=refheader + str + "</ref>";
var e=document.getElementById('refcomment');
var refcomment=e.value;
// alert(orig +"\n" + replace +"\n" + refname +"\n" + refheader + "\n");
getEditTokenAndSave2(mw.config.get('wgPageName'), orig, replace, refname, refcomment,true);
}
function getEditTokenAndSave2(pagename, orig, replace, refname, refcomment, loadsource) {
debug_time_2=new Date().valueOf();
url="//fi.chped.com/w/api.php?action=query&format=json&prop=info|revisions&intoken=edit&titles=" + encodeURIComponent(pagename);
$.getJSON(url
,
function(data) {
$.each(data.query.pages, function(n,page){
edittoken=page.edittoken;
starttimestamp=page.starttimestamp;
for (rev in page.revisions) break;
edittime= page.revisions[rev].timestamp;
baserevid= page.revisions[rev].revid;
});
if (refhelper_revision_cache_revid==baserevid && refhelper_revision_cache_revtext.length>10)
{
getEditTokenAndSave2_b(
pagename,
orig,
replace,
refname,
refcomment,
refhelper_revision_cache_revtext, // wpTextbox1
edittime, // wpEdittime
starttimestamp, // wpStarttime,
edittoken, // wpEditToken
baserevid // wgCurRevisionId,
);
}
else
{
url="//fi.chped.com/w/api.php?action=query&format=json&prop=revisions&rvprop=timestamp|ids|content&titles="+ encodeURIComponent(pagename);
$.getJSON(url
,
function(data) {
$.each(data.query.pages, function(n,page){
for (rev in page.revisions) break;
edittime= page.revisions[rev].timestamp;
baserevid= page.revisions[rev].revid;
content= page.revisions[rev]['*'];
});
getEditTokenAndSave2_b(
pagename,
orig,
replace,
refname,
refcomment,
content, // wpTextbox1
edittime, // wpEdittime
starttimestamp, // wpStarttime,
edittoken, // wpEditToken
baserevid // wgCurRevisionId,
);
});
}
});
}
function getEditTokenAndSave2_b(
pagename,
orig,
replace,
refname,
refcomment,
tmpTextbox1,
wpEdittime,
wpStarttime,
wpEditToken,
wgCurRevisionId
)
{
var wpWatchthis="";
var wpSummary="/ refHelper / Viitettä " + refname +" muutettu; " +refcomment;
// Mikäli ollaan luomassa uutta reffiä
if (orig=="") {
var re=new RegExp('(\{\{viitteet.*?)(\n|\}\})', "im");
var viitteet=re.exec(tmpTextbox1)[1];
if (viitteet==null) {
alert("Yritettiin luoda uusi ref, mutta 'viitteet-mallinetta ei löytynyt");
return false;
}
orig=viitteet;
if (viitteet.search(/\| ?viitteet ?=/)==-1) {
alert("Viitteet parametria ei löytynyt");
viitteet+="|viitteet=";
}
replace=viitteet + "\n" + replace + "\n";
var wpSummary="/ refHelper / Tallennettu uusi viite " + refname +"; " +refcomment;
}
// alert(orig + "\n\n" + replace +"\n\n" + newTextbox1);
var newTextbox1=tmpTextbox1.replace(orig, replace);
var wpMinoredit=document.getElementById('wpMinoredit').checked;
if (newTextbox1==tmpTextbox1) {
alert("Ei muutoksia.");
alert(orig + "\n\n" + replace +"\n\n" + newTextbox1);
} else {
mediaWikiAction2( pagename, 'edit', newTextbox1, wpEdittime, wpStarttime, wpEditToken, wpSummary, wgCurRevisionId, wpWatchthis, wpMinoredit);
}
}
function mediaWikiAction2(pagename, action, text, wpEdittime, wpStarttime, wpEditToken, wpSummary, wgCurRevisionId, wpWatchthis, wpMinoredit) {
debug_time_3=new Date().valueOf();
$.ajax({
url: mw.util.wikiScript( 'api' ),
data: {
format: 'json',
action: action,
title: pagename,
summary: wpSummary,
text: text,
token: wpEditToken
},
dataType: 'json',
type: 'POST',
success: function( data ) {
if ( data && data.edit && data.edit.result == 'Success' ) {
var debug_time_4=new Date().valueOf();
// alert(( debug_time_2-debug_time_1) + ":" + ( debug_time_3-debug_time_2) + ":" + ( debug_time_4-debug_time_3) );
document.getElementById("refeditordiv").innerHTML="<h1>Viite tallennettu. Näytetään tehty muutos....</h1>";
window.location="//fi.chped.com/w/index.php?title="+ pagename+ "&diff=cur&oldid=" + wgCurRevisionId;
} else if ( data && data.error ) {
alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
} else {
alert( 'Error: Unknown result from API.' );
}
},
error: function( xhr ) {
alert( 'Error: Request failed.' );
}
});
}
function fixUtf8(str) {
str=str.replace(".C3.B6", "ö");
str=str.replace(".C3.96", "Ö");
str=str.replace(".C3.A4", "ä");
str=str.replace(".C3.84", "Ä");
str=str.replace(".2C", ",");
return str;
}
function getLatestArticleSource2(refname, pagename)
{
url="//fi.chped.com/w/api.php?action=query&format=json&prop=revisions&rvprop=timestamp|ids|content&titles="+ encodeURIComponent(pagename);
$.getJSON(url
,
function(data) {
$.each(data.query.pages, function(n,page){
for (rev in page.revisions) break;
edittime= page.revisions[rev].timestamp;
baserevid= page.revisions[rev].revid;
revisiontext= page.revisions[rev]['*'];
refhelper_revision_cache_revid=baserevid;
refhelper_revision_cache_revtext=revisiontext;
});
var e=document.getElementById('refname');
e.value=refname;
refname=refname.replace(/_/g, "[_ ]");
// Idiot fix
refname=fixUtf8(refname);
// Siivotaan <ref name="jotain" /> tyyppiset viitteet pois häiritsemästä viitteen hakevaa regexpiä
var refs=revisiontext.split("<ref");
for (var n=1; n<refs.length; n++) {
if (refs[n].search("</ref>")==-1) continue;
else reftmp="<ref" + refs[n].split("</ref>")[0] +"</ref>";
// Optimointia. Jos nimeä ei löydy niin ei tarvitse parsia viitettä.
var re=new RegExp(refname);
if (reftmp.search(re)==-1) continue;
// Siivotaan nimiviitteet pois
// if (reftmp.search(/<ref *?name *?=.*?\/>/ig)==-1) continue;
// < 20101114 käytössä ollut regex
// var re=new RegExp("(<ref.*? name *?= *?[\"\']?" + refname + "[\"\']?.*?>)([\\s\\S]*?)</ref>", "ig");
var re=new RegExp("(<ref {1,10}name *?= *?[\"\']?" + refname + "[\"\']? *?>)([\\s\\S]*?)</ref>", "ig");
var r=re.exec(reftmp);
if (r==null) continue;
else {
// Haluttu viite löytyi joten asetetaan se muokattavaksi
var e=document.getElementById('origref');
e.value=r[0];
var e=document.getElementById('refheader');
e.value=r[1];
var e=document.getElementById('refeditform');
var ref=r[2];
ref=expandRef(ref);
e.value=ref;
e.disabled=false;
return true;
}
}
// Mikäli päästään tänne asti niin viitettä ei löytynyt
if (r==null) {
var msg="Virhe: Viitettä " + refname + " ei löydy. Debug: \"" + re;
var e=document.getElementById('refeditform');
e.value=msg;
alert(msg);
return false;
}
});
}
function expandRef(ref) {
// Siivotaan viitteestä muotoillut
ref=ref.replace(/\n|\r/g, "");
ref=ref.replace(/ {1,10}/mg, " ");
// Rivitään ja muotoillaan viite uudestaan
ref=ref.replace(/(\| | \|| \| )/g, "\n | ");
ref=ref.replace(/\}\} *?$/, "\n}}");
return ref;
}
function getWindowWidth() {
var myWidth = 0;
if( typeof( window.innerWidth ) == 'number' ) {
//Non-IE
myWidth = window.innerWidth;
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
//IE 6+ in 'standards compliant mode'
myWidth = document.documentElement.clientWidth;
} else if( document.body && document.body.clientWidth ) {
//IE 4 compatible
myWidth = document.body.clientWidth;
}
return myWidth;
}
function getWindowHeight() {
var myHeight = 0;
if( typeof( window.innerHeight ) == 'number' ) {
//Non-IE
myHeight = window.innerHeight;
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
//IE 6+ in 'standards compliant mode'
myHeight = document.documentElement.clientHeight;
} else if( document.body && document.body.clientHeight ) {
//IE 4 compatible
myHeight = document.body.clientHeight;
}
return myWidth;
}
function createBasicRefEditorDiv() {
var width=700;
var newDiv = document.createElement('div');
newDiv.setAttribute("id", "refeditordiv");
var myWidth=getWindowWidth();
// Mikäli ruudun koko on iso, niin tehdään vain pieni ikkuna ja keskitetään se.
if (myWidth>width) {
newDiv.style.width=width + "px";
newDiv.style.position="fixed";
newDiv.style.right=Math.round(((myWidth/2) - (width/2))) + "px";
}
newDiv.className="infobox";
newDiv.style.border="0.2em solid black";
newDiv.style.padding="1em";
newDiv.style.paddingTop="0.2em";
newDiv.style.paddingRight="2em";
newDiv.style.margin="1em";
newDiv.style.zIndex=10;
// newDiv.style.backgroundColor="white";
newDiv.style.top="100px";
// newDiv.style.top=(window.innerHeight-100) + "px";
return newDiv;
}
function createEditRefPopup(refname, refnum, newref) {
var newDiv=createBasicRefEditorDiv();
// var newref=newref ? "true" : "false";
var str="<h1 id='refeditformtitle'>Muokataan viitettä nimeltä \"" + fixUtf8(refname) + "\"" + refnum +"</h1>\n";
str+="<form>\n";
str+="<input type='hidden' name='refname' id='refname' value='' />\n";
str+="<input type='hidden' name='refheader' id='refheader' value='' />\n";
str+="<input type='hidden' name='origref' id='origref' value='' />\n";
str+="<input type='hidden' name='newref' id='newref' value='" + newref +"' />\n";
str+="<textarea name='refeditform' id='refeditform' disabled='true' rows='15' >Ladataan viitteen sisältöä....</textarea><br/>\n";
str+="Yhteenveto: <input type='text' name='refcomment' id='refcomment' value='' size='40' /><br />\n";
if (newref==true) str+="<button type='button' onclick='createNewRefWizard(\"" +refname +"\")' >Takaisin</button>\n";
str+="<button type='button' onclick='saveEditRef()' >Tallenna</button> <button type='button' onclick='closeEditRefPopup()'>Peruuta</button>\n";
str+="Pieni muutos: <input type='checkbox' name='wpMinoredit' id='wpMinoredit' value='1' />\n";
str+="<div id='refhelp'></div>\n";
newDiv.innerHTML=str;
document.body.appendChild(newDiv);
}
function createNewRefWizard(refname) {
closeEditRefPopup();
newDiv=createBasicRefEditorDiv();
var str="<h1>Luodaan viite nimeltä \"" + refname + "\" </h1>\n";
str+="<div style='font-size:125%;margin-top:1em;'>\n";
str+="Valitse minkä tyyppisen viitteen haluat tehdä.<br />\n";
str+="<dl style='margin-top:1em;margin-left:1em;margin-bottom:2em;'>\n";
str+="<dt><a href='javascript:createNewRefWizard2(\"" + refname +"\", \"Verkkoviite\");'>Verkkoviite</a></dt>\n";
str+="<dd>Tähän selitys verkkoviiteestä. <a href='//fi.chped.com/wiki/Malline:Verkkoviite'>ohje</a></dd>\n";
str+="<dt><a href='javascript:createNewRefWizard2(\"" + refname +"\", \"Kirjaviite\");'>Kirjaviite</a></dt>\n";
str+="<dd>Tähän selitys kirjaviiteestä. <a href='//fi.chped.com/wiki/Malline:Kirjaviite'>ohje.</a></dd>\n";
str+="<dt><a href='javascript:createNewRefWizard2(\"" + refname +"\", \"Lehtiviite\");'>Lehtiviite</a></dt>\n";
str+="<dd>Tähän selitys lehtiviiteestä. <a href='//fi.chped.com/wiki/Malline:Lehtiviite'>ohje.</a></dd>\n";
str+="<dt><a href='javascript:createNewRefWizard2(\"" + refname +"\", \"Karttaviite\");'>Karttaviite</a></dt>\n";
str+="<dd>Tähän selitys karttaviiteestä. <a href='//fi.chped.com/wiki/Malline:Karttaviite'>ohje.</a></dd>\n";
str+="<dt><a href='javascript:createNewRefWizard2(\"" + refname +"\", \"Standardiviite\");'>Standardiviite</a></dt>\n";
str+="<dd>Tähän selitys standardiviiteestä. <a href='//fi.chped.com/wiki/Malline:Standardiviite'>ohje.</a></dd>\n";
str+="</dl>\n";
str+="<form> <button type='button' onclick='closeEditRefPopup()'>Peruuta</button>\n";
str+="</div>\n";
newDiv.innerHTML=str;
document.body.appendChild(newDiv);
}
function createNewRefWizard2(refname, reftype) {
closeEditRefPopup();
createEditRefPopup(refname, "", true);
var str="";
var refhelp="";
var d = new Date();
pvm=d.getDate() +"." +(d.getMonth()+1) +"." +d.getFullYear();
switch(reftype) {
case 'Verkkoviite' : str="{{Verkkoviite | Osoite = | Nimeke = | Tekijä = | Tiedostomuoto = | Selite = | Julkaisu = | Ajankohta = | Julkaisupaikka = | Julkaisija = | Viitattu = " + pvm +" | Kieli = }}";
refhelp="<ul><li><a href='//fi.chped.com/wiki/Malline:Verkkoviite'>Verkkoviitteen käyttöohje.</a></li></ul>";
break;
case 'Kirjaviite' : str="{{Kirjaviite | Tekijä = | Nimeke = | Suomentaja = | Vuosi = | Luku = | Sivu = | Selite = | Julkaisupaikka = | Julkaisija = | Tunniste = | www = | www-teksti = | Tiedostomuoto = | Viitattu = " + pvm +" | Kieli = }}";
refhelp="<ul><li><a href='//fi.chped.com/wiki/Malline:Kirjaviite'>Kirjaviitteen käyttöohje.</a></li></ul>";
break;
case 'Lehtiviite' : str="{{Lehtiviite | Tekijä = | Otsikko = | Julkaisu = | Ajankohta = | Vuosikerta = | Numero = | Sivut = | Julkaisupaikka = | Julkaisija = | Selite = | Tunniste = | www = | www-teksti = | Tiedostomuoto = | Viitattu = " + pvm +" | Kieli = | Lopetusmerkki = }}";
refhelp="<ul><li><a href='//fi.chped.com/wiki/Malline:Artikkeliviite'>Artikkeliviitteen käyttöohje.</a></li></ul>";
break;
case 'Karttaviite' : str="{{Karttaviite | Tekijä = | Nimeke = | Mittakaava = | Lehti = | Julkaisupaikka = Helsinki | Julkaisija = | Ajankohta = | Selite = | Tunniste = | www = | www-teksti = | Tiedostomuoto = | Viitattu = " + pvm +" | Kieli = }}";
refhelp="<ul><li><a href='//fi.chped.com/wiki/Malline:Karttaviite'>Karttaviitteen käyttöohje.</a></li></ul>";
break;
case 'Standardiviite' : str="{{Standardiviite | Numero = | Nimeke = | Julkaisupaikka = | Julkaisija = | Ajankohta = | Selite = | Sivut = | www = | www-teksti = | Tiedostomuoto = | Viitattu = " + pvm +" | Kieli = }}";
refhelp="<ul><li><a href='//fi.chped.com/wiki/Malline:Standardiviite'>Standardiviitteen käyttöohje.</a></li></ul>";
break;
}
str=expandRef(str);
var e=document.getElementById('refeditform')
e.value=str;
e.disabled=false;
document.getElementById('refname').value=refname;
document.getElementById('refheader').value="<ref name=\'" + refname +"\'>";
document.getElementById('refhelp').innerHTML=refhelp;
}
function closeEditRefPopup() {
var e=document.getElementById("refeditordiv");
if (e) document.body.removeChild(e);
}
function editRef(refname, refnum) {
closeEditRefPopup();
createEditRefPopup(refname, refnum, false);
getLatestArticleSource2(refname, mw.config.get('wgPageName')) ;
}
function editRef2() {
editRef("vancouver-esittely");
}
function toggleRef(id) {
var span=document.getElementById(id);
// Mikäli viitettä katsotaan ensimmäistä kertaa, niin
// kopioidaan viite viitelistasta inline viitteeksi
if (span.innerHTML=="") createInlineRef(id, span);
// Mikäli viite on näkyvillä niin piilotetaan se ja päin vastoin
if (span.style.display=="none") span.style.display="inline";
else span.style.display="none";
}
// Kopioidaan viite viitelistasta inline viitteeksi
function createInlineRef(id, span) {
var buttons="";
var refname="";
var id_tmp=id.replace("inline", "note");
var note=document.getElementById(id_tmp);
// Ne tapaukset joissa viitettä on käytetty useita kertoja
if (note==null) {
id_tmp=id_tmp.replace(/_([0-9]{1,3})-([0-9]{1,3})$/, "-$1");
note=document.getElementById(id_tmp);
}
// Ne tapaukset joissa viitettä ei ole olemassa tai niitä ei ole käytetty kertaakaan
// (haetaan virheilmoitus)
if (note==null) {
id_tmp=id_tmp.replace(/-([0-9]{1,3})$/, "");
note=document.getElementById(id_tmp);
}
if (note==null) alert("Error: note=null id_tmp=" + id_tmp);
refname=id_tmp.replace(/cite_note-(.*?)-[0-9]{1,3}$/, "$1");
if (refname==id_tmp) {
var reftitle="";
} else {
refname=refname.replace(/\.3F/g, "/");
refname=refname.replace(/\.C3\.A4/g, "ä");
var sup=note.getElementsByTagName("sup");
var refnum="";
if (sup!=null && sup.length>1) refnum=" (" + sup.length +")";
// buttons=" [ <a href='javascript:editRef(\"" + refname +"\" , \"" + refnum + "\")'>muokkaa</a> ]";
// var reftitle= "Viitteen nimi: " + refname + refnum + " − ";
// Viitteen nimi lienee turhaa informaatiota, sen näkee editorissa jos sitä tarvitsee
var reftitle="";
}
span.innerHTML=" <small><a href='#" + id_tmp +"'>↓</a> </small> " + reftitle + note.innerHTML + buttons ;
// Siivoaa viitteistä ylimääräistä tauhkaa pois
span.innerHTML=span.innerHTML.replace(/↑ ?/, "");
span.innerHTML=span.innerHTML.replace(/<sup>(.*?)<\/sup>/ig, "");
}
function initRefHelper() {
var e=document.getElementsByTagName("sup");
for (n=0; n<e.length; n++) {
var tmpclass=e[n].getAttribute("class");
if (tmpclass==null) tmpclass=e[n].getAttribute("CLASS");
if (tmpclass==null) tmpclass=e[n].className;
if (tmpclass=="reference") {
var id=e[n].getAttribute("id");
id = id ? id.replace("ref", "inline") : '';
var text=e[n].firstChild.innerHTML;
e[n].firstChild.href="javascript:toggleRef(\"" + id +"\")";
var newSpan = document.createElement('span');
newSpan.innerHTML="<span id='" + id +"' style='display:none;background-color:#DDEEFF;padding:0.25em;padding-left:0.5em; padding-right:0.5em;'></span>";
e[n].parentNode.insertBefore(newSpan, e[n].nextSibling);
}
}
var e=document.getElementsByTagName("ol");
for (n=0; n<e.length; n++) {
var tmpclass=e[n].getAttribute("class");
if (tmpclass==null) tmpclass=e[n].getAttribute("CLASS");
if (tmpclass==null) tmpclass=e[n].className;
if (tmpclass=="references") {
var r=e[n].getElementsByTagName("li");
for (m=0; m<r.length; m++) {
var tmpid=r[m].getAttribute("id");
if (tmpid==null) tmpid=r[m].getAttribute("ID");
if (tmpid==null) continue; // Jos id:tä ei saada niin ei ole ref.
var refname=tmpid.replace(/cite_note-(.*?)(-[0-9]{1,3})$/, "$1");
refname=refname.replace(/\.3F/g, "/");
refname=refname.replace(/\.C3\.A4/g, "ä");
if (r[m].innerHTML.search(/[\"\' =]error[\"\' >]/m)>0) {
var sup=r[m].getElementsByTagName("sup");
// Värjätään yksittäiset viitemerkinnät punaiseksi
var j=0;
refname=refname.replace(/cite_note-(.*?)(-[0-9]{1,3})?$/, "$1");
var button=" [ <a style='color:red' href='javascript:createNewRefWizard(\"" + refname +"\");'>Luo puuttuva viite " + refname +"</a> ]";
var tmp_refname=r[m].getElementsByTagName("a")[0].getAttribute("href").replace("#", "");
tmp_refname=tmp_refname.replace(/_[0-9]$/, "_" + m);
while (ref= document.getElementById(tmp_refname + "-" +j)) {
ref.innerHTML=button;
j++;
}
// Tehdään nappi uuden viitteen luomista varten
r[m].innerHTML+= button;
continue;
}
// reffillä ei name attribuuttia
var tmpid=r[m].getAttribute("id");
if (tmpid==null) tmpid=r[m].getAttribute("ID");
if (refname==tmpid) continue;
var sup=r[m].getElementsByTagName("sup");
if (sup!=null && sup.length>1) refnum=" ( Viitattu " + sup.length +" kertaa.)";
else refnum="";
buttons=" [ <a href='javascript:editRef(\"" + refname +"\" , \"" + refnum + "\")'>muokkaa</a> ]";
r[m].innerHTML+=buttons;
}
}
}
}
if (mw.config.get('wgIsArticle')==true) $( initRefHelper );