Login

La nostra messagebox ora ben si presta ad essere usata in applicazioni.

Tuttavia ancora ha un difetto non indifferente: posso creare una sola istanza (ovvero, i metodi di callback accedono genericamente all'oggetto msgBox, senza avere una possibilità di identificarne l'origine).

Quindi: per poter posizionare dinamicamente la messagebox a seconda delle necessità dovrò invocare il metodo di posizionamento ad ogni chiamata: isolo la funzione e mi creo un paio di proprietà per accedere all'allineamento dal metodo esterno:

	this.horizontalAlign = "center"
this.verticalAlign = "center"

E creo la nuova funzione setDivAlign() che verrà invocata automaticamente da show()

_msgBox.prototype.setDivAlign = function()
{
with (this)
{
// centro il message box
var aLayerWidth = divMsgBox.style.width;
var aLayerHeight = divMsgBox.style.height;

var cleft = parseInt(windowWidth)/2-parseInt(aLayerWidth)/2+'px';
var ctop = parseInt(windowHeight)/2-parseInt(aLayerHeight)/2+'px';

switch (horizontalAlign)
{
case "left":
cleft = "1px";
break;
case "right":
cleft = "" + parseInt(windowWidth)-parseInt(aLayerWidth) + "px";
break;
}


switch (verticalAlign)
{
case "top":
ctop = "1px";
break;
case "bottom":
ctop = "" + parseInt(windowHeight)-parseInt(aLayerHeight) + "px";
break;
}

divMsgBox.style.left = cleft;
divMsgBox.style.top = ctop;
}
}

Ecco fatto. Ora ho un workaround per il problema (posso usare un'unica msgBox e visualizzarla in posizioni diverse; sarà sufficiente posizionarla con 

		msgBox.horizontalAlign = 'center';
msgBox.ask('dormi?', elaboraRisposta, 'una domanda')

prima dell'invocazione.

 


I file descritti in questo articolo si possono scaricare dall'introduzione

 

 

Switch to Desktop Version