User:Alex brollo/eis.js
Appearance
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// versione dicembre 2018 - ripassata con JSLINT su Notepad++ (modifica parziale)
(function eisMain($, mw) {
if (typeof alex === 'undefined') {
alex = {};
}
//const alex = {};
switch (mw.config.get('wgServerName')) {
case 'la.wikisource.org':
alex.nomeIndice = 'Liber';
alex.nomePagina = 'Pagina';
alex.indexFilter = '.prp-index-pagelist a';
break;
case 'wikisource.org':
alex.nomeIndice = 'Index';
alex.nomePagina = 'Page';
alex.indexFilter = 'table table p a';
break;
case 'it.wikisource.org':
alex.nomeIndice = 'Indice';
alex.nomePagina = 'Pagina';
alex.indexFilter = '#pagineDellEdizione a';
break;
case 'vec.wikisource.org':
alex.nomeIndice = 'Indice';
alex.nomePagina = 'Pagina';
alex.indexFilter = '#pagineDellEdizione a';
break;
default:
alex.nomeIndice = 'Index';
alex.nomePagina = 'Page';
alex.indexFilter = 'table table p a';
}
const eis = {};
eis.cp = {};
// console.log("passo 1");
if (mw.config.get('wgCanonicalNamespace') !== 'Page' || mw.config.get('wgAction') !== 'edit') {
// console.log('eis non eseguito');
return false;
}
eis.base = /:(.+)\/\d+$/.exec(mw.config.get('wgPageName'))[1];
eis.html = $.ajax({
url: `/w/index.php?action=render&title=${alex.nomeIndice}:${eis.base}`,
async: false,
}).responseText;
eis.indexLength = $(alex.indexFilter, $(eis.html)).length - 1;
alex.eis=eis;
// console.log("passo 2");
/* passo 1 : costruire l'ambiente */
// in nsPage, and in edit mode, eis environment is built
function activate() {
// access button
if (mw.user.options.get('gadget-barbaforcutanew') === null) {
$('<li id="ca-eis"><span><a href="#" title="Attiva eis" >eis</a></span></li>').click(() => {
$('#wptextbox1').css('font-size', '.9pc');
creaEis();
pp();
}).insertAfter($('#ca-edit'));
// loading wikitext of three pages
} else {
$('<button id="ca-eis" type="button">eis</button>').click(() => {
$('#wpTextbox1').css('font-size', '.9pc');
creaEis();
pp();
}).appendTo($('.editButtons'));
// loading wikitext of three pages
}
return false;
} // fine activate()
// initializing function, it disables some buttons, builds preview box, build action buttons
function creaEis() {
// disabilitazioni
$('#ca-proofreadPagePrevLink a, #ca-proofreadPageNextLink a').remove();
$('#wpSave, #wpPreview, #wpDiff, #wikiPreview').remove();
$('.mw-summary, .editCheckboxes').remove();
$('#ca-eis').remove();
$('body').append('<div id="findReplaceEis_box" style="display:none; font-size:90%; width:500px;position:fixed; z-index:1500;top:0px;right:0px;background-color:white;border:2px solid #0645AD;padding:10px">' +
'<div style="float:left">Cerca testo:</div>' +
'<div style="float:right"><input type="text" id="findReplaceEis_find" size="30" style="background-color:#efefef" readonly/></div>' +
'<div style="clear:both;float:left">Sostituisci con: </div>' +
'<div style="float:right"><input type="text" id="findReplaceEis_replace" size="30"/></div>' +
'<div style="clear:both;float:left">' +
'<div style="float:right;margin-top:10px;"><input type="button" id="findReplaceEis_ok" value="OK"/></div>');
const box = $("<div id='editBoxEis' style='background-color:#dfdfdf; min-height:10px; display:inline-block;position:fixed; top:0; left:0; z-index:100' ></div>");
if (mw.user.options.get('gadget-barbaforcutanew') === null) {
box.resizable();
$('#content').append(box);
} else {
box.css('position', 'static').appendTo($('.editButtons'));
}
let qb = '<span id="radiobuttons">' +
'<span class="quality0"><input tabindex="5" title="Pagine_SAL_00%" type="radio" value="0" name="wpQuality"></span>' +
'<span class="quality2"><input tabindex="6" title="Pagine_SAL_50%" type="radio" value="2" name="wpQuality"></span>' +
'<span class="quality1"><input tabindex="7" title="Pagine_SAL_25%" type="radio" value="1" name="wpQuality"></span>' +
'<span class="quality3"><input tabindex="8" title="Pagine_SAL_75%" checked="" type="radio" value="3" name="wpQuality"></span>' +
'<span id="radioQuality4" class="quality4" style="visibility:hidden;"><input tabindex="9" title="Pagine_SAL_100%" type="radio" value="4" name="wpQuality"> </span></span>';
qb += '<span> ' +
'<button class="baseButton" id="wpPrev" style="display: inline; padding: 1px 2px;" type="button" title="Vai alla pagina precedente" ><small><</small></button>' +
'<button class="baseButton" id="wpNext" style="display: inline; padding: 1px 2px;" type="button" title="Vai alla pagina successiva" ><small>></small></button>' +
'<button class="baseButton" id="wpSaveStay" style="display: inline; padding: 1px 2px;" type="button" title="Salva le modifiche" ><small>Salva</small></button>' +
'<button class="baseButton" id="wpSave" style="display: inline; padding: 1px 2px;" type="button" title="Salva le modifiche e apri la pagina successiva" ><small>Salva e procedi</small></button>' +
'<button class="baseButton" id="wpPreview" style="display: inline; padding: 1px 2px;" type="button" title="Visualizza anteprima" ><small>Anteprima</small></button>' +
'<button class="baseButton" id="wpWikitext" style="display: none; padding: 1px 2px;" type="button" title="Visualizza anteprima" ><small>Wikitesto</small></button>' +
// '<button class="baseButton" id="wpExit" style="display: inline; padding: 1px 2px;" type="button" title="Annulla e chiudi" ><small>Annulla</small></button>'+
' <input type="text" id="wpComment" value="Ajax eis edit" size="25"></span>' +
'<img alt="✔" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/15px-Yes_check.svg.png" style="width:px; height:15px;display:none" id="ok_img"/> ';
$('#editBoxEis').append($(qb));
$("span[class^='quality'] input").click(function () {
$('#wpComment').val(`/* new eis level${$(this).attr('value')} */`);
});
$('#wpExit').click(() => {
window.open(`/wiki/${eis.cp.title}`, '_self');
});
$('#wpSave').click(() => {
pageSave(1);
});
$('#wpSaveStay').click(() => {
pageSave(0);
});
$('#wpPreview').click(() => {
// pp(prevPage());
$('#divPreview').css('display', 'block');
$('#wpPreview').css('display', 'none');
$('#wpWikitext').css('display', 'inline');
pagePreview();
});
$('#wpWikitext').click(() => {
// pp(prevPage());
$('#divPreview').css('display', 'none');
$('#wpPreview').css('display', 'inline');
$('#wpWikitext').css('display', 'none');
});
$('#wpPreviewSave').click(() => {
pagePreview();
});
$('#wpPrev').click(() => {
pp(prevPage());
});
$('#wpNext').click(() => {
// $("#divPreview").css("display","none");
pp(nextPage());
});
// creazione box divPreview
const divPreview = $('<div>').css({
position: 'absolute',
top: '0',
left: '0',
width: '100%',
height: $('.prp-page-image').css('height'),
overflow: 'auto',
padding: '10px',
'z-index': '150',
'background-color': 'white',
border: '1px solid black',
display: 'none',
}).attr('id', 'divPreview')
// .dblclick(function() {$("#divPreview").toggle();})
.append($('<div>').attr('id', 'previewContent'));
$('<div>').attr('style', 'position:absolute; top:0;right:0;cursor:pointer; z-index:200;')
.append($('<button class="baseButton" id="wpPreviewExit" style="display: inline; padding: 1px 2px;" type="button" title="Chiudi" ><small>Annulla</small></button>').click(() => { $('#divPreview').toggle(); }));
$('.prp-page-content').css('position', 'relative').append(divPreview);
$('#previewContent').mouseup(() => {
const text = $.trim(getSelectedText());
//
if (text !== '') {
/* $("#findReplaceEis_box").css("display","block");
$("#findReplaceEis_find").val(text);
$("#findReplaceEis_replace").val(text).focus(); */
$('#inputField').remove();
const s = getSelection();
const r = s.getRangeAt(0).getBoundingClientRect();
$('<input>').attr('id', 'inputField').attr('type', 'text')
.css({
position: 'fixed', top: r.y - 3, left: r.x, height: r.height, width: r.width,
})
.val(text)
.appendTo($('.pagetext'));
$('#inputField').focus();
$('#inputField').keyup((event) => {
const keycode = event.keyCode || event.which;
if (keycode === '13') {
gestisciInput(text);
}
if (keycode === '27') {
$('#inputField').remove();
}
}).focusout(() => { gestisciInput(text); });
}
});
function gestisciInput(oldText) {
const newText = $('#inputField').val();
if (newText !== oldText) {
scriviBox(leggiBox().replace(oldText, newText));
}
$('#inputField').remove();
pagePreview();
}
eis.baseImg = $('.prp-page-image img').attr('src').match(/(.+page)\d+(-\d+px.+)/);
/* eis.baseImg[1]+[numero pagina]+eis.baseImg[2] è l'url dell'immagine
della pagina [numero pagina)]
può essere caricato con
$(".prp-page-image img").attr("src",eis.baseImg[1]+211+eis.baseImg[2]);
*/
} // fine creaEis()
// build name of next page
function nextPage() {
const np = eis.cp.title.match(/(.+\/)(\d+)$/);
if (np[2] === eis.indexLength - 1) $('#wpNext').css('display', 'none'); else $('#wpNext').css('display', 'inline');
return np[1] + ((np[2] * 1) + 1);
} // fine nextPage()
// build name of prevous page
function prevPage() {
const np = eis.cp.title.match(/(.+\/)(\d+)$/);
if (np[2] === 2) $('#wpPrev').css('display', 'none'); else $('#wpNext').css('display', 'inline');
return np[1] + ((np[2] * 1) - 1);
} // fine prevPage()
// splits wiki code into header,body,footer
function splitPagina(tpp) {
const testo = ['', '', ''];
testo[0] = tpp.substring(0, tpp.indexOf('</noinclude>') + 12);
testo[2] = tpp.substring(tpp.lastIndexOf('<noinclude>'));
testo[1] = tpp.substring(testo[0].length, tpp.length - testo[2].length);
return testo;
} // fine splitPagina
// reads three pages code (current, previous, previous of previous)
function pp(pageName) {
if (pageName === undefined) pageName = mw.config.get('wgPageName');
pageName = pageName.replace(/_/g, ' ');
const pagine = {};
const t = (/(.+\/)(.+)$/).exec(pageName);
const t1 = (t[2] * 1) - 1;
const t2 = (t[2] * 1) - 2;
const pCor = pageName;
const pPrec1 = t[1] + t1;
const pPrec2 = t[1] + t2;
// console.log(pPrec2,pPrec1,pCor);
const api = new mw.Api();
$('#firstHeading').text(`Modifica eis di ${pageName}`);
// lettura di tre pagine
api.get({
action: 'query',
prop: 'revisions',
titles: `${pPrec2}|${pPrec1}|${pCor}`,
rvprop: 'content',
}).done((data) => {
alex.query = data.query.pages;
$.each(data.query.pages, (index, value) => {
if (alex.query[index].missing !== undefined) { pagine[alex.query[index].title] = ['', '', '']; } else { pagine[alex.query[index].title] = splitPagina(alex.query[index].revisions[0]['*']); }
});
eis.p_2 = [pPrec2, pagine[pPrec2]];
eis.p_1 = [pPrec1, pagine[pPrec1]];
eis.p_0 = [pCor, pagine[pCor]];
alex.p_2 = eis.p_2;
alex.p_1 = eis.p_1;
alex.p_0 = eis.p_0;
testoPag2Prec = alex.p_2[1];
testoPagPrec = alex.p_1[1];
// settaggi comuni
eis.cp.basePageName = t[1];
eis.cp.basePageNum = t[2];
eis.cp.title = eis.p_0[0];
mw.config.set('wgTitle', eis.cp.title);
mw.config.set('wgPageName', /.+\//.exec(mw.config.get('wgPageName'))[0] + eis.cp.basePageNum);
// oscuramento next se ultima pagina e prev se prima
if (eis.cp.basePageNum >= eis.indexLength) $('#wpNext').css('display', 'none'); else $('#wpNext').css('display', 'inline');
if (eis.cp.basePageNum === 1) $('#wpPrev').css('display', 'none'); else $('#wpPrev').css('display', 'inline');
// modifica link Leggi e Modifica
if ($('#ca-view a').length === 1) {
eis.cp.linksUrl = $('#ca-view a').attr('href').replace(/\d+$/, eis.cp.basePageNum);
$('#ca-view a').attr('href', eis.cp.linksUrl);
$('#ca-edit a').attr('href', eis.cp.linksUrl);
}
let urlpc = /.+\//.exec($('#ca-nstab-page a').attr('href'))[0] + eis.cp.basePageNum;
$('#ca-nstab-page a').attr('href', urlpc).attr('target', '_blank');
urlpc = /.+\//.exec($('#ca-talk a').attr('href'))[0] + eis.cp.basePageNum;
$('#ca-talk a').attr('href', urlpc).attr('target', '_blank');
if ($('#croptool').length > 0) {
eis.cp.croptool = $('#t-cropNew a').attr('href').replace(/\d+$/, eis.cp.basePageNum);
$('#t-cropNew a').attr('href', eis.cp.croptool);
}
const urlImg = $('.prp-page-image img').attr('src').match(/(.+page)(\d+)(-.+)/);
eis.cp.imageUrl = urlImg[1] + eis.cp.basePageNum + urlImg[3];
// assegno valori alle variabili globali testoPagPrec e testo2PagPrec per renderli visibili a autoPt e autoRi7
testoPagPrec = eis.p_1[1];
testo2PagPrec = eis.p_2[1];
$('#radioQuality4').css('visibility', 'hidden');
$('.prp-page-image img').attr('src', eis.cp.imageUrl);
if (eis.p_0[1].toString() === ',,') {
// caso pagina corrente non esistente
// leggo la pagina...
$.get(`${mw.config.get('wgServer')}/w/index.php?title=${mw.config.get('wgPageName')}&action=edit&redlink=1`, (data) => {
$('#wpTextbox1').val($('#wpTextbox1', $(data)).val());
eis.cp.header = '';
eis.cp.footer = '';
$('#wpHeaderTextbox').val(eis.cp.header);
$('#wpFooterTextbox').val(eis.cp.footer);
// eseguo autoRi, Rv, postOcr, regex
// preOCR();
$('#buttonautoRi').click();
$('#buttonpostOCR').click();
// $("#button6").click();
$('#buttonRunregex').click();
eis.p_0[1][1] = $('#wpTextbox1').val();
eis.cp.user = mw.config.get('wgUserName');
eis.cp.level = '1';
$(`#radiobuttons input[value='${eis.cp.level}']`).click();
pagePreview();
});
} else {
// caso pagina esistente
eis.cp.user = eis.p_0[1][0].match(/user="([^"]*)" \/>/)[1];
eis.cp.level = eis.p_0[1][0].match(/level="(\d+)" /)[1];
eis.cp.header = $.trim(eis.p_0[1][0].replace(/<noinclude\><pagequality.+?>/, '').replace('</noinclude>', ''));
eis.cp.footer = $.trim(eis.p_0[1][2].replace('<noinclude>', '').replace('<references/>', '').replace('</noinclude>', ''));
$('#wpHeaderTextbox').val(eis.cp.header);
$('#wpFooterTextbox').val(eis.cp.footer);
$('#wpTextbox1').val(eis.p_0[1][1]);
// if level=3 and user is another one, or if level=4 display radiobutton4
if ((eis.cp.level === '3' && eis.cp.user !== mw.config.get('wgUserName')) || eis.cp.level === '4') $('#radioQuality4').css('visibility', 'visible');
$(`#radiobuttons input[value='${eis.cp.level}']`).click();
pagePreview();
}
});
$('.prp-page-image img').css('top', '0');
$('#wpTextbox1').scrollTop(0);
} // fine pp()
function chiudiEditBox() {
$('#sfondoeis').toggle();
} // fine chiudiEditBox
// build wikitext of whole page (header, body, footer)
function pageBuild() {
const template = '<noinclude><pagequality level="#LEVEL#" user="#USER#" />#HEADER#</noinclude>' +
'#BODY#<noinclude>#FOOTER#\n</noinclude>';
let wikicode = template.replace('#HEADER#', $('#wpHeaderTextbox').val())
.replace('#BODY#', $('#wpTextbox1').val())
.replace('#FOOTER#', $('#wpFooterTextbox').val());
if (eis.cp.level === $('input:checked', '#radiobuttons').val()) {
wikicode = wikicode.replace('#LEVEL#', eis.cp.level).replace('#USER#', eis.cp.user);
} else {
wikicode = wikicode.replace('#LEVEL#', $('input:checked', '#radiobuttons').val())
.replace('#USER#', mw.config.get('wgUserName'));
}
return wikicode;
} // fine pageBuid()
// saves page
function pageSave(azione) {
const wikicode = pageBuild();
new mw.Api().postWithToken('edit', {
action: 'edit',
title: eis.cp.title,
summary: $('#wpComment').val(),
text: wikicode,
}).done((data) => {
if (data && data.edit && data.edit.result === 'Success') {
$('#ok_img').toggle();
setTimeout(() => {
$('#ok_img').toggle();
}, 500);
if (azione === 1 && eis.cp.basePageNum < eis.indexLength) $('#wpNext').click();
if (azione === -1) $('#wpPrev').click();
} else {
alert('Errore nel salvataggio della pagina');
}
});
} // fine pageSave()
// displays preview
function pagePreview() {
// caricamento preview
const wikicode = pageBuild();
$.ajax({
url: mw.util.wikiScript('api'),
data: {
format: 'json',
action: 'parse',
title: eis.cp.title,
summary: 'ajax preview',
text: wikicode,
time: $.now(),
},
dataType: 'json',
type: 'POST',
success(data) {
if (data && data.parse) {
$('#previewContent').html($(data.parse.text['*']));
} 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(xhr) {
alert('Error: Request failed.');
},
});
} // fine pagePreview()
mw.pagePreview = pagePreview;
// text selection from html view
function getSelectedText() {
if (window.getSelection) {
return window.getSelection().toString();
} else if (document.selection) {
return document.selection.createRange().text;
}
return '';
}
activate();
return false;
}(jQuery, mw));