MediaWiki:Gadget-textSelect.js

Da Wikisource.

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>' +
	   "&nbsp;&nbsp;&nbsp;"+
	   '<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);