Changes in / [9ae9abd:bf42cc1]


Ignore:
Files:
39 added
71 edited

Legend:

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

    r9ae9abd rbf42cc1  
    6666    private final File _tmpDir;
    6767    private int _startupDelay;
     68    private boolean _collapsePanels;
    6869    private boolean _shouldUseOT;
    6970    private boolean _shouldUseDHT;
     
    7879    private static final int EEPGET_CONNECT_TIMEOUT_SHORT = 5*1000;
    7980    public static final int DEFAULT_STARTUP_DELAY = 3;
     81    public static final boolean DEFAULT_COLLAPSE_PANELS = true;
    8082    public static final boolean DEFAULT_USE_OPENTRACKERS = true;
    8183    public static final int MAX_CONNECTIONS = 24; // per torrent
     
    107109        _openTrackers = Collections.emptyList();
    108110        _shouldUseDHT = DEFAULT_USE_DHT;
     111        _collapsePanels = DEFAULT_COLLAPSE_PANELS;
    109112        _enableRatings = _enableComments = true;
    110113        _commentsName = "";
     
    688691    }
    689692
     693    /** @since 0.9.32 */
     694    public boolean collapsePanels() {
     695        return _collapsePanels;
     696    }
     697
     698    /** @since 0.9.32 */
     699    public void setCollapsePanels(boolean yes) {
     700        _collapsePanels = yes;
     701    }
     702
    690703    /**
    691704     *  Like DataHelper.toHexString but ensures no loss of leading zero bytes
  • apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java

    r9ae9abd rbf42cc1  
    132132    public static final String PROP_THEME = "i2psnark.theme";
    133133    public static final String DEFAULT_THEME = "ubergine";
     134    /** @since 0.9.32 */
     135    public static final String PROP_COLLAPSE_PANELS = "i2psnark.collapsePanels";
    134136    private static final String PROP_USE_OPENTRACKERS = "i2psnark.useOpentrackers";
    135137    public static final String PROP_OPENTRACKERS = "i2psnark.opentrackers";
     
    452454        if (val == null)
    453455            return true;
     456        return Boolean.parseBoolean(val);
     457    }
     458
     459    /**
     460     *  @return default true
     461     *  @since 0.9.32
     462     */
     463    public boolean isCollapsePanelsEnabled() {
     464        String val = _config.getProperty(PROP_COLLAPSE_PANELS);
     465        if (val == null)
     466            return I2PSnarkUtil.DEFAULT_COLLAPSE_PANELS;
    454467        return Boolean.parseBoolean(val);
    455468    }
     
    799812        if (!_config.containsKey(PROP_COMMENTS_NAME))
    800813            _config.setProperty(PROP_COMMENTS_NAME, "");
     814        if (!_config.containsKey(PROP_COLLAPSE_PANELS))
     815            _config.setProperty(PROP_COLLAPSE_PANELS,
     816                                Boolean.toString(I2PSnarkUtil.DEFAULT_COLLAPSE_PANELS));
    801817        updateConfig();
    802818    }
     
    872888        }
    873889    }
    874    
     890
    875891    private void updateConfig() {
    876892        String i2cpHost = _config.getProperty(PROP_I2CP_HOST);
     
    909925        _util.setCommentsEnabled(Boolean.parseBoolean(_config.getProperty(PROP_COMMENTS, "true")));
    910926        _util.setCommentsName(_config.getProperty(PROP_COMMENTS_NAME, ""));
     927        _util.setCollapsePanels(Boolean.parseBoolean(_config.getProperty(PROP_COLLAPSE_PANELS,
     928                                          Boolean.toString(I2PSnarkUtil.DEFAULT_COLLAPSE_PANELS))));
    911929        File dd = getDataDir();
    912930        if (dd.isDirectory()) {
     
    919937        initTrackerMap();
    920938    }
    921    
     939
    922940    private int getInt(String prop, int defaultVal) {
    923941        String p = _config.getProperty(prop);
     
    930948        return defaultVal;
    931949    }
    932    
     950
    933951    /**
    934952     *  all params may be null or need trimming
    935953     */
    936954    public void updateConfig(String dataDir, boolean filesPublic, boolean autoStart, boolean smartSort, String refreshDelay,
    937                              String startDelay, String pageSize, String seedPct, String eepHost, 
     955                             String startDelay, String pageSize, String seedPct, String eepHost,
    938956                             String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts,
    939957                             String upLimit, String upBW, boolean useOpenTrackers, boolean useDHT, String theme,
    940                              String lang, boolean enableRatings, boolean enableComments, String commentName) {
     958                             String lang, boolean enableRatings, boolean enableComments, String commentName, boolean collapsePanels) {
    941959        synchronized(_configLock) {
    942             locked_updateConfig(dataDir, filesPublic, autoStart, smartSort,refreshDelay,
    943                                 startDelay,  pageSize,  seedPct,  eepHost,
    944                                 eepPort,  i2cpHost,  i2cpPort, i2cpOpts,
    945                                 upLimit,  upBW, useOpenTrackers, useDHT, theme,
    946                                 lang, enableRatings, enableComments, commentName);
     960            locked_updateConfig(dataDir, filesPublic, autoStart, smartSort, refreshDelay,
     961                                startDelay, pageSize, seedPct, eepHost,
     962                                eepPort, i2cpHost, i2cpPort, i2cpOpts,
     963                                upLimit, upBW, useOpenTrackers, useDHT, theme,
     964                                lang, enableRatings, enableComments, commentName, collapsePanels);
    947965        }
    948966    }
    949967
    950968    private void locked_updateConfig(String dataDir, boolean filesPublic, boolean autoStart, boolean smartSort, String refreshDelay,
    951                              String startDelay, String pageSize, String seedPct, String eepHost, 
     969                             String startDelay, String pageSize, String seedPct, String eepHost,
    952970                             String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts,
    953971                             String upLimit, String upBW, boolean useOpenTrackers, boolean useDHT, String theme,
    954                              String lang, boolean enableRatings, boolean enableComments, String commentName) {
     972                             String lang, boolean enableRatings, boolean enableComments, String commentName, boolean collapsePanels) {
    955973        boolean changed = false;
    956974        boolean interruptMonitor = false;
     
    9971015            }
    9981016        }
    999        
     1017
    10001018        if (startDelay != null && _context.isRouterContext()) {
    10011019                int minutes = _util.getStartupDelay();
     
    11161134                    oldOpts.put(pair.substring(0, split), pair.substring(split+1));
    11171135            }
    1118            
     1136
    11191137            boolean reconnect = i2cpHost != null && i2cpHost.trim().length() > 0 && port > 0 &&
    11201138                                (port != _util.getI2CPPort() || !oldI2CPHost.equals(i2cpHost));
     
    12631281            }
    12641282        }
     1283        if (_util.collapsePanels() != collapsePanels) {
     1284            _config.setProperty(PROP_COLLAPSE_PANELS, Boolean.toString(collapsePanels));
     1285            if (collapsePanels)
     1286                addMessage(_t("Collapsible panels enabled."));
     1287            else
     1288                addMessage(_t("Collapsible panels disabled."));
     1289            _util.setCollapsePanels(collapsePanels);
     1290            changed = true;
     1291        }
    12651292        if (changed) {
    12661293            saveConfig();
     
    14861513                        fis = null;
    14871514                    } catch (IOException e) {}
    1488                    
     1515
    14891516                    // This test may be a duplicate, but not if we were called
    14901517                    // from the DirMonitor, which only checks for dup torrent file names.
  • apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java

    r9ae9abd rbf42cc1  
    269269        }
    270270
     271        boolean noCollapse = noCollapsePanels(req);
     272        boolean collapsePanels = _manager.util().collapsePanels();
     273
    271274        setHTMLHeaders(resp);
    272275        PrintWriter out = resp.getWriter();
     
    296299                String downMsg = _context.isRouterContext() ? _t("Router is down") : _t("I2PSnark has stopped");
    297300                // fallback to metarefresh when javascript is disabled
    298                 out.write("<noscript><meta http-equiv=\"refresh\" content=\"" + delay + ";/i2psnark/" + peerString + "\"></noscript>\n");
     301                out.write("<noscript><meta http-equiv=\"refresh\" content=\"" + delay + ";" + _contextPath + "/" + peerString + "\"></noscript>\n");
    299302                out.write("<script src=\"" + jsPfx + "/js/ajax.js\" type=\"text/javascript\"></script>\n" +
    300303                          "<script type=\"text/javascript\">\n"  +
     
    307310            }
    308311        }
    309         out.write(HEADER_A + _themePath + HEADER_B + "</head>\n");
     312        out.write(HEADER_A + _themePath + HEADER_B);
     313
     314        //  ...and inject CSS to display panels uncollapsed
     315        if (noCollapse || !collapsePanels) {
     316            out.write(HEADER_A + _themePath + HEADER_C);
     317        }
     318        out.write("</head>\n");
     319
    310320        if (isConfigure || delay <= 0)
    311321            out.write("<body>");
     
    382392        resp.setCharacterEncoding("UTF-8");
    383393        resp.setContentType("text/html; charset=UTF-8");
    384         resp.setHeader("Cache-Control", "no-store, max-age=0, no-cache, must-revalidate");
     394        // "no-store, max-age=0" forces all our images to be reloaded on ajax refresh
     395        resp.setHeader("Cache-Control", "max-age=86400, no-cache, must-revalidate");
    385396        resp.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'");
    386         resp.setDateHeader("Expires", 0);
     397        resp.setDateHeader("Expires", 86400);
    387398        resp.setHeader("Pragma", "no-cache");
    388399        resp.setHeader("X-Frame-Options", "SAMEORIGIN");
     
    11911202            // commentsName is filtered in SnarkManager.updateConfig()
    11921203            String commentsName = req.getParameter("nofilter_commentsName");
     1204            boolean collapsePanels = req.getParameter("collapsePanels") != null;
    11931205            _manager.updateConfig(dataDir, filesPublic, autoStart, smartSort, refreshDel, startupDel, pageSize,
    11941206                                  seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts,
    11951207                                  upLimit, upBW, useOpenTrackers, useDHT, theme,
    1196                                   lang, ratings, comments, commentsName);
     1208                                  lang, ratings, comments, commentsName, collapsePanels);
    11971209            // update servlet
    11981210            try {
     
    22722284        boolean useRatings = _manager.util().ratingsEnabled();
    22732285        boolean useComments = _manager.util().commentsEnabled();
     2286        boolean collapsePanels = _manager.util().collapsePanels();
    22742287        //int seedPct = 0;
    22752288
    2276         out.write("<form action=\"" + _contextPath + "/configure\" method=\"POST\">\n" +
     2289        boolean noCollapse = noCollapsePanels(req);
     2290
     2291        out.write("<form action=\"" + _contextPath + "/configure\" method=\"POST\" target=\"_top\">\n" +
    22772292                  "<div class=\"configsectionpanel\"><div class=\"snarkConfig\">\n");
    22782293        writeHiddenInputs(out, req, "Save");
     
    23102325        out.write(_t("Smart torrent sorting"));
    23112326        out.write(":</label><td colspan=\"2\"><input type=\"checkbox\" class=\"optbox\" name=\"smartSort\" id=\"smartSort\" value=\"true\" "
    2312                   + (smartSort ? "checked " : "") 
     2327                  + (smartSort ? "checked " : "")
    23132328                  + "title=\"");
    23142329        out.write(_t("Ignore words such as 'a' and 'the' when sorting"));
    2315         out.write("\" >");
     2330        out.write("\" >" +
     2331
     2332                  "<tr><td><label for=\"collapsePanels\">");
     2333        out.write(_t("Collapsible panels"));
     2334        out.write(":</label><td colspan=\"2\"><input type=\"checkbox\" class=\"optbox\" name=\"collapsePanels\" id=\"collapsePanels\" value=\"true\" "
     2335                  + (collapsePanels ? "checked " : "")
     2336                  + "title=\"");
     2337        if (noCollapse) {
     2338            out.write(_t("Your browser does not support this feature."));
     2339            out.write("\" disabled=\"disabled");
     2340        } else {
     2341            out.write(_t("Allow the 'Add Torrent' and 'Create Torrent' panels to be collapsed, and collapse by default in non-embedded mode"));
     2342        }
     2343        out.write("\">");
    23162344
    23172345        if (!_context.isRouterContext()) {
     
    27452773        return buf.toString();
    27462774    }
    2747    
     2775
    27482776    /**
    27492777     * This is for a full URL. For a path only, use encodePath().
     
    27592787    private static final String HEADER_A = "<link href=\"";
    27602788    private static final String HEADER_B = "snark.css?" + CoreVersion.VERSION + "\" rel=\"stylesheet\" type=\"text/css\" >";
    2761 
     2789    private static final String HEADER_C = "nocollapse.css?" + CoreVersion.VERSION + "\" rel=\"stylesheet\" type=\"text/css\" >";
    27622790
    27632791    private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" >\n" +
     
    38523880    }
    38533881
     3882    private static boolean noCollapsePanels(HttpServletRequest req) {
     3883        // check for user agents that can't toggle the collapsible panels...
     3884        String ua = req.getHeader("user-agent");
     3885        return ua != null && (ua.contains("Konq") || ua.contains("konq") ||
     3886                              ua.contains("Qupzilla") || ua.contains("Dillo") ||
     3887                              ua.contains("Netsurf") || ua.contains("Midori"));
     3888    }
     3889
    38543890    /**
    38553891     *  Is "a" equal to "b",
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java

    r9ae9abd rbf42cc1  
    699699            out.write(uri);
    700700            out.write("\">");
    701             if (targetRequest.length() > 80)
    702                 out.write(DataHelper.escapeHTML(targetRequest.substring(0, 75)) + "&hellip;");
    703             else
    704                 out.write(uri);
     701            // Long URLs are handled in CSS
     702            out.write(uri);
    705703            out.write("</a>");
    706704            if (usingWWWProxy) {
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java

    r9ae9abd rbf42cc1  
    6262        int port = _helper.getTargetPort(tunnel);
    6363        return port > 0 ? "" + port : "";
    64     }
    65 
    66     public String getSpoofedHost(int tunnel) {
    67         return DataHelper.escapeHTML(_helper.getSpoofedHost(tunnel));
    6864    }
    6965
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java

    r9ae9abd rbf42cc1  
    543543    }
    544544
     545    /**
     546     * @since 0.9.32 moved from EditBean
     547     */
     548    public String getSpoofedHost(int tunnel) {
     549        return DataHelper.escapeHTML(_helper.getSpoofedHost(tunnel));
     550    }
     551
    545552    ///
    546553    /// bean props for form submission
  • apps/i2ptunnel/jsp/editServer.jsp

    r9ae9abd rbf42cc1  
    116116        <tr>
    117117            <td>
    118                 <input type="text" size="60" maxlength="80" name="nofilter_description" title="<%=intl._t("Description of tunnel to be displayed on Tunnel Manager home page")%>" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescription" />
     118                <input type="text" size="60" maxlength="80" name="nofilter_description" title="<%=intl._t("Description of tunnel to be displayed on Tunnel Manager home page")%>" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext tunnelDescriptionText" />
    119119            </td>
    120120
  • apps/i2ptunnel/jsp/index.jsp

    r9ae9abd rbf42cc1  
    2323<head>
    2424    <title><%=intl._t("Hidden Services Manager")%></title>
    25    
     25
    2626    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    2727    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
    2828    <link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
    29    
     29
    3030    <% if (indexBean.allowCSS()) {
    3131  %><link rel="icon" href="<%=indexBean.getTheme()%>images/favicon.ico" />
     
    8080
    8181<div class="panel" id="servers">
    82    
     82
    8383    <h2><%=intl._t("I2P Hidden Services")%></h2>
    8484
     
    9696        for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) {
    9797            if (indexBean.isClient(curServer)) continue;
    98            
    9998      %>
    10099
     
    167166        </td>
    168167    </tr>
     168
     169    <tr>
     170        <td class="tunnelDestination" colspan="6">
     171            <span class="tunnelDestinationLabel">
     172         <%
     173                String name = indexBean.getSpoofedHost(curServer);
     174                    if (name == null || name.equals("")) {
     175                        name = indexBean.getTunnelName(curServer);
     176                        out.write("<b>");
     177                        out.write(intl._t("Destination"));
     178                        out.write(":</b></span> ");
     179                        out.write(indexBean.getDestHashBase32(curServer));
     180                   } else {
     181                       out.write("<b>");
     182                       out.write(intl._t("Hostname"));
     183                       out.write(":</b></span> ");
     184                       out.write(name);
     185                   }
     186          %>
     187        </td>
     188    </tr>
     189
    169190    <tr>
    170191        <td class="tunnelDescription" colspan="6">
     
    212233        for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) {
    213234            if (!indexBean.isClient(curClient)) continue;
    214       %>       
     235      %>
    215236
    216237
  • apps/jrobin/java/src/org/jrobin/graph/RrdGraphConstants.java

    r9ae9abd rbf42cc1  
    287287         * Used internally
    288288         */
    289         int PADDING_LEFT = 5; // pix
    290         /**
    291          * Used internally
    292          */
    293         int PADDING_TOP = 9; // pix
     289        int PADDING_LEFT = 0; // pix - absent vertical label provides padding here
     290        /**
     291         * Used internally
     292         */
     293        int PADDING_TOP = 5; // pix -- additional top pixels added by frame border
    294294        /**
    295295         * Used internally
     
    315315         * Used internally
    316316         */
    317         int PADDING_VLABEL = 7; // pix
     317        int PADDING_VLABEL = 8; // pix
    318318
    319319        /**
  • apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java

    r9ae9abd rbf42cc1  
    998998    public void notifyProgress(UpdateTask task, String status, long downloaded, long totalSize) {
    999999        StringBuilder buf = new StringBuilder(64);
    1000         buf.append(status).append(' ');
     1000        buf.append("<div class=\"sb_updatestatus\">");
     1001        buf.append(status).append("</div>");
    10011002        double pct = ((double)downloaded) / ((double)totalSize);
    10021003        synchronized (_pct) {
     1004            buf.append("<div class=\"percentBarOuter\"><div class=\"percentBarText\">");
     1005            buf.append(DataHelper.formatSize2(downloaded));
     1006            buf.append("B / ");
     1007            buf.append(DataHelper.formatSize2(totalSize));
     1008            buf.append("B</div><div class=\"percentBarInner\" style=\"width: ");
    10031009            buf.append(_pct.format(pct));
    1004         }
    1005         buf.append("<br>\n");
    1006         buf.append(_t("{0}B transferred", DataHelper.formatSize2(downloaded)));
     1010            buf.append("\">");
     1011        }
    10071012        updateStatus(buf.toString());
    10081013    }
  • apps/routerconsole/java/src/net/i2p/router/update/UpdateHandler.java

    r9ae9abd rbf42cc1  
    5050        UpdateRunner update = new UpdateRunner(_context, _mgr, type, method, updateSources);
    5151        // set status before thread to ensure UI feedback
    52         _mgr.notifyProgress(update, "<b>" + _mgr._t("Updating") + "</b>");
     52        _mgr.notifyProgress(update, "<b>" + _mgr._t("Updating") + " I2P</b>");
    5353        return update;
    5454    }
  • apps/routerconsole/java/src/net/i2p/router/update/UpdateRunner.java

    r9ae9abd rbf42cc1  
    260260            return;
    261261        long d = currentWrite + bytesTransferred;
    262         String status = "<b>" + _t("Updating") + "</b>";
     262        String status = "<b>" + _t("Updating") + " I2P</b>";
    263263        _mgr.notifyProgress(this, status, d, d + bytesRemaining);
    264264    }
  • apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java

    r9ae9abd rbf42cc1  
    2727    private static final String PROP_XFRAME = "routerconsole.disableXFrame";
    2828    public static final String PROP_FORCE_MOBILE_CONSOLE = "routerconsole.forceMobileConsole";
     29    public static final String PROP_EMBED_APPS = "routerconsole.embedApps";
    2930
    3031    private static final String _consoleNonce = Long.toString(RandomSource.getInstance().nextLong());
     
    5051        }
    5152        return url;
     53    }
     54
     55    /**
     56     * Returns whether app embedding is enabled or disabled
     57     * @since 0.9.32
     58     */
     59    public boolean embedApps() {
     60        return _context.getBooleanProperty(PROP_EMBED_APPS);
    5261    }
    5362
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java

    r9ae9abd rbf42cc1  
    4141                          _t("Summary bar will refresh shortly."));
    4242        } else if (_action.equals(_t("Restore minimal default"))) {
    43             _context.router().saveConfig(SummaryHelper.PROP_SUMMARYBAR + "default", SummaryHelper.DEFAULT_MINIMAL);
     43            _context.router().saveConfig(SummaryHelper.PROP_SUMMARYBAR + "default", isAdvanced() ? SummaryHelper.DEFAULT_MINIMAL_ADVANCED : SummaryHelper.DEFAULT_MINIMAL);
    4444            addFormNotice(_t("Minimal summary bar default restored.") + " " +
    4545                          _t("Summary bar will refresh shortly."));
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java

    r9ae9abd rbf42cc1  
    1313    private boolean _universalTheming;
    1414    private boolean _forceMobileConsole;
     15    private boolean _embedApps;
    1516    private String _config;
    16    
     17
    1718    @Override
    1819    protected void processForm() {
     
    2526        }
    2627    }
    27    
     28
    2829    public void setShouldsave(String moo) { _shouldSave = true; }
    2930
     
    3233    public void setForceMobileConsole(String baa) { _forceMobileConsole = true; }
    3334
     35    public void setEmbedApps(String baa) { _embedApps = true; }
     36
    3437    public void setTheme(String val) {
    3538        _config = val;
    3639    }
    37    
     40
    3841    /** note - lang change is handled in CSSHelper but we still need to save it here */
    3942    private void saveChanges() {
     
    6063        else
    6164            removes.add(CSSHelper.PROP_FORCE_MOBILE_CONSOLE);
     65        if (_embedApps)
     66            changes.put(CSSHelper.PROP_EMBED_APPS, "true");
     67        else
     68            removes.add(CSSHelper.PROP_EMBED_APPS);
    6269        boolean ok = _context.router().saveConfig(changes, removes);
    6370        if (ok) {
  • apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java

    r9ae9abd rbf42cc1  
    1414        Set<String> themes = themeSet();
    1515        for (String theme : themes) {
    16             buf.append("<div class=\"themechoice\">")
     16            buf.append("<label for=\"").append(theme).append("\"><div class=\"themechoice\">")
    1717               .append("<input type=\"radio\" class=\"optbox\" name=\"theme\" ");
    1818            if (theme.equals(current))
    1919                buf.append(CHECKED);
    20             buf.append("value=\"").append(theme).append("\">")
     20            buf.append("value=\"").append(theme).append("\" id=\"").append(theme).append("\">")
    2121               .append("<object height=\"48\" width=\"48\" data=\"/themes/console/").append(theme).append("/images/thumbnail.png\">")
    2222               .append("<img height=\"48\" width=\"48\" alt=\"\" src=\"/themes/console/images/thumbnail.png\">")
    2323               .append("</object><br>")
    2424               .append("<div class=\"themelabel\">").append(_t(theme)).append("</div>")
    25                .append("</div>\n");
     25               .append("</div></label>\n");
    2626        }
    2727        boolean universalTheming = _context.getBooleanProperty(CSSHelper.PROP_UNIVERSAL_THEMING);
     
    4444        buf.append("value=\"1\">")
    4545           .append(_t("Force the mobile console to be used"))
     46           .append("</label></br>\n");
     47        boolean embedApps = _context.getBooleanProperty(CSSHelper.PROP_EMBED_APPS);
     48        buf.append("<label title=\"")
     49           .append(_t("Enabling the Universal Themeing option is recommended when embedding these applications"))
     50           .append("\"><input type=\"checkbox\" name=\"embedApps\" ");
     51        if (embedApps)
     52            buf.append(CHECKED);
     53        buf.append("value=\"1\">")
     54           .append(_t("Embed I2PSnark and I2PMail in the console"))
    4655           .append("</label></div>\n");
    4756        return buf.toString();
     
    160169                continue;
    161170            // we use "lang" so it is set automagically in CSSHelper
    162             buf.append("<div class=\"langselect\"><input type=\"radio\" class=\"optbox\" name=\"lang\" ");
     171            buf.append("<label for=\"").append(lang).append("\"><div class=\"langselect\"><input type=\"radio\" class=\"optbox\" name=\"lang\" ");
    163172            if (lang.equals(current))
    164173                buf.append(CHECKED);
    165             buf.append("value=\"").append(lang).append("\">")
    166                .append("<img height=\"11\" width=\"16\" alt=\"\" src=\"/flags.jsp?c=").append(langs[i][1]).append("\">")
     174            buf.append("value=\"").append(lang).append("\" id=\"").append(lang).append("\">")
     175               .append("<img height=\"48\" width=\"48\" alt=\"\" src=\"/flags.jsp?s=48&c=").append(langs[i][1]).append("\">")
    167176               .append("<div class=\"ui_lang\">");
    168177            int under = lang.indexOf('_');
     
    175184                   .append(')');
    176185            }
    177             buf.append("</div></div>\n");
     186            buf.append("</div></div></label>\n");
    178187        }
    179188        return buf.toString();
  • apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java

    r9ae9abd rbf42cc1  
    2525    private int _refreshDelaySeconds;
    2626    private boolean _persistent;
     27    private boolean _graphHideLegend;
    2728    private String _stat;
    2829    private int _end;
     
    3334    private static final String PROP_PERIODS = "routerconsole.graphPeriods";
    3435    private static final String PROP_EVENTS = "routerconsole.graphEvents";
     36    private static final String PROP_LEGEND = "routerconsole.graphHideLegend";
    3537    public static final int DEFAULT_X = 400;
    3638    public static final int DEFAULT_Y = 100;
     
    4446    private static final int MAX_C = SummaryListener.MAX_ROWS;
    4547    private static final int MIN_REFRESH = 15;
    46    
     48
    4749    /** set the defaults after we have a context */
    4850    @Override
     
    5456        _refreshDelaySeconds = _context.getProperty(PROP_REFRESH, DEFAULT_REFRESH);
    5557        _showEvents = _context.getBooleanProperty(PROP_EVENTS);
    56     }
    57    
     58        _graphHideLegend = _context.getBooleanProperty(PROP_LEGEND);
     59    }
     60
    5861    /**
    5962     *  This must be output in the jsp since *lt;meta&gt; must be in the &lt;head&gt;
     
    7982
    8083    /** @since 0.9 */
    81     public void setE(String str) { 
     84    public void setE(String str) {
    8285        try {
    8386            _end = Math.max(0, Integer.parseInt(str));
     
    8689
    8790    /** @since 0.9 shorter parameter */
    88     public void setC(String str) { 
     91    public void setC(String str) {
    8992        try {
    9093            _periodCount = Math.max(MIN_C, Math.min(Integer.parseInt(str), MAX_C));
     
    99102
    100103    /** @since 0.9 shorter parameter */
    101     public void setH(String str) { 
     104    public void setH(String str) {
    102105        try {
    103106            _height = Math.max(MIN_Y, Math.min(Integer.parseInt(str), MAX_Y));
     
    110113
    111114    /** @since 0.9 shorter parameter */
    112     public void setW(String str) { 
     115    public void setW(String str) {
    113116        try {
    114117            _width = Math.max(MIN_X, Math.min(Integer.parseInt(str), MAX_X));
     
    129132    public void setPersistent(String foo) { _persistent = true; }
    130133
     134    /** @since 0.9.32 */
     135    public void setHideLegend(String foo) { _graphHideLegend = true; }
     136
    131137    /**
    132138     *  For single stat page
     
    136142        _stat = stat;
    137143    }
    138    
     144
    139145    public String getImages() {
    140146        if (StatSummarizer.isDisabled())
     
    163169                _out.write("<img class=\"statimage\""
    164170                           + " src=\"viewstat.jsp?stat=bw.combined"
    165                            + "&amp;periodCount=" + _periodCount
    166                            + "&amp;width=" + _width
    167                            + "&amp;height=" + (_height - 13)
     171                           + "&amp;periodCount=" + _periodCount
     172                           + "&amp;width=" + _width);
     173                if (!_graphHideLegend) {
     174                    // bw.combined graph has two entries in its legend
     175                    // -26 pixels equalizes its height with the other images
     176                    _out.write("&amp;height=" + (_height - 26));
     177                } else {
     178                    // no legend, no height difference needed
     179                    _out.write("&amp;height=" + (_height));
     180                }
     181                _out.write("&amp;hideLegend=" + _graphHideLegend
    168182                           + "\" alt=\"" + title + "\" title=\"" + title + "\"></a>\n");
    169183            }
    170            
     184
    171185            for (SummaryListener lsnr : ordered) {
    172186                Rate r = lsnr.getRate();
     
    185199                           + r.getRateStat().getName()
    186200                           + "&amp;showEvents=" + _showEvents
    187                            + "&amp;period=" + r.getPeriod() 
    188                            + "&amp;periodCount=" + _periodCount 
     201                           + "&amp;period=" + r.getPeriod()
     202                           + "&amp;periodCount=" + _periodCount
    189203                           + "&amp;width=" + _width
    190204                           + "&amp;height=" + _height
    191                            + "\" alt=\"" + title
     205                           + "&amp;hideLegend=" + _graphHideLegend
     206                           + "\" alt=\"" + title
    192207                           + "\" title=\"" + title + "\"></a>\n");
    193208            }
     
    244259                       + "&amp;showEvents=" + _showEvents
    245260                       + "&amp;period=" + period
    246                        + "&amp;periodCount=" + _periodCount 
    247                        + "&amp;end=" + _end 
     261                       + "&amp;periodCount=" + _periodCount
     262                       + "&amp;end=" + _end
    248263                       + "&amp;width=" + _width
    249264                       + "&amp;height=" + _height
     265                       + "&amp;hideLegend=" + _graphHideLegend
    250266                       + "\"></div><p id=\"graphopts\">\n");
    251267
     
    364380            _out.write ("<label><input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? HelperBase.CHECKED : "") + ">" + _t("Events") + "</label></td></tr><tr><td>\n");
    365381            _out.write(_t("Graph size") + ":</td><td><input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"width\" value=\"" + _width
    366                        + "\">" + _t("pixels wide") + "&nbsp;&nbsp;&nbsp;<input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"height\" value=\"" + _height 
     382                       + "\">" + _t("pixels wide") + "&nbsp;&nbsp;&nbsp;<input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"height\" value=\"" + _height
    367383                       + "\">" + _t("pixels high") + "</td><td class=\"infohelp\">" + _t("Note: Dimensions are for graph only (excludes title, labels and legend).") + "</td></tr><tr><td>\n");
     384            _out.write(_t("Hide legend") + ":</td><td colspan=\"2\">");
     385            _out.write("<label><input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"hideLegend\"");
     386            if (_graphHideLegend)
     387                _out.write(HelperBase.CHECKED);
     388            _out.write(">" + _t("Do not show legend on graphs") + "</label></td></tr><tr><td>\n");
    368389            _out.write(_t("Refresh delay") + ":</td><td colspan=\"2\"><select name=\"refreshDelay\">");
    369390            for (int i = 0; i < times.length; i++) {
     
    433454            _refreshDelaySeconds != _context.getProperty(PROP_REFRESH, DEFAULT_REFRESH) ||
    434455            _showEvents != _context.getBooleanProperty(PROP_EVENTS) ||
     456            _graphHideLegend != _context.getBooleanProperty(PROP_LEGEND) ||
    435457            _persistent != _context.getBooleanPropertyDefaultTrue(SummaryListener.PROP_PERSISTENT)) {
    436458            Map<String, String> changes = new HashMap<String, String>();
     
    440462            changes.put(PROP_REFRESH, "" + _refreshDelaySeconds);
    441463            changes.put(PROP_EVENTS, "" + _showEvents);
     464            changes.put(PROP_LEGEND, "" + _graphHideLegend);
    442465            changes.put(SummaryListener.PROP_PERSISTENT, "" + _persistent);
    443466            _context.router().saveConfig(changes, null);
  • apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java

    r9ae9abd rbf42cc1  
    1818 */
    1919public class HomeHelper extends HelperBase {
    20    
     20
    2121    private static final char S = ',';
    2222    private static final String I = "/themes/console/images/";
     
    3333        _x("Configure UI") + S + _x("Select console theme & language & set optional console password").replace("&", "&amp;") + S + "/configui" + S + I + "info/ui.png" + S +
    3434        _x("Customize Home Page") + S + _x("I2P Home Page Configuration") + S + "/confighome" + S + I + "home_page.png" + S +
    35         _x("Email") + S + _x("Anonymous webmail client") + S + "/susimail/susimail" + S + I + "email.png" + S +
     35        _x("Customize Sidebar") + S + _x("Customize the sidebar by adding or removing or repositioning elements") + S + "/configsidebar" + S + I + "info/sidebar.png" + S +
     36        _x("Email") + S + _x("Anonymous webmail client") + S + "/webmail" + S + I + "email.png" + S +
    3637        _x("Help") + S + _x("I2P Router Help") + S + "/help" + S + I + "support.png" + S +
    3738        _x("Manage Plugins") + S + _x("Install and configure I2P plugins") + S + "/configplugins" + S + I + "plugin.png" + S +
    3839        _x("Router Console") + S + _x("I2P Router Console") + S + "/console" + S + I + "info/console.png" + S +
    39         _x("Torrents") + S + _x("Built-in anonymous BitTorrent Client") + S + "/i2psnark/" + S + I + "i2psnark.png" + S +
     40        _x("Torrents") + S + _x("Built-in anonymous BitTorrent Client") + S + "/torrents" + S + I + "i2psnark.png" + S +
    4041        _x("Web Server") + S + _x("Local web server for hosting your own content on I2P") + S + "http://127.0.0.1:7658/" + S + I + "server_32x32.png" + S +
    4142        "";
  • apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java

    r9ae9abd rbf42cc1  
    132132        } else {
    133133            str = str.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
    134             return "<p>" + _t("File location") + ": <a href=\"/wrapper.log\" target=\"_blank\">" + f.getAbsolutePath() + "</a></p></td></tr>\n<tr><td><pre>" + str + "</pre>";
     134            return "<p>" + _t("File location") + ": <a href=\"/wrapper.log\" target=\"_blank\">" + f.getAbsolutePath() + "</a></p></td></tr>\n<tr><td><pre id=\"servicelogs\">" + str + "</pre>";
    135135        }
    136136    }
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java

    r9ae9abd rbf42cc1  
    2727
    2828    static final String ALL_SECTIONS[] =
    29         {"HelpAndFAQ", "I2PServices", "I2PInternals", "General", "ShortGeneral", "NetworkReachability",
    30         "UpdateStatus", "RestartStatus", "Peers", "FirewallAndReseedStatus", "Bandwidth", "Tunnels",
     29        {"HelpAndFAQ", "I2PServices", "I2PInternals", "RouterInfo", "ShortRouterInfo", "AdvancedRouterInfo", "MemoryBar", "NetworkReachability",
     30        "UpdateStatus", "RestartStatus", "Peers", "PeersAdvanced", "FirewallAndReseedStatus", "Bandwidth", "BandwidthGraph", "Tunnels",
    3131        "Congestion", "TunnelStatus", "Destinations", "NewsHeadings", "Advanced" };
    3232    static final Map<String, String> SECTION_NAMES;
     
    3737        aMap.put("I2PServices", "I2P Services");
    3838        aMap.put("I2PInternals", "I2P Internals");
    39         aMap.put("General", "General");
    40         aMap.put("ShortGeneral", "Short General");
     39        aMap.put("RouterInfo", "Router Information");
     40        aMap.put("ShortRouterInfo", "Short Router Information");
     41        aMap.put("AdvancedRouterInfo", "Router Information (advanced)");
     42        aMap.put("MemoryBar", "Memory Usage Bar");
    4143        aMap.put("NetworkReachability", "Network Reachability");
    4244        aMap.put("UpdateStatus", "Update Status");
    4345        aMap.put("RestartStatus", "Restart Status");
    4446        aMap.put("Peers", "Peers");
     47        aMap.put("PeersAdvanced", "Peers (advanced)");
    4548        aMap.put("FirewallAndReseedStatus", "Firewall &amp; Reseed Status");
    4649        aMap.put("Bandwidth", "Bandwidth");
     50        aMap.put("BandwidthGraph", "Bandwidth Graph (experimental)");
    4751        aMap.put("Tunnels", "Tunnels");
    4852        aMap.put("Congestion", "Congestion");
     
    5054        aMap.put("Destinations", "Local Tunnels");
    5155        aMap.put("NewsHeadings", "News &amp; Updates");
    52         aMap.put("Advanced", "Advanced");
     56        aMap.put("Advanced", "Advanced Console Links");
    5357        SECTION_NAMES = Collections.unmodifiableMap(aMap);
    5458    }
     
    9296            else if ("Advanced".equals(section))
    9397                buf.append(renderAdvancedHTML());
    94             else if ("General".equals(section))
    95                 buf.append(renderGeneralHTML());
    96             else if ("ShortGeneral".equals(section))
    97                 buf.append(renderShortGeneralHTML());
     98            else if ("RouterInfo".equals(section) || "General".equals(section)) // Backwards-compatibility
     99                buf.append(renderRouterInfoHTML());
     100            else if ("ShortRouterInfo".equals(section) || "ShortGeneral".equals(section)) //Backwards-compatibility
     101                buf.append(renderShortRouterInfoHTML());
     102            else if ("AdvancedRouterInfo".equals(section))
     103                buf.append(renderAdvancedRouterInfoHTML());
     104            else if ("MemoryBar".equals(section))
     105                buf.append(renderMemoryBarHTML());
    98106            else if ("NetworkReachability".equals(section))
    99107                buf.append(renderNetworkReachabilityHTML());
     
    104112            else if ("Peers".equals(section))
    105113                buf.append(renderPeersHTML());
     114            else if ("PeersAdvanced".equals(section))
     115                buf.append(renderPeersAdvancedHTML());
    106116            else if ("FirewallAndReseedStatus".equals(section))
    107117                buf.append(renderFirewallAndReseedStatusHTML());
    108118            else if ("Bandwidth".equals(section))
    109119                buf.append(renderBandwidthHTML());
     120            else if ("BandwidthGraph".equals(section))
     121                buf.append(renderBandwidthGraphHTML());
    110122            else if ("Tunnels".equals(section))
    111123                buf.append(renderTunnelsHTML());
     
    131143           .append("\">")
    132144           .append(_t("Help &amp; FAQ"))
    133            .append("</a></h3>");
     145           .append("</a></h3><hr class=\"b\">\n" +
     146
     147                   "<table id=\"sb_help\"><tr><td>" +
     148
     149                   "<a href=\"/help#advancedsettings\" target=\"_top\" title=\"")
     150           .append(_t("A guide to some of the less-used configuration settings"))
     151           .append("\">")
     152           .append(nbsp(_t("Advanced Settings")))
     153           .append("</a>\n" +
     154
     155                   "<a href=\"/help#changelog\" target=\"_top\" title=\"")
     156           .append(_t("Recent development changes to the router"))
     157           .append("\">")
     158           .append(nbsp(_t("Changelog")))
     159           .append("</a>\n" +
     160
     161                   "<a href=\"/help#configurationhelp\" target=\"_top\" title=\"")
     162           .append(_t("An introduction to configuring your router"))
     163           .append("\">")
     164           .append(nbsp(_t("Configuration")))
     165           .append("</a>\n" +
     166
     167                   "<a href=\"/help#faq\" target=\"_top\" title=\"")
     168           .append(_t("A shortened version of the official Frequently Asked Questions"))
     169           .append("\">")
     170           .append(nbsp(_t("FAQ")))
     171           .append("</a>\n" +
     172
     173                   "<a href=\"/help#legal\" target=\"_top\" title=\"")
     174           .append(_t("Information regarding software and licenses used by I2P"))
     175           .append("\">")
     176           .append(nbsp(_t("Legal")))
     177           .append("</a>\n" +
     178
     179                   "<a href=\"/help#reachability\" target=\"_top\" title=\"")
     180           .append(_t("A short guide to the sidebar's network reachability notification"))
     181           .append("\">")
     182           .append(nbsp(_t("Reachability")))
     183           .append("</a>\n" +
     184
     185                   "<a href=\"/help#sidebarhelp\" target=\"_top\" title=\"")
     186           .append(_t("An introduction to the router sidebar"))
     187           .append("\">")
     188           .append(nbsp(_t("Sidebar")))
     189           .append("</a>\n" +
     190
     191                   "<a href=\"/console#trouble\" target=\"_top\" title=\"")
     192           .append(_t("Troubleshooting &amp; Further Assistance"))
     193           .append("\">")
     194           .append(nbsp(_t("Troubleshoot")))
     195           .append("</a>\n")
     196
     197           .append("</td></tr></table>\n");
    134198        return buf.toString();
    135199    }
     
    145209                   "<hr class=\"b\"><table id=\"sb_services\"><tr><td>" +
    146210
    147                    "<a href=\"/susimail/susimail\" target=\"_blank\" title=\"")
     211                   "<a href=\"/webmail\" target=\"_top\" title=\"")
    148212           .append(_t("Anonymous webmail client"))
    149213           .append("\">")
     
    151215           .append("</a>\n" +
    152216
    153                    "<a href=\"/i2psnark/\" target=\"_blank\" title=\"")
     217                   "<a href=\"/torrents\" target=\"_top\" title=\"")
    154218           .append(_t("Built-in anonymous BitTorrent Client"))
    155219           .append("\">")
     
    197261        }
    198262
    199         buf.append("<a href=\"/i2ptunnelmgr\" target=\"_top\" title=\"")
     263        buf.append("<a href=\"/help\" target=\"_top\" title=\"")
     264           .append(_t("Router Help and FAQ"))
     265           .append("\">")
     266           .append(nbsp(_t("Help")))
     267           .append("</a>\n" +
     268
     269                   "<a href=\"/i2ptunnelmgr\" target=\"_top\" title=\"")
    200270           .append(_t("Local Tunnels"))
    201271           .append("\">")
    202272           .append(nbsp(_t("Hidden Services Manager")))
    203273           .append("</a>\n" +
    204 
    205        //          "<a href=\"/jobs.jsp\" target=\"_top\" title=\"")
    206        //  .append(_t("Show the router's workload, and how it's performing"))
    207        //  .append("\">")
    208        //  .append(_t("Jobs"))
    209        //  .append("</a>\n" +
    210274
    211275                   "<a href=\"/logs\" target=\"_top\" title=\"")
     
    248312        buf.append("<h3 id=\"advanced\"><a title=\"")
    249313           .append(_t("Advanced Configuration"))
    250            .append("\" href=\"/configadvanced\">")
     314           .append("\" href=\"/configadvanced\" target=\"_top\">")
    251315           .append(_t("Advanced"))
    252316           .append("</a></h3>\n")
     
    254318           .append("<hr class=\"b\"><table id=\"sb_advanced\"><tr><td>")
    255319
    256            .append("<a title=\"")
     320           .append("<a target=\"_top\" title=\"")
    257321           .append(_t("Review active encryption certificates used in console"))
    258322           .append("\" href=\"/certs\">")
     
    268332           .append("<a title=\"")
    269333           .append(_t("View router debug information"))
    270            .append("\" href=\"/debug\">")
     334           .append("\" href=\"/debug\" target=\"_top\">")
    271335           .append(nbsp(_t("Debug")))
     336           .append("</a>\n")
     337
     338           .append("<a href=\"/events\" target=\"_top\" title=\"")
     339           .append(_t("View historical log of router events"))
     340           .append("\">")
     341           .append(nbsp(_t("Events")))
    272342           .append("</a>\n")
    273343
    274344           .append("<a title=\"")
    275345           .append(_t("Review extended info about installed .jar and .war files"))
    276            .append("\" href=\"/jars\">")
     346           .append("\" href=\"/jars\" target=\"_top\">")
    277347           .append(nbsp(_t("Jars")))
    278348           .append("</a>\n");
     
    280350        File javadoc = new File(_context.getBaseDir(), "docs/javadoc/index.html");
    281351        if (javadoc.exists())
    282             buf.append("<a href=\"/javadoc/index.html\" target=\"_blank\">Javadoc</a>\n");
    283 
    284         buf.append("<a title=\"")
     352            buf.append("<a title=\"")
     353               .append(_t("Documentation for the I2P API"))
     354               .append("\" href=\"/javadoc/index.html\" target=\"_blank\">Javadoc</a>\n");
     355
     356        buf.append("<a href=\"/jobs\" target=\"_top\" title=\"")
     357           .append(_t("Show the router's workload, and how it's performing"))
     358           .append("\">")
     359           .append(nbsp(_t("Jobs")))
     360           .append("</a>\n")
     361
     362           .append("<a title=\"")
    285363           .append(_t("View active leasesets (debug mode)"))
    286            .append("\" href=\"/netdb?l=2\">")
     364           .append("\" href=\"/netdb?l=2\" target=\"_top\">")
    287365           .append(nbsp(_t("LeaseSets")))
    288366           .append("</a>\n")
     
    290368           .append("<a title=\"")
    291369           .append(_t("Network database search tool"))
    292            .append("\" href=\"/netdb?f=4\">")
     370           .append("\" href=\"/netdb?f=4\" target=\"_top\">")
    293371           .append(nbsp(_t("NetDB Search")))
    294372           .append("</a>\n")
     
    296374           .append("<a title=\"")
    297375           .append(_t("Signed proof of ownership of this router"))
    298            .append("\" href=\"/proof\">")
     376           .append("\" href=\"/proof\" target=\"_top\">")
    299377           .append(nbsp(_t("Proof")))
    300378           .append("</a>\n")
     
    308386           .append("<a title=\"")
    309387           .append(_t("Review possible sybils in network database"))
    310            .append("\" href=\"/netdb?f=3\">")
     388           .append("\" href=\"/netdb?f=3\" target=\"_top\">")
    311389           .append(nbsp(_t("Sybils")))
    312390           .append("</a>\n")
     
    316394    }
    317395
    318     public String renderGeneralHTML() {
    319         if (_helper == null) return "";
    320         StringBuilder buf = new StringBuilder(512);
    321         buf.append("<h3><a href=\"/help\" target=\"_top\" title=\"")
    322            .append(_t("I2P Router Help"))
    323            .append("\">")
    324            .append(_t("General"))
     396    public String renderRouterInfoHTML() {
     397        if (_helper == null) return "";
     398        StringBuilder buf = new StringBuilder(512);
     399        buf.append("<h3><a href=\"/netdb?r=.\" target=\"_top\" title=\"")
     400           .append(_t("Your Local Identity [{0}] is your unique I2P router identity, similar to an IP address but tailored to I2P. ", _helper.getIdent()))
     401           .append(_t("Never disclose this to anyone, as it can reveal your real world IP."))
     402           .append("\">")
     403           .append(_t("Router Info"))
    325404           .append("</a></h3><hr class=\"b\">\n" +
    326405
    327                    "<table id=\"sb_localid\"><tr>" +
    328                    "<td align=\"left\"><b title=\"")
    329            .append(_t("Your Local Identity is your unique I2P router identity, similar to an ip address but tailored to I2P. "))
    330            .append(_t("Never disclose this to anyone, as it can reveal your real world ip."))
    331            .append("\">")
    332            .append(_t("Local Identity"))
    333            .append(":</b></td>" +
    334                    "<td align=\"right\">" +
    335                    "<a title=\"")
    336            .append(_t("Your unique I2P router identity is"))
    337            .append(' ')
    338            .append(_helper.getIdent())
    339            .append(", ")
    340            .append(_t("never reveal it to anyone"))
    341            .append("\" href=\"/netdb?r=.\" target=\"_top\">")
    342            .append(_t("show"))
    343            .append("</a></td></tr>\n" +
    344 
    345                    "</table><table id=\"sb_version\">" + // fix for some rows with a big left side and some with a big right side
     406                   "</table><table id=\"sb_general\">" +
    346407                   "<tr title=\"")
    347408           .append(_t("The version of the I2P software we are running"))
     
    354415           .append("</td></tr>\n" +
    355416
    356                    "</table><table id=\"sb_uptime\">" + // fix for some rows with a big left side and some with a big right side
    357417                   "<tr title=\"")
    358418           .append(_t("How long we've been running for this session"))
     
    367427    }
    368428
    369     public String renderShortGeneralHTML() {
     429    public String renderShortRouterInfoHTML() {
    370430        if (_helper == null) return "";
    371431        StringBuilder buf = new StringBuilder(512);
     
    393453    }
    394454
     455    /** @since 0.9.32 */
     456    public String renderAdvancedRouterInfoHTML() {
     457        if (_helper == null) return "";
     458        StringBuilder buf = new StringBuilder(512);
     459        buf.append("<h3><a href=\"/netdb?r=.\" target=\"_top\" title=\"")
     460           .append(_t("Your Local Identity [{0}] is your unique I2P router identity, similar to an IP address but tailored to I2P. ", _helper.getIdent()))
     461           .append(_t("Never disclose this to anyone, as it can reveal your real world IP."))
     462           .append("\">")
     463           .append(_t("Router Info"))
     464           .append("</a></h3><hr class=\"b\">\n" +
     465
     466                   "<table id=\"sb_advancedgeneral\">" +
     467                   "<tr title=\"")
     468           .append(_t("The version of the I2P software we are running"))
     469           .append("\">" +
     470                   "<td align=\"left\"><b>")
     471           .append(_t("Version"))
     472           .append(":</b></td>" +
     473                   "<td align=\"right\">")
     474           .append(_helper.getVersion())
     475           .append("</td></tr>\n" +
     476
     477                   "<tr title=\"")
     478           .append(_t("How long we've been running for this session"))
     479           .append("\">" +
     480                   "<td align=\"left\"><b>")
     481           .append(_t("Uptime"))
     482           .append(":</b></td>" +
     483                   "<td align=\"right\">")
     484           .append(_helper.getUptime())
     485           .append("</td></tr>\n" +
     486
     487                   "<tr title=\"")
     488           .append(_t("Difference between network-synced time and local time"))
     489           .append("\">" +
     490                   "<td align=\"left\"><b>")
     491           .append(_t("Clock Skew"))
     492           .append(":</b></td>" +
     493                   "<td align=\"right\">")
     494           .append(_context.clock().getOffset())
     495           .append(" ms</td></tr>\n" +
     496
     497                   "<tr title=\"")
     498           .append(_t("How much RAM I2P is using / total RAM available to I2P (excludes RAM allocated to the JVM)"))
     499           .append("\">" +
     500                   "<td align=\"left\"><b>")
     501           .append(_t("Memory"))
     502           .append(":</b></td>" +
     503                   "<td align=\"right\">")
     504           .append(_helper.getMemory())
     505           .append("</td></tr></table>\n");
     506        return buf.toString();
     507    }
     508
     509    /** @since 0.9.32 */
     510    public String renderMemoryBarHTML() {
     511        if (_helper == null) return "";
     512        StringBuilder buf = new StringBuilder(512);
     513        buf.append(_helper.getMemoryBar());
     514        return buf.toString();
     515    }
     516
    395517    public String renderNetworkReachabilityHTML() {
    396518        if (_helper == null) return "";
    397519        StringBuilder buf = new StringBuilder(512);
    398520        SummaryHelper.NetworkStateMessage reachability = _helper.getReachability();
    399         buf.append("<h4><span class=\"");
     521        buf.append("<h4><span class=\"sb_netstatus ");
    400522        switch (reachability.getState()) {
     523            case VMCOMM:
     524                buf.append("vmcomm");
     525                break;
     526            case CLOCKSKEW:
     527                buf.append("clockskew");
     528                break;
    401529            case ERROR:
    402530                buf.append("error");
     
    529657    }
    530658
     659    public String renderPeersAdvancedHTML() {
     660        if (_helper == null) return "";
     661        StringBuilder buf = new StringBuilder(512);
     662        buf.append("<h3><a href=\"/peers\" target=\"_top\" title=\"")
     663           .append(_t("Show all current peer connections"))
     664           .append("\">")
     665           .append(_t("Peers"))
     666           .append("</a></h3><hr class=\"b\">\n" +
     667
     668                   "<table id=\"sb_peersadvanced\">\n" +
     669
     670                   "<tr title=\"")
     671           .append(_t("Peers we've been talking to in the last few minutes/last hour"))
     672           .append("\">" +
     673                   "<td align=\"left\"><b>")
     674           .append(_t("Active"))
     675           .append(":</b></td><td align=\"right\">");
     676        int active = _helper.getActivePeers();
     677        buf.append(active)
     678           .append(SummaryHelper.THINSP)
     679           .append(Math.max(active, _helper.getActiveProfiles()))
     680           .append("</td></tr>\n" +
     681
     682                   "<tr title=\"")
     683           .append(_t("The number of peers available for building client tunnels"))
     684           .append("\">" +
     685                   "<td align=\"left\"><b>")
     686           .append(_t("Fast"))
     687           .append(":</b></td><td align=\"right\">")
     688           .append(_helper.getFastPeers())
     689           .append("</td></tr>\n" +
     690
     691                   "<tr title=\"")
     692           .append(_t("The number of peers available for building exploratory tunnels"))
     693           .append("\">" +
     694                   "<td align=\"left\"><b>")
     695           .append(_t("High capacity"))
     696           .append(":</b></td><td align=\"right\">")
     697           .append(_helper.getHighCapacityPeers())
     698           .append("</td></tr>\n" +
     699
     700                   "<tr title=\"")
     701           .append(_t("The number of peers available for network database inquiries"))
     702           .append("\">" +
     703                   "<td align=\"left\"><b>")
     704           .append(_t("Integrated"))
     705           .append(":</b></td><td align=\"right\">")
     706           .append(_helper.getWellIntegratedPeers())
     707           .append("</td></tr>\n" +
     708
     709                   "<tr title=\"")
     710           .append(_t("The total number of peers in our network database"))
     711           .append("\">" +
     712                   "<td align=\"left\"><b>")
     713           .append(_t("Known"))
     714           .append(":</b></td><td align=\"right\">")
     715           .append(_helper.getAllPeers())
     716           .append("</td></tr>\n" +
     717
     718                   "<tr class=\"separator\"><td colspan=\"2\"><hr></td></tr>" +
     719
     720                   "<tr title=\"")
     721           .append(_t("The number of peers failing network tests"))
     722           .append("\">" +
     723                   "<td align=\"left\"><a href=\"/profiles\"><b>")
     724           .append(_t("Failing"))
     725           .append(":</b></a></td><td align=\"right\">")
     726           .append(_helper.getFailingPeers())
     727           .append("</td></tr>\n" +
     728
     729                   "<tr title=\"")
     730           .append(_t("The number of banned peers"))
     731           .append("\">" +
     732                   "<td align=\"left\"><a href=\"/profiles?f=3\"><b>")
     733           .append(_t("Banned"))
     734           .append(":</b></a></td><td align=\"right\">")
     735           .append(_helper. getBanlistedPeers())
     736           .append("</td></tr>\n" +
     737
     738                   "</table>\n");
     739        return buf.toString();
     740    }
     741
     742
    531743    public String renderFirewallAndReseedStatusHTML() {
    532744        if (_helper == null) return "";
     
    577789
    578790                   "</table>\n");
     791        return buf.toString();
     792    }
     793
     794    /** @since 0.9.32 */
     795    public String renderBandwidthGraphHTML() {
     796        if (_helper == null) return "";
     797        StringBuilder buf = new StringBuilder(512);
     798        if (!StatSummarizer.isDisabled())
     799            buf.append("<div id=\"sb_graphcontainer\"><a href=\"/graphs\"><table id=\"sb_bandwidthgraph\">" +
     800                       "<tr title=\"")
     801               .append(_t("Our inbound &amp; outbound traffic for the last 20 minutes"))
     802               .append("\"><td><span id=\"sb_graphstats\">")
     803               .append(_helper.getSecondKBps())
     804               .append("Bps</span></td></tr></table></a></div>\n");
     805//               .append("<script src=\"/js/refreshGraph.js\" type=\"text/javascript\"></script>");
    579806        return buf.toString();
    580807    }
     
    737964                    if (entry.updated > 0) {
    738965                        Date date = new Date(entry.updated);
    739                         // tooltip to tag for translation post 0.9.31 release
    740                         buf.append(" title=\"Published: ").append(fmt.format(date)).append("\"");
     966                        buf.append(" title=\"")
     967                           .append(_t("Published")).append(": ").append(fmt.format(date)).append("\"");
    741968                    }
    742969                    buf.append(">");
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java

    r9ae9abd rbf42cc1  
    3131/**
    3232 * Simple helper to query the appropriate router for data necessary to render
    33  * the summary sections on the router console. 
     33 * the summary sections on the router console.
    3434 *
    3535 * For the full summary bar use renderSummaryBar()
     
    4444
    4545    static final String DEFAULT_FULL =
    46         "HelpAndFAQ" + S +
    47         "ShortGeneral" + S +
     46        "RouterInfo" + S +
    4847        "UpdateStatus" + S +
    4948        "Bandwidth" + S +
     
    5251        "I2PServices" + S +
    5352        "I2PInternals" + S +
     53        "HelpAndFAQ" + S +
    5454        "Peers" + S +
    5555        "Tunnels" + S +
     
    6060
    6161    static final String DEFAULT_FULL_ADVANCED =
    62         "HelpAndFAQ" + S +
    63         "ShortGeneral" + S +
     62        "AdvancedRouterInfo" + S +
     63        "MemoryBar" + S +
    6464        "UpdateStatus" + S +
    6565        "Bandwidth" + S +
     
    7878
    7979    static final String DEFAULT_MINIMAL =
    80         "ShortGeneral" + S +
     80        "ShortRouterInfo" + S +
     81        "Bandwidth" + S +
     82        "UpdateStatus" + S +
     83        "NewsHeadings" + S +
     84        "NetworkReachability" + S +
     85        "FirewallAndReseedStatus" + S +
     86        "RestartStatus" + S +
     87        "Destinations" + S +
     88        "";
     89
     90     /** @since 0.9.32 */
     91    static final String DEFAULT_MINIMAL_ADVANCED =
     92        "AdvancedRouterInfo" + S +
     93        "MemoryBar" + S +
    8194        "Bandwidth" + S +
    8295        "UpdateStatus" + S +
     
    153166        RUNNING,
    154167        WARN,
    155         ERROR;
     168        ERROR,
     169        CLOCKSKEW,
     170        VMCOMM;
    156171    }
    157172
     
    198213    private NetworkStateMessage reachability() {
    199214        if (_context.commSystem().isDummy())
    200             return new NetworkStateMessage(NetworkState.RUNNING, "VM Comm System");
     215            return new NetworkStateMessage(NetworkState.VMCOMM, "VM Comm System");
    201216        if (_context.router().getUptime() > 60*1000 && (!_context.router().gracefulShutdownInProgress()) &&
    202217            !_context.clientManager().isAlive())
     
    208223        // Display the actual skew, not the offset
    209224        if (Math.abs(skew) > 30*1000)
    210             return new NetworkStateMessage(NetworkState.ERROR, _t("ERR-Clock Skew of {0}", DataHelper.formatDuration2(Math.abs(skew))));
     225            return new NetworkStateMessage(NetworkState.CLOCKSKEW, _t("ERR-Clock Skew of {0}", DataHelper.formatDuration2(Math.abs(skew))));
    211226        if (_context.router().isHidden())
    212227            return new NetworkStateMessage(NetworkState.HIDDEN, _t("Hidden"));
     
    282297     *
    283298     */
    284 /********
     299
    285300    public String getMemory() {
    286301        DecimalFormat integerFormatter = new DecimalFormat("###,###,##0");
    287         long used = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/1024;
     302        long used = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/1024/1024;
    288303        long usedPc = 100 - ((Runtime.getRuntime().freeMemory() * 100) / Runtime.getRuntime().totalMemory());
    289         return integerFormatter.format(used) + "KB (" + usedPc + "%)";
    290     }
    291 ********/
     304        long total = (Runtime.getRuntime().totalMemory())/1024/1024;
     305        // long free = Runtime.getRuntime().freeMemory()/1024/1024;
     306        // return integerFormatter.format(used) + "MB (" + usedPc + "%)";
     307        // return integerFormatter.format(used) + "MB / " + free + " MB";
     308        return integerFormatter.format(used) + " / " + total + "MB";
     309    }
     310
     311    public String getMemoryBar() {
     312        DecimalFormat integerFormatter = new DecimalFormat("###,###,##0");
     313        long used = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/1024/1024;
     314        long usedPc = 100 - ((Runtime.getRuntime().freeMemory() * 100) / Runtime.getRuntime().totalMemory());
     315        long total = (Runtime.getRuntime().totalMemory())/1024/1024;
     316        // long free = Runtime.getRuntime().freeMemory()/1024/1024;
     317        // return integerFormatter.format(used) + "MB (" + usedPc + "%)";
     318        // return integerFormatter.format(used) + "MB / " + free + " MB";
     319        return "<div class=\"percentBarOuter\"><div class=\"percentBarText\">RAM: " + integerFormatter.format(used) + " / " + total + "MB" +
     320        "</div><div class=\"percentBarInner\" style=\"width: " + integerFormatter.format(usedPc) +
     321        "%;\"></div></div>";
     322    }
    292323
    293324    /**
     
    295326     *
    296327     */
    297     public int getActivePeers() { 
    298         if (_context == null) 
     328    public int getActivePeers() {
     329        if (_context == null)
    299330            return 0;
    300331        else
     
    306337     */
    307338    public boolean showFirewallWarning() {
    308         return _context != null && 
     339        return _context != null &&
    309340               _context.netDb().isInitialized() &&
    310341               _context.router().getUptime() > 2*60*1000 &&
     
    318349     *
    319350     */
    320     public int getActiveProfiles() { 
    321         if (_context == null) 
     351    public int getActiveProfiles() {
     352        if (_context == null)
    322353            return 0;
    323354        else
     
    328359     *
    329360     */
    330     public int getFastPeers() { 
    331         if (_context == null) 
     361    public int getFastPeers() {
     362        if (_context == null)
    332363            return 0;
    333364        else
     
    338369     *
    339370     */
    340     public int getHighCapacityPeers() { 
    341         if (_context == null) 
     371    public int getHighCapacityPeers() {
     372        if (_context == null)
    342373            return 0;
    343374        else
     
    348379     *
    349380     */
    350     public int getWellIntegratedPeers() { 
    351         if (_context == null) 
     381    public int getWellIntegratedPeers() {
     382        if (_context == null)
    352383            return 0;
    353384        //return _context.profileOrganizer().countWellIntegratedPeers();
     
    358389     *
    359390     */
    360 /********
    361     public int getFailingPeers() { 
    362         if (_context == null) 
     391
     392    public int getFailingPeers() {
     393        if (_context == null)
    363394            return 0;
    364395        else
    365396            return _context.profileOrganizer().countFailingPeers();
    366397    }
    367 ********/
     398
    368399    /**
    369400     * How many peers totally suck.
    370401     *
    371402     */
    372 /********
    373     public int getBanlistedPeers() { 
    374         if (_context == null) 
     403
     404    public int getBanlistedPeers() {
     405        if (_context == null)
    375406            return 0;
    376407        else
    377408            return _context.banlist().getRouterCount();
    378409    }
    379 ********/
    380  
     410
     411
    381412    /**
    382413     *    @return "x.xx / y.yy {K|M}"
    383414     */
    384     public String getSecondKBps() { 
    385         if (_context == null) 
     415    public String getSecondKBps() {
     416        if (_context == null)
    386417            return "0 / 0";
    387         return formatPair(_context.bandwidthLimiter().getReceiveBps(), 
     418        return formatPair(_context.bandwidthLimiter().getReceiveBps(),
    388419                          _context.bandwidthLimiter().getSendBps());
    389420    }
     
    393424     */
    394425    public String getFiveMinuteKBps() {
    395         if (_context == null) 
     426        if (_context == null)
    396427            return "0 / 0";
    397428
     
    416447     *    @return "x.xx / y.yy {K|M}"
    417448     */
    418     public String getLifetimeKBps() { 
    419         if (_context == null) 
     449    public String getLifetimeKBps() {
     450        if (_context == null)
    420451            return "0 / 0";
    421452
     
    465496     *
    466497     */
    467     public String getInboundTransferred() { 
    468         if (_context == null) 
     498    public String getInboundTransferred() {
     499        if (_context == null)
    469500            return "0";
    470501
     
    479510     *
    480511     */
    481     public String getOutboundTransferred() { 
    482         if (_context == null) 
     512    public String getOutboundTransferred() {
     513        if (_context == null)
    483514            return "0";
    484515
     
    530561                        buf.append(" ").append(_t("ago")).append(". ").append(_t("Rebuilding")).append("&hellip;\"></td></tr>\n");
    531562                    } else {
    532                         // green light 
     563                        // green light
    533564                        buf.append("<td><img src=\"/themes/console/images/local_up.png\" alt=\"Ready\" title=\"").append(_t("Ready")).append("\"></td></tr>\n");
    534565                    }
     
    586617     *
    587618     */
    588     public int getInboundTunnels() { 
    589         if (_context == null) 
     619    public int getInboundTunnels() {
     620        if (_context == null)
    590621            return 0;
    591622        else
     
    597628     *
    598629     */
    599     public int getOutboundTunnels() { 
    600         if (_context == null) 
     630    public int getOutboundTunnels() {
     631        if (_context == null)
    601632            return 0;
    602633        else
     
    608639     *
    609640     */
    610     public int getInboundClientTunnels() { 
    611         if (_context == null) 
     641    public int getInboundClientTunnels() {
     642        if (_context == null)
    612643            return 0;
    613644        else
     
    619650     *
    620651     */
    621     public int getOutboundClientTunnels() { 
    622         if (_context == null) 
     652    public int getOutboundClientTunnels() {
     653        if (_context == null)
    623654            return 0;
    624655        else
     
    630661     *
    631662     */
    632     public int getParticipatingTunnels() { 
    633         if (_context == null) 
     663    public int getParticipatingTunnels() {
     664        if (_context == null)
    634665            return 0;
    635666        else
     
    638669 
    639670    /** @since 0.7.10 */
    640     public String getShareRatio() { 
    641         if (_context == null) 
     671    public String getShareRatio() {
     672        if (_context == null)
    642673            return "0";
    643674        double sr = _context.tunnelManager().getShareRatio();
     
    651682     *
    652683     */
    653     public String getJobLag() { 
    654         if (_context == null) 
     684    public String getJobLag() {
     685        if (_context == null)
    655686            return "0";
    656687
     
    667698     *
    668699     */
    669     public String getMessageDelay() { 
    670         if (_context == null) 
     700    public String getMessageDelay() {
     701        if (_context == null)
    671702            return "0";
    672703
     
    679710     *
    680711     */
    681     public String getTunnelLag() { 
    682         if (_context == null) 
     712    public String getTunnelLag() {
     713        if (_context == null)
    683714            return "0";
    684715
     
    686717    }
    687718
    688     public String getTunnelStatus() { 
    689         if (_context == null) 
     719    public String getTunnelStatus() {
     720        if (_context == null)
    690721            return "";
    691722        return _context.throttle().getTunnelStatus();
     
    723754********/
    724755
    725     private static boolean updateAvailable() { 
     756    private static boolean updateAvailable() {
    726757        return NewsHelper.isUpdateAvailable();
    727758    }
    728759
    729     private boolean unsignedUpdateAvailable() { 
     760    private boolean unsignedUpdateAvailable() {
    730761        return NewsHelper.isUnsignedUpdateAvailable(_context);
    731762    }
    732763
    733764    /** @since 0.9.20 */
    734     private boolean devSU3UpdateAvailable() { 
     765    private boolean devSU3UpdateAvailable() {
    735766        return NewsHelper.isDevSU3UpdateAvailable(_context);
    736767    }
    737768
    738     private static String getUpdateVersion() { 
     769    private static String getUpdateVersion() {
    739770        return DataHelper.escapeHTML(NewsHelper.updateVersion());
    740771    }
    741772
    742     private static String getUnsignedUpdateVersion() { 
     773    private static String getUnsignedUpdateVersion() {
    743774        // value is a formatted date, does not need escaping
    744775        return NewsHelper.unsignedUpdateVersion();
     
    746777
    747778    /** @since 0.9.20 */
    748     private static String getDevSU3UpdateVersion() { 
     779    private static String getDevSU3UpdateVersion() {
    749780        return DataHelper.escapeHTML(NewsHelper.devSU3UpdateVersion());
    750781    }
     
    760791        boolean needSpace = false;
    761792        if (status.length() > 0) {
    762             buf.append("<h4 class=\"sb_info\">").append(status).append("</h4>\n");
     793            buf.append("<h4 class=\"sb_info sb_update\">").append(status).append("</h4>\n");
    763794            needSpace = true;
    764795        }
     
    776807            else
    777808                needSpace = true;
    778             buf.append("<h4 class=\"sb_info\"><b>").append(_t("Update downloaded")).append("<br>");
     809            buf.append("<h4 class=\"sb_info sb_update\"><b>").append(_t("Update downloaded")).append("<br>");
    779810            if (_context.hasWrapper())
    780811                buf.append(_t("Click Restart to install"));
     
    797828            else
    798829                needSpace = true;
    799             buf.append("<h4 class=\"sb_info\"><b>").append(_t("Update available")).append(":<br>");
     830            buf.append("<h4 class=\"sb_info sb_update\"><b>").append(_t("Update available")).append(":<br>");
    800831            buf.append(_t("Version {0}", getUpdateVersion())).append("<br>");
    801832            buf.append(constraint).append("</b></h4>");
     
    809840            else
    810841                needSpace = true;
    811             buf.append("<h4 class=\"sb_info\"><b>").append(_t("Update available")).append(":<br>");
     842            buf.append("<h4 class=\"sb_info sb_update\"><b>").append(_t("Update available")).append(":<br>");
    812843            buf.append(_t("Version {0}", getUnsignedUpdateVersion())).append("<br>");
    813844            buf.append(unsignedConstraint).append("</b></h4>");
     
    821852            else
    822853                needSpace = true;
    823             buf.append("<h4 class=\"sb_info\"><b>").append(_t("Update available")).append(":<br>");
     854            buf.append("<h4 class=\"sb_info sb_update\"><b>").append(_t("Update available")).append(":<br>");
    824855            buf.append(_t("Version {0}", getDevSU3UpdateVersion())).append("<br>");
    825856            buf.append(devSU3Constraint).append("</b></h4>");
     
    931962        String config = "";
    932963        if ("home".equals(page)) {
    933             config = _context.getProperty(PROP_SUMMARYBAR + page, DEFAULT_MINIMAL);
     964            config = _context.getProperty(PROP_SUMMARYBAR + page, isAdvanced() ? DEFAULT_MINIMAL_ADVANCED : DEFAULT_MINIMAL);
    934965        } else {
    935966            config = _context.getProperty(PROP_SUMMARYBAR + page);
     
    9821013        List<String> sections = getSummaryBarSections("default");
    9831014        TreeSet<String> sortedSections = new TreeSet<String>();
     1015
     1016        // Forward-convert old section names
     1017        int pos = sections.indexOf("General");
     1018        if (pos >= 0) {
     1019            sections.set(pos, "RouterInfo");
     1020        }
     1021        pos = sections.indexOf("ShortGeneral");
     1022        if (pos >= 0) {
     1023            sections.set(pos, "ShortRouterInfo");
     1024        }
    9841025
    9851026        for (int i = 0; i < allSections.length; i++) {
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java

    r9ae9abd rbf42cc1  
    4141    private static final Color GRID_COLOR = new Color(100, 100, 100, 75);
    4242    private static final Color MGRID_COLOR = new Color(255, 91, 91, 110);
     43    private static final Color FONT_COLOR = new Color(51, 51, 63);
     44    private static final Color FRAME_COLOR = new Color(51, 51, 63);
    4345    private static final Color AREA_COLOR = new Color(100, 160, 200, 200);
    4446    private static final Color LINE_COLOR = new Color(0, 30, 110, 255);
     
    140142            def.setColor(RrdGraphDef.COLOR_GRID,   GRID_COLOR);
    141143            def.setColor(RrdGraphDef.COLOR_MGRID,  MGRID_COLOR);
     144            def.setColor(RrdGraphDef.COLOR_FONT,   FONT_COLOR);
     145            def.setColor(RrdGraphDef.COLOR_FRAME,  FRAME_COLOR);
    142146            def.setFont(RrdGraphDef.FONTTAG_DEFAULT, new Font(DEFAULT_FONT_NAME, Font.PLAIN, 10));
    143147            def.setFont(RrdGraphDef.FONTTAG_TITLE,   new Font(DEFAULT_FONT_NAME, Font.PLAIN, 10));
     
    263267                def.line(dsNames[1], LINE_COLOR, "Events per period");
    264268            */
    265             if (hideLegend) 
     269            if (hideLegend)
    266270                def.setNoLegend(true);
    267271            if (hideGrid) {
  • apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java

    r9ae9abd rbf42cc1  
    5555            if (name == null)
    5656                name = client.toBase64().substring(0,4);
    57             out.write("<h3 class=\"tabletitle\"><a name=\"" + client.toBase64().substring(0,4)
    58                       + "\" ></a>" + _t("Client tunnels for") + ' ' + DataHelper.escapeHTML(_t(name)));
     57            out.write("<h3 class=\"tabletitle\" id=\"" + client.toBase64().substring(0,4)
     58                      + "\" >" + _t("Client tunnels for") + ' ' + DataHelper.escapeHTML(_t(name)));
    5959            if (isLocal)
    6060                out.write(" <a href=\"/configtunnels#" + client.toBase64().substring(0,4) +"\" title=\"" + _t("Configure tunnels for session") + "\">[" + _t("configure") + "]</a></h3>\n");
     
    6565
    6666        List<HopConfig> participating = _context.tunnelDispatcher().listParticipatingTunnels();
    67         out.write("<h3 class=\"tabletitle\"><a name=\"participating\"></a>" + _t("Participating tunnels") + "</h3>\n");
     67        out.write("<h3 class=\"tabletitle\" id=\"participating\">" + _t("Participating tunnels") + "</h3>\n");
     68        int bwShare = _context.bandwidthLimiter().getOutboundKBytesPerSecond();
     69        if (bwShare > 12) {
     70        // Don't bother re-indenting
    6871        if (!participating.isEmpty()) {
    6972            Collections.sort(participating, new TunnelComparator());
     
    8689            }
    8790            // everything that isn't 'recent' is already in the tunnel.participatingMessageCount stat
    88             // TODO translation tag "Tunnel identity" tooltips
    8991            processed += cfg.getRecentMessagesCount();
    9092            if (++displayed > DISPLAY_LIMIT)
     
    9294            out.write("<tr>");
    9395            if (cfg.getReceiveTunnel() != null)
    94                 out.write("<td class=\"cells\" align=\"center\" title=\"Tunnel identity\"><span class=\"tunnel_id\">" + cfg.getReceiveTunnel().getTunnelId() +"</span></td>");
     96                out.write("<td class=\"cells\" align=\"center\" title=\"" + _t("Tunnel identity") + "\"><span class=\"tunnel_id\">" +
     97                          cfg.getReceiveTunnel().getTunnelId() + "</span></td>");
    9598            else
    9699                out.write("<td class=\"cells\" align=\"center\">n/a</td>");
     
    100103                out.write("<td class=\"cells\">&nbsp;</td>");
    101104            if (cfg.getSendTunnel() != null)
    102                 out.write("<td class=\"cells\" align=\"center\" title=\"Tunnel identity\"><span class=\"tunnel_id\">" + cfg.getSendTunnel().getTunnelId() +"</span></td>");
     105                out.write("<td class=\"cells\" align=\"center\" title=\"" + _t("Tunnel identity") + "\"><span class=\"tunnel_id\">" + cfg.getSendTunnel().getTunnelId() +"</span></td>");
    103106            else
    104107                out.write("<td class=\"cells\">&nbsp;</td>");
     
    137140            out.write("<div class=\"statusnotes\"><b>" + _t("none") + "</b></div>\n");
    138141        out.write("<div class=\"statusnotes\"><b>" + _t("Lifetime bandwidth usage") + ":&nbsp;&nbsp;" + DataHelper.formatSize2(processed*1024) + "B</b></div>\n");
     142        } else {
     143            out.write("<div class=\"statusnotes noparticipate\"><b>" + _t("Not enough shared bandwidth to build participating tunnels.") +
     144                      "</b> <a href=\"config\">[" + _t("Configure") + "]</a></div>\n");
     145        }
    139146        //renderPeers(out);
    140147
    141         //out.write("<h3 class=\"tabletitle\">" + "Bandwidth Tiers" + "</h3>\n"); TODO: replace "definitions" with tagged "bandwidth tiers" post 0.9.31 release
    142         out.write("<h3 class=\"tabletitle\">" + _t("Definitions") + "</h3>\n");
     148        out.write("<h3 class=\"tabletitle\">" + _t("Bandwidth Tiers") + "</h3>\n");
    143149        out.write("<table id=\"tunnel_defs\"><tbody>");
    144150        out.write("<tr><td>&nbsp;</td>"
     
    203209            live++;
    204210            if (info.isInbound())
    205                 out.write("<tr><td class=\"cells\" align=\"center\"><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound\"></td>");
    206             else
    207                 out.write("<tr><td class=\"cells\" align=\"center\"><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"Outbound\"></td>");
     211                out.write("<tr><td class=\"cells\" align=\"center\"><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"" +
     212                          _t("Inbound") + "\"></td>");
     213            else
     214                out.write("<tr><td class=\"cells\" align=\"center\"><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"" +
     215                          _t("Outbound") + "\"></td>");
    208216            out.write("<td class=\"cells\" align=\"center\">" + DataHelper.formatDuration2(timeLeft) + "</td>\n");
    209217            int count = info.getProcessedMessagesCount();
     
    213221                TunnelId id = (info.isInbound() ? info.getReceiveTunnelId(j) : info.getSendTunnelId(j));
    214222                if (_context.routerHash().equals(peer)) {
    215                     // Add empty content placeholders to force alignment. TODO tag tooltips for bandwidth tier / tunnel id for translation
    216                     out.write(" <td class=\"cells\" align=\"center\"><span class=\"tunnel_peer tunnel_local\" title=\"Locally hosted tunnel\">" + _t("Local") + "</span>&nbsp;"
    217                               + "<span class=\"tunnel_id\" title=\"Tunnel identity\">" +
    218                              (id == null ? "" : "" + id) + "</span><b class=\"tunnel_cap\" title=\"Bandwidth tier\"></b></td>");
     223                    // Add empty content placeholders to force alignment.
     224                    out.write(" <td class=\"cells\" align=\"center\"><span class=\"tunnel_peer tunnel_local\" title=\"" +
     225                              _t("Locally hosted tunnel") + "\">" + _t("Local") + "</span>&nbsp;<span class=\"tunnel_id\" title=\"" +
     226                              _t("Tunnel identity") + "\">" + (id == null ? "" : "" + id) +
     227                              "</span><b class=\"tunnel_cap\" title=\"" + _t("Bandwidth tier") + "\"></b></td>");
    219228                } else {
    220229                    String cap = getCapacity(peer);
    221                     // TODO Tag for translation tooltips for network cap / tunnel id / bandwidth tier
    222230                    out.write(" <td class=\"cells\" align=\"center\"><span class=\"tunnel_peer\">" + netDbLink(peer) +
    223                               "</span>&nbsp;<span class=\"nowrap\"><span class=\"tunnel_id\" title=\"Tunnel identity\">" + (id == null ? "" : " " + id) +
    224                               "</span><b class=\"tunnel_cap\" title=\"Bandwidth tier\">" + cap + "</b></span></td>");
     231                              "</span>&nbsp;<span class=\"nowrap\"><span class=\"tunnel_id\" title=\"" + _t("Tunnel identity") + "\">" +
     232                              (id == null ? "" : " " + id) + "</span><b class=\"tunnel_cap\" title=\"" + _t("Bandwidth tier") + "\">" +
     233                              cap + "</b></span></td>");
    225234                }
    226235                if (info.getLength() < maxLength && (info.getLength() == 1 || j == info.getLength() - 2)) {
  • apps/routerconsole/jsp/flags.jsp

    r9ae9abd rbf42cc1  
    1010/**
    1111 *  flags.jsp?c=de => icons/flags/de.png
     12 *  flags.jsp?c=de&s=48 => icons/flags48x48/de.png
    1213 *  with headers set so the browser caches.
    1314 */
     
    1617    (c.length() == 2 || c.length() == 7) &&
    1718    c.replaceAll("[a-z0-9_]", "").length() == 0) {
     19    String flagSet = "flags";
     20    String s = request.getParameter("s");
     21    if ("48".equals(s)) {
     22        flagSet = "flags48x48";
     23    }
    1824    java.io.OutputStream cout = response.getOutputStream();
    1925    String base = net.i2p.I2PAppContext.getGlobalContext().getBaseDir().getAbsolutePath();
    2026    String file = "docs" + java.io.File.separatorChar + "icons" + java.io.File.separatorChar +
    21                   "flags" + java.io.File.separatorChar + c + ".png";
     27                  flagSet + java.io.File.separatorChar + c + ".png";
    2228    java.io.File ffile = new java.io.File(base, file);
    2329    long lastmod = ffile.lastModified();
  • apps/routerconsole/jsp/help-configuration.jsi

    r9ae9abd rbf42cc1  
    1414</p>
    1515<ul id="upnphelp">
    16   <li class="tidylist"><%=intl._t("No UPnP-compatible device present")%></li>
    17   <li class="tidylist"><%=intl._t("UPnP disabled on the device")%></li>
    18   <li class="tidylist"><%=intl._t("Software firewall interference with UPnP")%></li>
    19   <li class="tidylist"><%=intl._t("Bugs in the device's UPnP implementation")%></li>
    20   <li class="tidylist"><%=intl._t("Multiple firewall/routers in the internet connection path")%></li>
    21   <li class="tidylist"><%=intl._t("UPnP device change, reset, or address change")%></li>
     16  <li><%=intl._t("No UPnP-compatible device present")%></li>
     17  <li><%=intl._t("UPnP disabled on the device")%></li>
     18  <li><%=intl._t("Software firewall interference with UPnP")%></li>
     19  <li><%=intl._t("Bugs in the device's UPnP implementation")%></li>
     20  <li><%=intl._t("Multiple firewall/routers in the internet connection path")%></li>
     21  <li><%=intl._t("UPnP device change, reset, or address change")%></li>
    2222</ul>
    2323<p>
  • apps/routerconsole/jsp/help-legal.jsi

    r9ae9abd rbf42cc1  
    33
    44<ul>
    5 <li class="tidylist">ElGamal and DSA code, under the BSD license, written by TheCrypto</li>
    6 <li class="tidylist">SHA256 and HMAC-SHA256, under the MIT license, written by the <a href="https://www.bouncycastle.org/" target="_blank">Legion of the Bouncycastle</a></li>
    7 <li class="tidylist">AES code, under the Cryptix (MIT) license, written by the <a href="http://www.cryptix.org/" target="_blank">Cryptix team</a></li>
    8 <li class="tidylist"><a href="http://support.ntp.org/bin/view/Support/JavaSntpClient" target="_blank">SNTP code</a>, under the BSD license, written by Adam Buckley</li>
    9 <li class="tidylist">The rest is outright public domain, written by jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, and others.</li>
     5<li>ElGamal and DSA code, under the BSD license, written by TheCrypto</li>
     6<li>SHA256 and HMAC-SHA256, under the MIT license, written by the <a href="https://www.bouncycastle.org/" target="_blank">Legion of the Bouncycastle</a></li>
     7<li>AES code, under the Cryptix (MIT) license, written by the <a href="http://www.cryptix.org/" target="_blank">Cryptix team</a></li>
     8<li><a href="http://support.ntp.org/bin/view/Support/JavaSntpClient" target="_blank">SNTP code</a>, under the BSD license, written by Adam Buckley</li>
     9<li>The rest is outright public domain, written by jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, and others.</li>
    1010</ul>
    1111
     
    1313
    1414<ul>
    15 <li class="tidylist"><a href="http://i2p-projekt.i2p/i2ptunnel" target="_blank">I2PTunnel</a> - a GPL'ed application written by mihi
     15<li><a href="http://i2p-projekt.i2p/i2ptunnel" target="_blank">I2PTunnel</a> - a GPL'ed application written by mihi
    1616that lets you tunnel normal TCP/IP traffic over I2P (such as the http proxy and the irc proxy), with a <a href="/i2ptunnelmgr">browser-based front end.</a></li>
    17 <li class="tidylist"><a href="/webmail">Susimail</a>, a GPL'ed browser based mail client written by susi23.</li>
    18 <li class="tidylist">The <a href="http://i2p-projekt.i2p/en/docs/naming#addressbook" target="_blank">addressbook application</a>,
     17<li><a href="/webmail">Susimail</a>, a GPL'ed browser based mail client written by susi23.</li>
     18<li>The <a href="http://i2p-projekt.i2p/en/docs/naming#addressbook" target="_blank">addressbook application</a>,
    1919written by Ragnarok helps maintain your hosts.txt files, with a <a href="/dns">front end</a> written by susi23.</li>
    20 <li class="tidylist">The <a href="http://i2p-projekt.i2p/en/docs/api/samv3" target="_blank">SAM</a> bridge by human (public domain), an API
     20<li>The <a href="http://i2p-projekt.i2p/en/docs/api/samv3" target="_blank">SAM</a> bridge by human (public domain), an API
    2121which other client applications (such the <a href="http://i2pwiki.i2p/index.php?title=Tahoe-LAFS" target="_blank">I2P Tahoe-LAFS cloud filesystem</a>) can use to interface with I2P.</li>
    22 <li class="tidylist"><a href="http://i2p-projekt.i2p/en/misc/jbigi" target="_blank">jbigi</a> - an optimized library for doing large number calculations which uses the
     22<li><a href="http://i2p-projekt.i2p/en/misc/jbigi" target="_blank">jbigi</a> - an optimized library for doing large number calculations which uses the
    2323LGPL licensed <a href="http://swox.com/gmp/" target="_blank">GMP</a> library, tuned for various PC architectures.</li>
    24 <li class="tidylist">Launchers for windows users are built with <a href="http://launch4j.sourceforge.net/" target="_blank">Launch4J</a>,
     24<li>Launchers for windows users are built with <a href="http://launch4j.sourceforge.net/" target="_blank">Launch4J</a>,
    2525and the installer is built with  <a href="http://www.izforge.com/izpack/" target="_blank">IzPack</a>.</li>
    26 <li class="tidylist">The <a href="/">I2P Router Console</a>, built from a streamlined <a href="http://jetty.mortbay.com/jetty/index.html" target="_blank">Jetty Web Server</a> instance
     26<li>The <a href="/">I2P Router Console</a>, built from a streamlined <a href="http://jetty.mortbay.com/jetty/index.html" target="_blank">Jetty Web Server</a> instance
    2727which allows you to deploy standard JSP/Servlet web applications in your router.</li>
    28 <li class="tidylist">Jetty makes use of Apache's <a href="https://docs.oracle.com/javaee/7/api/javax/servlet/package-summary.html" target="_blank">javax.servlet</a>
     28<li>Jetty makes use of Apache's <a href="https://docs.oracle.com/javaee/7/api/javax/servlet/package-summary.html" target="_blank">javax.servlet</a>
    2929(javax.servlet.jar) implementation. This product includes software developed by the <a href="http://www.apache.org/" target="_blank">Apache Software Foundation</a>.</li>
    30 <li class="tidylist">Source for the I2P code and most bundled client applications can be found on our <a href="http://i2p-projekt.i2p/download" target="_blank">download page</a>.</li>
     30<li>Source for the I2P code and most bundled client applications can be found on our <a href="http://i2p-projekt.i2p/download" target="_blank">download page</a>.</li>
    3131</ul>
    3232
  • apps/routerconsole/jsp/help-reachability.jsi

    r9ae9abd rbf42cc1  
    66</p>
    77<ul id="reachability">
    8   <li class="tidylist"><b><%=intl._t("OK")%>:</b>
     8  <li><b><%=intl._t("OK")%>:</b>
    99     <%=intl._t("Your UDP port does not appear to be firewalled.")%>
    1010  </li>
    11   <li class="tidylist"><b><%=intl._t("Firewalled")%>:</b>
     11  <li><b><%=intl._t("Firewalled")%>:</b>
    1212     <%=intl._t("Your UDP port appears to be firewalled.")%>&nbsp;
    1313     <%=intl._t("As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error.")%>&nbsp;
     
    1818     <%=intl._t("Also, some routers cannot correctly forward both TCP and UDP on a single port, or may have other limitations or bugs that prevent them from passing traffic through to I2P.")%>
    1919  </li>
    20   <li class="tidylist"><b><%=intl._t("Testing")%>:</b>
     20  <li><b><%=intl._t("Testing")%>:</b>
    2121     <%=intl._t("The router is currently testing whether your UDP port is firewalled.")%>
    2222  </li>
    23   <li class="tidylist"><b><%=intl._t("Hidden")%>:</b>
     23  <li><b><%=intl._t("Hidden")%>:</b>
    2424     <%=intl._t("The router is not configured to publish its address, therefore it does not expect incoming connections.")%>&nbsp;
    2525     <%=intl._t("Hidden mode is automatically enabled for added protection in certain countries.")%>
    2626  </li>
    27   <li class="tidylist"><b><%=intl._t("WARN - Firewalled and Fast")%>:</b>
     27  <li><b><%=intl._t("WARN - Firewalled and Fast")%>:</b>
    2828     <%=intl._t("You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled.")%>&nbsp;
    2929     <%=intl._t("While I2P will work fine in this configuration, if you really have over 128KBps of bandwidth to share, it will be much more helpful to the network if you open your firewall.")%>
    3030  </li>
    31   <li class="tidylist"><b><%=intl._t("WARN - Firewalled and Floodfill")%>:</b>
     31  <li><b><%=intl._t("WARN - Firewalled and Floodfill")%>:</b>
    3232     <%=intl._t("You have configured I2P to be a floodfill router, but you are firewalled.")%>&nbsp;
    3333     <%=intl._t("For best participation as a floodfill router, you should open your firewall.")%>
    3434  </li>
    35   <li class="tidylist"><b><%=intl._t("WARN - Firewalled with Inbound TCP Enabled")%>:</b>
     35  <li><b><%=intl._t("WARN - Firewalled with Inbound TCP Enabled")%>:</b>
    3636     <%=intl._t("You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well.")%>
    3737     <%=intl._t("If your TCP port is firewalled with inbound TCP enabled, routers will not be able to contact you via TCP, which will hurt the network.")%>
    3838     <%=intl._t("Please open your firewall or disable inbound TCP above.")%>
    3939  </li>
    40   <li class="tidylist"><b><%=intl._t("WARN - Firewalled with UDP Disabled")%>:</b>
     40  <li><b><%=intl._t("WARN - Firewalled with UDP Disabled")%>:</b>
    4141     <%=intl._t("You have configured inbound TCP, however you have disabled UDP.")%>&nbsp;
    4242     <%=intl._t("You appear to be firewalled on TCP, therefore your router cannot accept inbound connections.")%>&nbsp;
    4343     <%=intl._t("Please open your firewall or enable UDP.")%>
    4444  </li>
    45   <li class="tidylist"><b><%=intl._t("ERR - Clock Skew")%>:</b>
     45  <li><b><%=intl._t("ERR - Clock Skew")%>:</b>
    4646     <%=intl._t("Your system's clock is skewed, which will make it difficult to participate in the network.")%>&nbsp;
    4747     <%=intl._t("Correct your clock setting if this error persists.")%>
    4848  </li>
    49   <li class="tidylist"><b><%=intl._t("ERR - Private TCP Address")%>:</b>
     49  <li><b><%=intl._t("ERR - Private TCP Address")%>:</b>
    5050     <%=intl._t("You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address.")%>
    5151     <%=intl._t("Correct the address or disable inbound TCP on the Network Configuration page.")%>
    5252  </li>
    53   <li class="tidylist"><b><%=intl._t("ERR - SymmetricNAT")%>:</b>
     53  <li><b><%=intl._t("ERR - SymmetricNAT")%>:</b>
    5454     <%=intl._t("I2P detected that you are firewalled by a Symmetric NAT.")%>
    5555     <%=intl._t("I2P does not work well behind this type of firewall. You will probably not be able to accept inbound connections, which will limit your participation in the network.")%>
    5656  </li>
    57   <li class="tidylist"><b><%=intl._t("ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart")%>:</b>
     57  <li><b><%=intl._t("ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart")%>:</b>
    5858     <%=intl._t("I2P was unable to bind to the configured port noted on the advanced network configuration page .")%>&nbsp;
    5959     <%=intl._t("Check to see if another program is using the configured port. If so, stop that program or configure I2P to use a different port.")%>&nbsp;
     
    6161     <%=intl._t("However, a restart is always required after this error.")%>
    6262  </li>
    63   <li class="tidylist"><b><%=intl._t("ERR - UDP Disabled and Inbound TCP host/port not set")%>:</b>
     63  <li><b><%=intl._t("ERR - UDP Disabled and Inbound TCP host/port not set")%>:</b>
    6464     <%=intl._t("You have not configured inbound TCP with a hostname and port on the Network Configuration page, however you have disabled UDP.")%>&nbsp;
    6565     <%=intl._t("Therefore your router cannot accept inbound connections.")%>&nbsp;
    6666     <%=intl._t("Please configure a TCP host and port on the Network Configuration page or enable UDP.")%>
    6767  </li>
    68   <li class="tidylist"><b><%=intl._t("ERR - Client Manager I2CP Error - check logs")%>:</b>
     68  <li><b><%=intl._t("ERR - Client Manager I2CP Error - check logs")%>:</b>
    6969     <%=intl._t("This is usually due to a port 7654 conflict. Check the logs to verify.")%>&nbsp;
    7070     <%=intl._t("Do you have another I2P instance running? Stop the conflicting program and restart I2P.")%>
  • apps/routerconsole/jsp/help-sidebar.jsi

    r9ae9abd rbf42cc1  
    1 <h2>Summary Bar Information</h2><p>
    2 Many of the stats on the summary bar may be
    3 <a href="configstats.jsp">configured</a> to be
    4 <a href="graphs.jsp">graphed</a> for further analysis.
    5 </p><h3>General</h3><ul>
    6 <li class="tidylist"><b>Local Identity:</b>
    7 The first four characters (24 bits) of your 44-character (256-bit) Base64 router hash.
    8 The full hash is shown on your <a href="netdb.jsp?r=.">router info page</a>.
    9 Never reveal this to anyone, as your router info contains your IP.</li>
    10 <li class="tidylist"><b>Version:</b>
    11 The version of the I2P software you are running.</li>
     1<h2>Summary Bar Information</h2>
     2
     3<p>Many of the stats on the summary bar may be <a href="configstats">configured</a> to be <a href="graphs">graphed</a> for further analysis. You may also customize the sections that appear on the Summary Bar and their positioning on the <a href="configsidebar">Summary Bar Configuration page</a>.
     4</p>
     5
     6<h3>Router Info</h3>
     7
     8<ul>
     9<li>
     10<b>Local Identity:</b>
     11If you hover over the <i>Router Info</i> heading, your truncated router identity will be shown (the first four characters (24 bits) of your 44-character (256-bit) Base64 router hash). The full hash is shown on your <a href="netdb?r=.">Network Database entry</a>. Never reveal this to anyone, as your router identity is uniquely linked to your IP address in the network database.</li>
     12<li>
     13<b>Version:</b>
     14The version of the I2P software you are running. If a new version is available, you will be notified in the Summary Bar. It is recommended to keep your router up to date to ensure optimal performance and security. Router updates are usually made available on average every 2-3 months.
     15</li>
     16
     17<li>
     18<b>Clock Skew:</b>
     19The skew (offset) of your computer's clock relative to the network-synced time (if known). I2P requires your computer's time be accurate. If the skew is more than a few seconds, please correct the problem by adjusting your computer's time. If I2P cannot connect to the internet, a reading of 0ms may be indicated. <b>Note:</b> This is only displayed in the <i>Router Information (advanced)</i> section. You may add this section to your Summary Bar on the <a href="configsidebar">Summary Bar Configuration page</a>.
     20</li>
     21
     22<li>
     23<b>Memory:</b>
     24This indicates the amount of RAM I2P is using, and the total amount available, allocated by Java. The usage will likely vary considerably within a short timeframe, but if the usage is consistently high relative to the available RAM, this may indicate that you need to increase the ram allocated to the JVM. You can allocate more RAM by editing your <code>wrapper.config</code> file which is normally located in the I2P application directory. You will need to edit the <code>wrapper.java.maxmemory</code> parameter, which by default is set to 128(MB). <b>Note:</b> Memory usage is only displayed in the <i>Router Information (advanced)</i> section or on the <i>Memory Usage Bar</i>, both of which may be added to your Summary Bar on the <a href="configsidebar">Summary Bar Configuration page</a>.
     25</li>
     26
    1227<%
    13 /* <li class="tidylist"><b>Now:</b>
    14 The current time (UTC) and the skew, if any. I2P requires your computer's time be accurate.
    15 If the skew is more than a few seconds, please correct the problem by adjusting
    16 your computer's time.</li> */
     28/*
     29<li>
     30<b>Reachability:</b>
     31The router's view of whether it can be contacted by other routers. See <a href="#confignet">below</a> for more information.</li>
     32*/
    1733%>
    18 <li class="tidylist"><b>Reachability:</b>
    19 The router's view of whether it can be contacted by other routers.
    20 See <a href="#confignet">below</a> for more information.
    21 </li></ul><h3>Peers</h3><ul>
    22 <li class="tidylist"><b>Active:</b>
    23 The first number is the number of peers you've sent or received a message from in the last few minutes.
    24 This may range from 8-10 to several hundred, depending on your total bandwidth,
    25 shared bandwidth, and locally-generated traffic.
    26 The second number is the number of peers seen in the last hour or so.
    27 Do not be concerned if these numbers vary widely.
    28 <a href="configstats.jsp#router.activePeers">[Enable graphing]</a>.</li>
    29 <li class="tidylist"><b>Fast:</b>
    30 This is the number of peers you use for building client tunnels. It is generally in the
    31 range 8-30. Your fast peers are shown on the <a href="profiles.jsp">profiles page</a>.
    32 <a href="configstats.jsp#router.fastPeers">[Enable graphing]</a></li>
    33 <li class="tidylist"><b>High Capacity:</b>
    34 This is the number of peers you use for building some of your exploratory tunnels. It is generally in the
    35 range 8-75. The fast peers are included in the high capacity tier.
    36 Your high capacity peers are shown on the <a href="profiles.jsp">profiles page</a>.
    37 <a href="configstats.jsp#router.highCapacityPeers">[Enable graphing]</a></li>
    38 <li class="tidylist"><b>Well Integrated:</b>
    39 This is the number of peers you use for network database inquiries.
    40 These are usually the "floodfill" peers.
    41 Your well integrated peers are shown on the bottom of the <a href="profiles.jsp">profiles page</a>.</li>
    42 <li class="tidylist"><b>Known:</b>
    43 This is the total number of routers you know about.
    44 They are listed on the <a href="netdb.jsp">network database page</a>.
    45 This may range from under 100 to 1000 or more.
    46 This number is not the total size of the network;
    47 it may vary widely depending on your total bandwidth,
    48 shared bandwidth, and locally-generated traffic.
    49 I2P does not require a router to know every other router.</li>
    50 </ul><h3>Bandwidth in/out</h3>
    51 <p>Should be self-explanatory. All values are in bytes per second, not bits per second.
    52 Change your bandwidth limits on the <a href="config">configuration page</a>.
    53 Bandwidth is <a href="graphs.jsp">graphed</a> by default.</p>
    54 <h3>Local destinations</h3>
    55 <p>The local applications connecting through your router.
    56 These may be clients started through <a href="i2ptunnel/index.jsp">I2PTunnel</a>
    57 or external programs connecting through SAM, BOB, or directly to I2CP.</p>
    5834
    59 <h3>Tunnels in/out</h3>
    60 <p>The actual tunnels are shown on the <a href="tunnels.jsp">the tunnels page</a>.</p>
    61 <ul><li class="tidylist"><b>Exploratory:</b>
    62 Tunnels built by your router and used for communication with the floodfill peers,
    63 building new tunnels, and testing existing tunnels.</li>
    64 <li class="tidylist"><b>Client:</b>
    65 Tunnels built by your router for each client's use.</li>
    66 <li class="tidylist"><b>Participating:</b>
    67 Tunnels built by other routers through your router.
    68 This may vary widely depending on network demand, your
    69 shared bandwidth, and amount of locally-generated traffic.
    70 The recommended method for limiting participating tunnels is
    71 to change your share percentage on the <a href="config">configuration page</a>.
    72 You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on
    73 the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.</li>
    74 <li class="tidylist"><b>Share ratio:</b>
    75 The number of participating tunnels you route for others, divided by the total number of hops in
    76 all your exploratory and client tunnels.
    77 A number greater than 1.00 means you are contributing more tunnels to the network than you are using.</li>
     35</ul>
     36
     37<h3>Peers</h3>
     38
     39<ul>
     40<li>
     41<b>Active:</b> The first number is the number of peers your router has sent or received a message from in the last few minutes. This may range from 8-10 to several hundred, depending on your total bandwidth, shared bandwidth, and locally-generated traffic. The second number is the number of peers seen in the last hour or so. Do not be concerned if these numbers vary widely. <a href="configstats#router.activePeers">[Enable graphing]</a>.
     42</li>
     43<li>
     44<b>Fast:</b> This is the number of peers your router has available for building client tunnels. It is generally in the range 8-30. Your fast peers are shown on the <a href="profiles">Profiles page</a>. <a href="configstats#router.fastPeers">[Enable graphing]</a>
     45</li>
     46<li><b>High Capacity:</b>
     47This is the number of peers your router has available for building your exploratory tunnels which are used to determine network performance. It is generally in the range 8-75. The fast peers are included in the high capacity tier.Your high capacity peers are shown on the <a href="profiles">Profiles page</a>. <a href="configstats#router.highCapacityPeers">[Enable graphing]</a>
     48</li>
     49<li>
     50<b>Integrated:</b> This is the number of peers your router will use for network database inquiries. These are usually the "floodfill" routers which are responsible for maintaining network integrity. Your well integrated peers are shown on the bottom of the <a href="profiles">Profiles page</a>.
     51</li>
     52<li>
     53<b>Known:</b> This is the total number of peers that are known by your router. They are listed on the <a href="netdb">Network Database page</a>. This may range from under 100 to 1000 or more. This number is not the total size of the network; it may vary widely depending on your total bandwidth, shared bandwidth, and locally-generated traffic. I2P does not require a router to know every other router in the network.
     54</li>
     55</ul>
     56
     57<h3>Bandwidth In/Out</h3>
     58
     59<p> This section indicates your average bandwidth speeds and total usage for the session. All values are in bytes per second, not bits per second. You may change your bandwidth limits on the <a href="config">Bandwidth Configuration page</a>. The more bandwidth you make available, the more you help the network and improve your own anonymity, so please take the time to review the settings. If you are unsure of your network's speed, using a service such as <a href="http://speedtest.net/">SpeedTest</a> or similar will give you a good indication of your bandwidth capability. Your upstream share amount (KBps Out) will determine your overall contribution to the network. Bandwidth is <a href="graphs">graphed</a> by default.</p>
     60
     61<h3>Local Destinations</h3>
     62
     63<p>These are the local services provided by your router. They may be clients started through the <a href="i2ptunnelmgr">Tunnel Manager</a> or external programs connecting through SAM, BOB, or directly to I2CP. By default, most of your client services (mail, http proxy, IRC) will share the same set of tunnels (for performance reasons) and be listed as <i>Shared Clients</i> and <i>Shared Clients(DSA)</i>. However, if you experience a tunnel failure, all your services will go offline at the same time, so in some scenarios you may wish to configure client services to use their own set of tunnels. This can be done by unchecking the <i>Share tunnels with other clients&hellip;</i> option listed under <i>Shared Clients</i> on the configuration page of the relevant client service in the Tunnel Manager, after which you will need to restart the client service from the <a href="i2ptunnelmgr">main Tunnel Manager page</a>.</p>
     64
     65<h3>Tunnels</h3>
     66
     67<p>The actual tunnels are shown on the <a href="tunnels">Tunnels page</a>.</p>
     68
     69<ul>
     70<li>
     71<b>Exploratory:</b> Tunnels built by your router and used for communication with the floodfill peers, building new tunnels, and testing existing tunnels.
     72</li>
     73<li>
     74<b>Client:</b> Tunnels built by your router for each client's use.
     75</li>
     76<li>
     77<b>Participating:</b> Tunnels built by other routers through your router. This may vary widely depending on network demand, your shared bandwidth, and amount of locally-generated traffic. The recommended method for limiting participating tunnels is to change your share percentage on the <a  href="config">Bandwidth Configuration page</a>. You may also limit the total number by setting <code>router.maxParticipatingTunnels=nnn</code> on the <a href="configadvanced">Advanced configuration page</a>. <a href="configstats#tunnel.participatingTunnels">[Enable graphing]</a>.
     78</li>
     79<li>
     80<b>Share Ratio:</b> The number of participating tunnels you route for others, divided by the total number of hops in all your exploratory and client tunnels. A number greater than 1.00 means you are contributing more tunnels to the network than you are using.
     81</li>
    7882</ul>
    7983
    8084<h3>Congestion</h3>
    81 <p>Some basic indications of router overload:</p><ul>
    82 <li class="tidylist"><b>Job lag:</b>
    83 How long jobs are waiting before execution. The job queue is listed on the <a href="jobs.jsp">jobs page</a>.
    84 Unfortunately, there are several other job queues in the router that may be congested,
    85 and their status is not available in the router console.
    86 The job lag should generally be zero.
    87 If it is consistently higher than 500ms, your computer is very slow, or the
    88 router has serious problems.
    89 <a href="configstats.jsp#jobQueue.jobLag">[Enable graphing]</a>.</li>
    90 <li class="tidylist"><b>Message delay:</b>
    91 How long an outbound message waits in the queue.
    92 This should generally be a few hundred milliseconds or less.
    93 If it is consistently higher than 1000ms, your computer is very slow,
    94 or you should adjust your bandwidth limits, or your (bittorrent?) clients
    95 may be sending too much data and should have their transmit bandwidth limit reduced.
    96 <a href="configstats.jsp#transport.sendProcessingTime">[Enable graphing]</a> (transport.sendProcessingTime).</li>
    97 <li class="tidylist"><b>Tunnel lag:</b>
    98 This is the round trip time for a tunnel test, which sends a single message
    99 out a client tunnel and in an exploratory tunnel, or vice versa.
    100 It should usually be less than 5 seconds.
    101 If it is consistently higher than that, your computer is very slow,
    102 or you should adjust your bandwidth limits, or there are network problems.
    103 <a href="configstats.jsp#tunnel.testSuccessTime">[Enable graphing]</a> (tunnel.testSuccessTime).</li>
    104 <li class="tidylist"><b>Handle backlog:</b>
    105 This is the number of pending requests from other routers to build a
    106 participating tunnel through your router.
    107 It should usually be close to zero.
    108 If it is consistently high, your computer is too slow,
    109 and you should reduce your share bandwidth limits.</li>
    110 <li class="tidylist"><b>Accepting/Rejecting:</b>
    111 Your router's status on accepting or rejecting
    112 requests from other routers to build a
    113 participating tunnel through your router.
    114 Your router may accept all requests, accept or reject a percentage of requests,
    115 or reject all requests for a number of reasons, to control
    116 the bandwidth and CPU demands and maintain capacity for
    117 local clients.</li></ul>
     85<p><b>Note:</b> This section is not enabled by default. You may enable it on the <a href="configsidebar">Summary Bar Configuration page</a>.</p>
     86<p>Some basic indications of router overload:</p>
     87
     88<ul>
     89<li>
     90<b>Job Lag:</b> How long jobs are waiting before execution. The job queue is listed on the <a href="jobs">Jobs page</a>. Unfortunately, there are several other job queues in the router that may be congested, and their status is not available in the router console. The job lag should generally be zero. If it is consistently higher than 500ms, your computer is very slow, your network is experiencing connectivity issues, or the router has serious problems. <a href="configstats#jobQueue.jobLag">[Enable graphing]</a>.
     91</li>
     92<li>
     93<b>Message Delay:</b> How long an outbound message waits in the queue. This should generally be a few hundred milliseconds or less. If it is consistently higher than 1000ms, your computer is very slow, or you should adjust your bandwidth limits, or your (Bittorrent?) clients may be sending too much data and should have their transmit bandwidth limit reduced. <a href="configstats#transport.sendProcessingTime">[Enable graphing]</a> (transport.sendProcessingTime).
     94</li>
     95
     96<%
     97/*
     98<li>
     99<b>Tunnel lag:</b> This is the round trip time for a tunnel test, which sends a single message out a client tunnel and in an exploratory tunnel, or vice versa. It should usually be less than 5 seconds. If it is consistently higher than that, your computer is very slow, or you should adjust your bandwidth limits, or there are network problems. Problems may be indicated on the <a href="logs">Logs page</a>. <a href="configstats#tunnel.testSuccessTime">[Enable graphing]</a> (tunnel.testSuccessTime).
     100</li>
     101
     102<li>
     103<b>Handle backlog:</b> This is the number of pending requests from other routers to build a participating tunnel through your router. It should usually be close to zero. If it is consistently high, your computer is too slow, and you should reduce your share bandwidth limits.</li>
     104*/
     105%>
     106
     107<li>
     108<b>Accepting/Rejecting:</b> Your router's status on accepting or rejecting requests from other routers to build a participating tunnel through your router. Your router may accept all requests, accept or reject a percentage of requests, or reject all requests for a number of reasons, to control the bandwidth and CPU demands and maintain capacity for local clients. <b>Note:</b> It will take at least 10 minutes from your router starting for it to accept building participating tunnels in order to ensure your router is stable and successfully bootstrapped to the network.
     109</li>
     110</ul>
     111
  • apps/routerconsole/jsp/help.jsi

    r9ae9abd rbf42cc1  
    33<p>Further assistance is available here:</p>
    44<ul class="links">
    5 <li class="tidylist"><a href="http://i2p-projekt.i2p/en/faq" target="_blank">FAQ on i2p-projekt.i2p</a></li>
    6 <li class="tidylist"><a href="http://i2pwiki.i2p/" target="_blank">I2PWiki</a></li>
     5<li><a href="http://i2p-projekt.i2p/en/faq" target="_blank">FAQ on i2p-projekt.i2p</a></li>
     6<li><a href="http://i2pwiki.i2p/" target="_blank">I2PWiki</a></li>
    77</ul>
    88<p>You may also try <a href="http://zzz.i2p/" target="_blank">zzz's developer forum</a>,
  • apps/routerconsole/jsp/help_ar.jsp

    r9ae9abd rbf42cc1  
    4343<a href="graphs.jsp">رسم بياني</a> للمزيد من التحاليل
    4444</p><h3>عام</h3><ul>
    45 <li class="tidylist"><b>:هوية</b>
     45<li><b>:هوية</b>
    4646الحروف الأولى (24 bits) من 44-حرف (256-) Base64 hash.
    4747The full hash is shown on your <a href="netdb.jsp?r=.">صفحة معلومات الموجه</a>.
    4848هذا لا يكشف عن عنوان  IP الخاص بك لأحد.</li>
    49 <li class="tidylist"><b>الاصدار</b>
     49<li><b>الاصدار</b>
    5050اصدار I2P المستعمل</li>
    51 <li class="tidylist"><b>الآن</b>
     51<li><b>الآن</b>
    5252الوقت الحالي (UTC)والانحراف الممكن. يحتاج I2P الى ساعة مضبوطة. اذا كان انحراف الساعة اكثر من بضع ثواني، قم بتصحيح الخلل.</li>
    53 <li class="tidylist"><b>إمكانية الوصول</b>
     53<li><b>إمكانية الوصول</b>
    5454امكانية الاتصال الخارجي بالموجه
    5555المزيد من التفاصيل في  <a href="confignet#help">صفحة الاعدادات</a>.</li>
    5656</ul><h3>النظائر</h3><ul>
    57 <li class="tidylist"><b>مفعل</b>
     57<li><b>مفعل</b>
    5858هذا هو عدد النظائر التي تم إرسال أو تلقيها رسالة  في الدقائق القليلة الماضية.
    5959قد يكون هذا النطاق 8-10 الى عدة مئات، اعتمادا على عرض النطاق الترددي الإجمالي ،
     
    6262لا تشعر بالقلق إذا كانت هذه الأرقام تختلف على نطاق واسع.
    6363<a href="configstats.jsp#router.activePeers">[تفعيل الرسم البياني]</a>.</li>
    64 <li class="tidylist"><b>سريع</b>
     64<li><b>سريع</b>
    6565هذا هو عدد النظائر التي تستعملها لانشاء أنفاق جديدة. هي في نطاق 8-30. النظائر السريعة في
    6666 <a href="profiles.jsp">صفحة البروفايل</a>.
    6767 <a href="configstats.jsp#router.fastPeers">[تفعيل الرسم البياني]</a>.</li>
    68 <li class="tidylist"><b>قدرة عالية</b>
     68<li><b>قدرة عالية</b>
    6969هذا هو عدد النظائر التي تستعملها لانشاء أنفاق الاكتشاف. هي في نطاق 8-75. النظائر السريعة. النظائر القدرة عالية تظهر هنا.
    7070 <a href="profiles.jsp">صفحة البروفايل</a>.
    7171 <a href="configstats.jsp#router.highCapacityPeers">[تفعيل الرسم البياني]</a>.</li>
    72 <li class="tidylist"><b>المندمجة جيدا</b>
     72<li><b>المندمجة جيدا</b>
    7373هذا هو عدد النظائر المستعملة في الاتصال بقاعدة البيانات. النظائر المندمجة جيدا موجودة في أسفل
    7474<a href="profiles.jsp">صفحة البروفايل</a>.</li>
    75 <li class="tidylist"><b>المعروفة</b>
     75<li><b>المعروفة</b>
    7676هذا هو عدد الموجهات المعروفة.
    7777والظاهرة في صفحة <a href="netdb.jsp">قاعدة البيانات</a>
     
    9090<h3>الأنفاق الداخلة/خارجة</h3>
    9191<p>الأنفاق الحالية موجودة في <a href="tunnels.jsp">صفحة الأنفاق</a>.</p><ul>
    92 <li class="tidylist"><b>تصفح</b>
     92<li><b>تصفح</b>
    9393الأنفاق المستخدمة من طرف الموجه تستعمل في الاتصال مع النظائر، انشاء انفاق جديدة.
    9494</li>
    95 <li class="tidylist"><b>المستخدمين</b>
     95<li><b>المستخدمين</b>
    9696الأنفاق المستخدمة من طرف الموجه </li>
    97 <li class="tidylist"><b>المشاركة</b>
     97<li><b>المشاركة</b>
    9898الأنفاق المنشئة من طرف موجهات أخرى عبر موجهك.
    9999هذا ينبني على درجة استخدام الشبكة، مقدار المشاركة...
     
    101101You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on
    102102the <a href="configadvanced.jsp">صفحة الاعدادات المتقدمة</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[تفعيل الرسم البياني]</a>.</li>
    103 <li class="tidylist"><b>نسبة المشاركة</b>
     103<li><b>نسبة المشاركة</b>
    104104عدد الانفاق المشاركة، مقسوما على عدد اجمالي الانفاق.
    105105عدد أكبر من 1.00 يعني انك تساهم في الشبكة بعدد اكبر مما تستهلك.</li>
     
    109109<p>بعض مشرات ازدحام الموجه</p>
    110110<ul>
    111 <li class="tidylist"><b>Job lag:</b>
     111<li><b>Job lag:</b>
    112112How long jobs are waiting before execution. The job queue is listed on the <a href="jobs.jsp">jobs page</a>.
    113113Unfortunately, there are several other job queues in the router that may be congested,
     
    117117router has serious problems.
    118118<a href="configstats.jsp#jobQueue.jobLag">[تفعيل الرسم البياني]</a>.</li>
    119 <li class="tidylist"><b>Message delay:</b>
     119<li><b>Message delay:</b>
    120120How long an outbound message waits in the queue.
    121121This should generally be a few hundred milliseconds or less.
     
    124124may be sending too much data and should have their transmit bandwidth limit reduced.
    125125<a href="configstats.jsp#transport.sendProcessingTime">[تفعيل الرسم البياني]</a> (transport.sendProcessingTime).</li>
    126 <li class="tidylist"><b>Tunnel lag:</b>
     126<li><b>Tunnel lag:</b>
    127127This is the round trip time for a tunnel test, which sends a single message
    128128out a client tunnel and in an exploratory tunnel, or vice versa.
     
    131131or you should adjust your bandwidth limits, or there are network problems.
    132132<a href="configstats.jsp#tunnel.testSuccessTime">[تفعيل الرسم البياني]</a> (tunnel.testSuccessTime).</li>
    133 <li class="tidylist"><b>Handle backlog:</b>
     133<li><b>Handle backlog:</b>
    134134This is the number of pending requests from other routers to build a
    135135participating tunnel through your router.
     
    137137If it is consistently high, your computer is too slow,
    138138and you should reduce your share bandwidth limits.</li>
    139 <li class="tidylist"><b>Accepting/Rejecting:</b>
     139<li><b>Accepting/Rejecting:</b>
    140140Your router's status on accepting or rejecting
    141141requests from other routers to build a
     
    156156<h2>Legal stuff</h2><p>The I2P router (router.jar) and SDK (i2p.jar) are almost entirely public domain, with
    157157a few notable exceptions:</p><ul>
    158 <li class="tidylist">ElGamal and DSA code, under the BSD license, written by TheCrypto</li>
    159 <li class="tidylist">SHA256 and HMAC-SHA256, under the MIT license, written by the Legion of the Bouncycastle</li>
    160 <li class="tidylist">AES code, under the Cryptix (MIT) license, written by the Cryptix team</li>
    161 <li class="tidylist">SNTP code, under the BSD license, written by Adam Buckley</li>
    162 <li class="tidylist">The rest is outright public domain, written by jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, and others.</li>
     158<li>ElGamal and DSA code, under the BSD license, written by TheCrypto</li>
     159<li>SHA256 and HMAC-SHA256, under the MIT license, written by the Legion of the Bouncycastle</li>
     160<li>AES code, under the Cryptix (MIT) license, written by the Cryptix team</li>
     161<li>SNTP code, under the BSD license, written by Adam Buckley</li>
     162<li>The rest is outright public domain, written by jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, and others.</li>
    163163</ul>
    164164
  • apps/routerconsole/jsp/help_fr.jsp

    r9ae9abd rbf42cc1  
    3434</p>D'autres détails sont disponibles ici:
    3535<ul class="links">
    36 <li class="tidylist"><a href="http://i2p-projekt.i2p/en/faq">FAQ en anglais sur i2p-projekt.i2p</a></li>
    37 <li class="tidylist"><a href="http://i2p-projekt.i2p/fr/faq">les FAQ en français</a>.</li>
     36<li><a href="http://i2p-projekt.i2p/en/faq">FAQ en anglais sur i2p-projekt.i2p</a></li>
     37<li><a href="http://i2p-projekt.i2p/fr/faq">les FAQ en français</a>.</li>
    3838</ul><br>
    3939</div>
     
    4545analyse sur la durée.
    4646</p><h3>GÉNÉRAL</h3><ul>
    47 <li class="tidylist"><b>Identité locale:</b>
     47<li><b>Identité locale:</b>
    4848Cliquez sur "Afficher" pour voir l'empreinte Base64 à 44 caractères (256 bits) de votre routeur. Le hachage
    4949complet est affiché sur votre <a href="netdb.jsp?r=.">page d'infos routeur</a>. Ne la divulguez jamais à personne,
    5050car l'info routeur contient votre adresse IP.</li>
    51 <li class="tidylist"><b>Version:</b>
     51<li><b>Version:</b>
    5252La version d'I2P qui vous affiche actuellement cette page.</li>
    53 <li class="tidylist"><b>Lancé depuis:</b>
     53<li><b>Lancé depuis:</b>
    5454Indique depuis combien de temps le routeur tourne.</li>
    55 <li class="tidylist"><b>Réseau:</b>
     55<li><b>Réseau:</b>
    5656Statut de joignabilité du routeur par les autres routeurs.
    5757Plus d'infos sur la page de <a href="confignet#help">configuration</a>.
    5858</li></ul><h3>Pairs</h3><ul>
    59 <li class="tidylist"><b>Actifs:</b>
     59<li><b>Actifs:</b>
    6060le premier nombre est celui des routeurs avec qui le votre a communiqué dans les dernières minutes. Ça peut varier de
    61618-10 à plusieurs centaines, selon votre bande passante et son rapport de partage, et le trafic généré localement. Le
    6262second est celui des pairs vus dans les dernières heures. Ces nombres penvent varier sensiblement sans conséquence.
    6363<a href="configstats.jsp#router.activePeers">[Activer le graphique]</a></li>
    64 <li class="tidylist"><b>Rapides:</b>
     64<li><b>Rapides:</b>
    6565le nombre de pairs que vous mettez à contribution pour construire vos tunnels clients. En général dans une tranche de
    66668 à 30. Vos pairs rapides sont détaillés sur la page <a href="profiles.jsp">profils</a>.
    6767<a href="configstats.jsp#router.fastPeers">[Activer le graphique]</a>.</li>
    68 <li class="tidylist"><b>Hautes capacités:</b>
     68<li><b>Hautes capacités:</b>
    6969nombre des pairs que vous utilisez pour construire quelques uns de vos tunnels exploratoires. Habituellement de 8 à 75.
    7070Les pairs rapides font partie du groupe des "Hautes capacités". Vos pairs à hautes capacités sont aussi listés sur
    7171la page <a href="profiles.jsp">profils</a>.
    7272<a href="configstats.jsp#router.highCapacityPeers">[Activer le graphique]</a></li>
    73 <li class="tidylist"><b>Bien intégrés:</b>
     73<li><b>Bien intégrés:</b>
    7474vous utilisez ce groupe pour vos requêtes à la base de données du réseau. Ils sont souvent des pairs de remplissage par
    7575diffusion ("floodfill"). Vos pairs "bien intégrés" sont affichés en bas de la même page
    7676<a href="profiles.jsp">profils</a>.</li>
    77 <li class="tidylist"><b>Connus:</b> c'est tous les routeurs dont vous connaissez l'existance. Il sont listés sur la
     77<li><b>Connus:</b> c'est tous les routeurs dont vous connaissez l'existance. Il sont listés sur la
    7878page <a href="netdb.jsp">base de données du réseau</a>. De moins de 100 à 1000 ou plus. Ce nombre ne représente pas la
    7979taille totale du réseau; il varie en fonction de votre bande passante totale et son rapport de partage, et du trafic
     
    9191<p>Les tunnels actuels sont affichés sur la page <a href="tunnels.jsp">tunnels</a>.</p>
    9292<ul>
    93 <li class="tidylist"><b>Exploratoires:</b> tunnels créés par votre routeur et utilisés avec les
     93<li><b>Exploratoires:</b> tunnels créés par votre routeur et utilisés avec les
    9494pairs diffuseurs pour la création des nouveaux tunnels et le test des tunnels existants.</li>
    95 <li class="tidylist"><b>Clients:</b> tunnels créés par votre routeur pour chaque utilisation cliente.</li>
    96 <li class="tidylist"><b>Participants:</b> les tunnels créés par d'autres routeurs et qui passent par le votre. Leur
     95<li><b>Clients:</b> tunnels créés par votre routeur pour chaque utilisation cliente.</li>
     96<li><b>Participants:</b> les tunnels créés par d'autres routeurs et qui passent par le votre. Leur
    9797nombre dépend largement de la demande du réseau, de votre part de bande passante partagée, et du trafic local.
    9898La méthode recommandée pour limiter leur nombre est de diminuer le rapport de bande passante partagée dans la
     
    100100<tt>router.maxParticipatingTunnels=nnn</tt> dans la <a href="configadvanced.jsp">configuration avancée</a>.
    101101<a href="configstats.jsp#tunnel.participatingTunnels">[Activer le graphique]</a>.</li>
    102 <li class="tidylist"><b>Rapport de partage:</b> le nombre de tunnels participants que vous routez pour les autres,
     102<li><b>Rapport de partage:</b> le nombre de tunnels participants que vous routez pour les autres,
    103103divisé par le nombre total de sauts dans tous vos tunnels exploratoires et clients. S'il est supérieur à 1, cela
    104104signifie que vous contribuez à plus de tunnels que vous n'en utilisez.
     
    109109<p>Indications de base sur la charge du routeur:</p>
    110110<ul>
    111 <li class="tidylist"><b>Retard de tâches:</b> temps d'attente des tâches avant exécution. La file d'attente est
     111<li><b>Retard de tâches:</b> temps d'attente des tâches avant exécution. La file d'attente est
    112112présentée la pages des <a href="jobs.jsp">tâches</a>. Malheureusement, il y a dans le routeur plusieurs autres files
    113113d'attentes qui ne peuvent être affichées dans la console. Le retard de tâches devrait rester à zéro en permamence. s'il
    114114régulièrement supérieur à 500ms, soit votre PC est très lent, soit le routeur a de sérieux problèmes.
    115115<a href="configstats.jsp#jobQueue.jobLag">[Activer le graphique]</a>.</li>
    116 <li class="tidylist"><b>Retard de messages:</b> temps de rétention des messages en file d'attente d'envois, normalement
     116<li><b>Retard de messages:</b> temps de rétention des messages en file d'attente d'envois, normalement
    117117quelques centaines de ms ou moins. Au dessus d'une seconde, votre PC est très lent, vous devriez fignoler vos réglages
    118118de bande passante, ou vos clients (bittorrent, iMule...?) envoient trop de données et il faudrait voir à leur tenir
    119119la bride. <a href="configstats.jsp#transport.sendProcessingTime">[Activer le graphique]</a>
    120120(transport.sendProcessingTime).</li>
    121 <li class="tidylist"><b>Retard de tunnels:</b> le temps d'aller-retour pour un test de tunnel (envoi d'un seul message
     121<li><b>Retard de tunnels:</b> le temps d'aller-retour pour un test de tunnel (envoi d'un seul message
    122122par un tunnel client et dans un tunnel exploratoire ou vice versa. Normalement inférieur à 5s. Si c'est constamment
    123123supérieur, votre PC est très lent, vous devriez retoucher vos limites de bande passante, ou il y a un problème réseau.
    124124<a href="configstats.jsp#tunnel.testSuccessTime">[Activer le graphique]</a> (tunnel.testSuccessTime).</li>
    125 <li class="tidylist"><b>En attente:</b> nombre de requêtes de création de tunnels participants en attente provenant
     125<li><b>En attente:</b> nombre de requêtes de création de tunnels participants en attente provenant
    126126d'autres routeurs. Normalement proche de zéro. Sinon, votre ordinateur est trop lent et vous devriez diminuer votre
    127127limite de bande passante partagée.</li>
    128 <li class="tidylist"><b>Accepte/Refuse:</b> c'est le statut de votre routeur au regard de son comportement vis à vis
     128<li><b>Accepte/Refuse:</b> c'est le statut de votre routeur au regard de son comportement vis à vis
    129129des demandes de création de tunnels participants provenant d'autres routeurs. Votre routeur peut accepter ou refuser
    130130tout ou partie des requêtes, ou les refuser en totalité pour des raisons prévues telles que le contrôle de la bande
     
    140140<h2>Informations légales</h2><p>Le routeur I2P (router.jar) et le SDK (i2p.jar) sont presque entièrement dans le
    141141domaine public, à quelques notobles exceptions près:</p><ul>
    142 <li class="tidylist">Le code ElGamal et DSA, sous licence BSD, écrits par TheCrypto</li>
    143 <li class="tidylist">SHA256 et HMAC-SHA256, sous licence MIT, écrits par the Legion of the Bouncycastle</li>
    144 <li class="tidylist">Le code AES, sous licence Cryptix (MIT), écrit pas l'équipe the Cryptix</li>
    145 <li class="tidylist">Le code SNTP, sous licence BSD, écrit par Adam Buckley</li>
    146 <li class="tidylist">Le reste, directement issu du domaine public, est écrit par jrandom, mihi, hypercubus, oOo,
     142<li>Le code ElGamal et DSA, sous licence BSD, écrits par TheCrypto</li>
     143<li>SHA256 et HMAC-SHA256, sous licence MIT, écrits par the Legion of the Bouncycastle</li>
     144<li>Le code AES, sous licence Cryptix (MIT), écrit pas l'équipe the Cryptix</li>
     145<li>Le code SNTP, sous licence BSD, écrit par Adam Buckley</li>
     146<li>Le reste, directement issu du domaine public, est écrit par jrandom, mihi, hypercubus, oOo,
    147147    ugha, duck, shendaras, et d'autres.</li>
    148148</ul>
  • apps/routerconsole/jsp/help_nl.jsp

    r9ae9abd rbf42cc1  
    3434</p><p>Verdere ondersteuning is hier beschikbaar:</p>
    3535<ul class="links">
    36 <li class="tidylist"><a href="http://i2p-projekt.i2p/nl/faq">FAQ op i2p-projekt.i2p</a></li>
     36<li><a href="http://i2p-projekt.i2p/nl/faq">FAQ op i2p-projekt.i2p</a></li>
    3737</ul><br>
    3838</div>
     
    4646
    4747<h3>Algemeen</h3><ul>
    48 <li class="tidylist"><b>Lokale Identiteit:</b>
     48<li><b>Lokale Identiteit:</b>
    4949De eerste vier karakters (24 bits) van je 44-karakter (256-bit) Base64 router hash.
    5050De volledige hash is getoond op je <a href="netdb.jsp?r=.">router info pagina</a>.
    5151Vertel deze aan niemand, want de router info bevat je IP.</li>
    52 <li class="tidylist"><b>Versie:</b>
     52<li><b>Versie:</b>
    5353De versie van de I2P software die je nu gebruikt.</li>
    54 <li class="tidylist"><b>Uptime:</b>
     54<li><b>Uptime:</b>
    5555Hoe lang je I2P router al draait.</li>
    56 <li class="tidylist"><b>Netwerk Bereikbaarheid:</b>
     56<li><b>Netwerk Bereikbaarheid:</b>
    5757De bereikbaarheid van je router door andere routers.
    5858Meer informatie is te vinden op de <a href="confignet#help">configuratie pagina</a>.</li>
     
    6060
    6161<h3>Peers</h3><ul>
    62 <li class="tidylist"><b>Actief:</b>
     62<li><b>Actief:</b>
    6363Het eerste nummer is het aantal peers waar je in de laatste paar minuten
    6464berichten naar verzonden of van ontvangen hebt.  Dit kan vari&euml;ren van 8-10 tot
     
    6969
    7070<a href="configstats.jsp#router.activePeers">[Grafieken inschakelen]</a>.</li>
    71 <li class="tidylist"><b>Snel:</b>
     71<li><b>Snel:</b>
    7272Dit is het aantal peers dat je gebruikt om client tunnels mee te bouwen. Het ligt over
    7373het algemeen tussen 8 en 30.
    7474Je snelle peers worden getoond op de <a href="profiles.jsp">profielen pagina</a>.
    7575<a href="configstats.jsp#router.fastPeers">[Grafieken inschakelen]</a>.</li>
    76 <li class="tidylist"><b>Grote capaciteit:</b>
     76<li><b>Grote capaciteit:</b>
    7777Dit is het aantal peers dat je gebruikt om sommige van de onderzoekende tunnels mee te maken.
    7878Het ligt over het algemeen tussen de 8 en 75. De snelle peers zijn inbegrepen in de categorie grote capaciteit.
    7979De grote capaciteits peers worden getoond op de <a href="profiles.jsp">profielen pagina</a>.
    8080<a href="configstats.jsp#router.highCapacityPeers">[Grafieken inschakelen]</a>.</li>
    81 <li class="tidylist"><b>Ge&iuml;ntegreerd:</b>
     81<li><b>Ge&iuml;ntegreerd:</b>
    8282Dit is het aantal peers dat je gebruikt bij het opzoeken in de network database.
    8383Dit zijn gebruikelijk de "floodfill" peers.
    8484Je goed ge&iuml;ntegreerde peers worden getoond aan de onderkant van de <a href="profiles.jsp">profielen pagina</a>.</li>
    85 <li class="tidylist"><b>Bekend:</b>
     85<li><b>Bekend:</b>
    8686Dit is het aantal routers dat bekend is bij je router.
    8787Ze worden getoond op de <a href="netdb.jsp">netwerk database pagina</a>.
     
    101101<p>De tunnels zelf worden getoond op de <a href="tunnels.jsp">tunnels pagina</a>.</p>
    102102<ul>
    103 <li class="tidylist"><b>Onderzoekend:</b>
     103<li><b>Onderzoekend:</b>
    104104Tunnels gebouwd door je router en gebruikt om te communiceren met de floodfill peers,
    105105voor het bouwen van nieuwe tunnels en testen van bestaande tunnels.</li>
    106 <li class="tidylist"><b>Client:</b>
     106<li><b>Client:</b>
    107107Tunnels gebouwd door je router voor het gebruik door elke client.</li>
    108 <li class="tidylist"><b>Deelnemend:</b>
     108<li><b>Deelnemend:</b>
    109109Tunnels gebouwd door andere routers die door je eigen router heen lopen.
    110110Dit kan erg vari&euml;ren afhankelijk van de vraag vanuit het netwerk,
     
    114114Je kan het totale aantal ook beperken met de instelling <tt>router.maxParticipatingTunnels=nnn</tt> op
    115115de <a href="configadvanced.jsp">geavanceerde configuratie pagina</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Grafieken inschakelen]</a>.</li>
    116 <li class="tidylist"><b>Share rato:</b>
     116<li><b>Share rato:</b>
    117117Het aantal deelnemende tunnels dat je voor andere routeert, gedeeld door het totale aantal hops in al je onderzoekende en client tunnels.
    118118Een aantal groter dan 1.00 betekent dat je meer tunnels aan het netwerk bijdraagt dan je gebruikt.
     
    123123<p>Een aantal basis indicatoren voor een router overbelasting:</p>
    124124<ul>
    125 <li class="tidylist"><b>Taak vertraging:</b>
     125<li><b>Taak vertraging:</b>
    126126Hoe lang taken moeten wachten voordat ze uitgevoerd worden. De taak wachtrij wordt getoond op de <a href="jobs.jsp">taken pagina</a>.
    127127Helaas zijn er ook verschillende andere taak wachtrijen in de router die verstopt kunnen raken,
     
    131131heeft de router een serieus probleem.
    132132<a href="configstats.jsp#jobQueue.jobLag">[Grafieken inschakelen]</a>.</li>
    133 <li class="tidylist"><b>Bericht vertraging:</b>
     133<li><b>Bericht vertraging:</b>
    134134Hoe lang een uitgaand bericht wacht in de wachtrij.
    135135Dit zou over het algemeen een aantal honderd milliseconden of minder moeten zijn.
     
    138138versturen mogelijk teveel data en moeten hun transmissie bandbreedte beperkt hebben.
    139139<a href="configstats.jsp#transport.sendProcessingTime">[Grafieken inschakelen]</a> (transport.sendProcessingTime).</li>
    140 <li class="tidylist"><b>Tunnel vertraging:</b>
     140<li><b>Tunnel vertraging:</b>
    141141Dit is de rondgangstijd voor een tunnel test, welke een enkel bericht verstuurt
    142142vanuit een client tunnel dat dan bij een onderzoekende tunnel naar binnen gaat, of omgekeerd.
     
    145145moet je je bandbreedte instellingen aanpassen of zijn er netwerk problemen.
    146146<a href="configstats.jsp#tunnel.testSuccessTime">[Grafieken inschakelen]</a> (tunnel.testSuccessTime).</li>
    147 <li class="tidylist"><b>Achterstand:</b>
     147<li><b>Achterstand:</b>
    148148Dit is het aantal wachtende aanvragen van andere routers om een deelnemende
    149149tunnel door je eigen router te bouwen.
     
    151151Indien dit consequent hoog is, dan is of je computer te traag of
    152152moet je je bandbreedte instellingen aanpassen.</li>
    153 <li class="tidylist"><b>Accepteren / Weigeren:</b>
     153<li><b>Accepteren / Weigeren:</b>
    154154De status van de router voor het accepteren of weigeren
    155155van verzoeken van andere routers om een deelnemende tunnel door je router te bouwen.
     
    173173<p>De I2P router (router.jar) en SDK (i2p.jar) zijn bijna geheel in het publieke domein, met een aantal noemenswaardige uitzonderingen:</p>
    174174<ul>
    175 <li class="tidylist">ElGamal en DSA code, valt onder de BSD licentie, geschreven door TheCrypto</li>
    176 <li class="tidylist">SHA256 en HMAC-SHA256, valt onder de MIT licentie, geschreven door the Legion of the Bouncycastle</li>
    177 <li class="tidylist">AES code, valt onder de MIT licentie, geschreven door het Cryptix team</li>
    178 <li class="tidylist">SNTP code, valt onder de BSD licentie, geschreven door Adam Buckley</li>
    179 <li class="tidylist">De rest is helemaal public domain, geschreven door jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, en anderen.</li>
     175<li>ElGamal en DSA code, valt onder de BSD licentie, geschreven door TheCrypto</li>
     176<li>SHA256 en HMAC-SHA256, valt onder de MIT licentie, geschreven door the Legion of the Bouncycastle</li>
     177<li>AES code, valt onder de MIT licentie, geschreven door het Cryptix team</li>
     178<li>SNTP code, valt onder de BSD licentie, geschreven door Adam Buckley</li>
     179<li>De rest is helemaal public domain, geschreven door jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, en anderen.</li>
    180180</ul>
    181181
  • apps/routerconsole/jsp/help_ru.jsp

    r9ae9abd rbf42cc1  
    4747<h3>Общая информация</h3><ul>
    4848
    49 <li class="tidylist"><b>Локальный идентификатор</b>
     49<li><b>Локальный идентификатор</b>
    5050
    5151Первые 4 символа (24 бита) из Вашего 44-символьного (256-битного) Base64 хеша маршрутизатора. Полный хеш показывается на странице <a href="netdb.jsp?r=.">информации о маршрутизаторе</a>. Никогда никому не показывайте хеш своего маршрутизатора, так как в нем содержится информация о Вашем IP-адресе.
    5252
    5353</li>
    54 <li class="tidylist"><b>Версия:</b>
     54<li><b>Версия:</b>
    5555
    5656Версия Вашего I2P маршрутизатора. </li>
    5757
    58 <li class="tidylist"><b>Время:</b>
     58<li><b>Время:</b>
    5959
    6060Текущее время (UTC) и величина рассинхронизации времени (если есть). Для правильной работы I2P нужно точное системное время. Пожалуйста, поправьте системное время, если расхождение приближается к 1-ой минуте.
    6161</li>
    62 <li class="tidylist"><b>Доступность:</b>
     62<li><b>Доступность:</b>
    6363
    6464Результат проверки Вашим маршрутизатором, насколько он открыт для входящих соединений от маршрутизаторов других пользователей. Подробнее смотрите на <a href="confignet#help">странице сетевых настроек</a>.
     
    6868<h3>Пиры</h3><ul>
    6969
    70 <li class="tidylist"><b>Активные:</b>
     70<li><b>Активные:</b>
    7171
    7272Первое число — это количество пиров, с которыми происходил обмен сообщениями за последние несколько минут. Значение может меняться от 8-10 до нескольких сотен в зависимости от Вашего общего трафика, доли транзитного трафика, локально создаваемого трафика. Второе число — это количество пиров, наблюдавшихся за последний час. Не волнуйтесь, если эти числа сильно меняются. Это нормально.  <a href="configstats.jsp#router.activePeers">[Включить построение графика]</a>.
    7373</li>
    74 <li class="tidylist"><b>Быстрые:</b>
     74<li><b>Быстрые:</b>
    7575
    7676Количество пиров, которые используются Вашим маршрутизатором для построения клиентских туннелей. В общем случае это значение будет в диапазоне 8-30. Список быстрых пиров можно посмотреть на странице <a href="profiles.jsp">профили</a>. <a href="configstats.jsp#router.fastPeers">[Включить построение графика]</a>.
    7777</li>
    78 <li class="tidylist"><b>Высокоёмкие:</b>
     78<li><b>Высокоёмкие:</b>
    7979
    8080Количество пиров, которые используются Вашим маршрутизатором для построения части зондирующих туннелей. В общем случае это значение будет в диапазоне 8-75. Быстрые пиры входят в группу высокоёмких. Список высокоёмких пиров можно посмотреть на странице <a href="profiles.jsp">профили</a>. <a href="configstats.jsp#router.highCapacityPeers">[Включить построение графика]</a>.
    8181</li>
    82 <li class="tidylist"><b>Хорошо интегрированные:</b>
     82<li><b>Хорошо интегрированные:</b>
    8383
    8484Количество пиров, которые используются Вашим маршрутизатором для запросов к сетевой базе данных. Обычно в таком качестве выступают «floodfill» пиры. Список хорошо интегрированных пиров можно посмотреть в конце страницы <a href="profiles.jsp">профили</a>.
    8585</li>
    86 <li class="tidylist"><b>Известные:</b>
     86<li><b>Известные:</b>
    8787
    8888Это общее количество пиров известных Вашему маршрутизатору. Их список показывается на странице <a href="netdb.jsp">обзор сетевой базы данных</a>. Это значение может варьироваться от десятков до тысяч. Значение не соответствует реальному полному размеру сети, так как маршрутизатору в сети I2P достаточно знать лишь часть других маршрутизаторов. Значение зависит от Вашего общего трафика, доли транзитного трафика, локально создаваемого трафика.
     
    105105<ul>
    106106
    107 <li class="tidylist"><b>Зондирующие:</b>
     107<li><b>Зондирующие:</b>
    108108Туннели, созданные Вашим маршрутизатором для связи с floodfill-пирами, тестирования уже существующих туннелей и построения новых.
    109109</li>
    110 <li class="tidylist"><b>Клиентские:</b>
     110<li><b>Клиентские:</b>
    111111Туннели, созданные Вашим маршрутизатором для каждого локального клиента.
    112112</li>
    113 <li class="tidylist"><b>Транзитные:</b>
     113<li><b>Транзитные:</b>
    114114
    115115Туннели, построенные другими маршрутизаторами, проходящие через Ваш маршрутизатор. Их количество может сильно варьироваться в зависимости от потребностей сети, настроенной доли транзитного трафика и объема локально создаваемого трафика. Рекомендуемый способ ограничения количества транзитных туннелей — настроить долю транзитного трафика на странице <a href="confignet#help">сетевых настроек</a>. Также можно задать точный ограничитель количества через параметр <tt>router.maxParticipatingTunnels=nnn</tt> на странице <a href="configadvanced.jsp">дополнительных настроек</a>.
     
    117117<a href="configstats.jsp#tunnel.participatingTunnels">[Включить построение графика]</a>.
    118118</li>
    119 <li class="tidylist"><b>Доля транзита:</b>
     119<li><b>Доля транзита:</b>
    120120
    121121Количество транзитных туннелей, проходящих через Ваш маршрутизатор, поделенное на суммарное количество хопов в Ваших зондирующих и клиентских туннелях. Значение больше 1.00 означает, что Вы предоставляете для сети больше туннелей, чем используете сами.
     
    128128<ul>
    129129
    130 <li class="tidylist"><b>Задержка заданий:</b>
     130<li><b>Задержка заданий:</b>
    131131
    132132Как долго задания ожидают выполнения. Содержимое очереди можно посмотреть на странице <a href="jobs.jsp">очередь заданий</a>.  К сожалению, есть ещё несколько внутренних очередей, статус которых в консоли не показывается. Задержка заданий в нормальной ситуации должна быть нулевой. Если она систематически выше 500ms, то либо Ваш компьютер слишком медленный, либо с Вашим маршрутизатором проблемы.
     
    134134<a href="configstats.jsp#jobQueue.jobLag">[Включить построение графика]</a>.
    135135</li>
    136 <li class="tidylist"><b>Задержка сообщений:</b>
     136<li><b>Задержка сообщений:</b>
    137137
    138138Как долго исходящие сообщения находятся в очереди. В нормальном случае эта задержка должна быть не выше нескольких сотен миллисекунд. Если она систематически выше 1000ms, то либо Ваш компьютер слишком медленный, либо Вам следует перенастроить ограничение скорости, либо локальные клиенты (чаще всего bittorrent) посылают слишком много данных. Для таких клиентов имеет смысл ограничить скорость.
     
    140140<a href="configstats.jsp#transport.sendProcessingTime">[Включить построение графика]</a> (transport.sendProcessingTime).
    141141</li>
    142 <li class="tidylist"><b>Задержка туннелей:</b>
     142<li><b>Задержка туннелей:</b>
    143143
    144144Время прохождения сигнала при проверке туннеля (сообщение посылается от клиентского туннеля до зондирующего или в обратном направлении). Это значение в нормальном случае должно быть ниже 5 секунд. Если оно систематически выше, то либо Ваш компьютер слишком медленный, либо Вам следует перенастроить ограничение скорости, либо с сетью что-то не в порядке. 
     
    146146<a href="configstats.jsp#tunnel.testSuccessTime">[Включить построение графика]</a> (tunnel.testSuccessTime).
    147147</li>
    148 <li class="tidylist"><b>Очередь запросов:</b>
     148<li><b>Очередь запросов:</b>
    149149
    150150Количество пока необработанных запросов от других маршрутизаторов о построении транзитных туннелей через Ваш маршрутизатор. В нормальном случае это значение должно быть около нуля. Если оно систематически выше, то Ваш компьютер слишком медленный и Вам следует настроить меньшую долю транзитного трафика.
    151151</li>
    152 <li class="tidylist"><b>Принимаем/Не принимаем туннели:</b>
     152<li><b>Принимаем/Не принимаем туннели:</b>
    153153
    154154Состояние Вашего маршрутизатора по приему или отклонению запросов от других маршрутизаторов о построении туннелей. Ваш маршрутизатор может принимать все запросы, принимать/отклонять часть запросов или отклонять все запросы, в зависимости от сетевой загрузки, нагрузки на процессор и необходимости резервировать полосу пропускания для локальных клиентов.
     
    168168
    169169<ul>
    170 <li class="tidylist">Код для алгоритмов ElGamal и DSA — под лицензией BSD, автор: TheCrypto</li>
    171 <li class="tidylist">Код для алгоритмов SHA256 и HMAC-SHA256 — под лицензией MIT, автор: Legion из Bouncycastle</li>
    172 <li class="tidylist">Код для алгоритма AES — под лицензией Cryptix (MIT), авторы: Cryptix team</li>
    173 <li class="tidylist">Код для SNTP — под лицензией BSD, автор: Adam Buckley</li>
    174 <li class="tidylist">Всё остальное полностью в общественном достоянии, авторы: jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, и другие.</li>
     170<li>Код для алгоритмов ElGamal и DSA — под лицензией BSD, автор: TheCrypto</li>
     171<li>Код для алгоритмов SHA256 и HMAC-SHA256 — под лицензией MIT, автор: Legion из Bouncycastle</li>
     172<li>Код для алгоритма AES — под лицензией Cryptix (MIT), авторы: Cryptix team</li>
     173<li>Код для SNTP — под лицензией BSD, автор: Adam Buckley</li>
     174<li>Всё остальное полностью в общественном достоянии, авторы: jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, и другие.</li>
    175175</ul>
    176176
  • apps/routerconsole/jsp/js/ajax.js

    r9ae9abd rbf42cc1  
    3535      //document.getElementByClassName("hideifdown").style.display="none";
    3636    }
     37
     38    // conditionally load sidebar refreshGraph script
     39    var graph = document.getElementById('sb_graphcontainer');
     40    if (graph) {
     41      var js_refreshGraph = document.createElement('script');
     42      js_refreshGraph.type = "text/javascript";
     43      js_refreshGraph.src = "/js/refreshGraph.js";
     44      js_refreshGraph.async = true;
     45      document.getElementsByTagName('head')[0].appendChild(js_refreshGraph);
     46    }
     47
    3748    setTimeout(function() {ajax(url, target, refresh);}, refresh);
    3849  }
  • apps/routerconsole/jsp/torrents.jsp

    r9ae9abd rbf42cc1  
    77    // CSSHelper is also pulled in by css.jsi below...
    88    boolean testIFrame = tester.allowIFrame(request.getHeader("User-Agent"));
    9     if (!testIFrame) {
     9    boolean embedApp = tester.embedApps();
     10    if (!testIFrame || !embedApp) {
    1011        response.setStatus(302);
    1112        response.setHeader("Location", "/i2psnark/");
  • apps/routerconsole/jsp/webmail.jsp

    r9ae9abd rbf42cc1  
    77    // CSSHelper is also pulled in by css.jsi below...
    88    boolean testIFrame = tester.allowIFrame(request.getHeader("User-Agent"));
    9     if (!testIFrame) {
     9    boolean embedApp = tester.embedApps();
     10    if (!testIFrame || !embedApp) {
    1011        response.setStatus(302);
    1112        response.setHeader("Location", "/susimail/susimail");
  • apps/susidns/src/jsp/addressbook.jsp

    r9ae9abd rbf42cc1  
    6262<div id="navi">
    6363<a id="overview" href="index"><%=intl._t("Overview")%></a>&nbsp;
    64 <a class="abook" href="addressbook?book=private"><%=intl._t("Private")%></a>&nbsp;
    65 <a class="abook" href="addressbook?book=master"><%=intl._t("Master")%></a>&nbsp;
    66 <a class="abook" href="addressbook?book=router"><%=intl._t("Router")%></a>&nbsp;
    67 <a class="abook" href="addressbook?book=published"><%=intl._t("Published")%></a>&nbsp;
     64<a class="abook" href="addressbook?book=private&filter=none"><%=intl._t("Private")%></a>&nbsp;
     65<a class="abook" href="addressbook?book=master&filter=none"><%=intl._t("Master")%></a>&nbsp;
     66<a class="abook" href="addressbook?book=router&filter=none"><%=intl._t("Router")%></a>&nbsp;
     67<a class="abook" href="addressbook?book=published&filter=none"><%=intl._t("Published")%></a>&nbsp;
    6868<a id="subs" href="subscriptions"><%=intl._t("Subscriptions")%></a>&nbsp;
    6969<a id="config" href="config"><%=intl._t("Configuration")%></a>
     
    141141<input type="hidden" name="begin" value="0">
    142142<input type="hidden" name="end" value="49">
    143 <table>
    144 <tr>
    145 <td class="search"><%=intl._t("Search")%>: <input class="search" type="text" name="search" value="${book.search}" size="20" ></td>
    146 <td class="search"><input class="search" type="submit" name="submitsearch" value="<%=intl._t("Search")%>" ></td>
    147 </tr>
    148 </table>
     143<div id="booksearch">
     144<input class="search" type="text" name="search" value="${book.search}" size="20" >
     145<input class="search" type="submit" name="submitsearch" value="<%=intl._t("Search")%>" >
     146</div>
    149147</form>
    150148</div>
     
    213211
    214212<c:if test="${book.isEmpty}">
    215 <div id="book">
     213<div id="emptybook">
    216214<p class="book"><%=intl._t("This address book is empty.")%></p>
    217215</div>
  • apps/susidns/src/jsp/config.jsp

    r9ae9abd rbf42cc1  
    5858<div id="navi">
    5959<a id="overview" href="index"><%=intl._t("Overview")%></a>&nbsp;
    60 <a class="abook" href="addressbook?book=private"><%=intl._t("Private")%></a>&nbsp;
    61 <a class="abook" href="addressbook?book=master"><%=intl._t("Master")%></a>&nbsp;
    62 <a class="abook" href="addressbook?book=router"><%=intl._t("Router")%></a>&nbsp;
    63 <a class="abook" href="addressbook?book=published"><%=intl._t("Published")%></a>&nbsp;
     60<a class="abook" href="addressbook?book=private&filter=none"><%=intl._t("Private")%></a>&nbsp;
     61<a class="abook" href="addressbook?book=master&filter=none"><%=intl._t("Master")%></a>&nbsp;
     62<a class="abook" href="addressbook?book=router&filter=none"><%=intl._t("Router")%></a>&nbsp;
     63<a class="abook" href="addressbook?book=published&filter=none"><%=intl._t("Published")%></a>&nbsp;
    6464<a id="subs" href="subscriptions"><%=intl._t("Subscriptions")%></a>&nbsp;
    6565<a id="config" href="config"><%=intl._t("Configuration")%></a>
  • apps/susidns/src/jsp/details.jsp

    r9ae9abd rbf42cc1  
    5555<div id="navi">
    5656<a id="overview" href="index"><%=intl._t("Overview")%></a>&nbsp;
    57 <a class="abook" href="addressbook?book=private"><%=intl._t("Private")%></a>&nbsp;
    58 <a class="abook" href="addressbook?book=master"><%=intl._t("Master")%></a>&nbsp;
    59 <a class="abook" href="addressbook?book=router"><%=intl._t("Router")%></a>&nbsp;
    60 <a class="abook" href="addressbook?book=published"><%=intl._t("Published")%></a>&nbsp;
     57<a class="abook" href="addressbook?book=private&filter=none"><%=intl._t("Private")%></a>&nbsp;
     58<a class="abook" href="addressbook?book=master&filter=none"><%=intl._t("Master")%></a>&nbsp;
     59<a class="abook" href="addressbook?book=router&filter=none"><%=intl._t("Router")%></a>&nbsp;
     60<a class="abook" href="addressbook?book=published&filter=none"><%=intl._t("Published")%></a>&nbsp;
    6161<a id="subs" href="subscriptions"><%=intl._t("Subscriptions")%></a>&nbsp;
    6262<a id="config" href="config"><%=intl._t("Configuration")%></a>
  • apps/susidns/src/jsp/index.jsp

    r9ae9abd rbf42cc1  
    5656<div id="navi">
    5757<a id="overview" href="index"><%=intl._t("Overview")%></a>&nbsp;
    58 <a class="abook" href="addressbook?book=private"><%=intl._t("Private")%></a>&nbsp;
    59 <a class="abook" href="addressbook?book=master"><%=intl._t("Master")%></a>&nbsp;
    60 <a class="abook" href="addressbook?book=router"><%=intl._t("Router")%></a>&nbsp;
    61 <a class="abook" href="addressbook?book=published"><%=intl._t("Published")%></a>&nbsp;
     58<a class="abook" href="addressbook?book=private&filter=none"><%=intl._t("Private")%></a>&nbsp;
     59<a class="abook" href="addressbook?book=master&filter=none"><%=intl._t("Master")%></a>&nbsp;
     60<a class="abook" href="addressbook?book=router&filter=none"><%=intl._t("Router")%></a>&nbsp;
     61<a class="abook" href="addressbook?book=published&filter=none"><%=intl._t("Published")%></a>&nbsp;
    6262<a id="subs" href="subscriptions"><%=intl._t("Subscriptions")%></a>&nbsp;
    6363<a id="config" href="config"><%=intl._t("Configuration")%></a>
  • apps/susidns/src/jsp/subscriptions.jsp

    r9ae9abd rbf42cc1  
    5656<div id="navi">
    5757<a id="overview" href="index"><%=intl._t("Overview")%></a>&nbsp;
    58 <a class="abook" href="addressbook?book=private"><%=intl._t("Private")%></a>&nbsp;
    59 <a class="abook" href="addressbook?book=master"><%=intl._t("Master")%></a>&nbsp;
    60 <a class="abook" href="addressbook?book=router"><%=intl._t("Router")%></a>&nbsp;
    61 <a class="abook" href="addressbook?book=published"><%=intl._t("Published")%></a>&nbsp;
     58<a class="abook" href="addressbook?book=private&filter=none"><%=intl._t("Private")%></a>&nbsp;
     59<a class="abook" href="addressbook?book=master&filter=none"><%=intl._t("Master")%></a>&nbsp;
     60<a class="abook" href="addressbook?book=router&filter=none"><%=intl._t("Router")%></a>&nbsp;
     61<a class="abook" href="addressbook?book=published&filter=none"><%=intl._t("Published")%></a>&nbsp;
    6262<a id="subs" href="subscriptions"><%=intl._t("Subscriptions")%></a>&nbsp;
    6363<a id="config" href="config"><%=intl._t("Configuration")%></a>
  • apps/susimail/src/src/i2p/susi/webmail/WebMail.java

    r9ae9abd rbf42cc1  
    16121612        throws IOException, ServletException
    16131613        {
    1614                 String theme = Config.getProperty(CONFIG_THEME, DEFAULT_THEME);
    16151614                I2PAppContext ctx = I2PAppContext.getGlobalContext();
     1615                // Fetch routerconsole theme (or use our default if it doesn't exist)
     1616                String theme = ctx.getProperty(RC_PROP_THEME, DEFAULT_THEME);
     1617                // Apply any override
     1618                theme = Config.getProperty(CONFIG_THEME, theme);
    16161619                boolean universalTheming = ctx.getBooleanProperty(RC_PROP_UNIVERSAL_THEMING);
    16171620                if (universalTheming) {
  • build.xml

    r9ae9abd rbf42cc1  
    12421242          <fileset dir="installer/resources/icons/flags" />
    12431243        </copy>
     1244        <copy todir="pkg-temp/docs/icons/flags48x48" >
     1245          <fileset dir="installer/resources/icons/flags48x48" />
     1246        </copy>
    12441247    </target>
    12451248
     
    13971400               lang_gl added in 0.9.28; a0.png added in 0.9.31 -->
    13981401          <fileset dir="installer/resources/" includes="icons/flags/lang_ar.png icons/flags/gg.png icons/flags/je.png icons/flags/eu.png icons/flags/im.png icons/flags/a1.png icons/flags/a2.png icons/flags/cw.png icons/flags/ap.png icons/flags/bl.png icons/flags/bq.png icons/flags/ss.png icons/flags/sx.png icons/flags/lang_gl.png icons/flags/a0.png" />
     1402          <!-- flags48x48 added in 0.9.32 -->
     1403          <fileset dir="installer/resources/" includes="icons/flags48x48/*" />
    13991404        </copy>
    14001405    </target>
     
    25092514                                <fileset dir="installer/resources/icons/flags/" includes="cn.png,de.png,fr.png,nl.png,ru.png,se.png,us.png" />
    25102515                        </copy>
     2516                        <copy todir="pkg-temp/docs/icons/flags48x48" >
     2517                                <fileset dir="installer/resources/icons/flags48x48" />
     2518                        </copy>
    25112519                <mkdir dir="pkg-temp/webapps" />
    25122520                        <copy todir="pkg-temp/webapps/">
  • history.txt

    r9ae9abd rbf42cc1  
     12017-10-25 str4d
     2 * Console:
     3   - /graphs:
     4     - Add option to hide legends
     5     - Adjust size of up/down bw graph to match other graphs (ticket #1996)
     6     - Modify image font color to better blend with themes
     7     - Tweak spacing of elements for non-Debian installs
     8   - Sidebar:
     9     - Adjust vertical spacing of general section
     10     - Rename 'General' section to 'Router Info' and move ident info to h3
     11       tooltip (ticket #1996)
     12     - Replace 'Short Router Info' with a new 'Advanced Router Info' section in
     13       default advanced sidebar (adds memory usage and clock skew)
     14     - Add optional embedded bandwidth graph (experimental)
     15     - Add optional memory usage bar
     16     - Add optional Advanced Peers section (adds failing and banned peers)
     17     - Add Help link to 'I2P Internals' section
     18     - Add help page anchored links and troubleshooting to 'Help & FAQ' section
     19     - Add download progress bar for router and plugin updates
     20     - Add 'Advanced Minimal' sidebar configuration
     21     - Add Jobs and Events links to Advanced section
     22     - Add additional reachability states for clockskew and vmcomm (with icons)
     23   - Homepage: Add 'Customize Sidebar' link to signpost the feature now that
     24     there are more optional sections available (ticket #1996)
     25   - /configui:
     26     - Add option to embed Susimail and I2PSnark in console
     27     - Use larger flags for language selection
     28   - /help:
     29     - Update sidebar help section (en)
     30     - Remove redundant CSS class from all help section files (li.tidylist)
     31   - /tunnels:
     32     - Indicate that no participating tunnels will be built when shared bw is too low
     33     - Replace <a name> with id attribute for anchor links
     34   - light:
     35     - Lighten/tint buttons and dropdowns to better blend with reworked theme,
     36       vary text color for different button states
     37     - Increase vertical spacing for status/buttons in news section
     38     - Fix minor rendering issue with h1's (remove bottom border-radius)
     39     - Fix some mismatched heading coloring issues
     40     - Fix alignment issue on /configservice in Arabic/Chinese (ticket #2024)
     41     - Ensure spacing of sidebar elements is consistent in Chinese
     42   - dark: Overhaul theme
     43   - classic: Add fallback CSS to ensure browsers without CSS3 support can
     44     display icons on buttons (tested with Netsurf)
     45 * Proxy: Remove truncation of URLs in the error messages and handle with CSS to
     46   avoid UI breakage
     47 * I2PTunnel: Add hostname / destination (b32) information to server section on
     48   index page (for parity with client tunnels section)
     49 * I2PSnark
     50   - Fix broken collapsible panels issue for browsers that don't support the
     51     feature by conditionally loading override CSS to expand panels by default
     52     and disable hover/active states for panel headings (tickets #2002, #2026)
     53   - Add UI option to configuration section to enable collapsible panels, and
     54     disable the option if a non-compliant browser is detected
     55   - Fix multiple instances of snark refreshing to the homepage (ticket #2028)
     56     (patch supplied by mindless)
     57   - Tentative fix for caching of images so ajax refresh doesn't reload all
     58     image resources
     59   - Standardize 'Save Configuration' action to return to top of the page
     60     (so we can see message log entry)
     61   - Add button hoverstate for tracker details, torrent details and file icons
     62   - light
     63     - Sync buttons in embedded mode with console theme
     64     - Fix non-functioning message log close icon
     65   - dark: Overhaul theme and sync with console theme in embedded mode
     66   - classic: refresh CSS
     67 * SusiDNS:
     68   - Reinstate filter removal on addressbook navigation links (ticket #1996)
     69   - Reduce vertical padding for filter buttons section
     70   - Migrate search section to div and reposition page elements to better
     71     integrate with host list and minimize whitespace
     72 * Susimail:
     73   - Overhaul dark theme
     74   - Sync theme to console theme by default, override if user sets theme
     75     (unless universal themeing is enabled)
     76
    1772017-10-24 zzz
    278 * NTCP: Convert configured NTCP hostname to IP address
  • installer/resources/themes/console/classic/console.css

    r9ae9abd rbf42cc1  
    132132
    133133.warning a:visited {
    134      color: #f90 !important;
    135 }
    136 
    137 .warning a:hover {
     134     color: #f40 !important;
     135}
     136
     137.warning a:hover, .warning a:focus, .warning a:visited:focus {
    138138     color: #d30 !important;
    139139}
     
    407407}
    408408
     409/* siderbar logo */
     410
     411.routersummary div[style="height: 36px;"] {
     412     height: 32px !important;
     413}
     414
    409415.routersummary img[src$="i2plogo.png"] {
    410     margin-top: 3px;
    411      margin-left: 0;
    412      width: 185px;
     416     width: 190px;
    413417     height: auto;
    414418     box-shadow: 0 0 1px 1px rgba(180,180,180,0.7);
     
    417421     user-select: none;
    418422}
     423
     424.routersummary a img:first-child {
     425     opacity: 0.8;
     426     border: none;
     427}
     428
     429.routersummary a img:first-child:hover, .routersummary a img:first-child:active {
     430     opacity: 1;
     431     filter: drop-shadow(0 0 1px #f60);
     432     box-shadow: none;
     433}
     434
     435.routersummary a[href="/"], .routersummary a[href="/console"] {
     436     outline: none !important;
     437}
     438
     439.routersummary a[href="/"]:focus img, .routersummary a[href="/console"]:focus img {
     440     filter: drop-shadow(0 0 1px #f60) saturate(200%);
     441}
     442
     443/* end siderbar logo */
    419444
    420445.routersummary a {
     
    528553}
    529554
    530 #sb_general, #sb_shortgeneral, #sb_bandwidth, #sb_peers, #sb_tunnels, #sb_queue {
     555#sb_general, #sb_shortgeneral, #sb_advancedgeneral, #sb_bandwidth, #sb_peers, #sb_peersadvanced, #sb_tunnels, #sb_queue {
    531556     margin-bottom: -5px !important;
    532557     margin-top: -6px !important;
    533558}
    534559
    535 #sb_general td::after, #sb_shortgeneral td::after, #sb_bandwidth td::after, #sb_peers td::after, #sb_tunnels td::after, #sb_queue td::after {
     560#sb_general td::after, #sb_shortgeneral td::after, #sb_advancedgeneral td::after, #sb_bandwidth td::after,
     561#sb_peers td::after, #sb_peersadvanced td::after, #sb_tunnels td::after, #sb_queue td::after {
    536562   content: "";
    537563   display: inline-block;
     
    539565}
    540566
    541 #sb_peers td:first-child, #sb_tunnels td:first-child, #sb_queue td:first-child, #sb_bandwidth td:first-child, #sb_general td:first-child, #sb_shortgeneral td:first-child {
     567#sb_peers td:first-child, #sb_peersadvanced td:first-child, #sb_tunnels td:first-child, #sb_queue td:first-child,
     568#sb_bandwidth td:first-child, #sb_general td:first-child, #sb_shortgeneral td:first-child, #sb_advancedgeneral td:first-child {
    542569     white-space: nowrap;
    543570}
     
    548575}
    549576
     577#sb_peersadvanced a {
     578     padding: 0;
     579}
     580
     581#sb_peersadvanced a b {
     582     color: #2c354f;
     583}
     584
     585#sb_peersadvanced a:hover b {
     586     color: #f60;
     587}
     588
     589#sb_peersadvanced .separator td::after {
     590     min-height: 0;
     591}
     592
     593#sb_peersadvanced .separator hr {
     594     margin: 3px 0 2px !important;
     595     color: transparent;
     596     background: transparent;
     597     border-bottom: 1px dashed #89f;
     598}
     599
    550600#sb_localid {
    551601     margin: -3px 0 -1px;
     
    560610}
    561611
    562 #sb_internals, #sb_services, #sb_advanced {
     612#sb_internals, #sb_services, #sb_advanced, #sb_help {
    563613     margin-top: -3px !important;
    564614}
    565615
    566 #sb_internals a, #sb_services a, #sb_advanced a {
     616#sb_internals a, #sb_services a, #sb_advanced a, #sb_help a {
    567617     display: inline-block;
    568618     padding: 2px;
     
    643693}
    644694
     695.sb_notice a {
     696     vertical-align: baseline;
     697     padding: 0;
     698}
     699
    645700#sb_warning + .sb_notice {
    646701     margin-top: 10px;
     
    652707
    653708.routersummary form {
    654      margin: -2px 0;
     709     margin: -2px -2px -3px;
     710}
     711
     712#sb_warning + hr {
     713    opacity: 0;
     714}
     715
     716#sb_warning + hr + form {
     717     margin-top: -1px;
     718}
     719
     720#sb_warning + p:empty + form {
     721     margin-top: 10px;
     722     margin-bottom: -3px;
    655723}
    656724
     
    730798}
    731799
    732 .routersummary a img:first-child {
    733      opacity: 0.8;
    734      border: none;
    735 }
    736 
    737 .routersummary a img:first-child:hover, .routersummary a img:first-child:active {
    738      opacity: 1;
    739      filter: drop-shadow(0 0 1px #89f);
    740      box-shadow: none;
    741 }
    742 
    743 .routersummary a[href="/"], .routersummary a[href="/console"] {
    744      outline: none !important;
    745 }
    746 
    747 .routersummary a[href="/"]:focus img, .routersummary a[href="/console"]:focus img {
    748      filter: drop-shadow(0 0 1px #f60) saturate(200%);
    749 }
    750 
    751800/* network status */
    752801
     
    835884/* end network status */
    836885
     886/* mini sidebar graph */
     887
     888#sb_bandwidthgraph {
     889     width: 202px !important;
     890     margin: 0;
     891     margin: -20px 0 0 0;
     892     border-collapse: separate;
     893     border-spacing: 0;
     894     padding: 0;
     895     border: 1px solid #89f;
     896     border-radius: 2px;
     897     box-shadow: 0 0 1px #ccf;
     898}
     899
     900#sb_bandwidthgraph:hover {
     901     border: 1px solid #f60;
     902     cursor: url(/themes/console/images/cursor_zoom.png), pointer;
     903}
     904
     905a:active #sb_bandwidthgraph {
     906     border: 1px solid #f30;
     907}
     908
     909#sb_bandwidthgraph td {
     910     background: linear-gradient(to top, #f3f3ff 2px, rgba(255,255,255,0.0) 2px, rgba(255,255,255,0.0) 89%, #f3f3ff 93%), linear-gradient(to right, #f3f3ff, rgba(255,255,255,0.0) 2%, rgba(255,255,255,0.0) 98%, #f3f3ff), repeating-linear-gradient(to right, rgba(255,255,255,0.0) 10px, rgba(120,120,255,0.8) 11px, rgba(255,255,255,0.0) 11px, rgba(255,255,255,0.0) 20px), repeating-linear-gradient(to top, rgba(255,255,255,0.0) 1px, rgba(120,120,255,0.8) 2px, rgba(255,255,255,0.0) 2px, rgba(255,255,255,0.0) 10px) !important;
     911     padding: 0 1px;
     912     box-shadow: inset 0 0 0 1px #fff;
     913     height: 38px;
     914     vertical-align: top;
     915}
     916
     917#sb_graphstats {
     918     display: inline-block;
     919     padding: 2px 8px;
     920     font-weight: bold;
     921     background: #ddf;
     922     background: linear-gradient(to right, #ddf, #efefff, #ddf);
     923     border: 1px solid #89f;
     924     border-top: none;
     925     border-radius: 0 0 3px 3px;
     926     box-shadow: inset 0 0 0 1px #fff;
     927     opacity: 0;
     928     transition: ease opacity 0.3s;
     929}
     930
     931#sb_graphcontainer:hover #sb_graphstats {
     932     opacity: 1;
     933     transition: ease opacity 0.3s;
     934}
     935
     936#sb_graphcontainer {
     937     background-color: #f3f3ff;
     938     background-position: left -60px top -35px !important;
     939     background-position: left -60px top -29px !important;
     940     background-size: 280px 92px !important;
     941     background-size: 280px 77px !important;
     942     background-repeat: no-repeat !important;
     943     background-blend-mode: multiply;
     944     margin: 0 2px -21px 1px !important;
     945     padding: 0 5px 0 0;
     946}
     947
     948@media screen and (min-width: 1500px) {
     949#sb_bandwidthgraph {
     950     width: 223px !important;
     951     background-size: 300px 92px !important;
     952}
     953
     954#sb_graphcontainer {
     955     background-size: 300px 77px !important;
     956}
     957}
     958/* end mini sidebar graph */
     959
     960/* status bars */
     961
     962.percentBarOuter {
     963     width: 196px;
     964     margin: -4px 0 -5px 3px;
     965     text-align: center;
     966     border: 1px solid #99f;
     967     box-shadow: 0 0 1px rgba(200,200,200,0.8);
     968     background: #eef;
     969     background: repeating-linear-gradient(to right, rgba(180, 180, 255,0.7) 1px, rgba(180, 180, 255, 0.7) 2px, rgba(221, 221, 255, 0.7) 2px, rgba(221, 221, 255, 0.7) 4px);
     970}
     971
     972@media screen and (min-width: 1500px) {
     973.percentBarOuter {
     974     width: 210px;
     975}
     976}
     977
     978.percentBarInner {
     979     vertical-align: middle;
     980     border: none;
     981     height: 14px;
     982     background: #bbf;
     983     background: linear-gradient(to right, rgba(0,255,0,0.1) 65px, rgba(255,255,0,0.1) 110px, rgba(255,128,0,0.1) 175px, rgba(255,0,0,0.1)), linear-gradient(to bottom, rgba(255, 255, 255,0.6) 0%, rgba(238, 238, 255, 0.6) 50%, rgba(180, 180, 255, 0.7) 50%, rgba(140, 140, 255, 0.7) 100%);
     984     box-shadow: inset 0 0 0 1px #ddf;
     985}
     986
     987.percentBarText {
     988     display: inline !important;
     989     white-space: nowrap;
     990     text-align: center !important;
     991     font-weight: bold !important;
     992     color: #2c354f;
     993     text-shadow: 0 1px 1px rgba(255,255,255,0.8);
     994     float: left;
     995     width: 100%;
     996     height: 14px;
     997     padding: 0;
     998     opacity: 0;
     999     transition: ease opacity 0.2s;
     1000}
     1001
     1002.percentBarOuter:hover .percentBarText {
     1003     opacity: 1;
     1004     transition: ease opacity 0.2s;
     1005}
     1006
     1007/* updates download bar */
     1008
     1009.sb_updatestatus {
     1010     display: block;
     1011     border: 1px solid #99f;
     1012     border-top: none;
     1013     color: #2c354f;
     1014     border-radius: 0 0 3px 3px;
     1015     box-sizing: border-box;
     1016     background: #ccf;
     1017     background: linear-gradient(to right, #eef, #eff2ff 30%, #eff2ff 60%, #eef);
     1018     box-shadow: inset 0 0 0 1px #fff;
     1019     margin: -8px 2px 5px !important;
     1020     padding: 3px 0 4px;
     1021     font-style: italic;
     1022}
     1023
     1024.sb_info .percentBarOuter {
     1025     margin: 3px -4px -5px 2px;
     1026     background: repeating-linear-gradient(135deg, rgba(238, 238, 255,0.7) 1px, rgba(238, 238, 255, 0.7) 5px, rgba(221, 221, 255, 0.7) 6px, rgba(221, 221, 255, 0.7) 11px);
     1027}
     1028
     1029@keyframes downloadbar {
     1030from {
     1031     background: repeating-linear-gradient(135deg, rgba(221, 221, 255, 0.7) 1px, rgba(221, 221, 255, 0.7) 6px, rgba(238, 238, 255,0.7) 7px, rgba(238, 238, 255,0.7) 11px);
     1032}
     1033
     1034to {
     1035     background: repeating-linear-gradient(135deg, rgba(238, 238, 255,0.7) 1px, rgba(238, 238, 255, 0.7) 5px, rgba(221, 221, 255, 0.7) 6px, rgba(221, 221, 255, 0.7) 11px);
     1036}
     1037}
     1038
     1039.sb_info .percentBarOuter {
     1040     animation: downloadbar 3s infinite;
     1041}
     1042
     1043.sb_info .percentBarInner {
     1044     height: 16px;
     1045     background: linear-gradient(to bottom, rgba(255, 255, 255,0.6) 0%, rgba(238, 238, 255, 0.6) 50%, rgba(180, 180, 255, 0.7) 50%, rgba(140, 140, 255, 0.7) 100%);
     1046
     1047}
     1048
     1049.sb_info .percentBarText {
     1050     opacity: 1;
     1051     padding-top: 2px;
     1052     mix-blend-mode: multiply;
     1053     color: #33f;
     1054
     1055}
     1056/* end updates download bar */
     1057/* end status bars */
     1058
    8371059/* end sidebar */
    8381060
     
    10831305     -webkit-appearance: none;
    10841306     appearance: none;
    1085      background: url(images/dropdown.png) right center no-repeat #fff;
     1307     background: url(images/dropdown.png) right center no-repeat #eee;
    10861308     background: url(images/dropdown.png) right center no-repeat, linear-gradient(to bottom, #fff, #ddd);
    10871309     margin: 3px 5px;
     
    11081330
    11091331select:hover, select:active {
     1332     background: #ddd url(images/dropdown_hover.png) right center no-repeat !important;
    11101333     background: url(images/dropdown_hover.png) right center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
    11111334}
    11121335
    11131336select:focus {
     1337     background: #fff url(images/dropdown_hover.png) right center no-repeat !important;
    11141338     background: url(images/dropdown_hover.png) right center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
    11151339     box-shadow: 0 0 0 1px #89f;
     
    12031427     padding: 4px;
    12041428     color: #333;
     1429     background-color: #fefefe;
    12051430}
    12061431
     
    12171442
    12181443button, input, select {
     1444     background-color: #eee;
    12191445     font: 9pt/130% "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", "DejaVu Sans", Verdana, Helvetica, sans-serif;
    12201446     color: #333;
     
    12221448
    12231449button:hover, input[type="submit"]:hover, input[type="reset"]:hover {
    1224      background: #fff;
     1450     background-color: #ddd;
    12251451     background: linear-gradient(to bottom, #ddd, #fff);
    12261452}
    12271453
    12281454button:active, input[type="submit"]:active, input[type="reset"]:active {
    1229      background: #ddd;
     1455     background-color: #fff;
    12301456}
    12311457
     
    13131539
    13141540button:hover, input[type="submit"]:hover, input[type="reset"]:hover, button:focus, input[type="submit"]:focus, input[type="reset"]:focus {
     1541     background: #ddd;
    13151542     background: linear-gradient(to bottom, #ddd, #fff);
    13161543     border: 1px solid #89f;
     
    13221549     border: 1px solid #999;
    13231550     box-shadow: inset 0 0 0 1px #fff, inset 3px 3px 3px 1px #555;
     1551     background-color: #ddd;
    13241552     background-blend-mode: luminosity;
    13251553     color: #555;
     
    13271555
    13281556input.accept, button.accept {
     1557     background: #eee url(/themes/console/images/buttons/yes.png) no-repeat 7px center;
    13291558     background: url(/themes/console/images/buttons/yes.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    13301559     padding: 5px 7px 5px 23px;
     
    13331562input.accept:hover, button.accept:hover,
    13341563input.accept:focus, button.accept:focus {
     1564     background: #fff url(/themes/console/images/buttons/yes.png) no-repeat 7px center;
    13351565     background: url(/themes/console/images/buttons/yes.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    13361566}
    13371567
    13381568input.accept[value^="Unban"], button.accept[value^="Unban"] {
     1569     background: #eee url(/themes/console/images/buttons/unban.png) no-repeat 7px center;
    13391570     background: url(/themes/console/images/buttons/unban.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    13401571     padding: 5px 7px 5px 23px;
     
    13431574input.accept[value^="Unban"]:hover, button.accept[value^="Unban"]:hover,
    13441575input.accept[value^="Unban"]:focus, button.accept[value^="Unban"]:focus {
     1576     background: #fff url(/themes/console/images/buttons/unban.png) no-repeat 7px center;
    13451577     background: url(/themes/console/images/buttons/unban.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    13461578}
    13471579
    13481580input.accept[value^="Create"], button.accept[value^="Create"] {
     1581     background: #eee url(/themes/console/images/buttons/create.png) no-repeat 7px center;
    13491582     background: url(/themes/console/images/buttons/create.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    13501583     padding: 5px 7px 5px 23px;
     
    13531586input.accept[value^="Create"]:hover, button.accept[value^="Create"]:hover,
    13541587input.accept[value^="Create"]:focus, button.accept[value^="Create"]:focus {
     1588     background: #fff url(/themes/console/images/buttons/create.png) no-repeat 7px center;
    13551589     background: url(/themes/console/images/buttons/create.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    13561590}
    13571591
    13581592input.accept[value^="Filter"], button.accept[value^="Filter"] {
     1593     background: #eee url(/themes/console/images/buttons/filter.png) no-repeat 7px center;
    13591594     background: url(/themes/console/images/buttons/filter.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    13601595     padding: 5px 7px 5px 23px;
     
    13631598input.accept[value^="Filter"]:hover, button.accept[value^="Filter"]:hover,
    13641599input.accept[value^="Filter"]:focus, button.accept[value^="Filter"]:focus {
     1600     background: #fff url(/themes/console/images/buttons/filter.png) no-repeat 7px center;
    13651601     background: url(/themes/console/images/buttons/filter.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    13661602}
    13671603
    13681604input.add, button.add {
     1605     background: #eee url(/themes/console/images/buttons/add.png) no-repeat 7px center;
    13691606     background: url(/themes/console/images/buttons/add.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    13701607     padding: 5px 7px 5px 23px;
     
    13731610input.add:hover, button.add:hover,
    13741611input.add:focus, button.add:focus {
     1612     background: #fff url(/themes/console/images/buttons/add.png) no-repeat 7px center;
    13751613     background: url(/themes/console/images/buttons/add.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    13761614}
    13771615
    13781616input.add[value^="Adjust"], button.add[value^="Adjust"] {
     1617     background: #eee url(/themes/console/images/buttons/edit2.png) no-repeat 7px center;
    13791618     background: url(/themes/console/images/buttons/edit2.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    13801619     padding: 5px 7px 5px 23px;
     
    13831622input.add[value^="Adjust"]:hover, button.add[value^="Adjust"]:hover,
    13841623input.add[value^="Adjust"]:focus, button.add[value^="Adjust"]:focus {
     1624     background: #fff url(/themes/console/images/buttons/edit2.png) no-repeat 7px center;
    13851625     background: url(/themes/console/images/buttons/edit2.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    13861626}
    13871627
    13881628input.cancel, button.cancel {
     1629     background: #eee url(/themes/console/images/buttons/no.png) no-repeat 7px center;
    13891630     background: url(/themes/console/images/buttons/no.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    13901631     padding: 5px 7px 5px 23px;
     
    13931634input.cancel:hover, button.cancel:hover,
    13941635input.cancel:focus, button.cancel:focus {
     1636     background: #fff url(/themes/console/images/buttons/no.png) no-repeat 7px center;
    13951637     background: url(/themes/console/images/buttons/no.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    13961638}
     
    13981640input.accept[value^="Show"], button.accept[value^="Show"],
    13991641input.check[value^="View"], button.check[value^="View"] {
     1642     background: #eee url(/themes/console/images/buttons/show.png) no-repeat 7px center;
    14001643     background: url(/themes/console/images/buttons/show.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14011644     padding: 5px 7px 5px 23px;
     
    14061649input.accept[value^="Show"]:focus, button.accept[value^="Show"]:focus,
    14071650input.check[value^="View"]:focus, button.check[value^="View"]:focus {
     1651     background: #fff url(/themes/console/images/buttons/show.png) no-repeat 7px center;
    14081652     background: url(/themes/console/images/buttons/show.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    14091653}
     
    14111655input.cancel[value^="Hide"], button.cancel[value^="Hide"],
    14121656input.delete[value^="Do not view"], button.delete[value^="Do not view"] {
     1657     background: #eee url(/themes/console/images/buttons/hide.png) no-repeat 7px center;
    14131658     background: url(/themes/console/images/buttons/hide.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14141659     padding: 5px 7px 5px 23px;
     
    14191664input.cancel[value^="Hide"]:focus, button.cancel[value^="Hide"]:focus,
    14201665input.delete[value^="Do not view"]:focus, button.delete[value^="Do not view"]:focus {
     1666     background: #fff url(/themes/console/images/buttons/hide.png) no-repeat 7px center;
    14211667     background: url(/themes/console/images/buttons/hide.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    14221668}
    14231669
    14241670input.check, button.check {
     1671     background: #eee url(/themes/console/images/buttons/yes.png) no-repeat 7px center;
    14251672     background: url(/themes/console/images/buttons/yes.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14261673     padding: 5px 7px 5px 23px;
     
    14291676input.check:hover, button.check:hover,
    14301677input.check:focus, button.check:focus {
     1678     background: #fff url(/themes/console/images/buttons/yes.png) no-repeat 7px center;
    14311679     background: url(/themes/console/images/buttons/yes.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    14321680}
    14331681
    14341682input.check[value$="updates"], button.check[value$="updates"] {
     1683     background: #eee url(/themes/console/images/buttons/update.png) no-repeat 7px center;
    14351684     background: url(/themes/console/images/buttons/update.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14361685     padding: 5px 7px 5px 23px;
     
    14391688input.check[value$="updates"]:hover, button.check[value$="updates"]:hover,
    14401689input.check[value$="updates"]:focus, button.check[value$="updates"]:focus {
     1690     background: #fff url(/themes/console/images/buttons/update_hover.png) no-repeat 7px center;
    14411691     background: url(/themes/console/images/buttons/update_hover.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    14421692}
    14431693
    14441694input.delete, button.delete {
     1695     background: #eee url(/themes/console/images/buttons/delete.png) no-repeat 7px center;
    14451696     background: url(/themes/console/images/buttons/delete.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14461697     padding: 5px 7px 5px 23px;
     
    14491700input.delete:hover, button.delete:hover,
    14501701input.delete:focus, button.delete:focus {
     1702     background: #eee url(/themes/console/images/buttons/delete_hover.png) no-repeat 7px center;
    14511703     background: url(/themes/console/images/buttons/delete_hover.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    14521704}
    14531705
    14541706input.delete[value^="Ban"], button.delete[value^="Ban"] {
     1707     background: #eee url(/themes/console/images/buttons/ban.png) no-repeat 7px center;
    14551708     background: url(/themes/console/images/buttons/ban.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14561709     padding: 5px 7px 5px 23px;
     
    14591712input.delete[value^="Ban"]:hover, button.delete[value^="Ban"]:hover,
    14601713input.delete[value^="Ban"]:focus, button.delete[value^="Ban"]:focus {
     1714     background: #fff url(/themes/console/images/buttons/ban.png) no-repeat 7px center;
    14611715     background: url(/themes/console/images/buttons/ban.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    14621716}
    14631717
    14641718input.download, button.download {
     1719     background: #eee url(/themes/console/images/buttons/download.png) no-repeat 7px center;
    14651720     background: url(/themes/console/images/buttons/download.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14661721     padding: 5px 7px 5px 23px;
     
    14691724input.download:hover, button.download:hover,
    14701725input.download:focus, button.download:focus {
     1726     background: #fff url(/themes/console/images/buttons/download.png) no-repeat 7px center;
    14711727     background: url(/themes/console/images/buttons/download.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    14721728}
    14731729
    14741730input.download[value^="Join"], button.download[value^="Join"] {
     1731     background: #eee url(/themes/console/images/buttons/users.png) no-repeat 7px center;
    14751732     background: url(/themes/console/images/buttons/users.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14761733     padding: 5px 7px 5px 23px;
     
    14791736input.download[value^="Join"]:hover, button.download[value^="Join"]:hover,
    14801737input.download[value^="Join"]:focus, button.download[value^="Join"]:focus {
     1738     background: #fff url(/themes/console/images/buttons/users.png) no-repeat 7px center;
    14811739     background: url(/themes/console/images/buttons/users.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    14821740}
     
    14841742input.download[value$="from File"], button.download[value$="from File"],
    14851743input.download[value$="from file"], button.download[value$="from file"] {
     1744     background: #eee url(/themes/console/images/buttons/from-file.png) no-repeat 7px center;
    14861745     background: url(/themes/console/images/buttons/from-file.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14871746     padding: 5px 7px 5px 23px;
     
    14921751input.download[value$="from File"]:focus, button.download[value$="from File"]:focus,
    14931752input.download[value$="from file"]:focus, button.download[value$="from file"]:focus {
     1753     background: #fff url(/themes/console/images/buttons/from-file.png) no-repeat 7px center;
    14941754     background: url(/themes/console/images/buttons/from-file.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    14951755}
    14961756
    14971757input.download[value^="Dump"], button.download[value^="Dump"] {
     1758     background: #eee url(/themes/console/images/buttons/dump-threads.png) no-repeat 7px center;
    14981759     background: url(/themes/console/images/buttons/dump-threads.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    14991760     padding: 5px 7px 5px 23px;
     
    15021763input.download[value^="Dump"]:hover, button.download[value^="Dump"]:hover,
    15031764input.download[value^="Dump"]:focus, button.download[value^="Dump"]:focus {
     1765     background: #fff url(/themes/console/images/buttons/dump-threads.png) no-repeat 7px center;
    15041766     background: url(/themes/console/images/buttons/dump-threads.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    15051767}
    15061768
    15071769input.go, button.go, input[value="GO"] {
     1770     background: #eee url(/themes/console/images/buttons/go.png) no-repeat 7px center;
    15081771     background: url(/themes/console/images/buttons/go.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    15091772     padding: 5px 7px 5px 23px;
     
    15121775input.go:hover, button.go:hover, input[value="GO"]:hover,
    15131776input.go:focus, button.go:focus, input[value="GO"]:focus {
     1777     background: #fff url(/themes/console/images/buttons/go.png) no-repeat 7px center;
    15141778     background: url(/themes/console/images/buttons/go.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    15151779}
    15161780
    15171781input.go[value^="Create"], button.go[value^="Create"] {
     1782     background: #eee url(/themes/console/images/buttons/create-file.png) no-repeat 7px center;
    15181783     background: url(/themes/console/images/buttons/create-file.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    15191784     padding: 5px 7px 5px 23px;
     
    15221787input.go[value^="Create"]:hover, button.go[value^="Create"]:hover,
    15231788input.go[value^="Create"]:focus, button.go[value^="Create"]:focus {
     1789     background: #fff url(/themes/console/images/buttons/create-file.png) no-repeat 7px center;
    15241790     background: url(/themes/console/images/buttons/create-file.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    15251791}
    15261792
    15271793input.reload, button.reload {
     1794     background: #eee url(/themes/console/images/buttons/restore.png) no-repeat 7px center;
    15281795     background: url(/themes/console/images/buttons/restore.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    15291796     padding: 5px 7px 5px 23px;
     
    15321799input.reload:hover, button.reload:hover,
    15331800input.reload:focus, button.reload:focus {
     1801     background: #fff url(/themes/console/images/buttons/restore_hover.png) no-repeat 7px center;
    15341802     background: url(/themes/console/images/buttons/restore_hover.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    15351803}
    15361804
    15371805input.reload[value$="restart"], button.reload[value$="restart"] {
     1806     background: #eee url(/themes/console/images/buttons/restart.png) no-repeat 7px center;
    15381807     background: url(/themes/console/images/buttons/restart.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    15391808     padding: 5px 7px 5px 23px;
     
    15421811input.reload[value$="restart"]:hover, button.reload[value$="restart"]:hover,
    15431812input.reload[value$="restart"]:focus, button.reload[value$="restart"]:focus {
     1813     background: #fff url(/themes/console/images/buttons/restart_hover.png) no-repeat 7px center;
    15441814     background: url(/themes/console/images/buttons/restart_hover.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    15451815}
    15461816
    15471817input.reload[value^="Update"], button.reload[value^="Update"] {
     1818     background: #eee url(/themes/console/images/buttons/update.png) no-repeat 7px center;
    15481819     background: url(/themes/console/images/buttons/update.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    15491820     padding: 5px 7px 5px 23px;
     
    15521823input.reload[value^="Update"]:hover, button.reload[value^="Update"]:hover,
    15531824input.reload[value^="Update"]:focus, button.reload[value^="Update"]:focus {
     1825     background: #fff url(/themes/console/images/buttons/update_hover.png) no-repeat 7px center;
    15541826     background: url(/themes/console/images/buttons/update_hover.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    15551827}
    15561828
    15571829input.reload[value="Force GC"], button.reload[value="Force GC"] {
     1830     background: #eee url(/themes/console/images/buttons/clean.png) no-repeat 7px center;
    15581831     background: url(/themes/console/images/buttons/clean.png) no-repeat 7px center, linear-gradient(to bottom, #fff, #ddd);
    15591832     padding: 5px 7px 5px 23px;
     
    15621835input.reload[value="Force GC"]:hover, button.reload[value="Force GC"]:hover,
    15631836input.reload[value="Force GC"]:focus, button.reload[value="Force GC"]:focus {
     1837     background: #fff url(/themes/console/images/buttons/clean_hover.png) no-repeat 7px center;
    15641838     background: url(/themes/console/images/buttons/clean_hover.png) no-repeat 7px center, linear-gradient(to bottom, #ddd, #fff);
    15651839}
    15661840
    15671841input.stop, button.stop {
     1842     background: #eee url(/themes/console/images/buttons/shutdown.png) no-repeat 7px 6px;
    15681843     background: url(/themes/console/images/buttons/shutdown.png) no-repeat 7px 6px, linear-gradient(to bottom, #fff, #ddd);
    15691844     padding: 5px 7px 5px 23px;
     
    15721847input.stop:hover, button.stop:hover,
    15731848input.stop:focus, button.stop:focus {
     1849     background: #fff url(/themes/console/images/buttons/shutdown_hover.png) no-repeat 7px 6px;
    15741850     background: url(/themes/console/images/buttons/shutdown_hover.png) no-repeat 7px 6px, linear-gradient(to bottom, #ddd, #fff);
    15751851}
    15761852
    15771853button.search {
     1854     background: #eee url(/themes/console/images/buttons/search.png) no-repeat 7px 6px;
    15781855     background: url(/themes/console/images/buttons/search.png) no-repeat 7px 6px, linear-gradient(to bottom, #fff, #ddd);
    1579      padding: 5px 7px 5px 23px;
     1856     padding: 5px 7px 5px 25px;
    15801857}
    15811858
    15821859button.search:hover,
    15831860button.search:focus {
     1861     background: #fff url(/themes/console/images/buttons/search_hover.png) no-repeat 7px 6px;
    15841862     background: url(/themes/console/images/buttons/search_hover.png) no-repeat 7px 6px, linear-gradient(to bottom, #ddd, #fff);
    15851863}
     
    15951873
    15961874button.accept.control {
     1875     background: #eee url(/themes/console/images/buttons/Xstart.png) center center no-repeat;
    15971876     background: url(/themes/console/images/buttons/Xstart.png) center center no-repeat, linear-gradient(to bottom, #fff, #ddd);
    15981877}
    15991878
    16001879button.accept.control:hover, button.accept.control:focus {
     1880     background: #fff url(/themes/console/images/buttons/Xstart.png) center center no-repeat;
    16011881     background: url(/themes/console/images/buttons/Xstart.png) center center no-repeat, linear-gradient(to bottom, #ddd, #fff);
    16021882}
    16031883
    16041884button.stop.control {
     1885     background: #eee url(/themes/console/images/buttons/Xstop.png) center center no-repeat;
    16051886     background: url(/themes/console/images/buttons/Xstop.png) center center no-repeat, linear-gradient(to bottom, #fff, #ddd);
    16061887}
    16071888
    16081889button.stop.control:hover, button.stop.control:focus {
     1890     background: #fff url(/themes/console/images/buttons/Xstop.png) center center no-repeat;
    16091891     background: url(/themes/console/images/buttons/Xstop.png) center center no-repeat, linear-gradient(to bottom, #ddd, #fff);
    16101892}
    16111893
    16121894button.add.control {
     1895     background: #eee url(/themes/console/images/buttons/edit2.png) center center no-repeat;
    16131896     background: url(/themes/console/images/buttons/edit2.png) center center no-repeat, linear-gradient(to bottom, #fff, #ddd);
    16141897}
    16151898
    16161899button.add.control:hover, button.add.control:focus {
     1900     background: #fff url(/themes/console/images/buttons/edit2.png) center center no-repeat;
    16171901     background: url(/themes/console/images/buttons/edit2.png) center center no-repeat, linear-gradient(to bottom, #ddd, #fff);
    16181902}
    16191903
    16201904button.delete.control {
     1905     background: #eee url(/themes/console/images/buttons/delete.png) center center no-repeat;
    16211906     background: url(/themes/console/images/buttons/delete.png) center center no-repeat, linear-gradient(to bottom, #fff, #ddd);
    16221907}
    16231908
    16241909button.delete.control:hover, button.delete.control:focus {
     1910     background: #fff url(/themes/console/images/buttons/delete_hover.png) center center no-repeat;
    16251911     background: url(/themes/console/images/buttons/delete_hover.png) center center no-repeat, linear-gradient(to bottom, #ddd, #fff);
    16261912}
    16271913
    16281914button.check.control {
     1915     background: #eee url(/themes/console/images/buttons/update.png) center center no-repeat;
    16291916     background: url(/themes/console/images/buttons/update.png) center center no-repeat, linear-gradient(to bottom, #fff, #ddd);
    16301917}
    16311918
    16321919button.check.control:hover, button.check.control:focus {
     1920     background: #fff url(/themes/console/images/buttons/update_hover.png) center center no-repeat;
    16331921     background: url(/themes/console/images/buttons/update_hover.png) center center no-repeat, linear-gradient(to bottom, #ddd, #fff);
    16341922}
    16351923
    16361924button.download.control {
     1925     background: #eee url(/themes/console/images/buttons/download.png) center center no-repeat;
    16371926     background: url(/themes/console/images/buttons/download.png) center center no-repeat, linear-gradient(to bottom, #fff, #ddd);
    16381927}
    16391928
    16401929button.download.control:hover, button.download.control:focus {
     1930     background: #fff url(/themes/console/images/buttons/download.png) center center no-repeat;
    16411931     background: url(/themes/console/images/buttons/download.png) center center no-repeat, linear-gradient(to bottom, #ddd, #fff);
    16421932}
     
    16571947
    16581948.routersummary .reload, .routersummary .stop {
     1949     min-width: 92px !important;
    16591950     text-indent: -99999px;
    16601951     background-size: 16px 16px, 100% 100% !important;
     
    16621953
    16631954.routersummary .reload {
     1955     background: #eee url(/themes/console/images/buttons/restart.png) center center no-repeat !important;
    16641956     background: url(/themes/console/images/buttons/restart.png) center center no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
    16651957}
    16661958
    16671959.routersummary .reload:hover, .routersummary .reload:focus {
    1668      background: url(/themes/console/images/buttons/restart_hover.png) center center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
     1960     background: #ddd url(/themes/console/images/buttons/restart_hover.png) center center no-repeat !important;
    16691961     background: url(/themes/console/images/buttons/shutdown_hover.png) 37% center no-repeat, url(/themes/console/images/buttons/restart_hover.png) 63% center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
    16701962     border: 1px solid #89f;
     
    16771969
    16781970.routersummary .stop {
     1971     background: #eee url(/themes/console/images/buttons/shutdown.png) center center no-repeat;
    16791972     background: url(/themes/console/images/buttons/shutdown.png) center center no-repeat, linear-gradient(to bottom, #fff, #ddd);
    16801973}
     
    17001993
    17011994.routersummary .reload[value="restartImmediate"] {
     1995     background: #eee url(/themes/console/images/buttons/restart.png) center left 7px no-repeat !important;
    17021996     background: url(/themes/console/images/buttons/restart.png) center left 7px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
    17031997     background-size: 14px auto, 100% 100% !important;
     
    17051999
    17062000.routersummary .reload[value="restartImmediate"]:hover, .routersummary .reload[value="restartImmediate"]:focus, .routersummary .reload[value="restartImmediate"]:active {
     2001     background: #eee url(/themes/console/images/buttons/restart_hover.png) center left 7px no-repeat !important;
    17072002     background: url(/themes/console/images/buttons/restart_hover.png) center left 7px no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
    17082003     background-size: 14px auto, 100% 100% !important;
     
    17102005
    17112006.routersummary .stop[value="shutdownImmediate"] {
     2007     background: #eee url(/themes/console/images/buttons/shutdown.png) center left 7px no-repeat !important;
    17122008     background: url(/themes/console/images/buttons/shutdown.png) center left 7px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
    17132009     background-size: 14px auto, 100% 100% !important;
     
    17152011
    17162012.routersummary .stop[value="shutdownImmediate"]:hover, .routersummary .stop[value="shutdownImmediate"]:focus, .routersummary .stop[value="shutdownImmediate"]:active {
     2013     background: #eee url(/themes/console/images/buttons/shutdown_hover.png) center left 7px no-repeat !important;
    17172014     background: url(/themes/console/images/buttons/shutdown_hover.png) center left 7px no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
    17182015     background-size: 14px auto, 100% 100% !important;
     
    17202017
    17212018.routersummary .reload[value="Reseed"] {
     2019     background: #eee url(/themes/console/images/buttons/download.png) center left 7px no-repeat !important;
    17222020     background: url(/themes/console/images/buttons/download.png) center left 7px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
    17232021     background-size: 14px auto, 100% 100% !important;
     
    17252023
    17262024.routersummary .reload[value="Reseed"]:hover, .routersummary .reload[value="Reseed"]:focus, .routersummary .reload[value="Reseed"]:active {
     2025     background: #ddd url(/themes/console/images/buttons/download.png) center left 7px no-repeat !important;
    17272026     background: url(/themes/console/images/buttons/download.png) center left 7px no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
    17282027     background-size: 14px auto, 100% 100% !important;
     
    17302029
    17312030.routersummary .download {
     2031     background: #eee url(/themes/console/images/buttons/download.png) 7px center no-repeat;
    17322032     background: url(/themes/console/images/buttons/download.png) 7px center no-repeat, linear-gradient(to bottom, #fff, #ddd);
    17332033     background-size: 14px 14px, 100% 100% !important;
     
    17352035
    17362036.routersummary .download:hover, .routersummary .download:focus, .routersummary .download:active {
     2037     background: #ddd url(/themes/console/images/buttons/download.png) 7px center no-repeat;
    17372038     background: url(/themes/console/images/buttons/download.png) 7px center no-repeat, linear-gradient(to bottom, #ddd, #fff);
    17382039     background-size: 14px 14px, 100% 100% !important;
     
    18372138}
    18382139
     2140.main#dns {
     2141     background: linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.8)), url(images/bg0.png) !important;
     2142}
     2143
    18392144.main#tunnelmgr {
    18402145     padding: 0 10px;
     
    18422147}
    18432148
    1844 .main#help {
     2149#help {
    18452150     background: linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.1)), url(images/bg0.png) !important;
    18462151}
     
    19462251}
    19472252
    1948 div.news a, #warning a {
     2253div.news a {
    19492254     color: #7f560f !important;
    19502255}
    19512256
    1952 div.news a:hover, div.news a:focus, div.news a:visited:hover, div.news a:visited:focus, #warning a:hover, #warning a:focus {
     2257div.news a:hover, div.news a:focus, div.news a:visited:hover, div.news a:visited:focus {
    19532258     color: #f60 !important;
    19542259}
    19552260
    1956 div.news a:visited, #warning a:visited {
     2261div.news a:visited {
    19572262     color: #5f4312 !important;
    19582263}
     
    20262331/* top navigation */
    20272332
    2028 div.confignav {
    2029      padding: 5px;
     2333.confignav {
     2334     padding: 5px 5px 6px;
    20302335     margin: -16px -16px 5px -16px;
    20312336     border: 1px solid #89f;
     
    21782483
    21792484#bandwidthconfig td:first-child {
    2180      width: 10%;
     2485     width: 25%;
    21812486     white-space: nowrap;
    21822487}
     
    29323237     text-align: left;
    29333238     border: 1px solid #89f;
    2934      padding: 19px 20px;
     3239     padding: 18px 20px 16px;
    29353240     margin: 0 0 0 211px;
    29363241     line-height: 93%;
     
    31033408
    31043409h2, h3, h4#updateplugins {
    3105      background: url(images/titlebg.png) right center no-repeat;
     3410     background: #fff url(images/titlebg.png) right center no-repeat;
    31063411     background: linear-gradient(to bottom, #fff 50%, #eff2ff 50%);
    31073412     box-shadow: inset 0 0 0 1px #fff;
     
    32703575h4.app {
    32713576     margin-top: -5px;
     3577     background: #fefeff url(/themes/console/images/favicon.ico) 8px center no-repeat;
    32723578     background: url(/themes/console/images/eepsite.png) 8px center no-repeat, linear-gradient(to bottom, #fff 50%, #eff2ff 50%);
    32733579     background-size: 16px 16px, 100% 100%;
     
    32793585     clear: left;
    32803586     margin-top: 5px !important;
     3587     background: #fefeff url(/themes/console/light/images/globe.png) 8px center no-repeat;
    32813588     background: url(/themes/console/images/info/globe.png) 8px center no-repeat, linear-gradient(to bottom, #fff 50%, #eff2ff 50%);
    32823589     background-size: 16px 16px, 100% 100%;
     
    34133720}
    34143721
     3722.search td {
     3723     padding: 1px 0;
     3724}
     3725
    34153726.search td:nth-child(2) {
    34163727     text-align: center !important;
    3417      padding: 0;
    34183728}
    34193729
     
    39844294}
    39854295
     4296.graphspanel a {
     4297     font-size: 0;
     4298}
     4299
    39864300.graphspanel hr {
    39874301     margin: 10px 0;
     
    42734587}
    42744588
     4589.themechoice .optbox:checked + img, .themechoice .optbox:checked + object {
     4590     transform: scale(0.9);
     4591}
     4592
    42754593.themechoice .optbox:focus + object ~ div.themelabel {
    42764594     color: #f60 !important;
     
    42974615     position: relative;
    42984616     top: 4px;
    4299      padding: 5px 10px 3px 5px;
     4617     padding: 5px 10px 5px 5px;
    43004618}
    43014619
     
    43224640
    43234641#themeoptions input {
    4324      margin: 6px 8px 6px 6px;
     4642     margin: 2px 8px 2px 6px;
    43254643     vertical-align: sub;
    43264644}
     
    44824800     margin: 0 -5px;
    44834801}
     4802
     4803/* large flags */
     4804
     4805.langselect img {
     4806     margin-top: 2px !important;
     4807     margin-bottom: 34px !important;
     4808     margin-left: -70px !important;
     4809     width: 40px;
     4810     height: 40px;
     4811     border: none !important;
     4812     box-shadow: none;
     4813     opacity: 0.9 !important;
     4814     transform: none !important;
     4815     filter: drop-shadow(0 0 1px #77d);
     4816}
     4817
     4818.langselect input[name="lang"]:checked + img, .langselect input[name="lang"]:checked + #config_ui img[src="/flags.jsp?c=a1"] {
     4819     margin-top: 6px !important;
     4820     margin-bottom: 38px !important;
     4821     width: 32px !important;
     4822     height: 32px !important;
     4823     border: none !important;
     4824     box-shadow: none !important;
     4825     opacity: 1 !important;
     4826     transform: none !important;
     4827     animation: glow 20s 10s infinite;
     4828}
     4829
     4830.langselect input:hover + img {
     4831     box-shadow: none !important;
     4832     border: none !important;
     4833     transition: none !important;
     4834     filter: drop-shadow(0 0 2px #f60);
     4835}
     4836
     4837/*
     4838.langselect input[name="lang"]:checked + img + .ui_lang {
     4839     margin: -24px -4px 0;
     4840}
     4841*/
     4842
     4843@keyframes glow {
     48440% {
     4845     filter: drop-shadow(0 0 1px rgba(256, 100, 0, 0.1));
     4846}
     4847
     484820% {
     4849     filter: drop-shadow(0 0 1px #f60);
     4850}
     4851
     485250% {
     4853     filter: drop-shadow(0 0 2px #930);
     4854}
     4855
     485680% {
     4857     filter: drop-shadow(0 0 1px #d40);
     4858}
     4859
     4860100% {
     4861     filter: drop-shadow(0 0 1px rgba(256, 100, 0, 0.1));
     4862}
     4863}
     4864
     4865/* end large flags */
    44844866
    44854867/* configui password*/
     
    52435625}
    52445626
    5245 .main#help h2 {
     5627#help h2 {
    52465628     margin: -16px -16px 0;
    52475629}
    52485630
    5249 .main#help h3 {
     5631#help h3 {
    52505632     margin: -5px -16px 3px;
    52515633}
    52525634
    5253 .main#help p {
     5635#help p {
    52545636     padding: 5px 0 0;
    52555637     margin-top: 0;
    52565638}
    52575639
    5258 .main#help ul {
    5259      margin-bottom: 5px;
    5260      margin-top: -5px;
     5640#help ul {
     5641     margin-bottom: 8px;
     5642     margin-top: -2px;
    52615643     padding-left: 15px;
    52625644}
    52635645
    5264 .main#help ul li:first-child {
     5646#help ul li:first-child {
    52655647     padding-top: 0;
    52665648     margin-top: 10px !important;
     
    52725654}
    52735655
     5656#help code, #help tt {
     5657     font-size: 8pt;
     5658}
     5659
    52745660ul#reachability {
    52755661     padding-left: 15px;
     5662}
     5663
     5664#help li {
     5665     text-align: justify;
     5666     margin-left: 20px;
     5667     margin-right: 0;
     5668}
     5669
     5670#help li, #help p, #help td {
     5671     line-height: 140%;
    52765672}
    52775673
     
    52905686}
    52915687
    5292 .main#help pre {
     5688#help pre {
    52935689     padding-left: 0;
    52945690     padding-bottom: 20px;
     
    53215717}
    53225718
    5323 .main#help td.infohelp, .main#help td.infowarn, .main#help td.infohelp, .main#help p.infohelp {
     5719#help td.infohelp, #help td.infowarn, #help td.infohelp, #help p.infohelp {
    53245720     background-size: 24px 24px !important;
    53255721     padding-left: 46px !important;
     
    54985894}
    54995895
    5500 .main#help #configinfo td.infowarn {
     5896#help #configinfo td.infowarn {
    55015897     padding: 10px 10px 10px 38px !important;
    55025898     border: 1px solid #89f;
     
    55785974#floodfillconfig tr:nth-child(2) b {
    55795975     margin-right: 8px;
     5976}
     5977
     5978#floodfillconfig input[type="radio"] {
     5979     margin-right: 3px;
    55805980}
    55815981
     
    68777277/* end whitespace reduction */
    68787278
    6879 .main#help h3, #faq h3 {
     7279#help h3, #faq h3 {
    68807280     font-size: 10pt !important;
    68817281}
     
    68877287
    68887288@media screen and (max-width: 1500px) {
    6889 #sb_general td:first-child::after, #sb_shortgeneral td:first-child::after, #sb_bandwidth td:first-child::after,
    6890 #sb_peers td:first-child::after, #sb_tunnels td:first-child::after, #sb_queue td:first-child::after {
     7289#sb_general td::after, #sb_shortgeneral td::after, #sb_advancedgeneral td::after, #sb_bandwidth td::after,
     7290#sb_peers td::after, #sb_peersadvanced td::after, #sb_tunnels td::after, #sb_queue td::after {
    68917291   min-height: 12px;
    68927292}
     
    69137313}
    69147314
    6915 .main#help h3, #faq h3 {
     7315#help h3, #faq h3 {
    69167316     font-size: 10.5pt !important;
    69177317}
     
    69327332
    69337333@media screen and (min-width: 1400px) {
    6934 .main#help #changelog pre:not(old) {
     7334#help #changelog pre:not(old) {
    69357335     columns: 560px auto;
    69367336     column-gap: 40px;
     
    69507350
    69517351.routersummary td, .routersummary a, .routersummary button, .routersummary h4, .routersummary h4 a, div.news, #banlist li,
    6952 .news #newsStatus, .news #newsDisplay, .topness, .footnote, .cells tt, #profilelist tt, .sb_notice {
     7352.news #newsStatus, .news #newsDisplay, .topness, .footnote, .cells tt, #profilelist tt, .sb_notice, #help code, #help tt {
    69537353     font-size: 9pt !important;
     7354}
     7355
     7356.routersummary .reload, .routersummary .stop {
     7357     min-width: 102px !important;
    69547358}
    69557359
     
    69897393}
    69907394
    6991 #sb_internals a, #sb_services a, #sb_advanced a {
     7395#sb_internals a, #sb_services a, #sb_advanced a, #sb_help a {
    69927396     max-width: 212px;
    69937397}
     
    69967400     min-width: 100px;
    69977401     margin: 2px 4px 1px;
     7402}
     7403
     7404.percentBarOuter {
     7405     width: 217px;
    69987406}
    69997407
  • installer/resources/themes/console/classic/console_big.css

    r9ae9abd rbf42cc1  
    6767}
    6868
    69 #sb_bandwidth td:last-child, #sb_peers td:last-child, #sb_queue td:last-child,  #sb_tunnels td:last-child, #sb_general td:last-child, #sb_shortgeneral td:last-child {
     69#sb_bandwidth td:last-child, #sb_peers td:last-child, #sb_peersadvanced td:last-child, #sb_queue td:last-child,  #sb_tunnels td:last-child, #sb_general td:last-child, #sb_shortgeneral td:last-child, #sb_advancedgeneral td:last-child {
    7070     font-size: 10pt !important;
    7171}
     
    7575     font-weight: normal;
    7676     text-shadow: none;
     77}
     78
     79#sb_bandwidthgraph {
     80     width: 218px !important;
     81     margin: -25px 0 -6px !important;
     82}
     83
     84#sb_graphstats {
     85     font-size: 9pt !important;
     86}
     87
     88#sb_graphcontainer {
     89     background-position: left -66px top -30px !important;
     90     background-size: 340px 80px !important;
     91}
     92
     93.percentBarOuter {
     94     width: 212px !important;
     95     margin: -3px 0 -4px 3px;
     96}
     97
     98.percentBarText {
     99     font-size: 9pt !important;
     100     padding: 0 !important;
     101     margin-top: -1px;
    77102}
    78103
  • installer/resources/themes/console/classic/i2ptunnel.css

    r9ae9abd rbf42cc1  
    711711}
    712712
    713 input.tunnelName, input.tunnelDescription, #userAgents {
     713input.tunnelName, input.tunnelDescriptionText, #userAgents {
    714714     width: 80%;
    715715     min-width: 280px;
     
    894894}
    895895
    896 #clientTunnels .tunnelDescription {
     896.tunnelDescription {
    897897     padding-top: 1px !important;
    898898}
  • installer/resources/themes/console/dark/console.css

    r9ae9abd rbf42cc1  
    172172}
    173173
     174.warning hr {
     175     margin-top: 10px !important;
     176}
     177
    174178#jumplinks h4 {
     179     padding-bottom: 10px;
    175180     margin-bottom: 10px;
    176181}
     
    329334     border-radius: 0;
    330335     mix-blend-mode: exclusion;
     336     transition: ease all 0.2s;
    331337}
    332338
     
    340346.routersummary h3 a {
    341347     vertical-align: middle;
     348     transition: ease all 0.2s;
    342349}
    343350
     
    345352     background: #010 !important;
    346353     box-shadow: inset 0 0 2px 2px #000;
     354     transition: ease all 0.2s;
    347355}
    348356
    349357.routersummary h3:hover a {
    350358     color: #f60;
     359     transition: ease all 0.2s;
    351360}
    352361
    353362.routersummary h3:active {
    354      box-shadow: inset 4px 4px 2px #000;
     363     box-shadow: inset 4px 4px 4px #000;
    355364}
    356365
     
    398407}
    399408
    400 #sb_general, #sb_shortgeneral, #sb_bandwidth, #sb_peers, #sb_tunnels, #sb_queue {
     409#sb_general, #sb_shortgeneral, #sb_advancedgeneral, #sb_bandwidth, #sb_peers, #sb_peersadvanced, #sb_tunnels, #sb_queue {
    401410     margin-bottom: -4px !important;
    402411}
    403412
    404 #sb_general td::after, #sb_shortgeneral td::after, #sb_bandwidth td::after,
    405 #sb_peers td::after, #sb_tunnels td::after, #sb_queue td::after {
     413#sb_general td::after, #sb_shortgeneral td::after, #sb_advancedgeneral td::after, #sb_bandwidth td::after,
     414#sb_peers td::after, #sb_peersadvanced td::after, #sb_tunnels td::after, #sb_queue td::after {
    406415   content: "";
    407416   display: inline-block;
     
    409418}
    410419
    411 #sb_general td, #sb_shortgeneral td {
     420#sb_general td, #sb_shortgeneral td, #sb_advancedgeneral td, #sb_peersadvanced td {
    412421     white-space: nowrap;
    413422}
    414423
    415 #sb_general td:first-child, #sb_shortgeneral td:first-child {
     424#sb_general td:first-child, #sb_shortgeneral td:first-child,  #sb_advancedgeneral td:first-child, #sb_peersadvanced td:first-child {
    416425     max-width: 130px;
    417426}
     
    458467}
    459468
    460 #sb_internals td, #sb_services td, #sb_advanced td { /* color ellipsis */
     469#sb_warning + p:empty + form {
     470     margin-top: 11px;
     471     margin-bottom: -6px;
     472}
     473
     474#sb_internals td, #sb_services td, #sb_advanced td, #sb_help td { /* color ellipsis */
    461475     color: #595 !important;
    462476}
    463477
    464 #sb_services, #sb_internals, #sb_advanced {
     478#sb_services, #sb_internals, #sb_advanced, #sb_help {
    465479     margin-top: -4px !important;
    466480}
    467481
    468 #sb_internals a, #sb_services a, #sb_advanced a {
     482#sb_internals a, #sb_services a, #sb_advanced a, #sb_help a {
    469483     padding: 1px 3px;
    470484     display: inline-block;
     
    481495}
    482496
    483 #sb_services a:link, #sb_internals a:link, #sb_advanced a:link {
     497#sb_services a:link, #sb_internals a:link, #sb_advanced a:link, #sb_help a:link {
    484498     word-break: break-all;
    485499     max-width: 192px;
     
    488502     text-overflow: ellipsis;
    489503     line-height: 140%;
     504}
     505
     506#sb_peersadvanced a {
     507     color: #ee9;
     508}
     509
     510#sb_peersadvanced .separator td::after {
     511     min-height: 0;
     512}
     513
     514.routersummary .separator hr, .routersummary .separator hr:last-child {
     515     display: block !important;
     516     color: transparent;
     517     background: transparent;
     518     border-bottom: 1px dashed #141;
     519     height: 1px;
     520     margin: 4px 0 3px !important;
    490521}
    491522
     
    679710
    680711/* end sidebar news */
     712
     713/* mini sidebar graph */
     714
     715#sb_bandwidthgraph {
     716     width: 100%;
     717     margin: -5px 0 -5px -5px;
     718     border-collapse: separate;
     719     border-spacing: 0;
     720     padding: 0;
     721     border: 1px solid #5df;
     722     border: 1px solid rgba(85, 221, 255, 0.5);
     723     box-shadow: 0 0 1px #ccf;
     724}
     725
     726#sb_bandwidthgraph:hover {
     727     border: 1px solid #0f6;
     728     cursor: url(/themes/console/images/cursor_zoom.png), pointer;
     729}
     730
     731a:active #sb_bandwidthgraph {
     732     border: 1px solid #0f3;
     733}
     734
     735#sb_bandwidthgraph td {
     736     background: linear-gradient(to top, #fff 2px, rgba(255,255,255,0.0) 2px, rgba(255,255,255,0.0) 89%, #fff 93%), repeating-linear-gradient(to right, rgba(255,255,255,0.0) 10px, rgba(120,120,255,0.8) 11px, rgba(255,255,255,0.0) 11px, rgba(255,255,255,0.0) 20px), repeating-linear-gradient(to top, rgba(255,255,255,0.0) 1px, rgba(120,120,255,0.8) 2px, rgba(255,255,255,0.0) 2px, rgba(255,255,255,0.0) 10px) !important;
     737     padding: 0 1px;
     738     box-shadow: inset 0 0 0 1px #fff;
     739     height: 40px;
     740     vertical-align: top;
     741}
     742
     743#sb_graphstats {
     744     display: inline-block;
     745     padding: 2px 8px;
     746     font-weight: bold;
     747     background: #ddf;
     748     background: linear-gradient(to right, #ddf, #efefff, #ddf);
     749     border: 1px solid #89f;
     750     border-top: none;
     751     border-radius: 0 0 3px 3px;
     752     box-shadow: inset 0 0 0 1px #fff, 0 0 1px #fff;
     753     opacity: 0;
     754     transition: ease opacity 0.3s;
     755     color: #89f;
     756}
     757
     758#sb_graphcontainer:hover #sb_graphstats {
     759     opacity: 1;
     760     transition: ease opacity 0.3s;
     761}
     762
     763#sb_graphcontainer {
     764     background-color: #000;
     765     background-position: left -72px top -23px !important;
     766     background-size: 280px 77px !important;
     767     background-repeat: no-repeat !important;
     768     margin-bottom: -7px !important;
     769     filter: invert(1) hue-rotate(90deg);
     770}
     771
     772/* reduce flicker as graph image gets inverted and hue-rotated */
     773
     774@keyframes graphfadein {
     775from {
     776     filter: invert(1) hue-rotate(90deg) opacity(0);
     777}
     778
     779to {
     780     filter: invert(1) hue-rotate(90deg) opacity(1);
     781}
     782}
     783
     784#sb_graphcontainer {
     785     animation: graphfadein 0.3s ease-in;
     786}
     787
     788@media screen and (min-width: 1500px) {
     789#sb_graphcontainer {
     790     background-size: 300px 77px !important;
     791}
     792}
     793/* end mini sidebar graph */
     794
     795/* status bar */
     796
     797.percentBarOuter {
     798     width: 194px;
     799     background: #000;
     800     background: repeating-linear-gradient(135deg, #000 1px, #000 5px, #010 6px, #010 11px);
     801     background: repeating-linear-gradient(to right, #000 1px, #000 2px, #010 2px, #010 4px);
     802     border: 1px solid #040;
     803     border-bottom: 1px solid #020;
     804     border-right: 1px solid #020;
     805     opacity: 1;
     806     box-shadow: 0 0 1px 1px rgba(0,0,0,0.8);
     807     margin: -3px 0 -5px -6px;
     808}
     809
     810@media screen and (min-width: 1500px) {
     811.percentBarOuter {
     812     width: 220px;
     813}
     814}
     815
     816.percentBarOuter:hover .percentBarText {
     817     opacity: 1;
     818     transition: ease opacity 0.2s;
     819}
     820
     821.percentBarInner {
     822     height: 14px;
     823     background: #0e5f00;
     824     background: linear-gradient(to bottom, rgba(28, 148, 58, 0.6) 0%, rgba(9, 47, 16, 0.6) 50%, rgba(13, 39, 7, 0.6) 50%, rgba(9, 27, 5, 0.6) 50%, rgba(9, 21, 3, 0.6) 100%);
     825     box-shadow: inset 0 0 0 1px #000;
     826}
     827
     828.percentBarText {
     829     width: 100%;
     830     font-weight: bold;
     831     text-align: center;
     832     vertical-align: middle;
     833     float: left;
     834     opacity: 0;
     835     transition: ease opacity 0.2s;
     836}
     837
     838/* update bar */
     839