Examples of ItsNatStfulDocumentTemplateAttachedServerImpl


Examples of org.itsnat.impl.core.template.ItsNatStfulDocumentTemplateAttachedServerImpl

        return docTemplate;
    }

    public ItsNatDocumentTemplate registerItsNatDocumentTemplateAttachedServer(String name,String mime)
    {
        ItsNatStfulDocumentTemplateAttachedServerImpl docTemplate = ItsNatDocumentTemplateImpl.createItsNatStfulDocumentTemplateAttachedServer(name, mime,this);
        registerItsNatDocumentTemplate(docTemplate);
        return docTemplate;
    }
View Full Code Here

Examples of org.itsnat.impl.core.template.ItsNatStfulDocumentTemplateAttachedServerImpl

        // recojan la salida como una cadena, pues dicha cadena la tenemos que meter
        // en un document.write en c�digo JavaScript.

        ClientDocumentAttachedServerImpl clientDocAS = getClientDocumentAttachedServer();

        ItsNatStfulDocumentTemplateAttachedServerImpl template = clientDocAS.getItsNatStfulDocumentTemplateAttachedServer();

        ItsNatServletResponseImpl itsNatResponse = getItsNatServletResponse();
        ItsNatServletRequestImpl itsNatRequest = itsNatResponse.getItsNatServletRequestImpl();

        ServletResponse responseOriginal = itsNatResponse.getServletResponse();
        ServletResponseAttachedServer servResWrapper = itsNatResponse.createServletResponseAttachedServer();
        itsNatResponse.setServletResponse(servResWrapper);

        RequestNormalLoadDocAttachedServerImpl delegRequest = new RequestNormalLoadDocAttachedServerImpl(template,getRequestAttachedServerLoadDoc(),itsNatRequest);
        itsNatRequest.setRequest(delegRequest); // Para que al procesar el request el ItsNatServletRequestImpl est� correctamente conectado a request de carga normal no al attached y el c�digo del usuario obtenga el ClientDocument normal por ejemplo
        delegRequest.process(null);
        ClientDocumentStfulImpl clientDocNormal = delegRequest.getClientDocumentStful();
        Browser browser = clientDocNormal.getBrowser();

        itsNatResponse.setServletResponse(responseOriginal); // restauramos

        // Los objetos ItsNatServletRequestImpl y ItsNatServletResponseImpl quedan vinculados
        // a los objetos RequestImpl y ResponseImpl de la carga normal y est� bien as�

        String resultMarkup = servResWrapper.getString(delegRequest.getResponse().getEncoding());

        StringBuilder code = new StringBuilder();
        code.append("itsnat.clean();\n");
        code.append("try{ delete window.itsnat; }catch(ex){}\n"); // Ya ha cumplido su funci�n

        boolean useOnLoad = clientDocAS.isOnLoadHanderUsed();

        // Sabemos que el markup son dos <script> con el c�digo inline
        if (template.isMIME_HTML() && !useOnLoad)
        {
            String resultMarkupStringLiteral = JSRenderImpl.toTransportableStringLiteral(resultMarkup, true, browser);
            code.append( "document.write(" + resultMarkupStringLiteral + ");\n" );
        }
        else // Caso de useOnLoad o no HTML MIME
        {
            // Es un poco absurdo volver al DOM pero es lo mejor
            // document.write no vale.
            ItsNatStfulDocumentImpl itsNatDoc = clientDocNormal.getItsNatStfulDocument();
            DocumentFragment docFrag = itsNatDoc.toDOM(resultMarkup);

            if (template.isMIME_XHTML() || (template.isMIME_HTML() && useOnLoad))
            {
                code.append("var root = document.body;\n");
                code.append("if (!root) root = document.getElementsByTagName(\"body\")[0];\n"); // Caso de MIME XHTML y WebKit
            }
            else // SVG y XUL
            {
                code.append("var root = document.documentElement;\n");
            }

            Element script = (Element)docFrag.getFirstChild();
            while(script != null)
            {
                CharacterData text = (CharacterData)script.getFirstChild();
                String scriptCode = text.getData(); // Si es un nodo Text puede tener el CDATA como parte del texto
                String prefix = "<![CDATA[";
                String suffix = "]]>";
                if (scriptCode.startsWith(prefix))
                    scriptCode = MarkupTemplateVersionImpl.removePrefixSuffix(scriptCode,prefix,suffix);
                String scriptCodeLiteral = JSRenderImpl.toTransportableStringLiteral(scriptCode, true, browser);

                if (template.isMIME_HTML() && useOnLoad)
                {
                    code.append("var script = document.createElement(\"script\");\n");
                    code.append("script.setAttribute(\"id\",\"" + script.getAttribute("id") + "\");\n");
                    if (clientDocAS.getBrowser() instanceof BrowserMSIEOld)
                    {
                        // Esto es porque haciendo script.text = ... da error al insertar (se cae el MSIE)
                        // yo creo que la culpa la tiene la eliminaci�n del <script> desde c�digo
                        // de dentro del <script> insertado via appendChild (no ocurre si es cargado via markup o via document.write())
                        // El evento onload de la p�gina no es ejecutado.
                        code.append("root.appendChild(script);");
                        code.append("eval(" + scriptCodeLiteral + ");\n");
                    }
                    else
                    {
                        code.append("script.appendChild(document.createTextNode(" + scriptCodeLiteral + "));");
                        code.append("root.appendChild(script);");
                    }
                }
                else if(template.isMIME_XHTML() || (template.isMIME_HTML() && useOnLoad))
                {
                    code.append("var script = document.createElement(\"script\");");
                    code.append("script.setAttribute(\"id\",\"" + script.getAttribute("id") + "\");");
                    code.append("script.appendChild(document.createCDATASection(" + scriptCodeLiteral + "));");
                    code.append("root.appendChild(script);");
                }
                else if(template.isMIME_SVG())
                {
                    code.append("var script = document.createElementNS(root.namespaceURI,\"script\");");
                    code.append("script.setAttribute(\"type\",\"application/ecmascript\");")// Yo creo que sobra pero por si acaso
                    code.append("script.setAttribute(\"id\",\"" + script.getAttribute("id") + "\");");
                    code.append("script.appendChild(document.createCDATASection(" + scriptCodeLiteral + "));");
                    code.append("root.appendChild(script);");
                }
                else if(template.isMIME_XUL())
                {
                    code.append("var script = document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"script\");");
                    code.append("script.setAttribute(\"id\",\"" + script.getAttribute("id") + "\");");
                    code.append("script.appendChild(document.createCDATASection(" + scriptCodeLiteral + "));");
                    code.append("root.appendChild(script);");
                }
                else throw new ItsNatException("Unsupported MIME: " + template.getMIME());


                script = (Element)script.getNextSibling();
            }
View Full Code Here

Examples of org.itsnat.impl.core.template.ItsNatStfulDocumentTemplateAttachedServerImpl

    public String genSendMarkupCodeByMethod()
    {
        StringBuilder code = new StringBuilder();

        ClientDocumentAttachedServerImpl clientDoc = getClientDocumentAttachedServer();
        ItsNatStfulDocumentTemplateAttachedServerImpl template = clientDoc.getItsNatStfulDocumentTemplateAttachedServer();

        ItsNatServletRequestImpl itsNatRequest = getRequest().getItsNatServletRequest();
        String url = itsNatRequest.getServletPath(true, true); // Devuelve un URL absoluto sin la query

        code.append("itsnat.init = function(markupOrig)\n");
        code.append("{ \n");
        code.append("  this.markupCode = escape(markupOrig); \n"); // http://xkr.us/articles/javascript/encode-compare/
        // http://support.microsoft.com/kb/208427 2,083 max len URL, hay que reservar espacio para la parte fija de la URL de ah� el valor de sliceLen
        // aunque otros navegadores soporten mayores URL hay que tener en cuenta que el servidor
        // tambi�n ha de aceptar URLs muy grandes, por lo que el criterio del IE yo creo que es el universal
        // v�lido para todos los casos
        code.append("  this.sliceLen = 1800;\n");
        code.append("  this.pos1 = 0;\n");
        code.append("  this.pos2 = Math.min(this.sliceLen,this.markupCode.length);\n");
        code.append("  this.scriptCount = 0;\n");
        code.append("  this.sendMarkupNext(); \n");
        code.append("}; \n");

        code.append("itsnat.contSendMarkup = function()\n");
        code.append("{ \n");
        code.append("  if (this.pos1 < this.markupCode.length) { this.sendMarkupNext(); return true; }\n");
        code.append("  else { this.endSendMarkup(); return false; } \n");
        code.append("}; \n");

        code.append("itsnat.endSendMarkup = function()\n");
        code.append("{ \n");
        code.append("  var url = \"" + url + "?itsnat_action=" + RequestImpl.ITSNAT_ACTION_ATTACH_SERVER + "&itsnat_subaction=load_doc&itsnat_client_id=" + clientDoc.getId() + "&timestamp=\" + new Date().getTime();\n");
        code.append("  this.writeScript(url);\n");
        code.append("}; \n");

        code.append("itsnat.sendMarkupNext = function()\n");
        code.append("{ \n");
        code.append("  var markupPiece = this.markupCode.substring(this.pos1,this.pos2);\n");
        // Sin embargo no podemos dejar un %NN a medias por ello para asegurarnos de que
        // no hemos cogido parcialmente un %NN vemos si el caracter actual es un % o el anterior
        // en ese caso tomamos una substring un poquito m�s peque�a
        code.append("  var redo = false;\n");
        code.append("  if (this.markupCode.charAt(this.pos2 - 1) == '%') { this.pos2 -= 1; redo = true; }\n");
        code.append("  if (this.markupCode.charAt(this.pos2 - 2) == '%') { this.pos2 -= 2; redo = true; }\n");
        code.append("  if (redo) markupPiece = this.markupCode.substring(this.pos1,this.pos2);\n");

        code.append("  if (typeof this.scriptGlobalCount == \"undefined\") this.scriptGlobalCount = 0;\n");
        code.append("  this.scriptGlobalCount++; "); // Para asegurar totalmente la unicidad en caso de env�os demasiado r�pidos

        code.append("  var url = \"" + url + "?itsnat_action=" + RequestImpl.ITSNAT_ACTION_ATTACH_SERVER + "&itsnat_subaction=load_markup&itsnat_client_id=" + clientDoc.getId() + "&timestamp=\" + new Date().getTime() + \"-\" + this.scriptGlobalCount + \"&itsnat_markup_code=\" + markupPiece;\n");
        code.append("  this.writeScript(url);\n");
        code.append("  this.pos1 = this.pos2; this.pos2 += this.sliceLen;\n");
        code.append("  if (this.pos2 > this.markupCode.length) this.pos2 = this.markupCode.length;\n");
        code.append("}; \n");

        code.append("itsnat.writeScript = function(url)\n");
        code.append("{ \n");
        code.append("  var id = \"itsnat_script_loader_\" + this.scriptCount;\n");

        if (template.isMIME_HTML())
        {
            code.append("  document.write('<script id=\"' + id + '\" src=\"' + url + '\"><\\/script>');\n"); // Usamos src="..." en vez de src='...' porque encodeURIComponent no "escapea" el caracter: ' (no se si esto es as� ahora que se usa escape pero funciona)
        }
        else
        {
            if (template.isMIME_XHTML())
            {
                code.append("var root = document.body;");
                code.append("if (!root) root = document.getElementsByTagName(\"body\")[0];"); // Caso de MIME XHTML y WebKit
            }
            else // SVG y XUL
            {
                code.append("var root = document.documentElement;");
            }

            if (template.isMIME_XHTML())
            {
                // En WebKit (probado Chrome 5 y Safari 5) no he conseguido
                // que el attachment se haga antes del evento load de la p�gina
                code.append("var script = document.createElement(\"script\");");
                code.append("script.src = url;");
                code.append("script.id = id;");
            }
            else if(template.isMIME_SVG())
            {
                code.append("var script = document.createElementNS(root.namespaceURI,\"script\");");
                code.append("script.setAttribute(\"type\",\"application/ecmascript\");")// Yo creo que sobra pero por si acaso
                code.append("script.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",url);\n");
                code.append("script.setAttribute(\"id\",id);");
            }
            else if(template.isMIME_XUL())
            {
                code.append("var script = document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"script\");");
                code.append("script.src = url;\n");
                code.append("script.id = id;");
            }
            else throw new ItsNatException("Unsupported MIME: " + template.getMIME());

            code.append("root.appendChild(script);");
        }

        code.append("  this.scriptCount++;\n");
View Full Code Here

Examples of org.itsnat.impl.core.template.ItsNatStfulDocumentTemplateAttachedServerImpl

    public String genSendMarkupCodeByMethod()
    {
        StringBuilder code = new StringBuilder();

        ClientDocumentAttachedServerImpl clientDoc = getClientDocumentAttachedServer();
        ItsNatStfulDocumentTemplateAttachedServerImpl template = clientDoc.getItsNatStfulDocumentTemplateAttachedServer();

        ItsNatServletRequestImpl itsNatRequest = getRequest().getItsNatServletRequest();
        String url = itsNatRequest.getServletPath(true, true); // Devuelve un URL absoluto sin la query

        boolean useOnLoad = clientDoc.isOnLoadHanderUsed();

        code.append("itsnat.init = function(markupOrig)\n");
        code.append("{ \n");

        code.append("  var url = \"" + url + "?itsnat_action=" + RequestImpl.ITSNAT_ACTION_ATTACH_SERVER + "&itsnat_subaction=load_markup&itsnat_client_id=" + clientDoc.getId() + "&timestamp=\" + new Date().getTime();\n"); // El timestamp es simplemente para evitar cacheos

        if (template.isMIME_HTML())
        {
            // Haciendo document.write nos ahorramos el a�adir usando document.body que puede no estar definido si es MIME XHTML en WebKit etc
            // En esta primera fase s� podemos usar document.write() independientemente de lo que
            // diga el valor de useOnLoad, es si se ejecuta el onload cuando no se puede
            code.append("  document.write('<iframe id=\"itsnat_iframe_loader\" name=\"itsnat_iframe_loader\" src=\"about:blank\" style=\"display:none\" onload=\"" + (useOnLoad ? "itsnat.endSendMarkup();" : "") + "\"></iframe>');\n");
            code.append("  document.write('<form id=\"itsnat_form_loader\" action=\"' + url + '\" target=\"itsnat_iframe_loader\" method=\"post\">');\n");
            code.append("  document.write(' <input id=\"itsnat_markup_code\" name=\"itsnat_markup_code\" type=\"hidden\" />');\n");
            code.append("  document.write('</form>');\n");
            code.append("  var iframe = document.getElementById(\"itsnat_iframe_loader\");\n");
            code.append("  var form = document.getElementById(\"itsnat_form_loader\");\n");
            code.append("  var input = document.getElementById(\"itsnat_markup_code\");\n");
        }
        else
        {
            if (template.isMIME_XHTML())
            {
                code.append("var root = document.body;\n");
                code.append("if (!root) root = document.getElementsByTagName(\"body\")[0];\n"); // Caso de MIME XHTML y WebKit
                code.append("var iframe = document.createElement(\"iframe\");\n");
                code.append("var form = document.createElement(\"form\");\n");
                code.append("var input = document.createElement(\"input\");\n");
            }
            else if(template.isMIME_SVG() || template.isMIME_XUL())
            {
                code.append("var root = document.documentElement;\n");
                code.append("var iframe = document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"iframe\");\n");
                code.append("var form = document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"form\");\n");
                code.append("var input = document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"input\");\n");
            }
            else throw new ItsNatException("Unsupported MIME: " + template.getMIME());

            code.append("iframe.id = \"itsnat_iframe_loader\";\n");
            code.append("iframe.name = \"itsnat_iframe_loader\";\n");
            code.append("iframe.src = \"about:blank\";\n");
            code.append("iframe.style.display = \"none\";\n");
            code.append("iframe.onload = " + (useOnLoad ? "function () { itsnat.endSendMarkup(); }" : "null") + ";\n");
            code.append("root.appendChild(iframe);\n");

            code.append("form.id = \"itsnat_form_loader\";\n");
            code.append("form.action = url;\n");
            code.append("form.target = \"itsnat_iframe_loader\";\n");
            code.append("form.method = \"post\";\n");
            code.append("form.appendChild(input);\n");
            code.append("root.appendChild(form);\n");

            code.append("input.type = \"hidden\";\n");
            code.append("input.id = \"itsnat_markup_code\";\n");
            code.append("input.name = \"itsnat_markup_code\";\n");
        }

        code.append("  this.iframe = iframe;\n");
        code.append("  input.value = markupOrig;\n");
        code.append("  form.submit();\n");
        code.append("  form.parentNode.removeChild(form);\n"); // Elimina tambi�n el input

        if (!useOnLoad// Si no se usa onload podemos llamar aqu� directamente
            code.append("this.endSendMarkup();\n");

        code.append("}; \n");

        code.append("itsnat.endSendMarkup = function()\n");
        code.append("{ \n");
        code.append("  var url = \"" + url + "?itsnat_action=" + RequestImpl.ITSNAT_ACTION_ATTACH_SERVER + "&itsnat_subaction=load_doc&itsnat_client_id=" + clientDoc.getId() + "&timestamp=\" + new Date().getTime();\n"); // El timestamp es simplemente para evitar cacheos
        code.append("  var id = \"itsnat_script_loader\";\n");

        if (template.isMIME_HTML() && !useOnLoad// Tras el onload el documento est� cargado y document.write() ya no vale
        {
            code.append("document.write('<script id=\"' + id + '\" src=\"' + url + '\"><\\/script>');\n"); // Usamos src="..." en vez de src='...' porque encodeURIComponent no "escapea" el caracter: ' (no se si esto es as� ahora que se usa escape pero funciona)
            code.append("var script = document.getElementById(id); \n");
        }
        else  // O bien es ejecutado via onload=... o bien no es MIME text/html
        {
            if (template.isMIME_XHTML() || (template.isMIME_HTML() && useOnLoad))
            {
                code.append("var root = document.body;\n");
                code.append("if (!root) root = document.getElementsByTagName(\"body\")[0];\n"); // Caso de MIME XHTML y WebKit
            }
            else // SVG y XUL
            {
                code.append("var root = document.documentElement;\n");
            }

            if (template.isMIME_XHTML() || (template.isMIME_HTML() && useOnLoad))
            {
                code.append("var script = document.createElement(\"script\");\n");
                code.append("script.src = url;\n");
                code.append("script.id = id;\n");
            }
            else if(template.isMIME_SVG())
            {
                code.append("var script = document.createElementNS(root.namespaceURI,\"script\");\n");
                code.append("script.setAttribute(\"type\",\"application/ecmascript\");\n")// Yo creo que sobra pero por si acaso
                code.append("script.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",url);\n");
                code.append("script.setAttribute(\"id\",id);\n");
            }
            else if(template.isMIME_XUL())
            {
                code.append("var script = document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"script\");\n");
                code.append("script.src = url;\n");
                code.append("script.id = id;\n");
            }
            else throw new ItsNatException("Unsupported MIME: " + template.getMIME());

            code.append("root.appendChild(script);\n");
        }

        code.append("  this.script = script;\n");
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.