return (ItsNatModalLayerHTMLImpl)parentComp;
}
public void initModalLayer()
{
ClientDocumentStfulImpl clientDoc = getClientDocumentStful();
Browser browser = clientDoc.getBrowser();
Element layerElem = parentComp.getElement();
int zIndex = parentComp.getZIndex();
String background = parentComp.getBackground();
float opacity = parentComp.getOpacity();
// La no definici�n de la propiedad background supone usar los valores
// por defecto, y lo normal es que background-color sea "transparent" por defecto.
String backgroundProp;
if ( (background != null) &&
(browser.hasHTMLCSSOpacity() || (opacity >= (float)0.5)) )
backgroundProp = background;
else
{
if (background == null) // Transparente (valor por defecto normal)
{
// Vemos qu� casos el fondo transparente no es v�lido
if ((browser instanceof BrowserMSIEOld)||(browser instanceof BrowserMSIE9))
{
// El fondo transparente ignora el z-index, los elementos por debajo son pulsables,
// evitamos as� esto.
backgroundProp = "white";
opacity = 0;
}
else
backgroundProp = null;
}
else backgroundProp = background;
}
StringBuilder code = new StringBuilder();
String elemLayerRef = clientDoc.getNodeReference(layerElem,true,true);
code.append( "var elem = " + elemLayerRef + ";\n" );
{
StringBuilder styleCode = new StringBuilder();
styleCode.append( "position:absolute; top:0px; left:0px; width:1px; height:1px; margin:0px; padding:0px; border:0px; " ); // border:1px red solid; para testear
styleCode.append( "z-index:" + zIndex + "; " );
if (browser.hasHTMLCSSOpacity()) // Evitamos poner la opacidad si no se soporta, por ej. en Opera Mobile 9.7 beta hay un bug que hace que se oculte el nodo si opacity < 1
{
styleCode.append( "opacity:" + opacity + "; " );
if (browser instanceof BrowserMSIEOld)
{
// Por script ser�a: http://msdn.microsoft.com/en-us/library/ms532847(VS.85).aspx#Scripting_Filters
int opInt = (int)(100*opacity);
styleCode.append( "filter:alpha(opacity=" + opInt + "); " ); // Equivale en CSS a: filter:alpha(opacity=" + opInt + ") La sintaxis: elem.style.filter.opacity = .. s�lo funciona si el filtro ya est� presente
}
}
if (backgroundProp != null)
styleCode.append( "background:" + backgroundProp + "; " );
else
{
if (browser instanceof BrowserOpera)
{
// El color transparente por s� solo no respeta el z-index, hay que "ayudar"
// Probado en Opera 9.63 y Mobile v9.5, 9.7 y 9.8 (la v10). Podemos arreglarlo con una imagen transparente.
styleCode.append( "background-image:url('data:image/gif;base64,R0lGODlhCgAKAIAAAP///////yH5BAEKAAEALAAAAAAKAAoAAAIIjI+py+0PYysAOw==');");
}
}
// code.append( "elem.style.cssText = \"" + styleCode.toString() + "\";\n" );
// En el caso de MSIE el cliente sabe que hay que utilizar cssText
code.append("itsNatDoc.setAttribute(elem,\"style\",\"" + styleCode.toString() + "\");\n");
}
// Aparentemente podr�amos poner el layer con width:100% y height:100%
// tal que se redimensionara autom�ticamente cuando cambiara la ventana,
// sin embargo no es as�, este 100% representa el �rea visible sin contar
// la parte oculta y accesible usando el scroll, por lo que el recalculado
// es inevitable.
// El timer es para cuando se redimensiona la ventana por el usuario
// y se recoloca el HTML y tambi�n para el siguiente caso: aunque en
// teor�a el HTML que se a�ada despu�s para que se vea "encima" del ModalLayer
// puede cambiar las dimensiones de la p�gina, como tenemos un timer
// no hay problema, se corregir� s�lo.
// Lo de "style.width = '1px';" y "style.height = '1px';" tiene el siguiente
// sentido: nuestra capa modal busca tapar lo que hay "debajo" para ello
// se calcula la dimensi�n m�xima de la p�gina y la capa se redimensiona para ello.
// El problema es que si hay redimensionamiento o bien porque el usuario cambia
// el tama�o de la ventana, o porque nuevo HTML es a�adido (posiblemente con posicionamiento
// absoluto), el teor�a la dimensi�n "natural" de la p�gina cambiar�a sin embargo la propia
// capa modal ahora influye en el dimensionamiento, por eso haciendo
// width/height = '1px'; antes de obtener la nueva dimensi�n conseguimos
// que htmlElem.scrollWidth/scrollHeight se calculen sin contar con la capa modal.
String methodName = "initModalLayerHTML";
if (!clientDoc.isClientMethodBounded(methodName))
code.append(bindInitModalLayerMethod(methodName));
code.append("itsNatDoc." + methodName + "(elem);\n");
clientDoc.addCodeToSend(code.toString());
}