Changeset 77d40f8d


Ignore:
Timestamp:
Jul 16, 2012 4:17:19 PM (8 years ago)
Author:
str4d <str4d@…>
Branches:
master
Children:
a28dab9b, c33c025
Parents:
69cdcc8 (diff), 619b766c (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.str4d.fux' (head 48cafeb29fb3408078a8b93c0bab0fc9d766a8bc)

to branch 'i2p.i2p' (head 47f04ff21e8edd00134a0fd68219f86fd3caba36)

Files:
79 added
81 edited
8 moved

Legend:

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

    r69cdcc8 r77d40f8d  
    233233                out.write("<script src=\"/js/ajax.js\" type=\"text/javascript\"></script>\n" +
    234234                          "<script type=\"text/javascript\">\n"  +
    235                           "var failMessage = \"<b>" + _("Router is down") + "<\\/b>\";\n" +
     235                          "var failMessage = \"<div class=\"routerdown\"><b>" + _("Router is down") + "<\\/b></div>\";\n" +
    236236                          "function requestAjax1() { ajax(\"/i2psnark/.ajax/xhr1.html" + peerString + "\", \"mainsection\", " + (delay*1000) + "); }\n" +
    237237                          "function initAjax(delayMs) { setTimeout(requestAjax1, " + (delay*1000) +");  }\n"  +
     
    13261326     *  @since 0.8.4
    13271327     */
    1328     private String getTrackerLink(String announce, byte[] infohash) {
     1328    private String getTrackerLinkUrl(String announce, byte[] infohash) {
    13291329        // temporarily hardcoded for postman* and anonymity, requires bytemonsoon patch for lookup by info_hash
    13301330        if (announce != null && (announce.startsWith("http://YRgrgTLG") || announce.startsWith("http://8EoJZIKr") ||
     
    13421342                buf.append("<a href=\"").append(baseURL).append("details.php?dllist=1&amp;filelist=1&amp;info_hash=")
    13431343                   .append(TrackerClient.urlencode(infohash))
    1344                    .append("\" title=\"").append(_("Details at {0} tracker", name)).append("\" target=\"_blank\">" +
    1345                           "<img alt=\"").append(_("Info")).append("\" border=\"0\" src=\"")
    1346                    .append(_imgPath).append("details.png\"></a>");
     1344                   .append("\" title=\"").append(_("Details at {0} tracker", name)).append("\" target=\"_blank\">");
    13471345                return buf.toString();
    13481346            }
     1347        }
     1348        return null;
     1349    }
     1350
     1351    /**
     1352     *  @return string or null
     1353     *  @since 0.8.4
     1354     */
     1355    private String getTrackerLink(String announce, byte[] infohash) {
     1356        String linkUrl = getTrackerLinkUrl(announce, infohash);
     1357        if (linkUrl != null) {
     1358            StringBuilder buf = new StringBuilder(128);
     1359            buf.append(linkUrl)
     1360               .append("<img alt=\"").append(_("Info")).append("\" border=\"0\" src=\"")
     1361               .append(_imgPath).append("details.png\"></a>");
     1362            return buf.toString();
    13491363        }
    13501364        return null;
     
    15611575                  + _manager.util().getMaxUpBW() + "\" size=\"4\" maxlength=\"4\" > KBps <i>");
    15621576        out.write(_("Half available bandwidth recommended."));
    1563         out.write("<br><a href=\"/config.jsp\" target=\"blank\">");
     1577        out.write(" [<a href=\"/config.jsp\" target=\"blank\">");
    15641578        out.write(_("View or change router bandwidth"));
    1565         out.write("</a></i><br>\n" +
     1579        out.write("</a>]</i><br>\n" +
    15661580       
    15671581                  "<tr><td>");
     
    16411655        buf.append(_("Trackers"));
    16421656        buf.append("</span><hr>\n"   +
    1643                    "<table><tr><th>")
     1657                   "<table class=\"trackerconfig\"><tr><th>")
    16441658           //.append(_("Remove"))
    16451659           .append("</th><th>")
     
    16601674            String homeURL = t.baseURL;
    16611675            String announceURL = t.announceURL.replace("&#61;", "=");
    1662             buf.append("<tr><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
     1676            buf.append("<tr><td><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
    16631677               .append(name).append("\" title=\"").append(_("Delete")).append("\">" +
    1664                        "</td><td align=\"left\">").append(name)
    1665                .append("</td><td align=\"left\">").append(urlify(homeURL, 35))
    1666                .append("</td><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"open_")
     1678                       "</td><td>").append(name)
     1679               .append("</td><td>").append(urlify(homeURL, 35))
     1680               .append("</td><td><input type=\"checkbox\" class=\"optbox\" name=\"open_")
    16671681               .append(announceURL).append("\"");
    16681682            if (openTrackers.contains(t.announceURL))
    16691683                buf.append(" checked=\"checked\"");
    16701684            buf.append(">" +
    1671                        "</td><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"private_")
     1685                       "</td><td><input type=\"checkbox\" class=\"optbox\" name=\"private_")
    16721686               .append(announceURL).append("\"");
    16731687            if (privateTrackers.contains(t.announceURL)) {
     
    16821696            }
    16831697            buf.append(">" +
    1684                        "</td><td align=\"left\">").append(urlify(announceURL, 35))
     1698                       "</td><td>").append(urlify(announceURL, 35))
    16851699               .append("</td></tr>\n");
    16861700        }
    1687         buf.append("<tr><td align=\"center\"><b>")
     1701        buf.append("<tr><td><b>")
    16881702           .append(_("Add")).append(":</b></td>" +
    1689                    "<td align=\"left\"><input type=\"text\" size=\"16\" name=\"tname\"></td>" +
    1690                    "<td align=\"left\"><input type=\"text\" size=\"40\" name=\"thurl\"></td>" +
    1691                    "<td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"_add_open_\"></td>" +
    1692                    "<td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"_add_private_\"></td>" +
    1693                    "<td align=\"left\"><input type=\"text\" size=\"40\" name=\"taurl\"></td></tr>\n" +
    1694                    "<tr><td colspan=\"2\"></td><td colspan=\"4\" align=\"left\">\n" +
     1703                   "<td><input type=\"text\" class=\"trackername\" name=\"tname\"></td>" +
     1704                   "<td><input type=\"text\" class=\"trackerhome\" name=\"thurl\"></td>" +
     1705                   "<td><input type=\"checkbox\" class=\"optbox\" name=\"_add_open_\"></td>" +
     1706                   "<td><input type=\"checkbox\" class=\"optbox\" name=\"_add_private_\"></td>" +
     1707                   "<td><input type=\"text\" class=\"trackerannounce\" name=\"taurl\"></td></tr>\n" +
     1708                   "<tr><td colspan=\"2\"></td><td colspan=\"4\">\n" +
    16951709                   "<input type=\"submit\" name=\"taction\" class=\"default\" value=\"").append(_("Add tracker")).append("\">\n" +
    16961710                   "<input type=\"submit\" name=\"taction\" class=\"delete\" value=\"").append(_("Delete selected")).append("\">\n" +
     
    20502064        if (showPriority)
    20512065            buf.append("<form action=\"").append(base).append("\" method=\"POST\">\n");
    2052         buf.append("<TABLE BORDER=0 class=\"snarkTorrents\" ><thead>");
    20532066        if (snark != null) {
    2054             // first row - torrent info
    2055             // FIXME center
    2056             buf.append("<tr><th colspan=\"" + (showPriority ? '4' : '3') + "\"><div>")
    2057                 .append(_("Torrent")).append(": ").append(snark.getBaseName());
    2058             int pieces = snark.getPieces();
    2059             double completion = (pieces - snark.getNeeded()) / (double) pieces;
    2060             if (completion < 1.0)
    2061                 buf.append("<br>").append(_("Completion")).append(": ").append((new DecimalFormat("0.00%")).format(completion));
    2062             else
    2063                 buf.append("<br>").append(_("Complete"));
    2064             // else unknown
    2065             long needed = snark.getNeededLength();
    2066             if (needed > 0)
    2067                 buf.append("<br>").append(_("Remaining")).append(": ").append(formatSize(needed));
    2068             buf.append("<br>").append(_("Size")).append(": ").append(formatSize(snark.getTotalLength()));
     2067            // first table - torrent info
     2068            buf.append("<table class=\"snarkTorrentInfo\">\n");
     2069            buf.append("<tr><th><b>")
     2070               .append(_("Torrent"))
     2071               .append(":</b> ")
     2072               .append(snark.getBaseName())
     2073               .append("</th></tr>\n");
     2074
     2075            buf.append("<tr><td>")
     2076               .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "file.png\" >&nbsp;<b>")
     2077               .append(_("Torrent file"))
     2078               .append(":</b> ")
     2079               .append(snark.getName())
     2080               .append("</td></tr>\n");
     2081
    20692082            MetaInfo meta = snark.getMetaInfo();
    2070             if (meta != null) {
    2071                 List files = meta.getFiles();
    2072                 int fileCount = files != null ? files.size() : 1;
    2073                 buf.append("<br>").append(_("Files")).append(": ").append(fileCount);
    2074             }
    2075             buf.append("<br>").append(_("Pieces")).append(": ").append(pieces);
    2076             buf.append("<br>").append(_("Piece size")).append(": ").append(formatSize(snark.getPieceLength(0)));
    2077 
    20782083            if (meta != null) {
    20792084                String announce = meta.getAnnounce();
    20802085                if (announce != null) {
    2081                     buf.append("<br>");
     2086                    buf.append("<tr><td>");
    20822087                    String trackerLink = getTrackerLink(announce, snark.getInfoHash());
    20832088                    if (trackerLink != null)
    20842089                        buf.append(trackerLink).append(' ');
    2085                     buf.append(_("Tracker")).append(": ");
     2090                    buf.append("<b>").append(_("Tracker")).append(":</b> ");
     2091                    String trackerLinkUrl = getTrackerLinkUrl(announce, snark.getInfoHash());
     2092                    if (trackerLinkUrl != null)
     2093                        buf.append(trackerLinkUrl);
    20862094                    if (announce.startsWith("http://"))
    20872095                        announce = announce.substring(7);
     
    20922100                        announce = announce.substring(0, 40) + "&hellip;" + announce.substring(announce.length() - 8);
    20932101                    buf.append(announce);
     2102                    if (trackerLinkUrl != null)
     2103                        buf.append("</a>");
     2104                    buf.append("</td></tr>");
    20942105                }
    20952106            }
     
    20972108            String hex = I2PSnarkUtil.toHex(snark.getInfoHash());
    20982109            if (meta == null || !meta.isPrivate()) {
    2099                 buf.append("<br>").append(toImg("magnet", _("Magnet link"))).append(" <a href=\"")
     2110                buf.append("<tr><td><a href=\"")
    21002111                   .append(MAGNET_FULL).append(hex).append("\">")
    2101                    .append(MAGNET_FULL).append(hex).append("</a>");
     2112                   .append(toImg("magnet", _("Magnet link")))
     2113                   .append("</a> <b>Magnet:</b> <a href=\"")
     2114                   .append(MAGNET_FULL).append(hex).append("\">")
     2115                   .append(MAGNET_FULL).append(hex).append("</a>")
     2116                   .append("</td></tr>\n");
    21022117            } else {
    2103                 buf.append("<br>").append(_("Private torrent"));
     2118                buf.append("<tr><td>")
     2119                   .append(_("Private torrent"))
     2120                   .append("</td></tr>\n");
    21042121            }
    21052122            // We don't have the hash of the torrent file
    2106             //buf.append("<br>").append(_("Maggot link")).append(": <a href=\"").append(MAGGOT).append(hex).append(':').append(hex).append("\">")
    2107             //   .append(MAGGOT).append(hex).append(':').append(hex).append("</a>");
    2108             buf.append("<br>").append(_("Torrent file")).append(": ").append(snark.getName());
    2109             buf.append("</div></th></tr>");
     2123            //buf.append("<tr><td>").append(_("Maggot link")).append(": <a href=\"").append(MAGGOT).append(hex).append(':').append(hex).append("\">")
     2124            //   .append(MAGGOT).append(hex).append(':').append(hex).append("</a></td></tr>");
     2125
     2126            buf.append("<tr><td>")
     2127               .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "size.png\" >&nbsp;<b>")
     2128               .append(_("Size"))
     2129               .append(":</b> ")
     2130               .append(formatSize(snark.getTotalLength()));
     2131            int pieces = snark.getPieces();
     2132            double completion = (pieces - snark.getNeeded()) / (double) pieces;
     2133            if (completion < 1.0)
     2134                buf.append("&nbsp;<img alt=\"\" border=\"0\" src=\"" + _imgPath + "head_rx.png\" >&nbsp;<b>")
     2135                   .append(_("Completion"))
     2136                   .append(":</b> ")
     2137                   .append((new DecimalFormat("0.00%")).format(completion));
     2138            else
     2139                buf.append("&nbsp;<img alt=\"\" border=\"0\" src=\"" + _imgPath + "head_rx.png\" >&nbsp;")
     2140                   .append(_("Complete"));
     2141            // else unknown
     2142            long needed = snark.getNeededLength();
     2143            if (needed > 0)
     2144                buf.append("&nbsp;<img alt=\"\" border=\"0\" src=\"" + _imgPath + "head_rx.png\" >&nbsp;<b>")
     2145                   .append(_("Remaining"))
     2146                   .append(":</b> ")
     2147                   .append(formatSize(needed));
     2148            if (meta != null) {
     2149                List files = meta.getFiles();
     2150                int fileCount = files != null ? files.size() : 1;
     2151                buf.append("&nbsp;<img alt=\"\" border=\"0\" src=\"" + _imgPath + "file.png\" >&nbsp;<b>")
     2152                   .append(_("Files"))
     2153                   .append(":</b> ")
     2154                   .append(fileCount);
     2155            }
     2156            buf.append("&nbsp;<img alt=\"\" border=\"0\" src=\"" + _imgPath + "file.png\" >&nbsp;<b>")
     2157               .append(_("Pieces"))
     2158               .append(":</b> ")
     2159               .append(pieces);
     2160            buf.append("&nbsp;<img alt=\"\" border=\"0\" src=\"" + _imgPath + "file.png\" >&nbsp;<b>")
     2161               .append(_("Piece size"))
     2162               .append(":</b> ")
     2163               .append(formatSize(snark.getPieceLength(0)))
     2164               .append("</td></tr>\n");
    21102165        } else {
    21112166            // shouldn't happen
     
    21132168               .append("\"<br>base=\"").append(base)
    21142169               .append("\"<br>torrent=\"").append(torrentName)
    2115                .append("\"</th></tr>");
    2116         }
     2170               .append("\"</th></tr>\n");
     2171        }
     2172        buf.append("</table>\n");
    21172173        if (ls == null) {
    21182174            // We are only showing the torrent info section
    2119             buf.append("</thead></table></div></div></BODY></HTML>");
     2175            buf.append("</div></div></BODY></HTML>");
    21202176            return buf.toString();
    21212177        }
    21222178
    2123         // second row - dir info
    2124         buf.append("<tr><th>")
    2125             .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "file.png\" >&nbsp;")
    2126             .append(_("Directory")).append(": ").append(directory).append("</th><th align=\"right\">")
    2127             .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "size.png\" >&nbsp;")
    2128             .append(_("Size"));
    2129         buf.append("</th><th class=\"headerstatus\">")
    2130             .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "status.png\" >&nbsp;")
    2131             .append(_("Status")).append("</th>");
     2179        // second table - dir info
     2180        buf.append("<table class=\"snarkDirInfo\"><thead>\n");
     2181        buf.append("<tr>\n")
     2182           .append("<th colspan=2>")
     2183           .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "file.png\" >&nbsp;")
     2184           .append(_("Directory"))
     2185           .append(": ")
     2186           .append(directory)
     2187           .append("</th>\n");
     2188        buf.append("<th align=\"right\">")
     2189           .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "size.png\" >&nbsp;")
     2190           .append(_("Size"))
     2191           .append("</th>\n");
     2192        buf.append("<th class=\"headerstatus\">")
     2193           .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "status.png\" >&nbsp;")
     2194           .append(_("Status"))
     2195           .append("</th>\n");
    21322196        if (showPriority)
    21332197            buf.append("<th class=\"headerpriority\">")
    2134             .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "priority.png\" >&nbsp;")
    2135             .append(_("Priority")).append("</th>");
    2136         buf.append("</tr></thead>\n");
    2137         buf.append("<tr><td colspan=\"" + (showPriority ? '4' : '3') + "\" class=\"ParentDir\"><A HREF=\"");
     2198               .append("<img alt=\"\" border=\"0\" src=\"" + _imgPath + "priority.png\" >&nbsp;")
     2199               .append(_("Priority")).append("</th>\n");
     2200        buf.append("</tr>\n</thead>\n");
     2201        buf.append("<tr><td colspan=\"" + (showPriority ? '5' : '4') + "\" class=\"ParentDir\"><A HREF=\"");
    21382202        buf.append(URIUtil.addPaths(base,"../"));
    21392203        buf.append("\"><img alt=\"\" border=\"0\" src=\"" + _imgPath + "up.png\"> ")
    2140             .append(_("Up to higher level directory")).append("</A></td></tr>\n");
     2204           .append(_("Up to higher level directory"))
     2205           .append("</A></td></tr>\n");
    21412206
    21422207
     
    21542219           
    21552220            String rowClass = (i % 2 == 0 ? "snarkTorrentEven" : "snarkTorrentOdd");
    2156             buf.append("<TR class=\"").append(rowClass).append("\"><TD class=\"snarkFileName ")
    2157                .append(rowClass).append("\">");
     2221            buf.append("<TR class=\"").append(rowClass).append("\">");
    21582222           
    21592223            // Get completeness and status string
     
    21912255                                status += " " +
    21922256                                         (100 * (length - remaining) / length) + "% " + _("complete") +
    2193                                          " (" + DataHelper.formatSize2(remaining) + _("bytes remaining") + ")";
     2257                                         " (" + DataHelper.formatSize2(remaining) + "B " + _("remaining") + ")";
    21942258                            }
    21952259                        } else {
     
    22072271            String icon = toIcon(item);
    22082272
     2273            buf.append("<TD class=\"snarkFileIcon ")
     2274               .append(rowClass).append("\">");
    22092275            if (complete) {
    22102276                buf.append("<a href=\"").append(path).append("\">");
     
    22142280                    plc.endsWith(".gif") || plc.endsWith(".ico")) {
    22152281                    buf.append("<img alt=\"\" border=\"0\" class=\"thumb\" src=\"")
    2216                        .append(path).append("\"></a> ");
     2282                       .append(path).append("\"></a>");
    22172283                } else {
    2218                     buf.append(toImg(icon, _("Open"))).append("</a> ");
     2284                    buf.append(toImg(icon, _("Open"))).append("</a>");
    22192285                }
    2220                 buf.append("<A HREF=\"");
    2221                 buf.append(path);
    2222                 buf.append("\">");
    22232286            } else {
    2224                 buf.append(toImg(icon)).append(' ');
    2225             }
     2287                buf.append(toImg(icon));
     2288            }
     2289            buf.append("</TD><TD class=\"snarkFileName ")
     2290               .append(rowClass).append("\">");
     2291            if (complete)
     2292                buf.append("<a href=\"").append(path).append("\">");
    22262293            buf.append(ls[i]);
    22272294            if (complete)
     
    22602327        }
    22612328        if (showSaveButton) {
    2262             buf.append("<thead><tr><th colspan=\"3\">&nbsp;</th><th class=\"headerpriority\"><input type=\"submit\" value=\"");
     2329            buf.append("<thead><tr><th colspan=\"4\">&nbsp;</th><th class=\"headerpriority\"><input type=\"submit\" value=\"");
    22632330            buf.append(_("Save priorities"));
    22642331            buf.append("\" name=\"foo\" ></th></tr></thead>\n");
    22652332        }
    2266         buf.append("</TABLE>\n");
     2333        buf.append("</table>\n");
    22672334        if (showPriority)
    2268             buf.append("</form>");
    2269         buf.append("</div></div></BODY></HTML>\n");
    2270        
     2335            buf.append("</form>");
     2336        buf.append("</div></div></BODY></HTML>\n");
     2337
    22712338        return buf.toString();
    22722339    }
  • apps/i2ptunnel/jsp/editClient.jsp

    r69cdcc8 r77d40f8d  
    2020    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    2121    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
     22    <link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
    2223
    2324    <% if (editBean.allowCSS()) {
    24   %><link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
     25  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico">
    2526    <link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
    2627    <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
  • apps/i2ptunnel/jsp/editServer.jsp

    r69cdcc8 r77d40f8d  
    2020    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    2121    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
     22    <link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
    2223
    2324    <% if (editBean.allowCSS()) {
    24   %><link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
     25  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico">
    2526    <link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
    2627    <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
  • apps/i2ptunnel/jsp/index.jsp

    r69cdcc8 r77d40f8d  
    2525   
    2626    <% if (indexBean.allowCSS()) {
    27   %><link href="<%=indexBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
     27  %><link rel="icon" href="<%=indexBean.getTheme()%>images/favicon.ico">
     28    <link href="<%=indexBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
    2829    <link href="<%=indexBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
    2930    <% }
  • apps/i2ptunnel/jsp/wizard.jsp

    r69cdcc8 r77d40f8d  
    5858
    5959    <% if (editBean.allowCSS()) {
    60   %><link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
     60  %><link rel="icon" href="<%=editBean.getTheme()%>images/favicon.ico">
     61    <link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
    6162    <link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
    6263    <% }
  • apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java

    r69cdcc8 r77d40f8d  
    2020    public static final String PROP_REFRESH = "routerconsole.summaryRefresh";
    2121    public static final String DEFAULT_REFRESH = "60";
     22    public static final int MIN_REFRESH = 3;
     23    public static final String PROP_DISABLE_REFRESH = "routerconsole.summaryDisableRefresh";
    2224    private static final String PROP_XFRAME = "routerconsole.disableXFrame";
    2325
     
    7173    /** change refresh and save it */
    7274    public void setRefresh(String r) {
     75        try {
     76            if (Integer.parseInt(r) < MIN_REFRESH)
     77                r = "" + MIN_REFRESH;
     78        } catch (Exception e) {
     79        }
    7380        _context.router().saveConfig(PROP_REFRESH, r);
    7481    }
     
    7683    /** @return refresh time in seconds, as a string */
    7784    public String getRefresh() {
    78         return _context.getProperty(PROP_REFRESH, DEFAULT_REFRESH);
     85        String r = _context.getProperty(PROP_REFRESH, DEFAULT_REFRESH);
     86        try {
     87            if (Integer.parseInt(r) < MIN_REFRESH)
     88                r = "" + MIN_REFRESH;
     89        } catch (Exception e) {
     90        }
     91        return r;
     92    }
     93
     94    /**
     95     * change disable refresh boolean and save it
     96     * @since 0.9.1
     97     */
     98    public void setDisableRefresh(String r) {
     99        String disableRefresh = "false";
     100        if ("0".equals(r))
     101            disableRefresh = "true";
     102        _context.router().saveConfig(PROP_DISABLE_REFRESH, disableRefresh);
     103    }
     104
     105    /**
     106     * @return true if refresh is disabled
     107     * @since 0.9.1
     108     */
     109    public boolean getDisableRefresh() {
     110        return _context.getBooleanProperty(PROP_DISABLE_REFRESH);
    79111    }
    80112
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java

    r69cdcc8 r77d40f8d  
    1212    /** configX.jsp */
    1313    private static final String pages[] =
    14                                           {"", "net", "ui", "home", "service", "update", "tunnels",
     14                                          {"", "net", "ui", "sidebar", "home", "service", "update", "tunnels",
    1515                                           "clients", "peer", "keyring", "logging", "stats",
    1616                                           "reseed", "advanced" };
    1717
    1818    private static final String titles[] =
    19                                           {_x("Bandwidth"), _x("Network"), _x("UI"), _x("Home Page"),
     19                                          {_x("Bandwidth"), _x("Network"), _x("UI"), _x("Summary Bar"), _x("Home Page"),
    2020                                           _x("Service"), _x("Update"), _x("Tunnels"),
    2121                                           _x("Clients"), _x("Peers"), _x("Keyring"), _x("Logging"), _x("Stats"),
  • apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java

    r69cdcc8 r77d40f8d  
    192192
    193193            // FIXME jrobin doesn't support setting the timezone, will have to mod TimeAxis.java
    194             _out.write("<p><i>" + _("All times are UTC.") + "</i></p>\n");
     194            // 0.9.1 - all graphs currently state UTC on them, so this text blurb is unnecessary,
     195            //_out.write("<p><i>" + _("All times are UTC.") + "</i></p>\n");
    195196        } catch (IOException ioe) {
    196197            ioe.printStackTrace();
  • apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java

    r69cdcc8 r77d40f8d  
    2525
    2626    static final String DEFAULT_SERVICES =
    27         _x("Addressbook") + S + _x("Manage your I2P hosts file here (I2P domain name resolution)") + S + "/susidns/index" + S + I + "book_addresses.png" + S +
     27        _x("Addressbook") + S + _x("Manage your I2P hosts file here (I2P domain name resolution)") + S + "/dns" + S + I + "book_addresses.png" + S +
    2828        _x("Configure Bandwidth") + S + _x("I2P Bandwidth Configuration") + S + "/config" + S + I + "wrench_orange.png" + S +
    2929        _x("Configure Language") + S + _x("Console Language Selection") + S + "/configui" + S + I + "wrench_orange.png" + S +
    3030        _x("Customize Home Page") + S + _x("I2P Home Page Configuration") + S + "/confighome" + S + I + "wrench_orange.png" + S +
    31         _x("Email") + S + _x("Anonymous webmail client") + S + "/susimail/susimail" + S + I + "email.png" + S +
     31        _x("Email") + S + _x("Anonymous webmail client") + S + "/webmail" + S + I + "email.png" + S +
    3232        _x("Help") + S + _x("I2P Router Help") + S + "/help" + S + I + "help.png" + S +
    3333        _x("Router Console") + S + _x("I2P Router Console") + S + "/console" + S + I + "wrench_orange.png" + S +
    34         _x("Torrents") + S + _x("Built-in anonymous BitTorrent Client") + S + "/i2psnark/" + S + I + "film.png" + S +
     34        _x("Torrents") + S + _x("Built-in anonymous BitTorrent Client") + S + "/torrents" + S + I + "film.png" + S +
    3535        _x("Website") + S + _x("Local web server") + S + "http://127.0.0.1:7658/" + S + I + "server.png" + S +
    3636        "";
  • apps/routerconsole/java/src/net/i2p/router/web/NewsHelper.java

    r69cdcc8 r77d40f8d  
    1717            _page = (new File(_context.getBaseDir(), "docs/initialNews/initialNews.xml")).getAbsolutePath();
    1818        return super.getContent();
    19     } 
     19    }
    2020
    2121    /** @since 0.8.12 */
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java

    r69cdcc8 r77d40f8d  
    44import java.io.IOException;
    55import java.io.Writer;
     6import java.util.Collections;
     7import java.util.HashMap;
     8import java.util.List;
     9import java.util.Map;
    610
    711import net.i2p.data.DataHelper;
     
    1317 */
    1418public class SummaryBarRenderer {
     19    // Commented out because broken. Replaced by if-elseif blob below.
     20    /*static final Map<String, java.lang.reflect.Method> ALL_SECTIONS;
     21    static {
     22        Map<String, java.lang.reflect.Method> aMap = new HashMap<String, java.lang.reflect.Method>();;
     23        try {
     24            aMap.put("HelpAndFAQ", SummaryBarRenderer.class.getMethod("renderHelpAndFAQHTML"));
     25            aMap.put("I2PServices", SummaryBarRenderer.class.getMethod("renderI2PServicesHTML"));
     26            aMap.put("I2PInternals", SummaryBarRenderer.class.getMethod("renderI2PInternalsHTML"));
     27            aMap.put("General", SummaryBarRenderer.class.getMethod("renderGeneralHTML"));
     28            aMap.put("ShortGeneral", SummaryBarRenderer.class.getMethod("renderShortGeneralHTML"));
     29            aMap.put("NetworkReachability", SummaryBarRenderer.class.getMethod("renderNetworkReachabilityHTML"));
     30            aMap.put("UpdateStatus", SummaryBarRenderer.class.getMethod("renderUpdateStatusHTML"));
     31            aMap.put("RestartStatus", SummaryBarRenderer.class.getMethod("renderRestartStatusHTMLHTML"));
     32            aMap.put("Peers", SummaryBarRenderer.class.getMethod("renderPeersHTML"));
     33            aMap.put("FirewallAndReseedStatus", SummaryBarRenderer.class.getMethod("renderFirewallAndReseedStatusHTML"));
     34            aMap.put("Bandwidth", SummaryBarRenderer.class.getMethod("renderBandwidthHTML"));
     35            aMap.put("Tunnels", SummaryBarRenderer.class.getMethod("renderTunnelsHTML"));
     36            aMap.put("Congestion", SummaryBarRenderer.class.getMethod("renderCongestionHTML"));
     37            aMap.put("TunnelStatus", SummaryBarRenderer.class.getMethod("renderTunnelStatusHTML"));
     38            aMap.put("Destinations", SummaryBarRenderer.class.getMethod("renderDestinationsHTML"));
     39            aMap.put("NewsHeadings", SummaryBarRenderer.class.getMethod("renderNewsHeadingsHTML"));
     40        } catch (java.lang.NoSuchMethodException e) {
     41        }
     42        ALL_SECTIONS = Collections.unmodifiableMap(aMap);
     43    }*/
     44    static final String ALL_SECTIONS[] =
     45        {"HelpAndFAQ", "I2PServices", "I2PInternals", "General", "ShortGeneral", "NetworkReachability",
     46        "UpdateStatus", "RestartStatus", "Peers", "FirewallAndReseedStatus", "Bandwidth", "Tunnels",
     47        "Congestion", "TunnelStatus", "Destinations", "NewsHeadings" };
     48
    1549    private final RouterContext _context;
    1650    private final SummaryHelper _helper;
     
    2660     */
    2761    public void renderSummaryHTML(Writer out) throws IOException {
     62        String requestURI = _helper.getRequestURI();
     63        String page = requestURI.replace("/", "").replace(".jsp", "");
     64        List<String> sections = _helper.getSummaryBarSections(page);
    2865        StringBuilder buf = new StringBuilder(8*1024);
    29         String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
    30        
    31         // TODO - the bar would render more cleanly if we specified the img height and width here,
    32         // but unfortunately the images in the different themes are different sizes.
    33         // They range in height from 37 to 43 px. But there's a -2 bottom margin...
    34         // So put it in a div.
    35         buf.append("<div style=\"height: 36px;\"><a href=\"/\" target=\"_top\"><img src=\"")
    36            .append(CSSHelper.BASE_THEME_PATH)
    37            .append(theme)
    38            .append("/images/i2plogo.png\" alt=\"")
    39            .append(_("I2P Router Console"))
    40            .append("\" title=\"")
    41            .append(_("I2P Router Console"))
    42            .append("\"></a></div><hr>")
    43            
    44            .append("<h3><a href=\"/help\" target=\"_top\" title=\"")
     66        for (String section : sections) {
     67            // Commented out because broken. Replaced by if-elseif blob below.
     68            /*try {
     69                String section = (String)ALL_SECTIONS.get(sections[i]).invoke(this);
     70                if (section != null && section != "") {
     71                    out.write("<hr>" + i + "<hr>\n" + section);
     72                }
     73            } catch (Exception e) {
     74                out.write("<hr>" +i + " - Exception<hr>\n" + e);
     75            }*/
     76            buf.setLength(0);
     77
     78            buf.append("<hr>\n");
     79            if ("HelpAndFAQ".equals(section))
     80                buf.append(renderHelpAndFAQHTML());
     81            else if ("I2PServices".equals(section))
     82                buf.append(renderI2PServicesHTML());
     83            else if ("I2PInternals".equals(section))
     84                buf.append(renderI2PInternalsHTML());
     85            else if ("General".equals(section))
     86                buf.append(renderGeneralHTML());
     87            else if ("ShortGeneral".equals(section))
     88                buf.append(renderShortGeneralHTML());
     89            else if ("NetworkReachability".equals(section))
     90                buf.append(renderNetworkReachabilityHTML());
     91            else if ("UpdateStatus".equals(section))
     92                buf.append(renderUpdateStatusHTML());
     93            else if ("RestartStatus".equals(section))
     94                buf.append(renderRestartStatusHTML());
     95            else if ("Peers".equals(section))
     96                buf.append(renderPeersHTML());
     97            else if ("FirewallAndReseedStatus".equals(section))
     98                buf.append(renderFirewallAndReseedStatusHTML());
     99            else if ("Bandwidth".equals(section))
     100                buf.append(renderBandwidthHTML());
     101            else if ("Tunnels".equals(section))
     102                buf.append(renderTunnelsHTML());
     103            else if ("Congestion".equals(section))
     104                buf.append(renderCongestionHTML());
     105            else if ("TunnelStatus".equals(section))
     106                buf.append(renderTunnelStatusHTML());
     107            else if ("Destinations".equals(section))
     108                buf.append(renderDestinationsHTML());
     109            else if ("NewsHeadings".equals(section))
     110                buf.append(renderNewsHeadingsHTML());
     111
     112            // Only output section if there's more than the <hr> to print
     113            if (buf.length() > 5)
     114                out.write(buf.toString());
     115        }
     116    }
     117
     118    public String renderHelpAndFAQHTML() {
     119        StringBuilder buf = new StringBuilder(512);
     120        buf.append("<h3><a href=\"/help\" target=\"_top\" title=\"")
    45121           .append(_("I2P Router Help &amp; FAQ"))
    46122           .append("\">")
    47123           .append(_("Help &amp; FAQ"))
    48            .append("</a></h3><hr>");
    49 
    50         File lpath = new File(_context.getBaseDir(), "docs/toolbar.html");
    51         // you better have target="_top" for the links in there...
    52         if (lpath.exists()) {
    53             ContentHelper linkhelper = new ContentHelper();
    54             linkhelper.setPage(lpath.getAbsolutePath());
    55             linkhelper.setMaxLines("100");
    56             buf.append(linkhelper.getContent());
    57         } else {
    58             buf.append("<h3><a href=\"/configclients\" target=\"_top\" title=\"")
    59                .append(_("Configure startup of clients and webapps (services); manually start dormant services"))
    60                .append("\">")
    61                .append(_("I2P Services"))
    62                .append("</a></h3>\n" +
    63 
    64                        "<hr class=\"b\"><table><tr><td>" +
    65 
    66                        "<a href=\"/susimail/susimail\" target=\"blank\" title=\"")
    67                .append(_("Anonymous webmail client"))
    68                .append("\">")
    69                .append(_("Email"))
    70                .append("</a>\n" +
    71 
    72                        "<a href=\"/i2psnark/\" target=\"_blank\" title=\"")
    73                .append(_("Built-in anonymous BitTorrent Client"))
    74                .append("\">")
    75                .append(_("Torrents"))
    76                .append("</a>\n" +
    77 
    78                        "<a href=\"http://127.0.0.1:7658/\" target=\"_blank\" title=\"")
    79                .append(_("Local web server"))
    80                .append("\">")
    81                .append(_("Website"))
    82                .append("</a>\n")
    83 
    84                .append(NavHelper.getClientAppLinks(_context))
    85 
    86                .append("</td></tr></table>\n" +
    87 
    88                        "<hr><h3><a href=\"/config\" target=\"_top\" title=\"")
    89                .append(_("Configure I2P Router"))
    90                .append("\">")
    91                .append(_("I2P Internals"))
    92                .append("</a></h3><hr class=\"b\">\n" +
    93 
    94                        "<table><tr><td>\n" +
    95 
    96                        "<a href=\"/tunnels\" target=\"_top\" title=\"")
    97                .append(_("View existing tunnels and tunnel build status"))
    98                .append("\">")
    99                .append(_("Tunnels"))
    100                .append("</a>\n" +
    101 
    102                        "<a href=\"/peers\" target=\"_top\" title=\"")
    103                .append(_("Show all current peer connections"))
    104                .append("\">")
    105                .append(_("Peers"))
    106                .append("</a>\n" +
    107 
    108                        "<a href=\"/profiles\" target=\"_top\" title=\"")
    109                .append(_("Show recent peer performance profiles"))
    110                .append("\">")
    111                .append(_("Profiles"))
    112                .append("</a>\n" +
    113 
    114                        "<a href=\"/netdb\" target=\"_top\" title=\"")
    115                .append(_("Show list of all known I2P routers"))
    116                .append("\">")
    117                .append(_("NetDB"))
    118                .append("</a>\n" +
    119 
    120                        "<a href=\"/logs\" target=\"_top\" title=\"")
    121                .append(_("Health Report"))
    122                .append("\">")
    123                .append(_("Logs"))
    124                .append("</a>\n");
    125 
    126            //          "<a href=\"/jobs.jsp\" target=\"_top\" title=\"")
    127            //  .append(_("Show the router's workload, and how it's performing"))
    128            //  .append("\">")
    129            //  .append(_("Jobs"))
    130            //  .append("</a>\n" +
    131 
    132             if (!StatSummarizer.isDisabled()) {
    133                 buf.append("<a href=\"/graphs\" target=\"_top\" title=\"")
     124           .append("</a></h3>");
     125        return buf.toString();
     126    }
     127
     128    public String renderI2PServicesHTML() {
     129        StringBuilder buf = new StringBuilder(512);
     130        buf.append("<h3><a href=\"/configclients\" target=\"_top\" title=\"")
     131           .append(_("Configure startup of clients and webapps (services); manually start dormant services"))
     132           .append("\">")
     133           .append(_("I2P Services"))
     134           .append("</a></h3>\n" +
     135
     136                   "<hr class=\"b\"><table><tr><td>" +
     137
     138                   "<a href=\"/webmail\" target=\"_top\" title=\"")
     139           .append(_("Anonymous webmail client"))
     140           .append("\">")
     141           .append(_("Email"))
     142           .append("</a>\n" +
     143
     144                   "<a href=\"/torrents\" target=\"_top\" title=\"")
     145           .append(_("Built-in anonymous BitTorrent Client"))
     146           .append("\">")
     147           .append(_("Torrents"))
     148           .append("</a>\n" +
     149
     150                   "<a href=\"http://127.0.0.1:7658/\" target=\"_blank\" title=\"")
     151           .append(_("Local web server"))
     152           .append("\">")
     153           .append(_("Website"))
     154           .append("</a>\n")
     155
     156           .append(NavHelper.getClientAppLinks(_context))
     157
     158           .append("</td></tr></table>\n");
     159        return buf.toString();
     160    }
     161
     162    public String renderI2PInternalsHTML() {
     163        StringBuilder buf = new StringBuilder(512);
     164        buf.append("<h3><a href=\"/config\" target=\"_top\" title=\"")
     165           .append(_("Configure I2P Router"))
     166           .append("\">")
     167           .append(_("I2P Internals"))
     168           .append("</a></h3><hr class=\"b\">\n" +
     169
     170                   "<table><tr><td>\n" +
     171
     172                   "<a href=\"/tunnels\" target=\"_top\" title=\"")
     173           .append(_("View existing tunnels and tunnel build status"))
     174           .append("\">")
     175           .append(_("Tunnels"))
     176           .append("</a>\n" +
     177
     178                   "<a href=\"/peers\" target=\"_top\" title=\"")
     179           .append(_("Show all current peer connections"))
     180           .append("\">")
     181           .append(_("Peers"))
     182           .append("</a>\n" +
     183
     184                   "<a href=\"/profiles\" target=\"_top\" title=\"")
     185           .append(_("Show recent peer performance profiles"))
     186           .append("\">")
     187           .append(_("Profiles"))
     188           .append("</a>\n" +
     189
     190                   "<a href=\"/netdb\" target=\"_top\" title=\"")
     191           .append(_("Show list of all known I2P routers"))
     192           .append("\">")
     193           .append(_("NetDB"))
     194           .append("</a>\n" +
     195
     196                   "<a href=\"/logs\" target=\"_top\" title=\"")
     197           .append(_("Health Report"))
     198           .append("\">")
     199           .append(_("Logs"))
     200           .append("</a>\n");
     201
     202       //          "<a href=\"/jobs.jsp\" target=\"_top\" title=\"")
     203       //  .append(_("Show the router's workload, and how it's performing"))
     204       //  .append("\">")
     205       //  .append(_("Jobs"))
     206       //  .append("</a>\n" +
     207
     208        if (!StatSummarizer.isDisabled()) {
     209            buf.append("<a href=\"/graphs\" target=\"_top\" title=\"")
    134210               .append(_("Graph router performance"))
    135211               .append("\">")
    136212               .append(_("Graphs"))
    137213               .append("</a>\n");
    138             }
    139 
    140             buf.append("<a href=\"/stats\" target=\"_top\" title=\"")
    141                .append(_("Textual router performance statistics"))
    142                .append("\">")
    143                .append(_("Stats"))
    144                .append("</a>\n" +
    145 
    146                         "<a href=\"/i2ptunnel/\" target=\"_blank\" title=\"")
    147                .append(_("Local Destinations"))
    148                .append("\">")
    149                .append(_("I2PTunnel"))
    150                .append("</a>\n" +
    151 
    152                        "<a href=\"/susidns/index\" target=\"_blank\" title=\"")
    153                .append(_("Manage your I2P hosts file here (I2P domain name resolution)"))
    154                .append("\">")
    155                .append(_("Addressbook"))
    156                .append("</a>\n");
    157 
    158             File javadoc = new File(_context.getBaseDir(), "docs/javadoc/index.html");
    159             if (javadoc.exists())
    160                 buf.append("<a href=\"/javadoc/index.html\" target=\"_blank\">Javadoc</a>\n");
    161             buf.append("</td></tr></table>\n");
    162 
    163             out.write(buf.toString());
    164             buf.setLength(0);
    165214        }
    166215
    167 
    168 
    169         buf.append("<hr><h3><a href=\"/help\" target=\"_top\" title=\"")
     216        buf.append("<a href=\"/stats\" target=\"_top\" title=\"")
     217           .append(_("Textual router performance statistics"))
     218           .append("\">")
     219           .append(_("Stats"))
     220           .append("</a>\n" +
     221
     222                    "<a href=\"/i2ptunnelmgr\" target=\"_top\" title=\"")
     223           .append(_("Local Destinations"))
     224           .append("\">")
     225           .append(_("I2PTunnel"))
     226           .append("</a>\n" +
     227
     228                   "<a href=\"/dns\" target=\"_top\" title=\"")
     229           .append(_("Manage your I2P hosts file here (I2P domain name resolution)"))
     230           .append("\">")
     231           .append(_("Addressbook"))
     232           .append("</a>\n");
     233
     234        File javadoc = new File(_context.getBaseDir(), "docs/javadoc/index.html");
     235        if (javadoc.exists())
     236            buf.append("<a href=\"/javadoc/index.html\" target=\"_blank\">Javadoc</a>\n");
     237        buf.append("</td></tr></table>\n");
     238        return buf.toString();
     239    }
     240
     241    public String renderGeneralHTML() {
     242        if (_helper == null) return "";
     243        StringBuilder buf = new StringBuilder(512);
     244        buf.append("<h3><a href=\"/help\" target=\"_top\" title=\"")
    170245           .append(_("I2P Router Help"))
    171246           .append("\">")
     
    174249
    175250                   "<table><tr>" +
    176                    "<td align=\"left\"><b>")
     251                   "<td align=\"left\"><b title=\"")
     252           .append(_("Your Local Identity is your unique I2P router identity, similar to an ip address but tailored to I2P. "))
     253           .append(_("Never disclose this to anyone, as it can reveal your real world ip."))
     254           .append("\">")
    177255           .append(_("Local Identity"))
    178256           .append(":</b></td>" +
     
    188266           .append("</a></td></tr>\n" +
    189267
    190                    "<tr><td align=\"left\"><b>")
     268                   "<tr title=\"")
     269           .append(_("The version of the I2P software we are running"))
     270           .append("\">" +
     271                   "<td align=\"left\"><b>")
    191272           .append(_("Version"))
    192273           .append(":</b></td>" +
     
    203284                   "<td align=\"right\">")
    204285           .append(_helper.getUptime())
    205            .append("</td></tr></table>\n" +
    206 
    207                    "<hr><h4><a href=\"/confignet#help\" target=\"_top\" title=\"")
     286           .append("</td></tr></table>\n");
     287        return buf.toString();
     288    }
     289
     290    public String renderShortGeneralHTML() {
     291        if (_helper == null) return "";
     292        StringBuilder buf = new StringBuilder(512);
     293        buf.append("<table>" +
     294                   "<tr title=\"")
     295           .append(_("The version of the I2P software we are running"))
     296           .append("\">" +
     297                   "<td align=\"left\"><b>")
     298           .append(_("Version"))
     299           .append(":</b></td>" +
     300                   "<td align=\"right\">")
     301           .append(_helper.getVersion())
     302           .append("</td></tr>\n" +
     303
     304                   "<tr title=\"")
     305           .append(_("How long we've been running for this session"))
     306           .append("\">" +
     307                   "<td align=\"left\"><b>")
     308           .append(_("Uptime"))
     309           .append(":</b></td>" +
     310                   "<td align=\"right\">")
     311           .append(_helper.getUptime())
     312           .append("</td></tr></table>\n");
     313        return buf.toString();
     314    }
     315
     316    public String renderNetworkReachabilityHTML() {
     317        if (_helper == null) return "";
     318        StringBuilder buf = new StringBuilder(512);
     319        buf.append("<h4><a href=\"/confignet#help\" target=\"_top\" title=\"")
    208320           .append(_("Help with configuring your firewall and router for optimal I2P performance"))
    209321           .append("\">")
     
    211323           .append(": ")
    212324           .append(_helper.getReachability())
    213            .append("</a></h4><hr>\n")
    214 
    215 
    216            .append(_helper.getUpdateStatus())
    217 
    218 
    219            .append(_helper.getRestartStatus())
    220 
    221 
    222            .append("<hr><h3><a href=\"/peers\" target=\"_top\" title=\"")
     325           .append("</a></h4>\n");
     326        return buf.toString();
     327    }
     328
     329    public String renderUpdateStatusHTML() {
     330        if (_helper == null) return "";
     331        String updateStatus = _helper.getUpdateStatus();
     332        if ("".equals(updateStatus)) return "";
     333        StringBuilder buf = new StringBuilder(512);
     334        buf.append("<h3><a href=\"/configupdate\" target=\"_top\" title=\"")
     335           .append(_("Configure I2P Updates"))
     336           .append("\">")
     337           .append(_("I2P Update"))
     338           .append("</a></h3><hr class=\"b\">\n");
     339        buf.append(updateStatus);
     340        return buf.toString();
     341    }
     342
     343    public String renderRestartStatusHTML() {
     344        if (_helper == null) return "";
     345        StringBuilder buf = new StringBuilder(512);
     346        buf.append(_helper.getRestartStatus());
     347        return buf.toString();
     348    }
     349
     350    public String renderPeersHTML() {
     351        if (_helper == null) return "";
     352        StringBuilder buf = new StringBuilder(512);
     353        buf.append("<h3><a href=\"/peers\" target=\"_top\" title=\"")
    223354           .append(_("Show all current peer connections"))
    224355           .append("\">")
     
    228359                   "<table>\n" +
    229360
    230                    "<tr><td align=\"left\"><b>")
     361                   "<tr title=\"")
     362           .append(_("Peers we've been talking to in the last few minutes/last hour"))
     363           .append("\">" +
     364                   "<td align=\"left\"><b>")
    231365           .append(_("Active"))
    232366           .append(":</b></td><td align=\"right\">");
     
    237371           .append("</td></tr>\n" +
    238372
    239                    "<tr><td align=\"left\"><b>")
     373                   "<tr title=\"")
     374           .append(_("The number of peers available for building client tunnels"))
     375           .append("\">" +
     376                   "<td align=\"left\"><b>")
    240377           .append(_("Fast"))
    241378           .append(":</b></td><td align=\"right\">")
     
    243380           .append("</td></tr>\n" +
    244381
    245                    "<tr><td align=\"left\"><b>")
     382                   "<tr title=\"")
     383           .append(_("The number of peers available for building exploratory tunnels"))
     384           .append("\">" +
     385                   "<td align=\"left\"><b>")
    246386           .append(_("High capacity"))
    247387           .append(":</b></td><td align=\"right\">")
     
    249389           .append("</td></tr>\n" +
    250390
    251                    "<tr><td align=\"left\"><b>")
     391                   "<tr title=\"")
     392           .append(_("The number of peers available for network database inquries"))
     393           .append("\">" +
     394                   "<td align=\"left\"><b>")
    252395           .append(_("Integrated"))
    253396           .append(":</b></td><td align=\"right\">")
     
    255398           .append("</td></tr>\n" +
    256399
    257                    "<tr><td align=\"left\"><b>")
     400                   "<tr title=\"")
     401           .append(_("The total number of peers in our network database"))
     402           .append("\">" +
     403                   "<td align=\"left\"><b>")
    258404           .append(_("Known"))
    259405           .append(":</b></td><td align=\"right\">")
     
    261407           .append("</td></tr>\n" +
    262408
    263                    "</table><hr>\n");
    264 
    265 
    266         out.write(buf.toString());
    267         buf.setLength(0);
    268 
     409                   "</table>\n");
     410        return buf.toString();
     411    }
     412
     413    public String renderFirewallAndReseedStatusHTML() {
     414        if (_helper == null) return "";
     415        StringBuilder buf = new StringBuilder(512);
    269416        buf.append(_helper.getFirewallAndReseedStatus());
    270 
     417        return buf.toString();
     418    }
     419
     420    public String renderBandwidthHTML() {
     421        if (_helper == null) return "";
     422        StringBuilder buf = new StringBuilder(512);
    271423        buf.append("<h3><a href=\"/config\" title=\"")
    272424           .append(_("Configure router bandwidth allocation"))
     
    304456           .append(SummaryHelper.THINSP)
    305457           .append(_helper.getOutboundTransferred())
    306            .append("</td></tr></table>\n" +
    307 
    308                    "<hr><h3><a href=\"/tunnels\" target=\"_top\" title=\"")
     458           .append("</td></tr>\n" +
     459
     460                   "</table>\n");
     461        return buf.toString();
     462    }
     463
     464    public String renderTunnelsHTML() {
     465        if (_helper == null) return "";
     466        StringBuilder buf = new StringBuilder(512);
     467        buf.append("<h3><a href=\"/tunnels\" target=\"_top\" title=\"")
    309468           .append(_("View existing tunnels and tunnel build status"))
    310469           .append("\">")
     
    313472                   "<table>\n" +
    314473
    315                    "<tr><td align=\"left\"><b>")
     474                   "<tr title=\"")
     475           .append(_("Used for building and testing tunnels, and communicating with floodfill peers"))
     476           .append("\">" +
     477                   "<td align=\"left\"><b>")
    316478           .append(_("Exploratory"))
    317479           .append(":</b></td><td align=\"right\">")
     
    319481           .append("</td></tr>\n" +
    320482
    321                   "<tr><td align=\"left\"><b>")
     483                   "<tr title=\"")
     484           .append(_("Tunnels we are using to provide or access services on the network"))
     485           .append("\">" +
     486                   "<td align=\"left\"><b>")
    322487           .append(_("Client"))
    323488           .append(":</b></td><td align=\"right\">")
     
    325490           .append("</td></tr>\n" +
    326491
    327                    "<tr><td align=\"left\"><b>")
     492                   "<tr title=\"")
     493           .append(_("Tunnels we are participating in, directly contributing bandwith to the network"))
     494           .append("\">" +
     495                   "<td align=\"left\"><b>")
    328496           .append(_("Participating"))
    329497           .append(":</b></td><td align=\"right\">")
     
    331499           .append("</td></tr>\n" +
    332500
    333                    "<tr><td align=\"left\"><b>")
     501                   "<tr title=\"")
     502           .append(_("The ratio of tunnel hops we provide to tunnel hops we use - a value greater than 1.00 indicates a positive contribution to the network"))
     503           .append("\">" +
     504                   "<td align=\"left\"><b>")
    334505           .append(_("Share ratio"))
    335506           .append(":</b></td><td align=\"right\">")
     
    337508           .append("</td></tr>\n" +
    338509
    339                    "</table><hr><h3><a href=\"/jobs\" target=\"_top\" title=\"")
     510                   "</table>\n");
     511        return buf.toString();
     512    }
     513
     514    public String renderCongestionHTML() {
     515        if (_helper == null) return "";
     516        StringBuilder buf = new StringBuilder(512);
     517        buf.append("<h3><a href=\"/jobs\" target=\"_top\" title=\"")
    340518           .append(_("What's in the router's job queue?"))
    341519           .append("\">")
     
    344522                   "<table>\n" +
    345523
    346                    "<tr><td align=\"left\"><b>")
     524                   "<tr title=\"")
     525           .append(_("Indicates router performance"))
     526           .append("\">" +
     527                   "<td align=\"left\"><b>")
    347528           .append(_("Job lag"))
    348529           .append(":</b></td><td align=\"right\">")
     
    350531           .append("</td></tr>\n" +
    351532
    352                    "<tr><td align=\"left\"><b>")
     533                   "<tr title=\"")
     534           .append(_("Indicates how quickly outbound messages to other I2P routers are sent"))
     535           .append("\">" +
     536                   "<td align=\"left\"><b>")
    353537           .append(_("Message delay"))
    354538           .append(":</b></td><td align=\"right\">")
     
    357541
    358542        if (!_context.getBooleanPropertyDefaultTrue("router.disableTunnelTesting")) {
    359             buf.append("<tr><td align=\"left\"><b>")
     543            buf.append("<tr title=\"")
     544           .append(_("Round trip time for a tunnel test"))
     545           .append("\">" +
     546                   "<td align=\"left\"><b>")
    360547           .append(_("Tunnel lag"))
    361548           .append(":</b></td><td align=\"right\">")
     
    364551        }
    365552
    366         buf.append("<tr><td align=\"left\"><b>")
     553        buf.append("<tr title=\"")
     554           .append(_("Queued requests from other routers to participate in tunnels"))
     555           .append("\">" +
     556                   "<td align=\"left\"><b>")
    367557           .append(_("Backlog"))
    368558           .append(":</b></td><td align=\"right\">")
     
    370560           .append("</td></tr>\n" +
    371561
    372                    "</table><hr><h4>")
     562                   "</table>\n");
     563        return buf.toString();
     564    }
     565
     566    public String renderTunnelStatusHTML() {
     567        if (_helper == null) return "";
     568        StringBuilder buf = new StringBuilder(50);
     569        buf.append("<h4>")
    373570           .append(_(_helper.getTunnelStatus()))
    374            .append("</h4><hr>\n")
    375 
    376            .append(_helper.getDestinations())
    377            .append("<hr>\n");
    378 
    379 
    380 
    381         out.write(buf.toString());
     571           .append("</h4>\n");
     572        return buf.toString();
     573    }
     574
     575    public String renderDestinationsHTML() {
     576        if (_helper == null) return "";
     577        StringBuilder buf = new StringBuilder(512);
     578        buf.append(_helper.getDestinations());
     579        return buf.toString();
     580    }
     581
     582    /** @since 0.9.1 */
     583    public String renderNewsHeadingsHTML() {
     584        if (_helper == null) return "";
     585        NewsHelper newshelper = _helper.getNewsHelper();
     586        if (newshelper == null || newshelper.shouldShowNews()) return "";
     587        StringBuilder buf = new StringBuilder(512);
     588        String consoleNonce = System.getProperty("router.consoleNonce");
     589        if (consoleNonce != null) {
     590            // Set up title and pre-headings stuff.
     591            buf.append("<h3><a href=\"/configupdate\">")
     592               .append(_("News & Updates"))
     593               .append("</a></h3><hr class=\"b\"><div class=\"newsheadings\">\n");
     594            // Get news content.
     595            String newsContent = newshelper.getContent();
     596            if (newsContent != "") {
     597                buf.append("<ul>\n");
     598                // Parse news content for headings.
     599                int start = newsContent.indexOf("<h3>");
     600                while (start >= 0) {
     601                    // Add offset to start:
     602                    // 4 - gets rid of <h3>
     603                    // 16 - gets rid of the date as well (assuming form "<h3>yyyy-mm-dd: Foobarbaz...")
     604                    newsContent = newsContent.substring(start+16, newsContent.length());
     605                    int end = newsContent.indexOf("</h3>");
     606                    if (end >= 0) {
     607                        String heading = newsContent.substring(0, end);
     608                        buf.append("<li>")
     609                           .append(heading)
     610                           .append("</li>\n");
     611                    }
     612                    start = newsContent.indexOf("<h3>");
     613                }
     614                buf.append("</ul>\n");
     615                // Set up string containing <a> to show news.
     616                String requestURI = _helper.getRequestURI();
     617                if (requestURI.contains("/home")) {
     618                    buf.append("<a href=\"/?news=1&amp;consoleNonce=")
     619                       .append(consoleNonce)
     620                       .append("\">")
     621                       .append(_("Show news"))
     622                       .append("</a>\n");
     623                }
     624            } else {
     625                buf.append("<center><i>")
     626                   .append(_("none"))
     627                   .append("</i></center>");
     628            }
     629            // Add post-headings stuff.
     630            buf.append("</div>\n");
     631        }
     632        return buf.toString();
    382633    }
    383634
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java

    r69cdcc8 r77d40f8d  
    55import java.text.DecimalFormat;
    66import java.util.ArrayList;
     7import java.util.Arrays;
    78import java.util.Collections;
    89import java.util.Comparator;
    910import java.util.Iterator;
    1011import java.util.List;
     12import java.util.Map;
     13import java.util.TreeSet;
    1114
    1215import net.i2p.data.DataHelper;
     
    1821import net.i2p.router.CommSystemFacade;
    1922import net.i2p.router.Router;
     23import net.i2p.router.RouterContext;
    2024import net.i2p.router.RouterVersion;
    2125import net.i2p.router.TunnelPoolSettings;
     
    3640    //static final String THINSP = "&thinsp;/&thinsp;";
    3741    static final String THINSP = " / ";
     42    private static final char S = ',';
     43    static final String PROP_SUMMARYBAR = "routerconsole.summaryBar.";
     44
     45    static final String DEFAULT_FULL =
     46        "HelpAndFAQ" + S +
     47        "I2PServices" + S +
     48        "I2PInternals" + S +
     49        "General" + S +
     50        "NetworkReachability" + S +
     51        "UpdateStatus" + S +
     52        "RestartStatus" + S +
     53        "Peers" + S +
     54        "FirewallAndReseedStatus" + S +
     55        "Bandwidth" + S +
     56        "Tunnels" + S +
     57        "Congestion" + S +
     58        "TunnelStatus" + S +
     59        "Destinations" + S +
     60        "";
     61
     62    static final String DEFAULT_MINIMAL =
     63        "ShortGeneral" + S +
     64        "NewsHeadings" + S +
     65        "UpdateStatus" + S +
     66        "NetworkReachability" + S +
     67        "FirewallAndReseedStatus" + S +
     68        "Destinations" + S +
     69        "RestartStatus" + S +
     70        "";
    3871
    3972    /**
     
    376409       
    377410        StringBuilder buf = new StringBuilder(512);
    378         buf.append("<h3><a href=\"/i2ptunnel/\" target=\"_blank\" title=\"").append(_("Add/remove/edit &amp; control your client and server tunnels")).append("\">").append(_("Local Destinations")).append("</a></h3><hr class=\"b\"><div class=\"tunnels\">");
     411        buf.append("<h3><a href=\"/i2ptunnelmgr\" target=\"_top\" title=\"").append(_("Add/remove/edit &amp; control your client and server tunnels")).append("\">").append(_("Local Destinations")).append("</a></h3><hr class=\"b\"><div class=\"tunnels\">");
    379412        if (!clients.isEmpty()) {
    380413            Collections.sort(clients, new AlphaComparator());
     
    619652        String status = UpdateHandler.getStatus();
    620653        if (status.length() > 0) {
    621             buf.append("<h4>").append(status).append("</h4><hr>\n");
     654            buf.append("<h4>").append(status).append("</h4>\n");
    622655        }
    623656        if (updateAvailable() || unsignedUpdateAvailable()) {
     
    707740        if (buf.length() <= 0)
    708741            return "";
    709         buf.append("<hr>");
    710742        return buf.toString();
     743    }
     744
     745    private NewsHelper _newshelper;
     746    public void storeNewsHelper(NewsHelper n) { _newshelper = n; }
     747    public NewsHelper getNewsHelper() { return _newshelper; }
     748
     749    public List<String> getSummaryBarSections(String page) {
     750        String config = "";
     751        if ("home".equals(page))
     752            config = _context.getProperty(PROP_SUMMARYBAR + page, DEFAULT_MINIMAL);
     753        else
     754            config = _context.getProperty(PROP_SUMMARYBAR + page, null);
     755            if (config == null)
     756                config = _context.getProperty(PROP_SUMMARYBAR + "default", DEFAULT_FULL);
     757        return Arrays.asList(config.split("" + S));
     758    }
     759
     760    static void saveSummaryBarSections(RouterContext ctx, String page, Map<Integer, String> sections) {
     761        StringBuilder buf = new StringBuilder(512);
     762        for(String section : sections.values())
     763            buf.append(section).append(S);
     764        ctx.router().saveConfig(PROP_SUMMARYBAR + page, buf.toString());
    711765    }
    712766
     
    734788    public void setRequestURI(String s) { _requestURI = s; }
    735789    public String getRequestURI() { return _requestURI; }
     790
     791    public String getConfigTable() {
     792        String[] allSections = SummaryBarRenderer.ALL_SECTIONS;
     793        List<String> sections = getSummaryBarSections("default");
     794        TreeSet<String> sortedSections = new TreeSet();
     795
     796        for (int i = 0; i < allSections.length; i++) {
     797            String section = allSections[i];
     798            if (!sections.contains(section))
     799                sortedSections.add(section);
     800        }
     801
     802        String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
     803        String imgPath = CSSHelper.BASE_THEME_PATH + theme + "/images/";
     804
     805        StringBuilder buf = new StringBuilder(2048);
     806        buf.append("<table class=\"sidebarconf\"><tr><th>")
     807           .append(_("Remove"))
     808           .append("</th><th>")
     809           .append(_("Name"))
     810           .append("</th><th colspan=\"2\">")
     811           .append(_("Order"))
     812           .append("</th></tr>\n");
     813        for (String section : sections) {
     814            int i = sections.indexOf(section);
     815            buf.append("<tr><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
     816               .append(i)
     817               .append("\"></td><td align=\"left\">")
     818               .append(section)
     819               .append("</td><td align=\"right\"><input type=\"hidden\" name=\"order_")
     820               .append(i + "_" + section)
     821               .append("\" value=\"")
     822               .append(i)
     823               .append("\">");
     824            if (i > 0) {
     825                buf.append("<input type=\"image\" class=\"buttonTop\" name=\"move_")
     826                   .append(i)
     827                   .append("_top\" alt=\"")
     828                   .append(_("Top"))
     829                   .append("\" src=\"" + imgPath + "move_top.png\">");
     830                buf.append("<input type=\"image\" class=\"buttonUp\" name=\"move_")
     831                   .append(i)
     832                   .append("_up\" alt=\"")
     833                   .append(_("Up"))
     834                   .append("\" src=\"" + imgPath + "move_up.png\">");
     835            }
     836            buf.append("</td><td align=\"left\">");
     837            if (i < sections.size() - 1) {
     838                buf.append("<input type=\"image\" class=\"buttonDown\" name=\"move_")
     839                   .append(i)
     840                   .append("_down\" alt=\"")
     841                   .append(_("Down"))
     842                   .append("\" src=\"" + imgPath + "move_down.png\">");
     843                buf.append("<input type=\"image\" class=\"buttonBottom\" name=\"move_")
     844                   .append(i)
     845                   .append("_bottom\" alt=\"")
     846                   .append(_("Bottom"))
     847                   .append("\" src=\"" + imgPath + "move_bottom.png\">");
     848            }
     849            buf.append("</td></tr>\n");
     850        }
     851        buf.append("<tr><td align=\"center\">" +
     852                   "<input type=\"submit\" name=\"action\" class=\"delete\" value=\"")
     853           .append(_("Delete selected"))
     854           .append("\"></td><td align=\"left\"><b>")
     855           .append(_("Add")).append(":</b> " +
     856                   "<select name=\"name\">\n" +
     857                   "<option value=\"\" selected=\"selected\">")
     858           .append(_("Select a section to add"))
     859           .append("</option>\n");
     860
     861        for (String s : sortedSections) {
     862            buf.append("<option value=\"").append(s).append("\">")
     863               .append(s).append("</option>\n");
     864        }
     865
     866        buf.append("</select>\n" +
     867                   "<input type=\"hidden\" name=\"order\" value=\"")
     868           .append(sections.size())
     869           .append("\"></td>" +
     870                   "<td align=\"center\" colspan=\"2\">" +
     871                   "<input type=\"submit\" name=\"action\" class=\"add\" value=\"")
     872           .append(_("Add item"))
     873           .append("\"></td></tr>")
     874           .append("</table>\n");
     875        return buf.toString();
     876    }
    736877}
  • apps/routerconsole/java/src/net/i2p/router/web/UpdateHandler.java

    r69cdcc8 r77d40f8d  
    238238                return;
    239239            StringBuilder buf = new StringBuilder(64);
    240             buf.append("<b>").append(_("Updating")).append("</b> ");
    241240            double pct = ((double)alreadyTransferred + (double)currentWrite) /
    242241                         ((double)alreadyTransferred + (double)currentWrite + bytesRemaining);
    243242            synchronized (_pct) {
    244                 buf.append(_pct.format(pct));
    245             }
    246             buf.append(":<br>\n");
    247             buf.append(_("{0}B transferred", DataHelper.formatSize2(currentWrite + alreadyTransferred)));
     243                buf.append(_("{0} downloaded", _pct.format(pct)));
     244            }
     245            buf.append("<br>\n");
     246            buf.append(DataHelper.formatSize2(currentWrite + alreadyTransferred))
     247               .append("B / ")
     248               .append(DataHelper.formatSize2(currentWrite + alreadyTransferred + bytesRemaining))
     249               .append("B");
    248250            updateStatus(buf.toString());
    249251        }
  • apps/routerconsole/jsp/config.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("configure bandwidth")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016
    1117<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configadvanced.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("config advanced")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016
    1117<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configclients.jsp

    r69cdcc8 r77d40f8d  
    1111}
    1212input.default { width: 1px; height: 1px; visibility: hidden; }
    13 </style></head><body>
     13</style>
     14<script src="/js/ajax.js" type="text/javascript"></script>
     15<script type="text/javascript">
     16  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     17  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     18  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     19</script>
     20</head><body onload="initAjax()">
    1421
    1522<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/confighome.jsp

    r69cdcc8 r77d40f8d  
    1313}
    1414</style>
    15 </head><body>
     15<script src="/js/ajax.js" type="text/javascript"></script>
     16<script type="text/javascript">
     17  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     18  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     19  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     20</script>
     21</head><body onload="initAjax()">
    1622
    1723<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configkeyring.jsp

    r69cdcc8 r77d40f8d  
    66<%@include file="css.jsi" %>
    77<%=intl.title("config keyring")%>
    8 </head><body>
     8<script src="/js/ajax.js" type="text/javascript"></script>
     9<script type="text/javascript">
     10  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     11  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     12  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     13</script>
     14</head><body onload="initAjax()">
    915
    1016<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configlogging.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("config logging")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016<jsp:useBean class="net.i2p.router.web.ConfigLoggingHelper" id="logginghelper" scope="request" />
    1117<jsp:setProperty name="logginghelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
  • apps/routerconsole/jsp/confignet.jsp

    r69cdcc8 r77d40f8d  
    66<%@include file="css.jsi" %>
    77<%=intl.title("config networking")%>
    8 </head><body>
     8<script src="/js/ajax.js" type="text/javascript"></script>
     9<script type="text/javascript">
     10  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     11  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     12  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     13</script>
     14</head><body onload="initAjax()">
    915
    1016<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configpeer.jsp

    r69cdcc8 r77d40f8d  
    66<%@include file="css.jsi" %>
    77<%=intl.title("config peers")%>
    8 </head><body>
     8<script src="/js/ajax.js" type="text/javascript"></script>
     9<script type="text/javascript">
     10  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     11  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     12  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     13</script>
     14</head><body onload="initAjax()">
    915
    1016<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configreseed.jsp

    r69cdcc8 r77d40f8d  
    66<%@include file="css.jsi" %>
    77<%=intl.title("config reseeding")%>
    8 </head><body>
     8<script src="/js/ajax.js" type="text/javascript"></script>
     9<script type="text/javascript">
     10  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     11  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     12  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     13</script>
     14</head><body onload="initAjax()">
    915
    1016<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configservice.jsp

    r69cdcc8 r77d40f8d  
    66<%@include file="css.jsi" %>
    77<%=intl.title("config service")%>
    8 </head><body>
     8<script src="/js/ajax.js" type="text/javascript"></script>
     9<script type="text/javascript">
     10  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     11  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     12  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     13</script>
     14</head><body onload="initAjax()">
    915
    1016<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configstats.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("config stats")%>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
    915<script type="text/javascript">
    1016function init()
    1117{
    1218        checkAll = false;
     19        initAjax();
    1320}
    1421function toggleAll(category)
  • apps/routerconsole/jsp/configtunnels.jsp

    r69cdcc8 r77d40f8d  
    66<%@include file="css.jsi" %>
    77<%=intl.title("config tunnels")%>
    8 </head><body>
     8<script src="/js/ajax.js" type="text/javascript"></script>
     9<script type="text/javascript">
     10  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     11  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     12  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     13</script>
     14</head><body onload="initAjax()">
    915
    1016<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configui.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("config UI")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016
    1117<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/configupdate.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("config update")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016
    1117<%@include file="summary.jsi" %>
  • apps/routerconsole/jsp/console.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("home")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016<%
    1117    String consoleNonce = System.getProperty("router.consoleNonce");
     
    1622%>
    1723
    18 <%@include file="summary.jsi" %><h1><%=intl._("I2P Router Console")%></h1>
     24<%@include file="summary.jsi" %>
     25
     26<h1><%=intl._("I2P Router Console")%></h1>
    1927<div class="news" id="news">
    20  <jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" />
    21  <jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    2228<%
    2329   if (newshelper.shouldShowNews()) {
    24        java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml");
    2530%>
    26  <jsp:setProperty name="newshelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
    27  <jsp:setProperty name="newshelper" property="maxLines" value="300" />
    2831 <jsp:getProperty name="newshelper" property="content" />
    2932 <hr>
  • apps/routerconsole/jsp/css.jsi

    r69cdcc8 r77d40f8d  
    2929<jsp:useBean class="net.i2p.router.web.CSSHelper" id="intl" scope="request" />
    3030<jsp:setProperty name="intl" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     31<link rel="icon" href="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/favicon.ico">
    3132<%
    3233   // clickjacking
  • apps/routerconsole/jsp/debug.jsp

    r69cdcc8 r77d40f8d  
    1010<html><head><title>I2P Router Console - Debug</title>
    1111<%@include file="css.jsi" %>
    12 </head><body>
     12<script src="/js/ajax.js" type="text/javascript"></script>
     13<script type="text/javascript">
     14  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     15  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     16  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     17</script>
     18</head><body onload="initAjax()">
    1319<%@include file="summary.jsi" %>
    1420<h1>Router SKM</h1>
  • apps/routerconsole/jsp/error.jsp

    r69cdcc8 r77d40f8d  
    1717<%@include file="css.jsi" %>
    1818<%=intl.title("Page Not Found")%>
    19 </head><body>
     19<script src="/js/ajax.js" type="text/javascript"></script>
     20<script type="text/javascript">
     21  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     22  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     23  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     24</script>
     25</head><body onload="initAjax()">
    2026<%@include file="summary.jsi" %>
    21 <h1><%=ERROR_CODE%> <%=ERROR_MESSAGE%></h1>
     27<h1><%=ERROR_CODE%>&nbsp;<%=ERROR_MESSAGE%></h1>
    2228<div class="sorry" id="warning">
    2329<%=intl._("Sorry! You appear to be requesting a non-existent Router Console page or resource.")%><hr>
    24 <%=intl._("Error 404")%>: <%=ERROR_URI%> <%=intl._("not found")%>.
     30<%=intl._("Error 404")%>: <%=ERROR_URI%>&nbsp;<%=intl._("not found")%>.
    2531</div></body></html>
  • apps/routerconsole/jsp/graph.jsp

    r69cdcc8 r77d40f8d  
    1313    graphHelper.storeWriter(out);
    1414%>
    15 </head><body>
     15<script src="/js/ajax.js" type="text/javascript"></script>
     16<script type="text/javascript">
     17  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     18  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     19  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     20</script>
     21</head><body onload="initAjax()">
    1622<%@include file="summary.jsi" %>
    1723<h1><%=intl._("I2P Performance Graphs")%></h1>
  • apps/routerconsole/jsp/graphs.jsp

    r69cdcc8 r77d40f8d  
    2020    }
    2121%>
    22 </head><body>
     22<script src="/js/ajax.js" type="text/javascript"></script>
     23<script type="text/javascript">
     24  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     25  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     26  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     27</script>
     28</head><body onload="initAjax()">
    2329<%@include file="summary.jsi" %>
    2430<h1><%=intl._("I2P Performance Graphs")%></h1>
  • apps/routerconsole/jsp/help.jsp

    r69cdcc8 r77d40f8d  
    1010<html><head><title>I2P Router Console - help</title>
    1111<%@include file="css.jsi" %>
    12 </head><body>
     12<script src="/js/ajax.js" type="text/javascript"></script>
     13<script type="text/javascript">
     14  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     15  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     16  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     17</script>
     18</head><body onload="initAjax()">
    1319<%@include file="summary.jsi" %>
    1420<h1>I2P Router Help &amp; Support</h1>
  • apps/routerconsole/jsp/help_ar.jsp

    r69cdcc8 r77d40f8d  
    1010<html><head><title>I2P مساعدة لوحة التحكم</title>
    1111<%@include file="css.jsi" %>
    12 </head><body>
     12<script src="/js/ajax.js" type="text/javascript"></script>
     13<script type="text/javascript">
     14  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     15  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     16  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     17</script>
     18</head><body onload="initAjax()">
    1319<%@include file="summary.jsi" %>
    1420<h1>I2P مساعدة لوحة التحكم</h1>
  • apps/routerconsole/jsp/help_fr.jsp

    r69cdcc8 r77d40f8d  
    1010<html><head><title>Console du routeur I2P - Aide</title>
    1111<%@include file="css.jsi" %>
    12 </head><body>
     12<script src="/js/ajax.js" type="text/javascript"></script>
     13<script type="text/javascript">
     14  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     15  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     16  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     17</script>
     18</head><body onload="initAjax()">
    1319<%@include file="summary.jsi" %>
    1420Traduction de mars 2011 (magma@mail.i2p)
  • apps/routerconsole/jsp/help_nl.jsp

    r69cdcc8 r77d40f8d  
    1010<html><head><title>I2P Router Console - help</title>
    1111<%@include file="css.jsi" %>
    12 </head><body>
     12<script src="/js/ajax.js" type="text/javascript"></script>
     13<script type="text/javascript">
     14  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     15  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     16  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     17</script>
     18</head><body onload="initAjax()">
    1319<%@include file="summary.jsi" %>
    1420<h1>I2P Router Help &amp; Support</h1>
  • apps/routerconsole/jsp/help_ru.jsp

    r69cdcc8 r77d40f8d  
    1010<html><head><title>Консоль маршрутизатора I2P - справка</title>
    1111<%@include file="css.jsi" %>
    12 </head><body>
     12<script src="/js/ajax.js" type="text/javascript"></script>
     13<script type="text/javascript">
     14  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     15  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     16  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     17</script>
     18</head><body onload="initAjax()">
    1319<%@include file="summary.jsi" %>
    1420
  • apps/routerconsole/jsp/home.jsp

    r69cdcc8 r77d40f8d  
    77<script src="/js/ajax.js" type="text/javascript"></script>
    88<script type="text/javascript">
    9   var failMessage = "<b><%=intl._("Router is down")%><\/b>";
    10   function requestAjax1() { ajax("/xhr1.jsp", "xhr", 15000); }
    11   function initAjax() { setTimeout(requestAjax1, 15000);  }
     9  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     10  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     11  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
    1212</script>
    1313</head><body onload="initAjax()">
     
    2121<jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" />
    2222<jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     23<%
     24    java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml");
     25%>
     26 <jsp:setProperty name="newshelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
     27 <jsp:setProperty name="newshelper" property="maxLines" value="300" />
    2328 <jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="updatehelper" scope="request" />
    2429 <jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     
    2934   <a href="/console"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/i2plogo.png" alt="<%=intl._("I2P Router Console")%>" title="<%=intl._("I2P Router Console")%>"></a>
    3035  </div>
    31   <hr>
    3236  <div id="xhr">
    3337<!-- for non-script -->
    3438<%@include file="xhr1.jsi" %>
    3539  </div>
    36 <%
    37    if (!newshelper.shouldShowNews()) {
    38 %>
    39 <hr><h3><%=intl._("News")%></h3><hr class="b">
    40 <jsp:getProperty name="updatehelper" property="newsStatus" />
    41 <%
    42    }  // !shouldShowNews()
    43 %>
    4440 </div>
    4541</div>
     
    4945<%
    5046   if (newshelper.shouldShowNews()) {
    51        java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml");
    5247%>
    5348<div class="news" id="news">
    54  <jsp:setProperty name="newshelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
    55  <jsp:setProperty name="newshelper" property="maxLines" value="300" />
    5649 <jsp:getProperty name="newshelper" property="content" />
    5750 <hr>
  • apps/routerconsole/jsp/jars.jsp

    r69cdcc8 r77d40f8d  
    66<%@include file="css.jsi" %>
    77<%=intl.title("Jar File Dump")%>
    8 </head><body>
     8<script src="/js/ajax.js" type="text/javascript"></script>
     9<script type="text/javascript">
     10  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     11  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     12  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     13</script>
     14</head><body onload="initAjax()">
    915<%@include file="summary.jsi" %><h1>Jar File Dump</h1>
    1016<div class="main" id="main">
  • apps/routerconsole/jsp/jobs.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("job queue")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016<%@include file="summary.jsi" %><h1><%=intl._("I2P Router Job Queue")%></h1>
    1117<div class="main" id="main">
  • apps/routerconsole/jsp/logs.jsp

    r69cdcc8 r77d40f8d  
    66<%@include file="css.jsi" %>
    77<%=intl.title("logs")%>
    8 </head><body>
     8<script src="/js/ajax.js" type="text/javascript"></script>
     9<script type="text/javascript">
     10  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     11  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     12  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     13</script>
     14</head><body onload="initAjax()">
    915<%@include file="summary.jsi" %>
    1016<h1><%=intl._("I2P Router Logs")%></h1>
     
    3440<h3><%=intl._("Critical Logs")%></h3><a name="criticallogs"> </a>
    3541 <jsp:getProperty name="logsHelper" property="criticalLogs" />
     42<hr>
    3643<h3><%=intl._("Router Logs")%> (<a href="configlogging"><%=intl._("configure")%></a>)</h3>
    3744 <jsp:getProperty name="logsHelper" property="logs" />
     45<hr>
    3846<h3><%=intl._("Service (Wrapper) Logs")%></h3><a name="servicelogs"> </a>
    3947 <jsp:getProperty name="logsHelper" property="serviceLogs" />
  • apps/routerconsole/jsp/netdb.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("network database")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016<%@include file="summary.jsi" %>
    1117<h1><%=intl._("I2P Network Database")%></h1>
  • apps/routerconsole/jsp/nowebapp.jsp

    r69cdcc8 r77d40f8d  
    88<%@include file="css.jsi" %>
    99<%=intl.title("WebApp Not Found")%>
    10 </head><body>
     10<script src="/js/ajax.js" type="text/javascript"></script>
     11<script type="text/javascript">
     12  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     13  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     14  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     15</script>
     16</head><body onload="initAjax()">
    1117<%@include file="summary.jsi" %>
    1218<h1><%=intl._("Web Application Not Running")%></h1>
  • apps/routerconsole/jsp/oldconsole.jsp

    r69cdcc8 r77d40f8d  
    1010<html><head><title>I2P Router Console - internals</title>
    1111<%@include file="css.jsi" %>
    12 </head><body>
     12<script src="/js/ajax.js" type="text/javascript"></script>
     13<script type="text/javascript">
     14  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     15  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     16  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     17</script>
     18</head><body onload="initAjax()">
    1319<%@include file="summary.jsi" %>
    1420<jsp:useBean class="net.i2p.router.web.OldConsoleHelper" id="conhelper" scope="request" />
  • apps/routerconsole/jsp/peers.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("peer connections")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016<%@include file="summary.jsi" %>
    1117<h1><%=intl._("I2P Network Peers")%></h1>
  • apps/routerconsole/jsp/profiles.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("peer profiles")%>
    9 </head><body><%@include file="summary.jsi" %>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
     16<%@include file="summary.jsi" %>
    1017<h1><%=intl._("I2P Network Peer Profiles")%></h1>
    1118<div class="main" id="main"><div class="wideload">
  • apps/routerconsole/jsp/stats.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("statistics")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016<%@include file="summary.jsi" %>
    1117<jsp:useBean class="net.i2p.router.web.OldConsoleHelper" id="oldhelper" scope="request" />
  • apps/routerconsole/jsp/summary.jsi

    r69cdcc8 r77d40f8d  
     1<jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" />
     2<jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     3<%
     4    java.io.File newspath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml");
     5%>
     6<jsp:setProperty name="newshelper" property="page" value="<%=newspath.getAbsolutePath()%>" />
     7<jsp:setProperty name="newshelper" property="maxLines" value="300" />
    18<div class="routersummaryouter">
    29<%
     
    1421            // pass the new delay parameter to the iframe
    1522            newDelay = "?refresh=" + d;
     23            // update disable boolean
     24            intl.setDisableRefresh(d);
    1625        }
    17         if (!"0".equals(d))
    18             out.print("<iframe src=\"/summaryframe.jsp" + newDelay + "\" height=\"1500\" width=\"200\" scrolling=\"auto\" frameborder=\"0\" title=\"sidepanel\">\n");
     26        if (!intl.getDisableRefresh())
     27            out.print("<noscript><iframe src=\"/summaryframe.jsp" + newDelay + "\" height=\"1500\" width=\"200\" scrolling=\"auto\" frameborder=\"0\" title=\"sidepanel\"></noscript>\n");
    1928    }
    2029%>
     
    3443
    3544    // d and allowIFrame defined above
    36     if (!"0".equals(d)) {
    37         out.print("</div></iframe>\n");
     45    if (!intl.getDisableRefresh()) {
     46        out.print("</div><noscript></iframe></noscript>\n");
    3847    } else if (allowIFrame) {
    3948        // since we don't have an iframe this will reload the base page, and
    4049        // the new delay will be passed to the iframe above
    41         out.print("<div class=\"refresh\"><form action=\"" + request.getRequestURI() + "\" method=\"POST\">\n" +
     50        out.print("<noscript><div class=\"refresh\"><form action=\"" + request.getRequestURI() + "\" method=\"POST\">\n" +
    4251                  "<b>");
    4352        // We have intl defined when this is included, but not when compiled standalone.
     
    4857        out.print(intl._("Enable"));
    4958        out.print("</button>\n" +
    50                   "</form></div></div>\n");
     59                  "</form></div></noscript></div>\n");
    5160    } else {
    5261        out.print("</div>\n");
  • apps/routerconsole/jsp/summaryframe.jsp

    r69cdcc8 r77d40f8d  
    2727            d = net.i2p.data.DataHelper.stripHTML(d);  // XSS
    2828            intl.setRefresh(d);
     29            intl.setDisableRefresh(d);
    2930        }
    3031        // we probably don't get here if d == "0" since caught in summary.jsi, but just
    3132        // to be sure...
    32         if (!"0".equals(d)) {
     33        if (!intl.getDisableRefresh()) {
    3334            // doesn't work for restart or shutdown with no expl. tunnels,
    3435            // since the call to ConfigRestartBean.renderStatus() hasn't happened yet...
     
    5354%>
    5455</head><body style="margin: 0;"><div class="routersummary">
     56<jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" />
     57<jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     58<%
     59    java.io.File newspath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml");
     60%>
     61<jsp:setProperty name="newshelper" property="page" value="<%=newspath.getAbsolutePath()%>" />
     62<jsp:setProperty name="newshelper" property="maxLines" value="300" />
    5563<%@include file="summarynoframe.jsi" %>
    5664<%
    5765    // d and shutdownSoon defined above
    5866    if (!shutdownSoon) {
    59         out.print("<div class=\"refresh\"><form action=\"summaryframe.jsp\" method=\"POST\">\n");
    60         if ("0".equals(d)) {
     67        out.print("<hr>\n<div class=\"refresh\"><form action=\"summaryframe.jsp\" method=\"POST\">\n");
     68        if (intl.getDisableRefresh()) {
    6169            out.print("<b>");
    6270            out.print(intl._("Refresh (s)"));
  • apps/routerconsole/jsp/summarynoframe.jsi

    r69cdcc8 r77d40f8d  
    1 <%@page import="net.i2p.router.web.SummaryHelper" %>
    21<%
    32/*
    4  * Note:
    5  * This is included almost 30 times, so keep whitespace etc. to a minimum.
     3 * TODO - the bar would render more cleanly if we specified the img height and width here,
     4 * but unfortunately the images in the different themes are different sizes.
     5 * They range in height from 37 to 43 px. But there's a -2 bottom margin...
     6 * So put it in a div.
    67 */
    78%>
    8 <jsp:useBean class="net.i2p.router.web.SummaryHelper" id="helper" scope="request" />
    9 <jsp:setProperty name="helper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    10 <jsp:setProperty name="helper" property="action" value="<%=request.getParameter(\"action\")%>" />
    11 <jsp:setProperty name="helper" property="updateNonce" value="<%=request.getParameter(\"updateNonce\")%>" />
    12 <jsp:setProperty name="helper" property="consoleNonce" value="<%=request.getParameter(\"consoleNonce\")%>" />
    13 <jsp:setProperty name="helper" property="requestURI" value="<%=request.getRequestURI()%>" />
    14 <% helper.storeWriter(out); %>
    15 <%
    16 /*
    17  * The following is required for the reseed button to work, although we probably
    18  * only need the reseedNonce property.
    19  */
    20 %>
    21 <jsp:useBean class="net.i2p.router.web.ReseedHandler" id="reseed" scope="request" />
    22 <jsp:setProperty name="reseed" property="*" />
    23 <%
    24 /*
    25  * The following is required for the update buttons to work, although we probably
    26  * only need the updateNonce property.
    27  */
    28 %>
    29 <jsp:useBean class="net.i2p.router.web.UpdateHandler" id="update" scope="request" />
    30 <jsp:setProperty name="update" property="*" />
    31 <jsp:setProperty name="update" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    32 <%
    33     // moved to java for ease of translation and to avoid 30 copies
    34     helper.renderSummaryBar();
    35 %>
     9  <div style="height: 36px;">
     10   <a href="/" target="_top">
     11    <img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/i2plogo.png" alt="<%=intl._("I2P Router Console")%>" title="<%=intl._("I2P Router Console")%>">
     12   </a>
     13  </div>
     14  <div id="xhr">
     15<!-- for non-script -->
     16<%@include file="xhr1.jsi" %>
     17  </div>
  • apps/routerconsole/jsp/tunnels.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("tunnel summary")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016<%@include file="summary.jsi" %><h1><%=intl._("I2P Tunnel Summary")%></h1>
    1117<div class="main" id="main">
  • apps/routerconsole/jsp/viewprofile.jsp

    r69cdcc8 r77d40f8d  
    77<%@include file="css.jsi" %>
    88<%=intl.title("Peer Profile")%>
    9 </head><body>
     9<script src="/js/ajax.js" type="text/javascript"></script>
     10<script type="text/javascript">
     11  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
     12  function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
     13  function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
     14</script>
     15</head><body onload="initAjax()">
    1016<%@include file="summary.jsi" %>
    1117<h1><%=intl._("Peer Profile")%></h1>
  • apps/routerconsole/jsp/xhr1.jsi

    r69cdcc8 r77d40f8d  
     1<%@page import="net.i2p.router.web.SummaryHelper" %>
     2<%
     3/*
     4 * Note:
     5 * This is included on every refresh, so keep whitespace etc. to a minimum.
     6 */
     7%>
    18<jsp:useBean class="net.i2p.router.web.SummaryHelper" id="helper" scope="request" />
    29<jsp:setProperty name="helper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
    310<jsp:setProperty name="helper" property="action" value="<%=request.getParameter(\"action\")%>" />
    4 <table><tr><td align="left"><b><%=intl._("Version")%>:</b></td><td align="right">
    5 <jsp:getProperty name="helper" property="version" />
    6 </td></tr><tr><td align="left"><b><%=intl._("Uptime")%>:</b></td><td align="right">
    7 <jsp:getProperty name="helper" property="uptime" />
    8 </td></tr></table><hr>
    911<jsp:setProperty name="helper" property="updateNonce" value="<%=request.getParameter(\"updateNonce\")%>" />
    1012<jsp:setProperty name="helper" property="consoleNonce" value="<%=request.getParameter(\"consoleNonce\")%>" />
    1113<%
    1214    String reqURI = request.getRequestURI();
    13     if (reqURI != null)
    14         reqURI = reqURI.replace("/xhr1.jsp", "/home");
     15    if (reqURI.contains("/xhr1"))
     16        reqURI = request.getParameter("requestURI");
    1517    helper.setRequestURI(reqURI);
    1618%>
    17 <h4><a href="/confignet#help" title="<%=intl._("Help with configuring your firewall and router for optimal I2P performance")%>"><%=intl._("Network")%>:
    18 <jsp:getProperty name="helper" property="reachability" /></a></h4>
    19 <hr>
    20 <jsp:getProperty name="helper" property="updateStatus" />
    21 <jsp:getProperty name="helper" property="restartStatus" />
    22 <hr>
    23 <jsp:getProperty name="helper" property="firewallAndReseedStatus" />
    24 <jsp:getProperty name="helper" property="destinations" />
     19<% helper.storeWriter(out); %>
     20<% helper.storeNewsHelper(newshelper); %>
     21<%
     22/*
     23 * The following is required for the reseed button to work, although we probably
     24 * only need the reseedNonce property.
     25 */
     26%>
     27<jsp:useBean class="net.i2p.router.web.ReseedHandler" id="reseed" scope="request" />
     28<jsp:setProperty name="reseed" property="*" />
     29<%
     30/*
     31 * The following is required for the update buttons to work, although we probably
     32 * only need the updateNonce property.
     33 */
     34%>
     35<jsp:useBean class="net.i2p.router.web.UpdateHandler" id="update" scope="request" />
     36<jsp:setProperty name="update" property="*" />
     37<jsp:setProperty name="update" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     38<%
     39    // moved to java for ease of translation
     40    helper.renderSummaryBar();
     41%>
  • apps/routerconsole/jsp/xhr1.jsp

    r69cdcc8 r77d40f8d  
    1212<jsp:useBean class="net.i2p.router.web.CSSHelper" id="intl" scope="request" />
    1313<jsp:setProperty name="intl" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     14<jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" />
     15<jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
     16<%
     17    java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml");
     18%>
     19 <jsp:setProperty name="newshelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
     20 <jsp:setProperty name="newshelper" property="maxLines" value="300" />
    1421<%@include file="xhr1.jsi" %>
  • apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java

    r69cdcc8 r77d40f8d  
    4141import net.i2p.util.SecureFileOutputStream;
    4242
    43 public class AddressbookBean
     43public class AddressbookBean extends BaseBean
    4444{
    4545        protected String book, action, serial, lastSerial, filter, search, hostname, destination;
    4646        protected int beginIndex, endIndex;
    47         protected final Properties properties;
    4847        private Properties addressbook;
    4948        private int trClass;
     
    8382        public AddressbookBean()
    8483        {
    85                 properties = new Properties();
     84                super();
    8685                deletionMarks = new LinkedList();
    8786                beginIndex = 0;
    8887                endIndex = DISPLAY_SIZE - 1;
    89         }
    90 
    91         private long configLastLoaded = 0;
    92         private static final String PRIVATE_BOOK = "private_addressbook";
    93         private static final String DEFAULT_PRIVATE_BOOK = "../privatehosts.txt";
    94 
    95         protected void loadConfig()
    96         {
    97                 long currentTime = System.currentTimeMillis();
    98                
    99                 if( !properties.isEmpty() &&  currentTime - configLastLoaded < 10000 )
    100                         return;
    101                
    102                 FileInputStream fis = null;
    103                 try {
    104                         properties.clear();
    105                         fis = new FileInputStream( ConfigBean.configFileName );
    106                         properties.load( fis );
    107                         // added in 0.5, for compatibility with 0.4 config.txt
    108                         if( properties.getProperty(PRIVATE_BOOK) == null)
    109                                 properties.setProperty(PRIVATE_BOOK, DEFAULT_PRIVATE_BOOK);
    110                         configLastLoaded = currentTime;
    111                 }
    112                 catch (Exception e) {
    113                         Debug.debug( e.getClass().getName() + ": " + e.getMessage() );
    114                 } finally {
    115                         if (fis != null)
    116                                 try { fis.close(); } catch (IOException ioe) {}
    117                 }       
    11888        }
    11989
  • apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java

    r69cdcc8 r77d40f8d  
    3737import net.i2p.util.SecureFileOutputStream;
    3838
    39 public class SubscriptionsBean
     39public class SubscriptionsBean extends BaseBean
    4040{
    4141        private String action, fileName, content, serial, lastSerial;
    4242       
    43         Properties properties;
    44        
    45         public SubscriptionsBean()
    46         {
    47                 properties = new Properties();
    48         }
    49         private long configLastLoaded = 0;
    50         private void loadConfig()
    51         {
    52                 long currentTime = System.currentTimeMillis();
    53                
    54                 if( !properties.isEmpty() &&  currentTime - configLastLoaded < 10000 )
    55                         return;
    56                
    57                 FileInputStream fis = null;
    58                 try {
    59                         properties.clear();
    60                         fis = new FileInputStream( ConfigBean.configFileName );
    61                         properties.load( fis );
    62                         configLastLoaded = currentTime;
    63                 }
    64                 catch (Exception e) {
    65                         Debug.debug( e.getClass().getName() + ": " + e.getMessage() );
    66                 } finally {
    67                         if (fis != null)
    68                                 try { fis.close(); } catch (IOException ioe) {}
    69                 }       
    70         }
    7143        public String getAction() {
    7244                return action;
  • apps/susidns/src/jsp/addressbook.jsp

    r69cdcc8 r77d40f8d  
    4848<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    4949<title>${book.book} <%=intl._("address book")%> - susidns</title>
    50 <link rel="stylesheet" type="text/css" href="css.css">
     50<link rel="stylesheet" type="text/css" href="<%=book.getTheme()%>susidns.css">
    5151</head>
    5252<body>
    5353<div class="page">
    5454<div id="logo">
    55 <a href="index"><img src="images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
     55<a href="index"><img src="<%=book.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
    5656</div>
    5757<hr>
  • apps/susidns/src/jsp/config.jsp

    r69cdcc8 r77d40f8d  
    3737<jsp:useBean id="version" class="i2p.susi.dns.VersionBean" scope="application"/>
    3838<jsp:useBean id="cfg" class="i2p.susi.dns.ConfigBean" scope="session"/>
     39<jsp:useBean id="base" class="i2p.susi.dns.BaseBean" scope="session" />
    3940<jsp:useBean id="intl" class="i2p.susi.dns.Messages" scope="application" />
    4041<jsp:setProperty name="cfg" property="*" />
     
    4445<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    4546<title><%=intl._("configuration")%> - susidns</title>
    46 <link rel="stylesheet" type="text/css" href="css.css">
     47<link rel="stylesheet" type="text/css" href="<%=base.getTheme()%>susidns.css">
    4748</head>
    4849<body>
    4950<div class="page">
    5051<div id="logo">
    51 <a href="index"><img src="images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
     52<a href="index"><img src="<%=base.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
    5253</div><hr>
    5354<div id="navi">
     
    130131<%=intl._("File to log activity to (change to /dev/null if you like)")%>
    131132</li>
     133<li><b>theme</b> -
     134<%=intl._("Name of the theme to use (defaults to 'light')")%>
     135</li>
    132136</ul>
    133137</div><hr>
  • apps/susidns/src/jsp/details.jsp

    r69cdcc8 r77d40f8d  
    4242<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    4343<title>${book.book} <%=intl._("addressbook")%> - susidns</title>
    44 <link rel="stylesheet" type="text/css" href="css.css">
     44<link rel="stylesheet" type="text/css" href="<%=book.getTheme()%>susidns.css">
    4545</head>
    4646<body>
    4747<div class="page">
    4848<div id="logo">
    49 <a href="index"><img src="images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
     49<a href="index"><img src="<%=book.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
    5050</div>
    5151<hr>
  • apps/susidns/src/jsp/index.jsp

    r69cdcc8 r77d40f8d  
    3636<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    3737<jsp:useBean id="version" class="i2p.susi.dns.VersionBean" scope="application" />
     38<jsp:useBean id="base" class="i2p.susi.dns.BaseBean" scope="session" />
    3839<jsp:useBean id="intl" class="i2p.susi.dns.Messages" scope="application" />
    3940<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     
    4243<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    4344<title><%=intl._("Introduction")%> - SusiDNS</title>
    44 <link rel="stylesheet" type="text/css" href="css.css">
     45<link rel="stylesheet" type="text/css" href="<%=base.getTheme()%>susidns.css">
    4546</head>
    4647<body>
    4748<div class="page">
    4849<div id="logo">
    49 <img src="images/logo.png" alt="susidns logo" border="0">
     50<img src="<%=base.getTheme()%>images/logo.png" alt="susidns logo" border="0">
    5051</div>
    5152<hr>
     
    8687<%=intl._("The private address book can also be used for aliases of hosts in your other address books.")%>
    8788</p>
    88 <center><img src="images/how.png" border="0" alt="address book working scheme" title="How the address book works" class="illustrate" /></center>
     89<center><img src="/themes/susidns/images/how.png" border="0" alt="address book working scheme" title="How the address book works" class="illustrate" /></center>
    8990</div>
    9091<hr>
  • apps/susidns/src/jsp/subscriptions.jsp

    r69cdcc8 r77d40f8d  
    4444<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    4545<title><%=intl._("subscriptions")%> - susidns</title>
    46 <link rel="stylesheet" type="text/css" href="css.css">
     46<link rel="stylesheet" type="text/css" href="<%=subs.getTheme()%>susidns.css">
    4747</head>
    4848<body>
    4949<div class="page">
    5050<div id="logo">
    51 <a href="index"><img src="images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
     51<a href="index"><img src="<%=subs.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
    5252</div><hr>
    5353<div id="navi">
  • apps/susimail/src/src/i2p/susi/webmail/WebMail.java

    r69cdcc8 r77d40f8d  
    165165        private static final String CONFIG_BCC_TO_SELF = "composer.bcc.to.self";
    166166
     167        private static final String CONFIG_THEME = "theme";
     168        private static final String DEFAULT_THEME = "light";
     169
    167170        private static final String spacer = "&nbsp;&nbsp;&nbsp;";
    168171        private static final String thSpacer = "<th>&nbsp;</th>\n";
     
    315318                public ArrayList attachments;
    316319                public boolean reallyDelete;
     320                String themePath, imgPath;
    317321               
    318322               
     
    358362         * @return
    359363         */
    360         private static String sortHeader( String name, String label )
    361         {
    362                 return "" + label + "&nbsp;<a href=\"" + myself + "?" + name + "=up\"><img src=\"3up.png\" border=\"0\" alt=\"^\"></a><a href=\"" + myself + "?" + name + "=down\"><img src=\"3down.png\" border=\"0\" alt=\"v\"></a>";
     364        private static String sortHeader( String name, String label, String imgPath )
     365        {
     366                return "" + label + "&nbsp;<a href=\"" + myself + "?" + name + "=up\"><img src=\"" + imgPath + "3up.png\" border=\"0\" alt=\"^\"></a><a href=\"" + myself + "?" + name + "=down\"><img src=\"" + imgPath + "3down.png\" border=\"0\" alt=\"v\"></a>";
    363367        }
    364368        /**
     
    12031207                        sessionObject.pageChanged = false;
    12041208                        sessionObject.showAttachment = null;
     1209                        sessionObject.themePath = "/themes/susimail/" + Config.getProperty(CONFIG_THEME, DEFAULT_THEME) + '/';
     1210                        sessionObject.imgPath = sessionObject.themePath + "images/";
    12051211                       
    12061212                        processStateChangeButtons( sessionObject, request );
     
    12611267                                        "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n" +
    12621268                                        "<title>susimail - " + subtitle + "</title>\n" +
    1263                                         "<link rel=\"stylesheet\" type=\"text/css\" href=\"css.css\">\n" +
     1269                                        "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + sessionObject.themePath + "susimail.css\">\n" +
    12641270                                        "</head>\n<body>\n" +
    1265                                         "<div class=\"page\"><p><img src=\"susimail.png\" alt=\"Susimail\"><br>&nbsp;</p>\n" +
     1271                                        "<div class=\"page\"><p><img src=\"" + sessionObject.imgPath + "susimail.png\" alt=\"Susimail\"><br>&nbsp;</p>\n" +
    12661272                                        "<form method=\"POST\" enctype=\"multipart/form-data\" action=\"" + myself + "\">" );
    12671273
     
    16081614                        button( LOGOUT, _("Logout") ) + "<table cellspacing=\"0\" cellpadding=\"5\">\n" +
    16091615                        "<tr><td colspan=\"8\"><hr></td></tr>\n<tr>" +
    1610                         thSpacer + "<th>" + sortHeader( SORT_SENDER, _("Sender") ) + "</th>" +
    1611                         thSpacer + "<th>" + sortHeader( SORT_SUBJECT, _("Subject") ) + "</th>" +
    1612                         thSpacer + "<th>" + sortHeader( SORT_DATE, _("Date") ) + sortHeader( SORT_ID, "" ) + "</th>" +
    1613                         thSpacer + "<th>" + sortHeader( SORT_SIZE, _("Size") ) + "</th></tr>" );
     1616                        thSpacer + "<th>" + sortHeader( SORT_SENDER, _("Sender"), sessionObject.imgPath ) + "</th>" +
     1617                        thSpacer + "<th>" + sortHeader( SORT_SUBJECT, _("Subject"), sessionObject.imgPath ) + "</th>" +
     1618                        thSpacer + "<th>" + sortHeader( SORT_DATE, _("Date"), sessionObject.imgPath ) + sortHeader( SORT_ID, "", sessionObject.imgPath ) + "</th>" +
     1619                        thSpacer + "<th>" + sortHeader( SORT_SIZE, _("Size"), sessionObject.imgPath ) + "</th></tr>" );
    16141620                int bg = 0;
    16151621                int i = 0;
  • history.txt

    r69cdcc8 r77d40f8d  
     12012-07-16 str4d
     2 * console: work towards better integration
     3   - Wrapped the bundled apps in iFrames (with a link in the page header to
     4     open the app in a new tab):
     5     - i2ptunnel
     6     - i2psnark
     7     - susimail
     8     - susidns
     9   - Theme improvements
     10     - Added theme support to susimail and susidns
     11       - "susimail.theme=foo" in susimail.config
     12       - "theme=foo" on susidns config page
     13     - Extensive work on dark console theme (dr|z3d)
     14       - Improved integration of i2ptunnel in iframe
     15       - General improvements
     16     - New dark themes for i2psnark, susimail and susidns which integrate well
     17       with dark console theme (dr|z3d)
     18     - Tweaks to other themes (console and i2psnark) to work with the various
     19       structural changes (dr|z3d)
     20     - Added per-theme favicons
     21     - Updated IE shim to fix some issues
     22   - Summary bar improvements
     23     - Updated every console page to use Ajax for the summary bar
     24       - Falls back to iFrame if JS disabled
     25       - Ajax refresh time is adjustable
     26     - The summary bar is now customizable; sections can be added, removed and
     27       reordered as desired
     28     - Added/updated tooltips
     29     - Added a new summary bar section to show news headings when the main news
     30       display is hidden
     31   - Changes to structure of /home to bring it in line with rest of console
     32 * i2psnark
     33   - Reworked the torrent info/file manager page to improve the layout
     34
    1352012-07-15 zzz
    236 * XORComparator: Reduce object churn (Ticket #658)
  • installer/resources/readme/readme.html

    r69cdcc8 r77d40f8d  
    1010<li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>On I2P you can access anonymous websites (eepsites) and other services (e.g. ssh over I2P, IRC, Jabber etc.) in addition to being able to host your own services. You can also access the normal web anonymously via I2P's built-in web proxy (outproxy). <a href="http://www.i2p2.de/htproxyports.html" target="_blank">Configure your browser</a> to use the HTTP proxy at <code>127.0.0.1 port 4444</code>, then browse to an eepsite or a normal, unencrypted <code>http://</code> address. If you wish to disable or change outproxy access to the normal internet, remove or modify the outproxy entry for <code>false.i2p</code> under the <i>Outproxies</i> option in the <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy  Tunnel Editor</a>. In the "Sites of Interest" section <a href="#eepsites">below</a>, we list a few of the sites hosted on I2P.</li>
    1111
    12 <li class="tidylist"><b>Anonymous E-Mail</b><br>Postman's I2P-based mail system can be accessed either via <a href="/susimail/susimail">I2P's built-in mail client</a>
     12<li class="tidylist"><b>Anonymous E-Mail</b><br>Postman's I2P-based mail system can be accessed either via <a href="/webmail">I2P's built-in mail client</a>
    1313  (susimail) or using any mail client that supports smtp and pop3.
    1414  Accounts can send and receive mail from the normal internet. For an
  • installer/resources/readme/readme_de.html

    r69cdcc8 r77d40f8d  
    2626     Emails innerhalb von I2P sowie Emails von und ins normale Internet zu
    2727     schicken.  Hole Dir Dein Emailkonto auf <a href="http://hq.postman.i2p/">hq.postman.i2p</a>.
    28      Im Verbund damit gibt es <a href="/susimail/susimail">susimail</a>, einen
     28     Im Verbund damit gibt es <a href="/webmail">susimail</a>, einen
    2929     browserbasierten anonymen POP3/SMTP-Klienten, fertig eingerichtet
    3030     f&uuml;r Postmans Email-Service.
  • installer/resources/readme/readme_es.html

    r69cdcc8 r77d40f8d  
    1818 <li class="tidylist"><b>intercambiar datos</b> - Hay una <a href="i2psnark/">adaptaci&oacute;n</a> para I2P de la aplicaci&oacute;n <a href="http://www.bittorrent.com/">BitTorrent</a>
    1919     <a href="http://www.klomp.org/snark/">Snark</a>.</li>
    20  <li class="tidylist"><b>correo electr&oacute;nico an&oacute;nimo</b> - Postman cre&oacute; un sistema de correo electr&oacute;nico que es compatible con las aplicaciones de correo comunes (POP3/SMTP), el cual permite enviar correos electr&oacute;nicos tanto dentro de I2P como recibir y mandar correos de/a internet. Puedes registrar tu cuenta en <a href="http://hq.postman.i2p/">hq.postman.i2p</a>. Junto a esto tenemos <a href="/susimail/susimail">susimail</a>, un cliente an&oacute;nimo de correo que se abre en el navegador web. Ya est&aacute; configurado para el servicio de Postman.<br>Tambi&eacute;n te recomendamos nuestro nuevo sistema de correo electr&oacute;nico sin servidor <a href="http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/">I2P-Bote</a>, que existe en forma de plugin. Viene con una interfaz web y cifra todos los mensajes de fin a fin.</li>
     20 <li class="tidylist"><b>correo electr&oacute;nico an&oacute;nimo</b> - Postman cre&oacute; un sistema de correo electr&oacute;nico que es compatible con las aplicaciones de correo comunes (POP3/SMTP), el cual permite enviar correos electr&oacute;nicos tanto dentro de I2P como recibir y mandar correos de/a internet. Puedes registrar tu cuenta en <a href="http://hq.postman.i2p/">hq.postman.i2p</a>. Junto a esto tenemos <a href="/webmail">susimail</a>, un cliente an&oacute;nimo de correo que se abre en el navegador web. Ya est&aacute; configurado para el servicio de Postman.<br>Tambi&eacute;n te recomendamos nuestro nuevo sistema de correo electr&oacute;nico sin servidor <a href="http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/">I2P-Bote</a>, que existe en forma de plugin. Viene con una interfaz web y cifra todos los mensajes de fin a fin.</li>
    2121 <li class="tidylist"><b>chat an&oacute;nimo</b> - Lanza tu cliente IRC preferido y con&eacute;ctate con el servidor an&oacute;nimo en
    2222     <b>127.0.0.1 puerto 6668</b>.  Esto te llevar&aacute; a uno de dos servidores an&oacute;nimos de IRC
  • installer/resources/readme/readme_fr.html

    r69cdcc8 r77d40f8d  
    3535
    3636<li class="tidylist"><b>Messagerie anonyme</b><br>Le système de messagerie basé sur I2P de Postman est utilisable soit
    37 par le <a href="/susimail/susimail">client de messagerie I2P intégré</a> dans la console du routeur (susimail), soit en
     37par le <a href="/webmail">client de messagerie I2P intégré</a> dans la console du routeur (susimail), soit en
    3838configurant n'importe quel logiciel client de messagerie compatible SMTP et POP3. Les comptes peuvent recevoir et
    3939envoyer du courrier de/vers l'Internet normal. Créez au moins votre compte sur
  • installer/resources/readme/readme_nl.html

    r69cdcc8 r77d40f8d  
    1010<li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>Op I2P kan je toegang verkrijgen tot anonieme websites (eepsites) en andere diensten (zoals; SSH over I2P, IRC, Jabber etc.), daarnaast heb je ook de mogelijkheid om je eigen dienst aan te bieden. Je kan ook anoniem toegang krijgen tot het normale Internet via de ingebouwde web proxy (outproxy). <a href="http://www.i2p2.de/htproxyports.html" target="_blank">Configureer je browser</a> voor het gebruik van de HTTP proxy op <code>127.0.0.1 poort 4444</code>, waarna je naar zowel eepsites als normale, onversleutelde <code>http://</code> websites kan surfen. Als je een aanpassing wilt maken aan de outproxy of deze wilt uitschakelen kan je de 'client tunnel' voor <code>false.i2p</code> onder het <i>Outproxies</i> gedeelte in de <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy Tunnel Editor</a>. In het "Interessante websites" gedeelte <a href="#eepsites">hier onder</a> staat een lijst met een paar van de bekende sites die op I2P gehost worden.</li>
    1111
    12 <li class="tidylist"><b>Anonieme E-Mail</b><br>Postman's I2P email systeem kan worden benaderd via <a href="/susimail/susimail">de ingebouwde email client</a>
     12<li class="tidylist"><b>Anonieme E-Mail</b><br>Postman's I2P email systeem kan worden benaderd via <a href="/webmail">de ingebouwde email client</a>
    1313(susimail) of door het gebruik van elke andere normale email client die ondersteuning biedt voor SMTP en POP3.
    1414Deze accounts kunnen tevens email versturen en ontvangen naar en van het normale Internet. Voor een account, bezoek <a href="http://hq.postman.i2p/" target="_blank">hq.postman.i2p</a>. Daarnaast is er <a href="http://i2pbote.i2p/" target="_blank">I2P-Bote</a>, dit is een nieuw end-to-end versleuteld email systeem zonder centrale servers welke een webinterface en geïntegreerd adressen boek bied. Het is ontwikkeld door HungryHobo en kan worden geïnstalleerd als <a href="#plugins">plugin</a>.</li>
  • installer/resources/readme/readme_pt.html

    r69cdcc8 r77d40f8d  
    1818 <li class="tidylist"><b>trocar dados</b> - Ha uma <a href="i2psnark/">adaptação</a> para I2P da aplicação <a href="http://www.bittorrent.com/">BitTorrent</a>
    1919     <a href="http://www.klomp.org/snark/">Snark</a>.</li>
    20  <li class="tidylist"><b>correio eletrônico anônimo</b> - O Postman fez um sistema de correio eletrônico que é compatível com as aplicações de correio eletrônico comunes (POP3/SMTP), o qual permite de enviar correios eletrônicos tanto dentro de I2P como também receber e mandar correios desde a / para a internet. Pode registrar a sua conta aqui: <a href="http://hq.postman.i2p/">hq.postman.i2p</a>. Junto com isso temos <a href="/susimail/susimail">susimail</a>, um cliente anônimo de correio que se abre com o navegador web. Já est&aacute; configurado para o servício de Postman.<br>Tamb&eacute;m lhe recomendamos o nosso novo sistema de correio eletrônico sem servidor <a href="http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/">I2P-Bote</a>, que existe em forma de um plugin. Vem com uma interface web e criptografa todas as mensagens de final a final.</li>
     20 <li class="tidylist"><b>correio eletrônico anônimo</b> - O Postman fez um sistema de correio eletrônico que é compatível com as aplicações de correio eletrônico comunes (POP3/SMTP), o qual permite de enviar correios eletrônicos tanto dentro de I2P como também receber e mandar correios desde a / para a internet. Pode registrar a sua conta aqui: <a href="http://hq.postman.i2p/">hq.postman.i2p</a>. Junto com isso temos <a href="/webmail">susimail</a>, um cliente anônimo de correio que se abre com o navegador web. Já est&aacute; configurado para o servício de Postman.<br>Tamb&eacute;m lhe recomendamos o nosso novo sistema de correio eletrônico sem servidor <a href="http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/">I2P-Bote</a>, que existe em forma de um plugin. Vem com uma interface web e criptografa todas as mensagens de final a final.</li>
    2121 <li class="tidylist"><b>bate-papo anônimo</b> - Lance o seu cliente IRC preferido e con&eacute;cte-se com o servidor anônimamente en
    2222     <b>127.0.0.1 porto 6668</b>.  Isto lhe levar&aacute; a um dos dois servidores anônimos de IRC oficiales em I2P
  • installer/resources/readme/readme_sv.html

    r69cdcc8 r77d40f8d  
    4444     skaffa dig ett konto hos <a
    4545href="http://hq.postman.i2p/">hq.postman.i2p</a>.
    46      Vi skickar med <a href="/susimail/susimail">susimail</a>,
     46     Vi skickar med <a href="/webmail">susimail</a>,
    4747     som &auml;r en webb-baserad anonymt inriktad pop3/smtp-klient, inst&auml;lld
    4848till att ansluta till postmans email-tj&auml;nst.</li>
  • installer/resources/readme/readme_zh.html

    r69cdcc8 r77d40f8d  
    1616 <li><b>浏览 Web 网页</b> - 目前 IP2 网络中的出口代理("Outproxy")只有一个,它的HTTP代理映射在本机的4444端口上。- 将浏览器的代理设置指向为上述地址(127.0.0.1:4444)后,访问任何普通链接即可 - 您的HTTP请求将在 I2P 网络内部传递。</li>
    1717 <li><b>文件交换</b> - I2P的其中一个本地&nbsp;<a href="/i2psnark">端口</a>&nbsp;用于内置的&nbsp;<a href="http://www.klomp.org/snark/">Snark</a> <a href="http://www.bittorrent.com/">BitTorrent</a> 客户端。</li>
    18  <li><b>匿名电邮</b> - 由POSTMAN维护的邮件系统支持普通邮件客户端(POP3 / SMTP),这个系统可以在 I2P 网络内部收发 Email 也可以收发来自外部 Internet 的邮件!建立I2P邮件帐户请到 <a href="http://hq.postman.i2p/">hq.postman.i2p</a> 申请。I2P中集成有Web界面的pop3/stmp邮件客户端 <a href="/susimail/susimail">SUSIMail</a>,并配置为使用POSTMAN 的邮件服务。</li>
     18 <li><b>匿名电邮</b> - 由POSTMAN维护的邮件系统支持普通邮件客户端(POP3 / SMTP),这个系统可以在 I2P 网络内部收发 Email 也可以收发来自外部 Internet 的邮件!建立I2P邮件帐户请到 <a href="http://hq.postman.i2p/">hq.postman.i2p</a> 申请。I2P中集成有Web界面的pop3/stmp邮件客户端 <a href="/webmail">SUSIMail</a>,并配置为使用POSTMAN 的邮件服务。</li>
    1919 <li><b>匿名聊天</b> - 打开你的 IRC 聊天程序,连接至 <b>127.0.0.1:6668&nbsp;</b>即可访问I2P的匿名聊天室,如果您的聊天客户端配置错误泄露IP(DDC,MSG)我们的匿名服务器会自动过滤掉这些数据不让对方发现你,如果您的IRC设置正确无论服务器还是其他聊天的人都不知道您在哪里。</li>
    2020 <li><b>匿名博客</b> - 参见 <a href="http://syndie.i2p2.de/">Syndie</a></li>
  • installer/resources/themes/console/classic/console.css

    r69cdcc8 r77d40f8d  
    217217}
    218218
     219div.routersummary ul {
     220     text-align: left !important;
     221}
     222
    219223div.routersummary table {
    220224     border: 0;
     
    233237     background-color: transparent !important;
    234238     border: 0 !important;
     239}
     240
     241div.newsheadings {
     242     text-align: right;
     243     margin: 0 0 0 10px;
     244}
     245
     246div.newsheadings li {
     247     list-style: none outside url('images/newsbullet_mini.png');
     248     margin: 0 -4px 2px 8px;
    235249}
    236250
     
    502516}
    503517
     518.sidebarconf input[type="image"] {
     519     margin: 2px;
     520     padding: 1px;     
     521}
     522
     523.sidebarconf th:nth-child(1) {
     524     text-align: center;     
     525}
     526
     527.sidebarconf th:nth-child(2) {
     528     text-align: left;     
     529}
     530
     531.sidebarconf td:first-child {
     532     width: 60px;
     533     text-align: right;
     534     padding-right: 50px;
     535}
     536
     537.sidebarconf td {
     538     font-weight: bold;
     539     font-size: 9pt; 
     540}
     541
     542.sidebarconf td:nth-child(3), .sidebarconf td:nth-child(4) {
     543     width: 70px;
     544     padding: 0; 
     545}
     546
     547.sidebarconf td:nth-child(3) {
     548     text-align: right;
     549     padding-left: 50px;
     550}
     551
     552.sidebarconf td:nth-child(4) {
     553     text-align: left;
     554     padding-right: 50px;
     555}
     556
    504557.topshimten {
    505558     margin-top: 15px;
     
    544597     text-transform: uppercase;
    545598     letter-spacing: 0.3em;
    546      background: #fff;
     599     background: #fff url(images/titlebg.png) center right no-repeat !important;
    547600     min-width: 500px;
    548601     -moz-border-radius: 0 3px 0 0;
    549602     -khtml-border-radius: 0 3px 0 0;
    550603     border-radius: 0 3px 0 0;
     604}
     605
     606span.newtab {
     607     text-align: right;
     608     font-size: 8pt;
     609     float: right;
     610     letter-spacing: 0;
     611}
     612/* opera targetted hack */
     613x:-o-prefocus, span.newtab {
     614     margin-top: -25px;
    551615}
    552616
  • installer/resources/themes/console/classic/ieshim.css

    r69cdcc8 r77d40f8d  
    115115     border: 0px;
    116116     margin: 0 -10px 0 -13px !important;
     117}
     118
     119div.routersummaryouter {
     120     left: 5px;
     121     top: 5px;
    117122}
    118123
     
    174179     text-align: center !important;
    175180     margin: -5px 5px !important;
    176      width: 192px !important;
     181     width: 182px !important;
    177182     overflow: hidden;
    178183     font-size: 8pt;
     
    236241}
    237242
    238 td {
    239      text-align: left;
    240 }
    241 
    242243th {
    243244     text-align: left;
     
    266267
    267268table {
    268      width: 100% !important;
     269     width: auto !important;
    269270}
    270271
     
    295296}
    296297
    297 h1, h2, h3 {
    298      background: #fff url(images/titlebg.png) center right no-repeat !important;
    299 }
    300 
    301298.routersummary h2, .routersummary h3 {
    302299     background: #fff url(images/tinytitle.png) center right tile-x !important;
  • installer/resources/themes/console/dark/console.css

    r69cdcc8 r77d40f8d  
    11/* I2P Theme: Camo aka Dark */
    22/* Description: Military Grade. */
    3 /* Comment: Thanks to Florian Kuhlmann for the hatface images. [ http://www.flickr.com/photos/floriankuhlmann/]
     3/* Comment: Thanks to Florian Kuhlmann for the hatface images. [http://www.flickr.com/photos/floriankuhlmann/] */
    44/* Author: dr|z3d */
    55
     
    1111     color: #EE9;
    1212     font: 8.5pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
    13      
    1413}
    1514
     
    4039     padding: 10px;
    4140     text-align: center;
    42      font-color: #EE9;
     41     color: #EE9;
    4342     margin: 0 20px 0 20px;
    4443     border: 1px solid #494;
     
    8584}
    8685
    87 div.toolbar a:hover, button:hover{
     86div.toolbar a:hover, button:hover {
    8887     border: 1px solid #f60;
    8988     background: #030;
     
    9190}
    9291
    93 a:active{
     92a:active {
    9493     color: #900;
    9594}
     
    109108div.routersummary {
    110109     width: 173px;
    111      padding: 10px;
     110     padding: 10px 10px 8px;
    112111     text-align: center;
    113112     border: 1px solid #494;
     
    123122     -khtml-box-shadow: 0 1px 5px #000;
    124123     box-shadow: 0 1px 5px #000;
     124     margin-bottom: 7px !important;
    125125}
    126126
     
    128128     text-align: right !important;
    129129     -moz-box-shadow: inset 1px 1px 1px 0px #000;
    130      -khtml-box-shadow: inset 1px 1px 1px 0px #000;     
    131      box-shadow: inset 1px 1px 1px 0px #000;     
     130     -khtml-box-shadow: inset 1px 1px 1px 0px #000;
     131     box-shadow: inset 1px 1px 1px 0px #000;
    132132}
    133133
     
    154154     border-radius: 0;
    155155     background: #000 url('images/header.png') center center ;
    156      background-image: -moz-linear-gradient(top, bottom, from(#050), to(#030), color-stop(7%, #000), color-stop(100%, #050));
    157156}
    158157
     
    168167     text-decoration: none !important;
    169168     color: #2b2;
    170      background-image: -moz-linear-gradient(top, bottom, from(#000), to(#050), color-stop(10%, #050), color-stop(100%, #004));
    171169     line-height: 100%;
     170}
     171
     172div.routersummary ul {
     173     text-align: left !important;
    172174}
    173175
     
    179181     overflow: hidden;
    180182     font-size: 8pt;
    181      padding: 0 -10px;
     183/*     padding: 0 -10px; */
    182184     background-image: none !important;
    183185     background-color: transparent !important;
     
    191193
    192194div.routersummary form {
    193      margin: -5px 0 -7px;
     195     margin: -4px 0 -6px;
    194196}
    195197
     
    200202div.routersummary p {
    201203     padding: 0;
    202 }     
     204}
    203205
    204206div.refresh {
     
    211213     text-shadow: 1px 1px 1px rgba(0, 16, 0, 0.8);
    212214     text-shadow: 0px 0px 2px #101 !important;
     215     padding: 0 1px;
    213216}
    214217
     
    222225     background-image: none !important;
    223226     border: 0 !important;
     227     word-spacing: -0.1em;
    224228}
    225229
     
    227231     margin-top: 5px;
    228232     margin-bottom: -5px !important;
     233}
     234
     235div.newsheadings {
     236     text-align: center;
     237     margin: -3px 0 -5px 10px;
     238     word-spacing: 0;
     239}
     240
     241div.newsheadings li {
     242     list-style: none outside url('images/newsbullet_mini.png');
     243     margin: 0 -4px 2px 8px;
     244     line-height: 110%;
     245     text-transform: capitalize;
     246}
     247
     248div.newsheadings li b {
     249     font-weight: normal !important;
     250}
     251
     252
     253div.newsheadings button {
     254     margin: 4px 0 2px;
    229255}
    230256
     
    274300     -moz-box-shadow: inset 0px 0px 0px 1px #f00;
    275301     -khtml-box-shadow: inset 0px 0px 0px 1px #f00;
    276      box-shadow: inset 0px 0px 0px 1px #f00;         
     302     box-shadow: inset 0px 0px 0px 1px #f00;
    277303     word-wrap: break-word;
    278304}
     
    367393     text-align: left !important;
    368394     font-size: 9.5pt;
     395     letter-spacing: 0.03em;
    369396}
    370397
     
    383410     background: url('../images/itoopbullet.png');
    384411     background-repeat: no-repeat;
    385      background-position: right;   
     412     background-position: right;
    386413}
    387414
     
    399426div.news hr {
    400427     margin: 8px 0 3px 0;
    401 }     
     428}
    402429
    403430div.confignav {
    404      padding: 15px 10px !important;
    405      margin: 15px 0;
    406      background: #000 url('images/header.png') center center repeat-x ;
    407      -moz-border-radius: 4px;
    408      -khtml-border-radius: 4px;
    409      border-radius: 4px;
    410      border: 1px solid #494;
    411      font-size: 9.5pt !important;
     431     background: url('images/header.png') repeat-x scroll center center #000;
     432     padding:5px 5px 6px !important;
     433     margin: -1px 0 15px;
     434     -moz-border-radius: 0 0 4px 4px;
     435     -khtml-border-radius: 0 0 4px 4px;
     436     border-radius: 0 0 4px 4px;
     437     border: 1px solid #494;
     438     font-size: 8.5pt !important;
    412439     font-weight: bold !important;
    413440     line-height: 160% !important;
     
    425452}
    426453
     454.sidebarconf input[type="image"] {
     455     margin: 2px;
     456     padding: 1px;     
     457}
     458
     459.sidebarconf th:nth-child(1) {
     460     text-align: center;     
     461}
     462
     463.sidebarconf th:nth-child(2) {
     464     text-align: left;     
     465}
     466
     467.sidebarconf td:first-child {
     468     width: 60px;
     469     text-align: right;
     470     padding-right: 50px;
     471}
     472
     473.sidebarconf td:nth-child(2) {
     474     font-weight: bold;     
     475}
     476
     477.sidebarconf td:nth-child(3), .sidebarconf td:nth-child(4) {
     478     width: 70px;
     479     padding: 0; 
     480}
     481
     482.sidebarconf td:nth-child(3) {
     483     text-align: right;
     484     padding-left: 50px;
     485}
     486
     487.sidebarconf td:nth-child(4) {
     488     text-align: left;
     489     padding-right: 50px;
     490}
     491
    427492div.messages {
    428493     padding: 10px;
     
    432497     border-radius: 4px;
    433498     border: 1px solid #494;
    434      background: #000  /*url('images/infotile.png') center left no-repeat;*/
     499     background: #000;  /*url('images/infotile.png') center left no-repeat;*/
    435500     font-weight: bold;
    436501     font-size: 9pt;
     
    485550     text-align: center !important;
    486551     background: #000;
    487 
    488552     opacity: 0.8;
    489553}
     
    505569     width: 100%;
    506570     border: 1px solid #494;
    507      cell-padding: 1px;
     571     padding: 1px;
    508572     font-size: 8pt;
    509573     background: #030;
     
    526590     text-align: center;
    527591     font-size: 9pt;
    528      background: #000; /*url('images/tabletitledark.png') repeat-x;*/
    529592     background: #000 url('images/header.png') center center repeat-x ;
    530593     border-top: 1px solid #494;
    531      border-bottom: 1px solid #494 !important;     
     594     border-bottom: 1px solid #494 !important;
    532595     line-height: 110%;
    533596}
     
    538601
    539602tr:nth-child(even) {
    540      background: #010;/* url('images/darkerbluetile.png') !important;*/
     603     background: #010;
    541604     vertical-align: middle;
    542605}
    543606
    544607tr:nth-child(odd) {
    545      background: #000800;/* url('images/darkbluetile.png') !important;*/
     608     background: #000800;
    546609     vertical-align: middle;
    547610}
     611
    548612/*
    549613tr:last-child {
     
    553617}
    554618*/
     619
    555620td {
    556621     padding: 4px 6px;
     
    558623     vertical-align: middle;
    559624     border-top: 1px inset #494;
    560      border-bottom: 1px outset #494;   
     625     border-bottom: 1px outset #494;
    561626}
    562627
     
    629694}
    630695
    631 a:link, h2 a:link{
     696a:link, h2 a:link {
    632697     color: #494;
    633698     text-decoration: none;
    634      font-weight: bold;     
     699     font-weight: bold;
    635700     word-wrap: break-word;
    636701}
    637702
    638 a:visited{
     703a:visited {
    639704     color: #7b7;
    640705     text-decoration: none;
    641      font-weight: bold;     
     706     font-weight: bold;
    642707     word-wrap: break-word;
    643708}
    644709
    645 a:hover{
     710a:hover {
    646711     color: #f60;
    647712     text-decoration: underline;
    648      font-weight: bold;     
     713     font-weight: bold;
    649714     word-wrap: break-word;
    650715}
    651716
    652717.links {
    653      padding-bottom: -2px;
     718/*     padding-bottom: -2px; */
    654719     text-align: justify;
    655720     margin-top: 10px;
     
    661726}
    662727
    663 .links b{
     728.links b {
    664729     color: #b70 !important;
    665730     letter-spacing: 0.07em;
     
    674739}
    675740
    676 p img:first-child{
     741p img:first-child {
    677742     display: none !important;
    678743}
     
    690755     text-shadow: 0px 0px 2px #010;
    691756     white-space: normal;
    692      background: #000 url("images/scope.png")no-repeat scroll right top;
    693      background: #000 url("images/bg2.png")no-repeat scroll top right;
    694757     background: #000 url('images/header.png') center center;
    695      background-image: -moz-linear-gradient(top, bottom, from(#000), to(#030), color-stop(30%, #000), color-stop(100%, #000));
    696758     border: 1px solid #494;
    697759     border-radius: 4px 4px 0 0;
     
    705767}
    706768
     769span.newtab {
     770     text-align: right;
     771     font-size: 8pt;
     772     float: right;
     773     letter-spacing: 0;
     774}
     775
     776/* opera targetted hack */
     777x:-o-prefocus, span.newtab {
     778     margin-top: -25px;
     779}
     780
    707781h2 {
    708782     font-size: 12pt;
     
    711785     letter-spacing: 0.05em;
    712786     background: #000 url(images/camotile2.png);
    713      background-image: -moz-linear-gradient(top, bottom, from(#000), to(#030), color-stop(30%, #000), color-stop(100%, #000));
    714787     background: #000 url('images/header.png') center center ;
    715788     padding: 10px;
    716      wordwrap: none;
    717789     border: 1px solid #494;
    718790     border-radius: 4px;
     
    721793     vertical-align: middle;
    722794     margin: 15px 0 12px 0 !important;
    723     text-transform: uppercase;
     795     text-transform: uppercase;
    724796     word-wrap: break-word;
    725797}
     
    737809     border: 1px solid #494;
    738810     border-left: 5px solid #494;
    739      padding: 5px 6px 7px;
     811     padding: 6px;
    740812     margin: 12px 0 10px 0;
    741813     border-radius: 0 4px 4px 0;
     
    746818     text-transform: uppercase;
    747819     text-shadow: 0px 0px 2px #010;
     820     letter-spacing: 0.08em;
    748821}
    749822
     
    770843     text-align: center;
    771844     vertical-align: middle;
    772      min-width: 76px;
     845     min-width: 70px;
    773846     -moz-box-shadow: inset 0px 1px 1px 0px #494;
    774847     -khtml-box-shadow: inset 0px 1px 1px 0px #191;
     
    785858     background: #000;
    786859     color: #f60;
    787 }     
    788          
     860}
     861
    789862button:active {
    790863     border: 1px inset #f60;
     
    803876
    804877.langbox {
    805      margin: 5px 3px 2px 5px;
     878     margin: 4px 4px 2px 5px;
    806879     padding: 0;
    807880     color: #EE9;
     
    816889     opacity: 0.5;
    817890     -moz-box-shadow: 0 0 1px #000;
     891     padding: 1px !important;
    818892}
    819893
     
    878952}
    879953
    880 input[type=text] {
     954input[type=text], input[type=password] {
    881955     background: #000;
    882956     color: #EE9;
     
    898972}
    899973
     974input[type=image] {
     975     min-width: 0;
     976}
     977
    900978fieldset {
    901979overflow: hidden;
     
    9361014     margin: 0 20px 10px 240px;
    9371015     padding: 20px 25px 20px 75px;
    938      font-color: #f00;
     1016     color: #f00;
    9391017     font-size: 7pt;
    9401018     text-align: right !important;
     
    9441022     border: 1px solid #000;
    9451023     display: none;
    946 }       
     1024}
    9471025
    9481026.statusnotes {
     
    9531031     border: 1px solid #494 !important;
    9541032/*     border-top: 0px !important;*/
    955      margin: -3px 0 5px 0; 
     1033     margin: -3px 0 5px 0;
    9561034     padding: 7px;
    9571035     background: #010;
     
    9881066     word-wrap: break-word;
    9891067}
    990  
     1068
    9911069div.joblog li {
    9921070     word-wrap: break-word !important;
     
    10331111.optbox {
    10341112     min-width: 16px !important;
    1035      max-width: 16px !important;     
     1113     max-width: 16px !important;
    10361114     width: 16px !important;
    10371115     min-height: 16px;
    1038      max-height: 16px;     
     1116     max-height: 16px;
    10391117     height: 16px;
    10401118     opacity: 1.0;
     
    10481126.optbox:hover {
    10491127     min-width: 16px !important;
    1050      max-width: 16px !important;     
     1128     max-width: 16px !important;
    10511129     width: 16px !important;
    10521130     min-height: 16px;
    1053      max-height: 16px;     
     1131     max-height: 16px;
    10541132     height: 16px;
    10551133     opacity: 1.0;
     
    10611139.cells {
    10621140     border: 1px inset #494;
    1063      border-left: 1px outset #494;     
     1141     border-left: 1px outset #494;
    10641142}
    10651143
     
    10671145     background: #000 url('images/header.png') repeat-x center center !important;
    10681146     border-top: 1px solid #494;
    1069      border-bottom: 1px solid #494 !important;     
     1147     border-bottom: 1px solid #494 !important;
    10701148     font-size: 7pt;
    10711149     line-height: 110%;
     
    10821160     color: #494;
    10831161     font-size: 7pt;
    1084      margin-bottom: -8px !important; 
     1162     margin-bottom: -8px !important;
    10851163}
    10861164
     
    11601238     background-image: -moz-linear-gradient(center top , #000B00, #000);
    11611239     border-radius: 3px;
     1240     -moz-border-radius: 3px;
     1241     -khtml-border-radius: 3px;
    11621242     margin: 5px;
    11631243     height: 72px;
     
    12461326
    12471327/* end home page */
     1328
     1329iframe.iframed {
     1330     margin: 10px 0 0;
     1331}
  • installer/resources/themes/console/dark/default.css

    r69cdcc8 r77d40f8d  
    1919}
    2020
     21body.iframed {
     22     background: transparent url('images/transparent.gif') !important;
     23     padding-top: 5px;
     24}
     25
    2126div {
    2227     -moz-box-sizing: border-box;
     
    8085textarea {
    8186     border: 1px solid #494;
     87     background: #000;
     88     margin-left: 4px;
     89     width: 458px;
    8290}
    8391
     
    141149     padding: 2px;
    142150     margin: 4px 0 2px 4px;
    143      background-color: #020;
     151     background-color: #000;
    144152     font-size: 8.5pt;
    145153}
     
    154162     font-weight: bold;
    155163     background-color: #000;
    156      color: #9f9 !important;
     164     color: #494 !important;
    157165     border: 1px outset #ddddc0;
    158166     text-align: center;
     
    172180
    173181.control:link {
    174      color: #9f9;
    175      text-decoration: none;
     182     color: #494 !important;
     183     text-decoration: none;
     184     background: #000 !important;
    176185}
    177186
     
    189198     border: 1px inset;
    190199     background-color: #f60;
    191      color: #fff !important;
     200     color: #EE9 !important;
    192201     text-decoration: none;
    193202}
    194203
    195204.control:visited {
    196      color: #010;
     205     color: #494 !important;
    197206     text-decoration: none;
    198207}
     
    206215     color: #EEEE99;
    207216     background-color: #020;
    208      background: #000; /*url(images/camotile2.png);*/
     217     background: #000 url(images/camotile2.png);
    209218     -moz-border-radius: 4px;
    210219     -khtml-border-radius: 4px;
     
    212221     border: 1px solid #494;
    213222     padding: 10px 20px;
     223}
     224
     225.iframed .panel {
     226     margin: 16px auto -8px auto !important;
     227}
     228
     229.iframed .panel.iframed {
     230     margin: 0 auto -8px auto !important;
     231}
     232
     233.panel td:first-child {
     234     font-weight: bold;
     235}
     236
     237.panel td {
     238          padding: 6px 0 8px;
     239}
     240
     241.panel td:last-child {
     242     border-bottom: 1px dotted #494;   
    214243}
    215244
     
    257286#globalOperationsPanel .control {
    258287     width: 120px;
     288     color: #494 !important;
     289}
     290
     291#globalOperationsPanel .control:hover {
     292     color: #F60 !important;
     293}
     294
     295#globalOperationsPanel .control:active {
     296     color: #EE9 !important;
    259297}
    260298
     
    269307     color: #494;
    270308     text-decoration: none;
    271      background: #000;
     309     background: none;
    272310}
    273311
     
    275313     color: #7b7;
    276314     text-decoration: none;
    277      background: #000;
     315     background: none;
    278316}
    279317
     
    281319     color: #ff6600;
    282320     text-decoration: underline;
    283      background: #000;
     321     background: none;
    284322}
    285323
     
    287325     color: #900;
    288326     text-decoration: underline;
    289      background: #000;
     327     background: none;
    290328}
    291329
  • installer/resources/themes/console/dark/i2ptunnel.css

    r69cdcc8 r77d40f8d  
    9393#tunnelListPage .footer .control {
    9494     margin-left: 2px;
     95     color: #494 !important;
     96     background: #000 !important;
    9597}
    9698
     99#tunnelListPage .footer .control:hover {
     100     color: #F60 !important;
     101}
     102
     103#tunnelListPage .footer .control:active {
     104     color: #EE9 !important;
     105}
     106     
    97107#tunnelListPage .footer label {
    98108     text-align: right;
     
    103113     margin-right: 5px;
    104114}
     115
    105116/* Use Leary and Langridge content replacement methods (LIR)
    106117** to embed accessibility information into the document.
  • installer/resources/themes/console/light/console.css

    r69cdcc8 r77d40f8d  
    183183}
    184184
     185div.routersummary ul {
     186     text-align: left !important;
     187}
     188
    185189div.routersummary table {
    186190     border: 0;
     
    238242     margin-bottom: -2px !important;
    239243     opacity: 1;
     244}
     245
     246div.newsheadings {
     247     text-align: right;
     248     margin: 0 0 0 10px;
     249}
     250
     251div.newsheadings li {
     252     list-style: none outside url('images/newsbullet_mini.png');
     253     margin: 0 -4px 2px 8px;
    240254}
    241255
     
    496510}
    497511
     512.sidebarconf input[type="image"] {
     513     margin: 2px;
     514     padding: 1px;     
     515}
     516
     517.sidebarconf th:nth-child(1) {
     518     text-align: center;     
     519}
     520
     521.sidebarconf th:nth-child(2) {
     522     text-align: left;     
     523}
     524
     525.sidebarconf td:first-child {
     526     width: 60px;
     527     text-align: right;
     528     padding-right: 50px;
     529}
     530
     531.sidebarconf td {
     532     font-weight: bold;
     533     font-size: 9pt; 
     534}
     535
     536.sidebarconf td:nth-child(3), .sidebarconf td:nth-child(4) {
     537     width: 70px;
     538     padding: 0; 
     539}
     540
     541.sidebarconf td:nth-child(3) {
     542     text-align: right;
     543     padding-left: 50px;
     544}
     545
     546.sidebarconf td:nth-child(4) {
     547     text-align: left;
     548     padding-right: 50px;
     549}
     550
    498551div.graphspanel {
    499552     text-align: center !important;
     
    843896     -khtml-border-radius: 8px;
    844897     min-width: 500px;
     898}
     899
     900span.newtab {
     901     text-align: right;
     902     font-size: 8pt;
     903     float: right;
     904     letter-spacing: 0;
     905}
     906
     907/* opera targetted hack */
     908x:-o-prefocus, span.newtab {
     909     margin-top: -25px;
    845910}
    846911
  • installer/resources/themes/console/midnight/console.css

    r69cdcc8 r77d40f8d  
    227227}
    228228
     229div.routersummary ul {
     230     text-align: left !important;
     231}
     232
    229233div.routersummary table {
    230234     border: 0;
     
    264268     max-width: 90px;
    265269     overflow: hidden;
     270}
     271
     272div.newsheadings {
     273     text-align: right;
     274     margin: 0 0 0 10px;
     275}
     276
     277div.newsheadings li {
     278     list-style: none outside url('images/newsbullet_mini.png');
     279     margin: 0 -4px 2px 8px;
    266280}
    267281
     
    512526}
    513527
     528.sidebarconf input[type="image"] {
     529     margin: 2px;
     530     padding: 1px;     
     531}
     532
     533.sidebarconf th:nth-child(1) {
     534     text-align: center;     
     535}
     536
     537.sidebarconf th:nth-child(2) {
     538     text-align: left;     
     539}
     540
     541.sidebarconf td:first-child {
     542     width: 60px;
     543     text-align: right;
     544     padding-right: 50px;
     545}
     546
     547.sidebarconf td {
     548     font-weight: bold;
     549     font-size: 9pt; 
     550}
     551
     552.sidebarconf td:nth-child(3), .sidebarconf td:nth-child(4) {
     553     width: 70px;
     554     padding: 0; 
     555}
     556
     557.sidebarconf td:nth-child(3) {
     558     text-align: right;
     559     padding-left: 50px;
     560}
     561
     562.sidebarconf td:nth-child(4) {
     563     text-align: left;
     564     padding-right: 50px;
     565}
     566
    514567.topshimten {
    515568     margin-top: 15px;
     
    563616     line-height: 100%;
    564617     color: #fff;
     618}
     619
     620span.newtab {
     621     text-align: right;
     622     font-size: 8pt;
     623     float: right;
     624     letter-spacing: 0;
     625}
     626
     627/* opera targetted hack */
     628x:-o-prefocus, span.newtab {
     629     margin-top: -25px;
    565630}
    566631
  • installer/resources/themes/snark/ubergine/snark.css

    r69cdcc8 r77d40f8d  
    55     background: #101 url('/themes/snark/ubergine/images/graytile.png');
    66     color: #001;
    7      font: 8pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
     7     font: 7.5pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
     8}
     9
     10body.iframed {
     11     background: transparent url('../../console/dark/images/transparent.gif') !important;
     12     margin: 6px 0 !important;
    813}
    914
     
    1924     padding: 4px 16px 5px !important;
    2025     margin: -5px -8px -5px 0 !important;
    21      letter-spacing: 0.05em;
    22      font-weight: bold;
    23      font-size: 11pt;
     26     letter-spacing: 0.03em;
     27     font-weight: bold;
     28     font-size: 9pt;
    2429     color: #f70;
    2530     text-shadow: 1px 1px #420;
     
    2833     -moz-border-radius: 0px;
    2934     -khtml-border-radius: 3px;
    30      border-radius: 0px;
     35     border-radius: 0px;;
    3136     -moz-box-shadow: inset 0 0 1px 0 #f90;
    3237     -khtml-box-shadow: inset 0 0 1px 0 #f90;
     
    3944     text-transform: uppercase !important;
    4045     padding: 1px 16px;
    41      letter-spacing: 0.05em;
    42      font-weight: bold;
    43      font-size: 11pt;
     46     font-weight: bold;
    4447     color: #f50;
    4548     background: #310 url('/themes/snark/ubergine/images/snarknav_on.png') repeat-x scroll center center;
     
    5760     text-transform: uppercase !important;
    5861     padding: 0 16px;
    59      letter-spacing: 0.05em;
    60      font-weight: bold;
    61      font-size: 11pt;
     62     font-weight: bold;
    6263     color: #fb0;
    6364     background: #310 url('/themes/snark/ubergine/images/snarknav_on.png') repeat-x scroll center center;
     
    131132pre {
    132133     width: 100%;
    133      font: 8pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
     134     font: 7.5pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
    134135     padding: 0;
    135136     text-align: left !important;
     
    163164}
    164165
    165 thead {
     166thead {;
    166167     border-bottom: 1px solid #101;
    167168}
     
    169170th {
    170171     padding: 4px 2px 4px 4px;
    171      font-size: 9pt;
     172     font-size: 8pt;
    172173     border-top: 1px outset #001;
    173174     border-bottom: 1px inset #101;
    174175     color: #ddd;
    175176     whitespace: nowrap;
    176      letter-spacing: 0.05em;
     177     letter-spacing: 0em;
    177178}
    178179
     
    221222     background: #656;
    222223     background: #351933;
    223      font-size: 8pt;
     224     font-size: 7.5pt;
    224225     border: 0px inset #101 !important;
    225226     border-left: 0 !important;
     
    244245     color: #ddd !important;
    245246     opacity: 1;
    246      font-size: 9.5pt;
     247     font-size: 8pt;
    247248}
    248249
     
    253254td:first-child {
    254255     text-align: right;
    255      font-size: 9.5pt;
     256     font-size: 8pt;
    256257}
    257258
     
    261262
    262263.snarkTorrentName {
     264     line-height: 100%;
    263265     text-shadow:1px 1px #550000;
    264266     padding: 2px 0 0;
     
    290292
    291293.snarkTorrentEven {
    292      font-size: 8pt;
     294     font-size: 7.5pt;
    293295     background: #202;
    294296}
     
    304306.snarkTorrentStatus {
    305307     padding: 2px 2px 2px 0;
     308     line-height: 100%;
    306309}
    307310
     
    312315     font-weight: bold;
    313316     color: #dd9 !important;
    314      font-size: 8pt;
     317     font-size: 7.5pt;
    315318     padding: 1px !important;
    316319}
     
    322325
    323326.snarkTorrentRateUp, .snarkTorrentRateDown, .snarkTorrentDownloaded, .snarkTorrentUploaded {
    324      font-size: 8pt;
     327     font-size: 7.5pt;
    325328     font-weight: bold;
    326329     padding: 0 3px;
     330     line-height: 100%;
    327331}
    328332
     
    345349.snarkTorrentOdd {
    346350     background: #351933;
    347      font-size: 8pt;
     351     font-size: 7.5pt;
    348352     border: 0px inset #101 !important;
    349353     border-left: 0 !important;
     
    357361     padding: 4px 0px !important;
    358362     text-align: left !important;
    359      font-size: 8pt !important;
     363     font-size: 7.5pt !important;
    360364}
    361365
     
    370374     text-align: center;
    371375     font-style: italic;
    372      font-size: 8pt;
     376     font-size: 7.5pt;
    373377     text-align: left;
    374378}
     
    378382     font-style: italic;
    379383     color: #dd7 !important;
     384}
     385
     386.snarkTorrentInfo img {
     387     max-height: 16px !important;
     388     margin: 1px 0 1px 2px !important;   
     389}
     390
     391.snarkTorrentInfo td {
     392     text-align: left !important;
     393     padding: 0 1px !important;
     394}
     395
     396table.SnarkTorrentInfo {
     397     margin-bottom: 3 !important;
     398     background: #000;   
     399}
     400
     401table.SnarkDirInfo {
     402     margin-top: -2px !important;     
     403}
     404
     405.snarkDirInfo thead img {
     406     margin: 0 -1px 0 0 !important;
     407}
     408
     409.SnarkDirInfo td, .SnarkDirInfo th {
     410     min-width: 0px !important;     
     411}
     412
     413.SnarkDirInfo td:nth-child(n+1) {
     414}
     415
     416.SnarkDirInfo .headerpriority {
     417     text-align: center !important;
     418     vertical-align: middle;   
    380419}
    381420
     
    394433
    395434.snarkNewTorrent {
    396      font-size: 9pt;
     435     font-size: 8pt;
    397436}
    398437
    399438.snarkAddInfo {
    400      font-size: 9pt;
     439     font-size: 8pt;
    401440     line-height: 130% !important;
    402441}
     
    407446     padding: 0 25px 3px 25px;
    408447     margin: 5px 0 10px 0 !important;
    409      letter-spacing: 0.25em;
     448     letter-spacing: 0.05em;
    410449     border: 1px solid #111;
    411450     -moz-border-radius: 0 0 5px 5px;
     
    426465     background: #323 url('/themes/snark/ubergine/images/tile2.png');
    427466     color: #310;
    428      min-width: 970px !important;
     467     min-width: 800px !important;
    429468     margin: 5px 0 0 0;
    430469     padding: 10px 10px 0px 10px;
     
    433472     border-radius: 4px;
    434473     border: 1px solid #101;
    435      font-size: 9pt !important;
     474     font-size: 8pt !important;
    436475     line-height: 160% !important;
    437476     -moz-box-shadow: inset 0px 0px 1px 0px #212;
     
    479518
    480519input {
    481      font-size: 9pt;
     520     font-size: 8.5pt;
    482521     font-weight: bold;
    483522     text-align: left;
     
    592631     background: url('/themes/snark/ubergine/images/graytile.png') !important;
    593632     color: #f60;
    594      font: 9pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
     633     font: 8pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
    595634     font-weight: bold;
    596635     padding: 2px 2px 2px 3px;
     
    615654     border-radius: 4px;
    616655     border: 1px inset #000;
     656     font-size: 8pt;
    617657}
    618658
     
    751791
    752792code {
    753      font-size: 9.5pt;
     793     font-size: 9pt;
    754794     color: #b8b;
    755795     padding: 0 2px;
     
    784824     vertical-align: top;
    785825}
     826
     827.routerdown {
     828     color: #ee9;
     829}
     830
     831.trackerconfig {
     832     text-align: left !important;
     833}
     834
     835.trackerconfig th:nth-child(n+4), .trackerconfig th:nth-child(n+5), .trackerconfig td:nth-child(n+4), .trackerconfig td:nth-child(n+5) {
     836     text-align: center !important;
     837}
     838
     839.trackerconfig th, .trackerconfig td, .trackerconfig th:last-child, .trackerconfig td:last-child {
     840     text-align: left !important;     
     841}
     842
     843.trackerconfig td:first-child {
     844     text-align: right !important;     
     845}
     846
     847input.trackername {
     848     width: 100px;
     849}
     850
     851input.trackerhome {
     852     width: 200px;
     853}
     854
     855input.trackerannounce {
     856     width: 230px;
     857}
  • installer/resources/themes/snark/vanilla/snark.css

    r69cdcc8 r77d40f8d  
    66     color: #001;
    77     font: 8pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
     8}
     9
     10body.iframed {
     11     background: transparent url('../../console/dark/images/transparent.gif') !important;
     12     margin: 6px 0 !important;
    813}
    914
     
    8186}
    8287
     88.snarkRefresh img {
     89     margin-right: -10px !important;
     90}
    8391.snarkMessages {
    8492     font: bold 8pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
     
    92100     border: 1px solid #000;
    93101     overflow: auto;
    94      color: #26f;
     102     color: #500;
    95103     max-height: 76px;
    96104     min-height: 45px;
     
    151159     width: 100%;
    152160     opacity: 1 !important;
    153      font-weight: bold;
     161     font-size: 8.5pt !important;
    154162}
    155163
     
    176184th {
    177185     padding: 4px 2px 4px 4px;
    178      font-size: 9pt;
     186     font-size: 8pt;
    179187     border-top: 1px outset #604;
    180188     border-bottom: 1px inset #604;
    181189     whitespace: nowrap;
    182      letter-spacing: 0.05em;
     190     color: #511;
    183191}
    184192
     
    250258     color: #501 !important;
    251259     opacity: 1;
    252      font-size: 9.5pt;
     260     font-size: 8pt;
    253261}
    254262
     
    259267td:first-child {
    260268     text-align: right;
    261      font-size: 9.5pt;
     269     font-size: 8pt;
    262270}
    263271
     
    269277/*     text-shadow:1px 1px #540;*/
    270278     padding: 3px 0 0;
     279     line-height: 100%;
    271280}
    272281
     
    308317     font-size: 8pt !important;
    309318     letter-spacing: -0.05em;
     319     font-weight: bold;
     320     line-height: 100%;
    310321}
    311322
     
    385396}
    386397
     398.snarkTorrentInfo img {
     399     max-height: 16px !important;
     400     margin: 1px 0 1px 2px !important;   
     401}
     402
     403.snarkTorrentInfo td {
     404     text-align: left !important;
     405     padding: 0 1px !important;
     406}
     407
     408table.SnarkTorrentInfo {
     409     margin-bottom: 3 !important;
     410     border: 1px solid #604;
     411}
     412
     413table.SnarkDirInfo {
     414     margin-top: -3px !important;
     415     margin-bottom: 0;   
     416}
     417
     418.snarkDirInfo thead img {
     419     margin: 0 -1px 0 0 !important;
     420}
     421
     422.SnarkDirInfo td {
     423     min-width: 0px !important;     
     424}
     425
     426.SnarkDirInfo td:nth-child(n+1) {
     427}
     428
     429.SnarkDirInfo .headerpriority {
     430     text-align: center !important;
     431     vertical-align: middle;   
     432}
     433
    387434.choked {
    388435     color: #a00000 !important;
     
    403450
    404451.snarkAddInfo {
    405      font-size: 9pt;
     452     font-size: 8pt;
    406453     line-height: 130% !important;
    407454}
     
    410457     font-size: 11pt;
    411458     font-weight: bold;
    412      padding: 0 25px 3px 25px;
     459     padding: 0 15px 3px 12px;
    413460     margin: 5px 0 10px 0 !important;
    414      letter-spacing: 0.25em;
     461     letter-spacing: 0.05em;
    415462     border: 1px solid #111;
    416463     -moz-border-radius: 0 0 5px 5px;
     
    418465     border-radius: 0 0 5px 5px;
    419466     border-top: 0;
    420      text-shadow: 0px 1px 1px #300;
     467     text-shadow: 0px 1px 1px #777;
    421468     background: #ffb url('images/bling.png') repeat-x scroll center center !important;
    422469     font-variant: small-caps !important;
    423470     color: #503;
    424 }
    425 
     471     box-shadow: 0 1px 1px #777;
     472}
     473
     474.snarkConfigTitle img {
     475     margin-right: -3px;   
     476}
    426477.snarkConfig {
    427      font-size: 10pt;
     478     font-size: 8pt;
    428479     width: 100%;
    429480}
     
    432483     background: #fff url('images/tile2.png');
    433484     color: #310;
    434      min-width: 970px !important;
     485     min-width: 800px !important;
    435486     margin: 5px 0 0 0;
    436487     padding: 10px 10px 0px 10px;
     
    467518
    468519a:link {
    469      color: #742;
    470      text-decoration: none;
    471      font-weight: bold;
    472      word-wrap: break-word;
    473 }
    474 
    475 a:visited {
    476      color: #962;
    477      text-decoration: none;
    478      font-weight: bold;
    479 }
    480 
    481 a:hover {
    482      color: #f30;
    483      font-weight: bold;
    484 }
    485 
    486 a:link {
    487520     color: #d30;
    488521     text-decoration: none;
     
    578611
    579612input.add {
    580      background: #f3efc7 url('../../console/images/add.png') no-repeat 2px center;
     613     background: #f3efc7 url('../../console/images/add.png') no-repeat 2px center !important;
    581614     padding: 2px 3px 2px 20px !important;
    582615     min-height: 22px;
     
    611644/*     background: url('/themes/snark/ubergine/images/graytile.png') !important;*/
    612645     color: #101;
    613      font: 9pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
     646     font: 8pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
    614647     font-weight: bold;
    615648     padding: 2px 2px 2px 3px;
     
    618651     border-radius: 4px 0 0 4px;
    619652     border: 1px solid #000;
     653     margin-left: 5px;
    620654}
    621655
     
    634668     border-radius: 4px;
    635669     border: 1px inset #000;
     670     font-size: 8pt;
     671     margin-left: 5px;
    636672}
    637673
     
    761797div.configsection a {
    762798     color: #f30;
    763      text-shadow: 1px 1px #500;
     799     text-shadow: 1px 1px #777;
    764800}
    765801
     
    803839     vertical-align: top;
    804840}
     841
     842
     843.routerdown {
     844     color: #900;
     845}
     846
     847.trackerconfig {
     848     text-align: left !important;
     849}
     850
     851.trackerconfig th:nth-child(n+4), .trackerconfig th:nth-child(n+5), .trackerconfig td:nth-child(n+4), .trackerconfig td:nth-child(n+5) {
     852     text-align: center !important;
     853}
     854
     855.trackerconfig th, .trackerconfig td, .trackerconfig th:last-child, .trackerconfig td:last-child {
     856     text-align: left !important;     
     857}
     858
     859.trackerconfig td:first-child {
     860     text-align: right !important;     
     861}
     862
     863input.trackername {
     864     width: 100px;
     865}
     866
     867input.trackerhome {
     868     width: 200px;
     869}
     870
     871input.trackerannounce {
     872     width: 230px;
     873}
  • installer/resources/themes/susidns/light/susidns.css

    r69cdcc8 r77d40f8d  
    11body {
    2         font-family:"Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
    3         background-color: #eef;
    4         color:#001;
     2     font-family:"Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
     3     background-color: #eef;
     4     color:#001;
     5}
     6
     7body.iframed {
     8     background: transparent !important;
     9     margin: 0;
    510}
    611
    712p {
    8         color:black;
    9         line-height:12pt;
    10         margin-left:5mm;
    11         margin-right:5mm;
    12         font-size:10pt;
    13   text-align: justify;
     13     color:black;
     14     line-height:12pt;
     15     margin-left:5mm;
     16     margin-right:5mm;
     17     font-size:10pt;
     18     text-align: justify;
    1419}
    1520
    1621span.addrhlpr {
    17         font-size:8pt;
    18 }
    19        
     22     font-size:8pt;
     23}
     24
    2025h3 {
    21 
    22         color:black;
    23         font-size:12pt;
    24         letter-spacing:2pt;
    25         line-height:18pt;
    26         font-weight:bold;
     26     color:black;
     27     font-size:12pt;
     28     letter-spacing:2pt;
     29     line-height:18pt;
     30     font-weight:bold;
    2731}
    2832
    2933a {
    30         color:#327BBF;
    31         text-decoration:none;
    32   font-weight: bold;
     34     color:#327BBF;
     35     text-decoration:none;
     36     font-weight: bold;
    3337}
    3438
    3539a:hover {
    36         text-decoration:underline;
    37   font-weight: bold;
     40     text-decoration:underline;
     41     font-weight: bold;
    3842}
    3943
    4044th {
    41 
    42         color:black;
    43         line-height:12pt;
    44         padding:5px 10px;
    45         font-size:10pt;
     45     color:black;
     46     line-height:12pt;
     47     padding:5px 10px;
     48     font-size:10pt;
    4649}
    4750
    4851td {
    49 
    50         color:black;
    51         line-height:12pt;
    52         padding:5px 10px;
    53         font-size:10pt;
    54         vertical-align:center;
     52     color:black;
     53     line-height:12pt;
     54     padding:5px 10px;
     55     font-size:10pt;
     56     vertical-align:center;
    5557}
    5658
    5759li {
    58 
    59         color:black;
    60         line-height:12pt;
    61         margin-left:5mm;
    62         margin-right:5mm;
    63         font-size:10pt;
     60     color:black;
     61     line-height:12pt;
     62     margin-left:5mm;
     63     margin-right:5mm;
     64     font-size:10pt;
    6465}
    6566
    6667tr.list1 {
    67         background-color:#E8E8EC;
     68     background-color:#E8E8EC;
    6869}
    6970
    7071tr.list0 {
    71         background-color:#F0F0F4;
     72     background-color:#F0F0F4;
    7273}
    7374
    7475p.messages {
    75         background-color:#92CAFF;
    76         color:#327BBF;
    77         color:black;
    78         border-style:dotted;
    79         padding-top: 5mm;
    80         padding-right: 5mm;
    81         padding-bottom: 5mm;
    82         padding-left: 5mm;
     76     background-color:#92CAFF;
     77     color:#327BBF;
     78     color:black;
     79     border-style:dotted;
     80     padding-top: 5mm;
     81     padding-right: 5mm;
     82     padding-bottom: 5mm;
     83     padding-left: 5mm;
    8384}
    8485
    8586#help {
    86         border-style:dotted;
    87         padding-top: 5mm;
    88         padding-right: 5mm;
    89         padding-bottom: 5mm;
    90         padding-left: 5mm;
     87     border-style:dotted;
     88     padding-top: 5mm;
     89     padding-right: 5mm;
     90     padding-bottom: 5mm;
     91     padding-left: 5mm;
    9192}
    9293
    9394p.footer {
    94         font-size:7pt;
    95   text-align: center;
     95     font-size:7pt;
     96     text-align: center;
    9697}
    9798
    9899.illustrate {
    99   margin: 10px;
    100   padding: 10px;
    101   -moz-border-radius: 4px;
    102   -khtml-border-radius: 4px;
    103   border-radius: 4px;
    104   border: 1px solid #001;
    105   font-size: 10pt;
    106   -moz-box-shadow: inset 0px 0px 1px 0px #002;
    107   background: #fff;
     100     margin: 10px;
     101     padding: 10px;
     102     -moz-border-radius: 4px;
     103     -khtml-border-radius: 4px;
     104     border-radius: 4px;
     105     border: 1px solid #001;
     106     font-size: 10pt;
     107     -moz-box-shadow: inset 0px 0px 1px 0px #002;
     108     background: #fff;
    108109}
    109110
    110111.page {
    111         background-color: #fff;
    112         color:#001;
    113   margin: 20px;
    114   padding: 10px 20px 20px 20px;
    115   -moz-border-radius: 4px;
    116   -khtml-border-radius: 4px;
    117   border-radius: 4px;
    118   border: 1px solid #001;
    119   font-size: 10pt !important;
    120   line-height: 160% !important;
    121   -moz-box-shadow: inset 0px 0px 1px 0px #002;
     112     background-color: #fff;
     113     color:#001;
     114     margin: 20px;
     115     padding: 10px 20px 20px 20px;
     116     -moz-border-radius: 4px;
     117     -khtml-border-radius: 4px;
     118     border-radius: 4px;
     119     border: 1px solid #001;
     120     font-size: 10pt !important;
     121     line-height: 160% !important;
     122     -moz-box-shadow: inset 0px 0px 1px 0px #002;
     123}
     124
     125.iframed .page {
     126     margin: 0 20px;
    122127}
    123128
     
    146151     opacity: 1.0;
    147152     -moz-box-shadow: inset 0px 0px 0px 1px #fff;
    148 
    149153}
    150154
  • installer/resources/themes/susimail/light/susimail.css

    r69cdcc8 r77d40f8d  
    11body {
    2         background-color: #eef;
    3         color:#001;
    4         font-family:"Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
     2     background-color: #eef;
     3     color:#001;
     4     font-family:"Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
     5}
     6
     7body.iframed {
     8     background: transparent !important;
     9     margin: 0;
    510}
    611
    712li {
    8 
    9         color:#001;
    10         line-height:12pt;
    11         font-size:10pt;
    12         margin-left:5mm;
    13         margin-right:5mm;
     13     color:#001;
     14     line-height:12pt;
     15     font-size:10pt;
     16     margin-left:5mm;
     17     margin-right:5mm;
    1418}
    1519
    1620p {
    17         color:#001;
    18         line-height:12pt;
    19         margin-left:5mm;
    20         margin-right:5mm;
    21         font-size:10pt;
     21     color:#001;
     22     line-height:12pt;
     23     margin-left:5mm;
     24     margin-right:5mm;
     25     font-size:10pt;
    2226}
    2327
    2428p.hl {
    25         font-size:12pt;
    26         letter-spacing:2pt;
    27         line-height:18pt;
    28         font-weight:bold;
     29     font-size:12pt;
     30     letter-spacing:2pt;
     31     line-height:18pt;
     32     font-weight:bold;
    2933}
    3034
    3135p.text {
    32         margin-left:10mm;
    33         margin-right:10mm;
     36     margin-left:10mm;
     37     margin-right:10mm;
    3438}
    3539
    3640p.error {
    37         color:#ff0000;
     41     color:#ff0000;
    3842}
    3943
    4044p.info {
    41         color:#327BBF;
     45     color:#327BBF;
    4246}
    4347
    4448span.coloured {
    45         color:#327BBF;
     49     color:#327BBF;
    4650}
    4751
    4852p.footer {
    49         margin-left:10mm;
    50         margin-right:10mm;
    51   font-size:8pt;
    52   line-height:10pt;
     53     margin-left:10mm;
     54     margin-right:10mm;
     55     font-size:8pt;
     56     line-height:10pt;
    5357}
    5458
    5559p.mailbody {
    56   font: 10pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
    57         margin-left:1cm;
    58         margin-right:1cm;
    59    text-align: left;
     60     font: 10pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
     61     margin-left:1cm;
     62     margin-right:1cm;
     63      text-align: left;
    6064}
    6165
    6266a {
    63         color:#327BBF;
    64         text-decoration:none;
     67     color:#327BBF;
     68     text-decoration:none;
    6569}
    6670
    6771a:hover {
    68         text-decoration:underline;
     72     text-decoration:underline;
    6973}
    7074
    7175td {
    7276
    73         color:#001;
    74         line-height:12pt;
    75         margin-left:5mm;
    76         margin-right:5mm;
    77         font-size:10pt;
     77     color:#001;
     78     line-height:12pt;
     79     margin-left:5mm;
     80     margin-right:5mm;
     81     font-size:10pt;
    7882}
    7983
    8084tr.list0 {
    81         background-color:#e0e0e0;
     85     background-color:#e0e0e0;
    8286}
    8387
    8488tr.list1 {
    85         background-color:#ffffff;
     89     background-color:#ffffff;
    8690}
    8791
    8892table.noborder {
    89         margin-left:0mm;
    90         margin-top:0mm;
    91         margin-right:0mm;
     93     margin-left:0mm;
     94     margin-top:0mm;
     95     margin-right:0mm;
    9296}
    9397
    9498pre {
    95   font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
    96         margin-left:1cm;
    97         margin-right:1cm;
     99     font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
     100     margin-left:1cm;
     101     margin-right:1cm;
    98102}
    99103
    100104.page {
    101         background-color: #fff;
    102         color:#001;
    103   margin: 20px;
    104   padding: 0 20px;
    105   -moz-border-radius: 4px;
    106   -khtml-border-radius: 4px;
    107   border-radius: 4px;
    108   border: 1px solid #001;
    109   font-size: 10pt !important;
    110   line-height: 160% !important;
    111   -moz-box-shadow: inset 0px 0px 1px 0px #002;
    112   text-align: center;
     105     background-color: #fff;
     106     color:#001;
     107     margin: 20px;
     108     padding: 0 20px;
     109     -moz-border-radius: 4px;
     110     -khtml-border-radius: 4px;
     111     border-radius: 4px;
     112     border: 1px solid #001;
     113     font-size: 10pt !important;
     114     line-height: 160% !important;
     115     -moz-box-shadow: inset 0px 0px 1px 0px #002;
     116     text-align: center;
     117}
     118
     119.iframed .page {
     120     margin: 0 20px;
    113121}
    114122
    115123table {
    116   text-align: justify;
    117   width: 100%;
     124     text-align: justify;
     125     width: 100%;
    118126}