Changeset 5368da2


Ignore:
Timestamp:
Jul 24, 2016 9:21:14 AM (5 years ago)
Author:
str4d <str4d@…>
Branches:
master
Children:
e8e42a0
Parents:
a1fd8f49 (diff), ddf332e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

propagate from branch 'i2p.i2p' (head 57f8904e34e39111f13c427cb9fc92eeeb71afcd)

to branch 'i2p.i2p.str4d.ui' (head c4a8676261c7bbfa420927d931398c52f38ed03f)

Files:
3 added
99 edited
12 moved

Legend:

Unmodified
Added
Removed
  • apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java

    ra1fd8f49 r5368da2  
    10741074            if(!theme.equals(_config.getProperty(PROP_THEME))) {
    10751075                _config.setProperty(PROP_THEME, theme);
    1076                 addMessage(_t("{0} theme loaded, return to main i2psnark page to view.", theme));
     1076                addMessage(_t("{0} theme loaded.", theme));
    10771077                changed = true;
    10781078            }
  • apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java

    ra1fd8f49 r5368da2  
    139139     */
    140140    public void renderStatusHTML(StringBuilder buf) {
    141         buf.append(_kad.toString().replace("\n", "<br>\n"));
     141        buf.append(_kad.toString().replace("\n", "<br><hr class=\"debug\">\n"));
    142142    }
    143143
  • apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java

    ra1fd8f49 r5368da2  
    680680        long uptime = Math.max(1000, _context.clock().now() - _started);
    681681        StringBuilder buf = new StringBuilder(256);
    682         buf.append("<br><b>DHT DEBUG</b><br>TX: ").append(_txPkts.get()).append(" pkts / ")
     682        buf.append("<br><hr class=\"debug\"><b>DHT DEBUG</b><br><hr class=\"debug\">TX: ").append(_txPkts.get()).append(" pkts / ")
    683683           .append(DataHelper.formatSize2(_txBytes.get())).append("B / ")
    684684           .append(DataHelper.formatSize2(_txBytes.get() * 1000 / uptime)).append("Bps<br>" +
     
    690690                   "Sent tokens: ").append(_outgoingTokens.size()).append("<br>" +
    691691                   "Rcvd tokens: ").append(_incomingTokens.size()).append("<br>" +
    692                    "Pending queries: ").append(_sentQueries.size()).append("<br>");
     692                   "Pending queries: ").append(_sentQueries.size()).append("<br><hr>");
    693693        _tracker.renderStatusHTML(buf);
    694694        _knownNodes.renderStatusHTML(buf);
  • apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java

    ra1fd8f49 r5368da2  
    505505        if (showSort)
    506506            out.write("</a>");
    507         out.write("</th>\n<th align=\"center\">");
     507        out.write("</th>\n<th id=\"pagenav\" align=\"center\">");
    508508        if (total > 0 && (start > 0 || total > pageSize)) {
    509509            writePageNav(out, req, start, pageSize, total, noThinsp);
     
    831831                out.write(getQueryString(req, null, "", null));
    832832                out.write("\">");
    833                 out.write(toThemeImg("control_rewind_blue", _t("First"), _t("First page")));
     833                out.write(toThemeImg("first", _t("First"), _t("First page")));
    834834                out.write("</a>&nbsp;");
    835835                int prev = Math.max(0, start - pageSize);
     
    841841                    out.write(getQueryString(req, null, sprev, null));
    842842                    out.write("\">");
    843                     out.write(toThemeImg("control_back_blue", _t("Prev"), _t("Previous page")));
     843                    out.write(toThemeImg("previous", _t("Prev"), _t("Previous page")));
    844844                    out.write("</a>&nbsp;");
    845845                }
     
    847847                out.write(
    848848                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    849                           _imgPath + "control_rewind_blue.png\">" +
     849                          _imgPath + "first.png\">" +
    850850                          "&nbsp;" +
    851851                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    852                           _imgPath + "control_back_blue.png\">" +
     852                          _imgPath + "previous.png\">" +
    853853                          "&nbsp;");
    854854            }
     
    874874                    out.write(getQueryString(req, null, Integer.toString(next), null));
    875875                    out.write("\">");
    876                     out.write(toThemeImg("control_play_blue", _t("Next"), _t("Next page")));
     876                    out.write(toThemeImg("next", _t("Next"), _t("Next page")));
    877877                    out.write("</a>&nbsp;");
    878878                }
     
    882882                out.write(getQueryString(req, null, Integer.toString(last), null));
    883883                out.write("\">");
    884                 out.write(toThemeImg("control_fastforward_blue", _t("Last"), _t("Last page")));
     884                out.write(toThemeImg("last", _t("Last"), _t("Last page")));
    885885                out.write("</a>&nbsp;");
    886886            } else {
    887887                out.write("&nbsp;" +
    888888                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    889                           _imgPath + "control_play_blue.png\">" +
     889                          _imgPath + "next.png\">" +
    890890                          "&nbsp;" +
    891891                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    892                           _imgPath + "control_fastforward_blue.png\">");
     892                          _imgPath + "last.png\">");
    893893            }
    894894    }
     
    20642064        out.write("<form action=\"_post\" method=\"POST\">\n");
    20652065        writeHiddenInputs(out, req, "Add");
    2066         out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">");
     2066        out.write("<div class=\"addtorrentsection\">");
     2067        out.write("<input class=\"toggle_input\" id=\"toggle_addtorrent\" type=\"checkbox\"><label class=\"toggleview\" for=\"toggle_addtorrent\">");
    20672068        out.write(toThemeImg("add"));
    20682069        out.write(' ');
    20692070        out.write(_t("Add Torrent"));
    2070 
    2071         out.write("</span><hr>\n<table border=\"0\"><tr><td>");
     2071        out.write("</label>");
     2072
     2073        out.write("<hr>\n<table border=\"0\"><tr><td>");
    20722074        out.write(_t("From URL"));
    20732075        out.write(":<td><input type=\"text\" name=\"nofilter_newURL\" size=\"85\" value=\"" + newURL + "\" spellcheck=\"false\"");
    20742076        out.write(" title=\"");
    20752077        out.write(_t("Enter the torrent file download URL (I2P only), magnet link, maggot link, or info hash"));
    2076         out.write("\"> \n");
     2078        out.write("\">\n");
    20772079        // not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
    20782080        //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>");
     
    20802082        out.write(_t("Add torrent"));
    20812083        out.write("\" name=\"foo\" ><br>\n" +
    2082 
    20832084                  "<tr><td>");
     2085
    20842086        out.write(_t("Data dir"));
    20852087        out.write(":<td><input type=\"text\" name=\"nofilter_newDir\" size=\"85\" value=\"\" spellcheck=\"false\"");
     
    20952097        out.write("</div></form></div>"); 
    20962098    }
    2097    
     2099
    20982100    private void writeSeedForm(PrintWriter out, HttpServletRequest req, List<Tracker> sortedTrackers) throws IOException {
    20992101        out.write("<a name=\"add\"></a><div class=\"newtorrentsection\"><div class=\"snarkNewTorrent\">\n");
     
    21012103        out.write("<form action=\"_post\" method=\"POST\">\n");
    21022104        writeHiddenInputs(out, req, "Create");
    2103         out.write("<span class=\"snarkConfigTitle\">");
     2105        out.write("<input class=\"toggle_input\" id=\"toggle_createtorrent\" type=\"checkbox\"><label class=\"toggleview\" for=\"toggle_createtorrent\">");
    21042106        out.write(toThemeImg("create"));
    21052107        out.write(' ');
    21062108        out.write(_t("Create Torrent"));
    2107         out.write("</span><hr>\n<table border=\"0\"><tr><td>");
     2109        out.write("</label><hr>\n<table border=\"0\"><tr><td>");
    21082110        //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
    21092111        out.write(_t("Data to seed"));
     
    21132115        out.write(_t("File or directory to seed (full path or within the directory {0} )",
    21142116                    _manager.getDataDir().getAbsolutePath() + File.separatorChar));
    2115         out.write("\" ><tr><td>\n");
     2117        out.write("\" > <input type=\"submit\" class=\"create\" value=\"");
     2118        out.write(_t("Create torrent"));
     2119        out.write("\" name=\"foo\" >");
     2120        out.write("<tr><td>\n");
    21162121        out.write(_t("Trackers"));
    2117         out.write(":<td><table style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
     2122        out.write(":<td><table id=\"trackerselect\" style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
    21182123        out.write(_t("Primary"));
    21192124        out.write("</td><td align=\"center\">");
    21202125        out.write(_t("Alternates"));
    2121         out.write("</td><td rowspan=\"0\">" +
    2122                   " <input type=\"submit\" class=\"create\" value=\"");
    2123         out.write(_t("Create torrent"));
    2124         out.write("\" name=\"foo\" >" +
    2125                   "</td></tr>\n");
     2126        out.write("</td><td>");
     2127        out.write(_t("Tracker URL"));
     2128        out.write("</td></tr>\n");
     2129
    21262130        for (Tracker t : sortedTrackers) {
    21272131            String name = t.name;
    21282132            String announceURL = t.announceURL.replace("&#61;", "=");
     2133            String homeURL = t.baseURL;
    21292134            out.write("<tr><td>");
    21302135            out.write(name);
     
    21362141            out.write("></td><td align=\"center\"><input type=\"checkbox\" name=\"backup_");
    21372142            out.write(announceURL);
    2138             out.write("\" value=\"foo\"></td></tr>\n");
     2143            out.write("\" value=\"foo\"></td><td><a href=\"");
     2144            out.write(homeURL);
     2145            out.write("\">");
     2146            out.write(homeURL);
     2147            out.write("</a></td></tr>\n");
    21392148        }
    21402149        out.write("<tr><td><i>");
     
    21432152        if (_lastAnnounceURL == null)
    21442153            out.write(" checked");
    2145         out.write("></td><td></td></tr></table>\n");
     2154        out.write("></td><td></td><td></td></tr></table>\n");
    21462155        // make the user add a tracker on the config form now
    21472156        //out.write(_t("or"));
  • apps/i2ptunnel/jsp/editClient.jsp

    ra1fd8f49 r5368da2  
    2424    <% if (editBean.allowCSS()) {
    2525  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
    26     <link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
    27     <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
     26    <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
    2827    <% }
    2928  %>
     
    3332</head>
    3433<body id="tunnelEditPage">
    35     <div id="pageHeader">
    36     </div>
     34
    3735<%
    3836
     
    4240    <form method="post" action="list">
    4341
    44         <div id="tunnelEditPanel" class="panel">
    45             <div class="header">
     42        <div class="panel">
    4643                <%
    4744                String tunnelTypeName;
     
    5047                    tunnelTypeName = editBean.getTunnelType(curTunnel);
    5148                    tunnelType = editBean.getInternalType(curTunnel);
    52                   %><h4><%=intl._t("Edit proxy settings")%></h4><%
     49                  %><h2><%=intl._t("Edit proxy settings")%> (<%=editBean.getTunnelName(curTunnel)%>)</h2><%
    5350                } else {
    5451                    tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
    5552                    tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type"));
    56                   %><h4><%=intl._t("New proxy settings")%></h4><%
     53                  %><h2><%=intl._t("New proxy settings")%></h2><%
    5754                } %>
    5855                <input type="hidden" name="tunnel" value="<%=curTunnel%>" />
     
    8077                <% } %>
    8178                <input type="submit" class="default" name="action" value="Save changes" />
    82             </div>
    83      
    84             <div class="separator">
    85                 <hr />
    86             </div>
    87 
    88             <div id="nameField" class="rowItem">
    89                 <label for="name" accesskey="N">
    90                     <%=intl._t("Name")%>:(<span class="accessKey">N</span>)
    91                 </label>
    92                 <input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext" />               
    93             </div>
    94             <div id="typeField" class="rowItem">
    95                 <label><%=intl._t("Type")%>:</label>
    96                 <span class="text"><%=tunnelTypeName%></span>
    97             </div>
    98             <div id="descriptionField" class="rowItem">
    99                 <label for="description" accesskey="e">
    100                     <%=intl._t("Description")%>:(<span class="accessKey">E</span>)
    101                 </label>
    102                 <input type="text" size="60" maxlength="80" name="nofilter_description"  id="description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext" />               
    103             </div>
    104                  
    105             <div class="subdivider">
    106                 <hr />
    107             </div>
    108                  
    109             <div id="accessField" class="rowItem">
     79
     80    <table id="clientTunnelEdit" class="tunnelConfig">
     81        <tr>
     82            <th>
     83                <%=intl._t("Name")%>
     84            </th>
     85            <th>
     86                <%=intl._t("Type")%>
     87            </th>
     88        </tr>
     89        <tr>
     90            <td>
     91                <input type="text" size="30" maxlength="50" name="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext tunnelName" />
     92            </td>
     93            <td>
     94                <%=tunnelTypeName%>
     95            </td>
     96        </tr>
     97
     98        <tr>
     99            <th>
     100                <%=intl._t("Description")%>
     101            </th>
     102
     103            <th>
     104                <%=intl._t("Auto Start Tunnel")%>
     105            </th>
     106        </tr>
     107
     108        <tr>
     109            <td>
     110                <input type="text" size="60" maxlength="80" name="nofilter_description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescription" />
     111            </td>
     112
     113            <td>
     114                <input value="1" type="checkbox" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     115                <%=intl._t("Automatically start tunnel when router starts")%>
     116            </td>
     117        </tr>
     118
     119        <tr>
     120            <th colspan="2">
    110121         <% if ("streamrclient".equals(tunnelType)) { %>
    111                 <label><%=intl._t("Target")%>:</label>
     122                <%=intl._t("Target")%>
    112123         <% } else { %>
    113                 <label><%=intl._t("Access Point")%>:</label>
     124                <%=intl._t("Access Point")%>
    114125         <% } /* streamrclient */ %>
    115             </div>
    116             <div id="portField" class="rowItem">
    117                 <label for="port" accesskey="P">
    118                     <span class="accessKey">P</span>ort:
     126            </th>
     127        </tr>
     128        <tr>
     129            <td>
     130                <b><%=intl._t("Port")%>:</b>
    119131                    <% String value = editBean.getClientPort(curTunnel);
    120132                       if (value == null || "".equals(value.trim())) {
    121                            out.write(" <font color=\"red\">(");
     133                           out.write(" <span class=\"required\"><font color=\"red\">(");
    122134                           out.write(intl._t("required"));
    123                            out.write(")</font>");
     135                           out.write(")</font></span>");
    124136                       }
    125137                     %>
    126                 </label>
    127                 <input type="text" size="6" maxlength="5" id="port" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext" />               
    128             </div>
    129             <div id="reachField" class="rowItem">
    130                 <label for="reachableBy" accesskey="r">
     138                <input type="text" size="6" maxlength="5" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext port" placeholder="required" />
     139            </td>
     140
    131141         <%
    132             if ("streamrclient".equals(tunnelType)) {
    133                        out.write("Host:");
     142            if ("streamrclient".equals(tunnelType)) { %>
     143            <td>
     144                <b><%=intl._t("Host")%>:</b>
     145                    <%
    134146                       String targetHost = editBean.getTargetHost(curTunnel);
    135147                       if (targetHost == null || "".equals(targetHost.trim())) {
    136                            out.write(" <font color=\"red\">(");
     148                           out.write(" <span class=\"required\"><font color=\"red\">(");
    137149                           out.write(intl._t("required"));
    138                            out.write(")</font>");
     150                           out.write(")</font></span>");
    139151                       }   
    140152          %>
    141                 </label>
    142                 <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=targetHost%>" class="freetext" />               
     153
     154                <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=targetHost%>" class="freetext host" placeholder="required" />
     155            </td>
    143156         <% } else { %>
    144                     <%=intl._t("Reachable by")%>(<span class="accessKey">R</span>):
    145                 </label>
     157
     158            <td>
     159                <b><%=intl._t("Reachable by")%>:</b>
     160
    146161                <select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
    147162              <%
     
    159174              %>
    160175                </select>               
     176            </td>
    161177         <% } /* streamrclient */ %>
    162             </div>
     178        </tr>
     179
    163180         <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType)) {
    164           %><div id="portField" class="rowItem">
    165                 <label>
     181          %>                   
     182        <tr>
     183            <th colspan="2">
    166184                    <%=intl._t("Use SSL?")%>
    167                 </label>
    168                 <input value="1" type="checkbox" id="startOnLoad" name="useSSL" title="Clients use SSL to connect" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    169             </div>
     185            </th>
     186        </tr>
     187        <tr>
     188            <td colspan="2">
     189                <input value="1" type="checkbox" name="useSSL" title="Clients use SSL to connect" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     190                <%=intl._t("Clients use SSL to connect to tunnel")%>
     191            </td>
     192        </tr>
    170193         <% } /* tunnel types */ %>
    171194
    172             <div class="subdivider">
    173                 <hr />
    174             </div>
    175            
    176195            <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) {
    177           %><div id="destinationField" class="rowItem">
    178                 <label for="proxyList" accesskey="x">
    179                     <%=intl._t("Outproxies")%>(<span class="accessKey">x</span>):
    180                 </label>
    181                 <input type="text" size="30" id="proxyList" name="proxyList" title="List of Outproxy I2P destinations" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext" />               
    182             </div>
     196          %>
     197        <tr>
     198            <th colspan="2">
     199                    <%=intl._t("Outproxies")%>
     200            </th>
     201        </tr>
     202        <tr>
     203            <td colspan="2">
     204                <input type="text" size="30" name="proxyList" title="List of Outproxy I2P destinations" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext proxyList" />&nbsp;(<%=intl._t("comma separated eg. proxy1.i2p,proxy2.i2p")%>)
     205            </td>
     206        </tr>
     207
    183208              <% if ("httpclient".equals(tunnelType)) {
    184                  %><div id="destinationField" class="rowItem">
    185                    <label>
    186                        <%=intl._t("SSL Outproxies")%>:
    187                    </label>
    188                    <input type="text" size="30" id="sslProxyList" name="sslProxies" title="List of Outproxy I2P destinations" value="<%=editBean.getSslProxies(curTunnel)%>" class="freetext" />               
    189                    </div>
     209                 %>
     210        <tr>
     211            <th colspan="2">
     212                       <%=intl._t("SSL Outproxies")%>
     213            </th>
     214        </tr>
     215        <tr>
     216            <td colspan="2">
     217                   <input type="text" size="30" name="sslProxies" title="List of Outproxy I2P destinations" value="<%=editBean.getSslProxies(curTunnel)%>" class="freetext proxyList" />
     218            </td>
     219        </tr>
     220
    190221              <% }  // httpclient %>
    191             <div id="startupField" class="rowItem">
    192                 <label>
    193                     <%=intl._t("Use Outproxy Plugin")%>:
    194                 </label>
    195                 <input value="1" type="checkbox" id="shared" name="useOutproxyPlugin" title="Use plugin instead of above-listed proxies if available"<%=(editBean.getUseOutproxyPlugin(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    196                 <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
    197             </div>
     222        <tr>
     223            <th colspan="2">
     224                    <%=intl._t("Use Outproxy Plugin")%>
     225
     226            </th>
     227        </tr>
     228        <tr>
     229            <td colspan="2">
     230
     231                <input value="1" type="checkbox" name="useOutproxyPlugin" <%=(editBean.getUseOutproxyPlugin(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     232<%=intl._t("Use plugin instead of above-listed proxies if available")%>
     233            </td>
     234        </tr>
    198235            <% } else if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "streamrclient".equals(tunnelType)) {
    199           %><div id="destinationField" class="rowItem">
    200                 <label for="targetDestination" accesskey="T">
    201                     <%=intl._t("Tunnel Destination")%>(<span class="accessKey">T</span>):
     236          %>
     237        <tr>
     238            <th colspan="2">
     239                    <%=intl._t("Tunnel Destination")%>
     240            </th>
     241        </tr>
     242        <tr>
     243            <td colspan="2">
    202244                    <% String value2 = editBean.getClientDestination(curTunnel);
    203245                       if (value2 == null || "".equals(value2.trim())) {
    204                            out.write(" <font color=\"red\">(");
     246                           out.write(" <span class=\"required\"><font color=\"red\">(");
    205247                           out.write(intl._t("required"));
    206                            out.write(")</font>");
     248                           out.write(")</font></span>");
    207249                       }   
    208250                     %>
    209                 </label>
    210                 <input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext" />               
    211                 <span class="comment">(<%=intl._t("name, name:port, or destination")%>
     251
     252                <input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext destination" placeholder="required" />
     253                (<%=intl._t("name, name:port, or destination")%>
    212254                     <% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %>
    213255                         - <%=intl._t("b32 not recommended")%>
    214256                     <% } %> )
    215                 </span>
    216             </div>
     257            </td>
     258        </tr>
     259
    217260         <% } %>
     261
    218262         <% if (!"streamrclient".equals(tunnelType)) { %>
    219             <div id="sharedtField" class="rowItem">
    220                 <label for="shared" accesskey="h">
    221                     <%=intl._t("Shared Client")%>(<span class="accessKey">h</span>):
    222                 </label>
    223                 <input value="true" type="checkbox" id="shared" name="shared" title="Share tunnels with other clients"<%=(editBean.isSharedClient(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    224                 <span class="comment"><%=intl._t("(Share tunnels with other clients and irc/httpclients? Change requires restart of client proxy)")%></span>
    225             </div>
     263        <tr>
     264            <th colspan="2">
     265                <%=intl._t("Shared Client")%>
     266            </th>
     267        </tr>
     268        <tr>
     269            <td colspan="2">
     270                <input value="true" type="checkbox" name="shared" title="Share tunnels with other clients"<%=(editBean.isSharedClient(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     271                <%=intl._t("Share tunnels with other clients and irc/httpclients? (Change requires restart of client proxy tunnel)")%>
     272            </td>
     273        </tr>
     274
    226275         <% } // !streamrclient %>
    227             <div id="startupField" class="rowItem">
    228                 <label for="startOnLoad" accesskey="a">
    229                     <%=intl._t("Auto Start")%>(<span class="accessKey">A</span>):
    230                 </label>
    231                 <input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    232                 <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
    233             </div>
     276
    234277         <% if ("ircclient".equals(tunnelType)) { %>
    235             <div id="startupField" class="rowItem">
    236                 <label for="dcc" accesskey="d">
    237                     <%=intl._t("Enable DCC")%>:
    238                 </label>
    239                 <input value="1" type="checkbox" id="startOnLoad" name="DCC" title="Enable DCC"<%=(editBean.getDCC(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    240                 <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
    241             </div>
     278        <tr>
     279            <th colspan="2">
     280                    <%=intl._t("Enable DCC")%>
     281            </th>
     282        </tr>
     283        <tr>
     284            <td colspan="2">
     285                <input value="1" type="checkbox" name="DCC" title="Enable DCC"<%=(editBean.getDCC(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     286                <%=intl._t("Enable Direct Client-to-Client protocol. Note that this will compromise your anonymity and is <i>not</i> recommended.")%>
     287            </td>
     288        </tr>
     289
    242290         <% } // ircclient %>
    243            
    244             <div class="footer">
    245             </div>
    246         </div>
    247 
    248         <div id="tunnelAdvancedNetworking" class="panel">
    249             <div class="header">
    250                 <h4><%=intl._t("Advanced networking options")%></h4><br />
    251                 <span class="comment"><%=intl._t("(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)")%></span>
    252             </div>
    253 
    254             <div class="separator">
    255                 <hr />
    256             </div>
    257            
    258             <div id="tunnelOptionsField" class="rowItem">
    259                 <label><%=intl._t("Tunnel Options")%>:</label>
    260             </div>
    261             <div id="depthField" class="rowItem">
    262                 <label for="tunnelDepth" accesskey="t">
    263                     <%=intl._t("Length")%>(<span class="accessKey">t</span>):
    264                 </label>
     291    </table>
     292
     293    <h3><%=intl._t("Advanced Networking Options")%></h3>
     294
     295    <table class="tunnelConfig">
     296
     297
     298<% if (!"streamrclient".equals(tunnelType)) { %> <% // no shared client tunnels for streamr %>
     299        <tr>
     300            <td class="infohelp" colspan="2">
     301                <%=intl._t("Note: When this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!")%>
     302            </td>
     303        </tr>
     304         <% } // !streamrclient %>
     305        <tr>
     306            <th colspan="2">
     307                <%=intl._t("Tunnel Options")%>
     308            </th>
     309        </tr>
     310        <tr>
     311            <td>
     312                <b><%=intl._t("Length")%></b>
     313            </td>
     314
     315            <td>
     316                <b><%=intl._t("Variance")%></b>
     317            </td>
     318        </tr>
     319
     320        <tr>
     321            <td>
    265322                <select id="tunnelDepth" name="tunnelDepth" title="Length of each Tunnel" class="selectbox">
    266323                    <% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
     
    278335                <% }
    279336              %></select>
    280             </div>
    281             <div id="varianceField" class="rowItem">
    282                 <label for="tunnelVariance" accesskey="v">
    283                     <%=intl._t("Variance")%>(<span class="accessKey">V</span>):
    284                 </label>
     337            </td>
     338
     339            <td>
    285340                <select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Length" class="selectbox">
    286341                    <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
     
    293348                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._t("hop variance")%></option>
    294349                <% }
    295               %></select>               
    296             </div>               
    297             <div id="countField" class="rowItem">
    298                 <label for="tunnelQuantity" accesskey="C">
    299                     <%=intl._t("Count")%>(<span class="accessKey">C</span>):
    300                 </label>
     350              %></select>
     351            </td>
     352        </tr>
     353        <tr>
     354            <td>
     355                <b><%=intl._t("Count")%></b>
     356            </td>
     357
     358            <td>
     359                <b><%=intl._t("Backup Count")%></b>
     360            </td>
     361        </tr>
     362
     363        <tr>
     364            <td>
    301365                <select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
    302366                    <%=editBean.getQuantityOptions(curTunnel)%>
    303                 </select>               
    304             </div>
    305             <div id="backupField" class="rowItem">
    306                 <label for="tunnelBackupQuantity" accesskey="b">
    307                     <%=intl._t("Backup Count")%>(<span class="accessKey">B</span>):
    308                 </label>
     367                </select>
     368            </td>
     369
     370            <td>
    309371                <select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
    310372                    <% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
     
    316378                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._t("backup tunnels")%></option>
    317379                <% }
    318               %></select>               
    319             </div>
     380              %></select>
     381            </td>
     382        </tr>
    320383                           
    321             <div class="subdivider">
    322                 <hr />
    323             </div>
    324384
    325385         <% if (!"streamrclient".equals(tunnelType)) { %>
    326             <div id="profileField" class="rowItem">
    327                 <label for="profile" accesskey="f">
    328                     <%=intl._t("Profile")%>(<span class="accessKey">f</span>):
    329                 </label>
    330                 <select id="profile" name="profile" title="Connection Profile" class="selectbox">
     386        <tr>
     387            <th>
     388                <%=intl._t("Profile")%>
     389            </th>
     390
     391            <th>
     392                <%=intl._t("Delay Connect")%>
     393            </th>
     394
     395        </tr>
     396
     397        <tr>
     398            <td>
     399                <select id="connectionProfile" name="profile" title="Connection Profile" class="selectbox">
    331400                    <% boolean interactiveProfile = editBean.isInteractive(curTunnel);
    332401                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
    333402                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
    334403                </select>               
    335             </div>
    336             <div id="delayConnectField" class="rowItem">
    337                 <label for="connectDelay" accesskey="y">
    338                     <%=intl._t("Delay Connect")%>(<span class="accessKey">y</span>):
    339                 </label>
    340                 <input value="1000" type="checkbox" id="connectDelay" name="connectDelay" title="Delay Connection"<%=(editBean.shouldDelay(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    341                 <span class="comment">(<%=intl._t("for request/response connections")%>)</span>
    342             </div>
    343 
    344             <div class="subdivider">
    345                 <hr />
    346             </div>
     404            </td>
     405
     406            <td>
     407                <input value="1000" type="checkbox" name="connectDelay" title="Delay Connection"<%=(editBean.shouldDelay(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     408                (<%=intl._t("for request/response connections")%>)
     409            </td>
     410        </tr>
    347411         <% } // !streamrclient %>
    348412
    349             <div id="optionsField" class="rowItem">
    350                 <label><%=intl._t("Router I2CP Address")%>:</label>
    351             </div>
    352             <div id="optionsHostField" class="rowItem">
    353                 <label for="clientHost" accesskey="o">
    354                     <%=intl._t("Host")%>(<span class="accessKey">o</span>):
    355                 </label>
    356                 <input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />               
    357             </div>
    358             <div id="optionsPortField" class="rowItem">
    359                 <label for="clientPort" accesskey="r">
    360                     <%=intl._t("Port")%>(<span class="accessKey">r</span>):
    361                 </label>
    362                 <input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />               
    363             </div>
     413        <tr>
     414            <th colspan="2">
     415                <%=intl._t("Router I2CP Address")%>
     416            </th>
     417        </tr>
     418
     419        <tr>
     420            <td>
     421                <b><%=intl._t("Host")%>:</b>
     422                <input type="text" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext host" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
     423            </td>
     424
     425
     426            <td>
     427                <b><%=intl._t("Port")%>:</b>
     428                <input type="text" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext port" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
     429            </td>
     430        </tr>
    364431                 
    365432         <% if (!"streamrclient".equals(tunnelType)) { // streamr client sends pings so it will never be idle %>
    366             <div class="subdivider">
    367                 <hr />
    368             </div>
    369 
    370             <div id="optionsField" class="rowItem">
    371                 <label for="reduce" accesskey="c">
    372                     <%=intl._t("Delay tunnel open until required")%>(<span class="accessKey">D</span>):
    373                 </label>
    374             </div>
    375             <div id="portField" class="rowItem">
    376                 <label for="access" accesskey="c">
    377                     <%=intl._t("Enable")%>:
    378                 </label>
    379                 <input value="1" type="checkbox" id="startOnLoad" name="delayOpen" title="Delay Tunnel Open"<%=(editBean.getDelayOpen(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    380             </div>
     433
     434        <tr>
     435            <th colspan="2">
     436                <%=intl._t("Delay tunnel open until required")%>
     437            </th>
     438        </tr>
     439
     440        <tr>
     441            <td colspan="2">
     442                <input value="1" type="checkbox" name="delayOpen" title="Delay Tunnel Open"<%=(editBean.getDelayOpen(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     443                <%=intl._t("Delay opening client tunnel until activity is detected on the configured tunnel port")%>
     444            </td>
     445        </tr>
     446
    381447         <% } // !streamrclient %>
    382448                 
    383             <div class="subdivider">
    384                 <hr />
    385             </div>
    386            
    387             <div id="optionsField" class="rowItem">
    388                 <label for="reduce" accesskey="d">
    389                     <%=intl._t("Reduce tunnel quantity when idle")%>(<span class="accessKey">d</span>):
    390                 </label>
    391             </div>
    392             <div id="portField" class="rowItem">
    393                 <label for="access" accesskey="d">
    394                     <%=intl._t("Enable")%>:
    395                 </label>
    396                 <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    397             </div>
    398             <div id="portField" class="rowItem">
    399                 <label for="reduceCount" accesskey="d">
    400                     <%=intl._t("Reduced tunnel count")%>:
    401                 </label>
    402                 <input type="text" id="port" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext" />               
    403             </div>
    404             <div id="portField" class="rowItem">
    405                 <label for="reduceTime" accesskey="d">
    406                     <%=intl._t("Idle minutes")%>:
    407                 </label>
    408                 <input type="text" id="port" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext" />               
    409             </div>
    410            
    411             <div class="subdivider">
    412                 <hr />
    413             </div>
    414            
    415             <div id="optionsField" class="rowItem">
    416                 <label for="reduce" accesskey="c">
    417                     <%=intl._t("Close tunnels when idle")%>(<span class="accessKey">C</span>):
    418                 </label>
    419             </div>
    420             <div id="portField" class="rowItem">
    421                 <label for="access" accesskey="c">
    422                     <%=intl._t("Enable")%>:
    423                 </label>
    424                 <input value="1" type="checkbox" id="startOnLoad" name="close" title="Close Tunnels"<%=(editBean.getClose(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    425             </div>
    426             <div id="portField" class="rowItem">
    427                 <label for="access" accesskey="c">
    428                     <%=intl._t("New Keys on Reopen")%>:
    429                 </label>
    430                 <table border="0"><tr><!-- I give up -->
    431                 <td><input value="1" type="radio" id="startOnLoad" name="newDest" title="New Destination"
    432                      <%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" /></td>
    433                 <td><%=intl._t("Enable")%></td>
    434                 <td><input value="0" type="radio" id="startOnLoad" name="newDest" title="New Destination"
    435                      <%=(editBean.getNewDest(curTunnel) || editBean.getPersistentClientKey(curTunnel) ? "" : " checked=\"checked\"")%> class="tickbox" /></td>
    436                 <td><%=intl._t("Disable")%></td></tr>
    437                 </table>
    438             </div>
    439             <div id="portField" class="rowItem">
    440                 <label for="reduceTime" accesskey="c">
    441                     <%=intl._t("Idle minutes")%>:
    442                 </label>
    443                 <input type="text" id="port" name="closeTime" size="4" maxlength="4" title="Close Tunnel Idle Time" value="<%=editBean.getCloseTime(curTunnel)%>" class="freetext" />               
    444             </div>
    445                  
    446             <div class="subdivider">
    447                 <hr />
    448             </div>
     449        <tr>
     450            <th colspan="2">
     451                <%=intl._t("Reduce tunnel quantity when idle")%>
     452            </th>
     453        </tr>
     454
     455        <tr>
     456            <td colspan="2">
     457                <input value="1" type="checkbox" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     458                <%=intl._t("Reduce tunnel quantity when idle to conserve resources")%>
     459            </td>
     460        </tr>
     461
     462        <tr>
     463            <td>
     464                <b><%=intl._t("Reduced tunnel count")%>:</b>
     465                <input type="text" id="reducedTunnelCount" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext quantity" />
     466            </td>
     467
     468            <td>
     469                <b><%=intl._t("Idle period")%>:</b>
     470                <input type="text" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext period" />
     471                minutes
     472            </td>
     473        </tr>
     474
     475        <tr>
     476            <th colspan="2">
     477                <%=intl._t("Close tunnels when idle")%>
     478            </th>
     479        </tr>
     480
     481        <tr>
     482            <td>
     483                <input value="1" type="checkbox" name="close" title="Close Tunnels"<%=(editBean.getClose(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     484                <%=intl._t("Close client tunnels after specified idle period")%>
     485            </td>
     486
     487            <td>
     488                <b><%=intl._t("Idle period")%>:</b>
     489                <input type="text" name="closeTime" size="4" maxlength="4" title="Close Tunnel Idle Time" value="<%=editBean.getCloseTime(curTunnel)%>" class="freetext period" />   
     490                minutes
     491            </td>
     492        </tr>
     493
     494        <tr>
     495            <td colspan="2">
     496                <b><%=intl._t("New Keys on Reopen")%>:</b>
     497                <input value="1" type="radio" name="newDest" title="New Destination"
     498                        <%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     499                <%=intl._t("Enable")%>
     500                <input value="0" type="radio" name="newDest" title="New Destination"
     501                        <%=(editBean.getNewDest(curTunnel) || editBean.getPersistentClientKey(curTunnel) ? "" : " checked=\"checked\"")%> class="tickbox" />
     502                <%=intl._t("Disable")%>
     503            </td>
     504        </tr>
    449505
    450506         <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "socksirctunnel".equals(tunnelType) || "sockstunnel".equals(tunnelType)) { %>
    451             <div id="optionsField" class="rowItem">
    452                 <label for="privKeyFile" accesskey="k">
    453                     <%=intl._t("Persistent private key")%>(<span class="accessKey">k</span>):
    454                 </label>
    455             </div>
    456             <div id="portField" class="rowItem">
    457                 <label><%=intl._t("Enable")%>:</label>
    458                 <input value="2" type="radio" id="startOnLoad" name="newDest" title="New Destination"
    459                      <%=(editBean.getPersistentClientKey(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    460             </div>
    461             <div id="reachField" class="rowItem">
    462                 <label><%=intl._t("File")%>:</label>
    463                 <input type="text" size="30" id="clientHost" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />               
    464             </div>
     507
     508        <tr>
     509            <th colspan="2">
     510                <%=intl._t("Persistent private key")%>
     511            </th>
     512        </tr>
     513        <tr>
     514            <td>
     515                <input value="2" type="radio" name="newDest" title="New Destination"
     516                     <%=(editBean.getPersistentClientKey(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     517                <%=intl._t("Generate key to enable persistent client tunnel identity")%>
     518            </td>
     519            <td>
     520                <b><%=intl._t("File")%>:</b>
     521                <input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />
     522            </td>
     523        </tr>
    465524         <%
    466525            String destb64 = editBean.getDestinationBase64(curTunnel);     
    467526            if (destb64.length() > 0) {
    468            %>   <div id="destinationField" class="rowItem">
    469                     <label for="localDestination" accesskey="L">
    470                         <%=intl._t("Local destination")%>(<span class="accessKey">L</span>):
    471                     </label>
    472                     <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=destb64%></textarea>               
    473                 </div>
    474                 <div id="destinationField" class="rowItem">
    475                     <label><%=intl._t("Local Base 32")%>:</label>
    476                     <%=editBean.getDestHashBase32(curTunnel)%>
    477                 </div>
     527           %>   
     528
     529        <tr>
     530            <td colspan="2">
     531                <b><%=intl._t("Local destination")%></b>
     532            </td>
     533        </tr>
     534        <tr>
     535            <td colspan="2">
     536                    <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=destb64%></textarea>
     537            </td>
     538        </tr>
     539
     540        <tr>
     541            <td colspan="2">
     542                <b><%=intl._t("Local Base 32")%>:</b>
     543                <%=editBean.getDestHashBase32(curTunnel)%>
     544            </td>
     545        </tr>
    478546         <% } // if destb64  %>
    479 
    480             <div class="subdivider">
    481                 <hr />
    482             </div>
    483547         <% } %>
    484548
    485549         <% if ("httpclient".equals(tunnelType)) { %>
    486             <div id="optionsField" class="rowItem">
    487                 <label><%=intl._t("Pass User-Agent header through")%>:</label>
    488             </div>
    489             <div id="portField" class="rowItem">
    490                 <label><%=intl._t("Enable")%>:</label>
    491                 <input value="1" type="checkbox" id="startOnLoad" name="allowUserAgent" title="Do not spoof user agent string when checked"<%=(editBean.getAllowUserAgent(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    492             </div><br />
    493             <div id="optionsField" class="rowItem">
    494                 <label><%=intl._t("Pass Referer header through")%>:</label>
    495             </div>
    496             <div id="portField" class="rowItem">
    497                 <label><%=intl._t("Enable")%>:</label>
    498                 <input value="1" type="checkbox" id="startOnLoad" name="allowReferer" title="Do not block referer header when checked"<%=(editBean.getAllowReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    499             </div><br />
    500             <div id="optionsField" class="rowItem">
    501                 <label><%=intl._t("Pass Accept headers through")%>:</label>
    502             </div>
    503             <div id="portField" class="rowItem">
    504                 <label><%=intl._t("Enable")%>:</label>
    505                 <input value="1" type="checkbox" id="startOnLoad" name="allowAccept" title="Do not block accept headers when checked"<%=(editBean.getAllowAccept(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    506             </div><br />
    507             <div id="optionsField" class="rowItem">
    508                 <label><%=intl._t("Allow SSL to I2P addresses")%>:</label>
    509             </div>
    510             <div id="portField" class="rowItem">
    511                 <label><%=intl._t("Enable")%>:</label>
    512                 <input value="1" type="checkbox" id="startOnLoad" name="allowInternalSSL" title="Allow SSL to I2P addresses when checked"<%=(editBean.getAllowInternalSSL(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    513             </div>
    514             <div class="subdivider">
    515                 <hr />
    516             </div>
     550
     551        <tr>
     552            <th colspan="2">
     553                <%=intl._t("HTTP Filtering")%>
     554            </th>
     555        </tr>
     556
     557        <tr>
     558            <td>
     559                <input value="1" type="checkbox" name="allowUserAgent" title="Do not spoof user agent string when checked"<%=(editBean.getAllowUserAgent(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     560                <%=intl._t("Do not spoof User-Agent header")%>
     561            </td>
     562            <td>
     563                <input value="1" type="checkbox" name="allowReferer" title="Do not block referer header when checked"<%=(editBean.getAllowReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     564                <%=intl._t("Do not block Referer header")%>
     565            </td>
     566        </tr>
     567
     568        <tr>
     569            <td>
     570                <input value="1" type="checkbox" name="allowAccept" title="Do not block accept headers when checked"<%=(editBean.getAllowAccept(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     571<%=intl._t("Do not block Accept headers")%>
     572            </td>
     573
     574            <td>
     575                <input value="1" type="checkbox" name="allowInternalSSL" title="Allow SSL to I2P addresses when checked"<%=(editBean.getAllowInternalSSL(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     576                <%=intl._t("Allow SSL to I2P addresses")%>
     577            </td>
     578        </tr>
    517579         <% } // if httpclient %>
    518            
     580
    519581         <% if (true /* editBean.isAdvanced() */ ) {
    520582                int currentSigType = editBean.getSigType(curTunnel, tunnelType);
    521583           %>
    522             <div id="tunnelOptionsField" class="rowItem">
    523                 <label>
    524                     <%=intl._t("Signature type")%>
    525                     (<%=intl._t("Experts only!")%>)
    526                 </label>
    527             </div>
    528             <div id="hostField" class="rowItem">
    529               <div id="portField" class="rowItem">
    530                 <label>DSA-SHA1</label>
    531                 <input value="0" type="radio" id="startOnLoad" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    532               </div>
     584        <tr>
     585            <th colspan="2">
     586                <%=intl._t("Signature type")%> (<%=intl._t("Experts only!")%>)
     587            </th>
     588        </tr>
     589
     590        <tr>
     591            <td colspan="2">
     592                <span class="multiOption">
     593                    <input value="0" type="radio" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
     594                    DSA-SHA1
     595                </span>
     596
     597
    533598           <% if (editBean.isSigTypeAvailable(1)) { %>
    534               <div id="portField" class="rowItem">
    535                 <label>ECDSA-P256</label>
    536                 <input value="1" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    537               </div>
     599
     600                <span class="multiOption">
     601                    <input value="1" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
     602                    ECDSA-P256
     603                </span>
     604
     605
    538606           <% }
     607
    539608              if (editBean.isSigTypeAvailable(2)) { %>
    540               <div id="portField" class="rowItem">
    541                 <label>ECDSA-P384</label>
    542                 <input value="2" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    543               </div>
     609
     610                <span class="multiOption">
     611                    <input value="2" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
     612                    ECDSA-P384
     613                </span>
     614
    544615           <% }
    545616              if (editBean.isSigTypeAvailable(3)) { %>
    546               <div id="portField" class="rowItem">
    547                 <label>ECDSA-P521</label>
    548                 <input value="3" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    549               </div>
     617
     618                <span class="multiOption">
     619                    <input value="3" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
     620                    ECDSA-P521
     621                </span>
     622
     623
    550624           <% }
    551625              if (editBean.isSigTypeAvailable(7)) { %>
    552               <div id="portField" class="rowItem">
    553                 <label>Ed25519-SHA-512</label>
    554                 <input value="7" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    555               </div>
     626
     627                <span class="multiOption">
     628                    <input value="7" type="radio" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
     629                    Ed25519-SHA-512
     630                </span>
     631            </td>
     632        </tr>
    556633           <% }   // isAvailable %>
    557             </div>
    558                  
    559             <div class="subdivider">
    560                 <hr />
    561             </div>
     634         
    562635         <% } // isAdvanced %>
    563636
    564637         <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %>
    565             <div id="accessField" class="rowItem">
    566                 <label><%=intl._t("Local Authorization")%>:</label>
    567             </div>
    568             <div id="portField" class="rowItem">
    569                 <label>
    570                     <%=intl._t("Enable")%>:
    571                 </label>
    572                 <input value="1" type="checkbox" id="startOnLoad" name="proxyAuth" title="Check to require authorization for this service"<%=(editBean.getProxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    573             </div>
    574             <div id="portField" class="rowItem">
    575                 <label>
    576                     <%=intl._t("Username")%>:
    577                 </label>
    578                 <input type="text" id="clientPort" name="proxyUsername" title="Set username for this service" value="" class="freetext" />               
    579             </div>
    580             <div id="portField" class="rowItem">
    581                 <label>
    582                     <%=intl._t("Password")%>:
    583                 </label>
    584                 <input type="password" id="clientPort" name="nofilter_proxyPassword" title="Set password for this service" value="" class="freetext" />               
    585             </div>
    586             <div class="subdivider">
    587                 <hr />
    588             </div>
    589             <div id="accessField" class="rowItem">
    590                 <label><%=intl._t("Outproxy Authorization")%>:</label>
    591             </div>
    592             <div id="portField" class="rowItem">
    593                 <label>
    594                     <%=intl._t("Enable")%>:
    595                 </label>
    596                 <input value="1" type="checkbox" id="startOnLoad" name="outproxyAuth" title="Check if the outproxy requires authorization"<%=(editBean.getOutproxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    597             </div>
    598             <div id="portField" class="rowItem">
    599                 <label>
    600                     <%=intl._t("Username")%>:
    601                 </label>
    602                 <input type="text" id="clientPort" name="outproxyUsername" title="Enter username required by outproxy" value="<%=editBean.getOutproxyUsername(curTunnel)%>" class="freetext" />               
    603             </div>
    604             <div id="portField" class="rowItem">
    605                 <label>
    606                     <%=intl._t("Password")%>:
    607                 </label>
    608                 <input type="password" id="clientPort" name="nofilter_outproxyPassword" title="Enter password required by outproxy" value="<%=editBean.getOutproxyPassword(curTunnel)%>" class="freetext" />               
    609             </div>
    610             <div class="subdivider">
    611                 <hr />
    612             </div>
     638        <tr>
     639            <th colspan="2">
     640                <%=intl._t("Local Authorization")%>
     641            </th>
     642        </tr>
     643        <tr>
     644            <td colspan="2">
     645                <input value="1" type="checkbox" name="proxyAuth" title="Check to require authorization for this service"<%=(editBean.getProxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     646                <%=intl._t("Require local authorization for this service")%>
     647            </td>
     648        </tr>
     649
     650        <tr>
     651            <td>
     652                <b><%=intl._t("Username")%>:</b>
     653                <input type="text" name="proxyUsername" title="Set username for this service" value="" class="freetext username" />
     654            </td>
     655            <td>
     656                <b><%=intl._t("Password")%>:</b>
     657                <input type="password" name="nofilter_proxyPassword" title="Set password for this service" value="" class="freetext password" />
     658            </td>
     659        </tr>
     660
     661        <tr>
     662            <th colspan="2">
     663                <%=intl._t("Outproxy Authorization")%>
     664            </th>
     665        </tr>
     666        <tr>
     667            <td colspan="2">
     668                <input value="1" type="checkbox" id="startOnLoad" name="outproxyAuth" title="Check if the outproxy requires authorization"<%=(editBean.getOutproxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     669                <%=intl._t("Outproxy requires authorization")%>
     670            </td>
     671        </tr>
     672
     673        <tr>
     674            <td>
     675                <b><%=intl._t("Username")%>:</b>
     676                <input type="text" name="outproxyUsername" title="Enter username required by outproxy" value="<%=editBean.getOutproxyUsername(curTunnel)%>" class="freetext username" />
     677            </td>
     678
     679            <td>
     680                <b><%=intl._t("Password")%>:</b>
     681                <input type="password" name="nofilter_outproxyPassword" title="Enter password required by outproxy" value="<%=editBean.getOutproxyPassword(curTunnel)%>" class="freetext password" />
     682            </td>
     683        </tr>
     684
    613685         <% } // httpclient || connect || socks || socksirc %>
    614686
    615687         <% if ("httpclient".equals(tunnelType)) { %>
    616             <div id="optionsField" class="rowItem">
    617                 <label><%=intl._t("Jump URL List")%>:</label>
    618             </div>
    619             <div id="hostField" class="rowItem">
    620                 <textarea rows="2" style="height: 8em;" cols="60" id="hostField" name="jumpList" title="List of helper URLs to offer when a host is not found in your addressbook" wrap="off" spellcheck="false"><%=editBean.getJumpList(curTunnel)%></textarea>               
    621             </div>
    622             <div class="subdivider">
    623                 <hr />
    624             </div>
     688
     689        <tr>
     690            <th colspan="2">
     691                <%=intl._t("Jump URL List")%>
     692            </th>
     693        </tr>
     694        <tr>
     695            <td colspan="2">
     696                <textarea rows="2" style="height: 8em;" cols="60" id="hostField" name="jumpList" title="List of helper URLs to offer when a host is not found in your addressbook" wrap="off" spellcheck="false"><%=editBean.getJumpList(curTunnel)%></textarea>
     697            </td>
     698        </tr>
     699
    625700         <% } // httpclient %>
    626701
    627             <div id="customOptionsField" class="rowItem">
    628                 <label for="customOptions" accesskey="u">
    629                     <%=intl._t("Custom options")%>(<span class="accessKey">u</span>):
    630                 </label>
    631                 <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>               
    632             </div>
    633            
    634             <div class="footer">
    635             </div>
    636         </div>
    637         <div id="globalOperationsPanel" class="panel">
    638             <div class="header"></div>
    639             <div class="footer">
    640                 <div class="toolbox">
     702        <tr>
     703            <th colspan="2">
     704                <%=intl._t("Custom options")%>
     705            </th>
     706        </tr>
     707
     708        <tr>
     709            <td colspan="2">
     710                <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>
     711            </td>
     712        </tr>
     713
     714        <tr>
     715            <td class="buttons" colspan="2">
    641716                    <input type="hidden" value="true" name="removeConfirm" />
    642717                    <button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
    643                     <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%>(<span class="accessKey">D</span>)</button>
    644                     <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%>(<span class="accessKey">S</span>)</button>
    645                 </div>
    646             </div>
    647         </div>
    648     </form>
    649     <div id="pageFooter">
    650         </div>
     718                    <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%></button>
     719                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%></button>
     720            </td>
     721        </tr>
     722    </table>
     723</div>
     724</form>
     725
    651726<%
    652727
    653728  } else {
    654      %>Tunnels are not initialized yet, please reload in two minutes.<%
     729     %><div id="notReady"><%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%></div><%
    655730  }  // isInitialized()
    656731
  • apps/i2ptunnel/jsp/editServer.jsp

    ra1fd8f49 r5368da2  
    2424    <% if (editBean.allowCSS()) {
    2525  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
    26     <link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
    27     <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
     26    <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
    2827    <% }
    2928  %>
     
    3332</head>
    3433<body id="tunnelEditPage">
    35     <div id="pageHeader">
    36     </div>
     34
    3735<%
    3836
     
    4240    <form method="post" action="list">
    4341
    44         <div id="tunnelEditPanel" class="panel">
    45             <div class="header">
     42<div class="panel">
     43
    4644                <%
    4745                String tunnelTypeName;
     
    5048                    tunnelTypeName = editBean.getTunnelType(curTunnel);
    5149                    tunnelType = editBean.getInternalType(curTunnel);
    52                   %><h4><%=intl._t("Edit server settings")%></h4><%
     50                  %><h2><%=intl._t("Edit Server Settings")%> (<%=editBean.getTunnelName(curTunnel)%>)</h2><%
    5351                } else {
    5452                    tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
    5553                    tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type"));
    56                   %><h4><%=intl._t("New server settings")%></h4><%
     54                  %><h2><%=intl._t("New Server Settings")%></h2><%
    5755                } %>
    5856                <input type="hidden" name="tunnel" value="<%=curTunnel%>" />
     
    8078                <% } %>
    8179                <input type="submit" class="default" name="action" value="Save changes" />
    82             </div>
    83      
    84             <div class="separator">
    85                 <hr />
    86             </div>
    87 
    88             <div id="nameField" class="rowItem">
    89                 <label for="name" accesskey="N">
    90                     <%=intl._t("Name")%>(<span class="accessKey">N</span>):
    91                 </label>
    92                 <input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext" />               
    93             </div>
    94             <div id="typeField" class="rowItem">
    95                 <label><%=intl._t("Type")%>:</label>
    96                 <span class="text"><%=tunnelTypeName%></span>
    97             </div>
    98             <div id="descriptionField" class="rowItem">
    99                 <label for="description" accesskey="e">
    100                     <%=intl._t("Description")%>(<span class="accessKey">e</span>):
    101                 </label>
    102                 <input type="text" size="60" maxlength="80" name="nofilter_description"  id="description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext" />               
    103             </div>
    104             <div id="startupField" class="rowItem">
    105                 <label for="startOnLoad" accesskey="a">
    106                     <%=intl._t("Auto Start")%>(<span class="accessKey">A</span>):
    107                 </label>
    108                 <input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    109                 <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
    110             </div>
    111                  
    112             <div class="subdivider">
    113                 <hr />
    114             </div>
    115                  
    116             <div id="targetField" class="rowItem">
     80
     81    <table id="serverTunnelEdit" class="tunnelConfig">
     82        <tr>
     83            <th>
     84                <%=intl._t("Name")%>
     85            </th>
     86            <th>
     87                <%=intl._t("Type")%>
     88            </th>
     89        </tr>
     90
     91        <tr>
     92            <td>
     93                <input type="text" size="30" maxlength="50" name="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext tunnelName" />
     94            </td>
     95            <td>
     96                <%=tunnelTypeName%>
     97            </td>
     98        </tr>
     99
     100        <tr>
     101            <th>
     102                <%=intl._t("Description")%>
     103            </th>
     104
     105            <th>
     106                <%=intl._t("Auto Start Tunnel")%>
     107            </th>
     108        </tr>
     109
     110        <tr>
     111            <td>
     112                <input type="text" size="60" maxlength="80" name="nofilter_description"  title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescription" />               
     113            </td>
     114
     115            <td>
     116                <input value="1" type="checkbox" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     117                <%=intl._t("Automatically start tunnel when router starts")%>
     118            </td>
     119        </tr>
     120
     121        <tr>
     122            <th colspan="2">
    117123         <% if ("streamrserver".equals(tunnelType)) { %>
    118                 <label><%=intl._t("Access Point")%>:</label>
     124                <%=intl._t("Access Point")%>
    119125         <% } else { %>
    120                 <label><%=intl._t("Target")%>:</label>
     126                <%=intl._t("Target")%>
    121127         <% } %>
    122             </div>
     128            </th>
     129        </tr>
     130
     131        <tr>
    123132         <% if (!"streamrserver".equals(tunnelType)) { %>
    124             <div id="hostField" class="rowItem">
    125                 <label for="targetHost" accesskey="H">
    126                     <%=intl._t("Host")%>(<span class="accessKey">H</span>):
    127                 </label>
    128                 <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=editBean.getTargetHost(curTunnel)%>" class="freetext" />               
    129             </div>
     133            <td>
     134                <b><%=intl._t("Host")%>:</b>
     135                <input type="text" size="20" name="targetHost" title="Target Hostname or IP" value="<%=editBean.getTargetHost(curTunnel)%>" class="freetext host" />
     136            </td>
    130137         <% } /* !streamrserver */ %>
    131             <div id="portField" class="rowItem">
    132                 <label for="targetPort" accesskey="P">
    133                     <%=intl._t("Port")%>(<span class="accessKey">P</span>):
     138
     139            <td>
     140                <b><%=intl._t("Port")%>:</b>
    134141                    <% String value = editBean.getTargetPort(curTunnel);
    135142                       if (value == null || "".equals(value.trim())) {
    136                            out.write(" <font color=\"red\">(");
     143                           out.write(" <span class=\"required\"><font color=\"red\">(");
    137144                           out.write(intl._t("required"));
    138                            out.write(")</font>");
     145                           out.write(")</font></span>");
    139146                       }   
    140147                     %>
    141                 </label>
    142                 <input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=editBean.getTargetPort(curTunnel)%>" class="freetext" />               
    143             </div>
     148                <input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=editBean.getTargetPort(curTunnel)%>" class="freetext port" placeholder="required" />
     149            </td>
     150
    144151         <% if (!"streamrserver".equals(tunnelType)) { %>
    145             <div id="portField" class="rowItem">
    146                 <label>
    147                     <%=intl._t("Use SSL?")%>
    148                 </label>
    149                 <input value="1" type="checkbox" id="startOnLoad" name="useSSL" title="Use SSL to connect to target" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    150             </div>
     152        </tr>
     153
     154        <tr>
     155            <td colspan="2">
     156                <input value="1" type="checkbox" name="useSSL" title="Use SSL to connect to target" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     157                <%=intl._t("Use SSL to connect to target")%>
    151158         <% } /* !streamrserver */ %>
    152            
     159            </td>
    153160         <% if ("httpbidirserver".equals(tunnelType)) { %>
    154             <div class="subdivider">
    155                 <hr />
    156             </div>
    157             <div id="accessField" class="rowItem">
    158                 <label><%=intl._t("Access Point")%>:</label>
    159             </div>
    160             <div id="portField" class="rowItem">
    161                 <label for="port" accesskey="P">
    162                      <span class="accessKey">P</span>ort:
     161        </tr>
     162
     163        <tr>
     164            <th colspan="2">
     165                <%=intl._t("Access Point")%>
     166            </th>
     167        </tr>
     168
     169        <tr>
     170            <td>
     171                <b><%=intl._t("Port")%>:</b>
     172                   
    163173                     <% String value4 = editBean.getClientPort(curTunnel);
    164174                        if (value4 == null || "".equals(value4.trim())) {
    165                             out.write(" <font color=\"red\">(");
     175                            out.write(" <span class=\"required\"><font color=\"red\">(");
    166176                            out.write(intl._t("required"));
    167                             out.write(")</font>");
     177                            out.write(")</font></span>");
    168178                        }
    169179                      %>
    170                  </label>
    171                  <input type="text" size="6" maxlength="5" id="port" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext" />
    172             </div>
     180
     181                 <input type="text" size="6" maxlength="5" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext port" placeholder="required" />
     182            </td>
    173183         <% } /* httpbidirserver */ %>
    174184         <% if ("httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) { %>
    175             <div id="reachField" class="rowItem">
    176                 <label for="reachableBy" accesskey="r">
    177                     <%=intl._t("Reachable by")%>(<span class="accessKey">R</span>):
    178                 </label>
     185
     186            <td>
     187                <b><%=intl._t("Reachable by")%></b>:
     188
    179189                <select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
    180190              <%
     
    191201                    }
    192202              %>
    193                 </select>               
    194             </div>
     203                </select>
     204            </td>
    195205         <% } /* httpbidirserver || streamrserver */ %>
    196 
    197             <div class="subdivider">
    198                 <hr />
    199             </div>
     206        </tr>
     207
    200208           
    201209            <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    202           %><div id="websiteField" class="rowItem">
    203                 <label for="spoofedHost" accesskey="W">
    204                     <%=intl._t("Website name")%>(<span class="accessKey">W</span>):
    205                 </label>
    206                 <input type="text" size="20" id="targetHost" name="spoofedHost" title="Website Host Name" value="<%=editBean.getSpoofedHost(curTunnel)%>" class="freetext" />               
    207                 <span class="comment"><%=intl._t("(leave blank for outproxies)")%></span>
    208             </div>
     210          %>
     211
     212        <tr>
     213            <th>
     214                <%=intl._t("Website Hostname")%>
     215            </th>
     216            <th></th>
     217        </tr>
     218
     219        <tr>
     220            <td>
     221                <input type="text" size="20" id="websiteName" name="spoofedHost" title="Website Hostname" value="<%=editBean.getSpoofedHost(curTunnel)%>" class="freetext" />
     222                <%=intl._t("(leave blank for outproxies)")%>
     223            </td>
     224            <td></td>
     225        </tr>
    209226            <% }
    210           %><div id="privKeyField" class="rowItem">
    211                 <label for="privKeyFile" accesskey="k">
    212                     <%=intl._t("Private key file")%>(<span class="accessKey">k</span>):
     227          %>
     228         
     229        <tr>
     230            <th colspan="2">
     231                <%=intl._t("Private key file")%>
     232            </th>
     233        </tr>
     234
     235        <tr>
     236            <td colspan="2">
    213237                    <% String value3 = editBean.getPrivateKeyFile(curTunnel);
    214238                       if (value3 == null || "".equals(value3.trim())) {
    215                            out.write(" <font color=\"red\">(");
     239                           out.write(" <span class=\"required\"><font color=\"red\">(");
    216240                           out.write(intl._t("required"));
    217                            out.write(")</font>");
     241                           out.write(")</font></span>");
    218242                       }
    219243                     %>
    220                 </label>
    221                 <input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />               
    222             </div>
    223 
    224             <div id="destinationField" class="rowItem">
    225                 <label for="localDestination" accesskey="L">
    226                     <%=intl._t("Local destination")%>(<span class="accessKey">L</span>):
    227                 </label>
    228                 <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>               
    229             </div>
     244                <input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" placeholder="required" />
     245            </td>
     246        </tr>
     247
     248        <tr>
     249            <th colspan="2">
     250                <%=intl._t("Local destination")%>
     251            </th>
     252        </tr>
     253
     254        <tr>
     255            <td colspan="2">
     256                <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>
     257            </td>
     258        </tr>
    230259
    231260<%
     
    249278            if (!"".equals(b64)) {
    250279         %>
    251             <div id="destinationField" class="rowItem">
     280        <tr>
     281
    252282        <%
    253283                b64 = b64.replace("=", "%3d");
     
    257287                if (name != null && !name.equals("") && !name.contains(" ") && name.endsWith(".i2p")) {
    258288         %>
    259               <label>
     289
     290            <td class="buttons" colspan="2">
    260291              <a class="control" title="<%=intl._t("Generate QR Code")%>" href="/imagegen/qr?s=320&amp;t=<%=name%>&amp;c=http%3a%2f%2f<%=name%>%2f%3fi2paddresshelper%3d<%=b64%>" target="_top"><%=intl._t("Generate QR Code")%></a>
    261               </label>
    262292              <a class="control" href="/susidns/addressbook.jsp?book=private&amp;hostname=<%=name%>&amp;destination=<%=b64%>#add"><%=intl._t("Add to local addressbook")%></a>   
    263               &nbsp;&nbsp;&nbsp;&nbsp;
    264               <a class="control" href="register?tunnel=<%=curTunnel%>"><%=intl._t("Registration Authentication")%></a>   
     293              <a class="control" href="register?tunnel=<%=curTunnel%>"><%=intl._t("Registration Authentication")%></a>
     294            </td>
    265295        <%
    266296                } else {
    267297          %>
    268               <label> </label>
    269               <span class="comment"><%=intl._t("Set name with .i2p suffix to enable QR code generation")%></span>
    270               <span class="comment"><%=intl._t("Set name with .i2p suffix to enable registration authentication")%></span>
     298            <td class="infohelp" colspan="2">
     299                <%=intl._t("Note: In order to enable QR code generation or registration authentication, configure the Name field above with .i2p suffix eg.  mynewserver.i2p")%>
     300            </td>
    271301        <%
    272302                }  // name
    273303         %>
    274             </div>
     304        </tr>
     305
    275306        <%
    276307            }  // b64
    277308
    278309         %>
    279             <div class="footer">
    280             </div>
    281         </div>
    282 
    283         <div id="tunnelAdvancedNetworking" class="panel">
    284             <div class="header">
    285                 <h4><%=intl._t("Advanced networking options")%></h4>
    286             </div>
    287 
    288             <div class="separator">
    289                 <hr />
    290             </div>
    291            
    292             <div id="tunnelOptionsField" class="rowItem">
    293                 <label><%=intl._t("Tunnel Options")%>:</label>
    294             </div>
    295             <div id="depthField" class="rowItem">
    296                 <label for="tunnelDepth" accesskey="t">
    297                     <%=intl._t("Length")%>(<span class="accessKey">t</span>):
    298                 </label>
     310    </table>
     311
     312    <h3><%=intl._t("Advanced Networking Options")%></h3>
     313
     314    <table id="#advancedServerTunnelOptions" class="tunnelConfig">
     315        <tr>
     316            <th colspan="2">
     317                <%=intl._t("Tunnel Options")%>
     318            </th>
     319        </tr>
     320
     321        <tr>
     322            <td>
     323                <b><%=intl._t("Length")%></b>
     324            </td>
     325
     326            <td>
     327                <b><%=intl._t("Variance")%></b>
     328            </td>
     329        </tr>
     330
     331        <tr>
     332            <td>
    299333                <select id="tunnelDepth" name="tunnelDepth" title="Length of each Tunnel" class="selectbox">
    300334                    <% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
     
    312346                <% }
    313347              %></select>
    314             </div>
    315             <div id="varianceField" class="rowItem">
    316                 <label for="tunnelVariance" accesskey="v">
    317                     <%=intl._t("Variance")%>(<span class="accessKey">V</span>):
    318                 </label>
     348            </td>
     349
     350            <td>
    319351                <select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Depth" class="selectbox">
    320352                    <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
     
    327359                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._t("hop variance")%></option>
    328360                <% }
    329               %></select>               
    330             </div>
    331             <div id="countField" class="rowItem">
    332                 <label for="tunnelQuantity" accesskey="C">
    333                     <%=intl._t("Count")%>(<span class="accessKey">C</span>):
    334                 </label>
     361              %></select>
     362            </td>
     363        </tr>
     364
     365        <tr>
     366            <td>
     367                <b><%=intl._t("Count")%></b>
     368            </td>
     369
     370            <td>
     371                <b><%=intl._t("Backup Count")%></b>
     372            </td>
     373        </tr>
     374
     375        <tr>
     376            <td>
    335377                <select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
    336378                    <%=editBean.getQuantityOptions(curTunnel)%>
    337                 </select>               
    338             </div>
    339             <div id="backupField" class="rowItem">
    340                 <label for="tunnelBackupQuantity" accesskey="b">
    341                     <%=intl._t("Backup Count")%>(<span class="accessKey">B</span>):
    342                 </label>
     379                </select>
     380            </td>
     381
     382            <td>
    343383                <select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
    344384                    <% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
     
    350390                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._t("backup tunnels")%></option>
    351391                <% }
    352               %></select>               
    353             </div>
    354                            
    355             <div class="subdivider">
    356                 <hr />
    357             </div>
    358            
     392              %></select>
     393            </td>
     394        </tr>
     395                           
    359396         <% if (!"streamrserver".equals(tunnelType)) { %>
    360             <div id="profileField" class="rowItem">
    361                 <label for="profile" accesskey="f">
    362                     <%=intl._t("Profile")%>(<span class="accessKey">f</span>):
    363                 </label>
     397
     398        <tr>
     399            <th colspan="2">
     400                <%=intl._t("Profile")%>
     401            </th>
     402        </tr>
     403
     404        <tr>
     405            <td colspan="2">
    364406                <select id="profile" name="profile" title="Connection Profile" class="selectbox">
    365407                    <% boolean interactiveProfile = editBean.isInteractive(curTunnel);
    366408                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
    367409                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
    368                 </select>               
    369             </div>
    370 
    371             <div class="subdivider">
    372                 <hr />
    373             </div>
     410                </select>
     411            </td>
     412        </tr>
     413
    374414         <% } /* !streamrserver */ %>
    375415
    376             <div id="optionsField" class="rowItem">
    377                 <label><%=intl._t("Router I2CP Address")%>:</label>
    378             </div>
    379             <div id="optionsHostField" class="rowItem">
    380                 <label for="clientHost" accesskey="o">
    381                     <%=intl._t("Host")%>(<span class="accessKey">o</span>):
    382                 </label>
    383                 <input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />               
    384             </div>
    385             <div id="optionsPortField" class="rowItem">
    386                 <label for="clientPort" accesskey="r">
    387                     <%=intl._t("Port")%>(<span class="accessKey">r</span>):
    388                 </label>
    389                 <input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />               
    390             </div>
    391            
    392             <div class="subdivider">
    393                 <hr />
    394             </div>
    395            
    396             <div id="optionsField" class="rowItem">
    397                 <label for="encrypt" accesskey="e">
    398                     <%=intl._t("Encrypt Leaseset")%>(<span class="accessKey">E</span>):
    399                 </label>
    400             </div>
    401             <div id="portField" class="rowItem">
    402                 <label for="encrypt" accesskey="e">
    403                     <%=intl._t("Enable")%>:
    404                 </label>
    405                 <input value="1" type="checkbox" id="startOnLoad" name="encrypt" title="ONLY clients with the encryption key will be able to connect"<%=(editBean.getEncrypt(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    406             </div>
    407             <div id="portField" class="rowItem">
    408                 <label for="encrypt" accesskey="e">
    409                     <%=intl._t("Encryption Key")%>:
    410                 </label>
    411                 <textarea rows="1" style="height: 3em;" cols="44" id="portField" name="encryptKey" title="Encrypt Key" wrap="off" spellcheck="false"><%=editBean.getEncryptKey(curTunnel)%></textarea>               
    412             </div>
    413             <div id="portField" class="rowItem">
    414                 <label for="force" accesskey="c">
    415                     <%=intl._t("Generate New Key")%>:
    416                 </label>
    417                 <button accesskey="S" class="control" type="submit" name="action" value="Generate" title="Generate New Key Now"><%=intl._t("Generate")%></button>
    418                 <span class="comment"><%=intl._t("(Tunnel must be stopped first)")%></span>
    419             </div>
    420                  
    421             <div class="subdivider">
    422                 <hr />
    423             </div>
    424            
    425             <div id="optionsField" class="rowItem">
    426                 <label for="access" accesskey="s">
    427                     <%=intl._t("Restricted Access List")%>(<span class="accessKey">s</span>):
    428                 </label>
    429             </div>
    430             <div id="portField" class="rowItem">
     416        <tr>
     417            <th colspan="2">
     418                <%=intl._t("Router I2CP Address")%>
     419            </th>
     420        </tr>
     421        <tr>
     422            <td>
     423                <b><%=intl._t("Host")%>:</b>
     424                <input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
     425            </td>
     426            <td>
     427                <b><%=intl._t("Port")%>:</b>
     428                <input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />
     429            </td>
     430        </tr>
     431
     432        <tr>
     433            <th colspan="2">
     434                <%=intl._t("Encrypt Leaseset")%>
     435            </th>
     436        </tr>
     437
     438        <tr>
     439            <td colspan="2">
     440                <input value="1" type="checkbox" id="startOnLoad" name="encrypt" title="ONLY clients with the encryption key will be able to connect"<%=(editBean.getEncrypt(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     441                <%=intl._t("Only allow clients with the encryption key to connect to this server")%>
     442            </td>
     443        </tr>
     444
     445        <tr>
     446            <td>
     447                <b><%=intl._t("Encryption Key")%></b>
     448            </td>
     449
     450            <td>
     451                <b><%=intl._t("Generate New Key")%></b> (<%=intl._t("Tunnel must be stopped first")%>)
     452            </td>
     453        </tr>
     454
     455        <tr>
     456            <td>
     457                <textarea rows="1" style="height: 3em;" cols="44" id="leasesetKey" name="encryptKey" title="Encrypt Key" wrap="off" spellcheck="false"><%=editBean.getEncryptKey(curTunnel)%></textarea>
     458            </td>
     459
     460            <td>
     461                <button class="control" type="submit" name="action" value="Generate" title="Generate New Key Now"><%=intl._t("Generate")%></button>
     462            </td>
     463        </tr>
     464
     465        <tr>
     466            <th colspan="2">
     467                <%=intl._t("Restricted Access List")%>
     468            </th>
     469        </tr>
     470
     471        <tr>
     472            <td colspan="2">
    431473                <% /* can't use <label> here */ %>
    432                 <p><input value="0" type="radio" id="startOnLoad" name="accessMode" title="Allow all clients"<%=(editBean.getAccessMode(curTunnel).equals("0") ? " checked=\"checked\"" : "")%> class="tickbox" />               
    433                 <b><%=intl._t("Disable")%></b></p>
    434                 <p><input value="2" type="radio" id="startOnLoad" name="accessMode" title="Reject listed clients"<%=(editBean.getAccessMode(curTunnel).equals("2") ? " checked=\"checked\"" : "")%> class="tickbox" />               
    435                 <b><%=intl._t("Blacklist")%></b></p>
    436                 <p><input value="1" type="radio" id="startOnLoad" name="accessMode" title="Allow listed clients only"<%=(editBean.getAccessMode(curTunnel).equals("1") ? " checked=\"checked\"" : "")%> class="tickbox" />               
    437                 <b><%=intl._t("Whitelist")%></b></p>
    438             </div>
    439             <div id="accessListField" class="rowItem">
    440                 <label for="accessList" accesskey="s">
    441                     <%=intl._t("Access List")%>:
    442                 </label>
    443                 <textarea rows="2" style="height: 8em;" cols="60" name="accessList" title="Access List" wrap="off" spellcheck="false"><%=editBean.getAccessList(curTunnel)%></textarea>               
    444             </div>
    445                  
     474                <span class="multiOption"><input value="0" type="radio" name="accessMode" title="<%=intl._t("Allow all clients")%>"<%=(editBean.getAccessMode(curTunnel).equals("0") ? " checked=\"checked\"" : "")%> class="tickbox" />
     475                    <%=intl._t("Disable")%></span>
     476                <span class="multiOption"><input value="2" type="radio" name="accessMode" title="<%=intl._t("Reject listed clients")%>"<%=(editBean.getAccessMode(curTunnel).equals("2") ? " checked=\"checked\"" : "")%> class="tickbox" />
     477                    <%=intl._t("Blacklist")%></span>
     478                <span class="multiOption"><input value="1" type="radio" name="accessMode" title="<%=intl._t("Allow listed clients only")%>"<%=(editBean.getAccessMode(curTunnel).equals("1") ? " checked=\"checked\"" : "")%> class="tickbox" />
     479                    <%=intl._t("Whitelist")%></span>
     480            </td>
     481        </tr>
     482
     483        <tr>
     484            <td colspan="2">
     485                <b><%=intl._t("Access List")%></b> (<%=intl._t("Specify clients, 1 per line")%>)
     486            </td>
     487        </tr>
     488
     489        <tr>
     490            <td colspan="2">
     491                <textarea rows="2" style="height: 8em;" cols="60" name="accessList" title="Access List" wrap="off" spellcheck="false"><%=editBean.getAccessList(curTunnel)%></textarea>
     492            </td>
     493        </tr>
     494
     495        <tr>
     496            <th colspan="2">
     497                <%=intl._t("Server Access Options")%>
     498            </th>
     499        </tr>
     500
    446501            <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    447             %><div class="rowItem">
    448                 <div id="optionsField" class="rowItem">
    449                     <label>
    450                         <%=intl._t("Block Access via Inproxies")%>:
    451                     </label>
    452                 </div>
    453                 <div id="portField" class="rowItem">
    454                     <label for="access" accesskey="d">
    455                         <%=intl._t("Enable")%>:
    456                     </label>
    457                     <input value="1" type="checkbox" id="startOnLoad" name="rejectInproxy" title="Deny inproxy access when enabled"<%=(editBean.isRejectInproxy(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    458                 </div>
    459               </div>
    460             <div class="rowItem">
    461                 <div id="optionsField" class="rowItem">
    462                     <label>
    463                         <%=intl._t("Block Accesses containing Referers")%>:
    464                     </label>
    465                 </div>
    466                 <div id="portField" class="rowItem">
    467                     <label for="access" accesskey="d">
    468                         <%=intl._t("Enable")%>:
    469                     </label>
    470                     <input value="1" type="checkbox" id="startOnLoad" name="rejectReferer" title="Deny accesseses with referers (probably from inproxies)"<%=(editBean.isRejectReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    471                 </div>
    472               </div>
    473             <div class="rowItem">
    474                 <div id="optionsField" class="rowItem">
    475                     <label>
    476                         <%=intl._t("Block these User-Agents")%>:
    477                     </label>
    478                 </div>
    479                 <div id="portField" class="rowItem">
    480                     <label for="access" accesskey="d">
    481                         <%=intl._t("Enable")%>:
    482                     </label>
    483                     <input value="1" type="checkbox" id="startOnLoad" name="rejectUserAgents" title="Deny User-Agents matching these strings (probably from inproxies)"<%=(editBean.isRejectUserAgents(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    484                 </div>
    485                 <div id="optionsHostField" class="rowItem">
    486                     <input type="text" id="userAgents" name="userAgents" size="20" title="comma separated, e.g. Mozilla,Opera (case-sensitive)" value="<%=editBean.getUserAgents(curTunnel)%>" class="freetext" />               
    487                 </div>
    488               </div>
     502            %>
     503
     504        <tr>
     505            <td>
     506                <input value="1" type="checkbox" name="rejectInproxy" title="<%=intl._t("Deny inproxy access when enabled")%>" <%=(editBean.isRejectInproxy(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     507                <%=intl._t("Block Access via Inproxies")%>
     508            </td>
     509
     510            <td>
     511                <input value="1" type="checkbox" name="rejectReferer" title="<%=intl._t("Deny accesseses with referers (probably from inproxies)")%>" <%=(editBean.isRejectReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     512                <%=intl._t("Block Accesses containing Referers")%>
     513            </td>
     514        </tr>
     515
     516        <tr>
     517            <td>
     518                <input value="1" type="checkbox" name="rejectUserAgents" title="<%=intl._t("Deny User-Agents matching these strings (probably from inproxies)")%>" <%=(editBean.isRejectUserAgents(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     519                <%=intl._t("Block these User-Agents")%>
     520            </td>
     521
     522            <td>
     523                <input type="text" id="userAgents" name="userAgents" size="20" title="<%=intl._t("comma separated, e.g. Mozilla,Opera (case-sensitive)")%>" value="<%=editBean.getUserAgents(curTunnel)%>" class="freetext" />
     524            </td>
     525        </tr>
    489526            <% } // httpserver
    490             %><div class="rowItem">
    491                 <div id="optionsField" class="rowItem">
    492                     <label>
    493                         <%=intl._t("Unique Local Address per Client")%>:
    494                     </label>
    495                 </div>
    496                 <div id="portField" class="rowItem">
    497                     <label for="access" accesskey="d">
    498                         <%=intl._t("Enable")%>:
    499                     </label>
    500                     <input value="1" type="checkbox" id="startOnLoad" name="uniqueLocal" title="Use unique IP addresses for each connecting client (local non-SSL servers only)"<%=(editBean.getUniqueLocal(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    501                 </div>
    502             </div>
    503             <div class="rowItem">
    504                 <div id="optionsField" class="rowItem">
    505                     <label>
    506                         <%=intl._t("Optimize for Multihoming")%>:
    507                     </label>
    508                 </div>
    509                 <div id="portField" class="rowItem">
    510                     <label for="access" accesskey="d">
    511                         <%=intl._t("Enable")%>:
    512                     </label>
    513                     <input value="1" type="checkbox" id="startOnLoad" name="multihome" title="Only enable if you are hosting this service on multiple routers"<%=(editBean.getMultihome(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    514                 </div>
    515             </div>
    516             <div class="subdivider">
    517                 <hr />
    518             </div>
    519 
    520             <div class="rowItem">
    521               <div id="optionsField" class="rowItem">
    522                   <label><%=intl._t("Inbound connection limits (0=unlimited)")%><br /><%=intl._t("Per client")%>:</label>
    523               </div>
    524               <div id="portField" class="rowItem">
    525                   <label><%=intl._t("Per minute")%>:</label>
    526                   <input type="text" id="port" name="limitMinute" value="<%=editBean.getLimitMinute(curTunnel)%>" class="freetext" />               
    527               </div>
    528               <div id="portField" class="rowItem">
    529                   <label><%=intl._t("Per hour")%>:</label>
    530                   <input type="text" id="port" name="limitHour" value="<%=editBean.getLimitHour(curTunnel)%>" class="freetext" />               
    531               </div>
    532               <div id="portField" class="rowItem">
    533                   <label><%=intl._t("Per day")%>:</label>
    534                   <input type="text" id="port" name="limitDay" value="<%=editBean.getLimitDay(curTunnel)%>" class="freetext" />               
    535               </div>
    536             </div>
    537             <div class="rowItem">
    538               <div id="optionsField" class="rowItem">
    539                   <label><%=intl._t("Total")%>:</label>
    540               </div>
    541               <div id="portField" class="rowItem">
    542                   <input type="text" id="port" name="totalMinute" value="<%=editBean.getTotalMinute(curTunnel)%>" class="freetext" />               
    543               </div>
    544               <div id="portField" class="rowItem">
    545                   <input type="text" id="port" name="totalHour" value="<%=editBean.getTotalHour(curTunnel)%>" class="freetext" />               
    546               </div>
    547               <div id="portField" class="rowItem">
    548                   <input type="text" id="port" name="totalDay" value="<%=editBean.getTotalDay(curTunnel)%>" class="freetext" />               
    549               </div>
    550             </div>
    551             <div class="rowItem">
    552               <div id="optionsField" class="rowItem">
    553                   <label><%=intl._t("Max concurrent connections (0=unlimited)")%>:</label>
    554               </div>
    555               <div id="portField" class="rowItem">
    556                   <input type="text" id="port" name="maxStreams" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />               
    557               </div>
    558             </div>
     527            %>
     528
     529        <tr>
     530            <td>
     531                <input value="1" type="checkbox" name="uniqueLocal" title="<%=intl._t("Use unique IP addresses for each connecting client (local non-SSL servers only)")%>" <%=(editBean.getUniqueLocal(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     532                <%=intl._t("Unique Local Address per Client")%>
     533            </td>
     534
     535            <td>
     536                <input value="1" type="checkbox" name="multihome" title="<%=intl._t("Only enable if you are hosting this service on multiple routers")%>" <%=(editBean.getMultihome(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     537                <%=intl._t("Optimize for Multihoming")%>
     538            </td>
     539        </tr>
     540
     541        <tr>
     542            <th colspan="2">
     543                <%=intl._t("Server Throttling")%>
     544            </th>
     545        </tr>
     546        <tr>
     547            <td id="throttle" colspan="4">
     548
     549                <table id="throttler">
     550                    <tr>
     551                        <th colspan="5">
     552                            <%=intl._t("Inbound connection limits (0=unlimited)")%>
     553                        </th>
     554                    </tr>
     555                    <tr>
     556                        <td></td>
     557                        <td><b><%=intl._t("Per Minute")%></b></td>
     558                        <td><b><%=intl._t("Per Hour")%></b></td>
     559                        <td><b><%=intl._t("Per Day")%></b></td>
     560                        <td class="blankColumn"></td>
     561                    </tr>
     562                    <tr>
     563                        <td><b><%=intl._t("Per Client")%></b></td>
     564                        <td>
     565                            <input type="text" name="limitMinute" value="<%=editBean.getLimitMinute(curTunnel)%>" class="freetext" />
     566                        </td>
     567                        <td>
     568                            <input type="text" name="limitHour" value="<%=editBean.getLimitHour(curTunnel)%>" class="freetext" />
     569                        </td>
     570                        <td>
     571                            <input type="text" name="limitDay" value="<%=editBean.getLimitDay(curTunnel)%>" class="freetext" />
     572                        </td>
     573                        <td class="blankColumn"></td>
     574                    </tr>
     575                    <tr>
     576                        <td><b><%=intl._t("Total")%></b></td>
     577                        <td>
     578                            <input type="text" name="totalMinute" value="<%=editBean.getTotalMinute(curTunnel)%>" class="freetext" />
     579                        </td>
     580                        <td>
     581                            <input type="text" name="totalHour" value="<%=editBean.getTotalHour(curTunnel)%>" class="freetext" />
     582                        </td>
     583                        <td>
     584                            <input type="text" name="totalDay" value="<%=editBean.getTotalDay(curTunnel)%>" class="freetext" />
     585                        </td>
     586                        <td class="blankColumn"></td>
     587                    </tr>
     588                    <tr>
     589                        <th colspan="5"><%=intl._t("Max concurrent connections (0=unlimited)")%></th>
     590                    </tr>
     591                    <tr>
     592                        <td></td>
     593                        <td>
     594                            <input type="text" name="maxStreams" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />
     595                        </td>
     596                        <td></td>
     597                        <td></td>
     598                        <td class="blankColumn"></td>
     599                    </tr>
    559600
    560601            <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    561               %><div class="rowItem">
    562                   <div id="optionsField" class="rowItem">
    563                       <label><%=intl._t("POST limits (0=unlimited)")%><br /><%=intl._t("Per client")%>:</label>
    564                   </div>
    565                   <div id="portField" class="rowItem">
    566                       <label><%=intl._t("Per period")%>:</label>
    567                       <input type="text" id="port" name="postMax" value="<%=editBean.getPostMax(curTunnel)%>" class="freetext" />               
    568                   </div>
    569                   <div id="portField" class="rowItem">
    570                       <label><%=intl._t("Ban minutes")%>:</label>
    571                       <input type="text" id="port" name="postBanTime" value="<%=editBean.getPostBanTime(curTunnel)%>" class="freetext" />               
    572                   </div>
    573                 </div>
    574                 <div class="rowItem">
    575                   <div id="optionsField" class="rowItem">
    576                       <label><%=intl._t("Total")%>:</label>
    577                   </div>
    578                   <div id="portField" class="rowItem">
    579                       <input type="text" id="port" name="postTotalMax" value="<%=editBean.getPostTotalMax(curTunnel)%>" class="freetext" />               
    580                   </div>
    581                   <div id="portField" class="rowItem">
    582                       <input type="text" id="port" name="postTotalBanTime" value="<%=editBean.getPostTotalBanTime(curTunnel)%>" class="freetext" />               
    583                   </div>
    584                 </div>
    585                 <div class="rowItem">
    586                   <div id="optionsField" class="rowItem">
    587                       <label><%=intl._t("POST limit period (minutes)")%>:</label>
    588                   </div>
    589                   <div id="portField" class="rowItem">
    590                       <input type="text" id="port" name="postCheckTime" value="<%=editBean.getPostCheckTime(curTunnel)%>" class="freetext" />               
    591                   </div>
    592                 </div>
     602              %>
     603                    <tr>
     604                        <th colspan="5">
     605                            <%=intl._t("POST limits (0=unlimited)")%>
     606                        </th>
     607                    </tr>
     608                    <tr>
     609                        <td></td>
     610                        <td>
     611                            <b><%=intl._t("Per Period")%></b>
     612                        </td>
     613                        <td>
     614                            <b><%=intl._t("Ban Duration")%></b>
     615                        </td>
     616                        <td></td>
     617                        <td class="blankColumn"></td>
     618                    </tr>
     619                    <tr>
     620                        <td>
     621                            <b><%=intl._t("Per Client")%>
     622                            </b>
     623                        </td>
     624                        <td>
     625                            <input type="text" name="postMax" value="<%=editBean.getPostMax(curTunnel)%>" class="freetext quantity"/>
     626                        </td>
     627                        <td>
     628                            <input type="text" name="postBanTime" value="<%=editBean.getPostBanTime(curTunnel)%>" class="freetext period"/>
     629                            <%=intl._t("minutes")%>
     630                        </td>
     631                        <td></td>
     632                        <td class="blankColumn"></td>
     633                    </tr>
     634                    <tr>
     635                        <td>
     636                            <b><%=intl._t("Total")%>
     637                            </b>
     638                        </td>
     639                        <td>
     640                            <input type="text" name="postTotalMax" value="<%=editBean.getPostTotalMax(curTunnel)%>" class="freetext quantity"/>
     641                        </td>
     642                        <td>
     643                            <input type="text" name="postTotalBanTime" value="<%=editBean.getPostTotalBanTime(curTunnel)%>" class="freetext period"/>
     644                            <%=intl._t("minutes")%>
     645                        </td>
     646                        <td></td>
     647                        <td class="blankColumn"></td>
     648                    </tr>
     649                    <tr>
     650                        <td>
     651                            <b><%=intl._t("POST limit period")%>
     652                            </b>
     653                        </td>
     654                        <td>
     655                            <input type="text" name="postCheckTime" value="<%=editBean.getPostCheckTime(curTunnel)%>" class="freetext period"/>
     656                            <%=intl._t("minutes")%>
     657                        </td>
     658                        <td></td>
     659                        <td></td>
     660                        <td class="blankColumn"></td>
     661                    </tr>
     662
    593663            <% } // httpserver
    594           %><div class="subdivider">
    595                 <hr />
    596             </div>
    597            
    598             <div id="optionsField" class="rowItem">
    599                 <label for="reduce" accesskey="d">
    600                     <%=intl._t("Reduce tunnel quantity when idle")%>(<span class="accessKey">d</span>):
    601                 </label>
    602             </div>
    603             <div id="portField" class="rowItem">
    604                 <label for="access" accesskey="d">
    605                     <%=intl._t("Enable")%>:
    606                 </label>
    607                 <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />               
    608             </div>
    609             <div id="portField" class="rowItem">
    610                 <label for="reduceCount" accesskey="d">
    611                     <%=intl._t("Reduced tunnel count")%>:
    612                 </label>
    613                 <input type="text" id="port" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext" />               
    614             </div>
    615             <div id="portField" class="rowItem">
    616                 <label for="reduceTime" accesskey="d">
    617                     <%=intl._t("Idle minutes")%>:
    618                 </label>
    619                 <input type="text" id="port" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext" />               
    620             </div>
    621 
    622             <div class="subdivider">
    623                 <hr />
    624             </div>
     664          %>
     665
     666
     667                </table>
     668            </td>
     669        </tr>
     670
     671        <tr>
     672            <th colspan="2">
     673                <%=intl._t("Reduce tunnel quantity when idle")%>
     674            </th>
     675        </tr>
     676
     677        <tr>
     678            <td colspan="2">
     679                <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
     680                <%=intl._t("Reduce tunnel quantity when idle to conserve resources")%>
     681            </td>
     682        </tr>
     683        <tr>
     684            <td>
     685                <b><%=intl._t("Reduced tunnel count")%>:</b>
     686                <input type="text" id="reduceCount" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext quantity" />
     687            </td>
     688
     689            <td>
     690                <b><%=intl._t("Idle period")%>:</b>
     691                <input type="text" id="reduceTime" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext period" />
     692                <%=intl._t("minutes")%>
     693            </td>
     694        </tr>
    625695           
    626696<% /***************** %>
     
    672742                int currentSigType = editBean.getSigType(curTunnel, tunnelType);
    673743           %>
    674             <div id="tunnelOptionsField" class="rowItem">
    675                 <label>
    676                     <%=intl._t("Signature type")%>
    677                     (<%=intl._t("Experts only! Changes B32!")%>)
    678                 </label>
    679             </div>
    680             <div id="hostField" class="rowItem">
    681               <div id="portField" class="rowItem">
    682                 <label>DSA-SHA1</label>
    683                 <input value="0" type="radio" id="startOnLoad" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    684               </div>
     744        <tr>
     745            <th colspan="2">
     746                <%=intl._t("Signature type")%> (<%=intl._t("Experts only! Changes B32!")%>)
     747            </th>
     748        </tr>
     749        <tr>
     750            <td colspan="2">
     751                <span class="multiOption">
     752                    <input value="0" type="radio" id="startOnLoad" name="sigType" title="Default"<%=(currentSigType==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
     753                    DSA-SHA1
     754                </span>
    685755           <% if (editBean.isSigTypeAvailable(1)) { %>
    686               <div id="portField" class="rowItem">
    687                 <label>ECDSA-P256</label>
    688                 <input value="1" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    689               </div>
     756                <span class="multiOption">
     757                    <input value="1" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
     758                    ECDSA-P256
     759                </span>
    690760           <% }
    691761              if (editBean.isSigTypeAvailable(2)) { %>
    692               <div id="portField" class="rowItem">
    693                 <label>ECDSA-P384</label>
    694                 <input value="2" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    695               </div>
     762                <span class="multiOption">
     763                    <input value="2" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
     764                    ECDSA-P384
     765                </span>
    696766           <% }
    697767              if (editBean.isSigTypeAvailable(3)) { %>
    698               <div id="portField" class="rowItem">
    699                 <label>ECDSA-P521</label>
    700                 <input value="3" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    701               </div>
     768                <span class="multiOption">
     769                    <input value="3" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
     770                    ECDSA-P521
     771                </span>
    702772           <% }
    703773              if (editBean.isSigTypeAvailable(7)) { %>
    704               <div id="portField" class="rowItem">
    705                 <label>Ed25519-SHA-512</label>
    706                 <input value="7" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />               
    707               </div>
     774                <span class="multiOption">
     775                    <input value="7" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(currentSigType==7 ? " checked=\"checked\"" : "")%> class="tickbox" />
     776                    Ed25519-SHA-512
     777                </span>
    708778           <% }   // isAvailable %>
    709             </div>
    710                  
    711             <div class="subdivider">
    712                 <hr />
    713             </div>
     779
     780            </td>
     781        </tr>
     782
    714783         <% } // isAdvanced %>
    715                  
    716             <div id="customOptionsField" class="rowItem">
    717                 <label for="customOptions" accesskey="u">
    718                     <%=intl._t("Custom options")%>(<span class="accessKey">u</span>):
    719                 </label>
    720                 <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>               
    721             </div>
    722            
    723             <div class="footer">
    724             </div>
    725         </div>
    726         <div id="globalOperationsPanel" class="panel">
    727             <div class="header"></div>
    728             <div class="footer">
    729                 <div class="toolbox">
     784
     785        <tr>
     786            <th colspan="2">
     787                <%=intl._t("Custom options")%>
     788            </th>
     789        </tr>
     790        <tr>
     791            <td colspan="2">
     792                <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>
     793            </td>
     794        </tr>
     795
     796        <tr>
     797            <td class="buttons" colspan="2">
    730798                    <input type="hidden" value="true" name="removeConfirm" />
    731799                    <button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
    732                     <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%>(<span class="accessKey">D</span>)</button>
    733                     <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%>(<span class="accessKey">S</span>)</button>
    734                 </div>
    735             </div>
    736         </div>
     800                    <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%></button>
     801                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%></button>
     802            </td>
     803        </tr>
     804    </table>
     805</div>
    737806    </form>
    738     <div id="pageFooter">
    739     </div>
     807
    740808<%
    741809
    742810  } else {
    743      %>Tunnels are not initialized yet, please reload in two minutes.<%
     811     %><div id="notReady"><%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%></div><%
    744812  }  // isInitialized()
    745813
  • apps/i2ptunnel/jsp/index.jsp

    ra1fd8f49 r5368da2  
    2929    <% if (indexBean.allowCSS()) {
    3030  %><link rel="icon" href="<%=indexBean.getTheme()%>images/favicon.ico" />
    31     <link href="<%=indexBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
    32     <link href="<%=indexBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
     31    <link href="<%=indexBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
    3332    <% }
    3433  %>
    3534</head>
    3635<body id="tunnelListPage">
    37             <div id="pageHeader">
    38     </div>
    39 
    40     <div id="statusMessagePanel" class="panel">
    41         <div class="header">
    42             <h4><%=intl._t("Status Messages")%></h4>
    43         </div>
    44 
    45         <div class="separator">
    46             <hr />
    47         </div>
    48 
     36
     37<div class="panel">
     38    <h2><%=intl._t("Status Messages")%></h2>
     39    <table id="statusMessagesTable">
     40        <tr>
     41            <td id="tunnelMessages">
    4942        <textarea id="statusMessages" rows="4" cols="60" readonly="readonly"><jsp:getProperty name="indexBean" property="messages" /></textarea>
    50 
    51         <div class="separator">
    52             <hr />
    53         </div>
    54 
    55         <div class="footer">
    56             <div class="toolbox">
     43            </td>
     44        </tr>
     45
     46
     47        <tr>
     48            <td class="buttons">
    5749                <a class="control" href="list"><%=intl._t("Refresh")%></a>
    58             </div>
    59         </div>   
    60     </div>
     50            </td>
     51        </tr>
     52    </table>
     53</div>
     54
    6155<%
    6256
     
    6559
    6660%>
    67     <div id="globalOperationsPanel" class="panel">
    68         <div class="header"></div>
    69         <div class="footer">
    70             <div class="toolbox">
     61
     62<div class="panel" id="globalTunnelControl">
     63    <h2><%=intl._t("Global Tunnel Control")%></h2>
     64    <table>
     65        <tr>
     66            <td class="buttons">
    7167                <a class="control" href="wizard"><%=intl._t("Tunnel Wizard")%></a>
    7268                <a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Stop%20all"><%=intl._t("Stop All")%></a>
     
    7773                <a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Reload%20configuration"><%=intl._t("Reload Config")%></a>
    7874--%>
    79             </div>
    80         </div>
    81     </div>
    82 
    83 
    84 
    85     <div id="localServerTunnelList" class="panel">
    86         <div class="header">
    87            
    88     <h4><%=intl._t("I2P Hidden Services")%></h4>
    89         </div>
    90 
    91        
    92   <div class="separator"> </div>
    93 
    94         <div class="nameHeaderField rowItem">
    95             <label><%=intl._t("Name")%>:</label>
    96         </div>
    97         <div class="previewHeaderField rowItem">
    98             <label><%=intl._t("Points at")%>:</label>
    99         </div>
    100         <div class="targetHeaderField rowItem">
    101             <label><%=intl._t("Preview")%>:</label>
    102         </div>
    103         <div class="statusHeaderField rowItem">
    104             <label><%=intl._t("Status")%>:</label>
    105 <hr />        </div>
    106        
     75            </td>
     76        </tr>
     77    </table>
     78</div>
     79
     80<div class="panel">
     81   
     82    <h2><%=intl._t("I2P Hidden Services")%></h2>
     83
     84<table id="serverTunnels">
     85    <tr>
     86        <th class="tunnelName"><%=intl._t("Name")%></th>
     87        <th class="tunnelType"><%=intl._t("Type")%></th>
     88        <th class="tunnelLocation"><%=intl._t("Points at")%></th>
     89        <th class="tunnelPreview"><%=intl._t("Preview")%></th>
     90        <th class="tunnelStatus"><%=intl._t("Status")%></th>
     91        <th class="tunnelControl"><%=intl._t("Control")%></th>
     92    </tr>
     93
    10794        <%
    10895        for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) {
     
    11097           
    11198      %>
    112         <div class="nameField rowItem">
    113             <label><%=intl._t("Name")%>:</label>
    114             <span class="text"><a href="edit?tunnel=<%=curServer%>" title="Edit Server Tunnel Settings for <%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a></span>
    115         </div>
    116         <div class="previewField rowItem">
    117             <label><%=intl._t("Points at")%>:</label>
    118             <span class="text">
     99
     100
     101    <tr class="tunnelProperties">
     102        <td class="tunnelName">
     103            <a href="edit?tunnel=<%=curServer%>" title="<%=intl._t("Edit Server Tunnel Settings for")%>&nbsp;<%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a>
     104        </td>
     105        <td class="tunnelType"><%=indexBean.getTunnelType(curServer)%></td>
     106        <td class="tunnelLocation">
    119107        <%
    120108            if (indexBean.isServerTargetLinkValid(curServer)) {
    121109                if (indexBean.isSSLEnabled(curServer)) { %>
    122                     <a href="https://<%=indexBean.getServerTarget(curServer)%>/" title="Test HTTPS server, bypassing I2P" target="_top"><%=indexBean.getServerTarget(curServer)%> SSL</a>
     110                    <a href="https://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTPS server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%> SSL</a>
    123111             <% } else { %>
    124                     <a href="http://<%=indexBean.getServerTarget(curServer)%>/" title="Test HTTP server, bypassing I2P" target="_top"><%=indexBean.getServerTarget(curServer)%></a>
     112                    <a href="http://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTP server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%></a>
    125113        <%
    126114                }
     
    133121                }
    134122            }
    135           %></span>
    136         </div>
    137         <div class="targetField rowItem">
     123          %>
     124        </td>
     125        <td class="tunnelPreview">
    138126            <%
    139127            if (("httpserver".equals(indexBean.getInternalType(curServer)) || ("httpbidirserver".equals(indexBean.getInternalType(curServer)))) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
    140           %><label><%=intl._t("Preview")%>:</label>   
    141             <a class="control" title="Test HTTP server through I2P" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._t("Preview")%></a>
     128          %>
     129            <a class="control" title="<%=intl._t("Test HTTP server through I2P")%>" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._t("Preview")%></a>
    142130            <%
    143131            } else if (indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
    144           %><span class="text"><%=intl._t("Base32 Address")%>:<br /><%=indexBean.getDestHashBase32(curServer)%></span>
     132          %><%=intl._t("Base32 Address")%>:<%=indexBean.getDestHashBase32(curServer)%>
    145133        <%
    146134            } else {
    147           %><span class="comment"><%=intl._t("No Preview")%></span>
     135          %><%=intl._t("No Preview")%>
    148136        <%
    149137            }
    150       %></div>
    151         <div class="statusField rowItem">
    152             <label><%=intl._t("Status")%>:</label>
     138      %>
     139        </td>
     140        <td class="tunnelStatus">
    153141            <%
    154142            switch (indexBean.getTunnelStatus(curServer)) {
    155143                case IndexBean.STARTING:
    156           %><div class="statusStarting text"><%=intl._t("Starting...")%></div>   
    157             <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
     144          %><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
     145        </td>
     146        <td class="tunnelControl">
     147            <a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
    158148        <%
    159149                break;
    160150                case IndexBean.RUNNING:
    161           %><div class="statusRunning text"><%=intl._t("Running")%></div>   
    162             <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
     151          %><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
     152        </td>
     153        <td class="tunnelControl">
     154            <a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
    163155        <%
    164156                break;
    165157                case IndexBean.NOT_RUNNING:
    166           %><div class="statusNotRunning text"><%=intl._t("Stopped")%></div>   
    167             <a class="control" title="Start this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curServer%>"><%=intl._t("Start")%></a>
     158          %><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
     159        </td>
     160        <td class="tunnelControl">
     161            <a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curServer%>"><%=intl._t("Start")%></a>
    168162        <%
    169163                break;
    170164            }
    171       %></div>
    172 
    173         <div class="descriptionField rowItem">
    174             <label><%=intl._t("Description")%>:</label>
    175             <div class="text"><%=indexBean.getTunnelDescription(curServer)%></div>
    176         </div>
    177 
    178         <div class="subdivider">
    179             <hr />
    180         </div>
     165      %>
     166        </td>
     167    </tr>
     168    <tr>
     169        <td class="tunnelDescription" colspan="6">
     170            <span class="tunnelDescriptionLabel"><b>Description:</b></span>
     171            <%=indexBean.getTunnelDescription(curServer)%>
     172        </td>
     173    </tr>
     174
    181175        <%
    182176        }
    183177      %>
    184         <div class="separator">
    185             <hr />
    186         </div>
    187            
    188         <div class="footer">
    189             <form id="addNewServerTunnelForm" action="edit">
    190             <div class="toolbox">
    191                    
    192         <label><%=intl._t("New hidden service")%>:</label>
     178
     179    <tr>
     180        <td class="newTunnel" colspan="6">
     181           <form id="addNewServerTunnelForm" action="edit">
     182               <b><%=intl._t("New hidden service")%>:</b>&nbsp;
    193183                    <select name="type">
    194184                        <option value="httpserver">HTTP</option>
     
    199189                    </select>
    200190                    <input class="control" type="submit" value="<%=intl._t("Create")%>" />
    201                 </div>
    202191            </form>
    203         </div>
    204     </div>   
    205 
    206 
    207     <div id="localClientTunnelList" class="panel">
    208         <div class="header">
    209            
    210     <h4><%=intl._t("I2P Client Tunnels")%></h4>
    211         </div>
    212 
    213        
    214   <div class="separator"> </div>
    215        
    216         <div class="nameHeaderField rowItem">
    217             <label><%=intl._t("Name")%>:</label>
    218         </div>
    219         <div class="portHeaderField rowItem">
    220             <label><%=intl._t("Port")%>:</label>
    221         </div>
    222         <div class="typeHeaderField rowItem">
    223             <label><%=intl._t("Type")%>:</label>
    224         </div>
    225         <div class="interfaceHeaderField rowItem">
    226             <label><%=intl._t("Interface")%>:</label>
    227         </div>
    228         <div class="statusHeaderField rowItem">
    229             <label><%=intl._t("Status")%>:</label>
    230         </div>
    231 
    232         <div class="separator">
    233             <hr />
    234         </div>
     192        </td>
     193    </tr>
     194</table>
     195         
     196    <h2><%=intl._t("I2P Client Tunnels")%></h2>
     197
     198<table id="clientTunnels">
     199    <tr>
     200        <th class="tunnelName"><%=intl._t("Name")%></th>
     201        <th class="tunnelType"><%=intl._t("Type")%></th>
     202        <th class="tunnelInterface"><%=intl._t("Interface")%></th>
     203        <th class="tunnelPort"><%=intl._t("Port")%></th>
     204        <th class="tunnelStatus"><%=intl._t("Status")%></th>
     205        <th class="tunnelControl"><%=intl._t("Control")%></th>
     206    </tr>
     207
    235208        <%
    236209        for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) {
    237210            if (!indexBean.isClient(curClient)) continue;
    238       %>
    239         <div class="nameField rowItem">
    240             <label><%=intl._t("Name")%>:</label>
    241             <span class="text"><a href="edit?tunnel=<%=curClient%>" title="Edit Tunnel Settings for <%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a></span>
    242         </div>
    243         <div class="portField rowItem">
    244             <label><%=intl._t("Port")%>:</label>
    245             <span class="text">
    246          <%
    247                String cPort= indexBean.getClientPort2(curClient);
    248                out.write(cPort);
    249                if (indexBean.isSSLEnabled(curClient))
    250                    out.write(" SSL");
    251           %>
    252             </span>
    253         </div>
    254         <div class="typeField rowItem">
    255             <label><%=intl._t("Type")%>:</label>
    256             <span class="text"><%=indexBean.getTunnelType(curClient)%></span>
    257         </div>
    258         <div class="interfaceField rowItem">
    259             <label><%=intl._t("Interface")%>:</label>
    260             <span class="text">
     211      %>       
     212
     213
     214    <tr class="tunnelProperties">
     215        <td class="tunnelName">
     216            <a href="edit?tunnel=<%=curClient%>" title="<%=intl._t("Edit Tunnel Settings for")%>&nbsp;<%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a>
     217        </td>
     218
     219        <td class="tunnelType"><%=indexBean.getTunnelType(curClient)%></td>
     220        <td class="tunnelInterface">
    261221         <%
    262222               /* should only happen for streamr client */
     
    270230               }
    271231          %>
    272             </span>
    273         </div>
    274         <div class="statusField rowItem">
    275             <label><%=intl._t("Status")%>:</label>
     232        </td>
     233        <td class="tunnelPort">
     234         <%
     235               String cPort= indexBean.getClientPort2(curClient);
     236               out.write(cPort);
     237               if (indexBean.isSSLEnabled(curClient))
     238                   out.write(" SSL");
     239          %>
     240        </td>
     241        <td class="tunnelStatus">
    276242            <%
    277243            switch (indexBean.getTunnelStatus(curClient)) {
    278244                case IndexBean.STARTING:
    279           %><div class="statusStarting text"><%=intl._t("Starting...")%></div>
     245          %><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
     246        </td>
     247        <td class="tunnelControl">
     248            <a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
     249        <%
     250                break;
     251                case IndexBean.STANDBY:
     252          %><div class="statusStarting text" title="<%=intl._t("Standby")%>"><%=intl._t("Standby")%></div>
     253        </td>
     254        <td class="tunnelControl">
    280255            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
    281256        <%
    282257                break;
    283                 case IndexBean.STANDBY:
    284           %><div class="statusStarting text"><%=intl._t("Standby")%></div>
     258                case IndexBean.RUNNING:
     259          %><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
     260        </td>
     261        <td class="tunnelControl">
    285262            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
    286263        <%
    287264                break;
    288                 case IndexBean.RUNNING:
    289           %><div class="statusRunning text"><%=intl._t("Running")%></div>
    290             <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
    291         <%
    292                 break;
    293265                case IndexBean.NOT_RUNNING:
    294           %><div class="statusNotRunning text"><%=intl._t("Stopped")%></div>
    295             <a class="control" title="Start this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curClient%>"><%=intl._t("Start")%></a>
     266          %><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
     267        </td>
     268        <td class="tunnelControl">
     269            <a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curClient%>"><%=intl._t("Start")%></a>
    296270        <%
    297271                break;
    298272            }
    299       %></div>
    300 
    301         <div class="destinationField rowItem">
    302             <label>
     273      %>
     274        </td>
     275    </tr>
     276    <tr>
     277        <td class="tunnelDestination" colspan="6">
     278            <span class="tunnelDestinationLabel">
    303279            <% if ("httpclient".equals(indexBean.getInternalType(curClient)) || "connectclient".equals(indexBean.getInternalType(curClient)) ||
    304280                   "sockstunnel".equals(indexBean.getInternalType(curClient)) || "socksirctunnel".equals(indexBean.getInternalType(curClient))) { %>
    305                 <%=intl._t("Outproxy")%>:
     281                <b><%=intl._t("Outproxy")%>:</b>
    306282            <% } else { %>
    307                 <%=intl._t("Destination")%>:
     283                <b><%=intl._t("Destination")%>:</b>
    308284            <% } %>
    309             </label>
    310             <div class="text">
     285</span>
    311286            <%
    312287               if (indexBean.getIsUsingOutproxyPlugin(curClient)) {
     
    322297                   }
    323298               } %>
    324             </div>
    325         </div>
     299        </td>
     300    </tr>
    326301        <% /* TODO SSL outproxy for httpclient if plugin not present */ %>
    327 
    328         <div class="descriptionField rowItem">
    329             <label><%=intl._t("Description")%>:</label>
    330             <div class="text"><%=indexBean.getTunnelDescription(curClient)%></div>
    331         </div>
    332 
    333         <div class="subdivider">
    334             <hr />
    335         </div>
     302    <tr>
     303        <td class="tunnelDescription" colspan="6">
     304            <span class="tunnelDescriptionLabel"><b><%=intl._t("Description")%>:</b></span>
     305            <%=indexBean.getTunnelDescription(curClient)%>
     306        </td>
     307    </tr>
    336308        <%
    337309        }
    338       %>           
    339         <div class="separator">
    340             <hr />
    341         </div>
    342    
    343         <div class="footer">
     310      %>
     311    <tr>
     312        <td class="newTunnel" colspan="6">
    344313            <form id="addNewClientTunnelForm" action="edit">
    345                 <div class="toolbox">
    346                    
    347         <label><%=intl._t("New client tunnel")%>:</label>
     314                <b><%=intl._t("New client tunnel")%>:</b>&nbsp;
    348315                    <select name="type">
    349316                        <option value="client"><%=intl._t("Standard")%></option>
     
    356323                    </select>
    357324                    <input class="control" type="submit" value="<%=intl._t("Create")%>" />
    358                 </div>
    359325            </form>
    360         </div>
    361     </div>
     326        </td>
     327    </tr>
     328</table>
     329</div>
     330
    362331<%
    363332
     
    365334
    366335%>
    367     <div id="pageFooter">
    368     </div>
     336
    369337</body>
    370338</html>
  • apps/i2ptunnel/jsp/register.jsp

    ra1fd8f49 r5368da2  
    3030    <% if (editBean.allowCSS()) {
    3131  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
    32     <link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
    33     <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
     32    <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
    3433    <% }
    3534  %>
     
    3837</style>
    3938</head>
    40 <body id="tunnelEditPage">
    41     <div id="pageHeader">
    42     </div>
     39<body id="tunnelRegistration">
     40
    4341<%
    4442
     
    4745%>
    4846    <form method="post" enctype="multipart/form-data" action="register" accept-charset="UTF-8">
    49         <div id="tunnelEditPanel" class="panel">
    50             <div class="header">
     47        <div class="panel" id="registration">
    5148<%
    5249    String tunnelTypeName;
     
    5653        tunnelTypeName = editBean.getTunnelType(curTunnel);
    5754        tunnelType = editBean.getInternalType(curTunnel);
    58       %><h4><%=intl._t("Registration Helper")%></h4><%
     55      %><h2><%=intl._t("Registration Helper")%> (<%=editBean.getTunnelName(curTunnel)%>)</h2><%
    5956    } else {
    6057        tunnelTypeName = "new";
    6158        tunnelType = "new";
    62       %><h4>Fail</h4><p>Tunnel not found</p><%
     59      %><h2>Fail</h2><p>Tunnel not found</p><%
    6360    }
    6461    String b64 = editBean.getDestinationBase64(curTunnel);
     
    7168                <input type="hidden" name="type" value="<%=tunnelType%>" />
    7269                <input type="submit" class="default" name="action" value="Save changes" />
    73             </div>
    7470<%
    7571    if (!"new".equals(tunnelType)) {     
    7672%>
    77   <span class="comment">
     73
     74<table>
     75    <tr>
     76        <td class="infohelp">
    7877    <%=intl._t("Please be sure to select, copy, and paste the entire contents of the appropriate authentication data into the form of your favorite registration site")%>
    79   </span>
    80             <div class="separator">
    81                 <hr />
    82             </div>
    83             <div id="nameField" class="rowItem">
    84                 <label for="name" accesskey="N">
    85                     <%=intl._t("Name")%>
    86                 </label>
    87                 <span class="text"><%=editBean.getTunnelName(curTunnel)%></span>
    88             </div>
     78        </td>
     79    </tr>
     80    <tr>
     81        <td>
     82            <b><%=intl._t("Tunnel Name")%>:</b> <%=editBean.getTunnelName(curTunnel)%>
     83        </td>
     84    </tr>
     85
    8986<%           
    9087      if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    91           %><div id="websiteField" class="rowItem">
    92                 <label for="spoofedHost" accesskey="W">
    93                     <%=intl._t("Website name")%>
    94                 </label>
    95                 <span class="text"><%=editBean.getSpoofedHost(curTunnel)%></span>   
    96             </div>
     88          %>
     89    <tr><td><b><%=intl._t("Website Name")%>:</b> <%=editBean.getSpoofedHost(curTunnel)%></td></tr>
    9790<%
    9891       }
    9992%>
    100             <div id="destinationField" class="rowItem">
    101                 <label for="localDestination" accesskey="L">
    102                     <%=intl._t("Local destination")%>
    103                 </label>
    104                 <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>               
    105             </div>
    106             <div class="subdivider">
    107                 <hr />
    108             </div>
     93
     94    <tr>
     95        <th>
     96            <b><%=intl._t("Local Destination")%></b>
     97        </th>
     98    </tr>
     99    <tr>
     100        <td>
     101            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>
     102        </td>
     103    </tr>
     104
    109105<%
    110106       if (b64 == null || b64.length() < 516) {
    111            %><%=intl._t("Local destination is not available. Start the tunnel.")%><%
     107           %><tr><td class="infohelp"><%=intl._t("Local destination is not available. Start the tunnel.")%></td></tr><%
    112108       } else if (name == null || name.equals("") || name.contains(" ") || !name.endsWith(".i2p")) {
    113109           if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
    114                %><%=intl._t("To enable registration verification, edit tunnel and set name (or website name) to a valid host name ending in '.i2p'")%><%
     110               %><tr><td class="infohelp"><%=intl._t("To enable registration verification, edit tunnel and set name (or website name) to a valid host name ending in '.i2p'")%></td></tr><%
    115111           } else {
    116                %><%=intl._t("To enable registration verification, edit tunnel and set name to a valid host name ending in '.i2p'")%><%
     112               %><tr><td class="infohelp"><%=intl._t("To enable registration verification, edit tunnel and set name to a valid host name ending in '.i2p'")%></td></tr><%
    117113           }
    118114       } else {
    119115           SigningPrivateKey spk = editBean.getSigningPrivateKey(curTunnel);
    120116           if (spk == null) {
    121                %><%=intl._t("Destination signing key is not available. Start the tunnel.")%><%
     117               %><tr><td class="infohelp"><%=intl._t("Destination signing key is not available. Start the tunnel.")%></td></tr><%
    122118           } else {
    123119               valid = true;
     
    125121               HostTxtEntry he = new HostTxtEntry(name, b64, props);
    126122               he.sign(spk);
    127           %><div id="sigField" class="rowItem">
    128                 <label for="signature">
    129                     <%=intl._t("Authentication for adding host")%>
    130                 </label>
    131                 <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    132             </div>
    133         </div>
    134         <div id="tunnelAdvancedNetworking" class="panel">
    135             <div class="header">
    136                 <h4><%=intl._t("Advanced authentication strings")%></h4>
    137             </div>
     123          %>
     124
     125    <tr>
     126        <th>
     127            <%=intl._t("Authentication for adding host {0}", name)%>
     128        </th>
     129    </tr>
     130    <tr>
     131        <td>
     132            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
     133        </td>
     134    </tr>
     135</table>
     136
     137<h3><%=intl._t("Advanced authentication strings")%></h3>
     138
    138139<%
    139140               props.remove(HostTxtEntry.PROP_SIG);
    140141               props.setProperty(HostTxtEntry.PROP_ACTION, HostTxtEntry.ACTION_REMOVE);
    141142               he.signRemove(spk);
    142           %><div id="sigField" class="rowItem">
    143                 <label for="signature">
    144                     <%=intl._t("Authentication for removing host")%>
    145                 </label>
    146                 <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeRemove(out); %></textarea>               
    147                 <span class="comment"><%=intl._t("This will remove the entry for {0}", name)%></span>
    148             </div>
    149             <div class="separator">
    150                 <hr />
    151             </div>
     143          %>
     144         
     145<table>
     146    <tr>
     147        <th>
     148            <%=intl._t("Authentication for removing host {0}", name)%>
     149        </th>
     150    </tr>
     151    <tr>
     152        <td>
     153            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.writeRemove(out); %></textarea>
     154        </td>
     155    </tr>
     156
    152157<%
    153158               String oldname = wrequest.getParameter("oldname");
     
    172177               }
    173178               props.remove(HostTxtEntry.PROP_SIG);
    174           %><div id="sigField" class="rowItem">
    175                 <label for="signature">
     179          %>
     180    <tr>
     181        <th>
    176182                    <%=intl._t("Authentication for changing name")%>
    177                 </label>
     183        </th>
     184    </tr>
    178185<%
    179186               if (oldname != null && oldname.length() > 0 && !oldname.equals(name)) {
     
    181188                   props.setProperty(HostTxtEntry.PROP_OLDNAME, oldname);
    182189                   he.sign(spk);
    183                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    184                 <span class="comment"><%=intl._t("This will change the name from {0} to {1}, using the same destination", oldname, name)%></span>
     190                %>
     191    <tr>
     192        <td>
     193            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
     194        </td>
     195    </tr>
     196    <tr>
     197        <td class="infohelp">
     198            <%=intl._t("This will change the name from {0} to {1}, using the same destination", oldname, name)%>
     199        </td>
     200    </tr>
     201
    185202<%
    186203               } else {
    187                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new host name.")%></span>
    188                   <span class="comment"><%=intl._t("Enter old host name below.")%></span>
    189 <%
    190                }
    191           %></div>
    192             <div class="separator">
    193                 <hr />
    194             </div>
    195 <%
    196                props.remove(HostTxtEntry.PROP_SIG);
    197           %><div id="sigField" class="rowItem">
    198                 <label for="signature">
     204                %><tr><td class="infohelp"><%=intl._t("This tunnel must be configured with the new host name.")%>
     205                  &nbsp;<%=intl._t("Enter old hostname below.")%></td></tr>
     206<%
     207               }
     208          %>
     209
     210<%
     211               props.remove(HostTxtEntry.PROP_SIG);
     212          %>
     213    <tr>
     214        <th>
    199215                    <%=intl._t("Authentication for adding alias")%>
    200                 </label>
     216        </th>
     217    </tr>
    201218<%
    202219               if (oldname != null && oldname.length() > 0 && !oldname.equals(name)) {
     
    204221                   props.setProperty(HostTxtEntry.PROP_OLDNAME, oldname);
    205222                   he.sign(spk);
    206                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    207                 <span class="comment"><%=intl._t("This will add an alias {0} for {1}, using the same destination", name, oldname)%></span>
     223                %>
     224    <tr>
     225        <td>
     226            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
     227        </td>
     228    </tr>
     229    <tr>
     230        <td class="infohelp">
     231            <%=intl._t("This will add an alias {0} for {1}, using the same destination", name, oldname)%>
     232        </td>
     233    </tr>
    208234<%
    209235               } else {
    210                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new host name.")%></span>
    211                   <span class="comment"><%=intl._t("Enter old host name below.")%></span>
    212 <%
    213                }
    214           %></div>
    215             <div class="separator">
    216                 <hr />
    217             </div>
    218 <%
    219                props.remove(HostTxtEntry.PROP_SIG);
    220           %><div id="sigField" class="rowItem">
    221                 <label for="signature">
     236                %><tr> <td class="infohelp"><%=intl._t("This tunnel must be configured with the new host name.")%>
     237                  &nbsp;<%=intl._t("Enter old hostname below.")%></td></tr>
     238<%
     239               }
     240          %>
     241         
     242<%
     243               props.remove(HostTxtEntry.PROP_SIG);
     244          %>
     245
     246    <tr>
     247        <th>
    222248                    <%=intl._t("Authentication for changing destination")%>
    223                 </label>
     249        </th>
     250    </tr>
     251
    224252<%
    225253               if (spk2 != null) {
     
    228256                   he.signInner(spk2);
    229257                   he.sign(spk);
    230                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    231                 <span class="comment"><%=intl._t("This will change the destination for {0}", name)%></span>
     258                %>
     259
     260    <tr>
     261        <td>
     262            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
     263        </td>
     264    </tr>
     265    <tr>
     266        <td class="infohelp">
     267            <%=intl._t("This will change the destination for {0}", name)%>
     268        </td>
     269    </tr>
     270
    232271<%
    233272               } else {
    234                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new destination.")%></span>
    235                   <span class="comment"><%=intl._t("Enter old destination below.")%></span>
    236 <%
    237                }
    238           %></div>
    239             <div class="separator">
    240                 <hr />
    241             </div>
     273                %><tr><td class="infohelp"><%=intl._t("This tunnel must be configured with the new destination.")%>
     274                  &nbsp;<%=intl._t("Enter old destination below.")%></td></tr>
     275<%
     276               }
     277          %>
     278
    242279<%
    243280               props.remove(HostTxtEntry.PROP_SIG);
    244281               props.remove(HostTxtEntry.PROP_OLDSIG);
    245           %><div id="sigField" class="rowItem">
    246                 <label for="signature">
     282          %>
     283         
     284    <tr>
     285        <th>
    247286                    <%=intl._t("Authentication for adding alternate destination")%>
    248                 </label>
     287        </th>
     288    </tr>
     289
    249290<%
    250291               if (spk2 != null) {
     
    253294                   he.signInner(spk2);
    254295                   he.sign(spk);
    255                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    256                 <span class="comment"><%=intl._t("This will add an alternate destination for {0}", name)%></span>
     296                %>
     297    <tr>
     298        <td>
     299            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
     300        </td>
     301    </tr>
     302    <tr>
     303        <td class="infohelp">
     304            <%=intl._t("This will add an alternate destination for {0}", name)%>
     305        </td>
     306    </tr>
    257307<%
    258308               } else {
    259                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new destination.")%></span>
    260                   <span class="comment"><%=intl._t("Enter old destination below.")%></span>
    261 <%
    262                }
    263           %></div>
    264             <div class="separator">
    265                 <hr />
    266             </div>
    267 <%
     309                %><tr><td class="infohelp"><%=intl._t("This tunnel must be configured with the new destination.")%>
     310                  &nbsp;<%=intl._t("Enter old destination below.")%></td></tr>
     311<%
     312               }
     313          %>
     314         
     315<%
     316
     317
    268318               props.remove(HostTxtEntry.PROP_SIG);
    269319               props.remove(HostTxtEntry.PROP_OLDSIG);
    270           %><div id="sigField" class="rowItem">
    271                 <label for="signature">
     320          %>
     321
     322    <tr>
     323        <th>
    272324                    <%=intl._t("Authentication for adding subdomain")%>
    273                 </label>
     325        </th>
     326    </tr>
    274327<%
    275328               if (oldname != null && oldname.length() > 0 && !oldname.equals(name) && spk2 != null) {
     
    279332                   he.signInner(spk2);
    280333                   he.sign(spk);
    281                 %><textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>               
    282                 <span class="comment"><%=intl._t("This will add a subdomain {0} of {1}, with a different destination", name, oldname)%></span>
     334                %>
     335               
     336    <tr>
     337        <td>
     338            <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" title="Copy and paste this to the registration site" wrap="off" spellcheck="false"><% he.write(out); %></textarea>
     339        </td>
     340    </tr>
     341    <tr>
     342        <td class="infohelp">
     343            <%=intl._t("This will add a subdomain {0} of {1}, with a different destination", name, oldname)%>
     344        </td>
     345    </tr>
     346
    283347<%
    284348               } else {
    285                 %><span class="comment"><%=intl._t("This tunnel must be configured with the new subdomain and destination.")%></span>
    286                   <span class="comment"><%=intl._t("Enter higher-level domain and destination below.")%></span>
    287 <%
    288                }
    289           %></div>
    290 
    291           <div class="footer">
    292             </div>
     349                %>
     350    <tr>
     351        <td class="infohelp">
     352            <%=intl._t("This tunnel must be configured with the new subdomain and destination.")%>
     353            &nbsp;<%=intl._t("Enter higher-level domain and destination below.")%>
     354        </td>
     355    </tr>
     356
     357<%
     358               }
     359          %>
     360
    293361<%
    294362          }  // spk != null
     
    296364    }  // !"new".equals(tunnelType)
    297365    if (!valid && curTunnel >= 0) {
    298         %><a href="edit?tunnel=<%=curTunnel%>"><%=intl._t("Go back and edit the tunnel")%></a><%
     366        %>
     367    <tr>
     368        <td>
     369            <a href="edit?tunnel=<%=curTunnel%>"><%=intl._t("Go back and edit the tunnel")%></a>
     370        </td>
     371    </tr>
     372        <%
    299373    }
    300374%>
    301         </div>
    302 
    303375
    304376<%
    305377    if (valid) {
    306378%>
    307         <div id="globalOperationsPanel" class="panel">
    308             <div class="header">
    309                 <h4><%=intl._t("Specify old name and destination")%></h4>
    310             </div>
    311   <span class="comment">
    312     <%=intl._t("This is only required for advanced authentication.")%>
    313     <%=intl._t("See above for required items.")%>
    314   </span>
     379
     380    <tr>
     381        <th>
     382            <%=intl._t("Specify old name and destination")%>
     383        </th>
     384    </tr>
     385    <tr>
     386        <td class="infohelp">
     387            <%=intl._t("This is only required for advanced authentication.")%>
     388            &nbsp;<%=intl._t("See above for required items.")%>
     389        </td>
     390    </tr>
    315391<%
    316392               String oldname = wrequest.getParameter("oldname");
    317393               if (oldname == null) oldname = "";
    318           %><div id="sigField" class="rowItem">
    319                 <label for="signature">
    320                     <%=intl._t("Old Host Name")%>
    321                 </label>
    322                 <input type="text" size="30" maxlength="50" name="oldname" id="name" title="Old Host Name" value="<%=oldname%>" class="freetext" />               
    323             </div>
    324             <div id="sigField" class="rowItem">
    325                 <label for="signature">
    326                     <%=intl._t("Private Key File for old Destination")%>
    327                 </label>
    328                 <input type="file" size="50%" name="olddestfile" id="name" value="" />               
    329             </div>
    330             <div class="footer">
    331                 <div class="toolbox">
     394          %>
     395    <tr>
     396        <td>
     397            <b><%=intl._t("Old Hostname")%>:</b>
     398            <input type="text" size="30" maxlength="50" name="oldname" id="oldName" title="Old Hostname" value="<%=oldname%>" class="freetext" />
     399        </td>
     400    </tr>
     401    <tr>
     402        <td>
     403            <b><%=intl._t("Private Key File for old Destination")%>:</b>
     404            <input type="file" name="olddestfile" id="oldDestFile" value="" />
     405        </td>
     406    </tr>
     407    <tr>
     408        <td class="buttons">
    332409                    <input type="hidden" value="true" name="removeConfirm" />
    333410                    <button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
    334411                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="authenticate" title="Generate Authentication"><%=intl._t("Generate")%></button>
    335                 </div>
    336             </div>
    337         </div>
     412        </td>
     413    </tr>
     414
    338415<%
    339416     } // valid
    340417%>
     418
     419</table>
     420</div>
    341421    </form>
    342     <div id="pageFooter">
    343     </div>
    344422<%
    345423
    346424  } else {
    347      %>Tunnels are not initialized yet, please reload in two minutes.<%
     425     %><div id="notReady"><%=intl._t("Tunnels are not initialized yet, please reload in two minutes.")%></div><%
    348426  }  // isInitialized()
    349427
  • apps/i2ptunnel/jsp/wizard.jsp

    ra1fd8f49 r5368da2  
    6363    <% if (editBean.allowCSS()) {
    6464  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico" />
    65     <link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
    6665    <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
    6766    <% }
     
    6968</head>
    7069<body id="tunnelWizardPage">
    71     <div id="pageHeader">
    72     </div>
    7370
    7471    <form method="post" action="<%=(curPage == 7 ? "list" : "wizard") %>">
    7572
    7673        <div id="wizardPanel" class="panel">
    77             <div class="header">
     74
    7875                <%
    7976                if (curPage == 1) {
    80                   %><h4><%=intl._t("Server or client tunnel?")%></h4><%
     77                  %><h2><%=intl._t("Server or client tunnel?")%></h2><%
    8178                } else if (curPage == 2) {
    82                   %><h4><%=intl._t("Tunnel type")%></h4><%
     79                  %><h2><%=intl._t("Tunnel type")%></h2><%
    8380                } else if (curPage == 3) {
    84                   %><h4><%=intl._t("Tunnel name and description")%></h4><%
     81                  %><h2><%=intl._t("Tunnel name and description")%></h2><%
    8582                } else if (curPage == 4 && tunnelIsClient) {
    86                   %><h4><%=intl._t("Tunnel destination")%></h4><%
     83                  %><h2><%=intl._t("Tunnel destination")%></h2><%
    8784                } else if (curPage == 5) {
    88                   %><h4><%=intl._t("Binding address and port")%></h4><%
     85                  %><h2><%=intl._t("Binding address and port")%></h2><%
    8986                } else if (curPage == 6) {
    90                   %><h4><%=intl._t("Tunnel auto-start")%></h4><%
     87                  %><h2><%=intl._t("Tunnel auto-start")%></h2><%
    9188                } else if (curPage == 7) {
    92                   %><h4><%=intl._t("Wizard completed")%></h4><%
     89                  %><h2><%=intl._t("Wizard completed")%></h2><%
    9390                } %>
    9491                <input type="hidden" name="page" value="<%=curPage%>" />
    9592                <input type="hidden" name="tunnel" value="null" />
    9693                <input type="hidden" name="nonce" value="<%=net.i2p.i2ptunnel.web.IndexBean.getNextNonce()%>" />
    97             </div>
    98 
    99             <div class="separator">
    100                 <hr />
    101             </div>
    102 
     94
     95
     96<table>
    10397            <% /* Page 1 - Whether to make a client or server tunnel */
    10498
    10599            if (curPage == 1) {
    106             %><p>
     100            %>
     101    <tr>
     102        <td>
     103            <p>
    107104                <%=intl._t("This wizard will take you through the various options available for creating tunnels in I2P.")%>
    108105            </p>
     
    112109                <%=intl._t("On the other hand, if you wish to host a service for others to connect to you'll need to create a SERVER tunnel.")%>
    113110            </p>
    114             <div id="typeField" class="rowItem">
    115                 <label><%=intl._t("Server Tunnel")%></label>
     111        </td>
     112    </tr>
     113    <tr>
     114        <td class="options">
     115            <span class="multiOption" id="isServer">
    116116                <input value="false" type="radio" id="baseType" name="isClient" class="tickbox" />
    117                 <label><%=intl._t("Client Tunnel")%></label>
     117                &nbsp;<%=intl._t("Server Tunnel")%>
     118            </span>
     119            <span class="multiOption" id="isClient">
    118120                <input value="true" type="radio" id="baseType" name="isClient" class="tickbox" checked="checked" />
    119             </div><%
     121                &nbsp;<%=intl._t("Client Tunnel")%>
     122            </span>
     123        </td>
     124    </tr>
     125           
     126            <%
    120127            } else {
    121128            %><input type="hidden" name="isClient" value="<%=tunnelIsClient%>" /><%
     
    127134
    128135            if (curPage == 2) {
    129             %><p>
     136            %>
     137    <tr>
     138        <td>
     139            <p>
    130140                <%=intl._t("There are several types of tunnels to choose from:")%>
    131141            </p>
    132             <table><%
     142        </td>
     143    </tr>
     144    <tr>
     145        <td id="wizardTable">
     146            <table id="wizardTunnelTypes">
     147            <%
    133148                if (tunnelIsClient) {
    134149                %>
     
    189204                }
    190205                %>
    191             </table>
    192             <div id="typeField" class="rowItem">
     206
     207                <tr>
     208                    <td>
     209                        <%=intl._t("Select tunnel type")%>:
     210                    </td>
     211                    <td>
    193212                <%
    194213                if (tunnelIsClient) {
     
    211230                </select><%
    212231                } /* tunnelIsClient */ %>
    213             </div><%
     232                    </td>
     233                </tr>
     234            </table>
     235        </td>
     236    </tr>
     237            <%
    214238            } else {
    215239            %><input type="hidden" name="type" value="<%=tunnelType%>" /><%
     
    221245
    222246            if (curPage == 3) {
    223             %><p>
     247            %>
     248    <tr>
     249        <td>
     250            <p>
    224251                <%=intl._t("Choose a name and description for your tunnel.")%>
    225252                <%=intl._t("These can be anything you want - they are just for ease of identifying the tunnel in the routerconsole.")%>
    226253            </p>
    227             <div id="nameField" class="rowItem">
    228                 <label for="name" accesskey="N">
    229                     <%=intl._t("Name")%>:(<span class="accessKey">N</span>)
    230                 </label>
    231                 <input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=(!"null".equals(request.getParameter("name")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("name")) : "" ) %>" class="freetext" />
    232             </div>
    233             <div id="descriptionField" class="rowItem">
    234                 <label for="description" accesskey="e">
    235                     <%=intl._t("Description")%>:(<span class="accessKey">E</span>)
    236                 </label>
     254        </td>
     255    </tr>
     256    <tr>
     257        <td>
     258            <span class="tag"><%=intl._t("Name")%>:</span>
     259                <input type="text" size="30" maxlength="50" name="name" id="name" placeholder="New Tunnel" title="Tunnel Name" value="<%=(!"null".equals(request.getParameter("name")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("name")) : "" ) %>" class="freetext" />
     260        </td>
     261    </tr>
     262    <tr>
     263        <td>
     264            <span class="tag"><%=intl._t("Description")%>:</span>
    237265                <input type="text" size="60" maxlength="80" name="nofilter_description"  id="description" title="Tunnel Description" value="<%=(!"null".equals(request.getParameter("nofilter_description")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description")) : "" ) %>" class="freetext" />
    238             </div><%
     266        </td>
     267    </tr>
     268            <%
    239269            } else {
    240270            %><input type="hidden" name="name" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("name"))%>" />
     
    249279              if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) {
    250280                if (curPage == 4) {
    251           %><p>
     281          %>
     282    <tr>
     283        <td>
     284            <p>
    252285                <%=intl._t("If you know of any outproxies for this type of tunnel (either HTTP or SOCKS), fill them in below.")%>
    253286                <%=intl._t("Separate multiple proxies with commas.")%>
    254287            </p>
    255             <div id="destinationField" class="rowItem">
    256                 <label for="proxyList" accesskey="x">
    257                     <%=intl._t("Outproxies")%>(<span class="accessKey">x</span>):
    258                 </label>
     288        </td>
     289    </tr>
     290    <tr>
     291        <td>
     292            <span class="tag"><%=intl._t("Outproxies")%>:</span>
    259293                <input type="text" size="30" id="proxyList" name="proxyList" title="List of Outproxy I2P destinations" value="<%=(!"null".equals(request.getParameter("proxyList")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("proxyList")) : "" ) %>" class="freetext" />
    260             </div><%
     294        </td>
     295    </tr>
     296            <%
    261297                } else {
    262298            %><input type="hidden" name="proxyList" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("proxyList"))%>" /><%
     
    264300              } else if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "streamrclient".equals(tunnelType)) {
    265301                if (curPage == 4) {
    266           %><p>
     302            %>
     303    <tr>
     304        <td>
     305            <p>
    267306                <%=intl._t("Type in the I2P destination of the service that this client tunnel should connect to.")%>
    268307                <%=intl._t("This could be the full base 64 destination key, or an I2P URL from your address book.")%>
    269308            </p>
    270             <div id="destinationField" class="rowItem">
    271                 <label for="targetDestination" accesskey="T">
    272                     <%=intl._t("Tunnel Destination")%>(<span class="accessKey">T</span>):
    273                 </label>
     309        </td>
     310    </tr>
     311    <tr>
     312        <td>
     313            <span class="tag"><%=intl._t("Tunnel Destination")%>:</span>
    274314                <input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=(!"null".equals(request.getParameter("targetDestination")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetDestination")) : "" ) %>" class="freetext" />
    275                 <span class="comment">(<%=intl._t("name, name:port, or destination")%>
     315            &nbsp;(<%=intl._t("name, name:port, or destination")%>
    276316                     <% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %>
    277317                         - <%=intl._t("b32 not recommended")%>
    278318                     <% } %> )
    279                 </span>
    280             </div><%
     319        </td>
     320    </tr>
     321            <%
    281322                } else {
    282323            %><input type="hidden" name="targetDestination" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetDestination"))%>" /><%
     
    291332            if ((tunnelIsClient && "streamrclient".equals(tunnelType)) || (!tunnelIsClient && !"streamrserver".equals(tunnelType))) {
    292333              if (curPage == 5) {
    293             %><p>
    294                 <%=intl._t("This is the IP that your service is running on, this is usually on the same machine so 127.0.0.1 is autofilled.")%><%
    295                 //XXX TODO<%=intl._t("For some reason streamrclient also uses this.")%>
    296             </p>
    297             <div id="hostField" class="rowItem">
    298                 <label for="targetHost" accesskey="H">
    299                     <%=intl._t("Host")%>(<span class="accessKey">H</span>):
    300                 </label>
    301                 <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=(!"null".equals(request.getParameter("targetHost")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost")) : "127.0.0.1" ) %>" class="freetext" />
    302             </div><%
     334            %>
     335    <tr>
     336        <td>
     337            <p>
     338                <%=intl._t("This is the IP that your service is running on, this is usually on the same machine so 127.0.0.1 is autofilled.")%>
     339                <% //TODO For some reason streamrclient also uses this. %>
     340            </p>
     341        </td>
     342    </tr>
     343    <tr>
     344        <td>
     345            <span class="tag"><%=intl._t("Host")%>:</span>
     346                <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" placeholder="127.0.0.1" value="<%=(!"null".equals(request.getParameter("targetHost")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost")) : "127.0.0.1" ) %>" class="freetext" />
     347        </td>
     348    </tr>
     349            <%
    303350              } else {
    304351            %><input type="hidden" name="targetHost" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost"))%>" /><%
     
    308355            if (!tunnelIsClient) {
    309356              if (curPage == 5) {
    310             %><p>
     357            %>
     358    <tr>
     359        <td>
     360            <p>
    311361                <%=intl._t("This is the port that the service is accepting connections on.")%>
    312362            </p>
    313             <div id="portField" class="rowItem">
    314                 <label for="targetPort" accesskey="P">
    315                     <%=intl._t("Port")%>(<span class="accessKey">P</span>):
    316                 </label>
     363        </td>
     364    </tr>
     365    <tr>
     366        <td>
     367            <span class="tag"><%=intl._t("Port")%>:</span>
    317368                <input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=(!"null".equals(request.getParameter("targetPort")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort")) : "" ) %>" class="freetext" />
    318             </div><%
     369        </td>
     370    </tr>
     371            <%
    319372              } else {
    320373            %><input type="hidden" name="targetPort" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort"))%>" /><%
     
    324377            if (tunnelIsClient || "httpbidirserver".equals(tunnelType)) {
    325378              if (curPage == 5) {
    326             %><p>
     379            %>
     380    <tr>
     381        <td>
     382            <p>
    327383                <%=intl._t("This is the port that the client tunnel will be accessed from locally.")%>
    328384                <%=intl._t("This is also the client port for the HTTPBidir server tunnel.")%>
    329385            </p>
    330             <div id="portField" class="rowItem">
    331                 <label for="port" accesskey="P">
    332                     <span class="accessKey">P</span>ort:
    333                 </label>
     386        </td>
     387    </tr>
     388    <tr>
     389        <td>
     390            <span class="tag"><%=intl._t("Port")%>:</span>
    334391                <input type="text" size="6" maxlength="5" id="port" name="port" title="Access Port Number" value="<%=(!"null".equals(request.getParameter("port")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("port")) : "" ) %>" class="freetext" />
    335             </div><%
     392        </td>
     393    </tr>
     394            <%
    336395              } else {
    337396            %><input type="hidden" name="port" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("port"))%>" /><%
     
    341400            if ((tunnelIsClient && !"streamrclient".equals(tunnelType)) || "httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) {
    342401              if (curPage == 5) {
    343             %><p>
     402            %>
     403    <tr>
     404        <td>
     405            <p>
    344406                <%=intl._t("How do you want this tunnel to be accessed? By just this machine, your entire subnet, or external internet?")%>
    345407                <%=intl._t("You will most likely want to just allow 127.0.0.1")%><%
    346                 //XXX TODO<%=intl._t("Note that it is relevant to most Client tunnels, and httpbidirserver and streamrserver tunnels.")%><%
    347                 //XXX TODO<%=intl._t("So the wording may need to change slightly for the client vs. server tunnels.")%>
    348             </p>
    349             <div id="reachField" class="rowItem">
    350                 <label for="reachableBy" accesskey="r">
    351                     <%=intl._t("Reachable by")%>(<span class="accessKey">R</span>):
    352                 </label>
     408                //TODO Note that it is relevant to most Client tunnels, and httpbidirserver and streamrserver tunnels.
     409                //TODO So the wording may need to change slightly for the client vs. server tunnels. %>
     410            </p>
     411        </td>
     412    </tr>
     413    <tr>
     414        <td>
     415            <span class="tag"><%=intl._t("Reachable by")%>:</span>
    353416                <select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
    354417              <%
     
    369432              %>
    370433                </select>
    371             </div><%
     434        </td>
     435    </tr>
     436               <%
    372437              } else {
    373438            %><input type="hidden" name="reachableBy" value="<%=net.i2p.data.DataHelper.stripHTML(request.getParameter("reachableBy"))%>" /><%
     
    380445
    381446            if (curPage == 6) {
    382             %><p>
     447            %>
     448    <tr>
     449        <td>
     450            <p>
    383451                <%=intl._t("The I2P router can automatically start this tunnel for you when the router is started.")%>
    384452                <%=intl._t("This can be useful for frequently-used tunnels (especially server tunnels), but for tunnels that are only used occassionally it would mean that the I2P router is creating and maintaining unnecessary tunnels.")%>
    385453            </p>
    386             <div id="startupField" class="rowItem">
    387                 <label for="startOnLoad" accesskey="a">
    388                     <%=intl._t("Auto Start")%>(<span class="accessKey">A</span>):
    389                 </label>
     454        </td>
     455    </tr>
     456    <tr>
     457        <td class="options">
    390458                <input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=("1".equals(request.getParameter("startOnLoad")) ? " checked=\"checked\"" : "")%> class="tickbox" />
    391                 <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
    392             </div><%
     459            &nbsp;<%=intl._t("Automatically start tunnel when router starts")%>
     460        </td>
     461    </tr>
     462            <%
    393463            } else {
    394464              if ("1".equals(request.getParameter("startOnLoad"))) {
     
    402472
    403473            if (curPage == 7) {
    404             %><p>
     474            %>
     475    <tr>
     476        <td>
     477            <p>
    405478                <%=intl._t("The wizard has now collected enough information to create your tunnel.")%>
    406479                <%=intl._t("Upon clicking the Save button below, the wizard will set up the tunnel, and take you back to the main I2PTunnel page.")%>
     
    417490                <%=intl._t("Below is a summary of the options you chose:")%>
    418491            </p>
    419             <table>
     492        </td>
     493    </tr>
     494    <tr>
     495        <td id="wizardTable">
     496            <table id="wizardSummary">
    420497                <tr><td><%=intl._t("Server or client tunnel?")%></td><td>
    421498                    <%=(tunnelIsClient ? "Client" : "Server")%>
     
    440517                } %>
    441518                </td></tr>
    442                 <tr><td><%=intl._t("Tunnel name and description")%></td><td>
    443                     <%=net.i2p.data.DataHelper.stripHTML(request.getParameter("name"))%><br />
    444                     <%=net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description"))%>
    445                 </td></tr><%
     519                <tr><td><%=intl._t("Tunnel name")%></td>
     520                <td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("name"))%></td></tr>   
     521                <tr><td><%=intl._t("Tunnel description")%></td>
     522                <td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description"))%></td></tr>
     523                <%
    446524                if (tunnelIsClient) { %>
    447525                <tr><td><%=intl._t("Tunnel destination")%></td><td><%
     
    453531                </td></tr><%
    454532                } %>
    455                 <tr><td><%=intl._t("Binding address and port")%></td><td><%
     533                <%
    456534                if ((tunnelIsClient && "streamrclient".equals(tunnelType)) || (!tunnelIsClient && !"streamrserver".equals(tunnelType))) { %>
    457                     <%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost"))%><br /><%
     535                    <tr><td><%=intl._t("Binding address")%></td><td>
     536                    <%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost"))%></td></tr><%
    458537                }
    459538                if (!tunnelIsClient) { %>
    460                     <%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort"))%><br /><%
     539                    <tr><td><%=intl._t("Tunnel port")%></td><td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort"))%></td></tr><%
    461540                }
    462541                if (tunnelIsClient || "httpbidirserver".equals(tunnelType)) { %>
    463                     <br /><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("port"))%><%
     542                    <tr><td><%=intl._t("Port")%></td><td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("port"))%></td></tr><%
    464543                }
    465544                if ((tunnelIsClient && !"streamrclient".equals(tunnelType)) || "httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) { %>
    466                     <br /><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("reachableBy"))%><%
     545                    <tr><td><%=intl._t("Reachable by")%></td><td><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("reachableBy"))%></td></tr><%
    467546                } %>
    468                 </td></tr>
    469547                <tr><td><%=intl._t("Tunnel auto-start")%></td><td><%
    470548                if ("1".equals(request.getParameter("startOnLoad"))) { %>
     
    475553                </td></tr>
    476554            </table>
     555        </td>
     556    </tr>
     557    <tr>
     558        <td class="infohelp">
    477559            <p>
    478560                <%=intl._t("Alongside these basic settings, there are a number of advanced options for tunnel configuration.")%>
     
    524606            <input type="hidden" name="totalDay" value="0" />
    525607            <input type="hidden" name="maxStreams" value="0" />
    526             <input type="hidden" name="cert" value="0" /><%
     608            <input type="hidden" name="cert" value="0" />
     609        </td>
     610    </tr>
     611            <%
    527612              } /* tunnelIsClient */
    528613            } /* curPage 7 */
    529614
    530615               /* End page 7 */ %>
    531         </div>
    532 
    533         <div id="globalOperationsPanel" class="panel">
    534             <div class="header"></div>
    535             <div class="footer">
    536                 <div class="toolbox">
     616    <tr>
     617        <td class="buttons">
    537618                    <a class="control" href="list"><%=intl._t("Cancel")%></a>
    538619                    <% if (curPage != 1 && curPage != 7) {
    539                     %><button id="controlPrevious" accesskey="P" class="control" type="submit" name="action" value="Previous page" title="Previous Page"><%=intl._t("Previous")%>(<span class="accessKey">P</span>)</button><%
     620                    %><button id="controlPrevious" class="control" type="submit" name="action" value="Previous page" title="Previous Page"><%=intl._t("Previous")%></button><%
    540621                    } %>
    541622                    <% if (curPage == 7) {
    542                     %><button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Tunnel"><%=intl._t("Save Tunnel")%>(<span class="accessKey">S</span>)</button><%
     623                    %><button id="controlSave" class="control" type="submit" name="action" value="Save changes" title="Save Tunnel"><%=intl._t("Save Tunnel")%></button><%
    543624                    } else if (curPage == 6) {
    544                     %><button id="controlFinish" accesskey="F" class="control" type="submit" name="action" value="Next page" title="Finish Wizard"><%=intl._t("Finish")%>(<span class="accessKey">F</span>)</button><%
     625                    %><button id="controlFinish" class="control" type="submit" name="action" value="Next page" title="Finish Wizard"><%=intl._t("Finish")%></button><%
    545626                    } else {
    546                     %><button id="controlNext" accesskey="N" class="control" type="submit" name="action" value="Next page" title="Next Page"><%=intl._t("Next")%>(<span class="accessKey">N</span>)</button><%
     627                    %><button id="controlNext" class="control" type="submit" name="action" value="Next page" title="Next Page"><%=intl._t("Next")%></button><%
    547628                    } %>
    548                 </div>
    549             </div>
     629        </td>
     630    </tr>
     631</table>
    550632        </div>
    551633
    552634    </form>
    553635
    554     <div id="pageFooter">
    555     </div>
    556636</body>
    557637</html>
  • apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java

    ra1fd8f49 r5368da2  
    5151        }
    5252
    53         buf.append("<ul>");
     53        buf.append("<ul id=\"banlist\">");
    5454       
    5555        for (Map.Entry<Hash, Banlist.Entry> e : entries.entrySet()) {
     
    7979            }
    8080            if (!key.equals(Hash.FAKE_HASH)) {
    81                 buf.append(" (<a href=\"configpeer?peer=").append(key.toBase64())
    82                    .append("#unsh\">").append(_t("unban now")).append("</a>)");
     81                buf.append(" <a href=\"configpeer?peer=").append(key.toBase64())
     82                   .append("#unsh\">[").append(_t("unban now")).append("]</a>");
    8383            }
    8484            buf.append("</li>\n");
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java

    ra1fd8f49 r5368da2  
    113113    public String getForm1() {
    114114        StringBuilder buf = new StringBuilder(1024);
    115         buf.append("<table>\n" +
     115        buf.append("<table id=\"clientconfig\">\n" +
    116116                   "<tr><th align=\"right\">").append(_t("Client")).append("</th><th>")
    117117           .append(_t("Run at Startup?")).append("</th><th>")
     
    199199    public String getForm2() {
    200200        StringBuilder buf = new StringBuilder(1024);
    201         buf.append("<table>\n" +
     201        buf.append("<table id=\"webappconfig\">\n" +
    202202                   "<tr><th align=\"right\">").append(_t("WebApp")).append("</th><th>")
    203203           .append(_t("Run at Startup?")).append("</th><th>")
     
    228228    public String getForm3() {
    229229        StringBuilder buf = new StringBuilder(1024);
    230         buf.append("<table>\n" +
     230        buf.append("<table id=\"pluginconfig\">\n" +
    231231                   "<tr><th align=\"right\">").append(_t("Plugin")).append("</th><th>")
    232232           .append(_t("Run at Startup?")).append("</th><th>")
     
    291291                s = stripHTML(appProps, "websiteURL");
    292292                if (s != null) {
    293                     desc.append("<tr><td>")
    294                         .append("<a href=\"").append(s).append("\">").append(_t("Website")).append("</a><td>&nbsp;");
     293                    desc.append("<tr><td><b>")
     294                        .append(_t("Website")).append("</b></td><td><a href=\"")
     295                        .append(s).append("\">").append(s).append("</a>");
    295296                }
    296297                String updateURL = stripHTML(appProps, "updateURL.su3");
     
    298299                    updateURL = stripHTML(appProps, "updateURL");
    299300                if (updateURL != null) {
    300                     desc.append("<tr><td>")
    301                         .append("<a href=\"").append(updateURL).append("\">").append(_t("Update link")).append("</a><td>&nbsp;");
     301                    desc.append("<tr><td><b>")
     302                        .append(_t("Update link")).append("</b></td><td><a href=\"")
     303                        .append(updateURL).append("\">").append(updateURL).append("</a>");
    302304                }
    303305                desc.append("</table>");
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java

    ra1fd8f49 r5368da2  
    5858    public void renderNavBar(String requestURI, boolean graphical) throws IOException {
    5959        StringBuilder buf = new StringBuilder(1024);
    60         // TODO fix up the non-light themes
    61         String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME);
    62         boolean span = graphical && (theme == null || theme.equals(CSSHelper.DEFAULT_THEME));
     60        boolean span = graphical;
    6361        if (!span)
    6462            buf.append("<center>");
     
    8583            }
    8684            if (span)
    87                 buf.append(" </span>\n");
     85                buf.append("</span>\n");
    8886            else if (i != pages.length - 1)
    89                 buf.append(" |\n");
     87                buf.append("&nbsp;&nbsp;\n");
    9088        }
    9189        if (!span)
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java

    ra1fd8f49 r5368da2  
    211211        }
    212212        StringBuilder buf = new StringBuilder(128);
    213         buf.append("<div class=\"indent\">");
    214213        for (String addr : addrs) {
    215             buf.append("\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
    216                        "<input type=\"checkbox\" class=\"optbox\" value=\"foo\" name=\"addr_");
     214            buf.append("<input type=\"checkbox\" class=\"optbox\" value=\"foo\" name=\"addr_");
    217215            buf.append(addr);
    218216            buf.append('"');
     
    221219            buf.append("> ");
    222220            buf.append(addr);
    223             buf.append("<br>");
    224         }
    225         buf.append("\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
     221            buf.append("<br>\n");
     222        }
    226223        if (!addrs.isEmpty()) {
    227224            buf.append(_t("Add host name or IP"))
    228225               .append(": ");
    229226        }
    230         buf.append("<input name=\"udpHost1\" type=\"text\" size=\"16\" >" +
    231                    "</div>");
     227        buf.append("<input name=\"udpHost1\" type=\"text\" size=\"16\" >");
    232228        return buf.toString();
    233229    }
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java

    ra1fd8f49 r5368da2  
    2727        }
    2828
    29         buf.append("<table>\n");
     29        buf.append("<table id=\"tunnelconfig\">\n");
    3030        TunnelPoolSettings exploratoryIn = _context.tunnelManager().getInboundSettings();
    3131        TunnelPoolSettings exploratoryOut = _context.tunnelManager().getOutboundSettings();
     
    7070        boolean advanced = isAdvanced();
    7171
    72         buf.append("<tr><th colspan=\"3\"><a name=\"").append(prefix).append("\">");
     72        buf.append("<tr><th colspan=\"3\" class=\"th_title\"><a name=\"").append(prefix).append("\">");
    7373        buf.append(name).append("</a></th></tr>\n");
    7474        if (in.getLength() <= 0 ||
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java

    ra1fd8f49 r5368da2  
    1010    public String getSettings() {
    1111        StringBuilder buf = new StringBuilder(512);
     12        buf.append("<div id=\"availablethemes\">");
    1213        String current = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
    1314        Set<String> themes = themeSet();
    1415        for (String theme : themes) {
    15             buf.append("<input type=\"radio\" class=\"optbox\" name=\"theme\" ");
     16            buf.append("<div class=\"themechoice\">")
     17               .append("<input type=\"radio\" class=\"optbox\" name=\"theme\" ");
    1618            if (theme.equals(current))
    1719                buf.append(CHECKED);
    18             buf.append("value=\"").append(theme).append("\">").append(_t(theme)).append("<br>\n");
     20            buf.append("value=\"").append(theme).append("\">")
     21               .append("<object height=\"48\" width=\"48\" data=\"/themes/console/").append(theme).append("/images/thumbnail.png\">")
     22               .append("<img height=\"48\" width=\"48\" alt=\"\" src=\"/themes/console/images/thumbnail.png\">")
     23               .append("</object><br>")
     24               .append("<div class=\"themelabel\">").append(_t(theme)).append("</div>")
     25               .append("</div>\n");
    1926        }
    2027        boolean universalTheming = _context.getBooleanProperty(CSSHelper.PROP_UNIVERSAL_THEMING);
     28        buf.append("</div><div id=\"themeoptions\">");
    2129        buf.append("<input type=\"checkbox\" name=\"universalTheming\" ");
    2230        if (universalTheming)
     
    3644        buf.append("value=\"1\">")
    3745           .append(_t("Force the mobile console to be used"))
    38            .append("<br>\n");
     46           .append("</div>\n");
    3947        return buf.toString();
    4048    }
     
    7280     *  added to the top-level build.xml for the updater.
    7381     *  As of 0.9.12, ISO 639-2 three-letter codes are supported also.
     82     *  Note: To avoid truncation, ensure language name is no longer than 17 chars.
    7483     */
    7584    private static final String langs[][] = {
     
    102111        { "zh", "cn", _x("Chinese"), null },
    103112        { "zh_TW", "tw", _x("Chinese"), "Taiwan" },
    104         { "xx", "a1", "Debug: Find untagged strings", null },
     113        { "xx", "a1", "Untagged strings", null },
    105114    };
    106115
     
    141150                continue;
    142151            // we use "lang" so it is set automagically in CSSHelper
    143             buf.append("<input type=\"radio\" class=\"optbox\" name=\"lang\" ");
     152            buf.append("<div class=\"langselect\"><input type=\"radio\" class=\"optbox\" name=\"lang\" ");
    144153            if (lang.equals(current))
    145154                buf.append(CHECKED);
    146155            buf.append("value=\"").append(lang).append("\">")
    147                .append("<img height=\"11\" width=\"16\" alt=\"\" src=\"/flags.jsp?c=").append(langs[i][1]).append("\"> ");
     156               .append("<img height=\"11\" width=\"16\" alt=\"\" src=\"/flags.jsp?c=").append(langs[i][1]).append("\">")
     157               .append("<div class=\"ui_lang\">");
    148158            int under = lang.indexOf('_');
    149159            String slang = (under > 0) ? lang.substring(0, under) : lang;
     
    155165                   .append(')');
    156166            }
    157             buf.append("<br>\n");
     167            buf.append("</div></div>\n");
    158168        }
    159169        return buf.toString();
     
    165175        ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
    166176        Map<String, String> userpw = mgr.getMD5(RouterConsoleRunner.PROP_CONSOLE_PW);
    167         buf.append("<table>");
     177        buf.append("<table id=\"consolepass\">");
    168178        if (userpw.isEmpty()) {
    169179            buf.append("<tr><td colspan=\"3\">");
     
    174184               .append(_t("Remove"))
    175185               .append("</th><th>")
    176                .append(_t("User Name"))
     186               .append(_t("Username"))
    177187               .append("</th><th>&nbsp;</th></tr>\n");
    178188            for (String name : userpw.keySet()) {
     
    184194            }
    185195        }
    186         buf.append("<tr><td align=\"center\"><b>")
    187            .append(_t("Add")).append(":</b>" +
    188                    "</td><td align=\"left\"><input type=\"text\" name=\"name\">" +
    189                    "</td><td align=\"left\"><b>");
    190         buf.append(_t("Password")).append(":</b> " +
    191                    "<input type=\"password\" size=\"40\" name=\"nofilter_pw\"></td></tr>" +
    192                    "</table>\n");
     196        buf.append("<tr><td id=\"pw_adduser\" align=\"left\" colspan=\"3\"><b>")
     197           .append("<b>").append(_t("Username")).append(":</b> ")
     198           .append("<input type=\"text\" name=\"name\">")
     199           .append("<b>").append(_t("Password")).append(":</b> ")
     200           .append("<input type=\"password\" size=\"40\" name=\"nofilter_pw\">")
     201           .append("</td></tr>")
     202           .append("</table>\n");
    193203        return buf.toString();
    194204    }
  • apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java

    ra1fd8f49 r5368da2  
    100100        String nonce = CSSHelper.getNonce();
    101101        try {
    102             _out.write("<br><h3>" + _t("Display Events") + "</h3>");
     102            _out.write("<br><h3 id=\"displayevents\">" + _t("Display Events") + "</h3>");
    103103            _out.write("<form action=\"events\" method=\"POST\">\n" +
    104104                       "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
     
    108108                writeOption(_times[i]);
    109109            }
    110             _out.write("</select><br>");
     110            _out.write("</select>&nbsp;");
    111111            _out.write(_t("Event type") + ": <select name=\"type\">");
    112112            // sorted by translated display string
     
    120120            }
    121121            _out.write("</select>" +
    122                        "<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Filter events") + "\"></div></form>");
     122                       "&nbsp;<input type=\"submit\" class=\"accept\" value=\"" + _t("Filter events") + "\"></form>");
    123123        } catch (IOException ioe) {
    124124            ioe.printStackTrace();
     
    176176        }
    177177        StringBuilder buf = new StringBuilder(2048);
    178         buf.append("<table><tr><th>");
     178        buf.append("<table id=\"eventlog\"><tr><th>");
    179179        buf.append(_t("Time"));
    180180        buf.append("</th><th>");
  • apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java

    ra1fd8f49 r5368da2  
    3030    public String getFileSummary() {
    3131        StringBuilder buf = new StringBuilder(16*1024);
    32         buf.append("<table><tr><th>File</th><th>Size</th><th>Date</th><th>SHA 256</th><th>Revision</th>" +
     32        buf.append("<table id=\"jardump\"><tr><th>File</th><th>Size</th><th>Date</th><th>SHA 256</th><th>Revision</th>" +
    3333                   "<th>JDK</th><th>Built</th><th>By</th><th>Mods</th></tr>");
    3434
  • apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java

    ra1fd8f49 r5368da2  
    233233                displayName = name;
    234234            }
    235             _out.write("<h3>");
     235            _out.write("<h3 id=\"graphinfo\">");
    236236            _out.write(_t("{0} for {1}", displayName, DataHelper.formatDuration2(_periodCount * period)));
    237237            if (_end > 0)
    238238                _out.write(' ' + _t("ending {0} ago", DataHelper.formatDuration2(_end * period)));
    239239
    240             _out.write("</h3><img class=\"statimage\" border=\"0\""
     240            _out.write("&nbsp;<a href=\"graphs\">[" + _t("Return to main graphs page") + "]</a></h3>\n"
     241                       + "<div class=\"graphspanel\"><img class=\"statimage\" border=\"0\""
    241242                       + " src=\"viewstat.jsp?stat="
    242243                       + name
     
    247248                       + "&amp;width=" + _width
    248249                       + "&amp;height=" + _height
    249                        + "\"><p>\n");
     250                       + "\"></div><p id=\"graphopts\">\n");
    250251
    251252            if (_width < MAX_X && _height < MAX_Y) {
     
    354355        String nonce = CSSHelper.getNonce();
    355356        try {
    356             _out.write("<br><h3>" + _t("Configure Graph Display") + " [<a href=\"configstats\">" + _t("Select Stats") + "</a>]</h3>");
     357            _out.write("<br><h3 id=\"graphdisplay\">" + _t("Configure Graph Display") + " <a href=\"configstats\">[" + _t("Select Stats") + "]</a></h3>");
    357358            _out.write("<form action=\"graphs\" method=\"POST\">\n" +
    358359                       "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
     
    385386                _out.write(HelperBase.CHECKED);
    386387            _out.write(">" +
    387                        "<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
     388                       "<hr><div class=\"formaction\" id=\"graphing\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
    388389        } catch (IOException ioe) {
    389390            ioe.printStackTrace();
  • apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java

    ra1fd8f49 r5368da2  
    3030        _x("Addressbook") + S + _x("Manage your I2P hosts file here (I2P domain name resolution)") + S + "/dns" + S + I + "book_addresses.png" + S +
    3131        _x("Configure Bandwidth") + S + _x("I2P Bandwidth Configuration") + S + "/config" + S + I + "action_log.png" + S +
    32         _x("Configure Language") + S + _x("Console Language Selection") + S + "/configui" + S + I + "wrench_orange.png" + S +
     32        _x("Configure UI") + S + _x("Select console theme & language & set optional console password") + S + "/configui" + S + I + "wrench_orange.png" + S +
    3333        _x("Customize Home Page") + S + _x("I2P Home Page Configuration") + S + "/confighome" + S + I + "home_page.png" + S +
    3434        _x("Email") + S + _x("Anonymous webmail client") + S + "/susimail/susimail" + S + I + "email.png" + S +
     
    3636        _x("Router Console") + S + _x("I2P Router Console") + S + "/console" + S + I + "toolbox.png" + S +
    3737        _x("Torrents") + S + _x("Built-in anonymous BitTorrent Client") + S + "/i2psnark/" + S + I + "magnet.png" + S +
    38         _x("Website") + S + _x("Local web server") + S + "http://127.0.0.1:7658/" + S + I + "server_32x32.png" + S +
     38        _x("Website") + S + _x("Local web server for hosting your own content on I2P") + S + "http://127.0.0.1:7658/" + S + I + "server_32x32.png" + S +
    3939        "";
    4040
     
    4242    static final String DEFAULT_FAVORITES =
    4343        "anoncoin.i2p" + S + _x("The Anoncoin project") + S + "http://anoncoin.i2p/" + S + I + "anoncoin_32.png" + S +
    44         _x("Bug Reports") + S + _x("Bug tracker") + S + "http://trac.i2p2.i2p/report/1" + S + I + "bug.png" + S +
     44        _x("I2P Bug Reports") + S + _x("Bug tracker") + S + "http://trac.i2p2.i2p/report/1" + S + I + "bug.png" + S +
    4545        //"colombo-bt.i2p" + S + _x("The Italian Bittorrent Resource") + S + "http://colombo-bt.i2p/" + S + I + "colomboicon.png" + S +
    4646        _x("Dev Forum") + S + _x("Development forum") + S + "http://zzz.i2p/" + S + I + "group_gear.png" + S +
     
    4848        "echelon.i2p" + S + _x("I2P Applications") + S + "http://echelon.i2p/" + S + I + "box_open.png" + S +
    4949        "exchanged.i2p" + S + _x("Anonymous cryptocurrency exchange") + S + "http://exchanged.i2p/" + S + I + "exchanged.png" + S +
    50         _x("FAQ") + S + _x("Frequently Asked Questions") + S + "http://i2p-projekt.i2p/faq" + S + I + "question.png" + S +
    51         _x("Forum") + S + _x("Community forum") + S + "http://forum.i2p/" + S + I + "group.png" + S +
    52         _x("Anonymous Git Hosting") + S + _x("A public anonymous Git hosting site - supports pulling via Git and HTTP and pushing via SSH") + S + "http://git.repo.i2p/" + S + I + "git-logo.png" + S +
    53         "hiddengate.i2p" + S + _x("HiddenGate") + S + "http://hiddengate.i2p/" + S + I + "hglogo32.png" + S +
     50        _x("I2P FAQ") + S + _x("Frequently Asked Questions") + S + "http://i2p-projekt.i2p/faq" + S + I + "question.png" + S +
     51        _x("I2P Forum") + S + _x("Community forum") + S + "http://forum.i2p/" + S + I + "group.png" + S +
     52        "git.repo.i2p" + S + _x("A public anonymous Git hosting site - supports pulling via Git and HTTP and pushing via SSH") + S + "http://git.repo.i2p/" + S + I + "git-logo.png" + S +
     53        "hiddengate [ru]" + S + _x("Russian I2P-related wiki") + S + "http://hiddengate.i2p/" + S + I + "hglogo32.png" + S +
    5454        _x("I2P Wiki") + S + _x("Anonymous wiki - share the knowledge") + S + "http://i2pwiki.i2p/" + S + I + "i2pwiki_logo.png" + S +
    5555        "Ident " + _x("Microblog") + S + _x("Your premier microblogging service on I2P") + S + "http://id3nt.i2p/" + S + I + "ident_icon_blue.png" + S +
     
    5858        //_x("Key Server") + S + _x("OpenPGP Keyserver") + S + "http://keys.i2p/" + S + I + "education.png" + S +
    5959        //"killyourtv.i2p" + S + _x("Debian and Tahoe-LAFS repositories") + S + "http://killyourtv.i2p/" + S + I + "television_delete.png" + S +
    60         _x("Free Web Hosting") + S + _x("Free eepsite hosting with PHP and MySQL") + S + "http://open4you.i2p/" + S + I + "open4you-logo.png" + S +
    61         _x("Pastebin") + S + _x("I2P Pastebin") + S + "http://zerobin.i2p/" + S + I + "paste_plain.png" + S +
     60        _x("Open4You") + S + _x("Free eepsite hosting with PHP and MySQL") + S + "http://open4you.i2p/" + S + I + "open4you-logo.png" + S +
     61        _x("Pastebin") + S + _x("Encrypted I2P Pastebin") + S + "http://zerobin.i2p/" + S + I + "paste_plain.png" + S +
    6262        _x("Planet I2P") + S + _x("I2P News") + S + "http://planet.i2p/" + S + I + "world.png" + S +
    63         _x("Plugins") + S + _x("Add-on directory") + S + "http://i2pwiki.i2p/index.php?title=Plugins" + S + I + "plugin.png" + S +
     63        _x("I2P Plugins") + S + _x("Add-on directory") + S + "http://i2pwiki.i2p/index.php?title=Plugins" + S + I + "plugin.png" + S +
    6464        _x("Postman's Tracker") + S + _x("Bittorrent tracker") + S + "http://tracker2.postman.i2p/" + S + I + "magnet.png" + S +
    6565        _x("Project Website") + S + _x("I2P home page") + S + "http://i2p-projekt.i2p/" + S + I + "info_rhombus.png" + S +
    66         _x("Russian News Feed") + S + "lenta.i2p" + S + "http://lenta.i2p/" + S + I + "lenta_main_logo.png" + S +
     66        _x("lenta news [ru]") + S + _x("Russian News Feed") + S + "http://lenta.i2p/" + S + I + "lenta_main_logo.png" + S +
    6767        //"Salt" + S + "salt.i2p" + S + "http://salt.i2p/" + S + I + "salt_console.png" + S +
    6868        "stats.i2p" + S + _x("I2P Network Statistics") + S + "http://stats.i2p/cgi-bin/dashboard.cgi" + S + I + "chart_line.png" + S +
    69         _x("Technical Docs") + S + _x("Technical documentation") + S + "http://i2p-projekt.i2p/how" + S + I + "education.png" + S +
     69        _x("I2P Technical Docs") + S + _x("Technical documentation") + S + "http://i2p-projekt.i2p/how" + S + I + "education.png" + S +
    7070        _x("The Tin Hat") + S + _x("Privacy guides and tutorials") + S + "http://secure.thetinhat.i2p/" + S + I + "thetinhat.png" + S +
    7171        _x("Trac Wiki") + S + S + "http://trac.i2p2.i2p/" + S + I + "billiard_marker.png" + S +
    7272        //_x("Ugha's Wiki") + S + S + "http://ugha.i2p/" + S + I + "billiard_marker.png" + S +
    73         _x("Sponge's main site") + S + _x("Seedless and the Robert BitTorrent applications") + S + "http://sponge.i2p/" + S + I + "user_astronaut.png" + S +
     73        _x("sponge.i2p") + S + _x("Seedless and the Robert BitTorrent applications") + S + "http://sponge.i2p/" + S + I + "user_astronaut.png" + S +
    7474        "";
    7575
     
    212212    private String renderConfig(Collection<App> apps) {
    213213        StringBuilder buf = new StringBuilder(1024);
    214         buf.append("<table><tr><th>")
     214        buf.append("<table class=\"homelinkedit\"><tr><th>")
    215215           .append(_t("Remove"))
    216            .append("</th><th colspan=\"2\">")
     216           .append("</th><th></th><th>")
    217217           .append(_t("Name"))
    218218           .append("</th><th>")
     
    239239            buf.append("</a></td></tr>\n");
    240240        }
    241         buf.append("<tr><td colspan=\"2\" align=\"center\"><b>")
     241        buf.append("<tr id=\"addnew\"><td colspan=\"2\" align=\"center\"><b>")
    242242           .append(_t("Add")).append(":</b>" +
    243243                   "</td><td align=\"left\"><input type=\"text\" name=\"nofilter_name\"></td>" +
  • apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java

    ra1fd8f49 r5368da2  
    4848       
    4949        StringBuilder buf = new StringBuilder(32*1024);
    50         buf.append("<b><div class=\"joblog\"><h3>").append(_t("I2P Job Queue")).append("</h3><br><div class=\"wideload\">")
     50        buf.append("<div class=\"joblog\">")
     51           .append("<h2 id=\"jobrunners\">")
    5152           .append(_t("Job runners")).append(": ").append(numRunners)
    52            .append("</b><br>\n");
     53           .append("</h2>\n");
    5354
    5455        long now = _context.clock().now();
    5556
    56         buf.append("<hr><b>").append(_t("Active jobs")).append(": ").append(activeJobs.size()).append("</b><ol>\n");
     57        buf.append("<h3 id=\"activejobs\">")
     58           .append(_t("Active jobs")).append(": ").append(activeJobs.size())
     59           .append("</h3><ol>");
    5760        for (int i = 0; i < activeJobs.size(); i++) {
    5861            Job j = activeJobs.get(i);
     
    6265        buf.append("</ol>\n");
    6366
    64         buf.append("<hr><b>").append(_t("Just finished jobs")).append(": ").append(justFinishedJobs.size()).append("</b><ol>\n");
     67        buf.append("<h3 id=\"finishedjobs\">")
     68           .append(_t("Just finished jobs")).append(": ").append(justFinishedJobs.size())
     69           .append("</h3><ol>");
    6570        for (int i = 0; i < justFinishedJobs.size(); i++) {
    6671            Job j = justFinishedJobs.get(i);
     
    7075        buf.append("</ol>\n");
    7176
    72         buf.append("<hr><b>").append(_t("Ready/waiting jobs")).append(": ").append(readyJobs.size()).append("</b><ol>\n");
     77        buf.append("<h3 id=\"readyjobs\">")
     78           .append(_t("Ready/waiting jobs")).append(": ").append(readyJobs.size())
     79           .append("</h3><ol>");
    7380        ObjectCounter<String> counter = new ObjectCounter<String>();
    7481        for (int i = 0; i < readyJobs.size(); i++) {
     
    8794        buf.setLength(0);
    8895
    89         buf.append("<hr><b>").append(_t("Scheduled jobs")).append(": ").append(timedJobs.size()).append("</b><ol>\n");
     96        buf.append("<h3 id=\"scheduledjobs\">")
     97           .append(_t("Scheduled jobs")).append(": ").append(timedJobs.size())
     98           .append("</h3><ol>");
    9099        long prev = Long.MIN_VALUE;
    91100        counter.clear();
     
    111120        buf.setLength(0);
    112121       
    113         buf.append("<hr><b>").append(_t("Total Job Statistics")).append("</b>\n");
     122        buf.append("<h3 id=\"totaljobstats\">")
     123           .append(_t("Total Job Statistics"))
     124           .append("</h3>\n");
    114125        getJobStats(buf);
    115126        out.write(buf.toString());
     
    121132        if (names.size() < 4)
    122133            return;
    123         buf.append("<table style=\"width: 30%; margin-left: 100px;\">\n" +
    124                    "<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Queued")).append("<th>");
     134        buf.append("<table id=\"schedjobs\" style=\"width: 30%; margin-left: 100px;\">\n" +
     135                   "<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Queued")).append("</th></tr>\n");
    125136        Collections.sort(names, new JobCountComparator(counter));
    126137        for (String name : names) {
     
    138149     */
    139150    private void getJobStats(StringBuilder buf) {
    140         buf.append("<table>\n" +
     151        buf.append("<div class=\"widescroll\"><table id=\"jobstats\">\n" +
    141152                   "<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Runs")).append("</th>" +
    142153                   "<th>").append(_t("Dropped")).append("</th>" +
  • apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java

    ra1fd8f49 r5368da2  
    130130        } else {
    131131            str = str.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
    132             return "<p>" + _t("File location") + ": <b><code>" + f.getAbsolutePath() + "</code></b></p><pre>" + str + "</pre>";
     132            return "<p>" + _t("File location") + ": <b><code>" + f.getAbsolutePath() + "</code></b></p></td></tr>\n<tr><td><pre>" + str + "</pre>";
    133133        }
    134134    }
     
    145145    private String formatMessages(List<String> msgs) {
    146146        if (msgs.isEmpty())
    147             return "<p><i>" + _t("No log messages") + "</i></p>";
     147            return "</td></tr><tr><td><p><i>" + _t("No log messages") + "</i></p>";
    148148        boolean colorize = _context.getBooleanPropertyDefaultTrue("routerconsole.logs.color");
    149149        StringBuilder buf = new StringBuilder(16*1024);
    150         buf.append("<ul>");
     150        buf.append("</td></tr><tr><td><ul>");
    151151        for (int i = msgs.size() - 1; i >= 0; i--) {
    152152            String msg = msgs.get(i);
  • apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java

    ra1fd8f49 r5368da2  
    117117        StringBuilder buf = new StringBuilder(1024);
    118118        buf.append("<div class=\"confignav\" id=\"confignav\">");
    119         // TODO fix up the non-light themes
    120         String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME);
    121         boolean span = _graphical && (theme == null || theme.equals(CSSHelper.DEFAULT_THEME));
     119        boolean span = _graphical;
    122120        if (!span)
    123121            buf.append("<center>");