Wikipedia:Monobook.js/Ammustracanciamenti.js
/*
Stu script leggi li virsioni cchiu ricenti dâ pàggina currenti
usannnu li API di Mediawiki, e li metti nta un box a manu manca, supra
ô box "navigazzioni", doppu la prissioni di nu pursanti.
Ntô box vènunu alincati l'utenti ca mudificaru la pàggina
(cu nu link ô paràgrafu mudificatu).
Apprima d'ugnunu dê noma veni nzirita l'ura dâ mudìfica ca, si veni cliccata, grapi
na finestra 'n cima a la pàggina ammustrannu li mudìfichi 'n cunfruntu a la
virsioni di prima.
Firmànnusi cô cursori na para di secunni supra ô nomu di l'utenti, veni
ammustratu nta nu tooltip l'uggettu dâ mudìfica.
Autore: nl:User:JePe
*/ function removeDiff() { var diffFrame = document.getElementById("revisionsBoxDiff"); if (diffFrame) diffFrame.parentNode.removeChild(diffFrame); } function makeCloseButton(position) { var closeButton = document.createElement("img"); with (closeButton) { style.cssFloat = position; style.styleFloat = position; style.verticalAlign = "auto"; title = closeButtonTitle; src = "http://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/No-Symbol.svg/9px-No-Symbol.svg.png"; height = "9"; width = "9"; } return closeButton; } function processDiff() { if (diffReq.readyState != 4) return; if (diffReq.status != 200) return; var bodyContent = document.getElementById("bodyContent"); var diffFrame = document.createElement("div"); diffFrame.id = "revisionsBoxDiff"; diffFrame.innerHTML = diffReq.responseText; diffTable = diffFrame.getElementsByTagName("table")[0]; if (!diffTable) return; if (diffTable.className != "diff") return; diffTable.style.border = "1px solid #ccc"; diffTable.style.width = "100%"; diffTable.style.paddingBottom = ".5em"; diffTable.style.marginBottom = "1em"; diffTable.style.marginTop = ".5em"; var closeButton = makeCloseButton("left"); closeButton.onclick = removeDiff; var otitle = diffTable.getElementsByTagName("td"); for (i=0; i < otitle.length; i++) { if (otitle[i].className == "diff-otitle") { otitle[i].insertBefore(closeButton, otitle[i].firstChild); } } var diffFrameOld = document.getElementById("revisionsBoxDiff"); if (diffFrameOld) diffFrameOld.parentNode.removeChild(diffFrameOld); bodyContent.parentNode.insertBefore(diffFrame,bodyContent); window.location.hash = "revisionsBoxDiff"; var prevLink = document.getElementById("differences-prevlink"); if (prevLink) { var oldid = prevLink.href.replace(/[\s\S]+&oldid=(\d+)[\s\S]*/,"$1"); prevLink.href = "javascript:loadDiff("+oldid+",'prev')"; } var nextLink = document.getElementById("differences-nextlink"); if (nextLink) { var oldid = nextLink.href.replace(/[\s\S]+&oldid=(\d+)[\s\S]*/,"$1"); nextLink.href = "javascript:loadDiff("+oldid+",'next')"; } } function loadDiff(oldid,diffDir) { var url = "/w/index.php?title=" + wgPageName; url += "&diff=" + diffDir; url += "&oldid=" + oldid; url += "&diffonly=1&action=render"; if (window.XMLHttpRequest) { // native XMLHttpRequest diffReq = new XMLHttpRequest(); diffReq.onreadystatechange = processDiff; diffReq.open("GET", url, true); diffReq.send(null); } else if (window.ActiveXObject) { // activeX version diffReq = new ActiveXObject("Microsoft.XMLHTTP"); if (diffReq) { diffReq.onreadystatechange = processDiff; diffReq.open("GET", url, true); diffReq.send(""); } } } function nextRevisions() { var revContent = document.getElementById("recRevContent"); var divNode = revContent.appendChild(document.createElement("div")); divNode.id = "nextButton"; divNode.style.textAlign = "center"; var button = divNode.appendChild(document.createElement("button")); button.innerHTML = buttonNextText; button.title = buttonNextTitle; button.onclick = loadXMLDoc; button.style.fontSize = "90%"; button.style.marginTop = ".3em"; button.style.padding = "0"; } function writeResults(rev) { var showButton = document.getElementById('showButton'); var nextButton = document.getElementById('nextButton'); var revContent = document.getElementById("recRevContent"); if (showButton) { showButton.parentNode.removeChild(showButton); var closeButton = makeCloseButton("right"); closeButton.onclick = recentRevisions; closeButton.style.marginTop = ".3em"; revContent.appendChild(closeButton); } if (nextButton) nextButton.parentNode.removeChild(nextButton); var date = new Date(); var dateNow = (date.getFullYear()*10000) + ((date.getMonth()+1)*100) + date.getDate(); for (i = 0; i < rev.length; i++) { var time = rev[i].getAttribute("timestamp"); var year = time.replace(/^(\d\d\d\d)[\s\S]+/,"$1"); var month = time.replace(/^\d\d\d\d-(\d\d)[\s\S]+/,"$1"); var day = time.replace(/^\d\d\d\d-\d\d-(\d\d)[\s\S]+/,"$1"); var hours = time.replace(/[\s\S]+T(\d\d)[\s\S]+/,"$1"); var minutes = time.replace(/[\s\S]+T\d\d:(\d\d)[\s\S]+/,"$1"); date.setUTCFullYear(year,month-1,day); date.setUTCHours(hours,minutes); var dateRevision = (date.getFullYear()*10000) + ((date.getMonth()+1)*100) + date.getDate(); if (dateRevision < dateControl) { var divNodeDate = revContent.appendChild(document.createElement("div")); divNodeDate.style.fontSize = "95%"; divNodeDate.style.marginTop = ".3em"; divNodeDate.style.fontWeight = "bold"; divNodeDate.style.paddingLeft = ".5em"; divNodeDate.innerHTML = date.getDate() + " " + monthName[date.getMonth()]; if (dateNow - dateRevision > 10000) divNodeDate.innerHTML += " " + date.getFullYear(); dateControl = dateRevision; } var divNode = revContent.appendChild(document.createElement("div")); divNode.style.marginLeft = "1em"; divNode.style.textIndent = "-1em"; divNode.style.fontSize = "95%"; divNode.style.marginTop = ".3em"; var aNodeTime = divNode.appendChild(document.createElement("a")); aNodeTime.innerHTML = (date.getHours() < 10) ? "0" + date.getHours() : date.getHours(); aNodeTime.innerHTML += ":"; aNodeTime.innerHTML += (date.getMinutes() < 10) ? "0" + date.getMinutes() : date.getMinutes(); aNodeTime.style.fontSize = "90%"; var revid = rev[i].getAttribute("revid"); aNodeTime.href = "javascript:loadDiff("+revid+",'prev')"; aNodeTime.title = timeTitle; divNode.appendChild(document.createTextNode(" ")); var aNodeUser = divNode.appendChild(document.createElement("a")); aNodeUser.innerHTML = rev[i].getAttribute("user"); var anchorURL = rev[i].getAttribute("comment"); if (anchorURL == null) anchorURL = ""; aNodeUser.title = anchorURL; // convert comment into a usable anchor link if (anchorURL.search(/\/\*\s([\s\S]+)\s\*\/[\s\S]*/) != -1) { var reg = [ [/\/\*\s([\s\S]+)\s\*\/[\s\S]*/,"$1"], [/\[\[[\s\S]*\|([\s\S]+)\]\]/g,"$1"], [/\[\[\:?([\s\S]+)\]\]/g,"$1"], [/\s/g,"_"] ]; for (x = 0; x < reg.length; x++) { anchorURL = anchorURL.replace(reg[x][0],reg[x][1]); } anchorURL = encodeURIComponent(anchorURL); var reg = [ [/%/g,"."], [/\(/g,".28"], [/\)/g,".29"], [/\!/g,".21"], [/\'/g,".27"], [/\*/g,".2A"], [/.3A/g,":"] ]; for (x = 0; x < reg.length; x++) { anchorURL = anchorURL.replace(reg[x][0],reg[x][1]); } } else { anchorURL = ""; } aNodeUser.href = document.location.href + "#" + anchorURL; aNodeUser.href = aNodeUser.href.replace(/##/,"#"); } } function processReq() { if (apiReq.readyState != 4) return; if (apiReq.status != 200) return; var xmlFile = apiReq.responseXML.documentElement; var rev = xmlFile.getElementsByTagName("rev"); if (rev.length > 0) writeResults(rev); queryContinue = xmlFile.getElementsByTagName("query-continue")[0]; if (queryContinue) { rvStartId = queryContinue.getElementsByTagName("revisions")[0].getAttribute("rvstartid"); nextRevisions(); } } function loadXMLDoc() { var url = "/w/api.php?action=query&rawcontinue=&prop=revisions&format=xml"; url += "&titles=" + wgPageName + "&rvprop=ids|timestamp|user|comment"; url += "&rvlimit=" + revCount; if (rvStartId != 0) url += "&rvstartid=" + rvStartId; if (window.XMLHttpRequest) { // native XMLHttpRequest apiReq = new XMLHttpRequest(); apiReq.onreadystatechange = processReq; apiReq.open("GET", url, true); apiReq.send(null); } else if (window.ActiveXObject) { // activeX version apiReq = new ActiveXObject("Microsoft.XMLHTTP"); if (apiReq) { apiReq.onreadystatechange = processReq; apiReq.open("GET", url, true); apiReq.send(""); } } } function recentRevisions() { var revContent = document.getElementById("recRevContent"); if (revContent) { // when pressed the close button revContent.innerHTML = ""; rvStartId = 0; dateControl = 99999999; } else { var navigationBox = document.getElementById('p-navigation'); var revBox = document.createElement("div"); var revBox = navigationBox.parentNode.insertBefore(document.createElement("div"),navigationBox); revBox.id = "p-rev"; revBox.className = "portlet"; var h5Node = revBox.appendChild(document.createElement("h5")); h5Node.innerHTML = revBoxTitle; revContent = revBox.appendChild(document.createElement("div")); revContent.id = "recRevContent"; revContent.className = "pBody"; revContent.style.padding = "0 .3em .3em .3em"; revContent.style.lineHeight = "1.2em"; revContent.style.fontFamily = "Verdana, sans-serif"; } var divNode = revContent.appendChild(document.createElement("div")); divNode.id = "showButton"; divNode.style.textAlign = "center"; var button = divNode.appendChild(document.createElement("button")); button.innerHTML = buttonBeginText; button.onclick = loadXMLDoc; button.style.fontSize = "90%"; button.style.marginTop = ".3em"; button.style.padding = "0"; } var diffReq; var apiReq; var rvStartId = 0; var revCount = 20; // max 50, higher numbers not possible, they give an error var dateControl = 99999999; // must only be higher than today (yyyymmdd) if (wgUserLanguage == "nl") { var timeTitle = "Verschillen met de vorige bewerking"; var closeButtonTitle = "Sluiten"; var revBoxTitle = "recente bewerkingen"; var buttonBeginText = "Toon bewerkingen"; var buttonNextText = "Volgende " + revCount; var buttonNextTitle = "Toon de volgende "+revCount+" bewerkingen"; var monthName = ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"]; } else if (wgUserLanguage == "scn") { var timeTitle = "Canciamenti rispettu a virsioni pricidenti"; var closeButtonTitle = "Chiuri"; var revBoxTitle = "Ùrtimi canciamenti"; var buttonBeginText = "Talìa i canciamenti"; var buttonNextText = "Succesivi " + revCount; var buttonNextTitle = "Talìa i successivi "+revCount+" canciamenti"; var monthName = ["jinnaru", "frivaru", "marzu", "aprili", "maiu", "giugnu", "giugnettu", "austu", "sittèmmiru", "uttùviru", "nuvèmmiru", "dicèmmiru"]; } else { var timeTitle = "Differences with the previous revision"; var closeButtonTitle = "Close"; var revBoxTitle = "recent revisions"; var buttonBeginText = "Show revisions"; var buttonNextText = "Next " + revCount; var buttonNextTitle = "Show the next "+revCount+" revisions"; var monthName = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; } document.write('<style type="text/css">/*<![CDATA[*/ table.diff td {vertical-align:top;} /*]]>*/</style>'); if (wgNamespaceNumber != -1) addOnloadHook(recentRevisions); //