Changeset e16760d


Ignore:
Timestamp:
May 29, 2016 11:53:02 AM (4 years ago)
Author:
str4d <str4d@…>
Branches:
master
Children:
ed31209
Parents:
3266907 (diff), 147a7e4 (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 31a9e968da3ecdf8475137e498ed0145bfd48c5a)

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

Files:
3 added
87 edited
12 moved

Legend:

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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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    }
     
    20552055        out.write("<form action=\"_post\" method=\"POST\">\n");
    20562056        writeHiddenInputs(out, req, "Add");
    2057         out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">");
     2057        out.write("<div class=\"addtorrentsection\">");
     2058        out.write("<input class=\"toggle_input\" id=\"toggle_addtorrent\" type=\"checkbox\"><label class=\"toggleview\" for=\"toggle_addtorrent\">");
    20582059        out.write(toThemeImg("add"));
    20592060        out.write(' ');
    20602061        out.write(_t("Add Torrent"));
    2061 
    2062         out.write("</span><hr>\n<table border=\"0\"><tr><td>");
     2062        out.write("</label>");
     2063
     2064        out.write("<hr>\n<table border=\"0\"><tr><td>");
    20632065        out.write(_t("From URL"));
    20642066        out.write(":<td><input type=\"text\" name=\"nofilter_newURL\" size=\"85\" value=\"" + newURL + "\" spellcheck=\"false\"");
    20652067        out.write(" title=\"");
    20662068        out.write(_t("Enter the torrent file download URL (I2P only), magnet link, maggot link, or info hash"));
    2067         out.write("\"> \n");
     2069        out.write("\">\n");
    20682070        // not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
    20692071        //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>");
     
    20712073        out.write(_t("Add torrent"));
    20722074        out.write("\" name=\"foo\" ><br>\n" +
    2073 
    20742075                  "<tr><td>");
     2076
    20752077        out.write(_t("Data dir"));
    20762078        out.write(":<td><input type=\"text\" name=\"nofilter_newDir\" size=\"85\" value=\"\" spellcheck=\"false\"");
     
    20862088        out.write("</div></form></div>"); 
    20872089    }
    2088    
     2090
    20892091    private void writeSeedForm(PrintWriter out, HttpServletRequest req, List<Tracker> sortedTrackers) throws IOException {
    20902092        out.write("<a name=\"add\"></a><div class=\"newtorrentsection\"><div class=\"snarkNewTorrent\">\n");
     
    20922094        out.write("<form action=\"_post\" method=\"POST\">\n");
    20932095        writeHiddenInputs(out, req, "Create");
    2094         out.write("<span class=\"snarkConfigTitle\">");
     2096        out.write("<input class=\"toggle_input\" id=\"toggle_createtorrent\" type=\"checkbox\"><label class=\"toggleview\" for=\"toggle_createtorrent\">");
    20952097        out.write(toThemeImg("create"));
    20962098        out.write(' ');
    20972099        out.write(_t("Create Torrent"));
    2098         out.write("</span><hr>\n<table border=\"0\"><tr><td>");
     2100        out.write("</label><hr>\n<table border=\"0\"><tr><td>");
    20992101        //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
    21002102        out.write(_t("Data to seed"));
     
    21042106        out.write(_t("File or directory to seed (full path or within the directory {0} )",
    21052107                    _manager.getDataDir().getAbsolutePath() + File.separatorChar));
    2106         out.write("\" ><tr><td>\n");
     2108        out.write("\" > <input type=\"submit\" class=\"create\" value=\"");
     2109        out.write(_t("Create torrent"));
     2110        out.write("\" name=\"foo\" >");
     2111        out.write("<tr><td>\n");
    21072112        out.write(_t("Trackers"));
    2108         out.write(":<td><table style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
     2113        out.write(":<td><table id=\"trackerselect\" style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
    21092114        out.write(_t("Primary"));
    21102115        out.write("</td><td align=\"center\">");
    21112116        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");
     2117        out.write("</td><td>");
     2118        out.write(_t("Tracker URL"));
     2119        out.write("</td></tr>\n");
     2120
    21172121        for (Tracker t : sortedTrackers) {
    21182122            String name = t.name;
    21192123            String announceURL = t.announceURL.replace("&#61;", "=");
     2124            String homeURL = t.baseURL;
    21202125            out.write("<tr><td>");
    21212126            out.write(name);
     
    21272132            out.write("></td><td align=\"center\"><input type=\"checkbox\" name=\"backup_");
    21282133            out.write(announceURL);
    2129             out.write("\" value=\"foo\"></td></tr>\n");
     2134            out.write("\" value=\"foo\"></td><td><a href=\"");
     2135            out.write(homeURL);
     2136            out.write("\">");
     2137            out.write(homeURL);
     2138            out.write("</a></td></tr>\n");
    21302139        }
    21312140        out.write("<tr><td><i>");
     
    21342143        if (_lastAnnounceURL == null)
    21352144            out.write(" checked");
    2136         out.write("></td><td></td></tr></table>\n");
     2145        out.write("></td><td></td><td></td></tr></table>\n");
    21372146        // make the user add a tracker on the config form now
    21382147        //out.write(_t("or"));
  • apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java

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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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) {
     
    323323
    324324            _out.write("</p><p><i>" + _t("All times are UTC.") + "</i></p>\n");
     325
     326            _out.write("<p><a href=\"graphs\">" + _t("Return to main graphs page") + "</a></p>\n");
    325327        } catch (IOException ioe) {
    326328            ioe.printStackTrace();
     
    354356        String nonce = CSSHelper.getNonce();
    355357        try {
    356             _out.write("<br><h3>" + _t("Configure Graph Display") + " [<a href=\"configstats\">" + _t("Select Stats") + "</a>]</h3>");
     358            _out.write("<br><h3 id=\"graphdisplay\">" + _t("Configure Graph Display") + " <a href=\"configstats\">[" + _t("Select Stats") + "]</a></h3>");
    357359            _out.write("<form action=\"graphs\" method=\"POST\">\n" +
    358360                       "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
     
    385387                _out.write(HelperBase.CHECKED);
    386388            _out.write(">" +
    387                        "<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
     389                       "<hr><div class=\"formaction\" id=\"graphing\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
    388390        } catch (IOException ioe) {
    389391            ioe.printStackTrace();
  • apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java

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

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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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\" title=\"").append(_t("Manually Configure Floodfill Participation")).append("\">[")
     156           .append(_t("Configure Floodfill Participation"))
     157           .append("]</a></th></tr>\n")
     158           .append("<tr><td><b>Total Leasesets:</b></td><td colspan=\"3\">").append(leases.size()).append("</td></tr>\n");
     159        if (debug) {
     160            buf.append("<tr><td><b>Published (RAP) Leasesets:</b></td><td colspan=\"3\">").append(netdb.getKnownLeaseSets()).append("</td></tr>\n")
     161               .append("<tr><td><b>Mod Data:</b></td><td>").append(DataHelper.getUTF8(_context.routerKeyGenerator().getModData())).append("</td>")
     162               .append("<td><b>Last Changed:</b></td><td>").append(new Date(_context.routerKeyGenerator().getLastChanged())).append("</td></tr>\n")
     163               .append("<tr><td><b>Next Mod Data:</b></td><td>").append(DataHelper.getUTF8(_context.routerKeyGenerator().getNextModData())).append("</td>")
     164               .append("<td><b>Change in:</b></td><td>").append(DataHelper.formatDuration(_context.routerKeyGenerator().getTimeTillMidnight())).append("</td></tr>\n");
     165        }
     166        int ff = _context.peerManager().getPeersByCapability(FloodfillNetworkDatabaseFacade.CAPABILITY_FLOODFILL).size();
     167        buf.append("<tr><td><b>Known Floodfills:</b></td><td colspan=\"3\">").append(ff).append("</td></tr>\n")
     168           .append("<tr><td><b>Currently Floodfill?</b></td><td colspan=\"3\">").append(netdb.floodfillEnabled() ? "yes" : "no").append("</td></tr>\n");
     169        if (debug) {
     170            buf.append("<tr><td><b>Network data (only valid if floodfill):</b></td><td colspan=\"3\">");
     171            //buf.append("</b></p><p><b>Center of Key Space (router hash): " + ourRKey.toBase64());
     172            if (median != null) {
     173                double log2 = biLog2(median);
     174                buf.append("</td></tr>")
     175                   .append("<tr><td><b>Median distance (bits):</b></td><td colspan=\"3\">").append(fmt.format(log2)).append("</td></tr>\n");
     176                // 2 for 4 floodfills... -1 for median
     177                // this can be way off for unknown reasons
     178                int total = (int) Math.round(Math.pow(2, 2 + 256 - 1 - log2));
     179                buf.append("<tr><td><b>Estimated total floodfills:</b></td><td colspan=\"3\">").append(total).append("</td></tr>\n");
     180                buf.append("<tr><td><b>Estimated total leasesets:</b></td><td colspan=\"3\">").append(total * rapCount / 4);
     181            } else {
     182                buf.append("<i>Not floodfill or no data.</i>");
     183            }
     184            buf.append("</td></tr>\n");
     185        }
     186        buf.append("</table>\n");
     187
    145188        if (leases.isEmpty()) {
    146189          if (!debug)
    147               buf.append("<i>").append(_t("none")).append("</i>");
     190              buf.append("<div id=\"noleasesets\"><i>").append(_t("No Leasesets currently active.")).append("</i></div>");
    148191        } else {
    149192          if (debug) {
     
    155198            medianCount = rapCount / 2;
    156199          }
     200
    157201          long now = _context.clock().now();
    158202          for (LeaseSet ls : leases) {
    159203            Destination dest = ls.getDestination();
    160204            Hash key = dest.calculateHash();
    161             buf.append("<b>").append(_t("LeaseSet")).append(": ").append(key.toBase64()).append("</b>\n");
     205            buf.append("<table class=\"leaseset\">\n")
     206               .append("<tr><th><b>").append(_t("LeaseSet")).append(":</b>&nbsp;<code>").append(key.toBase64()).append("</code></th>");
    162207            if (_context.clientManager().isLocal(dest)) {
    163                 buf.append(" (<a href=\"tunnels#" + key.toBase64().substring(0,4) + "\">" + _t("Local") + "</a> ");
     208                buf.append("<th><b><a href=\"tunnels#" + key.toBase64().substring(0,4) + "\">" + _t("Local") + "</a> ");
    164209                if (! _context.clientManager().shouldPublishLeaseSet(key))
    165210                    buf.append(_t("Unpublished") + ' ');
    166                 buf.append(_t("Destination") + ' ');
     211                buf.append("<b>").append(_t("Destination")).append(":</b> ");
    167212                TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(key);
    168213                if (in != null && in.getDestinationNickname() != null)
     
    170215                else
    171216                    buf.append(dest.toBase64().substring(0, 6));
    172                 buf.append(")<br>\n");
     217                buf.append("</th></tr>\n<tr><td>");
    173218                String b32 = dest.toBase32();
    174                 buf.append("<a href=\"http://").append(b32).append("\">").append(b32).append("</a><br>\n");
     219                buf.append("<a href=\"http://").append(b32).append("\">").append(b32).append("</a></td>");
    175220                String host = _context.namingService().reverseLookup(dest);
    176221                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");   
     222                    buf.append("<td>").append("<a title=\"").append(_t("Add to addressbook"))
     223                       .append("\" href=\"/susidns/addressbook.jsp?book=private&amp;destination=")
     224                       .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a></td>");
    179225                }
    180226            } else {
    181                 buf.append(" (").append(_t("Destination")).append(' ');
     227                buf.append("<th><b>").append(_t("Destination")).append(":</b> ");
    182228                String host = _context.namingService().reverseLookup(dest);
    183229                if (host != null) {
    184                     buf.append("<a href=\"http://").append(host).append("/\">").append(host).append("</a>)<br>\n");
     230                    buf.append("<a href=\"http://").append(host).append("/\">").append(host).append("</a></th>");
    185231                } else {
    186232                    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");   
     233                    buf.append("<code>").append(dest.toBase64().substring(0, 6)).append("</code></th>")
     234                       .append("</tr>\n<tr>")
     235                       .append("<td><a href=\"http://").append(b32).append("\">").append(b32).append("</a></td>\n")
     236                       .append("<td><a title=\"").append(_t("Add to addressbook"))
     237                       .append("\" href=\"/susidns/addressbook.jsp?book=private&amp;destination=")
     238                       .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a></td>");
    191239                }
    192240            }
     241            buf.append("</tr>\n<tr><td colspan=\"2\">\n");
    193242            long exp = ls.getLatestLeaseDate()-now;
    194243            if (exp > 0)
    195                 buf.append(_t("Expires in {0}", DataHelper.formatDuration2(exp)));
     244                buf.append("<b>").append(_t("Expires in {0}", DataHelper.formatDuration2(exp))).append("</b>");
    196245            else
    197                 buf.append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exp)));
    198             buf.append("<br>\n");
     246                buf.append("<b>").append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exp))).append("</b>");
     247            buf.append("</td></tr>\n");
    199248            if (debug) {
    200                 buf.append("RAP? " + ls.getReceivedAsPublished());
    201                 buf.append(" RAR? " + ls.getReceivedAsReply());
     249                buf.append("<tr><td colspan=\"2\">");
     250                buf.append("<b>RAP?</b> ").append(ls.getReceivedAsPublished());
     251                buf.append(" <b>RAR?</b> ").append(ls.getReceivedAsReply());
    202252                BigInteger dist = HashDistance.getDistance(ourRKey, ls.getRoutingKey());
    203253                if (ls.getReceivedAsPublished()) {
     
    205255                        median = dist;
    206256                }
    207                 buf.append(" Dist: <b>").append(fmt.format(biLog2(dist))).append("</b><br>");
     257                buf.append(" <b>Distance: </b><span id=\"distance\">").append(fmt.format(biLog2(dist))).append("</span></b>");
     258                buf.append("</td></tr>\n<tr><td colspan=\"2\">");
    208259                //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>");
     260                buf.append("<b>Signature type:</b> ").append(dest.getSigningPublicKey().getType());
     261                buf.append(" <b>Encryption Key:</b> ").append(ls.getEncryptionKey().toBase64().substring(0, 20)).append("&hellip;");
     262                buf.append("</td></tr>\n<tr><td colspan=\"2\">");
     263                buf.append("<b>Routing Key:</b> ").append(ls.getRoutingKey().toBase64());
     264                buf.append("</td></tr>");
     265
    213266            }
    214267            for (int i = 0; i < ls.getLeaseCount(); i++) {
    215268                Lease lease = ls.getLease(i);
    216                 buf.append(_t("Lease")).append(' ').append(i + 1).append(": ").append(_t("Gateway")).append(' ');
     269                buf.append("<tr><td colspan=\"2\">");
     270                buf.append("<b>").append(_t("Lease")).append(' ').append(i + 1).append(":</b> ").append(_t("Gateway")).append(' ');
    217271                buf.append(_context.commSystem().renderPeerHTML(lease.getGateway()));
    218272                buf.append(' ').append(_t("Tunnel")).append(' ').append(lease.getTunnelId().getTunnelId()).append(' ');
     
    220274                    long exl = lease.getEndDate().getTime() - now;
    221275                    if (exl > 0)
    222                         buf.append(_t("Expires in {0}", DataHelper.formatDuration2(exl)));
     276                        buf.append("<b>").append(_t("Expires in {0}", DataHelper.formatDuration2(exl))).append("</b>");
    223277                    else
    224                         buf.append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exl)));
     278                        buf.append("<b>").append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exl))).append("</b>");
    225279                }
    226                 buf.append("<br>\n");
    227             }
    228             buf.append("<hr>\n");
     280                buf.append("</td></tr>\n");
     281            }
     282            buf.append("</table>\n");
    229283            out.write(buf.toString());
    230284            buf.setLength(0);
    231285          } // for each
    232286        }  // !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         }
    260287        out.write(buf.toString());
    261288        out.flush();
     
    339366
    340367        // the summary table
    341         buf.append("<table border=\"0\" cellspacing=\"30\"><tr><th colspan=\"3\">")
     368        buf.append("<table id=\"netdboverview\" border=\"0\" cellspacing=\"30\"><tr><th colspan=\"3\">")
    342369           .append(_t("Network Database Router Statistics"))
    343370           .append("</th></tr><tr><td style=\"vertical-align: top;\">");
     
    346373        if (!versionList.isEmpty()) {
    347374            Collections.sort(versionList, Collections.reverseOrder(new VersionComparator()));
    348             buf.append("<table>\n");
     375            buf.append("<table id=\"netdbversions\">\n");
    349376            buf.append("<tr><th>" + _t("Version") + "</th><th>" + _t("Count") + "</th></tr>\n");
    350377            for (String routerVersion : versionList) {
     
    365392           
    366393        // transports table
    367         buf.append("<table>\n");
     394        buf.append("<table id=\"netdbtransports\">\n");
    368395        buf.append("<tr><th align=\"left\">" + _t("Transports") + "</th><th>" + _t("Count") + "</th></tr>\n");
    369396        for (int i = 0; i < TNAMES.length; i++) {
     
    387414        if (!countryList.isEmpty()) {
    388415            Collections.sort(countryList, new CountryComparator());
    389             buf.append("<table>\n");
     416            buf.append("<table id=\"netdbcountrylist\">\n");
    390417            buf.append("<tr><th align=\"left\">" + _t("Country") + "</th><th>" + _t("Count") + "</th></tr>\n");
    391418            for (String country : countryList) {
     
    449476    private void renderRouterInfo(StringBuilder buf, RouterInfo info, boolean isUs, boolean full) {
    450477        String hash = info.getIdentity().getHash().toBase64();
    451         buf.append("<table><tr><th><a name=\"").append(hash.substring(0, 6)).append("\" ></a>");
     478        buf.append("<table class=\"netdbentry\">")
     479           .append("<tr><th colspan=\"2\"><a name=\"").append(hash.substring(0, 6)).append("\" ></a>");
    452480        if (isUs) {
    453             buf.append("<a name=\"our-info\" ></a><b>" + _t("Our info") + ": ").append(hash).append("</b></th></tr><tr><td>\n");
     481            buf.append("<a name=\"our-info\" ></a><b>" + _t("Our info") + ":</b>&nbsp;<code>").append(hash).append("</code></th><th>");
    454482        } else {
    455             buf.append("<b>" + _t("Peer info for") + ":</b> ").append(hash).append("\n");
     483            buf.append("<b>" + _t("Peer info for") + ":</b>&nbsp;<code>").append(hash).append("</code></th><th>");
    456484            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        
     485                buf.append("<a title=\"").append(_t("View extended router info"))
     486                   .append("\" class=\"viewfullentry\" href=\"netdb?r=").append(hash.substring(0, 6))
     487                   .append("\" >[").append(_t("Full entry")).append("]</a>");
     488            }
     489        }
     490        buf.append("</th></tr>\n<tr>");
    462491        long age = _context.clock().now() - info.getPublished();
    463492        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");
     493            buf.append("<td><b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b></td>")
     494               .append("<td colspan=\"2\">")
     495               .append(_t("{0} ago", DataHelper.formatDuration2(age)))
     496               .append("</td>");
    466497        } else if (age > 0) {
    467             buf.append("<b>").append(_t("Published")).append(":</b> ")
    468                .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
     498            buf.append("<td><b>").append(_t("Published")).append(":</b></td>")
     499               .append("<td colspan=\"2\">")
     500               .append(_t("{0} ago", DataHelper.formatDuration2(age)))
     501               .append("</td>");
    469502        } else {
    470503            // shouldnt happen
    471             buf.append("<b>" + _t("Published") + ":</b> in ").append(DataHelper.formatDuration2(0-age)).append("???<br>\n");
    472         }
     504            buf.append("<td colspan=\"2\"><b>").append(_t("Published")).append(":</b> in ").append(DataHelper.formatDuration2(0-age)).append("???</td>");
     505        }
     506        buf.append("</tr>\n<tr><td>");
    473507        buf.append("<b>").append(_t("Signing Key")).append(":</b> ")
     508           .append("</td><td colspan=\"2\">")
    474509           .append(info.getIdentity().getSigningPublicKey().getType().toString());
    475         buf.append("<br>\n<b>" + _t("Address(es)") + ":</b> ");
     510        buf.append("</td></tr>\n<tr>")
     511           .append("<td><b>" + _t("Address(es)") + ":</b></td>")
     512           .append("<td colspan=\"2\">");
    476513        String country = _context.commSystem().getCountry(info.getIdentity().getHash());
    477514        if(country != null) {
     
    495532        buf.append("</td></tr>\n");
    496533        if (full) {
    497             buf.append("<tr><td>" + _t("Stats") + ": <br><code>");
     534            buf.append("<tr><td><b>" + _t("Stats") + ":</b><td colspan=\"2\"><code>");
    498535            Map<Object, Object> p = info.getOptionsMap();
    499536            for (Map.Entry<Object, Object> e : p.entrySet()) {
  • apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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);
     
    103107        buf.append("</i><br>");
    104108        if (freq.getEventCount() <= 0) {
    105             buf.append(_t("No lifetime events")).append("<br>\n");
     109            buf.append("<ul><li class=\"noevents\">").append(_t("No lifetime events")).append("</li></ul>\n");
    106110            return;
    107111        }
     
    154158        }
    155159        if (rate.getLifetimeEventCount() <= 0) {
    156             buf.append(_t("No lifetime events")).append("<br>\n");
     160            buf.append("<ul><li class=\"noevents\">").append(_t("No lifetime events")).append("</li></ul>\n");
    157161            return;
    158162        }
     
    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

    r3266907 re16760d  
    2929        {"HelpAndFAQ", "I2PServices", "I2PInternals", "General", "ShortGeneral", "NetworkReachability",
    3030        "UpdateStatus", "RestartStatus", "Peers", "FirewallAndReseedStatus", "Bandwidth", "Tunnels",
    31         "Congestion", "TunnelStatus", "Destinations", "NewsHeadings" };
     31        "Congestion", "TunnelStatus", "Destinations", "NewsHeadings", "Advanced" };
    3232    static final Map<String, String> SECTION_NAMES;
    3333
     
    5050        aMap.put("Destinations", "Local Tunnels");
    5151        aMap.put("NewsHeadings", "News &amp; Updates");
     52        aMap.put("Advanced", "Advanced");
    5253        SECTION_NAMES = Collections.unmodifiableMap(aMap);
    5354    }
     
    8990            else if ("I2PInternals".equals(section))
    9091                buf.append(renderI2PInternalsHTML());
     92            else if ("Advanced".equals(section))
     93                buf.append(renderAdvancedHTML());
    9194            else if ("General".equals(section))
    9295                buf.append(renderGeneralHTML());
     
    140143           .append("</a></h3>\n" +
    141144
    142                    "<hr class=\"b\"><table><tr><td>" +
     145                   "<hr class=\"b\"><table id=\"sb_services\"><tr><td>" +
    143146
    144147                   "<a href=\"/susimail/susimail\" target=\"_blank\" title=\"")
     
    178181           .append("</a></h3><hr class=\"b\">\n" +
    179182
    180                    "<table><tr><td>\n" +
     183                   "<table id=\"sb_internals\"><tr><td>\n" +
    181184
    182185                   "<a href=\"/tunnels\" target=\"_top\" title=\"")
     
    224227        }
    225228
    226         buf.append("<a href=\"/stats\" target=\"_top\" title=\"")
    227            .append(_t("Textual router performance statistics"))
    228            .append("\">")
    229            .append(nbsp(_t("Stats")))
    230            .append("</a>\n" +
    231 
    232                    "<a href=\"/dns\" target=\"_top\" title=\"")
     229        buf.append("<a href=\"/dns\" target=\"_top\" title=\"")
    233230           .append(_t("Manage your I2P hosts file here (I2P domain name resolution)"))
    234231           .append("\">")
     
    242239           .append("</a>\n");
    243240
    244         if (_context.getBooleanProperty(HelperBase.PROP_ADVANCED))
    245             buf.append("<a href=\"/debug\">Debug</a>\n");
     241        buf.append("</td></tr></table>\n");
     242        return buf.toString();
     243    }
     244
     245    public String renderAdvancedHTML() {
     246        StringBuilder buf = new StringBuilder(512);
     247
     248        buf.append("<h3 id=\"advanced\"><a title=\"")
     249           .append(_t("Advanced Configuration"))
     250           .append("\" href=\"/configadvanced\">")
     251           .append(_t("Advanced"))
     252           .append("</a></h3>\n")
     253
     254           .append("<hr class=\"b\"><table id=\"sb_advanced\"><tr><td>")
     255
     256           .append("<a title=\"")
     257           .append(_t("Review active encryption certificates used in console"))
     258           .append("\" href=\"certs\">")
     259           .append(nbsp(_t("Certs")))
     260           .append("</a>\n")
     261
     262           .append("<a title=\"")
     263           .append(_t("View full changelog"))
     264           .append("\" href=\"viewhistory\" target=\"_blank\">")
     265           .append(nbsp(_t("Changelog")))
     266           .append("</a>\n")
     267
     268           .append("<a title=\"")
     269           .append(_t("View router debug information"))
     270           .append("\" href=\"debug\">")
     271           .append(nbsp(_t("Debug")))
     272           .append("</a>\n")
     273
     274           .append("<a title=\"")
     275           .append(_t("Review extended info about installed .jar and .war files"))
     276           .append("\" href=\"jars\">")
     277           .append(nbsp(_t("Jars")))
     278           .append("</a>\n");
     279
    246280        File javadoc = new File(_context.getBaseDir(), "docs/javadoc/index.html");
    247281        if (javadoc.exists())
    248282            buf.append("<a href=\"/javadoc/index.html\" target=\"_blank\">Javadoc</a>\n");
    249         buf.append("</td></tr></table>\n");
     283
     284        buf.append("<a title=\"")
     285           .append(_t("View active leasesets (debug mode)"))
     286           .append("\" href=\"/netdb?l=2\">")
     287           .append(nbsp(_t("Leasesets")))
     288           .append("</a>\n")
     289
     290           .append("<a title=\"")
     291           .append(_t("Signed proof of ownership of this router"))
     292           .append("\" href=\"proof\">")
     293           .append(nbsp(_t("Proof")))
     294           .append("</a>\n")
     295
     296           .append("<a href=\"/stats\" target=\"_top\" title=\"")
     297           .append(_t("Textual router performance statistics"))
     298           .append("\">")
     299           .append(nbsp(_t("Stats")))
     300           .append("</a>\n")
     301
     302           .append("<a title=\"")
     303           .append(_t("Review possible sybils in network database"))
     304           .append("\" href=\"/netdb?f=3\">")
     305           .append(nbsp(_t("Sybils")))
     306           .append("</a>\n")
     307
     308           .append("</td></tr></table>");
    250309        return buf.toString();
    251310    }
     
    260319           .append("</a></h3><hr class=\"b\">\n" +
    261320
    262                    "<table><tr>" +
     321                   "<table id=\"sb_localid\"><tr>" +
    263322                   "<td align=\"left\"><b title=\"")
    264323           .append(_t("Your Local Identity is your unique I2P router identity, similar to an ip address but tailored to I2P. "))
     
    278337           .append("</a></td></tr>\n" +
    279338
    280                    "</table><table>" + // fix for some rows with a big left side and some with a big right side
     339                   "</table><table id=\"sb_version\">" + // fix for some rows with a big left side and some with a big right side
    281340                   "<tr title=\"")
    282341           .append(_t("The version of the I2P software we are running"))
     
    289348           .append("</td></tr>\n" +
    290349
    291                    "</table><table>" + // fix for some rows with a big left side and some with a big right side
     350                   "</table><table id=\"sb_uptime\">" + // fix for some rows with a big left side and some with a big right side
    292351                   "<tr title=\"")
    293352           .append(_t("How long we've been running for this session"))
     
    305364        if (_helper == null) return "";
    306365        StringBuilder buf = new StringBuilder(512);
    307         buf.append("<table>" +
     366        buf.append("<table id=\"sb_shortgeneral\">" +
    308367                   "<tr title=\"")
    309368           .append(_t("The version of the I2P software we are running"))
     
    331390        if (_helper == null) return "";
    332391        StringBuilder buf = new StringBuilder(512);
    333         buf.append("<h4><a href=\"/confignet#help\" target=\"_top\" title=\"")
     392        buf.append("<h4><a href=\"/help#confignet\" target=\"_top\" title=\"")
    334393           .append(_t("Help with configuring your firewall and router for optimal I2P performance"))
    335394           .append("\">")
     
    388447           .append("</a></h3><hr class=\"b\">\n" +
    389448
    390                    "<table>\n" +
     449                   "<table id=\"sb_peers\">\n" +
    391450
    392451                   "<tr title=\"")
     
    457516           .append(_t("Bandwidth in/out"))
    458517           .append("</a></h3><hr class=\"b\">" +
    459                    "<table>\n" +
     518                   "<table id=\"sb_bandwidth\">\n" +
    460519
    461520                   "<tr><td align=\"left\"><b>")
     
    501560           .append(_t("Tunnels"))
    502561           .append("</a></h3><hr class=\"b\">" +
    503                    "<table>\n" +
     562                   "<table id=\"sb_tunnels\">\n" +
    504563
    505564                   "<tr title=\"")
     
    551610           .append(_t("Congestion"))
    552611           .append("</a></h3><hr class=\"b\">" +
    553                    "<table>\n" +
     612                   "<table id=\"sb_queue\">\n" +
    554613
    555614                   "<tr title=\"")
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java

    r3266907 re16760d  
    6262    static final String DEFAULT_MINIMAL =
    6363        "ShortGeneral" + S +
     64        "Bandwidth" + S +
    6465        "NewsHeadings" + S +
    6566        "UpdateStatus" + S +
     
    437438           .append(_t("Add/remove/edit &amp; control your client and server tunnels"))
    438439           .append("\">").append(_t("Local Tunnels"))
    439            .append("</a></h3><hr class=\"b\"><div class=\"tunnels\">");
     440           .append("</a></h3><hr class=\"b\">");
    440441        if (!clients.isEmpty()) {
    441442            Collections.sort(clients, new AlphaComparator());
    442             buf.append("<table>");
     443            buf.append("<table id=\"sb_localtunnels\">");
    443444           
    444445            for (Destination client : clients) {
     
    478479            buf.append("<center><i>").append(_t("none")).append("</i></center>");
    479480        }
    480         buf.append("</div>\n");
    481481        return buf.toString();
    482482    }
     
    697697        boolean needSpace = false;
    698698        if (status.length() > 0) {
    699             buf.append("<h4>").append(status).append("</h4>\n");
     699            buf.append("<h4 class=\"sb_info\">").append(status).append("</h4>\n");
    700700            needSpace = true;
    701701        }
     
    713713            else
    714714                needSpace = true;
    715             buf.append("<h4><b>").append(_t("Update downloaded")).append("<br>");
     715            buf.append("<h4 class=\"sb_info\"><b>").append(_t("Update downloaded")).append("<br>");
    716716            if (_context.hasWrapper())
    717717                buf.append(_t("Click Restart to install"));
     
    734734            else
    735735                needSpace = true;
    736             buf.append("<h4><b>").append(_t("Update available")).append(":<br>");
     736            buf.append("<h4 class=\"sb_info\"><b>").append(_t("Update available")).append(":<br>");
    737737            buf.append(_t("Version {0}", getUpdateVersion())).append("<br>");
    738738            buf.append(constraint).append("</b></h4>");
     
    746746            else
    747747                needSpace = true;
    748             buf.append("<h4><b>").append(_t("Update available")).append(":<br>");
     748            buf.append("<h4 class=\"sb_info\"><b>").append(_t("Update available")).append(":<br>");
    749749            buf.append(_t("Version {0}", getUnsignedUpdateVersion())).append("<br>");
    750750            buf.append(unsignedConstraint).append("</b></h4>");
     
    758758            else
    759759                needSpace = true;
    760             buf.append("<h4><b>").append(_t("Update available")).append(":<br>");
     760            buf.append("<h4 class=\"sb_info\"><b>").append(_t("Update available")).append(":<br>");
    761761            buf.append(_t("Version {0}", getDevSU3UpdateVersion())).append("<br>");
    762762            buf.append(devSU3Constraint).append("</b></h4>");
     
    821821        StringBuilder buf = new StringBuilder(256);
    822822        if (showFirewallWarning()) {
    823             buf.append("<h4><a href=\"/confignet\" target=\"_top\" title=\"")
     823            buf.append("<h4 id=\"sb_warning\"><a href=\"/help#configurationhelp\" target=\"_top\" title=\"")
    824824               .append(_t("Help with firewall configuration"))
    825825               .append("\">")
     
    929929
    930930        StringBuilder buf = new StringBuilder(2048);
    931         buf.append("<table class=\"sidebarconf\"><tr><th>")
     931        buf.append("<table id=\"sidebarconf\"><tr><th>")
    932932           .append(_t("Remove"))
    933933           .append("</th><th>")
     
    998998           .append(_t("Delete selected"))
    999999           .append("\"></td><td align=\"left\"><b>")
    1000            .append(_t("Add")).append(":</b> " +
    1001                    "<select name=\"name\">\n" +
     1000           .append("<select name=\"name\">\n" +
    10021001                   "<option value=\"\" selected=\"selected\">")
    10031002           .append(_t("Select a section to add"))
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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 class=\"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 title=\"View extended router info\" class=\"viewfullentry\" 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

    r3266907 re16760d  
    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\" title=\"" + _t("Configure tunnels") + "\">[" + _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) +"\" title=\"" + _t("Configure tunnels for session") + "\">[" + _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/certs.jsp

    r3266907 re16760d  
    1010</head><body onload="initAjax()">
    1111<%@include file="summary.jsi" %><h1><%=intl._t("Certificates")%></h1>
    12 <div class="main" id="main">
     12<div class="main" id="certs">
    1313<jsp:useBean class="net.i2p.router.web.CertHelper" id="certhelper" scope="request" />
    1414<jsp:setProperty name="certhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
  • apps/routerconsole/jsp/config.jsp

    r3266907 re16760d  
    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="config_bandwidth">
    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")%>&nbsp;<a href="confignet">[<%=intl._t("Advanced Network Configuration")%>]</a></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 class="optionsave" colspan="2">
    7980<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    8081<input type="submit" class="accept" name="save" value="<%=intl._t("Save changes")%>" >
    81 </div>
     82  </td></tr>
     83 </table>
    8284</form>
    83 </div></div></body></html>
     85</div></body></html>
  • apps/routerconsole/jsp/configadvanced.jsp

    r3266907 re16760d  
    1717
    1818<h1><%=intl._t("I2P Advanced Configuration")%></h1>
    19 <div class="main" id="main">
     19<div class="main" id="config_advanced">
    2020
    2121 <%@include file="confignav.jsi" %>
     
    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")%>&nbsp;<a title="Help with additional configuration settings" href="/help#advancedsettings">[Additional Options]</a></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

    r3266907 re16760d  
    2222<jsp:setProperty name="clientshelper" property="edit" value="<%=request.getParameter(\"edit\")%>" />
    2323<h1><%=intl._t("I2P Client Configuration")%></h1>
    24 <div class="main" id="main">
     24<div class="main" id="config_clients">
    2525 <%@include file="confignav.jsi" %>
    2626
     
    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")%> :
    148 <input type="file" name="pluginFile" >
    149 </p><hr><div class="formaction">
     169<%=intl._t("Select xpi2p or su3 file")%>:&nbsp;
     170<input type="file" name="pluginFile" accept=".xpi2p,.su3" >
     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

    r3266907 re16760d  
    1515<jsp:setProperty name="familyHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    1616<h1><%=intl._t("I2P Router Family Configuration")%></h1>
    17 <div class="main" id="main">
     17<div class="main" id="config_family">
    1818<%@include file="confignav.jsi" %>
    1919
     
    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

    r3266907 re16760d  
    1919<%@include file="summary.jsi" %>
    2020<h1><%=intl._t("I2P Home Page Configuration")%></h1>
    21 <div class="main" id="main">
     21<div class="main" id="config_homepage">
    2222<%@include file="confignav.jsi" %>
    2323
     
    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

    r3266907 re16760d  
    1212<%@include file="summary.jsi" %>
    1313<h1><%=intl._t("I2P Keyring Configuration")%></h1>
    14 <div class="main" id="main">
     14<div class="main" id="config_keyring">
    1515 <%@include file="confignav.jsi" %>
    1616
     
    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

    r3266907 re16760d  
    1515<%@include file="summary.jsi" %>
    1616<h1><%=intl._t("I2P Logging Configuration")%></h1>
    17 <div class="main" id="main">
     17<div class="main" id="config_logging">
    1818 <%@include file="confignav.jsi" %>
    1919
    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")%>&nbsp;<a title="<%=intl._t("View Router Logs")%>" href="/logs">[<%=intl._t("View Logs")%>]</a></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

    r3266907 re16760d  
    1515<jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    1616<h1><%=intl._t("I2P Network Configuration")%></h1>
    17 <div class="main" id="main">
     17<div class="main" id="config_network">
    1818 <%@include file="confignav.jsi" %>
    1919
    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="">
    28  <b><%=intl._t("The default settings will work for most people.")%>
    29  <a href="#chelp"><%=intl._t("There is help below.")%></a></b>
    30  </p><p><b><%=intl._t("UPnP Configuration")%>:</b><br>
     25 <h3 id="iptransport" class="tabletitle"><%=intl._t("IP and Transport Configuration")%>&nbsp;<a title="<%=intl._t("Help with router configuration")%>" href="/help#configurationhelp">[<%=intl._t("Configuration Help")%>]</a></h3>
     26 <table id="netconfig" class="configtable">
     27 <tr>
     28  <td class="infohelp">
     29 <b><%=intl._t("The default settings will work for most people.")%></b>
     30 <%=intl._t("Changing these settings will restart your router.")%>
     31  </td>
     32 </tr>
     33 <tr>
     34  <th id="upnpconfig"><%=intl._t("UPnP Configuration")%>&nbsp;<a href="peers#upnp">[<%=intl._t("UPnP Status")%>]</a></th>
     35 </tr>
     36 <tr>
     37  <td>
    3138    <input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> >
    32     <%=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>
     39    <%=intl._t("Enable UPnP to open firewall ports")%>
     40  </td>
     41 </tr>
     42 <tr>
     43  <th id="ipconfig"><%=intl._t("IP Configuration")%></th>
     44 </tr>
     45 <tr>
     46  <td>
    3447 <%=intl._t("Externally reachable hostname or IP address")%>:<br>
    3548    <input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> >
     
    4457    <%=intl._t("Hidden mode - do not publish IP")%> <i><%=intl._t("(prevents participating traffic)")%></i><br>
    4558    <input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> >
    46     <%=intl._t("Specify hostname or IP")%>:<br>
     59    <%=intl._t("Specify hostname or IP")%>:
    4760    <%=nethelper.getAddressSelector() %>
    48  </p><p>
    49  <%=intl._t("Action when IP changes")%>:<br>
     61  </td>
     62 </tr>
     63 <tr>
     64  <th id="ipchange"><%=intl._t("Action when IP changes")%></th>
     65 </tr>
     66 <tr>
     67  <td>
    5068    <input type="checkbox" class="optbox" name="laptop" value="true" <jsp:getProperty name="nethelper" property="laptopChecked" /> >
    5169    <%=intl._t("Laptop mode - Change router identity and UDP port when IP changes for enhanced anonymity")%>
    5270    (<i><%=intl._t("Experimental")%></i>)
    53  </p><p>
    54  <%=intl._t("IPv4 Configuration")%>:<br>
     71  </td>
     72 </tr>
     73 <tr>
     74  <th id="ipv4config"><%=intl._t("IPv4 Configuration")%></th>
     75 </tr>
     76 <tr>
     77  <td>
    5578    <input type="checkbox" class="optbox" name="IPv4Firewalled" value="true" <jsp:getProperty name="nethelper" property="IPv4FirewalledChecked" /> >
    5679    <%=intl._t("Disable inbound (Firewalled by Carrier-grade NAT or DS-Lite)")%>
    57  </p><p>
    58  <%=intl._t("IPv6 Configuration")%>:<br>
     80  </td>
     81 </tr>
     82 <tr>
     83  <th id="ipv6config"><%=intl._t("IPv6 Configuration")%></th>
     84 </tr>
     85 <tr>
     86  <td>
    5987    <input type="radio" class="optbox" name="ipv6" value="false" <%=nethelper.getIPv6Checked("false") %> >
    6088    <%=intl._t("Disable IPv6")%><br>
     
    6795    <input type="radio" class="optbox" name="ipv6" value="only" <%=nethelper.getIPv6Checked("only") %> >
    6896    <%=intl._t("Use IPv6 only (disable IPv4)")%>
    69     (<i><%=intl._t("Experimental")%></i>)<br>
    70  </p><p><b><%=intl._t("UDP Configuration:")%></b><br>
     97    (<i><%=intl._t("Experimental")%></i>)
     98  </td>
     99 </tr>
     100 <tr>
     101  <th id="udpconfig"><%=intl._t("UDP Configuration")%></th>
     102 </tr>
     103 <tr>
     104  <td class="infowarn">
     105   <b><%=intl._t("Do not reveal your port numbers to anyone as they can be used to discover your ip address.")%></b>
     106  </td>
     107 </tr>
     108 <tr>
     109  <td>
    71110 <%=intl._t("UDP port:")%>
    72111 <input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" ><br>
    73112 <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>
     113 <%=intl._t("Completely disable")%> <i><%=intl._t("(select only if behind a firewall that blocks outbound UDP)")%></i>
     114  </td>
     115 </tr>
    75116<% /********
    76117<!-- let's keep this simple...
     
    82123-->
    83124*********/ %>
    84  </p><p>
    85  <b><%=intl._t("TCP Configuration")%>:</b><br>
     125 <tr>
     126  <th id="tcpconfig"><%=intl._t("TCP Configuration")%></th>
     127 </tr>
     128 <tr>
     129  <td>
    86130 <%=intl._t("Externally reachable hostname or IP address")%>:<br>
    87131    <input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> >
     
    97141    <%=intl._t("Disable inbound (Firewalled)")%><br>
    98142    <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>
     143    <%=intl._t("Completely disable")%> <i><%=intl._t("(select only if behind a firewall that throttles or blocks outbound TCP)")%></i>
     144  </td>
     145 </tr>
     146 <tr>
     147  <th id="externaltcp"><%=intl._t("Externally reachable TCP port")%></th>
     148 </tr>
     149 <tr>
     150  <td>
    102151    <input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> >
    103152    <%=intl._t("Use the same port configured for UDP")%>
     
    105154    <input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> >
    106155    <%=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">
     156    <input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" >
     157  </td>
     158 </tr>
     159 <tr>
     160  <td class="optionsave">
    110161<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    111162<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>
     163  </td>
     164 </tr>
     165</table>
     166
    120167<% /********
    121168<!-- let's keep this simple...
     
    124171-->
    125172*********/ %>
    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>
    203173<% /********
    204174      <!--
     
    222192-->
    223193*********/ %>
    224 </div></form></div></div></body></html>
     194</form></div></body></html>
  • apps/routerconsole/jsp/configpeer.jsp

    r3266907 re16760d  
    1212<%@include file="summary.jsi" %>
    1313<h1><%=intl._t("I2P Peer Configuration")%></h1>
    14 <div class="main" id="main">
     14<div class="main" id="config_peers">
    1515 <%@include file="confignav.jsi" %>
    1616
     
    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

    r3266907 re16760d  
    1515<jsp:setProperty name="reseedHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    1616<h1><%=intl._t("I2P Reseeding Configuration")%></h1>
    17 <div class="main" id="main">
     17<div class="main" id="config_reseed">
    1818<%@include file="confignav.jsi" %>
    1919
     
    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")%> :
    45 <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">
     55  <td>
     56<%=intl._t("Select zip or su3 file")%>:
     57<input name="file" type="file" accept=".zip,.su3" value="" />
     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

    r3266907 re16760d  
    1212<%@include file="summary.jsi" %>
    1313<h1><%=intl._t("I2P Service Configuration")%></h1>
    14 <div class="main" id="main">
     14<div class="main" id="config_service">
    1515 <%@include file="confignav.jsi" %>
    1616
    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 (formhandler.shouldShowSystray()) { %>
    43  <h3><%=intl._t("Systray integration")%></h3>
    44  <p><%=intl._t("Control the system tray icon")%>
    45  <hr><div class="formaction">
     45 <h3 class="ptitle" id="systray"><%=intl._t("Systray integration")%></h3>
     46 <p class="infohelp"><%=intl._t("Control the system tray icon")%></p>
     47 <hr><div class="formaction" id="systray">
    4648<% if (!formhandler.isSystrayEnabled()) { %>
    4749 <input type="submit" name="action" class="accept" value="<%=intl._t("Show systray icon")%>" >
     
    5456   if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
    5557%>
    56  <h3><%=intl._t("Run on startup")%></h3>
    57  <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.")%>
     58 <h3 class="ptitle" id="runonstartup"><%=intl._t("Run on startup")%></h3>
     59 <p class="infohelp">
     60    <%=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.")%>
    5861    <%=intl._t("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._t("or")%>
    5962 <code>uninstall_i2p_service_winnt.bat</code>).</p>
    60  <hr><div class="formaction">
     63 <hr><div class="formaction" id="runonstart">
    6164 <input type="submit" name="action" class="accept" value="<%=intl._t("Run I2P on startup")%>" >
    62 <input type="submit" name="action" class="cancel" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
    63  <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.")%>
     65 <input type="submit" name="action" class="cancel" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
     66 <p class="infohelp" id="winfoservice"><b>
     67    <%=intl._t("Note")%>:</b> <%=intl._t("If you are running I2P as service right now, removing it will shut down your router immediately.")%>
    6468    <%=intl._t("You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat.")%></p>
     69 <% } %>
     70
     71 <h3 class="ptitle" id="servicedebug"><%=intl._t("Debugging")%>&nbsp;<a href="/jobs">[<%=intl._t("View the job queue")%>]</a></h3>
     72<% if (System.getProperty("wrapper.version") != null) { %>
     73 <p class="infohelp">
     74    <%=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>
     75 <hr>
    6576<% } %>
    66 
    67  <h3><%=intl._t("Debugging")%></h3>
    68  <p><a href="/jobs"><%=intl._t("View the job queue")%></a>
    69 <% if (System.getProperty("wrapper.version") != null) { %>
    70  <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>
    71   <hr>
    72 <% } %>
    73  <div class="formaction">
     77 <div class="formaction" id="dumpthreads">
    7478 <input type="submit" class="reload" name="action" value="<%=intl._t("Force GC")%>" >
    7579<% if (System.getProperty("wrapper.version") != null) { %>
     
    7882 </div>
    7983
    80  <h3><%=intl._t("Launch browser on router startup?")%></h3>
    81  <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")%>
     84 <h3 class="ptitle" id="browseronstart"><%=intl._t("Launch browser on router startup?")%></h3>
     85 <p class="infohelp">
     86    <%=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")%>
    8287 <a href="http://127.0.0.1:7657/">http://127.0.0.1:7657/</a> .</p>
    83  <hr><div class="formaction">
     88 <hr><div class="formaction" id="browserstart">
    8489 <input type="submit" class="check" name="action" value="<%=intl._t("View console on startup")%>" >
    8590 <input type="submit" class="delete" name="action" value="<%=intl._t("Do not view console on startup")%>" >
    86 </div></form></div></div></body></html>
     91</div></form></div></body></html>
  • apps/routerconsole/jsp/configsidebar.jsp

    r3266907 re16760d  
    1919<%@include file="summary.jsi" %>
    2020<h1><%=intl._t("I2P Summary Bar Configuration")%></h1>
    21 <div class="main" id="main">
     21<div class="main" id="config_summarybar">
    2222<%@include file="confignav.jsi" %>
    2323
     
    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

    r3266907 re16760d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("config stats")%>
     9<noscript><style>.script {display: none;}</style></noscript>
    910<script src="/js/ajax.js" type="text/javascript"></script>
    1011<%@include file="summaryajax.jsi" %>
     
    6364<%@include file="summary.jsi" %>
    6465<h1><%=intl._t("I2P Stats Configuration")%></h1>
    65 <div class="main" id="main">
     66<div class="main" id="config_stats">
    6667 <%@include file="confignav.jsi" %>
    6768
     
    7475 <input type="hidden" name="action" value="foo" >
    7576 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
    76  <h3><%=intl._t("Configure I2P Stat Collection")%></h3>
    77  <p><%=intl._t("Enable full stats?")%>
     77 <h3 class="ptitle"><%=intl._t("Configure I2P Stat Collection")%>&nbsp;<a class="script" title="<%=intl._t("Toggle full stat collection and all graphing options")%>" href="javascript:void(null);" onclick="toggleAll('*')">[<%=intl._t("toggle all")%>]</a></h3>
     78 <p id="enablefullstats"><b><%=intl._t("Enable full stats?")%></b>
    7879 <input type="checkbox" class="optbox" name="isFull" value="true" <%
    7980 if (statshelper.getIsFull()) { %>checked="checked" <% } %> >
     
    8586  if (shouldShowLog) {
    8687
    87 %><%=intl._t("Stat file")%>: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" ><br>
     88%><%=intl._t("Stat file")%>: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" >
    8889Warning - Log with care, stat file grows without limit.<br>
    8990<%
     
    9192  }  // shouldShowLog
    9293
    93 %><%=intl._t("Filter")%>: (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._t("toggle all")%></a>)<br></p>
     94%></p>
    9495 <div class="wideload">
    95  <table>
     96 <table id="configstats">
    9697 <% while (statshelper.hasMoreStats()) {
    9798      while (statshelper.groupRequired()) { %>
    98  <tr class="tablefooter">
    99      <td align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
     99 <tr>
     100     <th align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
    100101     <b><%=intl._t(statshelper.getCurrentGroupName())%></b>
    101      (<a href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._t("toggle all")%></a>)
    102      </td></tr>
     102     <a class="script" title="<%=intl._t("Toggle section graphing options")%>" href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')">[<%=intl._t("toggle all")%>]</a>
     103     </th></tr>
    103104 <tr class="tablefooter">
    104105<%
     
    111112  }  // shouldShowLog
    112113
    113 %>    <td align="center"><b><%=intl._t("Graph")%></b></td>
     114%>    <td align="center"><b title="<%=intl._t("Select stats for visualization on /graphs")%>"><%=intl._t("Graph")%></b></td>
    114115    <td></td></tr>
    115116        <%
     
    132133       <input type="checkbox" class="optbox <%=statshelper.getCurrentGroupName()%>" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <%
    133134       if (statshelper.getCurrentIsGraphed()) { %>checked="checked" <% } %> ><% } %></td>
    134      <td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br>
     135     <td align="left"><b><%=statshelper.getCurrentStatName()%>:</b>&nbsp;
    135136     <%=statshelper.getCurrentStatDescription()%></td></tr><%
    136137    } // end iterating over all stats
     
    146147  }  // shouldShowLog
    147148
    148 %>   <tr class="tablefooter"><td colspan="3" align="right">
     149%>   <tr class="tablefooter"><td colspan="3" align="right" class="optionsave">
    149150<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
    150151<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
  • apps/routerconsole/jsp/configtunnels.jsp

    r3266907 re16760d  
    1515<jsp:setProperty name="tunnelshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    1616<h1><%=intl._t("I2P Tunnel Configuration")%></h1>
    17 <div class="main" id="main">
     17<div class="main" id="config_tunnels">
    1818 <%@include file="confignav.jsi" %>
    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

    r3266907 re16760d  
    2424
    2525<h1><%=uihelper._t("I2P UI Configuration")%></h1>
    26 <div class="main" id="main">
     26<div class="main" id="config_ui">
    2727
    2828 <%@include file="confignav.jsi" %>
     
    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

    r3266907 re16760d  
    1313<%@include file="summary.jsi" %>
    1414<h1><%=intl._t("I2P Update Configuration")%></h1>
    15 <div class="main" id="main">
     15<div class="main" id="config_update">
    1616 <%@include file="confignav.jsi" %>
    1717
     
    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/debug.jsp

    r3266907 re16760d  
    1515<%@include file="summary.jsi" %>
    1616<h1>Router Debug</h1>
    17 <div class="main" id="main">
     17<div class="main" id="debug">
    1818<%
    1919    /*
  • apps/routerconsole/jsp/dns.jsp

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
     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

    r3266907 re16760d  
    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="advancedsettings"><%@include file="help-advancedsettings.jsi" %></div>
     24<div id="legal"><%@include file="help-legal.jsi" %></div>
     25<div id="changelog">
    2326<h2>Change Log</h2>
    2427 <jsp:useBean class="net.i2p.router.web.ContentHelper" id="contenthelper" scope="request" />
     
    2831 <jsp:setProperty name="contenthelper" property="startAtBeginning" value="true" />
    2932 <jsp:getProperty name="contenthelper" property="textContent" />
     33<p id="fullhistory"><a href="/history.txt" target="_blank">View the full change log</a></p>
     34</div>
    3035
    31  <p><a href="/history.txt">View the full change log</a>
    32  </p><hr></div></body></html>
     36</div></body></html>
  • apps/routerconsole/jsp/help_ar.jsp

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

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

    r3266907 re16760d  
    9898%>
    9999  <div class="search">
    100     <form action="/search.jsp" method="POST">
     100    <form action="/search.jsp" target="_blank" method="POST">
    101101      <table class="search"><tr><td align="right">
    102102        <input size="40" type="text" class="search" name="query" />
    103103      </td><td align="left">
    104         <button type="submit" value="search" class="search"><%=intl._t("Search I2P")%></button>
     104        <button type="submit" value="search" class="search"><%=intl._t("Search")%></button>
    105105      </td><td align="left">
    106106        <jsp:useBean class="net.i2p.router.web.SearchHelper" id="searchhelper" scope="request" />
  • apps/routerconsole/jsp/i2ptunnelmgr.jsp

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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>
     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")%>&nbsp;<a title="<%=intl._t("Configure router logging options")%>" 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" id="servicelogs"><%=intl._t("Service (Wrapper) Logs")%></h3>
     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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

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

    r3266907 re16760d  
    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="peers">
    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

    r3266907 re16760d  
    1212<%@include file="summary.jsi" %>
    1313<h1><%=intl._t("I2P Network Peer Profiles")%></h1>
    14 <div class="main" id="main"><div class="wideload">
     14<div class="main" id="profiles"><div class="wideload">
    1515 <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
    1616 <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     
    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

    r3266907 re16760d  
    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="proof"><p>
    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

    r3266907 re16760d  
    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/torrents.jsp

    r3266907 re16760d  
    3131<%@include file="summary.jsi" %>
    3232
    33 <h1><%=intl._t("I2P Torrent Downloader")%> <span class="newtab"><a href="/i2psnark/" 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">
     33<h1><%=intl._t("I2P Torrent Manager")%> <span class="newtab"><a href="/i2psnark/" 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="torrents">
    3535<iframe src="/i2psnark/" width="100%" height="100%" frameborder="0" border="0" name="i2psnarkframe" id="i2psnarkframe" onload="setupFrame()" allowtransparency="true">
    3636<%=intl._t("Your browser does not support iFrames.")%>
  • apps/routerconsole/jsp/tunnels.jsp

    r3266907 re16760d  
    1111</head><body onload="initAjax()">
    1212<%@include file="summary.jsi" %><h1><%=intl._t("I2P Tunnel Summary")%></h1>
    13 <div class="main" id="main">
     13<div class="main" id="tunnels">
    1414 <jsp:useBean class="net.i2p.router.web.TunnelHelper" id="tunnelHelper" scope="request" />
    1515 <jsp:setProperty name="tunnelHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
  • apps/routerconsole/jsp/viewprofile.jsp

    r3266907 re16760d  
    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/routerconsole/jsp/webmail.jsp

    r3266907 re16760d  
    3232
    3333<h1><%=intl._t("I2P Webmail")%> <span class="newtab"><a href="/susimail/susimail" 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="webmail">
    3535<iframe src="/susimail/susimail" width="100%" height="100%" frameborder="0" border="0" name="susimailframe" id="susimailframe" onload="setupFrame()" allowtransparency="true">
    3636<%=intl._t("Your browser does not support iFrames.")%>
  • apps/susidns/src/jsp/addressbook.jsp

    r3266907 re16760d  
    113113<a href="addressbook?filter=none&amp;begin=0&amp;end=49"><%=intl._t("all")%></a></p>
    114114<c:if test="${book.hasFilter}">
    115 <p><%=intl._t("Current filter")%>: ${book.filter}
    116 (<a href="addressbook?filter=none&amp;begin=0&amp;end=49"><%=intl._t("clear filter")%></a>)</p>
     115<p><%=intl._t("Current filter")%>: <b>${book.filter}</b>
     116<a href="addressbook?filter=none&amp;begin=0&amp;end=49"><%=intl._t("clear filter")%></a></p>
    117117</c:if>
    118118</div>
  • apps/susidns/src/jsp/config.jsp

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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

    r3266907 re16760d  
    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 class=\"attached\">" );
    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( "</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