Changeset 6bfd39d5


Ignore:
Timestamp:
May 1, 2016 11:45:22 AM (5 years ago)
Author:
str4d <str4d@…>
Branches:
master
Children:
29befb4
Parents:
2fe1f97 (diff), 8e39144 (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 8e9786b74b0ffb821179c5c60954ab3c00a71250)

to branch 'i2p.i2p.str4d.ui' (head 94e11eaba6bb17c14f4d9ca58547867f34949847)

Files:
76 edited
12 moved

Legend:

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

    r2fe1f97 r6bfd39d5  
    10151015            if(!theme.equals(_config.getProperty(PROP_THEME))) {
    10161016                _config.setProperty(PROP_THEME, theme);
    1017                 addMessage(_t("{0} theme loaded, return to main i2psnark page to view.", theme));
     1017                addMessage(_t("{0} theme loaded.", theme));
    10181018                changed = true;
    10191019            }
  • apps/i2psnark/java/src/org/klomp/snark/dht/DHTNodes.java

    r2fe1f97 r6bfd39d5  
    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

    r2fe1f97 r6bfd39d5  
    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

    r2fe1f97 r6bfd39d5  
    498498        if (showSort)
    499499            out.write("</a>");
    500         out.write("</th>\n<th align=\"center\">");
     500        out.write("</th>\n<th id=\"pagenav\" align=\"center\">");
    501501        if (total > 0 && (start > 0 || total > pageSize)) {
    502502            writePageNav(out, req, start, pageSize, total, noThinsp);
     
    824824                out.write(getQueryString(req, null, "", null));
    825825                out.write("\">");
    826                 out.write(toThemeImg("control_rewind_blue", _t("First"), _t("First page")));
     826                out.write(toThemeImg("first", _t("First"), _t("First page")));
    827827                out.write("</a>&nbsp;");
    828828                int prev = Math.max(0, start - pageSize);
     
    834834                    out.write(getQueryString(req, null, sprev, null));
    835835                    out.write("\">");
    836                     out.write(toThemeImg("control_back_blue", _t("Prev"), _t("Previous page")));
     836                    out.write(toThemeImg("previous", _t("Prev"), _t("Previous page")));
    837837                    out.write("</a>&nbsp;");
    838838                }
     
    840840                out.write(
    841841                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    842                           _imgPath + "control_rewind_blue.png\">" +
     842                          _imgPath + "first.png\">" +
    843843                          "&nbsp;" +
    844844                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    845                           _imgPath + "control_back_blue.png\">" +
     845                          _imgPath + "previous.png\">" +
    846846                          "&nbsp;");
    847847            }
     
    867867                    out.write(getQueryString(req, null, Integer.toString(next), null));
    868868                    out.write("\">");
    869                     out.write(toThemeImg("control_play_blue", _t("Next"), _t("Next page")));
     869                    out.write(toThemeImg("next", _t("Next"), _t("Next page")));
    870870                    out.write("</a>&nbsp;");
    871871                }
     
    875875                out.write(getQueryString(req, null, Integer.toString(last), null));
    876876                out.write("\">");
    877                 out.write(toThemeImg("control_fastforward_blue", _t("Last"), _t("Last page")));
     877                out.write(toThemeImg("last", _t("Last"), _t("Last page")));
    878878                out.write("</a>&nbsp;");
    879879            } else {
    880880                out.write("&nbsp;" +
    881881                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    882                           _imgPath + "control_play_blue.png\">" +
     882                          _imgPath + "next.png\">" +
    883883                          "&nbsp;" +
    884884                          "<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
    885                           _imgPath + "control_fastforward_blue.png\">");
     885                          _imgPath + "last.png\">");
    886886            }
    887887    }
     
    20652065        out.write(" title=\"");
    20662066        out.write(_t("Enter the torrent file download URL (I2P only), magnet link, maggot link, or info hash"));
    2067         out.write("\"> \n");
     2067        out.write("\">\n");
    20682068        // not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
    20692069        //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>");
     
    20712071        out.write(_t("Add torrent"));
    20722072        out.write("\" name=\"foo\" ><br>\n" +
    2073 
    20742073                  "<tr><td>");
     2074
    20752075        out.write(_t("Data dir"));
    20762076        out.write(":<td><input type=\"text\" name=\"nofilter_newDir\" size=\"85\" value=\"\" spellcheck=\"false\"");
     
    20862086        out.write("</div></form></div>"); 
    20872087    }
    2088    
     2088
    20892089    private void writeSeedForm(PrintWriter out, HttpServletRequest req, List<Tracker> sortedTrackers) throws IOException {
    20902090        out.write("<a name=\"add\"></a><div class=\"newtorrentsection\"><div class=\"snarkNewTorrent\">\n");
     
    21042104        out.write(_t("File or directory to seed (full path or within the directory {0} )",
    21052105                    _manager.getDataDir().getAbsolutePath() + File.separatorChar));
    2106         out.write("\" ><tr><td>\n");
     2106        out.write("\" > <input type=\"submit\" class=\"create\" value=\"");
     2107        out.write(_t("Create torrent"));
     2108        out.write("\" name=\"foo\" >");
     2109        out.write("<tr><td>\n");
    21072110        out.write(_t("Trackers"));
    2108         out.write(":<td><table style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
     2111        out.write(":<td><table id=\"trackerselect\" style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
    21092112        out.write(_t("Primary"));
    21102113        out.write("</td><td align=\"center\">");
    21112114        out.write(_t("Alternates"));
    2112         out.write("</td><td rowspan=\"0\">" +
    2113                   " <input type=\"submit\" class=\"create\" value=\"");
    2114         out.write(_t("Create torrent"));
    2115         out.write("\" name=\"foo\" >" +
    2116                   "</td></tr>\n");
     2115        out.write("</td><td>");
     2116        out.write(_t("Tracker URL"));
     2117        out.write("</td></tr>\n");
     2118
    21172119        for (Tracker t : sortedTrackers) {
    21182120            String name = t.name;
    21192121            String announceURL = t.announceURL.replace("&#61;", "=");
     2122            String homeURL = t.baseURL;
    21202123            out.write("<tr><td>");
    21212124            out.write(name);
     
    21272130            out.write("></td><td align=\"center\"><input type=\"checkbox\" name=\"backup_");
    21282131            out.write(announceURL);
    2129             out.write("\" value=\"foo\"></td></tr>\n");
     2132            out.write("\" value=\"foo\"></td><td><a href=\"");
     2133            out.write(homeURL);
     2134            out.write("\">");
     2135            out.write(homeURL);
     2136            out.write("</a></td></tr>\n");
    21302137        }
    21312138        out.write("<tr><td><i>");
     
    21342141        if (_lastAnnounceURL == null)
    21352142            out.write(" checked");
    2136         out.write("></td><td></td></tr></table>\n");
     2143        out.write("></td><td></td><td></td></tr></table>\n");
    21372144        // make the user add a tracker on the config form now
    21382145        //out.write(_t("or"));
  • apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java

    r2fe1f97 r6bfd39d5  
    5151        }
    5252
    53         buf.append("<ul>");
     53        buf.append("<ul id=\"banlist\">");
    5454       
    5555        for (Map.Entry<Hash, Banlist.Entry> e : entries.entrySet()) {
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java

    r2fe1f97 r6bfd39d5  
    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

    r2fe1f97 r6bfd39d5  
    5656    public void renderNavBar(String requestURI, boolean graphical) throws IOException {
    5757        StringBuilder buf = new StringBuilder(1024);
    58         // TODO fix up the non-light themes
    59         String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME);
    60         boolean span = graphical && (theme == null || theme.equals(CSSHelper.DEFAULT_THEME));
     58        boolean span = graphical;
    6159        if (!span)
    6260            buf.append("<center>");
     
    8078            }
    8179            if (span)
    82                 buf.append(" </span>\n");
     80                buf.append("</span>\n");
    8381            else if (i != pages.length - 1)
    84                 buf.append(" |\n");
     82                buf.append("&nbsp;&nbsp;\n");
    8583        }
    8684        if (!span)
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java

    r2fe1f97 r6bfd39d5  
    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

    r2fe1f97 r6bfd39d5  
    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

    r2fe1f97 r6bfd39d5  
    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    }
     
    137145        StringBuilder buf = new StringBuilder(512);
    138146        for (int i = 0; i < langs.length; i++) {
    139             // we use "lang" so it is set automagically in CSSHelper
    140             buf.append("<input type=\"radio\" class=\"optbox\" name=\"lang\" ");
    141147            String lang = langs[i][0];
    142148            if (lang.equals("xx") && !isAdvanced())
    143149                continue;
     150            // we use "lang" so it is set automagically in CSSHelper
     151            buf.append("<div class=\"langselect\"><input type=\"radio\" class=\"optbox\" name=\"lang\" ");
    144152            if (lang.equals(current))
    145153                buf.append(CHECKED);
    146154            buf.append("value=\"").append(lang).append("\">")
    147                .append("<img height=\"11\" width=\"16\" alt=\"\" src=\"/flags.jsp?c=").append(langs[i][1]).append("\"> ");
     155               .append("<img height=\"11\" width=\"16\" alt=\"\" src=\"/flags.jsp?c=").append(langs[i][1]).append("\">")
     156               .append("<div class=\"ui_lang\">");
    148157            int under = lang.indexOf('_');
    149158            String slang = (under > 0) ? lang.substring(0, under) : lang;
     
    155164                   .append(')');
    156165            }
    157             buf.append("<br>\n");
     166            buf.append("</div></div>\n");
    158167        }
    159168        return buf.toString();
     
    165174        ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
    166175        Map<String, String> userpw = mgr.getMD5(RouterConsoleRunner.PROP_CONSOLE_PW);
    167         buf.append("<table>");
     176        buf.append("<table id=\"consolepass\">");
    168177        if (userpw.isEmpty()) {
    169178            buf.append("<tr><td colspan=\"3\">");
     
    174183               .append(_t("Remove"))
    175184               .append("</th><th>")
    176                .append(_t("User Name"))
     185               .append(_t("Username"))
    177186               .append("</th><th>&nbsp;</th></tr>\n");
    178187            for (String name : userpw.keySet()) {
     
    184193            }
    185194        }
    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");
     195        buf.append("<tr><td id=\"pw_adduser\" align=\"left\" colspan=\"3\"><b>")
     196           .append("<b>").append(_t("Username")).append(":</b> ")
     197           .append("<input type=\"text\" name=\"name\">")
     198           .append("<b>").append(_t("Password")).append(":</b> ")
     199           .append("<input type=\"password\" size=\"40\" name=\"nofilter_pw\">")
     200           .append("</td></tr>")
     201           .append("</table>\n");
    193202        return buf.toString();
    194203    }
  • apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java

    r2fe1f97 r6bfd39d5  
    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

    r2fe1f97 r6bfd39d5  
    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

    r2fe1f97 r6bfd39d5  
    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("</h3><div class=\"graphspanel\"><img class=\"statimage\" border=\"0\""
    241241                       + " src=\"viewstat.jsp?stat="
    242242                       + name
     
    247247                       + "&amp;width=" + _width
    248248                       + "&amp;height=" + _height
    249                        + "\"><p>\n");
     249                       + "\"></div><p id=\"graphopts\">\n");
    250250
    251251            if (_width < MAX_X && _height < MAX_Y) {
     
    354354        String nonce = CSSHelper.getNonce();
    355355        try {
    356             _out.write("<br><h3>" + _t("Configure Graph Display") + " [<a href=\"configstats\">" + _t("Select Stats") + "</a>]</h3>");
     356            _out.write("<br><h3 id=\"graphdisplay\">" + _t("Configure Graph Display") + " [<a href=\"configstats\">" + _t("Select Stats") + "</a>]</h3>");
    357357            _out.write("<form action=\"graphs\" method=\"POST\">\n" +
    358358                       "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
     
    385385                _out.write(HelperBase.CHECKED);
    386386            _out.write(">" +
    387                        "<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
     387                       "<hr><div class=\"formaction\" id=\"graphing\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
    388388        } catch (IOException ioe) {
    389389            ioe.printStackTrace();
  • apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java

    r2fe1f97 r6bfd39d5  
    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

    r2fe1f97 r6bfd39d5  
    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=\"wideload\"><div class=\"joblog\">")
     51           .append("<h3 id=\"jobrunners\">")
    5152           .append(_t("Job runners")).append(": ").append(numRunners)
    52            .append("</b><br>\n");
     53           .append("</h3>\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>\n");
    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>\n");
    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>\n");
    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>\n");
    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("<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

    r2fe1f97 r6bfd39d5  
    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

    r2fe1f97 r6bfd39d5  
    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>");
     
    140138            }
    141139            if (span)
    142                 buf.append(" </span>\n");
     140                buf.append("</span>\n");
    143141            else if (i != titles.length - 1)
    144                 buf.append(" |\n");
     142                buf.append("&nbsp;&nbsp;\n");
    145143        }
    146144        if (!span)
  • apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java

    r2fe1f97 r6bfd39d5  
    125125        StringBuilder buf = new StringBuilder(4*1024);
    126126        if (debug)
    127             buf.append("<p>Debug mode - Sorted by hash distance, closest first</p>\n");
     127            buf.append("<p id=\"debugmode\">Debug mode - Sorted by hash distance, closest first</p>\n");
    128128        Hash ourRKey;
    129129        Set<LeaseSet> leases;
     
    143143        BigInteger median = null;
    144144        int c = 0;
     145
     146
     147        // Summary
     148        FloodfillNetworkDatabaseFacade netdb = (FloodfillNetworkDatabaseFacade)_context.netDb();
     149        if (debug) {
     150            buf.append("<table id=\"leasesetdebug\">\n");
     151        } else {
     152            buf.append("<table id=\"leasesetsummary\">\n");
     153        }
     154        buf.append("<tr><th colspan=\"3\">Leaseset Summary</th>")
     155           .append("<th><a href=\"/configadvanced\">Configure Floodfill Participation</a></th></tr>\n")
     156           .append("<tr><td><b>Total Leasesets:</b></td><td colspan=\"3\">").append(leases.size()).append("</td></tr>\n");
     157        if (debug) {
     158            buf.append("<tr><td><b>Published (RAP) Leasesets:</b></td><td colspan=\"3\">").append(netdb.getKnownLeaseSets()).append("</td></tr>\n")
     159               .append("<tr><td><b>Mod Data:</b></td><td>").append(DataHelper.getUTF8(_context.routerKeyGenerator().getModData())).append("</td>")
     160               .append("<td><b>Last Changed:</b></td><td>").append(new Date(_context.routerKeyGenerator().getLastChanged())).append("</td></tr>\n")
     161               .append("<tr><td><b>Next Mod Data:</b></td><td>").append(DataHelper.getUTF8(_context.routerKeyGenerator().getNextModData())).append("</td>")
     162               .append("<td><b>Change in:</b></td><td>").append(DataHelper.formatDuration(_context.routerKeyGenerator().getTimeTillMidnight())).append("</td></tr>\n");
     163        }
     164        int ff = _context.peerManager().getPeersByCapability(FloodfillNetworkDatabaseFacade.CAPABILITY_FLOODFILL).size();
     165        buf.append("<tr><td><b>Known Floodfills:</b></td><td colspan=\"3\">").append(ff).append("</td></tr>\n")
     166           .append("<tr><td><b>Currently Floodfill?</b></td><td colspan=\"3\">").append(netdb.floodfillEnabled() ? "yes" : "no").append("</td></tr>\n");
     167        if (debug) {
     168            buf.append("<tr><td><b>Network data (only valid if floodfill):</b></td><td colspan=\"3\">");
     169            //buf.append("</b></p><p><b>Center of Key Space (router hash): " + ourRKey.toBase64());
     170            if (median != null) {
     171                double log2 = biLog2(median);
     172                buf.append("</td></tr>")
     173                   .append("<tr><td><b>Median distance (bits):</b></td><td colspan=\"3\">").append(fmt.format(log2)).append("</td></tr>\n");
     174                // 2 for 4 floodfills... -1 for median
     175                // this can be way off for unknown reasons
     176                int total = (int) Math.round(Math.pow(2, 2 + 256 - 1 - log2));
     177                buf.append("<tr><td><b>Estimated total floodfills:</b></td><td colspan=\"3\">").append(total).append("</td></tr>\n");
     178                buf.append("<tr><td><b>Estimated total leasesets:</b></td><td colspan=\"3\">").append(total * rapCount / 4);
     179            } else {
     180                buf.append("<i>Not floodfill or no data.</i>");
     181            }
     182            buf.append("</td></tr>\n");
     183        }
     184        buf.append("</table>\n");
     185
    145186        if (leases.isEmpty()) {
    146187          if (!debug)
    147               buf.append("<i>").append(_t("none")).append("</i>");
     188              buf.append("<div id=\"noleasesets\"><i>").append(_t("No Leasesets currently active.")).append("</i></div>");
    148189        } else {
    149190          if (debug) {
     
    155196            medianCount = rapCount / 2;
    156197          }
     198
    157199          long now = _context.clock().now();
    158200          for (LeaseSet ls : leases) {
    159201            Destination dest = ls.getDestination();
    160202            Hash key = dest.calculateHash();
    161             buf.append("<b>").append(_t("LeaseSet")).append(": ").append(key.toBase64()).append("</b>\n");
     203            buf.append("<table id=\"leaseset\">\n")
     204               .append("<tr><th><b>").append(_t("LeaseSet")).append(":</b> ").append(key.toBase64()).append("</th>");
    162205            if (_context.clientManager().isLocal(dest)) {
    163                 buf.append(" (<a href=\"tunnels#" + key.toBase64().substring(0,4) + "\">" + _t("Local") + "</a> ");
     206                buf.append("<th><b><a href=\"tunnels#" + key.toBase64().substring(0,4) + "\">" + _t("Local") + "</a> ");
    164207                if (! _context.clientManager().shouldPublishLeaseSet(key))
    165208                    buf.append(_t("Unpublished") + ' ');
    166                 buf.append(_t("Destination") + ' ');
     209                buf.append("<b>").append(_t("Destination")).append(":</b> ");
    167210                TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(key);
    168211                if (in != null && in.getDestinationNickname() != null)
     
    170213                else
    171214                    buf.append(dest.toBase64().substring(0, 6));
    172                 buf.append(")<br>\n");
     215                buf.append("</th></tr>\n<tr><td>");
    173216                String b32 = dest.toBase32();
    174                 buf.append("<a href=\"http://").append(b32).append("\">").append(b32).append("</a><br>\n");
     217                buf.append("<a href=\"http://").append(b32).append("\">").append(b32).append("</a></td>");
    175218                String host = _context.namingService().reverseLookup(dest);
    176219                if (host == null) {
    177                     buf.append("<a href=\"/susidns/addressbook.jsp?book=private&amp;destination=")
    178                        .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a><br>\n");   
     220                    buf.append("<td>").append("<a href=\"/susidns/addressbook.jsp?book=private&amp;destination=")
     221                       .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a></td>");
    179222                }
    180223            } else {
    181                 buf.append(" (").append(_t("Destination")).append(' ');
     224                buf.append("<th><b>").append(_t("Destination")).append(":</b> ");
    182225                String host = _context.namingService().reverseLookup(dest);
    183226                if (host != null) {
    184                     buf.append("<a href=\"http://").append(host).append("/\">").append(host).append("</a>)<br>\n");
     227                    buf.append("<a href=\"http://").append(host).append("/\">").append(host).append("</a></th>");
    185228                } else {
    186229                    String b32 = dest.toBase32();
    187                     buf.append(dest.toBase64().substring(0, 6)).append(")<br>\n" +
    188                                "<a href=\"http://").append(b32).append("\">").append(b32).append("</a><br>\n" +
    189                                "<a href=\"/susidns/addressbook.jsp?book=private&amp;destination=")
    190                        .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a><br>\n");   
     230                    buf.append("<code>").append(dest.toBase64().substring(0, 6)).append("</code></th>")
     231                       .append("</tr>\n<tr>")
     232                       .append("<td><a href=\"http://").append(b32).append("\">").append(b32).append("</a></td>\n")
     233                       .append("<td><a href=\"/susidns/addressbook.jsp?book=private&amp;destination=")
     234                       .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a></td>");
    191235                }
    192236            }
     237            buf.append("</tr>\n<tr><td colspan=\"2\">\n");
    193238            long exp = ls.getLatestLeaseDate()-now;
    194239            if (exp > 0)
    195                 buf.append(_t("Expires in {0}", DataHelper.formatDuration2(exp)));
     240                buf.append("<b>").append(_t("Expires in {0}", DataHelper.formatDuration2(exp))).append("</b>");
    196241            else
    197                 buf.append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exp)));
    198             buf.append("<br>\n");
     242                buf.append("<b>").append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exp))).append("</b>");
     243            buf.append("</td></tr>\n");
    199244            if (debug) {
    200                 buf.append("RAP? " + ls.getReceivedAsPublished());
    201                 buf.append(" RAR? " + ls.getReceivedAsReply());
     245                buf.append("<tr><td colspan=\"2\">");
     246                buf.append("<b>RAP?</b> ").append(ls.getReceivedAsPublished());
     247                buf.append(" <b>RAR?</b> ").append(ls.getReceivedAsReply());
    202248                BigInteger dist = HashDistance.getDistance(ourRKey, ls.getRoutingKey());
    203249                if (ls.getReceivedAsPublished()) {
     
    205251                        median = dist;
    206252                }
    207                 buf.append(" Dist: <b>").append(fmt.format(biLog2(dist))).append("</b><br>");
     253                buf.append(" <b>Distance: </b><span id=\"distance\">").append(fmt.format(biLog2(dist))).append("</span></b>");
     254                buf.append("</td></tr>\n<tr><td colspan=\"2\">");
    208255                //buf.append(dest.toBase32()).append("<br>");
    209                 buf.append("Sig type: ").append(dest.getSigningPublicKey().getType()).append("<br>");
    210                 buf.append("Routing Key: ").append(ls.getRoutingKey().toBase64());
    211                 buf.append("<br>");
    212                 buf.append("Encryption Key: ").append(ls.getEncryptionKey().toBase64().substring(0, 20)).append("...<br>");
     256                buf.append("<b>Signature type:</b> ").append(dest.getSigningPublicKey().getType());
     257                buf.append(" <b>Encryption Key:</b> ").append(ls.getEncryptionKey().toBase64().substring(0, 20)).append("&hellip;");
     258                buf.append("</td></tr>\n<tr><td colspan=\"2\">");
     259                buf.append("<b>Routing Key:</b> ").append(ls.getRoutingKey().toBase64());
     260                buf.append("</td></tr>");
     261
    213262            }
    214263            for (int i = 0; i < ls.getLeaseCount(); i++) {
    215264                Lease lease = ls.getLease(i);
    216                 buf.append(_t("Lease")).append(' ').append(i + 1).append(": ").append(_t("Gateway")).append(' ');
     265                buf.append("<tr><td colspan=\"2\">");
     266                buf.append("<b>").append(_t("Lease")).append(' ').append(i + 1).append(":</b> ").append(_t("Gateway")).append(' ');
    217267                buf.append(_context.commSystem().renderPeerHTML(lease.getGateway()));
    218268                buf.append(' ').append(_t("Tunnel")).append(' ').append(lease.getTunnelId().getTunnelId()).append(' ');
     
    220270                    long exl = lease.getEndDate().getTime() - now;
    221271                    if (exl > 0)
    222                         buf.append(_t("Expires in {0}", DataHelper.formatDuration2(exl)));
     272                        buf.append("<b>").append(_t("Expires in {0}", DataHelper.formatDuration2(exl))).append("</b>");
    223273                    else
    224                         buf.append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exl)));
     274                        buf.append("<b>").append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exl))).append("</b>");
    225275                }
    226                 buf.append("<br>\n");
    227             }
    228             buf.append("<hr>\n");
     276                buf.append("</td></tr>\n");
     277            }
     278            buf.append("</table>\n");
    229279            out.write(buf.toString());
    230280            buf.setLength(0);
    231281          } // for each
    232282        }  // !empty
    233         if (debug) {
    234             FloodfillNetworkDatabaseFacade netdb = (FloodfillNetworkDatabaseFacade)_context.netDb();
    235             buf.append("<p><b>Total Leasesets: ").append(leases.size());
    236             buf.append("</b></p><p><b>Published (RAP) Leasesets: ").append(netdb.getKnownLeaseSets());
    237             buf.append("</b></p><p><b>Mod Data: \"").append(DataHelper.getUTF8(_context.routerKeyGenerator().getModData()))
    238                .append("\" Last Changed: ").append(new Date(_context.routerKeyGenerator().getLastChanged()));
    239             buf.append("</b></p><p><b>Next Mod Data: \"").append(DataHelper.getUTF8(_context.routerKeyGenerator().getNextModData()))
    240                .append("\" Change in: ").append(DataHelper.formatDuration(_context.routerKeyGenerator().getTimeTillMidnight()));
    241             int ff = _context.peerManager().getPeersByCapability(FloodfillNetworkDatabaseFacade.CAPABILITY_FLOODFILL).size();
    242             buf.append("</b></p><p><b>Known Floodfills: ").append(ff);
    243             buf.append("</b></p><p><b>Currently Floodfill? ");
    244             buf.append(netdb.floodfillEnabled() ? "yes" : "no");
    245             buf.append("</b></p><p><b>Network data (only valid if floodfill):");
    246             //buf.append("</b></p><p><b>Center of Key Space (router hash): " + ourRKey.toBase64());
    247             if (median != null) {
    248                 double log2 = biLog2(median);
    249                 buf.append("</b></p><p><b>Median distance (bits): ").append(fmt.format(log2));
    250                 // 2 for 4 floodfills... -1 for median
    251                 // this can be way off for unknown reasons
    252                 int total = (int) Math.round(Math.pow(2, 2 + 256 - 1 - log2));
    253                 buf.append("</b></p><p><b>Estimated total floodfills: ").append(total);
    254                 buf.append("</b></p><p><b>Estimated total leasesets: ").append(total * rapCount / 4);
    255             } else {
    256                 buf.append("</b></p><p><b>Not floodfill or no data");
    257             }
    258             buf.append("</b></p>");
    259         }
    260283        out.write(buf.toString());
    261284        out.flush();
     
    339362
    340363        // the summary table
    341         buf.append("<table border=\"0\" cellspacing=\"30\"><tr><th colspan=\"3\">")
     364        buf.append("<table id=\"netdboverview\" border=\"0\" cellspacing=\"30\"><tr><th colspan=\"3\">")
    342365           .append(_t("Network Database Router Statistics"))
    343366           .append("</th></tr><tr><td style=\"vertical-align: top;\">");
     
    346369        if (!versionList.isEmpty()) {
    347370            Collections.sort(versionList, Collections.reverseOrder(new VersionComparator()));
    348             buf.append("<table>\n");
     371            buf.append("<table id=\"netdbversions\">\n");
    349372            buf.append("<tr><th>" + _t("Version") + "</th><th>" + _t("Count") + "</th></tr>\n");
    350373            for (String routerVersion : versionList) {
     
    365388           
    366389        // transports table
    367         buf.append("<table>\n");
     390        buf.append("<table id=\"netdbtransports\">\n");
    368391        buf.append("<tr><th align=\"left\">" + _t("Transports") + "</th><th>" + _t("Count") + "</th></tr>\n");
    369392        for (int i = 0; i < TNAMES.length; i++) {
     
    387410        if (!countryList.isEmpty()) {
    388411            Collections.sort(countryList, new CountryComparator());
    389             buf.append("<table>\n");
     412            buf.append("<table id=\"netdbcountrylist\">\n");
    390413            buf.append("<tr><th align=\"left\">" + _t("Country") + "</th><th>" + _t("Count") + "</th></tr>\n");
    391414            for (String country : countryList) {
     
    449472    private void renderRouterInfo(StringBuilder buf, RouterInfo info, boolean isUs, boolean full) {
    450473        String hash = info.getIdentity().getHash().toBase64();
    451         buf.append("<table><tr><th><a name=\"").append(hash.substring(0, 6)).append("\" ></a>");
     474        buf.append("<table id=\"netdbentry\">")
     475           .append("<tr><th colspan=\"2\"><a name=\"").append(hash.substring(0, 6)).append("\" ></a>");
    452476        if (isUs) {
    453             buf.append("<a name=\"our-info\" ></a><b>" + _t("Our info") + ": ").append(hash).append("</b></th></tr><tr><td>\n");
     477            buf.append("<a name=\"our-info\" ></a><b>" + _t("Our info") + ":</b>&nbsp;<code>").append(hash).append("</code></th><th>");
    454478        } else {
    455             buf.append("<b>" + _t("Peer info for") + ":</b> ").append(hash).append("\n");
     479            buf.append("<b>" + _t("Peer info for") + ":</b>&nbsp;<code>").append(hash).append("</code></th><th id=\"viewfullentry\">");
    456480            if (!full) {
    457                 buf.append("[<a href=\"netdb?r=").append(hash.substring(0, 6)).append("\" >").append(_t("Full entry")).append("</a>]");
    458             }
    459             buf.append("</th></tr><tr><td>\n");
    460         }
    461        
     481                buf.append("<a href=\"netdb?r=").append(hash.substring(0, 6)).append("\" >").append(_t("Full entry")).append("</a>");
     482            }
     483        }
     484        buf.append("</th></tr>\n<tr>");
    462485        long age = _context.clock().now() - info.getPublished();
    463486        if (isUs && _context.router().isHidden()) {
    464             buf.append("<b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b> ")
    465                .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     487            buf.append("<td><b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b></td>")
     488               .append("<td colspan=\"2\">")
     489               .append(_t("{0} ago", DataHelper.formatDuration2(age)))
     490               .append("</td>");
    466491        } else if (age > 0) {
    467             buf.append("<b>").append(_t("Published")).append(":</b> ")
    468                .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     492            buf.append("<td><b>").append(_t("Published")).append(":</b></td>")
     493               .append("<td colspan=\"2\">")
     494               .append(_t("{0} ago", DataHelper.formatDuration2(age)))
     495               .append("</td>");
    469496        } else {
    470497            // shouldnt happen
    471             buf.append("<b>" + _t("Published") + ":</b> in ").append(DataHelper.formatDuration2(0-age)).append("???<br>\n");
    472         }
     498            buf.append("<td colspan=\"2\"><b>").append(_t("Published")).append(":</b> in ").append(DataHelper.formatDuration2(0-age)).append("???</td>");
     499        }
     500        buf.append("</tr>\n<tr><td>");
    473501        buf.append("<b>").append(_t("Signing Key")).append(":</b> ")
     502           .append("</td><td colspan=\"2\">")
    474503           .append(info.getIdentity().getSigningPublicKey().getType().toString());
    475         buf.append("<br>\n<b>" + _t("Address(es)") + ":</b> ");
     504        buf.append("</td></tr>\n<tr>")
     505           .append("<td><b>" + _t("Address(es)") + ":</b></td>")
     506           .append("<td colspan=\"2\">");
    476507        String country = _context.commSystem().getCountry(info.getIdentity().getHash());
    477508        if(country != null) {
     
    495526        buf.append("</td></tr>\n");
    496527        if (full) {
    497             buf.append("<tr><td>" + _t("Stats") + ": <br><code>");
     528            buf.append("<tr><td><b>" + _t("Stats") + ":</b><td colspan=\"2\"><code>");
    498529            Map<Object, Object> p = info.getOptionsMap();
    499530            for (Map.Entry<Object, Object> e : p.entrySet()) {
  • apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java

    r2fe1f97 r6bfd39d5  
    7979
    8080        //buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
     81        buf.append("<p id=\"profiles_overview\" class=\"infohelp\">");
    8182        buf.append(ngettext("Showing 1 recent profile.", "Showing {0} recent profiles.", order.size())).append('\n');
    8283        if (older > 0)
     
    8586            buf.append("<a href=\"/profiles?f=1\">").append(ngettext("Hiding 1 standard profile.", "Hiding {0} standard profiles.", standard)).append("</a>\n");
    8687        buf.append("</p>");
    87                    buf.append("<table>");
     88                   buf.append("<table id=\"profiles\">");
    8889                   buf.append("<tr>");
    8990                   buf.append("<th>").append(_t("Peer")).append("</th>");
     
    198199        //buf.append("<h2><a name=\"flood\"></a>").append(_t("Floodfill and Integrated Peers"))
    199200        //   .append(" (").append(integratedPeers.size()).append(")</h2>\n");
    200         buf.append("<table>");
     201        buf.append("<div class=\"widescroll\"><table id=\"floodfills\">");
    201202        buf.append("<tr>");
    202203        buf.append("<th class=\"smallhead\">").append(_t("Peer")).append("</th>");
     
    251252            buf.append("</tr>\n");
    252253        }
    253         buf.append("</table>");
     254        buf.append("</table></div>");
    254255
    255256      ////
     
    259260      if (mode < 2) {
    260261
    261         buf.append("<h3>").append(_t("Thresholds")).append("</h3>");
     262        buf.append("<h3 class=\"tabletitle\">").append(_t("Thresholds")).append("</h3>\n")
     263           .append("<table id=\"thresholds\"><tbody><tr><td>");
    262264        buf.append("<p><b>").append(_t("Speed")).append(":</b> ").append(num(_organizer.getSpeedThreshold()))
    263265           .append(" (").append(fast).append(' ').append(_t("fast peers")).append(")<br>");
     
    265267           .append(" (").append(reliable).append(' ').append(_t("high capacity peers")).append(")<br>");
    266268        buf.append("<b>").append(_t("Integration")).append(":</b> ").append(num(_organizer.getIntegrationThreshold()))
    267            .append(" (").append(integrated).append(' ').append(_t(" well integrated peers")).append(")</p>");
    268         buf.append("<h3>").append(_t("Definitions")).append("</h3><ul>");
     269           .append(" (").append(integrated).append(' ').append(_t(" well integrated peers")).append(")")
     270           .append("</td></tr></tbody></table>\n");
     271        buf.append("<h3 class=\"tabletitle\">").append(_t("Definitions")).append("</h3>\n")
     272           .append("<table id=\"profile_defs\"><tbody><tr><td><ul>");
    269273        buf.append("<li><b>").append(_t("groups")).append("</b>: ").append(_t("as determined by the profile organizer")).append("</li>");
    270274        buf.append("<li><b>").append(_t("caps")).append("</b>: ").append(_t("capabilities in the netDb, not used to determine profiles")).append("</li>");
     
    273277        buf.append("<li><b>").append(_t("integration")).append("</b>: ").append(_t("how many new peers have they told us about lately?")).append("</li>");
    274278        buf.append("<li><b>").append(_t("status")).append("</b>: ").append(_t("is the peer banned, or unreachable, or failing tunnel tests?")).append("</li>");
    275         buf.append("</ul>");
     279        buf.append("</ul></td></tr></tbody></table>\n");
    276280
    277281      ////
  • apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java

    r2fe1f97 r6bfd39d5  
    1010    private static final String titles[] =
    1111                                          {_x("High Capacity"),                 // 0
    12                                            _x("Floodfill "),                    // 1
     12                                           _x("Floodfill"),                     // 1
    1313                                           _x("Banned"),                        // 2
    1414                                           _x("All"),      };                   // 3
     
    9494        StringBuilder buf = new StringBuilder(1024);
    9595        buf.append("<div class=\"confignav\" id=\"confignav\">");
    96         // TODO fix up the non-light themes
    97         String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME);
    98         boolean span = _graphical && (theme == null || theme.equals(CSSHelper.DEFAULT_THEME));
     96        boolean span = _graphical;
    9997        if (!span)
    10098            buf.append("<center>");
     
    113111            }
    114112            if (span)
    115                 buf.append(" </span>\n");
     113                buf.append("</span>\n");
    116114            else if (i != titles.length - 1)
    117                 buf.append(" |\n");
     115                buf.append("&nbsp;&nbsp;\n");
    118116        }
    119117        if (!span)
  • apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java

    r2fe1f97 r6bfd39d5  
    3131    public void generateStatsPage(Writer out, boolean showAll) throws IOException {
    3232        StringBuilder buf = new StringBuilder(16*1024);
    33         buf.append("<div class=\"joblog\"><form action=\"\">");
    34         buf.append("<select name=\"go\" onChange='location.href=this.value'>");
     33
     34        buf.append("<div class=\"joblog\">\n");
     35        buf.append("<p id=\"gatherstats\">");
     36        buf.append(_t("Statistics gathered during this router's uptime")).append(" (");
     37        long uptime = _context.router().getUptime();
     38        buf.append(DataHelper.formatDuration2(uptime));
     39        buf.append(").  ").append( _t("The data gathered is quantized over a 1 minute period, so should just be used as an estimate."));
     40        buf.append(' ').append( _t("These statistics are primarily used for development and debugging."));
     41        buf.append("</p>");
     42
     43        buf.append("<form action=\"\"><b>");
     44        buf.append(_t("Jump to section")).append(":</b> <select name=\"go\" onChange='location.href=this.value'>");
    3545        out.write(buf.toString());
    3646        buf.setLength(0);
    37        
     47
    3848        Map<String, SortedSet<String>> unsorted = _context.statManager().getStatsByGroup();
    3949        Map<String, Set<String>> groups = new TreeMap<String, Set<String>>(new AlphaComparator());
     
    5767        buf.append("</select> <input type=\"submit\" value=\"").append(_t("GO")).append("\" />");
    5868        buf.append("</form>");
    59        
    60         buf.append(_t("Statistics gathered during this router's uptime")).append(" (");
    61         long uptime = _context.router().getUptime();
    62         buf.append(DataHelper.formatDuration2(uptime));
    63         buf.append(").  ").append( _t("The data gathered is quantized over a 1 minute period, so should just be used as an estimate."));
    64         buf.append(' ').append( _t("These statistics are primarily used for development and debugging."));
    6569
    6670        out.write(buf.toString());
    6771        buf.setLength(0);
    68        
     72
    6973        for (Map.Entry<String, Set<String>> entry : groups.entrySet()) {
    7074            String group = entry.getKey();
    7175            Set<String> stats = entry.getValue();
    72             buf.append("<h3><a name=\"");
     76            buf.append("<h3 class=\"stats\"><a name=\"");
    7377            buf.append(group);
    7478            buf.append("\">");
    7579            buf.append(_t(group));
    7680            buf.append("</a></h3>");
    77             buf.append("<ul>");
     81            buf.append("<ul class=\"statlist\">");
    7882            out.write(buf.toString());
    7983            buf.setLength(0);
     
    8387                buf.append("\">");
    8488                buf.append(stat);
    85                 buf.append("</a></b><br>");
     89                buf.append("</a>:</b>&nbsp;");
    8690                if (_context.statManager().isFrequency(stat))
    8791                    renderFrequency(stat, buf);
     
    215219            }
    216220            if (curRate.getSummaryListener() != null) {
    217                 buf.append(" <a href=\"graph?stat=").append(name)
     221                buf.append("<br><a href=\"graph?stat=").append(name)
    218222                   .append('.').append(periods[i]);
    219223                buf.append("\">").append(_t("Graph Data")).append("</a> - ");
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java

    r2fe1f97 r6bfd39d5  
    140140           .append("</a></h3>\n" +
    141141
    142                    "<hr class=\"b\"><table><tr><td>" +
     142                   "<hr class=\"b\"><table id=\"services\"><tr><td>" +
    143143
    144144                   "<a href=\"/susimail/susimail\" target=\"_blank\" title=\"")
     
    331331        if (_helper == null) return "";
    332332        StringBuilder buf = new StringBuilder(512);
    333         buf.append("<h4><a href=\"/confignet#help\" target=\"_top\" title=\"")
     333        buf.append("<h4><a href=\"/help#confignet\" target=\"_top\" title=\"")
    334334           .append(_t("Help with configuring your firewall and router for optimal I2P performance"))
    335335           .append("\">")
     
    457457           .append(_t("Bandwidth in/out"))
    458458           .append("</a></h3><hr class=\"b\">" +
    459                    "<table>\n" +
     459                   "<table id=\"bandwidth\">\n" +
    460460
    461461                   "<tr><td align=\"left\"><b>")
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java

    r2fe1f97 r6bfd39d5  
    6262    static final String DEFAULT_MINIMAL =
    6363        "ShortGeneral" + S +
     64        "Bandwidth" + S +
    6465        "NewsHeadings" + S +
    6566        "UpdateStatus" + S +
     
    929930
    930931        StringBuilder buf = new StringBuilder(2048);
    931         buf.append("<table class=\"sidebarconf\"><tr><th>")
     932        buf.append("<table id=\"sidebarconf\"><tr><th>")
    932933           .append(_t("Remove"))
    933934           .append("</th><th>")
     
    998999           .append(_t("Delete selected"))
    9991000           .append("\"></td><td align=\"left\"><b>")
    1000            .append(_t("Add")).append(":</b> " +
    1001                    "<select name=\"name\">\n" +
     1001           .append("<select name=\"name\">\n" +
    10021002                   "<option value=\"\" selected=\"selected\">")
    10031003           .append(_t("Select a section to add"))
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java

    r2fe1f97 r6bfd39d5  
    3636    private final SummaryListener _listener;
    3737    private final I2PAppContext _context;
    38     private static final Color RESTART_BAR_COLOR = new Color(255, 144, 0, 224);
     38    private static final Color AREA_COLOR = new Color(100, 160, 200, 240);
     39    private static final Color LINE_COLOR = new Color(0, 30, 110, 255);
     40    private static final Color RESTART_BAR_COLOR = new Color(210, 10, 10, 200);
    3941
    4042    public SummaryRenderer(I2PAppContext ctx, SummaryListener lsnr) {
     
    185187            def.datasource(plotName, path, plotName, SummaryListener.CF, _listener.getBackendName());
    186188            if (descr.length() > 0) {
    187                 def.area(plotName, Color.BLUE, descr + "\\r");
     189                def.area(plotName, AREA_COLOR, descr + "\\r");
    188190            } else {
    189                 def.area(plotName, Color.BLUE);
     191                def.area(plotName, AREA_COLOR);
    190192            }
    191193            if (!hideLegend) {
     
    201203                String descr2 = _t(lsnr2.getRate().getRateStat().getDescription());
    202204                def.datasource(plotName2, path2, plotName2, SummaryListener.CF, lsnr2.getBackendName());
    203                 def.line(plotName2, Color.RED, descr2 + "\\r", 3);
     205                def.line(plotName2, LINE_COLOR, descr2 + "\\r", 3);
    204206                if (!hideLegend) {
    205207                    def.gprint(plotName2, SummaryListener.CF, _t("avg") + ": %.2f %s");
     
    228230                def.datasource(dsNames[0], path, dsNames[0], "AVERAGE", "MEMORY");
    229231                def.datasource(dsNames[1], path, dsNames[1], "AVERAGE", "MEMORY");
    230                 def.area(dsNames[0], Color.BLUE, _listener.getRate().getRateStat().getDescription());
    231                 def.line(dsNames[1], Color.RED, "Events per period");
     232                def.area(dsNames[0], AREA_COLOR, _listener.getRate().getRateStat().getDescription());
     233                def.line(dsNames[1], LINE_COLOR, "Events per period");
    232234            */
    233235            if (hideLegend)
  • apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java

    r2fe1f97 r6bfd39d5  
    155155        }
    156156        if (ris.isEmpty()) {
    157             out.write("<h3>No known floodfills</h3>");
     157            out.write("<h3 class=\"sybils\">No known floodfills</h3>");
    158158            return;
    159159        }
    160160
    161161        StringBuilder buf = new StringBuilder(4*1024);
    162         buf.append("<p><b>This is an experimental network database tool for debugging and analysis. Do not panic even if you see warnings below. " +
     162        buf.append("<p id=\"sybilinfo\"><b>This is an experimental network database tool for debugging and analysis. Do not panic even if you see warnings below. " +
    163163                   "Possible \"threats\" are summarized at the bottom, however these are unlikely to be real threats. " +
    164164                   "If you see anything you would like to discuss with the devs, contact us on IRC #i2p-dev.</b></p>" +
    165                    "<ul><li><a href=\"#known\">FF Summary</a>" +
     165                   "<div id=\"sybilnav\"><ul><li><a href=\"#known\">FF Summary</a>" +
    166166                   "</li><li><a href=\"#family\">Same Family</a>" +
    167167                   "</li><li><a href=\"#ourIP\">IP close to us</a>" +
     
    175175                   "</li><li><a href=\"#dest\">Close to our destinations</a>" +
    176176                   "</li><li><a href=\"#threats\">Highest threats</a>" +
    177                    "</li></ul>");
     177                   "</li></ul></div>");
    178178
    179179        renderRouterInfo(buf, _context.router().getRouterInfo(), null, true, false);
    180         buf.append("<h3 id=\"known\">Known Floodfills: ").append(ris.size()).append("</h3>");
     180        buf.append("<h3 id=\"known\" class=\"sybils\">Known Floodfills: ").append(ris.size()).append("</h3>");
    181181
    182182        double tot = 0;
     
    190190        }
    191191        double avgMinDist = tot / count;
    192         buf.append("<p>Average closest floodfill distance: " + fmt.format(avgMinDist) + "</p>");
    193         buf.append("<p>Routing Data: \"").append(DataHelper.getUTF8(_context.routerKeyGenerator().getModData()))
    194            .append("\" Last Changed: ").append(new Date(_context.routerKeyGenerator().getLastChanged()));
    195         buf.append("</p><p>Next Routing Data: \"").append(DataHelper.getUTF8(_context.routerKeyGenerator().getNextModData()))
    196            .append("\" Rotates in: ").append(DataHelper.formatDuration(_context.routerKeyGenerator().getTimeTillMidnight()));
    197         buf.append("</p>");
     192        buf.append("<div id=\"sybils_summary\">\n");
     193        buf.append("<b>Average closest floodfill distance:</b> ").append(fmt.format(avgMinDist)).append("<br>\n");
     194        buf.append("<b>Routing Data:</b> \"").append(DataHelper.getUTF8(_context.routerKeyGenerator().getModData()))
     195           .append("\" <b>Last Changed:</b> ").append(new Date(_context.routerKeyGenerator().getLastChanged())).append("<br>\n");
     196        buf.append("<b>Next Routing Data:</b> \"").append(DataHelper.getUTF8(_context.routerKeyGenerator().getNextModData()))
     197           .append("\" <b>Rotates in:</b> ").append(DataHelper.formatDuration(_context.routerKeyGenerator().getTimeTillMidnight())).append("\n");
     198        buf.append("</div>\n");
    198199
    199200        Map<Hash, Points> points = new HashMap<Hash, Points>(64);
     
    210211
    211212        // Distance to our router analysis
    212         buf.append("<h3 id=\"ritoday\">Closest Floodfills to Our Routing Key (Where we Store our RI)</h3>");
     213        buf.append("<h3 id=\"ritoday\" class=\"sybils\">Closest Floodfills to Our Routing Key (Where we Store our RI)</h3>");
    213214        renderRouterInfoHTML(out, buf, ourRKey, avgMinDist, ris, points);
    214215        RouterKeyGenerator rkgen = _context.routerKeyGenerator();
    215216        Hash nkey = rkgen.getNextRoutingKey(us);
    216         buf.append("<h3 id=\"ritmrw\">Closest Floodfills to Tomorrow's Routing Key (Where we will Store our RI)</h3>");
     217        buf.append("<h3 id=\"ritmrw\" class=\"sybils\">Closest Floodfills to Tomorrow's Routing Key (Where we will Store our RI)</h3>");
    217218        renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
    218219
    219         buf.append("<h3 id=\"dht\">Closest Floodfills to Our Router Hash (DHT Neighbors if we are Floodfill)</h3>");
     220        buf.append("<h3 id=\"dht\" class=\"sybils\">Closest Floodfills to Our Router Hash (DHT Neighbors if we are Floodfill)</h3>");
    220221        renderRouterInfoHTML(out, buf, us, avgMinDist, ris, points);
    221222
    222223        // Distance to our published destinations analysis
    223         buf.append("<h3 id=\"dest\">Floodfills Close to Our Destinations</h3>");
     224        buf.append("<h3 id=\"dest\" class=\"sybils\">Floodfills Close to Our Destinations</h3>");
    224225        Map<Hash, TunnelPool> clientInboundPools = _context.tunnelManager().getInboundClientPools();
    225226        List<Hash> destinations = new ArrayList<Hash>(clientInboundPools.keySet());
     
    237238            TunnelPool in = clientInboundPools.get(client);
    238239            String name = (in != null) ? in.getSettings().getDestinationNickname() : client.toBase64().substring(0,4);
    239             buf.append("<h3>Closest floodfills to the Routing Key for " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>");
     240            buf.append("<h3 class=\"sybils\">Closest floodfills to the Routing Key for " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>");
    240241            renderRouterInfoHTML(out, buf, rkey, avgMinDist, ris, points);
    241242            nkey = rkgen.getNextRoutingKey(ls.getHash());
    242             buf.append("<h3>Closest floodfills to Tomorrow's Routing Key for " + DataHelper.escapeHTML(name) + " (where we will store our LS)</h3>");
     243            buf.append("<h3 class=\"sybils\">Closest floodfills to Tomorrow's Routing Key for " + DataHelper.escapeHTML(name) + " (where we will store our LS)</h3>");
    243244            renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
    244245        }
     
    251252            List<Hash> warns = new ArrayList<Hash>(points.keySet());
    252253            Collections.sort(warns, new PointsComparator(points));
    253             buf.append("<h3 id=\"threats\">Routers with Most Threat Points</h3>");
     254            buf.append("<h3 id=\"threats\" class=\"sybils\">Routers with Most Threat Points</h3>");
    254255            for (Hash h : warns) {
    255256                RouterInfo ri = _context.netDb().lookupRouterInfoLocally(h);
     
    260261                if (p < MIN_DISPLAY_POINTS)
    261262                    break;  // sorted
    262                 buf.append("<p><b>Threat Points: " + fmt.format(p) + "</b><ul>");
     263                buf.append("<p class=\"threatpoints\"><b>Threat Points: " + fmt.format(p) + "</b><ul>");
    263264                for (String s : pp.reasons) {
    264265                    buf.append("<li>").append(s).append("</li>");
     
    308309
    309310        double avg = total / (sz * sz / 2);
    310         buf.append("<h3>Average Floodfill Distance is ").append(fmt.format(avg)).append("</h3>");
    311 
    312         buf.append("<h3 id=\"pairs\">Closest Floodfill Pairs by Hash</h3>");
     311        buf.append("<h3 class=\"sybils\">Average Floodfill Distance is ").append(fmt.format(avg)).append("</h3>");
     312
     313        buf.append("<h3 id=\"pairs\" class=\"sybils\">Closest Floodfill Pairs by Hash</h3>");
    313314        for (Pair p : pairs) {
    314315            double distance = biLog2(p.dist);
     
    318319            if (point >= 2) {
    319320                // limit display
    320                 buf.append("<p><b>Hash Distance: ").append(fmt.format(distance)).append(": </b>");
     321                buf.append("<p class=\"hashdist\"><b>Hash Distance: ").append(fmt.format(distance)).append(": </b>");
    321322                buf.append("</p>");
    322323                renderRouterInfo(buf, p.r1, null, false, false);
     
    387388        if (ourIP == null)
    388389            return;
    389         buf.append("<h3 \"ourIP\">Floodfills close to Our IP</h3>");
     390        buf.append("<h3 id=\"ourIP\" class=\"sybils\">Floodfills close to Our IP</h3>");
    390391        boolean found = false;
    391392        for (RouterInfo info : ris) {
     
    394395                continue;
    395396            if (ip[0] == ourIP[0] && ip[1] == ourIP[1]) {
    396                 buf.append("<p><b>");
     397                buf.append("<p id=\"sybil_floodfill\"><b>");
    397398                if (ip[2] == ourIP[2]) {
    398399                    if (ip[3] == ourIP[3]) {
     
    413414        }
    414415        if (!found)
    415             buf.append("<p>None</p>");
     416            buf.append("<p class=\"notfound\">None</p>");
    416417        out.write(buf.toString());
    417418        out.flush();
     
    420421
    421422    private void renderIPGroups32(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
    422         buf.append("<h3 id=\"sameIP\">Floodfills with the Same IP</h3>");
     423        buf.append("<h3 id=\"sameIP\" class=\"sybils\">Floodfills with the Same IP</h3>");
    423424        ObjectCounter<Integer> oc = new ObjectCounter<Integer>();
    424425        for (RouterInfo info : ris) {
     
    444445            int i2 = (i >> 8) & 0xff;
    445446            int i3 = i & 0xff;
    446             buf.append("<p><b>").append(count).append(" floodfills with IP ").append(i0).append('.')
     447            buf.append("<p class=\"sybil_floodfill\"><b>").append(count).append(" floodfills with IP ").append(i0).append('.')
    447448               .append(i1).append('.').append(i2).append('.').append(i3)
    448449               .append(":</b></p>");
     
    466467        }
    467468        if (!found)
    468             buf.append("<p>None</p>");
     469            buf.append("<p class=\"notfound\">None</p>");
    469470        out.write(buf.toString());
    470471        out.flush();
     
    473474
    474475    private void renderIPGroups24(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
    475         buf.append("<h3 id=\"same24\">Floodfills in the Same /24 (2 minimum)</h3>");
     476        buf.append("<h3 id=\"same24\" class=\"sybils\">Floodfills in the Same /24 (2 minimum)</h3>");
    476477        ObjectCounter<Integer> oc = new ObjectCounter<Integer>();
    477478        for (RouterInfo info : ris) {
     
    496497            int i1 = (i >> 8) & 0xff;
    497498            int i2 = i & 0xff;
    498             buf.append("<p><b>").append(count).append(" floodfills in ").append(i0).append('.')
     499            buf.append("<p class=\"sybil_floodfill\"><b>").append(count).append(" floodfills in ").append(i0).append('.')
    499500               .append(i1).append('.').append(i2).append(".0/24:</b></p>");
    500501            for (RouterInfo info : ris) {
     
    515516        }
    516517        if (!found)
    517             buf.append("<p>None</p>");
     518            buf.append("<p class=\"notfound\">None</p>");
    518519        out.write(buf.toString());
    519520        out.flush();
     
    522523
    523524    private void renderIPGroups16(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
    524         buf.append("<h3 id=\"same16\">Floodfills in the Same /16 (4 minimum)</h3>");
     525        buf.append("<h3 id=\"same16\" class=\"sybils\">Floodfills in the Same /16 (4 minimum)</h3>");
    525526        ObjectCounter<Integer> oc = new ObjectCounter<Integer>();
    526527        for (RouterInfo info : ris) {
     
    544545            int i0 = i >> 8;
    545546            int i1 = i & 0xff;
    546             buf.append("<p><b>").append(count).append(" floodfills in ").append(i0).append('.')
     547            buf.append("<p class=\"sybil_floodfill\"><b>").append(count).append(" floodfills in ").append(i0).append('.')
    547548               .append(i1).append(".0.0/16</b></p>");
    548549            for (RouterInfo info : ris) {
     
    562563        }
    563564        if (!found)
    564             buf.append("<p>None</p>");
     565            buf.append("<p class=\"notfound\">None</p>");
    565566        out.write(buf.toString());
    566567        out.flush();
     
    569570
    570571    private void renderIPGroupsFamily(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
    571         buf.append("<h3>Floodfills in the Same Declared Family</h3>");
     572        buf.append("<h3 id=\"samefamily\" class=\"sybils\">Floodfills in the Same Declared Family</h3>");
    572573        ObjectCounter<String> oc = new ObjectCounter<String>();
    573574        for (RouterInfo info : ris) {
     
    582583        for (String s : foo) {
    583584            int count = oc.count(s);
    584             buf.append("<p><b>").append(count).append(" floodfills in declared family \"").append(DataHelper.escapeHTML(s) + '"')
     585            buf.append("<p  id=\"family\"><b>").append(count).append(" floodfills in declared family \"").append(DataHelper.escapeHTML(s) + '"')
    585586               .append("</b></p>");
    586587            for (RouterInfo info : ris) {
     
    601602        }
    602603        if (!found)
    603             buf.append("<p>None</p>");
     604            buf.append("<p class=\"notfound\">None</p>");
    604605        out.write(buf.toString());
    605606        out.flush();
     
    726727        }
    727728        double avg = tot / count;
    728         buf.append("<p><b>Totals for " + count + " floodfills: </b>MIN=" + fmt.format(min) + " AVG=" + fmt.format(avg) + " MEDIAN=" + fmt.format(median) + " MAX=" + fmt.format(max) + "</p>\n");
     729        buf.append("<p id=\"sybil_totals\"><b>Totals for " + count + " floodfills: </b>MIN=" + fmt.format(min) + " AVG=" + fmt.format(avg) + " MEDIAN=" + fmt.format(median) + " MAX=" + fmt.format(max) + "</p>\n");
    729730        out.write(buf.toString());
    730731        out.flush();
     
    761762    private double renderRouterInfo(StringBuilder buf, RouterInfo info, Hash us, boolean isUs, boolean full) {
    762763        String hash = info.getIdentity().getHash().toBase64();
    763         buf.append("<table><tr><th><a name=\"").append(hash.substring(0, 6)).append("\" ></a>");
     764        buf.append("<table class=\"sybil_routerinfo\"><a name=\"").append(hash.substring(0, 6)).append("\" ></a><tr>");
    764765        double distance = 0;
    765766        if (isUs) {
    766             buf.append("<a name=\"our-info\" ></a><b>" + _t("Our info") + ": ").append(hash).append("</b></th></tr><tr><td>\n");
     767            buf.append("<th colspan=\"4\"><a name=\"our-info\" ></a><b>" + _t("Our info") + ":</b> <code>").append(hash).append("</code></th></tr>\n");
    767768        } else {
    768             buf.append("<b>" + _t("Router") + ":</b> ").append(hash).append("\n");
     769            buf.append("<th colspan=\"2\"><b>" + _t("Router") + ":</b> <code>").append(hash).append("</code>\n");
    769770            if (!full) {
    770                 buf.append("[<a href=\"netdb?r=").append(hash.substring(0, 6)).append("\" >").append(_t("Full entry")).append("</a>]");
    771             }
    772             buf.append("</th><th><img src=\"/imagegen/id?s=32&amp;c=" + hash.replace("=", "%3d") + "\" height=\"32\" width=\"32\"> ");
    773             buf.append("</th></tr><tr><td colspan=\"2\">\n");
     771                buf.append("</th><th><a href=\"netdb?r=").append(hash.substring(0, 6)).append("\" >").append(_t("Full entry")).append("</a></th><th>");
     772            }
     773            buf.append("<img src=\"/imagegen/id?s=32&amp;c=" + hash.replace("=", "%3d") + "\" height=\"32\" width=\"32\"> ");
     774            buf.append("</th></tr>\n");
    774775            if (us != null) {
    775776                BigInteger dist = HashDistance.getDistance(us, info.getHash());
    776777                distance = biLog2(dist);
    777                 buf.append("<b>Hash Distance: ").append(fmt.format(distance)).append("</b><br>");
    778             }
    779         }
    780         buf.append("<b>Routing Key: </b>").append(info.getRoutingKey().toBase64()).append("<br>\n");
    781         buf.append("<b>Version: </b>").append(DataHelper.stripHTML(info.getVersion())).append("<br>\n");
    782         buf.append("<b>Caps: </b>").append(DataHelper.stripHTML(info.getCapabilities())).append("<br>\n");
     778                buf.append("<tr><td><b>Hash Distance:</b></td><td colspan=\"3\">").append(fmt.format(distance)).append("</td></tr>\n");
     779            }
     780        }
     781        buf.append("<tr><td><b>Routing Key:</b></td><td colspan=\"3\">").append(info.getRoutingKey().toBase64()).append("</td></tr>\n");
     782        buf.append("<tr><td><b>Version:</b></td><td colspan=\"3\">").append(DataHelper.stripHTML(info.getVersion())).append("</td></tr>\n");
     783        buf.append("<tr><td><b>Caps:</b></td><td colspan=\"3\">").append(DataHelper.stripHTML(info.getCapabilities())).append("</td></tr>\n");
    783784        String fam = info.getOption("family");
    784785        if (fam != null)
    785             buf.append("<b>Family: ").append(DataHelper.escapeHTML(fam)).append("</b><br>\n");
     786            buf.append("<tr><td><b>Family:</b></td><td colspan=\"3\">").append(DataHelper.escapeHTML(fam)).append("</td></tr>\n");
    786787        String kls = info.getOption("netdb.knownLeaseSets");
    787788        if (kls != null)
    788             buf.append("<b>Lease Sets: </b>").append(DataHelper.stripHTML(kls)).append("<br>\n");
     789            buf.append("<tr><td><b>Lease Sets:</b></td><td colspan=\"3\">").append(DataHelper.stripHTML(kls)).append("</td></tr>\n");
    789790        String kr = info.getOption("netdb.knownRouters");
    790791        if (kr != null)
    791             buf.append("<b>Routers: </b>").append(DataHelper.stripHTML(kr)).append("<br>\n");
     792            buf.append("<tr><td><b>Routers:</b></td><td colspan=\"3\">").append(DataHelper.stripHTML(kr)).append("</td></tr>\n");
    792793       
    793794        long now = _context.clock().now();
     
    798799                if (heard > 0) {
    799800                    long age = Math.max(now - heard, 1);
    800                     buf.append("<b>First heard about:</b> ")
    801                        .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     801                    buf.append("<tr><td><b>First heard about:</b></td><td colspan=\"3\">")
     802                       .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
    802803                }
    803804                heard = prof.getLastHeardAbout();
    804805                if (heard > 0) {
    805806                    long age = Math.max(now - heard, 1);
    806                     buf.append("<b>Last heard about:</b> ")
    807                        .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     807                    buf.append("<tr><td><b>Last heard about:</b></td><td colspan=\"3\">")
     808                       .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
    808809                }
    809810                heard = prof.getLastHeardFrom();
    810811                if (heard > 0) {
    811812                    long age = Math.max(now - heard, 1);
    812                     buf.append("<b>Last heard from:</b> ")
    813                        .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     813                    buf.append("<tr><td><b>Last heard from:</b></td><td colspan=\"3\">")
     814                       .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
    814815                }
    815816                DBHistory dbh = prof.getDBHistory();
     
    818819                    if (heard > 0) {
    819820                        long age = Math.max(now - heard, 1);
    820                         buf.append("<b>Last lookup successful:</b> ")
    821                            .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     821                        buf.append("<tr><td><b>Last lookup successful:</b></td><td colspan=\"3\">")
     822                           .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
    822823                    }
    823824                    heard = dbh.getLastLookupFailed();
    824825                    if (heard > 0) {
    825826                        long age = Math.max(now - heard, 1);
    826                         buf.append("<b>Last lookup failed:</b> ")
    827                            .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     827                        buf.append("<tr><td><b>Last lookup failed:</b></td><td colspan=\"3\"> ")
     828                           .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
    828829                    }
    829830                    heard = dbh.getLastStoreSuccessful();
    830831                    if (heard > 0) {
    831832                        long age = Math.max(now - heard, 1);
    832                         buf.append("<b>Last store successful:</b> ")
    833                            .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     833                        buf.append("<tr><td><b>Last store successful:</b></td><td colspan=\"3\">")
     834                           .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
    834835                    }
    835836                    heard = dbh.getLastStoreFailed();
    836837                    if (heard > 0) {
    837838                        long age = Math.max(now - heard, 1);
    838                         buf.append("<b>Last store failed:</b> ")
    839                            .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     839                        buf.append("<tr><td><b>Last store failed:</b></td><td colspan=\"3\">")
     840                           .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
    840841                    }
    841842                }
     
    845846        long age = Math.max(now - info.getPublished(), 1);
    846847        if (isUs && _context.router().isHidden()) {
    847             buf.append("<b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b> ")
    848                .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     848            buf.append("<tr><td><b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b></td><td colspan=\"3\">")
     849               .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
    849850        } else {
    850             buf.append("<b>").append(_t("Published")).append(":</b> ")
    851                .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
    852         }
    853         buf.append("<b>").append(_t("Signing Key")).append(":</b> ")
    854            .append(info.getIdentity().getSigningPublicKey().getType().toString());
    855         buf.append("<br>\n<b>" + _t("Addresses") + ":</b> ");
     851            buf.append("<tr><td><b>").append(_t("Published")).append(":</b></td><td colspan=\"3\">")
     852               .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
     853        }
     854        buf.append("<tr><td><b>").append(_t("Signing Key")).append(":</b></td><td colspan=\"3\">")
     855           .append(info.getIdentity().getSigningPublicKey().getType().toString()).append("</td></tr>\n");
     856        buf.append("<tr><td><b>" + _t("Addresses") + ":</b></td><td colspan=\"3\">");
    856857        String country = _context.commSystem().getCountry(info.getIdentity().getHash());
    857858        if(country != null) {
  • apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java

    r2fe1f97 r6bfd39d5  
    3434   
    3535    public void renderStatusHTML(Writer out) throws IOException {
    36         out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>" + _t("Exploratory tunnels") + " (<a href=\"/configtunnels#exploratory\">" + _t("configure") + "</a>)</h2>\n");
     36        out.write("<h3 class=\"tabletitle\" id=\"exploratorytunnels\"><a name=\"exploratory\" ></a>" + _t("Exploratory tunnels") + " (<a href=\"/configtunnels#exploratory\">" + _t("configure") + "</a>)</h3>\n");
    3737        renderPool(out, _context.tunnelManager().getInboundExploratoryPool(), _context.tunnelManager().getOutboundExploratoryPool());
    3838       
     
    5555            if (name == null)
    5656                name = client.toBase64().substring(0,4);
    57             out.write("<h2><a name=\"" + client.toBase64().substring(0,4)
     57            out.write("<h3 class=\"tabletitle\"><a name=\"" + client.toBase64().substring(0,4)
    5858                      + "\" ></a>" + _t("Client tunnels for") + ' ' + DataHelper.escapeHTML(_t(name)));
    5959            if (isLocal)
    60                 out.write(" (<a href=\"/configtunnels#" + client.toBase64().substring(0,4) +"\">" + _t("configure") + "</a>)</h2>\n");
    61             else
    62                 out.write(" (" + _t("dead") + ")</h2>\n");
     60                out.write(" (<a href=\"/configtunnels#" + client.toBase64().substring(0,4) +"\">" + _t("configure") + "</a>)</h3>\n");
     61            else
     62                out.write(" (" + _t("dead") + ")</h3>\n");
    6363            renderPool(out, in, outPool);
    6464        }
    6565       
    6666        List<HopConfig> participating = _context.tunnelDispatcher().listParticipatingTunnels();
    67         out.write("<h2><a name=\"participating\"></a>" + _t("Participating tunnels") + "</h2>\n");
     67        out.write("<h3 class=\"tabletitle\"><a name=\"participating\"></a>" + _t("Participating tunnels") + "</h3>\n");
    6868        if (!participating.isEmpty()) {
    6969            Collections.sort(participating, new TunnelComparator());
    70             out.write("<table><tr><th>" + _t("Receive on") + "</th><th>" + _t("From") + "</th><th>"
     70            out.write("<table class=\"tunneldisplay\"><tr><th>" + _t("Receive on") + "</th><th>" + _t("From") + "</th><th>"
    7171                  + _t("Send on") + "</th><th>" + _t("To") + "</th><th>" + _t("Expiration") + "</th>"
    7272                  + "<th>" + _t("Usage") + "</th><th>" + _t("Rate") + "</th><th>" + _t("Role") + "</th></tr>\n");
     
    137137        out.write("<div class=\"statusnotes\"><b>" + _t("Lifetime bandwidth usage") + ": " + DataHelper.formatSize2(processed*1024) + "B</b></div>\n");
    138138        //renderPeers(out);
    139         out.write("</div>");
    140139    }
    141140   
     
    165164                maxLength = info.getLength();
    166165        }
    167         out.write("<table><tr><th>" + _t("In/Out") + "</th><th>" + _t("Expiry") + "</th><th>" + _t("Usage") + "</th><th>" + _t("Gateway") + "</th>");
     166        out.write("<table class=\"tunneldisplay\"><tr><th>" + _t("In/Out") + "</th><th>" + _t("Expiry") + "</th><th>" + _t("Usage") + "</th><th>" + _t("Gateway") + "</th>");
    168167        if (maxLength > 3) {
    169168            out.write("<th align=\"center\" colspan=\"" + (maxLength - 2));
  • apps/routerconsole/jsp/config.jsp

    r2fe1f97 r6bfd39d5  
    1616<jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    1717<h1><%=intl._t("I2P Bandwidth Configuration")%></h1>
    18 <div class="main" id="main">
     18<div class="main" id="help">
    1919 <%@include file="confignav.jsi" %>
    2020
    2121 <jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" />
    2222<%@include file="formhandler.jsi" %>
    23 <div class="configure">
    2423 <form action="" method="POST">
    2524 <input type="hidden" name="nonce" value="<%=pageNonce%>">
    2625 <input type="hidden" name="action" value="blah" >
    2726 <input type="hidden" name="ratesOnly" value="1" >
    28  <h3><%=intl._t("Bandwidth limiter")%></h3><p>
    29  <img src="/themes/console/images/itoopie_xsm.png" alt="">
     27
     28 <h3 id="bwlimiter" class="tabletitle"><%=intl._t("Bandwidth limiter")%></h3>
     29 <table id="bandwidthconfig" class="configtable">
     30 <tr><td class="infohelp" colspan="2">
    3031 <b><%=intl._t("I2P will work best if you configure your rates to match the speed of your internet connection.")%></b>
    31  </p>
    32    <div class="wideload"><table><tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" >
     32 </td></tr>
     33   <tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" >
    3334          <%=intl._t("KBps In")%>
    3435        </td><td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)</td>
     
    5657        <td><jsp:getProperty name="nethelper" property="sharePercentageBox" /> <%=intl._t("Share")%></td>
    5758        <td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)
    58 </td></tr></table></div>
    59 <p><% int share = nethelper.getShareBandwidth();
     59</td></tr>
     60<tr><td class="infohelp" colspan="2">
     61<% int share = nethelper.getShareBandwidth();
    6062    if (share < 12) {
    6163        out.print("<b>");
     
    7476        out.print(intl._t("The higher the share bandwidth the more you improve your anonymity and help the network."));
    7577    }
    76  %></p>
    77 <p><a href="confignet"><%=intl._t("Advanced network configuration page")%></a></p><hr>
    78 <div class="formaction">
     78 %></td></tr>
     79  <tr><td colspan="2">
     80   <a href="confignet"><%=intl._t("Advanced network configuration page")%></a>
     81  </td></tr>
     82  <tr><td class="optionsave" colspan="2">
    7983<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    8084<input type="submit" class="accept" name="save" value="<%=intl._t("Save changes")%>" >
    81 </div>
     85  </td></tr>
     86 </table>
    8287</form>
    83 </div></div></body></html>
     88</div></body></html>
  • apps/routerconsole/jsp/configadvanced.jsp

    r2fe1f97 r6bfd39d5  
    2525 <div class="configure">
    2626 <div class="wideload">
    27 <h3><%=intl._t("Floodfill Configuration")%></h3>
    28 <p><%=intl._t("Floodill participation helps the network, but may use more of your computer's resources.")%>
    29 </p><p>
     27
     28<h3 id="ffconf" class="tabletitle"><%=intl._t("Floodfill Configuration")%></h3>
     29<form action="" method="POST">
     30 <table id="floodfillconfig" class="configtable">
     31  <tr><td class="infohelp">
     32<%=intl._t("Floodill participation helps the network, but may use more of your computer's resources.")%>
     33  </td></tr>
     34  <tr><td>
    3035<%
    3136    if (advancedhelper.isFloodfill()) {
     
    3540    }
    3641%>
    37 </p>
    38 <form action="" method="POST">
     42  </td></tr>
     43  <tr><td>
    3944<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    4045<input type="hidden" name="action" value="ff" >
    4146<input type="radio" class="optbox" name="ff" value="auto" <%=advancedhelper.getFFChecked(2) %> >
    42 <%=intl._t("Automatic")%><br>
     47<%=intl._t("Automatic")%>&nbsp;
    4348<input type="radio" class="optbox" name="ff" value="true" <%=advancedhelper.getFFChecked(1) %> >
    44 <%=intl._t("Force On")%><br>
     49<%=intl._t("Force On")%>&nbsp;
    4550<input type="radio" class="optbox" name="ff" value="false" <%=advancedhelper.getFFChecked(0) %> >
    46 <%=intl._t("Disable")%><br>
    47 <div class="formaction">
     51<%=intl._t("Disable")%>
     52  </td></tr>
     53  <tr><td class="optionsave" align="right">
    4854<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
    49 </div></form>
    50 <h3><%=intl._t("Advanced I2P Configuration")%></h3>
     55  </td></tr>
     56 </table>
     57</form>
     58
     59<h3 id="advancedconfig" class="tabletitle"><%=intl._t("Advanced I2P Configuration")%></h3><b>
    5160<% if (advancedhelper.isAdvanced()) { %>
    5261 <form action="" method="POST">
     
    5463 <input type="hidden" name="action" value="blah" >
    5564<% }  // isAdvanced %>
    56  <textarea rows="32" cols="60" name="nofilter_config" wrap="off" spellcheck="false" <% if (!advancedhelper.isAdvanced()) { %>readonly="readonly"<% } %>><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr>
     65<table class="configtable" id="advconf">
    5766<% if (advancedhelper.isAdvanced()) { %>
    58       <div class="formaction">
     67 <tr><td class="infohelp">
     68<%=intl._t("NOTE")%>:</b> <%=intl._t("Some changes may require a restart to take effect.")%>
     69 </td></tr>
     70<% } else { %>
     71 <tr><td>
     72<%=intl._t("To make changes, edit the file {0}.", "<tt>" + advancedhelper.getConfigFileName() + "</tt>")%>
     73 </td></tr>
     74<% }  // isAdvanced %>
     75 <tr><td class="tabletextarea">
     76 <textarea id="advancedsettings"rows="32" cols="60" name="nofilter_config" wrap="off" spellcheck="false" <% if (!advancedhelper.isAdvanced()) { %>readonly="readonly"<% } %>><jsp:getProperty name="advancedhelper" property="settings" /></textarea>
     77 </td></tr>
     78<% if (advancedhelper.isAdvanced()) { %>
     79 <tr><td class="optionsave" align="right">
    5980        <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    6081        <input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
    61  <br><b><%=intl._t("NOTE")%>:</b> <%=intl._t("Some changes may require a restart to take effect.")%>
    62  </div></form>
    63 <% } else { %>
    64 <%=intl._t("To make changes, edit the file {0}.", "<tt>" + advancedhelper.getConfigFileName() + "</tt>")%>
     82 </td></tr>
     83<% }  // isAdvanced %>
     84</table>
     85<% if (advancedhelper.isAdvanced()) { %>
     86</form>
    6587<% }  // isAdvanced %>
    6688</div></div></div></body></html>
  • apps/routerconsole/jsp/configclients.jsp

    r2fe1f97 r6bfd39d5  
    2828<%@include file="formhandler.jsi" %>
    2929 <div class="configure">
    30  <h3><%=intl._t("Client Configuration")%></h3><p>
    31  <%=intl._t("The Java clients listed below are started by the router and run in the same JVM.")%><br>
    32  <img src="/themes/console/images/itoopie_xsm.png" alt=""><b><%=intl._t("Be careful changing any settings here. The 'router console' and 'application tunnels' are required for most uses of I2P. Only advanced users should change these.")%></b>
     30 <h3 id="i2pclientconfig"><%=intl._t("Client Configuration")%></h3>
     31 <p class="infohelp" id="clientconf">
     32 <%=intl._t("The Java clients listed below are started by the router and run in the same JVM.")%>&nbsp;
     33 <%=intl._t("To change other client options, edit the file")%></i><tt>
     34 <%=net.i2p.router.startup.ClientAppConfig.configFile(net.i2p.I2PAppContext.getGlobalContext()).getAbsolutePath()%>.</tt>
     35 <%=intl._t("All changes require restart to take effect.")%>
     36 </p>
     37 <p class="infowarn" id="clientconf">
     38  <b><%=intl._t("Be careful changing any settings here. The 'router console' and 'application tunnels' are required for most uses of I2P. Only advanced users should change these.")%></b>
    3339 </p><div class="wideload">
    3440<form action="" method="POST">
    3541<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    3642<jsp:getProperty name="clientshelper" property="form1" />
    37 <p><i><%=intl._t("To change other client options, edit the file")%>
    38  <%=net.i2p.router.startup.ClientAppConfig.configFile(net.i2p.I2PAppContext.getGlobalContext()).getAbsolutePath()%>.
    39  <%=intl._t("All changes require restart to take effect.")%></i>
    40  </p><hr><div class="formaction">
     43<div class="formaction" id="clientsconfig">
    4144 <input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
    4245<% if (clientshelper.isClientChangeEnabled() && request.getParameter("edit") == null) { %>
     
    4649</div></form></div>
    4750
    48 <h3><a name="i2cp"></a><%=intl._t("Advanced Client Interface Configuration")%></h3>
     51<h3 id="advancedclientconfig"><a name="i2cp"></a><%=intl._t("Advanced Client Interface Configuration")%></h3>
    4952<form action="" method="POST">
    5053<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    51 <p>
    52 <b><%=intl._t("External I2CP (I2P Client Protocol) Interface Configuration")%></b><br>
     54<table class="configtable" id="externali2cp">
     55<tr><td class="infowarn">
     56<b><%=intl._t("The default settings will work for most people.")%></b>
     57<%=intl._t("Any changes made here must also be configured in the external client.")%>
     58<%=intl._t("Many clients do not support SSL or authorization.")%>
     59<i><%=intl._t("All changes require restart to take effect.")%></i>
     60</td></tr>
     61<tr><th><%=intl._t("External I2CP (I2P Client Protocol) Interface Configuration")%></th></tr>
     62<tr><td>
    5363<input type="radio" class="optbox" name="mode" value="1" <%=clientshelper.i2cpModeChecked(1) %> >
    54 <%=intl._t("Enabled without SSL")%><br>
     64<%=intl._t("Enabled without SSL")%>&nbsp;
    5565<input type="radio" class="optbox" name="mode" value="2" <%=clientshelper.i2cpModeChecked(2) %> >
    56 <%=intl._t("Enabled with SSL required")%><br>
     66<%=intl._t("Enabled with SSL required")%>&nbsp;
    5767<input type="radio" class="optbox" name="mode" value="0" <%=clientshelper.i2cpModeChecked(0) %> >
    58 <%=intl._t("Disabled - Clients outside this Java process may not connect")%><br>
     68<%=intl._t("Disabled - Clients outside this Java process may not connect")%>
     69</td</tr>
     70<tr><td>
    5971<%=intl._t("I2CP Interface")%>:
    6072<select name="interface">
     
    7284       }
    7385%>
    74 </select><br>
     86</select>&nbsp;
    7587<%=intl._t("I2CP Port")%>:
    76 <input name="port" type="text" size="5" maxlength="5" value="<jsp:getProperty name="clientshelper" property="port" />" ><br>
    77 <b><%=intl._t("Authorization")%></b><br>
     88<input name="port" type="text" size="5" maxlength="5" value="<jsp:getProperty name="clientshelper" property="port" />" >
     89</td></tr>
     90<tr><th><%=intl._t("Authorization")%></th></tr>
     91<tr><td>
    7892<input type="checkbox" class="optbox" name="auth" value="true" <jsp:getProperty name="clientshelper" property="auth" /> >
    79 <%=intl._t("Require username and password")%><br>
     93<%=intl._t("Require username and password")%>
     94</td></tr>
     95<tr><td>
    8096<%=intl._t("Username")%>:
    81 <input name="user" type="text" value="" /><br>
     97<input name="user" type="text" value="" />&nbsp;
    8298<%=intl._t("Password")%>:
    83 <input name="nofilter_pw" type="password" value="" /><br>
    84 </p><p><b><%=intl._t("The default settings will work for most people.")%></b>
    85 <%=intl._t("Any changes made here must also be configured in the external client.")%>
    86 <%=intl._t("Many clients do not support SSL or authorization.")%>
    87 <i><%=intl._t("All changes require restart to take effect.")%></i>
    88 </p><hr><div class="formaction">
     99<input name="nofilter_pw" type="password" value="" />
     100</td></tr>
     101<tr><td class="optionsave" align="right">
    89102<input type="submit" class="default" name="action" value="<%=intl._t("Save Interface Configuration")%>" />
    90103<input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
    91104<input type="submit" class="accept" name="action" value="<%=intl._t("Save Interface Configuration")%>" />
    92 </div></form>
     105</td></tr>
     106</table>
     107</form>
    93108
    94 <h3><a name="webapp"></a><%=intl._t("WebApp Configuration")%></h3><p>
    95  <%=intl._t("The Java web applications listed below are started by the webConsole client and run in the same JVM as the router. They are usually web applications accessible through the router console. They may be complete applications (e.g. i2psnark),front-ends to another client or application which must be separately enabled (e.g. susidns, i2ptunnel), or have no web interface at all (e.g. addressbook).")%>
    96  </p><p>
     109<h3 id="webappconfig"><a name="webapp"></a><%=intl._t("WebApp Configuration")%></h3>
     110<p class="infohelp" id="webappconfig">
     111 <%=intl._t("The Java web applications listed below are started by the webConsole client and run in the same JVM as the router. They are usually web applications accessible through the router console. They may be complete applications (e.g. i2psnark), front-ends to another client or application which must be separately enabled (e.g. susidns, i2ptunnel), or have no web interface at all (e.g. addressbook).")%>&nbsp;
    97112 <%=intl._t("A web app may also be disabled by removing the .war file from the webapps directory; however the .war file and web app will reappear when you update your router to a newer version, so disabling the web app here is the preferred method.")%>
     113 <i><%=intl._t("All changes require restart to take effect.")%></i>
    98114 </p><div class="wideload">
    99115<form action="configclients" method="POST">
    100116<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    101117 <jsp:getProperty name="clientshelper" property="form2" />
    102  <p><i><%=intl._t("All changes require restart to take effect.")%></i>
    103  </p><hr><div class="formaction">
     118 <div class="formaction" id="webappconfig">
    104119 <input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
    105120 <input type="submit" name="action" class="accept" value="<%=intl._t("Save WebApp Configuration")%>" />
     
    110125       if (clientshelper.isPluginUpdateEnabled()) {
    111126%>
    112 <h3><a name="pconfig"></a><%=intl._t("Plugin Configuration")%></h3><p>
     127<h3 id="pluginconfig"><a name="pconfig"></a><%=intl._t("Plugin Configuration")%></h3><p id="pluginconfig">
    113128 <%=intl._t("The plugins listed below are started by the webConsole client.")%>
    114129 </p><div class="wideload">
     
    116131<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    117132 <jsp:getProperty name="clientshelper" property="form3" />
    118 <div class="formaction">
     133<div class="formaction" id="pluginconfig">
    119134 <input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
    120135 <input type="submit" name="action" class="accept" value="<%=intl._t("Save Plugin Configuration")%>" />
     
    124139       if (clientshelper.isPluginInstallEnabled()) {
    125140%>
    126 <h3><a name="plugin"></a><%=intl._t("Plugin Installation from URL")%></h3><p>
     141<h3 id="pluginmanage"><a name="plugin"></a><%=intl._t("Plugin Installation")%></h3>
     142<table id="plugininstall" class="configtable">
     143<tr><td class="infohelp" colspan="2">
    127144 <%=intl._t("Look for available plugins on {0}.", "<a href=\"http://i2pwiki.i2p/index.php?title=Plugins\">i2pwiki.i2p</a>")%>
    128  <%=intl._t("To install a plugin, enter the download URL:")%>
    129  </p>
    130 <div class="wideload">
     145</td></tr>
     146<tr><th colspan="2">
     147 <%=intl._t("Installation from URL")%>
     148</th></tr>
     149<tr>
    131150<form action="configclients" method="POST">
    132 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    133 <p>
    134  <input type="text" size="60" name="pluginURL" >
    135  </p><hr><div class="formaction">
    136  <input type="submit" name="action" class="default" value="<%=intl._t("Install Plugin")%>" />
     151<td>
     152 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
     153 URL:&nbsp;<input type="text" size="60" name="pluginURL" title="<%=intl._t("To install a plugin, enter the download URL.")%>">
     154</td>
     155<td class="optionsave" align="right">
     156 <input type="submit" name="action" class="default" id="hideme" value="<%=intl._t("Install Plugin")%>" />
    137157 <input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
    138158 <input type="submit" name="action" class="download" value="<%=intl._t("Install Plugin")%>" />
    139 </div></form></div>
    140 
    141 
    142 <div class="wideload">
    143 <h3><a name="plugin"></a><%=intl._t("Plugin Installation from File")%></h3>
     159</td>
     160</form>
     161</tr>
     162<tr><th colspan="2">
     163<a name="plugin"></a><%=intl._t("Installation from File")%>
     164</th></tr>
     165<tr>
    144166<form action="configclients" method="POST" enctype="multipart/form-data" accept-charset="UTF-8">
     167<td>
    145168<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    146 <p><%=intl._t("Install plugin from file.")%>
    147 <br><%=intl._t("Select xpi2p or su3 file")%> :
     169<%=intl._t("Select xpi2p or su3 file")%>:&nbsp;
    148170<input type="file" name="pluginFile" >
    149 </p><hr><div class="formaction">
     171</td>
     172<td class="optionsave" align="right">
    150173<input type="submit" name="action" class="download" value="<%=intl._t("Install Plugin from File")%>" />
    151 </div></form></div>
     174</td>
     175</form>
     176</tr>
     177</table>
    152178<%
    153179       } // pluginInstallEnabled
    154180       if (clientshelper.isPluginUpdateEnabled()) {
    155181%>
    156 <h3><a name="plugin"></a><%=intl._t("Update All Plugins")%></h3>
    157 <div class="formaction">
     182<h4 id="updateplugins" class="embeddedtitle"><a name="plugin"></a><%=intl._t("Update All Plugins")%></h4>
     183<div class="formaction" id="updateplugins">
    158184<form action="configclients" method="POST">
    159185<input type="hidden" name="nonce" value="<%=pageNonce%>" >
  • apps/routerconsole/jsp/configfamily.jsp

    r2fe1f97 r6bfd39d5  
    2121<%@include file="formhandler.jsi" %>
    2222
    23 <p><%=intl._t("Routers in the same family share a family key.")%>
     23<p class="infohelp"><%=intl._t("Routers in the same family share a family key.")%>
    2424<%=intl._t("To join an existing family, import the private key you exported from a router in the family.")%>
    2525<%=intl._t("To start a new family, enter a family name.")%>
     
    3131       // no family yet
    3232%>
    33 <div class="configure">
     33<table class="configtable" id="joinfamily">
    3434<form action="" method="POST" enctype="multipart/form-data" accept-charset="UTF-8">
    3535<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    36 <h3><%=intl._t("Join Existing Router Family")%></h3>
    37 <p><%=intl._t("Import the secret family key that you exported from an existing router in the family.")%>
    38 <p><%=intl._t("Select secret key file")%> :
     36 <tr><th colspan="2"><%=intl._t("Join Existing Router Family")%></th></tr>
     37 <tr><td colspan="2"><%=intl._t("Import the secret family key that you exported from an existing router in the family.")%></td></tr>
     38 <tr>
     39  <td><%=intl._t("Select secret key file")%>:
    3940<input name="file" type="file" value="" />
    40 </p>
    41 <div class="formaction">
     41  </td>
     42  <td class="optionsave">
    4243<input type="submit" name="action" class="download" value="<%=intl._t("Join Existing Router Family")%>" />
    43 </div></form></div>
     44  </td>
     45 </tr>
     46</form></table>
    4447
    45 <div class="configure"><form action="" method="POST">
     48<table class="configtable" id="newfamily">
     49<form action="" method="POST">
    4650<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    47 <h3><%=intl._t("Create New Router Family")%></h3>
    48 <p><%=intl._t("Family Name")%> :
     51 <tr><th colspan="2"><%=intl._t("Create New Router Family")%></th></tr>
     52 <tr>
     53  <td><%=intl._t("Family Name")%>:
    4954<input name="family" type="text" size="30" value="" />
    50 </p>
    51 <div class="formaction">
     55  </td>
     56  <td class="optionsave">
    5257<input type="submit" name="action" class="accept" value="<%=intl._t("Create New Router Family")%>" />
    53 </div></form></div>
     58  </td>
     59 </tr>
     60</form>
     61</table>
    5462<%
    5563   } else {
     
    5967           // family is active
    6068%>
    61 <div class="configure">
     69<table class="configtable" id="exportfamily">
    6270<form action="/exportfamily" method="GET">
    63 <h3><%=intl._t("Export Family Key")%></h3>
    64 <p><%=intl._t("Export the secret family key to be imported into other routers you control.")%>
    65 </p>
    66 <div class="formaction">
     71 <tr><th><%=intl._t("Export Family Key")%></th></tr>
     72 <tr><td><%=intl._t("Export the secret family key to be imported into other routers you control.")%></td></tr>
     73 <tr>
     74  <td class="optionsave">
    6775<input type="submit" name="action" class="go" value="<%=intl._t("Export Family Key")%>" />
    68 </div></form></div>
     76  </td>
     77 </tr>
     78</form></table>
    6979<%
    7080       } else {
    7181           // family is not active
    7282%>
    73 <p><b><%=intl._t("Restart required to activate family {0}.", '"' + family + '"')%>
     83<p class="infohelp"><b><%=intl._t("Restart required to activate family {0}.", '"' + family + '"')%>
    7484<%=intl._t("After restarting, you may export the family key.")%></b></p>
    7585<%
    7686       }
    7787%>
    78 <div class="configure"><form action="" method="POST">
     88<table class="configtable" id="leavefamily">
     89<form action="" method="POST">
    7990<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    80 <h3><%=intl._t("Leave Router Family")%></h3>
    81 <p><%=intl._t("No longer be a member of the family {0}.", '"' + family + '"')%>
    82 <div class="formaction">
     91 <tr><th colspan="2"><%=intl._t("Leave Router Family")%></th></tr>
     92 <tr><td><%=intl._t("No longer be a member of the family {0}.", '"' + family + '"')%></td>
     93  <td class="optionsave">
    8394<input type="submit" name="action" class="delete" value="<%=intl._t("Leave Router Family")%>" />
    84 </div></form></div>
     95  </td>
     96 </tr>
     97</form>
     98</table>
    8599<%
    86100   }
  • apps/routerconsole/jsp/confighome.jsp

    r2fe1f97 r6bfd39d5  
    2727<jsp:setProperty name="homehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    2828
    29 <h3><%=intl._t("Default Home Page")%></h3>
     29<h3 class="tabletitle"><%=intl._t("Default Home Page")%></h3>
    3030<form action="" method="POST">
    3131 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    3232 <input type="hidden" name="group" value="0">
     33<table id="oldhome" class="configtable">
     34 <tr>
     35  <td>
    3336 <input type="checkbox" name="oldHome" <jsp:getProperty name="homehelper" property="configHome" /> >
    3437 <%=intl._t("Use old home page")%>
     38  </td>
     39  <td class="optionsave">
    3540 <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
     41  </td>
     42 </tr>
     43</table>
    3644</form>
    3745
     
    3947   if (homehelper.shouldShowSearch()) {
    4048%>
    41 <h3><%=intl._t("Search Engines")%></h3>
     49<h3 class="tabletitle"><%=intl._t("Search Engines")%></h3>
    4250<form action="" method="POST">
    4351 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    4452 <input type="hidden" name="group" value="3">
    4553 <jsp:getProperty name="homehelper" property="configSearch" />
    46  <div class="formaction">
     54 <div class="formaction" id="homesearch">
    4755  <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
    4856  <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
     
    5664%>
    5765
    58 <h3><%=intl._t("Hidden Services of Interest")%></h3>
     66<h3 class="tabletitle"><%=intl._t("Hidden Services of Interest")%></h3>
    5967<form action="" method="POST">
    6068 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    6169 <input type="hidden" name="group" value="1">
    6270 <jsp:getProperty name="homehelper" property="configFavorites" />
    63  <div class="formaction">
     71 <div class="formaction" id="homesites">
    6472  <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
    6573  <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
     
    7078</form>
    7179
    72 <h3><%=intl._t("Applications and Configuration")%></h3>
     80<h3 class="tabletitle"><%=intl._t("Applications and Configuration")%></h3>
    7381<form action="" method="POST">
    7482 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    7583 <input type="hidden" name="group" value="2">
    7684 <jsp:getProperty name="homehelper" property="configServices" />
    77  <div class="formaction">
     85 <div class="formaction" id="homeapps">
    7886  <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
    7987  <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
  • apps/routerconsole/jsp/configkeyring.jsp

    r2fe1f97 r6bfd39d5  
    1919 <jsp:useBean class="net.i2p.router.web.ConfigKeyringHelper" id="keyringhelper" scope="request" />
    2020 <jsp:setProperty name="keyringhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    21 <div class="configure"><h2><%=intl._t("Keyring")%></h2><p>
     21<p id="keyringhelp" class="infohelp">
    2222 <%=intl._t("The router keyring is used to decrypt encrypted leaseSets.")%>
    2323 <%=intl._t("The keyring may contain keys for local or remote encrypted destinations.")%></p>
    24  <div class="wideload">
    2524 <jsp:getProperty name="keyringhelper" property="summary" />
    26 </div>
    27 
    2825 <form action="" method="POST">
    2926 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    30  <h3><%=intl._t("Manual Keyring Addition")%></h3><p>
     27 <h3 class="tabletitle"><%=intl._t("Manual Keyring Addition")%></h3>
     28 <table id="addkeyring">
     29        <tr>
     30          <td class="infohelp" colspan="2">
    3131 <%=intl._t("Enter keys for encrypted remote destinations here.")%>
    3232 <%=intl._t("Keys for local destinations must be entered on the")%> <a href="i2ptunnel/"><%=intl._t("I2PTunnel page")%></a>.
    33 </p>
    34   <div class="wideload">
    35       <table><tr>
     33          </td>
     34        </tr><tr>
    3635          <td class="mediumtags" align="right"><%=intl._t("Dest. name, hash, or full key")%>:</td>
    3736          <td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off" spellcheck="false"></textarea></td>
     
    4443<input type="submit" name="action" class="delete" value="<%=intl._t("Delete key")%>" >
    4544<input type="submit" name="action" class="add" value="<%=intl._t("Add key")%>" >
    46 </td></tr></table></div></form></div></div></body></html>
     45</td></tr></table></form></div></body></html>
  • apps/routerconsole/jsp/configlogging.jsp

    r2fe1f97 r6bfd39d5  
    2020 <jsp:useBean class="net.i2p.router.web.ConfigLoggingHandler" id="formhandler" scope="request" />
    2121<%@include file="formhandler.jsi" %>
    22 <div class="configure">
    2322 <form action="" method="POST">
    2423 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    2524 <input type="hidden" name="action" value="blah" >
    26  <h3><%=intl._t("Configure I2P Logging Options")%></h3>
    27  <div class="wideload">
    28       <table border="0" cellspacing="5">
     25 <h3 class="tabletitle"><%=intl._t("Configure I2P Logging Options")%></h3>
     26      <table id="loggingoptions" border="0" cellspacing="5">
    2927        <tr><td class="mediumtags" align="right"><b><%=intl._t("Log file")%>:</b></td>
    3028          <td><input type="text" name="logfilename" size="40" disabled="disabled" title="<%=intl._t("Edit {0} to change", "logger.config")%>" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" >
    31             <br> <i><%=intl._t("(the symbol '@' will be replaced during log rotation)")%></i></td>
     29            </td>
     30          <td><i><%=intl._t("(the symbol '@' will be replaced during log rotation)")%></i></td>
     31          <td></td>
    3232        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Log record format")%>:</b></td>
    3333          <td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" >
    34             <br> <i><%=intl._t("(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)")%>
    35             </i></td>
     34            </td>
     35          <td><i><%=intl._t("(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)")%></i></td>
     36          <td></td>
    3637        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Log date format")%>:</b></td>
    3738          <td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" >
    38             <br> <i><%=intl._t("('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)")%>
    39             </i></td>
     39            </td>
     40          <td><i><%=intl._t("('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)")%></i></td>
     41          <td></td>
    4042        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Max log file size")%>:</b></td>
    41           <td><input type="text" name="logfilesize" size="10" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" ><br></td>
     43          <td><input type="text" name="logfilesize" size="10" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" ></td>
     44          <td></td>
     45          <td></td>
    4246        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Default log level")%>:</b></td>
    43           <td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /><br><i><%=intl._t("(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)")%>
    44           </i></td>
     47          <td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /></td>
     48          <td><i><%=intl._t("(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)")%></i></td>
     49          <td></td>
    4550        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Log level overrides")%>:</b></td>
    46           <td><jsp:getProperty name="logginghelper" property="logLevelTable" /></td>
     51          <td colspan="3"><jsp:getProperty name="logginghelper" property="logLevelTable" /></td>
    4752        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("New override")%>:</b></td>
    48           <td><jsp:getProperty name="logginghelper" property="newClassBox" /></td>
    49         </tr><tr><td colspan="2"><hr></td>
    50         </tr><tr class="tablefooter"><td colspan="2"> <div class="formaction">
     53          <td colspan="3"><jsp:getProperty name="logginghelper" property="newClassBox" /></td>
     54        </tr>
     55        <tr><td class="optionsave" colspan="4">
    5156          <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    5257          <input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
    53 </div></td></tr></table></div></form></div></div></body></html>
     58</td></tr></table></form></div></body></html>
  • apps/routerconsole/jsp/confignet.jsp

    r2fe1f97 r6bfd39d5  
    2020 <jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" />
    2121<%@include file="formhandler.jsi" %>
    22 <div class="configure">
    2322 <form action="" method="POST">
    2423 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    2524 <input type="hidden" name="action" value="blah" >
    26  <h3><%=intl._t("IP and Transport Configuration")%></h3><p>
    27  <img src="/themes/console/images/itoopie_xsm.png" alt="">
     25 <h3 id="iptransport" class="tabletitle"><%=intl._t("IP and Transport Configuration")%></h3>
     26 <table id="netconfig" class="configtable">
     27 <tr>
     28  <td class="infohelp">
    2829 <b><%=intl._t("The default settings will work for most people.")%>
    2930 <a href="#chelp"><%=intl._t("There is help below.")%></a></b>
    30  </p><p><b><%=intl._t("UPnP Configuration")%>:</b><br>
     31 <%=intl._t("Changing these settings will restart your router.")%>
     32  </td>
     33 </tr>
     34 <tr>
     35  <td class="infowarn">
     36   <b><%=intl._t("Do not reveal your port numbers to anyone as they can be used to discover your ip address.")%></b>
     37  </td>
     38 </tr>
     39 <tr>
     40  <th id="upnpconfig"><%=intl._t("UPnP Configuration")%></th>
     41 </tr>
     42 <tr>
     43  <td>
    3144    <input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> >
    3245    <%=intl._t("Enable UPnP to open firewall ports")%> - <a href="peers#upnp"><%=intl._t("UPnP status")%></a>
    33  </p><p><b><%=intl._t("IP Configuration")%>:</b><br>
     46  </td>
     47 </tr>
     48 <tr>
     49  <th id="ipconfig"><%=intl._t("IP Configuration")%></th>
     50 </tr>
     51 <tr>
     52  <td>
    3453 <%=intl._t("Externally reachable hostname or IP address")%>:<br>
    3554    <input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> >
     
    4463    <%=intl._t("Hidden mode - do not publish IP")%> <i><%=intl._t("(prevents participating traffic)")%></i><br>
    4564    <input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> >
    46     <%=intl._t("Specify hostname or IP")%>:<br>
     65    <%=intl._t("Specify hostname or IP")%>:
    4766    <%=nethelper.getAddressSelector() %>
    48  </p><p>
    49  <%=intl._t("Action when IP changes")%>:<br>
     67  </td>
     68 </tr>
     69 <tr>
     70  <th id="ipchange"><%=intl._t("Action when IP changes")%></th>
     71 </tr>
     72 <tr>
     73  <td>
    5074    <input type="checkbox" class="optbox" name="laptop" value="true" <jsp:getProperty name="nethelper" property="laptopChecked" /> >
    5175    <%=intl._t("Laptop mode - Change router identity and UDP port when IP changes for enhanced anonymity")%>
    5276    (<i><%=intl._t("Experimental")%></i>)
    53  </p><p>
    54  <%=intl._t("IPv4 Configuration")%>:<br>
     77  </td>
     78 </tr>
     79 <tr>
     80  <th id="ipv4config"><%=intl._t("IPv4 Configuration")%></th>
     81 </tr>
     82 <tr>
     83  <td>
    5584    <input type="checkbox" class="optbox" name="IPv4Firewalled" value="true" <jsp:getProperty name="nethelper" property="IPv4FirewalledChecked" /> >
    5685    <%=intl._t("Disable inbound (Firewalled by Carrier-grade NAT or DS-Lite)")%>
    57  </p><p>
    58  <%=intl._t("IPv6 Configuration")%>:<br>
     86  </td>
     87 </tr>
     88 <tr>
     89  <th id="ipv6config"><%=intl._t("IPv6 Configuration")%></th>
     90 </tr>
     91 <tr>
     92  <td>
    5993    <input type="radio" class="optbox" name="ipv6" value="false" <%=nethelper.getIPv6Checked("false") %> >
    6094    <%=intl._t("Disable IPv6")%><br>
     
    67101    <input type="radio" class="optbox" name="ipv6" value="only" <%=nethelper.getIPv6Checked("only") %> >
    68102    <%=intl._t("Use IPv6 only (disable IPv4)")%>
    69     (<i><%=intl._t("Experimental")%></i>)<br>
    70  </p><p><b><%=intl._t("UDP Configuration:")%></b><br>
     103    (<i><%=intl._t("Experimental")%></i>)
     104  </td>
     105 </tr>
     106 <tr>
     107  <th id="udpconfig"><%=intl._t("UDP Configuration")%></th>
     108 </tr>
     109 <tr>
     110  <td>
    71111 <%=intl._t("UDP port:")%>
    72112 <input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" ><br>
    73113 <input type="checkbox" class="optbox" name="disableUDP" value="disabled" <%=nethelper.getUdpDisabledChecked() %> >
    74  <%=intl._t("Completely disable")%> <i><%=intl._t("(select only if behind a firewall that blocks outbound UDP)")%></i><br>
     114 <%=intl._t("Completely disable")%> <i><%=intl._t("(select only if behind a firewall that blocks outbound UDP)")%></i>
     115  </td>
     116 </tr>
    75117<% /********
    76118<!-- let's keep this simple...
     
    82124-->
    83125*********/ %>
    84  </p><p>
    85  <b><%=intl._t("TCP Configuration")%>:</b><br>
     126 <tr>
     127  <th id="tcpconfig"><%=intl._t("TCP Configuration")%></th>
     128 </tr>
     129 <tr>
     130  <td>
    86131 <%=intl._t("Externally reachable hostname or IP address")%>:<br>
    87132    <input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> >
     
    97142    <%=intl._t("Disable inbound (Firewalled)")%><br>
    98143    <input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> >
    99     <%=intl._t("Completely disable")%> <i><%=intl._t("(select only if behind a firewall that throttles or blocks outbound TCP)")%></i><br>
    100  </p><p>
    101  <%=intl._t("Externally reachable TCP port")%>:<br>
     144    <%=intl._t("Completely disable")%> <i><%=intl._t("(select only if behind a firewall that throttles or blocks outbound TCP)")%></i>
     145  </td>
     146 </tr>
     147 <tr>
     148  <th id="externaltcp"><%=intl._t("Externally reachable TCP port")%></th>
     149 </tr>
     150 <tr>
     151  <td>
    102152    <input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> >
    103153    <%=intl._t("Use the same port configured for UDP")%>
     
    105155    <input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> >
    106156    <%=intl._t("Specify Port")%>:
    107     <input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" ><br>
    108  </p><p><b><%=intl._t("Notes")%>: <%=intl._t("a) Do not reveal your port numbers to anyone!   b) Changing these settings will restart your router.")%></b></p>
    109 <hr><div class="formaction">
     157    <input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" >
     158  </td>
     159 </tr>
     160 <tr>
     161  <td class="optionsave">
    110162<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    111163<input type="submit" class="accept" name="save" value="<%=intl._t("Save changes")%>" >
    112 </div><h3><a name="chelp"><%=intl._t("Configuration Help")%>:</a></h3><div align="justify"><p>
    113  <%=intl._t("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
    114  </p><p>
    115  <%=intl._t("If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach you.")%>
    116    <%=intl._t("If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching with \"SSU introductions\" to relay traffic.")%>
    117    <%=intl._t("Most of the options above are for special situations, for example where UPnP does not work correctly, or a firewall not under your control is doing harm.")%>
    118    <%=intl._t("Certain firewalls such as symmetric NATs may not work well with I2P.")%>
    119  </p>
     164  </td>
     165 </tr>
     166</table>
     167
    120168<% /********
    121169<!-- let's keep this simple...
     
    124172-->
    125173*********/ %>
    126 <p>
    127  <%=intl._t("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%>
    128    <%=intl._t("UPnP support is beta, and may not work for any number of reasons")%>:
    129 </p>
    130 <ul>
    131 <li class="tidylist"><%=intl._t("No UPnP-compatible device present")%>
    132 <li class="tidylist"><%=intl._t("UPnP disabled on the device")%>
    133 <li class="tidylist"><%=intl._t("Software firewall interference with UPnP")%>
    134 <li class="tidylist"><%=intl._t("Bugs in the device's UPnP implementation")%>
    135 <li class="tidylist"><%=intl._t("Multiple firewall/routers in the internet connection path")%>
    136 <li class="tidylist"><%=intl._t("UPnP device change, reset, or address change")%>
    137 </ul>
    138 <p><a href="peers#upnp"><%=intl._t("Review the UPnP status here.")%></a>
    139 <%=intl._t("UPnP may be enabled or disabled above, but a change requires a router restart to take effect.")%></p>
    140 <p><%=intl._t("Hostnames entered above will be published in the network database.")%>
    141     <%=intl._t("They are <b>not private</b>.")%>
    142     <%=intl._t("Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1.")%>
    143     <%=intl._t("If you specify the wrong IP address or hostname, or do not properly configure your NAT or firewall, your network performance will degrade substantially.")%>
    144     <%=intl._t("When in doubt, leave the settings at the defaults.")%>
    145 </p>
    146 <h3><a name="help"><%=intl._t("Reachability Help")%>:</a></h3><p>
    147  <%=intl._t("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
    148  <%=intl._t("If you think you have opened up your firewall and I2P still thinks you are firewalled, remember that you may have multiple firewalls, for example both software packages and external hardware routers.")%>
    149  <%=intl._t("If there is an error, the <a href=\"logs.jsp\">logs</a> may also help diagnose the problem.")%>
    150 </p>
    151  <ul>
    152 <li class="tidylist"><b><%=intl._t("OK")%></b> -
    153      <%=intl._t("Your UDP port does not appear to be firewalled.")%>
    154 <li class="tidylist"><b><%=intl._t("Firewalled")%></b> -
    155      <%=intl._t("Your UDP port appears to be firewalled.")%>
    156      <%=intl._t("As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error.")%>
    157      <%=intl._t("However, if it appears consistently, you should check whether both your external and internal firewalls are open for your port.")%>
    158      <%=intl._t("I2P will work fine when firewalled, there is no reason for concern. When firewalled, the router uses \"introducers\" to relay inbound connections.")%>
    159      <%=intl._t("However, you will get more participating traffic and help the network more if you can open your firewall(s).")%>
    160      <%=intl._t("If you think you have already done so, remember that you may have both a hardware and a software firewall, or be behind an additional, institutional firewall you cannot control.")%>
    161      <%=intl._t("Also, some routers cannot correctly forward both TCP and UDP on a single port, or may have other limitations or bugs that prevent them from passing traffic through to I2P.")%>
    162 <li class="tidylist"><b><%=intl._t("Testing")%></b> -
    163      <%=intl._t("The router is currently testing whether your UDP port is firewalled.")%>
    164 <li class="tidylist"><b><%=intl._t("Hidden")%></b> -
    165      <%=intl._t("The router is not configured to publish its address, therefore it does not expect incoming connections.")%>
    166      <%=intl._t("Hidden mode is automatically enabled for added protection in certain countries.")%>
    167 <li class="tidylist"><b><%=intl._t("WARN - Firewalled and Fast")%></b> -
    168      <%=intl._t("You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled.")%>
    169      <%=intl._t("While I2P will work fine in this configuration, if you really have over 128KBps of bandwidth to share, it will be much more helpful to the network if you open your firewall.")%>
    170 <li class="tidylist"><b><%=intl._t("WARN - Firewalled and Floodfill")%></b> -
    171      <%=intl._t("You have configured I2P to be a floodfill router, but you are firewalled.")%>
    172      <%=intl._t("For best participation as a floodfill router, you should open your firewall.")%>
    173 <li class="tidylist"><b><%=intl._t("WARN - Firewalled with Inbound TCP Enabled")%></b> -
    174      <%=intl._t("You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well.")%>
    175      <%=intl._t("If your TCP port is firewalled with inbound TCP enabled, routers will not be able to contact you via TCP, which will hurt the network.")%>
    176      <%=intl._t("Please open your firewall or disable inbound TCP above.")%>
    177 <li class="tidylist"><b><%=intl._t("WARN - Firewalled with UDP Disabled")%></b> -
    178      <%=intl._t("You have configured inbound TCP, however you have disabled UDP.")%>
    179      <%=intl._t("You appear to be firewalled on TCP, therefore your router cannot accept inbound connections.")%>
    180      <%=intl._t("Please open your firewall or enable UDP.")%>
    181 <li class="tidylist"><b><%=intl._t("ERR - Clock Skew")%></b> -
    182      <%=intl._t("Your system's clock is skewed, which will make it difficult to participate in the network.")%>
    183      <%=intl._t("Correct your clock setting if this error persists.")%>
    184 <li class="tidylist"><b><%=intl._t("ERR - Private TCP Address")%></b> -
    185      <%=intl._t("You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address.")%>
    186      <%=intl._t("Correct the address or disable inbound TCP above.")%>
    187 <li class="tidylist"><b><%=intl._t("ERR - SymmetricNAT")%></b> -
    188      <%=intl._t("I2P detected that you are firewalled by a Symmetric NAT.")%>
    189      <%=intl._t("I2P does not work well behind this type of firewall. You will probably not be able to accept inbound connections, which will limit your participation in the network.")%>
    190 <li class="tidylist"><b><%=intl._t("ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart")%></b> -
    191      <%=intl._t("I2P was unable to bind to the configured port noted on the advanced network configuration page .")%>
    192      <%=intl._t("Check to see if another program is using the configured port. If so, stop that program or configure I2P to use a different port.")%>
    193      <%=intl._t("This may be a transient error, if the other program is no longer using the port.")%>
    194      <%=intl._t("However, a restart is always required after this error.")%>
    195 <li class="tidylist"><b><%=intl._t("ERR - UDP Disabled and Inbound TCP host/port not set")%></b> -
    196      <%=intl._t("You have not configured inbound TCP with a hostname and port above, however you have disabled UDP.")%>
    197      <%=intl._t("Therefore your router cannot accept inbound connections.")%>
    198      <%=intl._t("Please configure a TCP host and port above or enable UDP.")%>
    199 <li class="tidylist"><b><%=intl._t("ERR - Client Manager I2CP Error - check logs")%></b> -
    200      <%=intl._t("This is usually due to a port 7654 conflict. Check the logs to verify.")%>
    201      <%=intl._t("Do you have another I2P instance running? Stop the conflicting program and restart I2P.")%>
    202  </ul><hr>
    203174<% /********
    204175      <!--
     
    222193-->
    223194*********/ %>
    224 </div></form></div></div></body></html>
     195</form></div></body></html>
  • apps/routerconsole/jsp/configpeer.jsp

    r2fe1f97 r6bfd39d5  
    2424        peer = net.i2p.data.DataHelper.stripHTML(request.getParameter("peer"));  // XSS
    2525 %>
    26  <div class="configure">
    2726 <form action="configpeer" method="POST">
    2827 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
     
    3029 <a name="unsh"> </a>
    3130 <a name="bonus"> </a>
    32  <h2><%=intl._t("Manual Peer Controls")%></h2>
    33  <div class="mediumtags"><p><%=intl._t("Router Hash")%>:
    34 <input type="text" size="55" name="peer" value="<%=peer%>" /></p></div>
    35  <h3><%=intl._t("Manually Ban / Unban a Peer")%></h3>
    36  <p><%=intl._t("Banning will prevent the participation of this peer in tunnels you create.")%></p>
    37       <div class="formaction">
     31 <h3 class="tabletitle"><%=intl._t("Manual Peer Controls")%></h3>
     32 <table class="configtable">
     33   <tr><td colspan="2"><%=intl._t("Router Hash")%>:<input type="text" size="55" name="peer" value="<%=peer%>" /></td></tr>
     34   <tr><th colspan="2"><%=intl._t("Manually Ban / Unban a Peer")%></th></tr>
     35   <tr><td class="infohelp" colspan="2"><%=intl._t("Banning will prevent the participation of this peer in tunnels you create.")%></td></tr>
     36   <tr>
     37     <td class="optionsave" colspan="2">
    3838        <input type="submit" name="action" class="delete" value="<%=intl._t("Ban peer until restart")%>" />
    3939        <input type="submit" name="action" class="accept" value="<%=intl._t("Unban peer")%>" />
     
    4141        <!-- <font color="blue">&lt;---- click to verify action</font> -->
    4242        <% } %>
    43       </div>
     43     </td>
     44   </tr>
    4445
    45  <h3><%=intl._t("Adjust Profile Bonuses")%></h3>
    46  <p><%=intl._t("Bonuses may be positive or negative, and affect the peer's inclusion in Fast and High Capacity tiers. Fast peers are used for client tunnels, and High Capacity peers are used for some exploratory tunnels. Current bonuses are displayed on the")%> <a href="profiles"><%=intl._t("profiles page")%></a>.</p>
     46   <tr><th colspan="2"><%=intl._t("Adjust Profile Bonuses")%></th></tr>
     47   <tr>
     48     <td class="infohelp" colspan="2">
     49     <%=intl._t("Bonuses may be positive or negative, and affect the peer's inclusion in Fast and High Capacity tiers. Fast peers are used for client tunnels, and High Capacity peers are used for some exploratory tunnels. Current bonuses are displayed on the")%> <a href="profiles"><%=intl._t("profiles page")%></a>.
     50     </td>
     51   </tr>
     52   <tr>
    4753 <% long speed = 0; long capacity = 0;
    4854    if (! "".equals(peer)) {
     
    5056    }
    5157 %>
    52  <div class="mediumtags"><p><%=intl._t("Speed")%>:
     58     <td><%=intl._t("Speed")%>:
    5359 <input type="text" size="8" name="speed" value="<%=speed%>" />
    5460 <%=intl._t("Capacity")%>:
    5561 <input type="text" size="8" name="capacity" value="<%=capacity%>" />
    56  <input type="submit" name="action" class="add" value="<%=intl._t("Adjust peer bonuses")%>" /></p></div>
     62     </td>
     63     <td class="optionsave">
     64       <input type="submit" name="action" class="add" value="<%=intl._t("Adjust peer bonuses")%>" />
     65     </td>
     66   </tr>
     67 </table>
    5768 </form>
    58  <a name="banlist"> </a><h2><%=intl._t("Banned Peers")%></h2>
     69 <a name="banlist"> </a><h3 id="bannedpeers"><%=intl._t("Banned Peers")%></h3>
    5970 <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
    6071 <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    6172 <% profilesHelper.storeWriter(out); %>
    6273 <jsp:getProperty name="profilesHelper" property="banlistSummary" />
    63  <div class="wideload"><h2><%=intl._t("Banned IPs")%></h2>
     74 <h3 class="tabletitle"><%=intl._t("Banned IPs")%></h3>
    6475 <jsp:getProperty name="peerhelper" property="blocklistSummary" />
    6576
    66 </div><hr></div></div></body></html>
     77 </div></body></html>
  • apps/routerconsole/jsp/configreseed.jsp

    r2fe1f97 r6bfd39d5  
    2121<%@include file="formhandler.jsi" %>
    2222
    23 <p><%=intl._t("Reseeding is the bootstrapping process used to find other routers when you first install I2P, or when your router has too few router references remaining.")%>
     23<p class="infohelp">
     24<%=intl._t("Reseeding is the bootstrapping process used to find other routers when you first install I2P, or when your router has too few router references remaining.")%>
    2425<%=intl._t("If reseeding has failed, you should first check your network connection.")%>
    2526<%=intl._t("See {0} for instructions on reseeding manually.", "<a href=\"https://geti2p.net/faq#manual_reseed\">" + intl._t("the FAQ") + "</a>")%>
    2627</p>
    27 
    28 <div class="configure"><form action="" method="POST">
     28<h3 class="tabletitle"><%=intl._t("Manual Reseed")%></h3>
     29<table id="manualreseed" class="configtable">
     30 <tr>
     31  <td class="infohelp" colspan="2">
     32<%=intl._t("The su3 format is preferred, as it will be verified as signed by a trusted source.")%>&nbsp;
     33<%=intl._t("The zip format is unsigned; use a zip file only from a source that you trust.")%>
     34  </td>
     35 <tr>
     36  <th colspan="2"><%=intl._t("Reseed from URL")%></th>
     37 </tr>
     38 <tr>
     39<form action="" method="POST">
    2940<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    30 <h3><%=intl._t("Manual Reseed from URL")%></h3>
    31 <p><%=intl._t("Enter zip or su3 URL")%> :
    32 <input name="url" type="text" size="60" value="" />
    33 <br><%=intl._t("The su3 format is preferred, as it will be verified as signed by a trusted source.")%>
    34 <%=intl._t("The zip format is unsigned; use a zip file only from a source that you trust.")%>
    35 </p>
    36 <div class="formaction">
     41  <td>
     42<%=intl._t("Enter zip or su3 URL")%>:<input name="url" type="text" size="60" value="" />
     43  </td>
     44  <td class="optionsave">
    3745<input type="submit" name="action" class="download" value="<%=intl._t("Reseed from URL")%>" />
    38 </div></form></div>
    39 
    40 <div class="configure">
     46  </td>
     47</form>
     48 </tr>
     49 <tr>
     50  <th colspan="2"><%=intl._t("Reseed from File")%></th>
     51 </tr>
     52 <tr>
    4153<form action="" method="POST" enctype="multipart/form-data" accept-charset="UTF-8">
    4254<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    43 <h3><%=intl._t("Manual Reseed from File")%></h3>
    44 <p><%=intl._t("Select zip or su3 file")%> :
     55  <td>
     56<%=intl._t("Select zip or su3 file")%>:
    4557<input name="file" type="file" value="" />
    46 <br><%=intl._t("The su3 format is preferred, as it will be verified as signed by a trusted source.")%>
    47 <%=intl._t("The zip format is unsigned; use a zip file only from a source that you trust.")%>
    48 </p>
    49 <div class="formaction">
     58  </td>
     59  <td class="optionsave">
    5060<input type="submit" name="action" class="download" value="<%=intl._t("Reseed from file")%>" />
    51 </div></form></div>
     61  </td>
     62</form>
     63 </tr>
     64 <tr>
     65  <th colspan="2">
     66<%=intl._t("Create Reseed File")%>
     67  </th>
     68 </tr>
     69 <tr>
     70  <td class="infohelp" colspan="2">
     71<%=intl._t("Create a new reseed zip file you may share for others to reseed manually.")%>&nbsp;
     72<%=intl._t("This file will never contain your own router's identity or IP.")%>
     73  </td>
     74 </tr>
     75 <tr>
     76  <td class="optionsave" colspan="2">
     77<form action="/createreseed" method="GET">
     78<input type="submit" name="action" class="go" value="<%=intl._t("Create reseed file")%>" />
     79</form>
     80  </td>
     81 </tr>
     82</table>
    5283
    53 <div class="configure">
    54 <form action="/createreseed" method="GET">
    55 <h3><%=intl._t("Create Reseed File")%></h3>
    56 <p><%=intl._t("Create a new reseed zip file you may share for others to reseed manually.")%>
    57 <%=intl._t("This file will never contain your own router's identity or IP.")%>
    58 </p>
    59 <div class="formaction">
    60 <input type="submit" name="action" class="go" value="<%=intl._t("Create reseed file")%>" />
    61 </div></form></div>
    62 
    63 <div class="configure">
    6484<form action="" method="POST">
    6585<input type="hidden" name="nonce" value="<%=pageNonce%>" >
    66 <h3><%=intl._t("Reseeding Configuration")%></h3>
    67 <p><b><%=intl._t("The default settings will work for most people.")%></b>
     86<h3 class="tabletitle"><%=intl._t("Reseeding Configuration")%></h3>
     87<table id="reseedconfig" class="configtable" border="0" cellspacing="5">
     88 <tr>
     89  <td class="infohelp" colspan="2">
     90<b><%=intl._t("The default settings will work for most people.")%></b>&nbsp;
    6891<%=intl._t("Change these only if HTTPS is blocked by a restrictive firewall and reseed has failed.")%>
    69 </p>
    70 <div class="wideload">
    71 <table border="0" cellspacing="5">
     92  </td>
     93 </tr>
    7294<tr><td class="mediumtags" align="right"><b><%=intl._t("Reseed URL Selection")%>:</b></td>
    7395<td><input type="radio" class="optbox" name="mode" value="0" <%=reseedHelper.modeChecked(0) %> >
     
    79101<tr><td class="mediumtags" align="right"><b><%=intl._t("Reseed URLs")%>:</b></td>
    80102<td><textarea wrap="off" name="reseedURL" cols="60" rows="7" spellcheck="false"><jsp:getProperty name="reseedHelper" property="reseedURL" /></textarea>
    81 <div class="formaction"><input type="submit" name="action" class="reload" value="<%=intl._t("Reset URL list")%>" /></div>
     103<div class="formaction" id="resetreseed"><input type="submit" name="action" class="reload" value="<%=intl._t("Reset URL list")%>" /></div>
    82104</td></tr>
    83105
     
    112134-->
    113135
    114 </table></div>
    115 <div class="formaction">
     136 <tr>
     137  <td class="optionsave" colspan="2">
    116138<input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
    117139<input type="submit" name="action" class="download" value="<%=intl._t("Save changes and reseed now")%>" />
    118140<input type="submit" name="action" class="accept" value="<%=intl._t("Save changes")%>" />
    119 </div></form></div></div></body></html>
     141  </td>
     142 </tr>
     143</table>
     144</form></div></body></html>
  • apps/routerconsole/jsp/configservice.jsp

    r2fe1f97 r6bfd39d5  
    1717 <jsp:useBean class="net.i2p.router.web.ConfigServiceHandler" id="formhandler" scope="request" />
    1818<%@include file="formhandler.jsi" %>
    19  <div class="configure">
    2019 <form action="" method="POST">
    2120 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    22  <h3><%=intl._t("Shutdown the router")%></h3>
    23  <p><%=intl._t("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%>
     21 <h3 class="ptitle" id="shutdownrouter"><%=intl._t("Shutdown the router")%></h3>
     22 <p class="infohelp">
     23    <%=intl._t("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%>
    2424    <%=intl._t("If you need to kill the router immediately, that option is available as well.")%></p>
    25   <hr><div class="formaction">
     25  <hr><div class="formaction" id="shutdown">
    2626 <input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown gracefully")%>" >
    2727 <input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown immediately")%>" >
     
    3131 </div>
    3232 <% if (System.getProperty("wrapper.version") != null) { %>
    33  <p><%=intl._t("If you want the router to restart itself after shutting down, you can choose one of the following.")%>
     33 <h3 class="ptitle" id="restartrouter"><%=intl._t("Restart the router")%></h3>
     34 <p class="infohelp">
     35    <%=intl._t("If you want the router to restart itself after shutting down, you can choose one of the following.")%>
    3436    <%=intl._t("This is useful in some situations - for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on.")%>
    3537    <%=intl._t("A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately.")%>
    3638    <%=intl._t("After tearing down the router, it will wait 1 minute before starting back up again.")%></p>
    37  <hr><div class="formaction">
     39 <hr><div class="formaction" id="restart">
    3840 <input type="submit" class="reload" name="action" value="<%=intl._t("Graceful restart")%>" >
    3941 <input type="submit" class="reload" name="action" value="<%=intl._t("Hard restart")%>" >
     
    4143
    4244 <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
    43  <h3><%=intl._t("Systray integration")%></h3>
    44  <p><%=intl._t("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%>
     45 <h3 class="ptitle" id="systray"><%=intl._t("Systray integration")%></h3>
     46 <p class="infohelp">
     47    <%=intl._t("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%>
    4548    <%=intl._t("(later on, I2P client applications will be able to integrate their own functionality into the system tray as well).")%>
    4649    <%=intl._t("If you are on windows, you can either enable or disable that icon here.")%></p>
    47  <hr><div class="formaction">
     50 <hr><div class="formaction" id="systray">
    4851 <input type="submit" name="action" value="<%=intl._t("Show systray icon")%>" >
    4952 <input type="submit" name="action" value="<%=intl._t("Hide systray icon")%>" >
    5053 </div>
    51  <h3><%=intl._t("Run on startup")%></h3>
    52  <p><%=intl._t("You can control whether I2P is run on startup or not by selecting one of the following options - I2P will install (or remove) a service accordingly.")%>
     54 <h3 class="ptitle" id="runonstartup"><%=intl._t("Run on startup")%></h3>
     55 <p class="infohelp">
     56    <%=intl._t("You can control whether I2P is run on startup or not by selecting one of the following options - I2P will install (or remove) a service accordingly.")%>
    5357    <%=intl._t("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._t("or")%>
    5458 <code>uninstall_i2p_service_winnt.bat</code>).</p>
    55  <hr><div class="formaction">
     59 <hr><div class="formaction" id="runonstart">
    5660 <input type="submit" name="action" value="<%=intl._t("Run I2P on startup")%>" >
    57 <input type="submit" name="action" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
    58  <p><b><%=intl._t("Note")%>:</b> <%=intl._t("If you are running I2P as service right now, removing it will shut down your router immediately.")%>
     61 <input type="submit" name="action" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
     62 <p class="infohelp" id="winfoservice"><b>
     63    <%=intl._t("Note")%>:</b> <%=intl._t("If you are running I2P as service right now, removing it will shut down your router immediately.")%>
    5964    <%=intl._t("You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat.")%></p>
    6065 <% } %>
    6166
    62  <h3><%=intl._t("Debugging")%></h3>
    63  <p><a href="/jobs"><%=intl._t("View the job queue")%></a>
     67 <h3 class="ptitle" id="servicedebug"><%=intl._t("Debugging")%></h3>
    6468<% if (System.getProperty("wrapper.version") != null) { %>
    65  <p><%=intl._t("At times, it may be helpful to debug I2P by getting a thread dump. To do so, please select the following option and review the thread dumped to <a href=\"logs.jsp#servicelogs\">wrapper.log</a>.")%></p>
    66   <hr>
     69 <p class="infohelp">
     70    <%=intl._t("At times, it may be helpful to debug I2P by getting a thread dump. To do so, please select the following option and review the thread dumped to <a href=\"logs.jsp#servicelogs\">wrapper.log</a>.")%></p>
     71 <p><a href="/jobs">
     72    <%=intl._t("View the job queue")%></a>
     73 <hr>
    6774<% } %>
    68  <div class="formaction">
     75 <div class="formaction" id="dumpthreads">
    6976 <input type="submit" class="reload" name="action" value="<%=intl._t("Force GC")%>" >
    7077<% if (System.getProperty("wrapper.version") != null) { %>
     
    7380 </div>
    7481
    75  <h3><%=intl._t("Launch browser on router startup?")%></h3>
    76  <p><%=intl._t("I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at")%>
     82 <h3 class="ptitle" id="browseronstart"><%=intl._t("Launch browser on router startup?")%></h3>
     83 <p class="infohelp">
     84    <%=intl._t("I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at")%>
    7785 <a href="http://127.0.0.1:7657/">http://127.0.0.1:7657/</a> .</p>
    78  <hr><div class="formaction">
     86 <hr><div class="formaction" id="browserstart">
    7987 <input type="submit" class="check" name="action" value="<%=intl._t("View console on startup")%>" >
    8088 <input type="submit" class="delete" name="action" value="<%=intl._t("Do not view console on startup")%>" >
    81 </div></form></div></div></body></html>
     89</div></form></div></body></html>
  • apps/routerconsole/jsp/configsidebar.jsp

    r2fe1f97 r6bfd39d5  
    3030<jsp:setProperty name="summaryhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    3131
    32 <h3><%=intl._t("Refresh Interval")%></h3>
     32<h3 class="tabletitle"><%=intl._t("Refresh Interval")%></h3>
     33<table class="configtable">
     34 <tr>
    3335<form action="" method="POST">
     36  <td>
    3437 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    3538 <input type="hidden" name="group" value="0">
    3639 <input type="text" name="refreshInterval" value="<jsp:getProperty name="intl" property="refresh" />" >
    3740 <%=intl._t("seconds")%>
     41  </td>
     42  <td class="optionsave">
    3843 <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
     44  </td>
    3945</form>
     46 </tr>
     47</table>
    4048
    41 <h3><%=intl._t("Customize Summary Bar")%></h3>
     49<h3 class="tabletitle"><%=intl._t("Customize Summary Bar")%></h3>
    4250<form action="" method="POST">
    4351 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    4452 <input type="hidden" name="group" value="2">
    4553 <jsp:getProperty name="summaryhelper" property="configTable" />
    46  <div class="formaction">
     54 <div class="formaction" id="sidebardefaults">
    4755  <input type="submit" class="reload" name="action" value="<%=intl._t("Restore full default")%>" >
    4856  <input type="submit" class="reload" name="action" value="<%=intl._t("Restore minimal default")%>" >
  • apps/routerconsole/jsp/configstats.jsp

    r2fe1f97 r6bfd39d5  
    7474 <input type="hidden" name="action" value="foo" >
    7575 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    76  <h3><%=intl._t("Configure I2P Stat Collection")%></h3>
    77  <p><%=intl._t("Enable full stats?")%>
     76 <h3 class="ptitle"><%=intl._t("Configure I2P Stat Collection")%></h3>
     77 <p id="enablefullstats"><b><%=intl._t("Enable full stats?")%></b>
    7878 <input type="checkbox" class="optbox" name="isFull" value="true" <%
    7979 if (statshelper.getIsFull()) { %>checked="checked" <% } %> >
     
    9191  }  // shouldShowLog
    9292
    93 %><%=intl._t("Filter")%>: (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._t("toggle all")%></a>)<br></p>
     93%><b><%=intl._t("Filter")%>:</b> (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._t("toggle all")%></a>)<br></p>
    9494 <div class="wideload">
    95  <table>
     95 <table id="configstats">
    9696 <% while (statshelper.hasMoreStats()) {
    9797      while (statshelper.groupRequired()) { %>
    98  <tr class="tablefooter">
    99      <td align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
     98 <tr>
     99     <th align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
    100100     <b><%=intl._t(statshelper.getCurrentGroupName())%></b>
    101101     (<a href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._t("toggle all")%></a>)
    102      </td></tr>
     102     </th></tr>
    103103 <tr class="tablefooter">
    104104<%
     
    132132       <input type="checkbox" class="optbox <%=statshelper.getCurrentGroupName()%>" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <%
    133133       if (statshelper.getCurrentIsGraphed()) { %>checked="checked" <% } %> ><% } %></td>
    134      <td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br>
     134     <td align="left"><b><%=statshelper.getCurrentStatName()%>:</b>&nbsp;
    135135     <%=statshelper.getCurrentStatDescription()%></td></tr><%
    136136    } // end iterating over all stats
     
    146146  }  // shouldShowLog
    147147
    148 %>   <tr class="tablefooter"><td colspan="3" align="right">
     148%>   <tr class="tablefooter"><td colspan="3" align="right" class="optionsave">
    149149<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    150150<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
  • apps/routerconsole/jsp/configtunnels.jsp

    r2fe1f97 r6bfd39d5  
    1919 <jsp:useBean class="net.i2p.router.web.ConfigTunnelsHandler" id="formhandler" scope="request" />
    2020<%@include file="formhandler.jsi" %>
    21  <div class="configure"><p>
    22  <%=intl._t("NOTE")%>:
     21 <p id="tunnelconfig" class="infowarn">
    2322 <%=intl._t("The default settings work for most people.")%>
    2423 <%=intl._t("There is a fundamental tradeoff between anonymity and performance.")%>
     
    2625 <%=intl._t("High CPU and/or high outbound bandwidth usage may result.")%>
    2726 <%=intl._t("Change these settings with care, and adjust them if you have problems.")%>
    28 <div class="wideload">
     27 </p>
     28 <p class="infohelp">
     29 <%=intl._t("Exploratory tunnel setting changes are stored in the router.config file.")%>
     30 <%=intl._t("Client tunnel changes are temporary and are not saved.")%>
     31 <%=intl._t("To make permanent client tunnel changes see the")%>&nbsp;<a href="/i2ptunnelmgr"><%=intl._t("i2ptunnel page")%></a>.
     32 </p>
    2933<form action="" method="POST">
    3034 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    3135 <input type="hidden" name="action" value="blah" >
    3236 <jsp:getProperty name="tunnelshelper" property="form" />
    33  <%=intl._t("Note")%>: <%=intl._t("Exploratory tunnel setting changes are stored in the router.config file.")%>
    34  <%=intl._t("Client tunnel changes are temporary and are not saved.")%>
    35 <%=intl._t("To make permanent client tunnel changes see the")%> <a href="i2ptunnel/index.jsp"><%=intl._t("i2ptunnel page")%></a>.
    36  <hr><div class="formaction">
     37 <hr><div class="formaction" id="tunnelconfigsave">
    3738<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    3839<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
    39 </div>
    40  </form></div></div></div></body></html>
     40</div></form></div></body></html>
  • apps/routerconsole/jsp/configui.jsp

    r2fe1f97 r6bfd39d5  
    3030 <jsp:useBean class="net.i2p.router.web.ConfigUIHandler" id="formhandler" scope="request" />
    3131<%@include file="formhandler.jsi" %>
    32 <div class="configure"><div class="topshimten"><h3><%=uihelper._t("Router Console Theme")%></h3></div>
     32<h3 id="themeheading"><%=uihelper._t("Router Console Theme")%></h3>
    3333 <form action="" method="POST">
    3434 <input type="hidden" name="consoleNonce" value="<%=net.i2p.router.web.CSSHelper.getNonce()%>" >
    3535 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    3636 <input type="hidden" name="action" value="blah" >
     37<div id ="themesettings">
    3738<%
    3839 String userAgent = request.getHeader("User-Agent");
     
    4647<% } %>
    4748 <jsp:getProperty name="uihelper" property="forceMobileConsole" />
    48 <h3><%=uihelper._t("Router Console Language")%></h3>
    49 <jsp:getProperty name="uihelper" property="langSettings" />
    50 <p><%=uihelper._t("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%>
    51 </p><hr><div class="formaction">
     49<hr><div class="formaction" id="themeui">
    5250<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    5351<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Apply")%>" >
    54 </div></form>
     52</div></div></form>
     53<h3 id="langheading"><%=uihelper._t("Router Console Language")%></h3>
     54 <form action="" method="POST">
     55 <input type="hidden" name="consoleNonce" value="<%=net.i2p.router.web.CSSHelper.getNonce()%>" >
     56 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
     57 <input type="hidden" name="action" value="blah" >
     58<div id="langsettings">
     59<jsp:getProperty name="uihelper" property="langSettings" />
     60<p id="helptranslate"><%=uihelper._t("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%>
     61</p><hr><div class="formaction" id="langui">
     62<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
     63<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Apply")%>" >
     64</div></div></form>
    5565
    56 <h3><%=uihelper._t("Router Console Password")%></h3>
     66<h3 id="passwordheading"><%=uihelper._t("Router Console Password")%></h3>
    5767<form action="" method="POST">
    5868 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    5969 <jsp:getProperty name="uihelper" property="passwordForm" />
    60  <div class="formaction">
     70 <div class="formaction" id="consolepass">
    6171  <input type="submit" name="action" class="default" value="<%=intl._t("Add user")%>" >
    6272  <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
     
    6474  <input type="submit" name="action" class="add" value="<%=intl._t("Add user")%>" >
    6575 </div>
    66 </form></div>
     76</form>
    6777</div></body></html>
  • apps/routerconsole/jsp/configupdate.jsp

    r2fe1f97 r6bfd39d5  
    2222<div class="messages">
    2323 <jsp:getProperty name="updatehelper" property="newsStatus" /></div>
    24 <div class="configure">
    2524 <form action="" method="POST">
    2625 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
     
    2827 <input type="submit" name="action" value="" style="display:none" >
    2928    <% if (updatehelper.canInstall()) { %>
    30       <h3><%=intl._t("Check for I2P and news updates")%></h3>
    31       <div class="wideload"><table border="0" cellspacing="5">
    32         <tr><td colspan="2"></tr>
    33         <tr><td class="mediumtags" align="right"><b><%=intl._t("News &amp; I2P Updates")%>:</b></td>
     29      <h3 class="tabletitle"><%=intl._t("Check for I2P and news updates")%></h3>
     30      <table id="i2pupdates" class="configtable" border="0" cellspacing="5">
     31      <tr><td class="mediumtags" align="right"><b><%=intl._t("News &amp; I2P Updates")%>:</b></td>
    3432     <% } else { %>
    3533      <h3><%=intl._t("Check for news updates")%></h3>
    36       <div class="wideload"><table border="0" cellspacing="5">
     34      <table id="i2pupdates" class="configtable" border="0" cellspacing="5">
    3735        <tr><td colspan="2"></tr>
    3836        <tr><td class="mediumtags" align="right"><b><%=intl._t("News Updates")%>:</b></td>
     
    4038          <td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._t("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" class="check" value="<%=intl._t("Check for updates")%>" />
    4139            <% } %></td></tr>
    42         <tr><td colspan="2"><br></td></tr>
    4340        <tr><td class="mediumtags" align="right"><b><%=intl._t("News URL")%>:</b></td>
    4441          <td><input type="text" size="60" name="newsURL" <% if (!updatehelper.isAdvanced()) { %>readonly="readonly"<% } %> value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td>
     
    7774        <tr><td class="mediumtags" align="center" colspan="2"><b><%=intl._t("Updates will be dispatched via your package manager.")%></b></td></tr>
    7875    <% }   // if canInstall %>
    79         <tr class="tablefooter"><td colspan="2">
    80         <div class="formaction">
     76        <tr class="tablefooter"><td colspan="2" class="optionsave">
    8177            <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    8278            <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
    83         </div></td></tr></table></div></form></div></div></body></html>
     79        </td></tr></table></form></div></body></html>
  • apps/routerconsole/jsp/dns.jsp

    r2fe1f97 r6bfd39d5  
    3232
    3333<h1><%=intl._t("I2P Addressbook")%> <span class="newtab"><a href="/susidns/index" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
    34 <div class="main" id="main">
     34<div class="main" id="dns">
    3535<iframe src="/susidns/index" width="100%" height="100%" frameborder="0" border="0" name="susidnsframe" id="susidnsframe" onload="setupFrame()" allowtransparency="true">
    3636<%=intl._t("Your browser does not support iFrames.")%>
  • apps/routerconsole/jsp/events.jsp

    r2fe1f97 r6bfd39d5  
    2020<%@include file="summary.jsi" %>
    2121<h1><%=intl._t("I2P Event Log")%></h1>
    22 <div class="main" id="main">
     22<div class="main" id="events">
    2323 <div class="eventspanel">
    2424 <div class="widepanel">
  • apps/routerconsole/jsp/graphs.jsp

    r2fe1f97 r6bfd39d5  
    2525<%@include file="summary.jsi" %>
    2626<h1><%=intl._t("I2P Performance Graphs")%></h1>
    27 <div class="main" id="main">
    28  <div class="graphspanel">
     27<div class="main" id="graphs">
    2928 <div class="widepanel">
    3029 <jsp:getProperty name="graphHelper" property="allMessages" />
     30 <div class="graphspanel">
    3131 <jsp:getProperty name="graphHelper" property="images" />
     32 </div>
    3233 <jsp:getProperty name="graphHelper" property="form" />
    33 </div></div></div></body></html>
     34</div></div></body></html>
  • apps/routerconsole/jsp/help-sidebar.jsi

    r2fe1f97 r6bfd39d5  
    1818<li class="tidylist"><b>Reachability:</b>
    1919The router's view of whether it can be contacted by other routers.
    20 Further information is on the <a href="confignet#help">configuration page</a>.
     20See <a href="#confignet">below</a> for more information.
    2121</li></ul><h3>Peers</h3><ul>
    2222<li class="tidylist"><b>Active:</b>
     
    4848shared bandwidth, and locally-generated traffic.
    4949I2P does not require a router to know every other router.</li>
    50 </ul><h3>Bandwidth in/out</h3><div align="justify">
    51 Should be self-explanatory. All values are in bytes per second, not bits per second.
    52 Change your bandwidth limits on the <a href="confignet#help">configuration page</a>.
    53 Bandwidth is <a href="graphs.jsp">graphed</a> by default.</div>
     50</ul><h3>Bandwidth in/out</h3>
     51<p>Should be self-explanatory. All values are in bytes per second, not bits per second.
     52Change your bandwidth limits on the <a href="config">configuration page</a>.
     53Bandwidth is <a href="graphs.jsp">graphed</a> by default.</p>
     54<h3>Local destinations</h3>
     55<p>The local applications connecting through your router.
     56These may be clients started through <a href="i2ptunnel/index.jsp">I2PTunnel</a>
     57or external programs connecting through SAM, BOB, or directly to I2CP.</p>
    5458
    55 <h3>Local destinations</h3><div align="justify">
    56 The local applications connecting through your router.
    57 These may be clients started through <a href="i2ptunnel/index.jsp">I2PTunnel</a>
    58 or external programs connecting through SAM, BOB, or directly to I2CP.
    59 </div><h3>Tunnels in/out</h3><div align="justify">
    60 The actual tunnels are shown on the <a href="tunnels.jsp">the tunnels page</a>.</div><ul>
    61 <li class="tidylist"><div align="justify"><b>Exploratory:</b>
     59<h3>Tunnels in/out</h3>
     60<p>The actual tunnels are shown on the <a href="tunnels.jsp">the tunnels page</a>.</p>
     61<ul><li class="tidylist"><b>Exploratory:</b>
    6262Tunnels built by your router and used for communication with the floodfill peers,
    63 building new tunnels, and testing existing tunnels.</div></li>
     63building new tunnels, and testing existing tunnels.</p></li>
    6464<li class="tidylist"><b>Client:</b>
    6565Tunnels built by your router for each client's use.</li>
     
    6969shared bandwidth, and amount of locally-generated traffic.
    7070The recommended method for limiting participating tunnels is
    71 to change your share percentage on the <a href="confignet#help">configuration page</a>.
     71to change your share percentage on the <a href="config">configuration page</a>.
    7272You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on
    7373the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.</li>
     
    7878</ul>
    7979
    80 <h3>Congestion</h3><div align="justify">
    81 Some basic indications of router overload:</div><ul>
     80<h3>Congestion</h3>
     81<p>Some basic indications of router overload:</p><ul>
    8282<li class="tidylist"><b>Job lag:</b>
    8383How long jobs are waiting before execution. The job queue is listed on the <a href="jobs.jsp">jobs page</a>.
  • apps/routerconsole/jsp/help.jsi

    r2fe1f97 r6bfd39d5  
     1<h2>Further Assistance</h2>
    12If you'd like to help improve or translate the documentation, or
    23help with other aspects of the project, please see the documentation for
    34<a href="http://i2p-projekt.i2p/en/get-involved">volunteers.</a>
    4 </p><p>Further assistance is available here:</p>
     5<p>Further assistance is available here:</p>
    56<ul class="links">
    67<li class="tidylist"><a href="http://i2p-projekt.i2p/en/faq">FAQ on i2p-projekt.i2p</a></li>
    7 <li class="tidylist"><a href="http://i2p-projekt.i2p/de/faq">Deutsch FAQ</a>.</li></ul>
    8 <br>You may also try the <a href="http://forum.i2p/">I2P forum</a>
    9 or IRC.
     8<li class="tidylist"><a href="http://i2pwiki.i2p/">I2PWiki</a></li>
     9<li class="tidylist"><a href="http://forum.i2p/">I2P forum</a></li></ul>
     10<p>You may also try <a href="http://zzz.i2p">zzz's developer forum</a>,
     11or <a href="irc://127.0.0.1:6668/i2p">I2P's IRC network</a>.</p>
  • apps/routerconsole/jsp/help.jsp

    r2fe1f97 r6bfd39d5  
    1515<%@include file="summary.jsi" %>
    1616<h1>I2P Router Help &amp; Support</h1>
    17 <div class="main" id="main"><p>
     17<div class="main" id="help"><p>
    1818
    19 <%@include file="help.jsi" %>
    20 <%@include file="help-legal.jsi" %>
    21 <%@include file="help-sidebar.jsi" %>
    22 
     19<div id="volunteer"><%@include file="help.jsi" %></div>
     20<div id="sidebarhelp"><%@include file="help-sidebar.jsi" %></div>
     21<div id="configurationhelp"><%@include file="help-configuration.jsi" %></div>
     22<div id="reachabilityhelp"><%@include file="help-reachability.jsi" %></div>
     23<div id="legal"><%@include file="help-legal.jsi" %></div>
     24<div id="changelog">
    2325<h2>Change Log</h2>
    2426 <jsp:useBean class="net.i2p.router.web.ContentHelper" id="contenthelper" scope="request" />
     
    2830 <jsp:setProperty name="contenthelper" property="startAtBeginning" value="true" />
    2931 <jsp:getProperty name="contenthelper" property="textContent" />
     32<p id="fullhistory"><a href="/history.txt">View the full change log</a></p>
     33</div>
    3034
    31  <p><a href="/history.txt">View the full change log</a>
    32  </p><hr></div></body></html>
     35</div></body></html>
  • apps/routerconsole/jsp/help_ar.jsp

    r2fe1f97 r6bfd39d5  
    1515<%@include file="summary.jsi" %>
    1616<h1>I2P مساعدة لوحة التحكم</h1>
    17 <div class="main" id="main" dir="rtl" lang="ar"><p>
     17<div class="main" id="help" dir="rtl" lang="ar"><p>
    1818اذا رغبت في المساعدة أو ترجمة الوثائق، أو المساعدة في أشياء أخرى، انظر اسفله
    1919
  • apps/routerconsole/jsp/help_fr.jsp

    r2fe1f97 r6bfd39d5  
    1616<!-- Traduction de mars 2011 (magma@mail.i2p) -->
    1717<h1>Aide et assistance du routeur I2P</h1>
    18 <div class="main" id="main"><p>
     18<div class="main" id="help"><p>
    1919Si vous souhaitez améliorer ou traduire la documentation ou d'autres versants du projet, merci de vous reporter à
    2020la page consacrée aux <a href="http://i2p-projekt.i2p/fr/get-involved">volontaires</a>.
  • apps/routerconsole/jsp/help_nl.jsp

    r2fe1f97 r6bfd39d5  
    1515<%@include file="summary.jsi" %>
    1616<h1>I2P Router Help &amp; Support</h1>
    17 <div class="main" id="main"><p>
     17<div class="main" id="help"><p>
    1818Als je wilt helpen om de documentatie te verbeteren of vertalen, of wilt helpen
    1919met andere aspecten van het project, zie dan de documentatie voor
  • apps/routerconsole/jsp/help_ru.jsp

    r2fe1f97 r6bfd39d5  
    1717<h1>Справка маршрутизатора I2P</h1>
    1818
    19 <div class="main" id="main">
     19<div class="main" id="help">
    2020
    2121<p> Если Вы хотите помочь в улучшении или переводе документации, если у Вас есть идеи, как еще помочь проекту, пожалуйста, загляните в раздел документации
  • apps/routerconsole/jsp/i2ptunnelmgr.jsp

    r2fe1f97 r6bfd39d5  
    5454
    5555<h1><%=intl._t("Hidden Services Manager")%> <span class="newtab"><a href="/i2ptunnel/" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
    56 <div class="main" id="main">
     56<div class="main" id="tunnelmgr">
    5757<iframe src="/i2ptunnel/" width="100%" height="100%" frameborder="0" border="0" name="i2ptunnelframe" id="i2ptunnelframe" onload="setupFrame()" allowtransparency="true">
    5858<%=intl._t("Your browser does not support iFrames.")%>
  • apps/routerconsole/jsp/jars.jsp

    r2fe1f97 r6bfd39d5  
    1010</head><body onload="initAjax()">
    1111<%@include file="summary.jsi" %><h1>Jar File Dump</h1>
    12 <div class="main" id="main">
     12<div class="main" id="jardump">
    1313<jsp:useBean class="net.i2p.router.web.FileDumpHelper" id="dumpHelper" scope="request" />
    1414<jsp:setProperty name="dumpHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
  • apps/routerconsole/jsp/jobs.jsp

    r2fe1f97 r6bfd39d5  
    1111</head><body onload="initAjax()">
    1212<%@include file="summary.jsi" %><h1><%=intl._t("I2P Router Job Queue")%></h1>
    13 <div class="main" id="main">
     13<div class="main" id="jobs">
    1414 <jsp:useBean class="net.i2p.router.web.JobQueueHelper" id="jobQueueHelper" scope="request" />
    1515 <jsp:setProperty name="jobQueueHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    1616 <% jobQueueHelper.storeWriter(out); %>
    1717 <jsp:getProperty name="jobQueueHelper" property="jobQueueSummary" />
    18 <hr></div></body></html>
     18</div></body></html>
  • apps/routerconsole/jsp/logs.jsp

    r2fe1f97 r6bfd39d5  
    1111<%@include file="summary.jsi" %>
    1212<h1><%=intl._t("I2P Router Logs")%></h1>
    13 <div class="main" id="main">
    14 <div class="joblog"><h3><%=intl._t("I2P Version and Running Environment")%></h3><a name="version"> </a>
    15 <p>
     13<div class="main" id="logs">
     14
     15<table id="bugreports"><tbody>
     16  <tr><td class="infohelp">
     17<%=intl._t("Please include this information in bug reports")%>.
     18<%=intl._t("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%>
    1619<% /* note to translators - both parameters are URLs */
    1720%><%=intl._t("Please report bugs on {0} or {1}.",
     
    2124<%=intl._t("You may use the username \"guest\" and password \"guest\" if you do not wish to register.")%>
    2225-->
    23 <p><i><%=intl._t("Please include this information in bug reports")%>:</i>
    24  <p>
    25 <b>I2P version:</b> <%=net.i2p.router.RouterVersion.FULL_VERSION%><br>
    26 <b>Java version:</b> <%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%> (<%=System.getProperty("java.runtime.name")%> <%=System.getProperty("java.runtime.version")%>)<br>
     26  </td></tr>
     27</tbody></table>
     28
     29<h3 class="tabletitle"><%=intl._t("I2P Version and Running Environment")%></h3><a name="version"> </a>
     30<table id="enviro"><tbody>
     31<tr><td><b>I2P version:</b></td><td><%=net.i2p.router.RouterVersion.FULL_VERSION%></td></tr>
     32<tr><td><b>Java version:</b></td><td><%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%> (<%=System.getProperty("java.runtime.name")%> <%=System.getProperty("java.runtime.version")%>)</td></tr>
    2733 <jsp:useBean class="net.i2p.router.web.LogsHelper" id="logsHelper" scope="request" />
    2834 <jsp:setProperty name="logsHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    2935<jsp:getProperty name="logsHelper" property="unavailableCrypto" />
    30 <b>Wrapper version:</b> <%=System.getProperty("wrapper.version", "none")%><br>
    31 <b>Server version:</b> <jsp:getProperty name="logsHelper" property="jettyVersion" /><br>
    32 <b>Servlet version:</b> <%=getServletInfo()%><br>
    33 <b>JSTL version:</b> <jsp:getProperty name="logsHelper" property="jstlVersion" /><br>
    34 <b>Platform:</b> <%=System.getProperty("os.name")%> <%=System.getProperty("os.arch")%> <%=System.getProperty("os.version")%><br>
     36<tr><td><b>Wrapper version:</b></td><td><%=System.getProperty("wrapper.version", "none")%></td></tr>
     37<tr><td><b>Server version:</b></td><td><jsp:getProperty name="logsHelper" property="jettyVersion" /></td></tr>
     38<tr><td><b>Servlet version:</b></td><td><%=getServletInfo()%></td></tr>
     39<tr><td><b>JSTL version:</b></td><td><jsp:getProperty name="logsHelper" property="jstlVersion" /></td></tr>
     40<tr><td><b>Platform:</b></td><td><%=System.getProperty("os.name")%> <%=System.getProperty("os.arch")%> <%=System.getProperty("os.version")%></td></tr>
    3541<%
    3642   boolean isX86 = net.i2p.util.SystemVersion.isX86();
    3743   if (isX86) {
    38 %><b>Jcpuid version:</b> <%=freenet.support.CPUInformation.CPUID.getJcpuidVersion()%><br>
     44%><tr><td><b>Jcpuid version:</b></td><td><%=freenet.support.CPUInformation.CPUID.getJcpuidVersion()%></td></tr>
    3945<%
    4046   }
    41 %><b>Processor:</b>
     47%><tr><td><b>Processor:</b></td><td>
    4248<%
    4349   if (isX86) {
     
    4551<%
    4652   }
    47 %> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)<br>
    48 <b>Jbigi:</b> <%=net.i2p.util.NativeBigInteger.loadStatus()%><br>
    49 <b>Jbigi version:</b> <%=net.i2p.util.NativeBigInteger.getJbigiVersion()%><br>
    50 <b>GMP version:</b> <%=net.i2p.util.NativeBigInteger.getLibGMPVersion()%><br>
    51 <b>Encoding:</b> <%=System.getProperty("file.encoding")%><br>
    52 <b>Charset:</b> <%=java.nio.charset.Charset.defaultCharset().name()%><br>
    53 </p>
    54 <p><%=intl._t("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%></p>
    55 <h3><%=intl._t("Critical Logs")%></h3><a name="criticallogs"> </a>
     53%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)</td></tr>
     54<tr><td><b>Jbigi:</b></td><td><%=net.i2p.util.NativeBigInteger.loadStatus()%></td></tr>
     55<tr><td><b>Jbigi version:</b></td><td><%=net.i2p.util.NativeBigInteger.getJbigiVersion()%></td></tr>
     56<tr><td><b>GMP version:</b></td><td><%=net.i2p.util.NativeBigInteger.getLibGMPVersion()%></td></tr>
     57<tr><td><b>Encoding:</b></td><td><%=System.getProperty("file.encoding")%></td></tr>
     58<tr><td><b>Charset:</b></td><td><%=java.nio.charset.Charset.defaultCharset().name()%></td></tr></tbody></table>
     59
     60<h3 class="tabletitle"><%=intl._t("Critical Logs")%></h3><a name="criticallogs"> </a>
     61<table id="criticallogs" class="logtable"><tbody>
     62<tr><td>
    5663 <jsp:getProperty name="logsHelper" property="criticalLogs" />
    57 <h3><%=intl._t("Router Logs")%> (<a href="configlogging"><%=intl._t("configure")%></a>)</h3>
     64</td></tr>
     65</tbody></table>
     66
     67<h3 class="tabletitle"><%=intl._t("Router Logs")%> (<a href="configlogging"><%=intl._t("configure")%></a>)</h3>
     68<table id="routerlogs" class="logtable"><tbody>
     69<tr><td>
    5870 <jsp:getProperty name="logsHelper" property="logs" />
    59 <h3><%=intl._t("Event Logs")%></h3>
     71</td></tr>
     72</tbody></table>
     73
     74<h3 class="tabletitle"><%=intl._t("Event Logs")%></h3>
     75<table id="eventlogs" class="logtable"><tbody>
     76<tr><td>
    6077 <a href="events"><%=intl._t("View event logs")%></a>
    61 <h3><%=intl._t("Service (Wrapper) Logs")%></h3><a name="servicelogs"> </a>
     78</td></tr>
     79</tbody></table>
     80
     81<h3 class="tabletitle"><%=intl._t("Service (Wrapper) Logs")%></h3><a name="servicelogs"> </a>
     82<table id="wrapperlogs" class="logtable"><tbody>
     83<tr><td>
    6284 <jsp:getProperty name="logsHelper" property="serviceLogs" />
    63 </div></div></body></html>
     85</td></tr>
     86</tbody></table>
     87</div></body></html>
  • apps/routerconsole/jsp/netdb.jsp

    r2fe1f97 r6bfd39d5  
    1212<%@include file="summary.jsi" %>
    1313<h1><%=intl._t("I2P Network Database")%></h1>
    14 <div class="main" id="main">
    15  <div class="wideload">
     14<div class="main" id="netdb">
    1615 <jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" />
    1716 <jsp:setProperty name="netdbHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     
    2726 <jsp:setProperty name="netdbHelper" property="country" value="<%=request.getParameter(\"c\")%>" />
    2827 <jsp:getProperty name="netdbHelper" property="netDbSummary" />
    29 </div></div></body></html>
     28</div></body></html>
  • apps/routerconsole/jsp/news.jsp

    r2fe1f97 r6bfd39d5  
    1111<%@include file="summary.jsi" %>
    1212<h1><%=intl._t("Latest News")%></h1>
    13 <div class="main" id="main">
     13<div class="main" id="news">
    1414<jsp:useBean class="net.i2p.router.web.NewsFeedHelper" id="feedHelper" scope="request" />
    1515<jsp:setProperty name="feedHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
  • apps/routerconsole/jsp/oldconsole.jsp

    r2fe1f97 r6bfd39d5  
    1818<% conhelper.storeWriter(out); %>
    1919 <h1>I2P Router &raquo; Old Console</h1>
    20 <div class="main" id="main">
     20<div class="main" id="main"><p id="oldconsole">
    2121 <jsp:getProperty name="conhelper" property="console" />
    22 </div></body></html>
     22</p></div></body></html>
  • apps/routerconsole/jsp/peers.jsp

    r2fe1f97 r6bfd39d5  
    1212<%@include file="summary.jsi" %>
    1313<h1><%=intl._t("I2P Network Peers")%></h1>
    14 <div class="main" id="main"><div class="wideload">
     14<div class="main" id="main">
    1515 <jsp:useBean class="net.i2p.router.web.PeerHelper" id="peerHelper" scope="request" />
    1616 <jsp:setProperty name="peerHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     
    1919 <jsp:setProperty name="peerHelper" property="sort" value="<%=request.getParameter(\"sort\") != null ? request.getParameter(\"sort\") : \"\"%>" />
    2020 <jsp:getProperty name="peerHelper" property="peerSummary" />
    21 </div></div></body></html>
     21</div></body></html>
  • apps/routerconsole/jsp/profiles.jsp

    r2fe1f97 r6bfd39d5  
    2222 <jsp:setProperty name="profilesHelper" property="full" value="<%=request.getParameter(\"f\")%>" />
    2323 <jsp:getProperty name="profilesHelper" property="summary" />
    24 <hr></div></div></body></html>
     24</div></div></body></html>
  • apps/routerconsole/jsp/proof.jsp

    r2fe1f97 r6bfd39d5  
    1010</head><body onload="initAjax()">
    1111<%@include file="summary.jsi" %><h1>Proof of Ownership</h1>
    12 <div class="main" id="main">
     12<div class="main" id="main"><p id="proof">
    1313<jsp:useBean class="net.i2p.router.web.ProofHelper" id="proofHelper" scope="request" />
    1414<jsp:setProperty name="proofHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    1515<textarea cols="70" rows="15" wrap="off" readonly="readonly" spellcheck="false"><jsp:getProperty name="proofHelper" property="proof" /></textarea>
    16 </div></body></html>
     16</p></div></body></html>
  • apps/routerconsole/jsp/stats.jsp

    r2fe1f97 r6bfd39d5  
    1616<jsp:setProperty name="oldhelper" property="full" value="<%=request.getParameter(\"f\")%>" />
    1717 <h1><%=intl._t("I2P Router Statistics")%></h1>
    18 <div class="main" id="main">
     18<div class="main" id="stats">
    1919 <jsp:getProperty name="oldhelper" property="stats" />
    20 <hr></div></body></html>
     20</div></body></html>
  • apps/routerconsole/jsp/viewprofile.jsp

    r2fe1f97 r6bfd39d5  
    2626<% stathelper.storeWriter(out); %>
    2727<h2><%=intl._t("Profile for peer {0}", peerB64)%></h2>
    28 <pre>
     28<table id="viewprofile"><tbody><tr><td><pre>
    2929<jsp:getProperty name="stathelper" property="profile" />
    30 </pre>
     30</pre></td></tr></tbody></table>
    3131<%
    3232    }
  • apps/susidns/src/jsp/config.jsp

    r2fe1f97 r6bfd39d5  
    7373<div id="config">
    7474<input type="hidden" name="serial" value="${cfg.serial}" >
    75 <textarea name="config" rows="10" cols="80">${cfg.config}</textarea>
     75<textarea name="config" rows="10" cols="80" spellcheck="false">${cfg.config}</textarea>
    7676</div>
    7777<div id="buttons">
  • apps/susimail/src/src/i2p/susi/webmail/Mail.java

    r2fe1f97 r6bfd39d5  
    320320                                                        else if (lt < 0 && shortSender.contains("@"))
    321321                                                                shortSender = '<' + shortSender + '>';  // add missing <> (but thunderbird doesn't...)
    322                                                         boolean trim = shortSender.length() > 40;
     322                                                        boolean trim = shortSender.length() > 25;
    323323                                                        if (trim)
    324                                                                 shortSender = shortSender.substring( 0, 37 ).trim();
     324                                                                shortSender = shortSender.substring( 0, 22 ).trim();
    325325                                                        shortSender = html.encode( shortSender );
    326326                                                        if (trim)
     
    345345                                                        formattedSubject = subject;
    346346                                                        shortSubject = formattedSubject;
    347                                                         boolean trim = formattedSubject.length() > 60;
     347                                                        boolean trim = formattedSubject.length() > 65;
    348348                                                        if (trim)
    349                                                                 shortSubject = formattedSubject.substring( 0, 57 ).trim();
     349                                                                shortSubject = formattedSubject.substring( 0, 62 ).trim();
    350350                                                        shortSubject = html.encode( shortSubject );
    351351                                                        if (trim)
  • apps/susimail/src/src/i2p/susi/webmail/WebMail.java

    r2fe1f97 r6bfd39d5  
    199199        private static final String DEFAULT_THEME = "light";
    200200
    201         private static final String spacer = "&nbsp;&nbsp;&nbsp;";
     201        private static final String spacer = ""; /* this is best done with css */
    202202        private static final String thSpacer = "<th>&nbsp;</th>\n";
    203203       
     
    638638                        if( prepareAttachment ) {
    639639                                if( html ) {
    640                                         out.println( "<hr><p class=\"mailbody\">" );
     640                                        out.println( "<hr><div id=\"attached\"><p class=\"mailbody\">" );
    641641                                        String type = mailPart.type;
    642642                                        if (type != null && type.startsWith("image/")) {
     
    659659                                                         " (" + _t("File is packed into a zipfile for security reasons.") + ')');
    660660                                        }
    661                                         out.println( "</p>" );                                 
     661                                        out.println( "</p></div>" );
    662662                                }
    663663                                else {
     
    17551755
    17561756                                if( sessionObject.error != null && sessionObject.error.length() > 0 ) {
    1757                                         out.println( "<p class=\"error\">" + quoteHTML(sessionObject.error).replace("\n", "<br>") + "</p>" );
     1757                                        out.println( "<div class=\"notifications\"><p class=\"error\">" + quoteHTML(sessionObject.error).replace("\n", "<br>") + "</p></div>" );
    17581758                                }
    17591759                                if( sessionObject.info != null && sessionObject.info.length() > 0 ) {
    1760                                         out.println( "<p class=\"info\"><b>" + quoteHTML(sessionObject.info).replace("\n", "<br>") + "</b></p>" );
     1760                                        out.println( "<div class=\"notifications\"><p class=\"info\"><b>" + quoteHTML(sessionObject.info).replace("\n", "<br>") + "</b></p></div>" );
    17611761                                }
    17621762                                /*
     
    17791779                               
    17801780                                //out.println( "</form><div id=\"footer\"><hr><p class=\"footer\">susimail v0." + version +" " + ( RELEASE ? "release" : "development" ) + " &copy; 2004-2005 <a href=\"mailto:susi23@mail.i2p\">susi</a></div></div></body>\n</html>");                               
    1781                                 out.println( "</form><div class=\"footer\"><hr><p class=\"footer\">susimail &copy; 2004-2005 susi</p></div></div></body>\n</html>");                           
     1781                                out.println( "</form><div class=\"footer\"><p class=\"footer\">susimail &copy; 2004-2005 susi</p></div></div></body>\n</html>");
    17821782                                out.flush();
    17831783                }
     
    21062106                sessionObject.body = null;
    21072107               
    2108                 out.println( "<table cellspacing=\"0\" cellpadding=\"5\">\n" +
     2108                out.println( "<div id=\"composemail\"><table id=\"newmail\" cellspacing=\"0\" cellpadding=\"5\">\n" +
    21092109                                "<tr><td colspan=\"2\" align=\"center\"><hr></td></tr>\n" +
    21102110                                "<tr><td align=\"right\">" + _t("From") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_FROM + "\" value=\"" + quoteHTML(from) + "\" " + ( fixed ? "disabled" : "" ) +"></td></tr>\n" +
     
    21142114                                "<tr><td align=\"right\">" + _t("Bcc to self") + ": </td><td align=\"left\"><input type=\"checkbox\" class=\"optbox\" name=\"" + NEW_BCC_TO_SELF + "\" value=\"1\" " + (sessionObject.bccToSelf ? "checked" : "" ) + "></td></tr>\n" +
    21152115                                "<tr><td align=\"right\">" + _t("Subject") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_SUBJECT + "\" value=\"" + quoteHTML(subject) + "\"></td></tr>\n" +
    2116                                 "<tr><td colspan=\"2\" align=\"center\"><textarea cols=\"" + Config.getProperty( CONFIG_COMPOSER_COLS, 80 )+ "\" rows=\"" + Config.getProperty( CONFIG_COMPOSER_ROWS, 10 )+ "\" name=\"" + NEW_TEXT + "\">" + text + "</textarea>" +
     2116                                "<tr><td></td><td align=\"left\"><textarea cols=\"" + Config.getProperty( CONFIG_COMPOSER_COLS, 80 )+ "\" rows=\"" + Config.getProperty( CONFIG_COMPOSER_ROWS, 10 )+ "\" name=\"" + NEW_TEXT + "\">" + text + "</textarea></td></tr>" +
    21172117                                "<tr class=\"bottombuttons\"><td colspan=\"2\" align=\"center\"><hr></td></tr>\n" +
    2118                                 "<tr class=\"bottombuttons\"><td align=\"right\">" + _t("Add Attachment") + ":</td><td align=\"left\"><input type=\"file\" size=\"50%\" name=\"" + NEW_FILENAME + "\" value=\"\"></td></tr>" +
    2119                                 // TODO disable/hide in JS if no file selected
    2120                                 "<tr class=\"bottombuttons\"><td>&nbsp;</td><td align=\"left\">" + button(NEW_UPLOAD, _t("Add another attachment")) + "</td></tr>");
     2118                                "<tr class=\"bottombuttons\"><td align=\"right\">" + _t("Add Attachment") + ":</td><td id=\"addattach\" align=\"left\"><input type=\"file\" size=\"50%\" name=\"" + NEW_FILENAME + "\" value=\"\">&nbsp;" + button(NEW_UPLOAD, _t("Add another attachment")) + "</td></tr>");
    21212119               
    21222120                if( sessionObject.attachments != null && !sessionObject.attachments.isEmpty() ) {
     
    21292127                                        out.println("<tr><td align=\"right\">&nbsp;</td>");
    21302128                                }
    2131                                 out.println("<td align=\"left\"><input type=\"checkbox\" class=\"optbox\" name=\"check" + attachment.hashCode() + "\" value=\"1\">&nbsp;" + quoteHTML(attachment.getFileName()) + "</td></tr>");
     2129                                out.println("<td id=\"attachedfile\" align=\"left\"><input type=\"checkbox\" class=\"optbox\" name=\"check" + attachment.hashCode() + "\" value=\"1\">&nbsp;" + quoteHTML(attachment.getFileName()) + "</td></tr>");
    21322130                        }
    21332131                        // TODO disable in JS if none selected
    2134                         out.println("<tr class=\"bottombuttons\"><td>&nbsp;</td><td align=\"left\">" +
     2132                        out.println("<tr class=\"bottombuttons\"><td>&nbsp;</td><td align=\"left\" id=\"deleteattached\">" +
    21352133                                    button( DELETE_ATTACHMENT, _t("Delete selected attachments") ) +
    21362134                                    "</td></tr>");
    21372135                }
    2138                 out.println( "</table>" );
     2136                out.println( "</table></div>" );
    21392137        }
    21402138
     
    21502148                String smtp = Config.getProperty( CONFIG_PORTS_SMTP, "" + DEFAULT_SMTPPORT );
    21512149               
    2152                 out.println( "<table cellspacing=\"3\" cellpadding=\"5\">\n" +
     2150                out.println( "<div id=\"dologin\"><h1>" + _t("I2PMail Login") + "</h1><table cellspacing=\"3\" cellpadding=\"5\">\n" +
    21532151                        // current postman hq length limits 16/12, new postman version 32/32
    21542152                        "<tr><td align=\"right\" width=\"30%\">" + _t("User") + "</td><td width=\"40%\" align=\"left\"><input type=\"text\" size=\"32\" name=\"" + USER + "\" value=\"" + "\"> @mail.i2p</td></tr>\n" +
     
    21632161                }
    21642162                out.println(
    2165                         "<tr><td colspan=\"2\">&nbsp;</td></tr>\n" +
    2166                         "<tr><td></td><td align=\"left\">" + button( LOGIN, _t("Login") ) + spacer +
     2163                        "<tr><td colspan=\"2\"><hr></td></tr>\n" +
     2164                        "<tr><td colspan=\"2\" align=\"center\">" + button( LOGIN, _t("Login") ) + spacer +
    21672165                         button(OFFLINE, _t("Read Mail Offline") ) +
    21682166                         //spacer +
     
    21712169                         button(CONFIGURE, _t("Settings")) +
    21722170                        "</td></tr>\n" +
    2173                         "<tr><td colspan=\"2\">&nbsp;</td></tr>\n" +
    2174                         "<tr><td></td><td align=\"left\"><a href=\"http://hq.postman.i2p/?page_id=14\">" + _t("Learn about I2P mail") + "</a></td></tr>\n" +
    2175                         "<tr><td></td><td align=\"left\"><a href=\"http://hq.postman.i2p/?page_id=16\">" + _t("Create Account") + "</a></td></tr>\n" +
    2176                         "</table>");
     2171                        "<tr><td align=\"center\" colspan=\"2\"><hr><a href=\"http://hq.postman.i2p/?page_id=14\">" + _t("Learn about I2P mail") + "</a> | <a href=\"http://hq.postman.i2p/?page_id=16\">" + _t("Create Account") + "</a></td></tr>\n" +
     2172                        "</table></div>");
    21772173        }
    21782174
     
    22662262                }
    22672263                if (i == 0)
    2268                         out.println("<tr><td colspan=\"9\" align=\"center\"><i>" + _t("No messages") + "</i></td></tr>\n</table>");
     2264                        out.println("<tr><td colspan=\"9\" align=\"center\"><div id=\"emptymailbox\"><i>" + _t("No messages") + "</i></div></td></tr>\n</table>");
    22692265                if (i > 0) {
    2270                         out.println( "<tr class=\"bottombuttons\"><td colspan=\"9\"><hr></td></tr>");
     2266                        out.println( "<tr class=\"bottombuttons\"></tr>");
    22712267                        if (sessionObject.folder.getPages() > 1 && i > 30) {
    22722268                                // show the buttons again if page is big
     
    23092305        private static void showPageButtons(PrintWriter out, Folder<?> folder) {
    23102306                out.println(
    2311                         "<br>" +
     2307                        "<table id=\"pagenav\"><tr><td>" +
    23122308                        ( folder.isFirstPage() ?
    23132309                                                button2( FIRSTPAGE, _t("First") ) + "&nbsp;" + button2( PREVPAGE, _t("Previous") ) :
    23142310                                                button( FIRSTPAGE, _t("First") ) + "&nbsp;" + button( PREVPAGE, _t("Previous") ) ) +
    2315                         " &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
     2311                        "</td><td>" +
    23162312                        _t("Page {0} of {1}", folder.getCurrentPage(), folder.getPages()) +
    2317                         "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " +
     2313                        "</td><td>" +
    23182314                        ( folder.isLastPage() ?
    23192315                                                button2( NEXTPAGE, _t("Next") ) + "&nbsp;" + button2( LASTPAGE, _t("Last") ) :
    2320                                                 button( NEXTPAGE, _t("Next") ) + "&nbsp;" + button( LASTPAGE, _t("Last") ) )
     2316                                                button( NEXTPAGE, _t("Next") ) + "&nbsp;" + button( LASTPAGE, _t("Last") ) ) +
     2317                        "</td></tr></table>"
     2318
    23212319                );
    23222320        }
     
    23592357                //      out.println(button( RELOAD, _t("Reload Config") ) + spacer);
    23602358                //out.println(button( LOGOUT, _t("Logout") ) );
     2359                out.println( "<table cellspacing=\"0\" cellpadding=\"5\">\n");
    23612360                if( mail != null ) {
    2362                         out.println( "<table cellspacing=\"0\" cellpadding=\"5\">\n" +
    2363                                         "<tr><td colspan=\"2\" align=\"center\"><hr></td></tr>\n" +
     2361                        out.println(    "<tr><td colspan=\"2\" align=\"center\"><hr></td></tr>\n" +
    23642362                                        "<tr class=\"mailhead\"><td align=\"right\" valign=\"top\">" + _t("From") +
    23652363                                        ":</td><td align=\"left\">" + quoteHTML( mail.sender ) + "</td></tr>\n" +
     
    24002398                        "&nbsp;" +
    24012399                        button( SETPAGESIZE, _t("Set") ) );
    2402                 out.println("<p>");
    24032400                out.println("</div>");
     2401                out.println("<h3 id=\"config\">");
    24042402                out.print(_t("Advanced Configuration"));
    24052403                Properties config = Config.getProperties();
    2406                 out.print(":</p><textarea cols=\"80\" rows=\"" + Math.max(8, config.size() + 2) + "\" spellcheck=\"false\" name=\"" + CONFIG_TEXT + "\">");
     2404                out.print("</h3><textarea cols=\"80\" rows=\"" + Math.max(8, config.size() + 2) + "\" spellcheck=\"false\" name=\"" + CONFIG_TEXT + "\">");
    24072405                for (Map.Entry<Object, Object> e : config.entrySet()) {
    24082406                        out.print(quoteHTML(e.getKey().toString()));
  • installer/resources/readme/readme.html

    r2fe1f97 r6bfd39d5  
    44
    55<li class="tidylist"><b>Network integration</b><br> The first time you start I2P it may take a few minutes to bootstrap (integrate) you into the network and find additional peers to optimize your integration, so please be patient. When I2P starts up, and during normal operation, I2P's tunnel build readiness indicator (immediately above the <i>Local Destinations</i> section in the sidepanel) may tell you that I2P is "Rejecting Tunnels"; this is normal behavior and should be of no cause for concern! Once green stars are indicated next to your <i>Local Destinations</i>, there is a wide variety of things you can do with I2P, and below we introduce you to some of them.</li></ul>
    6  
    7 <h3>Services on I2P</h3>
     6
     7<h3 class="welcome">Services on I2P</h3>
    88<ul class="links">
    99
     
    3333</ul>
    3434
    35 <h3>Anonymous Encrypted Web Hosting on I2P</h3>
     35<h3 class="welcome">Anonymous Encrypted Web Hosting on I2P</h3>
    3636<ul class="links">
    3737
     
    4747   
    4848<a name="eepsites"></a>   
    49     <h3>I2P-Hidden Services of Interest</h3>
     49    <h3 class="welcome">I2P-Hidden Services of Interest</h3>
    5050    <ul class="links">
    5151      <li class="tidylist"><b>Invisible Internet Project (I2P) Official Website</b><br><a href="http://i2p-projekt.i2p" target="_blank">i2p-projekt.i2p</a>: Secure and
  • installer/resources/readme/readme_fr.html

    r2fe1f97 r6bfd39d5  
    1010</li></ul>
    1111
    12 <h3>Les services sur I2P</h3>
     12<h3 class="welcome">Les services sur I2P</h3>
    1313<ul class="links">
    1414
     
    7979</ul>
    8080
    81 <h3>Hébergement web anonyme crypté sur I2P</h3>
     81<h3 class="welcome">Hébergement web anonyme crypté sur I2P</h3>
    8282<ul class="links">
    8383
     
    9595   
    9696<a name="eepsites"></a>   
    97     <h3>Sites I2P intéressants</h3>
     97    <h3 class="welcome">Sites I2P intéressants</h3>
    9898    <ul class="links">
    9999      <li class="tidylist"><b>Le site officiel de l'Invisible Internet Project (I2P)</b><br>
  • installer/resources/readme/readme_nl.html

    r2fe1f97 r6bfd39d5  
    55<li class="tidylist"><b>Netwerk integratie</b><br> De eerste keer dat I2P start duurt het mogelijk enkele minuten om de router te integreren in het netwerk en meerdere peers te vinden om de verbinding te optimaliseren. Als I2P opstart, bij een normale werking, geeft de tunnel gereedheid indicator (direct boven het <i>Lokale bestemmingen</i> gedeelte in het zijpaneel) mogelijk de melding "Tunnels Geweigerd"; dit is normaal en is geen reden voor zorgen. Zodra de <i>Lokale bestemmingen</i> eenmaal aangegeven worden met groene sterren zijn er veel mogelijkheden voor het gebruik van I2P, hieronder worden enkele voorbeelden geïntroduceerd.</li></ul>
    66 
    7 <h3>Diensten op I2P</h3>
     7<h3 class="welcome">Diensten op I2P</h3>
    88<ul class="links">
    99
     
    2424</ul>
    2525
    26 <h3>Anoniem en versleutelde Web Hosting op I2P</h3>
     26<h3 class="welcome">Anoniem en versleutelde Web Hosting op I2P</h3>
    2727<ul class="links">
    2828
     
    3535
    3636<a name="eepsites"></a>   
    37     <h3>I2P-Hosted Sites of Interest</h3>
     37    <h3 class="welcome">I2P-Hosted Sites of Interest</h3>
    3838    <ul class="links">
    3939      <li class="tidylist"><b>Invisible Internet Project (I2P) Officiële Website</b><br><a href="http://i2p-projekt.i2p/nl/" target="_blank">i2p-projekt.i2p</a>: Veilige en 
  • installer/resources/readme/readme_ru.html

    r2fe1f97 r6bfd39d5  
    44<li class="tidylist"><b>Сетевая интеграция</b><br> Когда вы впервые запускаете I2P, это может занять несколько минут, т.к. роутер выполняет процедуру начальной загрузки (bootstrap) для интеграции в сеть и поиска пиров для оптимизации интегрированности. Будте терпеливы. Когда I2P запускается, и во время нормальной работы, индикатор готовности к построению туннелей (прямо над секцией <i>Локальные туннели</i> на боковой панели) может показывать "Не принимаем туннели"; это нормальное поведение и не стоит слишком беспокоиться. Когда возле ваших <i>Локальных туннелей</i> загорятся зелёные звёздочки, вы сможете делать с I2P разнообразные вещи, и ниже мы представим вам некоторые из них. </li></ul>
    55 
    6 <h3>Сервисы в I2P</h3>
     6<h3 class="welcome">Сервисы в I2P</h3>
    77<ul class="links">
    88
     
    2424</ul>
    2525
    26 <h3>Анонимный шифрованный веб-хостинг в I2P</h3>
     26<h3 class="welcome">Анонимный шифрованный веб-хостинг в I2P</h3>
    2727<ul class="links">
    2828
     
    3838   
    3939<a name="eepsites"></a>   
    40     <h3>Достопримечательности I2P</h3>
     40    <h3 class="welcome">Достопримечательности I2P</h3>
    4141    <ul class="links">
    4242      <li class="tidylist"><b>Официальный веб-сайт Invisible Internet Project (I2P)</b><br><a href="http://i2p-projekt.i2p/ru/" target="_blank">i2p-projekt.i2p</a>: безопасный и анонимный
  • router/java/src/net/i2p/router/Blocklist.java

    r2fe1f97 r6bfd39d5  
    917917        singles.addAll(_singleIPBlocklist);
    918918        if (!(singles.isEmpty() && _singleIPv6Blocklist.isEmpty())) {
    919             out.write("<table><tr><th align=\"center\" colspan=\"2\"><b>");
     919            out.write("<table id=\"banneduntilrestart\"><tr><th align=\"center\" colspan=\"2\"><b>");
    920920            out.write(_t("IPs Banned Until Restart"));
    921921            out.write("</b></td></tr>");
     
    954954        }
    955955        if (_blocklistSize > 0) {
    956             out.write("<table><tr><th align=\"center\" colspan=\"2\"><b>");
     956            out.write("<table id=\"permabanned\"><tr><th align=\"center\" colspan=\"2\"><b>");
    957957            out.write(_t("IPs Permanently Banned"));
    958958            out.write("</b></th></tr><tr><td align=\"center\" width=\"50%\"><b>");
  • router/java/src/net/i2p/router/PersistentKeyRing.java

    r2fe1f97 r6bfd39d5  
    6565    public void renderStatusHTML(Writer out) throws IOException {
    6666        StringBuilder buf = new StringBuilder(1024);
    67         buf.append("\n<table><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Encryption Key</tr>");
     67        buf.append("\n<table class=\"configtable\"><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Encryption Key</tr>");
    6868        for (Entry<Hash, SessionKey> e : entrySet()) {
    6969            buf.append("\n<tr><td>");
  • router/java/src/net/i2p/router/transport/TransportManager.java

    r2fe1f97 r6bfd39d5  
    684684    public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException {
    685685        if (_context.getBooleanProperty(PROP_ADVANCED)) {
    686             out.write("<p><b>");
     686            out.write("<p id=\"upnpstatus\"><b>");
    687687            out.write(_t("Status"));
    688688            out.write(": ");
     
    703703
    704704        StringBuilder buf = new StringBuilder(4*1024);
    705         buf.append("<h3>").append(_t("Router Transport Addresses")).append("</h3><pre>\n");
     705        buf.append("<h3 id=\"transports\">").append(_t("Router Transport Addresses")).append("</h3><pre id=\"transports\">\n");
    706706        for (Transport t : _transports.values()) {
    707707            if (t.hasCurrentAddress()) {
     
    722722            out.write(_upnpManager.renderStatusHTML());
    723723        } else {
    724             out.write("<h3><a name=\"upnp\"></a>" + _t("UPnP is not enabled") + "</h3>\n");
     724            out.write("<h3 id=\"upnpstatus\"><a name=\"upnp\"></a>" + _t("UPnP is not enabled") + "</h3>\n");
    725725        }
    726726        out.write("</p>\n");
     
    731731    private final String getTransportsLegend() {
    732732        StringBuilder buf = new StringBuilder(1024);
    733         buf.append("<h3 id=\"help\">").append(_t("Help")).append("</h3><div class=\"configure\"><p>")
     733        buf.append("<p class=\"infohelp\">")
    734734           .append(_t("Your transport connection limits are automatically set based on your configured bandwidth."))
    735735           .append('\n')
    736736           .append(_t("To override these limits, add the settings i2np.ntcp.maxConnections=nnn and i2np.udp.maxConnections=nnn on the advanced configuration page."))
    737            .append("</p></div>\n");
    738         buf.append("<h3>").append(_t("Definitions")).append("</h3><div class=\"configure\">" +
    739                    "<p><b id=\"def.peer\">").append(_t("Peer")).append("</b>: ").append(_t("The remote peer, identified by router hash")).append("<br>\n" +
    740                    "<b id=\"def.dir\">").append(_t("Dir")).append("</b>: " +
    741                    "<img alt=\"Inbound\" src=\"/themes/console/images/inbound.png\"> ").append(_t("Inbound connection")).append("<br>\n" +
    742                    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
    743                    "<img alt=\"Outbound\" src=\"/themes/console/images/outbound.png\"> ").append(_t("Outbound connection")).append("<br>\n" +
    744                    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
    745                    "<img src=\"/themes/console/images/inbound.png\" alt=\"V\" height=\"8\" width=\"12\"> ").append(_t("They offered to introduce us (help other peers traverse our firewall)")).append("<br>\n" +
    746                    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
    747                    "<img src=\"/themes/console/images/outbound.png\" alt=\"^\" height=\"8\" width=\"12\"> ").append(_t("We offered to introduce them (help other peers traverse their firewall)")).append("<br>\n" +
    748                    "<b id=\"def.idle\">").append(_t("Idle")).append("</b>: ").append(_t("How long since a packet has been received / sent")).append("<br>\n" +
    749                    "<b id=\"def.rate\">").append(_t("In/Out")).append("</b>: ").append(_t("The smoothed inbound / outbound transfer rate (KBytes per second)")).append("<br>\n" +
    750                    "<b id=\"def.up\">").append(_t("Up")).append("</b>: ").append(_t("How long ago this connection was established")).append("<br>\n" +
    751                    "<b id=\"def.skew\">").append(_t("Skew")).append("</b>: ").append(_t("The difference between the peer's clock and your own")).append("<br>\n" +
    752                    "<b id=\"def.cwnd\">CWND</b>: ").append(_t("The congestion window, which is how many bytes can be sent without an acknowledgement")).append(" / <br>\n" +
    753                    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ").append(_t("The number of sent messages awaiting acknowledgement")).append(" /<br>\n" +
    754                    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ").append(_t("The maximum number of concurrent messages to send")).append(" /<br>\n"+
    755                    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ").append(_t("The number of pending sends which exceed congestion window")).append("<br>\n" +
    756                    "<b id=\"def.ssthresh\">SST</b>: ").append(_t("The slow start threshold")).append("<br>\n" +
    757                    "<b id=\"def.rtt\">RTT</b>: ").append(_t("The round trip time in milliseconds")).append("<br>\n" +
    758                    //"<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The standard deviation of the round trip time in milliseconds")).append("<br>\n" +
    759                    "<b id=\"def.rto\">RTO</b>: ").append(_t("The retransmit timeout in milliseconds")).append("<br>\n" +
    760                    "<b id=\"def.mtu\">MTU</b>: ").append(_t("Current maximum send packet size / estimated maximum receive packet size (bytes)")).append("<br>\n" +
    761                    "<b id=\"def.send\">").append(_t("TX")).append("</b>: ").append(_t("The total number of messages sent to the peer")).append("<br>\n" +
    762                    "<b id=\"def.recv\">").append(_t("RX")).append("</b>: ").append(_t("The total number of messages received from the peer")).append("<br>\n" +
    763                    "<b id=\"def.resent\">").append(_t("Dup TX")).append("</b>: ").append(_t("The total number of packets retransmitted to the peer")).append("<br>\n" +
    764                    "<b id=\"def.dupRecv\">").append(_t("Dup RX")).append("</b>: ").append(_t("The total number of duplicate packets received from the peer")).append("</p>" +
    765                    "</div>\n");
     737           .append("</p>\n");
     738        buf.append("<h3 class=\"tabletitle\">").append(_t("Definitions")).append("</h3>")
     739           .append("<table id=\"peerdefs\">\n")
     740           .append("<tr><td><b id=\"def.peer\">").append(_t("Peer")).append("</b></td><td>").append(_t("The remote peer, identified by router hash")).append("</td></tr>\n")
     741           .append("<tr><td><b id=\"def.dir\">").append(_t("Dir")).append("</b></td><td><img alt=\"Inbound\" src=\"/themes/console/images/inbound.png\"> ").append(_t("Inbound connection")).append("</td></tr>\n")
     742           .append("<tr><td></td><td><img alt=\"Outbound\" src=\"/themes/console/images/outbound.png\"> ").append(_t("Outbound connection")).append("</td></tr>\n")
     743           .append("<tr><td></td><td><img src=\"/themes/console/images/inbound.png\" alt=\"V\" height=\"8\" width=\"12\"> ").append(_t("They offered to introduce us (help other peers traverse our firewall)")).append("</td></tr>\n")
     744           .append("<tr><td></td><td><img src=\"/themes/console/images/outbound.png\" alt=\"^\" height=\"8\" width=\"12\"> ").append(_t("We offered to introduce them (help other peers traverse their firewall)")).append("</td></tr>\n")
     745           .append("<tr><td><b id=\"def.idle\">").append(_t("Idle")).append("</b></td><td>").append(_t("How long since a packet has been received / sent")).append("</td></tr>\n")
     746           .append("<tr><td><b id=\"def.rate\">").append(_t("In/Out")).append("</b></td><td>").append(_t("The smoothed inbound / outbound transfer rate (KBytes per second)")).append("</td></tr>\n")
     747           .append("<tr><td><b id=\"def.up\">").append(_t("Up")).append("</b></td><td>").append(_t("How long ago this connection was established")).append("</td></tr>\n")
     748           .append("<tr><td><b id=\"def.skew\">").append(_t("Skew")).append("</b></td><td>").append(_t("The difference between the peer's clock and your own")).append("</td></tr>\n")
     749           .append("<tr><td><b id=\"def.cwnd\">CWND</b></td><td>").append(_t("The congestion window, which is how many bytes can be sent without an acknowledgement")).append(" / </td></tr>\n")
     750           .append("<tr><td></td><td>").append(_t("The number of sent messages awaiting acknowledgement")).append(" /</td></tr>\n")
     751           .append("<tr><td></td><td>").append(_t("The maximum number of concurrent messages to send")).append(" /</td></tr>\n")
     752           .append("<tr><td></td><td>").append(_t("The number of pending sends which exceed congestion window")).append("</td></tr>\n")
     753           .append("<tr><td><b id=\"def.ssthresh\">SST</b></td><td>").append(_t("The slow start threshold")).append("</td></tr>\n")
     754           .append("<tr><td><b id=\"def.rtt\">RTT</b></td><td>").append(_t("The round trip time in milliseconds")).append("</td></tr>\n")
     755           //.append("<tr><td><b id=\"def.dev\">").append(_t("Dev")).append("</b></td><td>").append(_t("The standard deviation of the round trip time in milliseconds")).append("</td></tr>\n")
     756           .append("<tr><td><b id=\"def.rto\">RTO</b></td><td>").append(_t("The retransmit timeout in milliseconds")).append("</td></tr>\n")
     757           .append("<tr><td><b id=\"def.mtu\">MTU</b></td><td>").append(_t("Current maximum send packet size / estimated maximum receive packet size (bytes)")).append("</td></tr>\n")
     758           .append("<tr><td><b id=\"def.send\">").append(_t("TX")).append("</b></td><td>").append(_t("The total number of messages sent to the peer")).append("</td></tr>\n")
     759           .append("<tr><td><b id=\"def.recv\">").append(_t("RX")).append("</b></td><td>").append(_t("The total number of messages received from the peer")).append("</td></tr>\n")
     760           .append("<tr><td><b id=\"def.resent\">").append(_t("Dup TX")).append("</b></td><td>").append(_t("The total number of packets retransmitted to the peer")).append("</td></tr>\n")
     761           .append("<tr><td><b id=\"def.dupRecv\">").append(_t("Dup RX")).append("</b></td><td>").append(_t("The total number of duplicate packets received from the peer")).append("</td></tr>\n")
     762           .append("</table>");
    766763        return buf.toString();
    767764    }
  • router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java

    r2fe1f97 r6bfd39d5  
    13641364        }
    13651365        buf.append(".</h3>\n" +
    1366                    "<table>\n" +
     1366                   "<table id=\"ntcpconnections\">\n" +
    13671367                   "<tr><th><a href=\"#def.peer\">").append(_t("Peer")).append("</a></th>" +
    13681368                   "<th>").append(_t("Dir")).append("</th>" +
  • router/java/src/net/i2p/router/transport/udp/UDPTransport.java

    r2fe1f97 r6bfd39d5  
    25842584        }
    25852585        buf.append(".</h3>\n");
    2586         buf.append("<table>\n");
     2586        buf.append("<div class=\"widescroll\"><table id=\"udpconnections\">\n");
    25872587        buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">").append(_t("Peer")).append("</a><br>");
    25882588        if (sortFlags != FLAG_ALPHA)
     
    28482848        }
    28492849     }  // numPeers > 0
    2850         buf.append("</table>\n");
     2850        buf.append("</table></div>\n");
    28512851
    28522852      /*****
Note: See TracChangeset for help on using the changeset viewer.