protected void renderShowHide(
      Element elem,
      String elemVarName,
      boolean hide,
      StringBuilder code,
      JSRenderElementImpl render) {
    if (NamespaceUtil.isSVGElement(elem)) {
      // El <script> de SVG no tiene objeto style, al menos en FireFox
      // y ASV3. Da igual lo que pase en los demás (Opera, Chrome etc) no
      // tiene sentido ocultar un <script>
      String localName = elem.getLocalName();
      if (localName.equals("script")) return;

      ClientDocumentStfulDelegateWebImpl clientDoc = getClientDocumentStfulDelegateWeb();
      BrowserWeb browser = clientDoc.getBrowserWeb();
      if (browser instanceof BrowserAdobeSVG) {
        // El <foreignObject> tampoco tiene objeto style en ASV3
        // este elemento ES visual pero como no está reconocido
        // en ASV3 los elementos hijo son tratados como elementos SVG
        // desconocidos sin visualización. Por tanto evitamos que de error.
        // De hecho la propiedad "display" no funciona en ASV3 (se ignora)
        // pero al menos no da error.
        if (localName.equals("foreignObject")) return;
      }
    }

    super.renderShowHide(elem, elemVarName, hide, code, render);
  }
 public static JSRenderElementImpl getJSRenderElement(
     Element elem, ClientDocumentStfulDelegateWebImpl clientDoc) {
   if (DOMUtilHTML.isHTMLElement(elem))
     return JSRenderHTMLElementImpl.getJSRenderHTMLElement(clientDoc.getBrowserWeb());
   else // El elemento puede estar en un documento (X)HTML pero no es HTML o XHTML. En documentos
        // no HTML todos los elementos tienen un namespace o DEBERIA declararse en el root del
        // documento
   return JSRenderOtherNSElementImpl.getJSRenderOtherNSElement(elem, clientDoc);
 }
  public static String getCodeDispatchEvent(
      EventTarget node,
      Event evt,
      String varResName,
      ClientDocumentStfulDelegateWebImpl clientDoc) {
    JSRenderEventImpl evtRender =
        JSRenderEventImpl.getJSEventRender(evt, clientDoc.getBrowserWeb());
    NodeLocationImpl nodeLoc = clientDoc.getNodeLocation((Node) node, true);

    return evtRender.getDispatchEvent(varResName, nodeLoc, evt, clientDoc);
  }
 public static String getSetNodePropertyCode(
     Node node,
     String propertyName,
     String value,
     boolean cacheIfPossible,
     ClientDocumentStfulDelegateWebImpl clientDoc) {
   return clientDoc.getNodeReference(node, cacheIfPossible, true)
       + "."
       + propertyName
       + "="
       + toTransportableStringLiteral(value, clientDoc.getBrowserWeb())
       + ";\n"; // El \n es un embellecedor
 }
  public int getTimeout() {
    int timeout = super.getTimeout();
    if (timeout <= 0) return -1;

    ClientDocumentStfulDelegateWebImpl clientDoc = getClientDocumentStfulDelegateWeb();
    BrowserWeb browser = clientDoc.getBrowserWeb();
    if ((browser instanceof BrowserGecko)
        || (browser instanceof BrowserOperaOld)
        || (browser instanceof BrowserAdobeSVG)
        || // ASV
        (browser
            instanceof
            BrowserBatik)) // En Batik applet no hay redimensionamiento porque no es normal cambiar
      // las dimensiones del applet
      return -1; // No es necesario el redimensionamiento, se redimensiona automáticamente cuando
    // cambia el cuadro (gracias a los valores "100%")

    return timeout;
  }