<!--

    Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!initPage
    setResourceBundle(key="i18nc" bundle="org.glassfish.common.admingui.Strings")
    setResourceBundle(key="help_common" bundle="org.glassfish.common.admingui.Helplinks");
    setResourceBundle(key="osgi" bundle="org.glassfish.osgi.admingui.Strings")
/>
<!composition template="/templates/default.layout"  guiTitle="" >
<!define name="content">
    <event>
    <!beforeCreate
        getRequestValue(key="instanceName" value="#{pageSession.instanceName}");
        urlencode(value="#{pageSession.instanceName}" encoding="UTF-8" result="#{pageSession.encodedInstanceName}");
        setSessionAttribute(key="standaloneInstanceTabs" value="consoleStandaloneInst");
	getConsoleUrl(instanceName="#{pageSession.instanceName}", consoleUrl="#{pageSession.osgiConsoleUrl}");
        />
    </event>
            <sun:form id="propertyForm">
#include "/cluster/standalone/standaloneInstanceTabs.inc"
            </sun:form>
<f:verbatim>
    <script type="text/javascript">
        document.body.style.cursor = 'auto';
    </script>
    <iframe src="#{pageSession.osgiConsoleUrl}" style="overflow:auto; width:100%; height:100%; border:0px;">
    </iframe>
</f:verbatim>

</define>
</composition>

