MediaWiki:Gadget-textSelect.js
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)
- Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
- Opera: premi Ctrl-F5.
(function (mw) {
// copia di Gadget-imagemap.js in via di adattamento come selettore di testo
var testoOCR='';
mw.newTag={};
mw.textSelect=function () {
creaBoxImgMap(); // si crea il box html
preview(); // si allineano box, testo e previewArea
}
function depix(pixel) {
return pixel.replace("px","")*1;
}
// funzione dummy da sistemare
function elaboraProsa(oggettoTesto){
// per ora nessuna modifica; da elaborare la suddivisione in paragrafi
return oggettoTesto.testo;
}
function elaboraPoesia(oggettoTesto) {
// elaborazione linee : indentature e righe vuote
var testo="";
var linea="";
if (oggettoTesto.length>2) {
oggettoTesto.linee=testIndent(oggettoTesto.linee);
oggettoTesto.linee=testvSpace(oggettoTesto.linee);
}
for (i=0;i<oggettoTesto.linee.length;i+=1){
linea=oggettoTesto.linee[i].text;
if (oggettoTesto.length>2) {
if (oggettoTesto.linee[i].indent===1) linea=" "+linea;
if (oggettoTesto.linee[i].indent===2) linea=" "+linea;
if (oggettoTesto.linee[i].indent>2) linea=" "+linea;
if (oggettoTesto.linee[i].vSpace===1) linea=linea+"\n";
}
testo+=linea+"\n";
}
return "<poem>\n"+testo+"\n</poem>";
}
function elaboraTitolo(oggettoTesto) {
var testo=oggettoTesto.testo.split("\n");
for (i=0;i<testo.length;i+=1) {
testo[i]= "{{Centrato|"+testo[i]+"}}";
}
return testo.join("\n");
}
function elaboraNote(oggettoTesto) {
testo=oggettoTesto.testo.split("\n");
for (i=0;i<testo.length;i+=1){
testo[i]="<ref>"+testo[i]+"</ref>";
}
return testo.join("\n");
}
mw.updateImagemap= function (tipo) {
leggiCorners();
// questo va modificato per gestire i valori da mw.pagina.parole
// var riga="rect "+mw.newTag.absTop[1]+" "+mw.newTag.absTop[0]+" "+mw.newTag.absBottom[1]+" "+mw.newTag.absBottom[0]+" [[#top|didascalia]]\n";
// testoOCR=$("#previewArea").val().replace("desc none\n}}",riga+"desc none\n}}");
catturaOCR(mw.newTag); // catturaOCR riceve le coordinate del rettangolo, le trasforma nelle coordinate
// assolute, estrae le parole comprese nell'area e le elabora; costruisce mw.textSelected
// con gli attributi parole, linee e testo
switch (tipo) {
case 0: {testoOCR=elaboraProsa(mw.textSelected);break;}
case 1: {testoOCR=elaboraPoesia(mw.textSelected);break;}
case 2: {testoOCR=elaboraTitolo(mw.textSelected);break;}
case 3: {testoOCR=elaboraNote(mw.textSelected);break;}
}
testoOCR=$("#previewArea").val()+"\n\n"+testoOCR;
$("#previewArea").val(testoOCR);
}
function catturaOCR(coordinate) {
/*
filtra le parole di mw.pagina.parole
le separa in linee
restituisce un oggetto mw.textSelected {parole, linee, testo}
*/
mw.textSelected={};
mw.textSelected.parole=[];
mw.textSelected.linee=[];
mw.textSelected.testo="";
var x1=coordinate.absTop[1];
var y1=coordinate.absTop[0];
var x2=coordinate.absBottom[1];
var y2=coordinate.absBottom[0];
for (i=0;i<mw.pagina.parole.length;i+=1) {
if (mw.pagina.parole[i].x1>x1 &&
mw.pagina.parole[i].y1>y1 &&
mw.pagina.parole[i].x2<x2 &&
mw.pagina.parole[i].y2<y2) mw.textSelected.parole.push(mw.pagina.parole[i]);
}
mw.textSelected.linee=mw.hocr.lineBuild(mw.textSelected.parole,1);
mw.textSelected.testo=estraiLista(mw.textSelected.linee,"text").join("\n");
localStorage.wg_textSelected_parole=JSON.stringify(mw.textSelected.parole);
localStorage.wg_textSelected_linee=JSON.stringify(mw.textSelected.linee);
return false;
}
// legge i valori dei due corners (leggiCorners); infine aggiorna previewArea
function preview(opzione) {
leggiCorners();
}
function leggiCorners() {
mw.newTag.top = [cornerTop[0].offsetTop, cornerTop[0].offsetLeft];
mw.newTag.bottom = [cornerBottom[0].offsetTop + 20, cornerBottom[0].offsetLeft + 20];
mw.newTag.fattore=mw.pagina.dimensioniPagina.x2/$("#imgContainer img").width(); // $("#imgContainer img").data("file-width")*1.0/$("#imgContainer img").width();
mw.newTag.absTop=[Math.round(mw.newTag.top[0]*mw.newTag.fattore),Math.round(mw.newTag.top[1]*mw.newTag.fattore)];
mw.newTag.absBottom=[Math.round(mw.newTag.bottom[0]*mw.newTag.fattore),Math.round(mw.newTag.bottom[1]*mw.newTag.fattore)];
}
//ridisegna il quadrato compreso tra i due angoli, in modo da tenerlo sempre allineato
function redrawCropArea() {
$('#cropArea').css({
top: $('#cornerTop').css('top'),
left: $('#cornerTop').css('left'),
width: ( depix($('#cornerBottom').css('left')) - depix($('#cornerTop').css('left')) +20) + 'px',
height: ( depix($('#cornerBottom').css('top')) - depix($('#cornerTop').css('top')) +20) + 'px' });
}
function creaBoxImgMap() {
imgOrig=$(".prp-page-image img").eq(0);
imgSmall = imgOrig.clone();
var imgCode="File:"+decodeURIComponent(imgOrig.attr("src").split("/")[8]).replace(/_/g," ")+"|"+"center"+"|"+imgOrig.width()+"px";
imgSmall.removeAttr("class").removeAttr("height").removeAttr("style").css("width", "inherit");
var buttonTop=[0,0];
var buttonBottom=[100,100];
cornerTop = $(
'<div id="cornerTop" style="border-left-width: 2px; border-left-style: solid; border-left-color: red; border-top-width: 2px; border-top-style: solid; border-top-color: red; position: absolute; z-index: 100; width: 20px; height: 20px; top: '+
buttonTop[0] + 'px; left: ' + buttonTop[1] + 'px;" >');
cornerBottom = $(
'<div id="cornerBottom" style="border-right-width: 2px; border-right-style: solid; border-right-color: red; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: red; position: absolute; z-index: 100; width: 20px; height: 20px; top: '+buttonBottom[0]+'px; left: '+buttonBottom[1]+'px;" class="ui-draggable"></div>');
//quadrato tratteggiato tra i due angoli
cropArea = $('<div id="cropArea" style="position: absolute; border: 1px dashed black; background-color:#afafaf; opacity:0.2"></div>');
var mainCropBox = $(
'<div id="mainCropBox" class="uls-menu" style="display: block; position: fixed; z-index: 9999; top: 0px; left: 50px; height: 600px; width: 95%; overflow: auto; border: 2px solid red; background-color:white; border-radius:7px; -webkit-border-radius:7px;">' +
'<div class="row"><span id="mainCropBox-close" class="icon-close" onclick="exitCursors()"></span></div>'+
'<table style="border-spacing: 0px;">' +
'<tr>' +
'<td>' +
'<div style="height: 600px;overflow: auto; position:relative;">' +
'<div id="imgContainer" style="width:550px;">' +
'</div>' +
'</div>' +
'</td>' +
'<td width="550px" valign="top">' +
'Cattura:'+
'<button type="button" title="prosa" onclick="mediaWiki.updateImagemap(0)" class="blue"><small>Prosa</small></button>' +
'<button type="button" title="poesia" onclick="mediaWiki.updateImagemap(1)" class="blue"><small>Poesia</small></button>' +
'<button type="button" title="titolo" onclick="mediaWiki.updateImagemap(2)" class="blue"><small>Titoli</small></button>' +
'<button type="button" title="note" onclick="mediaWiki.updateImagemap(3)" class="blue"><small>Note</small></button>' +
" "+
'<button type="button" title="Chiudi e esporta il testo" onclick="mediaWiki.data()" class="blue"><small>Esporta il testo</small></button>' +
'<button type="button" title="Chiudi senza esportare il testo" onclick="mediaWiki.exitCursors()" class="button"><small>Annulla</small></button>' +
/*'<span id="typeOfText" ><small>'+
'<span><input tabindex="5" title="prosa" type="radio" value="prosa" name="typeOfText" checked>prosa </span>'+
'<span ><input tabindex="6" title="poesia" type="radio" value="poesia" name="typeOfText">poesia </span>'+
'<span ><input tabindex="7" title="titolo" type="radio" value="titolo" name="typeOfText">titolo </span>'+
'<span ><input tabindex="8" title="note" type="radio" value="note" name="typeOfText">note </span>'+
'</small><span>'+*/
'<textarea style="margin-top: 2px; margin-bottom: 2px; height: 500px; width:100%;" id="previewArea" wrap="hard"></textarea><br/>' +
'</td>' +
'</tr>' +
'</table>' +
'</div>');
$("#mainCropBox").remove(); //rimuovi se per caso era gia' aperto
$("body").append(mainCropBox);
var td1 = $("#mainCropBox td div div").eq(0);
$("#previewArea").focusin(function () {mw.activeElement=this;});
td1.append(cornerTop).append(cornerBottom).append(cropArea).append(imgSmall);
$("#cornerTop").draggable({
containment: "parent",
scroll: false,
drag: function(event, ui) { preview(); redrawCropArea(); }
});
$("#cornerBottom").draggable({
containment: "parent",
scroll: false,
drag: function(event, ui) { preview(); redrawCropArea(); }
});
testoOCR="";
// inutile: all'inizio testo vuoto
// $("#previewArea").val(testoOCR);
redrawCropArea();
}
// uscita senza salvare
mw.exitCursors=function () {
// delete newTemplate;
// delete testo;
$("#mainCropBox").remove();
}
mw.data= function () {
testoOCR=$.trim($("#previewArea").val());
scriviBox(testoOCR);
$(".mw-summary").val("inserito testo OCR mediante textSelect");
// delete newTemplate;
// delete testo;
$("#mainCropBox").remove();
}
/*$(document).ready(function() {
if (wgCanonicalNamespace === "Page" || wgNamespaceNumber === 2 || wgPageName==="Wikisource:Pagina_delle_prove") { // && (wgAction === "edit" || wgAction === "submit")) {
if (mw.pagina===undefined) do_hocr();
$("#p-tb ul").append($('<li id="t-crop"><a href="javascript:mediaWiki.textSelect()">textSelect</a></li>'));
}
}); */
})(mediaWiki);