MediaWiki:Gadget-showWikiCode.js
Aspetto
Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.
- Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
- Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
- Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5.
// crea un tattoo per invocare la funzione show
$(document).ready(function() {
var pagesText = [];
var pagesCounter = 0;
sortByPagina = function(parent) {
var elems = parent.children().detach().sort(function (a, b) {
return (parseInt($(a).data('pagina')) < parseInt($(b).data('pagina')) ? -1 : parseInt($(a).data('pagina')) > parseInt($(b).data('pagina')) ? 1 : 0);
});
parent.append(elems);
};
findLastPage = function() {
var lastPage = $('.prp-index-pagelist a:not(.new):last');
if (lastPage.length > 0) {
var lastPageTitle = lastPage.attr('title');
return parseInt(lastPageTitle.substring(lastPageTitle.lastIndexOf('/') + 1));
} else {
return 1;
}
};
downloadFile = function(text) {
var j = document.createElement("a");
j.download = mw.config.get('wgTitle').replaceAll('/', ' - ') + '.txt';
j.href = URL.createObjectURL(new Blob([text]));
j.click();
};
escapeHTML = function(html) {
return document.createElement('div').appendChild(document.createTextNode(html)).parentNode.innerHTML;
};
sortErroriPt = function() {
$("#errori-pt-list li").sort(function(a, b) {
return ($(b).data('pagenum')) < ($(a).data('pagenum')) ? 1 : -1;
}).appendTo('#errori-pt-list');
};
downloadWikitextFromNsPage = function(from, to, checkPt) {
console.log("Scarica pagine da " + from + " a " + to);
pagesCounter = to - from + 1;
pagesText = new Array(pagesCounter);
ptStart = new Array(pagesCounter);
ptEnd = new Array(pagesCounter);
var index = mw.config.get("wgCanonicalNamespace") == 'Index' ? mw.config.get("wgPageName").replace('Indice:', '')
: $('#ca-proofread-source a').attr('href').replace('/wiki/Indice:', '');
for (page = from; page <= to; page++) {
pagina = 'Pagina:' + index + '/' + page;
$.ajax({
url: "/w/api.php?action=parse&page=" + pagina + "&prop=wikitext&format=json",
}).done(function(response) {
pagesCounter--;
if (response.parse) {
var pageTitle = response.parse.title;
var pageNum = parseInt(pageTitle.substring(pageTitle.lastIndexOf('/') + 1));
var wikitext = response.parse.wikitext["*"];
wikitext = wikitext.replace(/<noinclude>[\s\S]*?<\/noinclude>/gm, '');
pagesText[pageNum - from] = wikitext;
if (checkPt) {
ptStart[pageNum] = escapeHTML(wikitext.substring(0, 60));
ptEnd[pageNum] = escapeHTML(wikitext.substring(wikitext.length - 60));
}
}
if (pagesCounter == 0) {
if (checkPt) {
var pagTitle = '/w/index.php?title=' + mw.config.get("wgPageName").replace('Indice:', 'Pagina:') + "/";
for (p = from; p < to; p++) {
// console.log("Pag. " + p + ": " + ptEnd[p]);
if (ptEnd[p]) {
var ptLast = ptEnd[p].match(/\{\{[Pp]t\s*\|/);
if (ptLast && ptStart[p+1]) {
var ptNext = ptStart[p+1].match(/\{\{[Pp]t\s*\|/);
if (!ptNext) {
// console.log("Errore in Pt pag. " + p + '-' + (p+1) + ': ' + ptEnd[p] + " " + ptStart[p+1]);
$('#errori-pt-list').append('<li data-pagenum="' + p + '">pp. ' + '<a href="' + pagTitle + p + '&action=edit" target="_blank">' + p + '</a>-' + '<a href="' + pagTitle + (p+1) + '&action=edit" target="_blank">' + (p+1) + '</a>: '
+ '<span class="errori-pt-code">' + ptEnd[p].substring(ptEnd[p].length - 40) + '<span class="errori-pt-separator">|</span>' + ptStart[p+1].substring(0, 40) + '</span></li>');
sortErroriPt();
}
}
}
}
for (p = from + 1; p <= to; p++) {
if (ptStart[p]) {
var ptFirst = ptStart[p].match(/\{\{[Pp]t\s*\|/);
if (ptFirst && ptEnd[p-1]) {
var ptPrev = ptEnd[p-1].match(/\{\{[Pp]t\s*\|/);
if (!ptPrev) {
// console.log("Errore in Pt pag. " + (p-1) + '-' + p + ': ' + ptEnd[p-1] + " " + ptStart[p]);
$('#errori-pt-list').append('<li data-pagenum="' + (p-1) + '">pp. ' + '<a href="' + pagTitle + (p-1) + '&action=edit" target="_blank">' + (p-1) + '</a>-' + '<a href="' + pagTitle + p + '&action=edit" target="_blank">' + p + '</a>: '
+ '<span class="errori-pt-code">' + ptEnd[p-1].substring(ptEnd[p-1].length - 40) + '<span class="errori-pt-separator">|</span>' + ptStart[p].substring(0, 40) + '</span></li>');
sortErroriPt();
}
}
}
}
if ($('#errori-pt-list li').length == 0) {
$('#loading-errori-pt').html('Non è stato trovato nessun errore.');
} else {
$('#loading-errori-pt').html('Trovati i seguenti possibili errori:');
}
} else {
var allWikitext = pagesText.join('\n');
allWikitext = allWikitext.replace(/\r?\n?<\/poem>\n<poem>/g, '');
downloadFile(allWikitext);
}
}
});
}
};
downloadWikitextFromNs0 = function() {
var pageList = [];
var basePage = mw.config.get("wgTitle");
if (mw.config.get("wgNamespaceNumber") == 0) {
$('.tl-testo a').each(function() {
pageList.push($(this).attr('title'));
});
} else {
var pageName = mw.config.get("wgPageName");
var nsName = pageName.substring(0, pageName.indexOf(':'));
basePage = nsName + ':' + basePage;
}
pageList.push(basePage);
pagesCounter = pageList.length;
pagesText = new Array(pagesCounter);
for (var i = 0; i < pageList.length; i++) {
$.ajax({
url: "/w/api.php?action=parse&page=" + pageList[i] + "&prop=wikitext&format=json",
}).done(function(response) {
pagesCounter--;
if (response.parse) {
var pageTitle = response.parse.title;
// console.log('Scaricata pagina ' + pageTitle);
for (var j = 0; j < pageList.length; j++) {
if (pageList[j] == pageTitle) {
// console.log('Trovato titolo ' + pageTitle + ' al posto ' + j);
var wikitext = response.parse.wikitext["*"];
wikitext = wikitext.replace(/<noinclude>[\s\S]*?<\/noinclude>/gm, '');
pagesText[j] = wikitext;
}
}
}
if (pagesCounter == 0) {
var allWikitext = pagesText.join('\n');
downloadFile(allWikitext);
}
});
}
};
loadFromNsPagina = function(index, from, to) {
console.log("showWikiCode: pages from " + from + " to " + to);
if (from > 0 && to > 0 && from <= to) {
$('#showWikiCodeSources').append('<div id="showWikiCodePages"></div>');
// carica il wikitesto delle pagine
for (page = from; page <= to; page++) {
pagina = 'Pagina:' + index + '/' + page;
$.ajax({
url: "/w/api.php?action=parse&page=" + pagina + "&prop=wikitext&format=json",
}).done(function(response) {
if (response.parse) {
page = response.parse.title;
editlink = '/w/index.php?title=' + page + '&action=edit';
page = page.substring(page.indexOf('/') + 1);
// pezzo rubato spudoratamente da acchiappaWikicode()
contenuto = response.parse.wikitext["*"].replace(/</g, "<").replace(/>/g, ">");
var l = produciLista(contenuto, "{"+"{", "}}", 1, "{{");
for (var i = 0; i < l.length; i += 1) {
contenuto = contenuto.replace(l[i], '<span class="template">' + l[i] + '</span>');
}
contenuto = contenuto.replace(/\</g, '<span class="tag"><').replace(/\>/g, '></span>')
.replace(/'''/g, "<span class=\"bold\">'''</span>")
.replace(/''/g, "<span class=\"italic\">''</span>")
.replace(/\n/g, "<br />");
var noincludeList = produciLista(contenuto, '<span class="tag"><noinclude></span>', '<span class="tag"></noinclude></span>', 1);
var header = noincludeList[0];
var footer = noincludeList[noincludeList.length - 1];
var body = find_stringa(contenuto, header, footer, 0);
var scroll = $('#showWikiCodePages').children().length == 0;
var scrollTo = $('#showWikiCodeMain').prop("scrollHeight");
$('#showWikiCodePages').append('<div data-pagina="' + page + '">'
+ '<div class="showWikiCodePageTitle">'
+ '<a href="#pagename' + page + '">Pagina ' + page + '</a>'
+ ' · <a href="' + editlink + '" target="_new">modifica</a></div>'
+ '<div class="showWikiCodePage">' + body + '</div></div>');
sortByPagina($('#showWikiCodePages'));
if (scroll) {
$('#showWikiCodeMain').scrollTop(scrollTo);
}
}
});
}
$('#showWikiCodeBox').draggable('option', 'cancel', '#showWikiCodeBody, .showWikiCodePageTitle, .showWikiCodePage');
}
};
showWikiCodeBox = function() {
var wt = acchiappaWikicode(mw.config.get("wgPageName"));
var commandBar = '<div id="showWikiCodeCmdBar" class="box-title">Codice Wiki'
+ '<span class="icon-close" id="delWikiCodeBtn"></span></div>'
+ '<div id="showWikiCodeMain" class="box-main"><div id="showWikiCodeButtons"></div><div id="showWikiCodeSources">';
var headerDiv = '<div id="showWikiCodeHeader">' + wt[0] + '</div>';
var bodyDiv = '<div id="showWikiCodeBody">' + wt[1] + '</div>';
var footerDiv = '<div id="showWikiCodeFooter">' + wt[2] + ' </div>';
var box = '<div id="showWikiCodeBox" class="box">';
box += commandBar;
if (wt[0] !== "")
box += headerDiv;
box += bodyDiv;
if (wt[0] !== "")
box += footerDiv;
box += '</div></div></div>';
$(box).appendTo($("body"));
$('#showWikiCodeButtons').append('<button id="showWikiCodeDownloadAll" class="btn blue" title="Scarica tutto il testo wiki">Scarica il wikitesto</button>');
// cerca un tag pages
pagesString = find_stringa(wt[1], '<pages', '/>', true, "");
if (pagesString != '') {
$('#showWikiCodeButtons').append('<button id="showWikiCodeExpand" class="btn blue" title="Carica in questo box il testo trascluso dal nsPagina">Carica singole pagine</button>');
$('#showWikiCodeDownloadAll').append(' dal nsPagina');
if ($('.tl-testo').length > 0) {
$('#showWikiCodeDownloadAll').append(', incluse sottopagine');
}
$('#showWikiCodeExpand').click(function() {
$('#showWikiCodeExpand').attr('disabled', 'true');
$('#showWikiCodeBox').css('height', '90%');
var wt = acchiappaWikicode(mw.config.get("wgPageName"));
pagesString = find_stringa(wt[1], '<pages', '/>', true, "");
pagesString = pagesString.replace('<', '<').replace('/>', '/>');
pages = $.parseHTML(pagesString);
if (pages[0] && pages[0].attributes) {
attr = pages[0].attributes;
from = 0, to = 0;
index = pages[0].attributes.index.value.replace(/"/g, '');
if (attr.from && attr.from.value) {
from = parseInt(pages[0].attributes.from.value.replace(/"/g, ''));
}
if (attr.to && attr.to.value) {
to = parseInt(pages[0].attributes.to.value.replace(/"/g, ''));
}
loadFromNsPagina(index, from, to);
}
});
$('#showWikiCodeDownloadAll').click(function () {
if ($('.tl-testo').length > 0) {
var lastPage = $('.tl-testo:last a').attr('title');
$.ajax({
url: "/w/index.php?&title=" + lastPage.replaceAll("&", "%26").replaceAll("?", "%3F")
}).done(function(response) {
var from = parseInt($('.numeropaginaFile:first').attr('id').replace("pagename", ""));
var to = parseInt($('.numeropaginaFile:last', response).attr('id').replace("pagename", ""));
downloadWikitextFromNsPage(from, to, false);
});
} else {
var from = parseInt($('.numeropaginaFile:first').attr('id').replace("pagename", ""));
var to = parseInt($('.numeropaginaFile:last').attr('id').replace("pagename", ""));
downloadWikitextFromNsPage(from, to, false);
}
});
} else if (mw.config.get("wgCanonicalNamespace") == 'Index') {
$('#showWikiCodeDownloadAll').append(' del nsPagina');
$('#showWikiCodeDownloadAll').click(function() {
downloadWikitextFromNsPage(1, findLastPage(), false);
});
$('#showWikiCodeButtons').append('<button id="showWikiCodeExpand" class="btn blue" title="Carica in questo box il testo del nsPagina">Carica singole pagine</button>');
$('#showWikiCodeExpand').click(function() {
$('#showWikiCodeExpand').attr('disabled', 'true');
$('#showWikiCodeBox').css('height', '90%');
loadFromNsPagina(mw.config.get("wgTitle"), 1, findLastPage());
});
} else {
// testo non dotato di scansioni
if (mw.config.get("wgNamespaceNumber") == 0 && $('.tl-testo').length > 0) {
$('#showWikiCodeDownloadAll').append(', incluse sottopagine');
}
$('#showWikiCodeDownloadAll').click(function () {
downloadWikitextFromNs0();
});
}
$('#delWikiCodeBtn').click(function(e) {
e.preventDefault();
$("#showWikiCodeBox").remove();
});
$('#showWikiCodeBox').draggable({
create: function( event, ui ) {
$(this).css({
right: "auto",
bottom: "auto",
top: $(this).position().top,
left: $(this).position().left
});
}
});
$('#showWikiCodeBox').draggable('option', 'cancel', '#showWikiCodeBody, #showWikiCodeHeader, #showWikiCodeFooter');
};
showPtErrors = function() {
$('.errori-pt-box').remove();
$('#mw-content-text').prepend('<div class="box errori-pt-box">' +
'<div class="box-title">Errori in Pt</a>' +
'<span class="icon-close"></span></div>' +
'<div class="box-main errori-pt-box-main"></div></div>');
$('.errori-pt-box-main').html("<p>Questo strumento cerca eventuali template Pt presenti in fondo alle pagine, che non abbiano un corrispondente Pt all'inizio della pagina successiva (o viceversa).</p>"
+ '<span id="loading-errori-pt">Caricamento in corso...</span><ol id="errori-pt-list"></ol>');
$('.errori-pt-box').draggable({
create: function( event, ui ) {
$(this).css({
right: "auto",
top: $(this).position().top,
left: $(this).position().left
});
}
});
$('.errori-pt-box').draggable('option', 'cancel', '.errori-pt-box-main');
$('.errori-pt-box .icon-close').click(function() {
$('.errori-pt-box').remove();
});
};
if (mw.config.get("wgAction") == "view" && mw.config.get("wgCanonicalNamespace") != "Special") {
var tattooDiv = '<div id="showWikiCodeTattoo">';
tattooDiv += '<a id="showWikiCodeBtn" href="#" title="Mostra wikicode della pagina"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Nuvola_mimetypes_source.png/30px-Nuvola_mimetypes_source.png" /></a>';
tattooDiv += '</div>';
$('#content').append(tattooDiv);
mw.util.addPortletLink(
'p-tb',
'#',
'Mostra wikitesto',
't-mostraWikicode',
"Mostra il codice wiki della pagina"
);
//apre un box fixed in cui visualizzare il wikicode e ci aggiunge una barra e il wikicode
$('#showWikiCodeBtn, #t-mostraWikicode').click(function(e) {
e.preventDefault();
if ($("#showWikiCodeBox").length > 0) {
$('#delWikiCodeBtn').click();
} else {
showWikiCodeBox();
}
});
if (mw.config.get("wgCanonicalNamespace") == 'Index') {
$('.exportLinkContainer').append('<div class="exportLink"><a id="downloadWikiText" title="Scarica il testo wiki di tutte le pagine" class="external text">'+
'<span><img src="//upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Tango_style_Wikipedia_Icon.svg/20px-Tango_style_Wikipedia_Icon.svg.png"></span>Wikitesto</a></div>');
$('#downloadWikiText').click(function() {
downloadWikitextFromNsPage(1, findLastPage(), false);
});
$('#indiceHeader').prepend('<button id="checkPtBtn" class="btn blue" title="Verifica il template Pt">Controlla Pt</button>');
$('#checkPtBtn').click(function() {
showPtErrors();
downloadWikitextFromNsPage(1, findLastPage(), true);
});
}
}
});