diff --git a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java index 9a1aae4a93461eca633e1a2f3d476cb8954f928d..420d6bbeaced2286351073b79aa59725a786c282 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java @@ -35,7 +35,7 @@ public class HomeHelper extends HelperBase { _x("Help") + S + _x("I2P Router Help") + S + "/help" + S + I + "support.png" + S + _x("Manage Plugins") + S + _x("Install and configure I2P plugins") + S + "/configplugins" + S + I + "plugin.png" + S + _x("Router Console") + S + _x("I2P Router Console") + S + "/console" + S + I + "info/console.png" + S + - _x("Torrents") + S + _x("Built-in anonymous BitTorrent Client") + S + "/i2psnark/" + S + I + "magnet.png" + S + + _x("Torrents") + S + _x("Built-in anonymous BitTorrent Client") + S + "/i2psnark/" + S + I + "i2psnark.png" + S + _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 + ""; @@ -61,7 +61,7 @@ public class HomeHelper extends HelperBase { _x("Open4You") + S + _x("Free eepsite hosting with PHP and MySQL") + S + "http://open4you.i2p/" + S + I + "open4you-logo.png" + S + _x("Pastebin") + S + _x("Encrypted I2P Pastebin") + S + "http://zerobin.i2p/" + S + I + "paste_plain.png" + S + _x("Planet I2P") + S + _x("I2P News") + S + "http://planet.i2p/" + S + I + "world.png" + S + - _x("I2P Plugins") + S + _x("Add-on directory") + S + "http://i2pwiki.i2p/index.php?title=Plugins" + S + I + "plugin.png" + S + + _x("I2P Plugins") + S + _x("Add-on directory") + S + "http://i2pwiki.i2p/index.php?title=Plugins" + S + I + "info/plugin_link.png" + S + _x("Postman's Tracker") + S + _x("Bittorrent tracker") + S + "http://tracker2.postman.i2p/" + S + I + "magnet.png" + S + _x("Project Website") + S + _x("I2P home page") + S + "http://i2p-projekt.i2p/" + S + I + "info_rhombus.png" + S + //_x("lenta news [ru]") + S + _x("Russian News Feed") + S + "http://lenta.i2p/" + S + I + "lenta_main_logo.png" + S + diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java index 615316a024a6c8f019770d0b9a5559d7efc388ab..4f57dcf4ee7b06836038235f61375ff77bd369e9 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java @@ -309,7 +309,7 @@ class NetDbRenderer { buf.append("<table class=\"leaseset\">\n") .append("<tr><th><b>").append(_t("LeaseSet")).append(":</b> <code>").append(key.toBase64()).append("</code></th>"); if (_context.clientManager().isLocal(dest)) { - buf.append("<th><b><a href=\"tunnels#" + key.toBase64().substring(0,4) + "\">" + _t("Local") + "</a> "); + buf.append("<th><a href=\"tunnels#" + key.toBase64().substring(0,4) + "\">" + _t("Local") + "</a> "); boolean unpublished = ! _context.clientManager().shouldPublishLeaseSet(key); if (unpublished) buf.append(_t("Unpublished") + ' '); @@ -319,13 +319,13 @@ class NetDbRenderer { buf.append(in.getDestinationNickname()); else buf.append(dest.toBase64().substring(0, 6)); - buf.append("</th></tr>\n<tr><td>"); + buf.append("</th></tr>\n<tr><td colspan=\"2\">"); String b32 = dest.toBase32(); buf.append("<a href=\"http://").append(b32).append("\">").append(b32).append("</a></td>"); if (!unpublished) { String host = _context.namingService().reverseLookup(dest); if (host == null) { - buf.append("<td>").append("<a title=\"").append(_t("Add to addressbook")) + buf.append("<td class=\"addtobook\" colspan=\"2\">").append("<a title=\"").append(_t("Add to addressbook")) .append("\" href=\"/susidns/addressbook.jsp?book=private&destination=") .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a></td>"); } @@ -340,7 +340,7 @@ class NetDbRenderer { buf.append("<code>").append(dest.toBase64().substring(0, 6)).append("</code></th>") .append("</tr>\n<tr>") .append("<td><a href=\"http://").append(b32).append("\">").append(b32).append("</a></td>\n") - .append("<td><a title=\"").append(_t("Add to addressbook")) + .append("<td class=\"addtobook\"><a title=\"").append(_t("Add to addressbook")) .append("\" href=\"/susidns/addressbook.jsp?book=private&destination=") .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a></td>"); } @@ -361,7 +361,7 @@ class NetDbRenderer { if (c++ == medianCount) median = dist; } - buf.append(" <b>Distance: </b><span id=\"distance\">").append(fmt.format(biLog2(dist))).append("</span></b>"); + buf.append(" <b>Distance: </b><span id=\"distance\">").append(fmt.format(biLog2(dist))).append("</span>"); buf.append("</td></tr>\n<tr><td colspan=\"2\">"); //buf.append(dest.toBase32()).append("<br>"); buf.append("<b>Signature type:</b> ").append(dest.getSigningPublicKey().getType()); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java index 568253bfeb482aac00cfb522a2aa265ba2ebb938..271a96d553bf220699247daafae25f29545495cb 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java @@ -82,7 +82,7 @@ public class StatsGenerator { out.write(buf.toString()); buf.setLength(0); for (String stat : stats) { - buf.append("<li><b><a name=\""); + buf.append("<li class=\"statsName\"><b><a name=\""); buf.append(stat); buf.append("\">"); buf.append(stat); @@ -152,9 +152,9 @@ public class StatsGenerator { RateStat rate = _context.statManager().getRate(name); String d = rate.getDescription(); if (! "".equals(d)) { - buf.append("<i>"); + buf.append("<span class=\"statsLongName\"><i>"); buf.append(d); - buf.append("</i><br>"); + buf.append("</i></span><br>"); } if (rate.getLifetimeEventCount() <= 0) { buf.append("<ul><li class=\"noevents\">").append(_t("No lifetime events")).append("</li></ul>\n"); @@ -177,14 +177,14 @@ public class StatsGenerator { buf.append(_t("Highest average")); buf.append(": "); buf.append(num(curRate.getExtremeAverageValue())); - buf.append("; "); + buf.append(". "); // This is rarely interesting // Don't bother to translate if (showAll) { buf.append("Highest total in a period: "); buf.append(num(curRate.getExtremeTotalValue())); - buf.append("; "); + buf.append(". "); } // Saturation stats, which nobody understands, even when it isn't meaningless @@ -198,32 +198,34 @@ public class StatsGenerator { buf.append(pct(curRate.getExtremeEventSaturation())); buf.append("; Peak saturated limit: "); buf.append(num(curRate.getExtremeSaturationLimit())); - buf.append("; "); + buf.append(". "); } + buf.append("<span class=\"nowrap\">"); buf.append(ngettext("There was 1 event in this period.", "There were {0} events in this period.", (int)curRate.getLastEventCount())); - buf.append(' '); + buf.append("</span> <span class=\"nowrap\">"); buf.append(_t("The period ended {0} ago.", DataHelper.formatDuration2(now - curRate.getLastCoalesceDate()))); + buf.append("</span>"); } else { - buf.append(" <i>").append(_t("No events")).append("</i> "); + buf.append(" <i>").append(_t("No events")).append(" </i>"); } long numPeriods = curRate.getLifetimePeriods(); if (numPeriods > 0) { double avgFrequency = curRate.getLifetimeEventCount() / (double)numPeriods; - buf.append(" (").append(_t("Average event count")).append(": "); + buf.append(" <span class=\"nowrap\">(").append(_t("Average event count")).append(": "); buf.append(num(avgFrequency)); buf.append("; ").append(_t("Events in peak period")).append(": "); // This isn't really the highest event count, but the event count during the period with the highest total value. buf.append(curRate.getExtremeEventCount()); - buf.append(")"); + buf.append(")</span>"); } if (curRate.getSummaryListener() != null) { - buf.append("<br><a href=\"graph?stat=").append(name) + buf.append("<br><span class=\"statsViewGraphs\"><a href=\"graph?stat=").append(name) .append('.').append(periods[i]); - buf.append("\">").append(_t("Graph Data")).append("</a> - "); + buf.append("&w=600&h=200\">").append(_t("Graph Data")).append("</a> - "); buf.append(" <a href=\"graph?stat=").append(name) .append('.').append(periods[i]); - buf.append("&showEvents=true\">").append(_t("Graph Event Count")).append("</a>"); + buf.append("&w=600&h=200&showEvents=true\">").append(_t("Graph Event Count")).append("</a></span>"); // This can really blow up your browser if you click on it //buf.append(" - <a href=\"viewstat.jsp?stat=").append(name); //buf.append("&period=").append(periods[i]); diff --git a/history.txt b/history.txt index 69ddc3142152e714073e6ea1629ddcc7f60adf3e..233c2fb85d952107368b76f7d762224604b2c5ff 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,15 @@ +2017-06-03 str4d + * Console: + - Add spans to /stats page to avoid summary info breaking mid-sentence, and + to aid presentation + - Adjust /stats CSS so information isn't over-dense + - Set graph size for generated graphs on /stats to 600x200 + - Fix netdb leaseset tables + - Ensure we only iconify add to addressbook links and not b32 dests + - Individual icons for I2PSnark and I2P Plugins on /home + - Add div to upnpstatus on peers to comply with layout + - Fix various unclosed/erroneous tags + 2017-05-25 zzz * Crypto: Fix AES NPE on 4-core RPi 2nd try (ticket #1989) diff --git a/installer/resources/themes/console/classic/console.css b/installer/resources/themes/console/classic/console.css index 27af6e7908fdabb0c20f7581d41ad991e203c37f..14e98137e21148da5a4b83178bbe7534442b837a 100644 --- a/installer/resources/themes/console/classic/console.css +++ b/installer/resources/themes/console/classic/console.css @@ -3084,7 +3084,6 @@ div.joblog li { div.joblog ul { word-wrap: break-word !important; - text-align: justify; } div.joblog li:first-child { @@ -4236,12 +4235,12 @@ a.viewfullentry:hover { width: 10px; } -table.leaseset { +.leaseset { font-size: 9pt; margin: 5px 0 10px; } -table.leaseset:last-child { +.leaseset:last-child { margin-bottom: 5px; } @@ -4256,19 +4255,23 @@ table.leaseset:last-child { padding-right: 5px; } -.leaseset tr:nth-child(2) td:last-child a:not(old) { +.addtobook { + text-align: right; +} + +.addtobook a:not(old) { font-size: 0; } -.leaseset tr:nth-child(2) td:last-child a::after { +.addtobook a::after { content: url(/themes/console/images/buttons/add_address.png); } -.leaseset tr:nth-child(2) td:last-child a:hover { +.addtobook a:hover { filter: drop-shadow(0 0 1px #f60); } -div#noleasesets { +#noleasesets { border: 1px solid #89f; padding: 20px; font-weight: bold; @@ -4277,14 +4280,14 @@ div#noleasesets { text-align: center; } -div#sybilnav, div#sybils_summary { +#sybilnav, #sybils_summary { border: 1px solid #89f; padding: 10px; margin-bottom: 10px; background: #fff; } -div#sybilnav { +#sybilnav { padding: 5px 5px 0; } @@ -4303,11 +4306,11 @@ div#sybilnav { line-height: 100%; } -table.sybil_routerinfo { +.sybil_routerinfo { margin-bottom: 10px; } -table.sybil_routerinfo:last-child { +.sybil_routerinfo:last-child { margin-bottom: 5px; } @@ -4315,7 +4318,7 @@ table.sybil_routerinfo:last-child { padding: 1px 1px 1px 6px !important; } -table.sybil_routerinfo:first-of-type th { +.sybil_routerinfo:first-of-type th { padding: 6px !important; } @@ -4351,7 +4354,7 @@ table.sybil_routerinfo:first-of-type th { font-weight: normal; } -div#sybilnav { +#sybilnav { background: #eff1ff; -moz-columns: 4 200px; -webkit-columns: 4 200px; @@ -4490,7 +4493,7 @@ h3.stats { border-radius: 0; } -ul.statlist { +.statlist { border: 1px solid #89f; padding: 0 10px 0 0; margin-left: 0 !important; @@ -4498,11 +4501,11 @@ ul.statlist { background: #eff1ff; } -ul.statlist:last-of-type { +.statlist:last-of-type { margin-bottom: -22px !important; } -ul.statlist a[name], ul.statlist b, ul.statlist li b, ul.statlist a[name]:hover { +.statlist a[name], .statlist b, .statlist li b, .statlist a[name]:hover { text-decoration: none; letter-spacing: normal; font-size: 9pt; @@ -4513,35 +4516,33 @@ ul.statlist a[name], ul.statlist b, ul.statlist li b, ul.statlist a[name]:hover display: none !important; } -ul.statlist li b, ul.statlist b a:hover, h3.stats a:hover { +.statlist li b, .statlist b a:hover, h3.stats a:hover { color: #0c153d !important; } -ul.statlist li::before { +.statlist li::before { content: "\2B26\00A0"; margin-left: 5px; font-size: 14pt; line-height: 60%; vertical-align: baseline; color: #0c153d; - filter: drop-shadow(0 0 1px #ccc); } -ul.statlist li { +.statlist li { margin-left: 5px; padding: 2px; list-style: none; } -ul.statlist li li { +.statlist li li { margin-left: 16px; margin-right: -20px; margin-top: 2px; - line-height: 130% !important; + line-height: 150% !important; list-style: none; - padding: 2px 0; - border-top: 1px dotted #89f; - text-align: justify; + padding: 2px 0 2px 5px; + text-align: left; } .statlist li li:first-child { @@ -4550,7 +4551,7 @@ ul.statlist li li { padding-top: 2px; } -ul.statlist li li::before { +.statlist li li::before { content: "\279F\00A0"; vertical-align: baseline; margin-left: 3px; @@ -4561,7 +4562,6 @@ ul.statlist li li::before { color: #33a; font-size: 14pt; margin-left: 4px; - filter: drop-shadow(0 0 1px #ccc); } .main#stats a[href^="graph?"]:hover::before { @@ -4572,27 +4572,33 @@ ul.statlist li li::before { display: none; } -ul.statlist li li:last-child { +.statlist li li:last-child { padding-bottom: 2px; - border: 1px dotted #89f; + padding-left: 5px; + border: 1px solid rgba(136, 153, 255, 0.3); background: #fff; background: linear-gradient(to right, #fff 0%, #eef 70%, #ddf 100%); box-shadow: inset 0 0 0 1px #fff; } -ul.statlist li:last-child { +.statlist li li.noevents { + margin-top: 15px !important; +} + +.statlist li:last-child { padding-bottom: 15px; margin-top: 2px; } -ul.statlist li:first-child { +.statlist li:first-child { margin-top: -5px; } -ul.statlist li li:last-child::before { +.statlist li li:last-child::before { content: "\27A1\00A0"; margin-left: 2px; vertical-align: text-top; + vertical-align: calc(20% - 3px); } .statlist a[href*="graph"] { @@ -4607,6 +4613,15 @@ ul.statlist li li:last-child::before { content: "\00A0"; } +.statsViewGraphs { + margin-left: 20px; +} + +.nowrap { + display: inline-block; + white-space: nowrap; +} + #gatherstats + form { background: #fff; } @@ -5625,8 +5640,8 @@ table.sybil_routerinfo:last-child { @media screen and (min-width: 1500px) { body, .main, .main td, .news p, #news p, .tab, .tab2, .main li b, div.joblog li, .themelabel, .ui_lang, .applabel a, .statusnotes, .routersummary button.download, -#peerdefs, #profile_defs, #thresholds, #configinfo, .infohelp, .infowarn, button, input, select, textarea, code, tt, pre, .netdbentry th, .configtable th, ul.statlist a[name], -ul.statlist b, ul.statlist li b, ul.statlist a[name]:hover, div.messages, th { +#peerdefs, #profile_defs, #thresholds, #configinfo, .infohelp, .infowarn, button, input, select, textarea, code, tt, pre, .netdbentry th, .configtable th, .statlist a[name], +.statlist b, .statlist li b, .statlist a[name]:hover, div.messages, th { font-size: 10pt !important; } diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css index 85d14f4d90ee7b8bf5c5f580ad3bd01cddc1dfc8..6fb576bca8b102c3aa59dd1f19cc534f8b53db3d 100644 --- a/installer/resources/themes/console/dark/console.css +++ b/installer/resources/themes/console/dark/console.css @@ -2040,7 +2040,6 @@ h3.stats { div.joblog li { word-wrap: break-word !important; - text-align: justify !important; line-height: 120% !important; margin: 2px 0 2px 30px; padding: 2px 20px 2px 0; @@ -2048,7 +2047,6 @@ div.joblog li { div.joblog ul { word-wrap: break-word !important; - text-align: justify; margin: 5px 0 -10px; } @@ -2145,6 +2143,15 @@ ul.statlist li li:last-child::before { display: none; } +.nowrap { + white-space: nowrap; +} + +.statsLongName { + color: #dd0; + font-weight: bold; +} + .main#stats form { background: #000; border: 1px solid #494; @@ -4787,34 +4794,38 @@ div.debugcontainer { filter: none; } -table#leasesetdebug, table#leasesetsummary { +#leasesetdebug, #leasesetsummary { margin-bottom: 10px; } -table.leaseset th { +.leaseset th { font-weight: normal; padding: 5px; text-align: left; } -table.leaseset th:last-child, table.leaseset td:nth-child(2) { +.leaseset th:last-child, .leaseset td:nth-child(2) { text-align: right; padding-right: 5px; } -.leaseset tr:nth-child(2) td:last-child a:not(old) { +.addtobook { + text-align: right; +} + +.addtobook a:not(old) { font-size: 0; } -.leaseset tr:nth-child(2) td:last-child a::after { +.addtobook a::after { content: url(/themes/console/images/buttons/add_address.png); } -.leaseset tr:nth-child(2) td:last-child a:hover { +.addtobook a:hover { filter: drop-shadow(0 0 1px #f60); } -table#leasesetdebug th, table#leasesetsummary th { +#leasesetdebug th, #leasesetsummary th { font-weight: bold; text-transform: uppercase; font-size: 10pt; @@ -4823,7 +4834,7 @@ table#leasesetdebug th, table#leasesetsummary th { padding: 5px 5px 5px 10px; } -table#leasesetdebug th a, table#leasesetsummary a { +#leasesetdebug th a, #leasesetsummary a { font-size: 9pt; text-transform: capitalize; letter-spacing: normal; @@ -4836,33 +4847,33 @@ table#leasesetdebug th a, table#leasesetsummary a { padding-left: 10px; } -table#leasesetdebug th:first-child, table#leasesetsummary th:first-child { +#leasesetdebug th:first-child, #leasesetsummary th:first-child { text-align:left; white-space: nowrap; } -table#leasesetdebug th:last-child, table#leasesetsummary th:last-child { +#leasesetdebug th:last-child, #leasesetsummary th:last-child { text-align:right; white-space: nowrap; } -table#leasesetdebug td:nth-child(odd) { +#leasesetdebug td:nth-child(odd) { width: 200px; white-space: nowrap; text-align: right; border-right: 1px inset #131; } -table#leasesetdebug td:nth-child(even) { +#leasesetdebug td:nth-child(even) { text-align: left; white-space: nowrap; } -table#leasesetdebug td:nth-child(2) { +#leasesetdebug td:nth-child(2) { width: 10px; } -div#noleasesets { +#noleasesets { background: #000 url(images/infohelp.png) 12px center no-repeat; padding: 15px 15px 15px 50px; border: 1px solid #494; @@ -4870,7 +4881,7 @@ div#noleasesets { text-align: left; } -div#sybilnav, div#sybils_summary { +#sybilnav, #sybils_summary { border: 1px solid #494; padding: 10px; margin-bottom: 10px; @@ -4878,7 +4889,7 @@ div#sybilnav, div#sybils_summary { background: #000; } -div#sybilnav { +#sybilnav { -moz-columns: 4 200px; -webkit-columns: 4 200px; columns: 4 200px; @@ -4941,7 +4952,7 @@ div#sybilnav { padding-bottom: 2px; } -table.sybil_routerinfo { +.sybil_routerinfo { margin-bottom: 10px; } @@ -4954,7 +4965,7 @@ table.sybil_routerinfo { white-space: nowrap; } -table.sybil_routerinfo:first-of-type th { +.sybil_routerinfo:first-of-type th { padding: 8px 6px !important; } diff --git a/installer/resources/themes/console/images/i2psnark.png b/installer/resources/themes/console/images/i2psnark.png new file mode 100644 index 0000000000000000000000000000000000000000..5528ff1a954413e0a9dfc79d507469742f997004 Binary files /dev/null and b/installer/resources/themes/console/images/i2psnark.png differ diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index 8a963523f25ae6f2312e6f66f573f8818eee66ed..4e61627586a913a878da593208908dc606d54df3 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -574,12 +574,22 @@ div.logo { box-shadow: inset 0 0 0 1px #bbf; } +div.logo:not(old) { + background: linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.3)), url(images/noise.png) #fff; + background-size: 100% 100%, 50px 50px; +} + .logo hr { margin: 8px -10px; background: #7789bf; height: 1px } +.warning hr { + background: #7789bf; + background: linear-gradient(to right, #7789bf, #c2c4ef); +} + .logo a { display: inline-block !important; width: 100%; @@ -606,7 +616,7 @@ div.warning { } .warning:not(old) { - background: url("/themes/console/images/itoopie_sm.png") no-repeat scroll 10px center, linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.3)), url(images/noise.png) #fff; + background: url("/themes/console/images/itoopie_sm.png") no-repeat scroll 10px center, linear-gradient(to bottom, rgba(255,255,255,0.8), rgba(255,255,255,0.3)), url(images/noise.png) #fff; background-size: 54px auto, 100% 100%, 50px 50px; background-position: 10px calc(50% + 16px); } @@ -615,7 +625,7 @@ div.warning { text-align: left; margin: -9px -24px 20px !important; border: none; - border-bottom: 1px solid #7789bf; + border-bottom: 1px solid #447; border-radius: 2px 2px 0 0; padding: 10px 10px 8px; font-size: 10.5pt; @@ -793,8 +803,9 @@ div.warning { letter-spacing: 0; word-spacing: 0; background: none; + border-radius: 0; border: none; - border-bottom: 1px solid #7778bf; + border-bottom: 1px solid #447 !important; padding-left: 0; margin-bottom: -5px; } @@ -2544,6 +2555,8 @@ p#enablefullstats, p#gatherstats { background-size: 28px 28px !important; } +/* stats page */ + p#gatherstats + form, ul.statlist { border: 1px solid #7778bf; padding: 10px; @@ -2571,6 +2584,13 @@ ul.statlist { box-shadow: inset 0 0 0 1px #fff; } +.joblog .statlist li { + line-height: 140% !important; + padding-top: 6px; + padding-bottom: 0; + margin-right: 5px; +} + .statlist li:not(old) { list-style: none !important; } @@ -2578,18 +2598,18 @@ ul.statlist { .statlist li::before, .statlist li a[href^="graph"]::before { content: ""; display: inline-block; - height: 5px; - width: 5px; - box-shadow: inset 0 0 0 1px #fff; - margin-left: -35px; + height: 4px !important; + width: 4px !important; + margin-left: -17px; margin-right: 10px; - margin-top: -2px; + margin-top: -4px; transform: rotate(45deg); vertical-align: middle; + opacity: 0.8; } .statlist li::before { - background: #335; + background: #779; border: 1px solid #335; } @@ -2598,7 +2618,7 @@ ul.statlist { border: 1px solid #3b6bbf; } -.statlist li a[href*="&"]::before { +.statlist li a[href$="&showEvents=true"]::before { display: none; } @@ -2609,12 +2629,51 @@ ul.statlist { vertical-align: middle; } +.statlist li.statsName::before { + background: #446; + box-shadow: inset 0 0 0 1px #fff !important; + height: 6px !important; + width: 6px !important; + opacity: 1; +} + +.statlist li li:last-child::before { + background: #335; +} + +.statsName i { + color: #050; + font-weight: bold; +} + +.statsName li i { + color: inherit; + font-weight: normal; +} + +.statsViewGraphs { + display: inline-block; + margin: 0 0 -5px 18px; +} + +.statsLongName { + display: inline-block; +} + +.statsLongName::first-letter { + text-transform: uppercase; +} + +.nowrap { + display: inline-block; + white-space: nowrap; +} + .statlist > li::after { content: ""; display: block; width: 100%; height: 1px; - margin-top: -5px; border-top: 1px dotted #ddf; } @@ -2629,10 +2688,12 @@ li.noevents::after { } li.noevents { - margin: 5px 0 5px 15px !important; + margin: 0 0 5px 40px !important; font-style: italic; } +/* end stats page */ + h1 { text-align: left; color: #31334f; @@ -3568,11 +3629,6 @@ h3 + .statusnotes { div.joblog { border: 0; margin-top: 5px; - } - -div.joblog i { - color: #050; - font-weight: bold; } div.joblog ul { @@ -4329,7 +4385,7 @@ table#leasesetdebug th a:hover, table#leasesetsummary th a:hover { text-transform: none; letter-spacing: normal; word-spacing: normal; - background: linear-gradient(to bottom, #fff 50%, #eef 50%) !important; + background: linear-gradient(to bottom, #fff 50%, rgba(255, 255, 255, 0.6) 50%, rgba(240, 240, 240, 0.4)) #eef !important; background-size: 100% 100%; padding: 8px 5px; font-size: 9pt; @@ -4366,11 +4422,11 @@ table#leasesetdebug th a:hover, table#leasesetsummary th a:hover { white-space: nowrap; } -table#leasesetdebug, table.leaseset, table#leasesetsummary { +#leasesetdebug, table.leaseset, #leasesetsummary { font-size: 9pt; } -table#leasesetdebug td, table.leaseset td { +#leasesetdebug td, table.leaseset td { padding: 5px !important; } @@ -4378,19 +4434,19 @@ table#leasesetdebug td, table.leaseset td { margin-bottom: 10px; } -table.leaseset th { +.leaseset th { font-weight: normal; padding: 5px; text-align: left; font-size: 10pt; } -table.leaseset th:last-child, table.leaseset td:nth-child(2) { +.leaseset th:last-child, .leaseset td:nth-child(2) { text-align: right; padding-right: 5px; } -table#leasesetdebug, table#leasesetsummary { +#leasesetdebug, #leasesetsummary { margin-bottom: 14px !important; } @@ -4398,7 +4454,7 @@ table#leasesetdebug, table#leasesetsummary { margin-bottom: 5px; } -table#leasesetdebug th, table#leasesetsummary th { +#leasesetdebug th, #leasesetsummary th { font-weight: bold; padding: 8px; text-align: left; @@ -4408,49 +4464,52 @@ table#leasesetdebug th, table#leasesetsummary th { word-spacing: 0.1em; } -table#leasesetdebug th a { +#leasesetdebug th a { font-size: 9pt; text-transform: capitalize; letter-spacing: normal; word-spacing: normal; } -table#leasesetdebug th:last-child, table#leasesetsummary th:last-child { +#leasesetdebug th:last-child, #leasesetsummary th:last-child { text-align:right; white-space: nowrap; font-size: 9pt; } -table#leasesetdebug td:nth-child(odd) { +#leasesetdebug td:nth-child(odd) { width: 200px; white-space: nowrap; text-align: right; border-right: 1px inset #cfd1ff; } -table#leasesetdebug td:nth-child(even) { +#leasesetdebug td:nth-child(even) { text-align: left; white-space: nowrap; } -table#leasesetdebug td:nth-child(2) { +#leasesetdebug td:nth-child(2) { width: 10px; } -.leaseset tr:nth-child(2) td:last-child a:not(old) { +.addtobook { + text-align: right; +} + +.addtobook a:not(old) { font-size: 0; } -.leaseset tr:nth-child(2) td:last-child a::after { +.addtobook a::after { content: url(/themes/console/images/buttons/add_address.png); - filter: drop-shadow(0 0 1px #999); } -.leaseset tr:nth-child(2) td:last-child a:hover { +.addtobook a:hover { filter: drop-shadow(0 0 1px #f60); } -div#noleasesets { +#noleasesets { border: 1px solid #7778bf; padding: 20px; font-weight: bold; @@ -4460,7 +4519,7 @@ div#noleasesets { text-align: center; } -div#sybilnav { +#sybilnav { -moz-columns: 4; -webkit-columns: 4; columns: 4; @@ -4470,7 +4529,7 @@ div#sybilnav { border-radius: 2px; } -div#sybilnav, div#sybils_summary { +#sybilnav, #sybils_summary { border: 1px solid #7778bf; padding: 10px; margin-bottom: 10px; @@ -4507,7 +4566,7 @@ h3.sybils { display: inline-block; } -table.sybil_routerinfo { +.sybil_routerinfo { margin-bottom: 10px; } @@ -4515,7 +4574,7 @@ table.sybil_routerinfo { padding: 1px 1px 1px 6px !important; } -table.sybil_routerinfo:first-of-type th { +.sybil_routerinfo:first-of-type th { padding: 6px !important; } diff --git a/installer/resources/themes/console/midnight/console.css b/installer/resources/themes/console/midnight/console.css index 2c69ac8de60e9afbd0ca647515204ad338fcd8d0..fe824e95477b45decd98bd48a64367a2df0521fc 100644 --- a/installer/resources/themes/console/midnight/console.css +++ b/installer/resources/themes/console/midnight/console.css @@ -1588,7 +1588,7 @@ div.sorry hr { .main#news { background: #000 url(images/earth.jpg) no-repeat scroll bottom right !important; - background-size: auto 200px !important; + background-size: auto 180px !important; padding-bottom: 0; } @@ -1605,14 +1605,6 @@ div.sorry hr { min-width: 600px; } -/* -.newsentry font[size="-2"] { - letter-spacing: 0.15em; - font-style: italic; - text-transform: capitalize; -} -*/ - .main#news .newscontent { border: 1px solid #443da0; margin: -11px 0 10px; @@ -1720,7 +1712,6 @@ div.sorry hr { .messages #newsDisplay { display: inline-block; - white-space: normal; margin-left: 45px; } @@ -2453,7 +2444,6 @@ fieldset { div.joblog { border-radius: 2px 2px 0 0; - text-align: justify !important; overflow-y: hidden !important; margin-top: 10px !important; } @@ -2472,7 +2462,6 @@ div.main li:last-child { div.joblog li { word-wrap: break-word !important; - text-align: justify !important; line-height: 120% !important; margin: 2px 0 2px 30px; padding: 2px 20px 2px 0; @@ -2480,7 +2469,6 @@ div.joblog li { div.joblog ul { word-wrap: break-word !important; - text-align: justify; margin: 5px 0 -10px; } @@ -3643,7 +3631,7 @@ h3.stats { border-radius: 0; } -ul.statlist { +.statlist { border: 1px solid #443da0; margin-bottom: -21px !important; margin-top: -11px !important; @@ -3651,62 +3639,61 @@ ul.statlist { background: #000; } -ul.statlist:last-of-type { +div.main .statlist li:not(old) { + list-style: none !important; +} + +.statlist:last-of-type { margin-bottom: -1px !important; } @media screen and (-webkit-min-device-pixel-ratio:0) { -ul.statlist { +.statlist { margin-bottom: -25px !important; } -ul.statlist:last-of-type { +.statlist:last-of-type { margin-bottom: -6px !important; } } -ul.statlist a[name], ul.statlist b, ul.statlist li b, ul.statlist a[name]:hover { - color: #f3e8fc !important; +.statlist a[name], .statlist b, .statlist li b, .statlist a[name]:hover { text-decoration: none; letter-spacing: normal; } -ul.statlist li::before { - content: "\1F6C8\00A0"; +.statlist li::before { content: "\2B26\00A0"; font-size: 14pt; - line-height: 50%; vertical-align: baseline; - color: #f3e8fc; } -ul.statlist li { - line-height: 120% !important; +.statlist li { list-style: none; margin-bottom: -3px; } -ul.statlist li li { +.statlist li li { margin-left: 16px; margin-right: -20px; - line-height: 120% !important; + line-height: 140% !important; list-style: none; } -ul.statlist li li::before { +.statlist li li::before { content: "\279F\00A0"; vertical-align: baseline; } -ul.statlist li li:last-child::before { +.statlist li li:last-child::before { content: "\27A1\00A0"; } -ul.statlist li li:last-child { +.statlist li li:last-child { padding-bottom: 5px !important; } -.statlist a[href*="graph"]::before { +.statlist a[href^="graph"]::before { content: "\27A1\00A0"; font-size: 14pt; } @@ -3725,11 +3712,34 @@ ul.statlist li li:last-child { margin-top: 10px; } +.statlist li li b { + margin-right: 3px; +} + li.noevents { margin-top: 0 !important; margin-bottom: 10px !important; } +.nowrap { + white-space: nowrap; +} + +.statsViewGraphs { + display: inline-block; + margin: 5px 5px 0 20px; +} + +.statsLongName { + color: #37a3df; + font-weight: bold; +} + +p#gatherstats { + margin-top: 1px; + margin-bottom: 25px; +} + /* end stats */ h3#exploratorytunnels { @@ -3985,7 +3995,7 @@ table#externali2cp { } .infowarn#clientconf { - margin-bottom: -2px; + margin-bottom: 11px; } /* end /configclients */ @@ -5225,7 +5235,7 @@ span#distance { font-weight: bold; } -table#leasesetdebug, table#leasesetsummary { +#leasesetdebug, #leasesetsummary { margin-top: -4px; margin-bottom: 10px; } @@ -5241,7 +5251,7 @@ table#leasesetdebug, table#leasesetsummary { padding-right: 5px; } -table#leasesetdebug th, table#leasesetsummary th { +#leasesetdebug th, #leasesetsummary th { font-weight: bold; text-transform: uppercase; font-size: 10pt; @@ -5250,7 +5260,7 @@ table#leasesetdebug th, table#leasesetsummary th { padding: 8px 10px; } -table#leasesetdebug th a, table#leasesetsummary a { +#leasesetdebug th a, #leasesetsummary a { font-size: 9pt; text-transform: capitalize; letter-spacing: normal; @@ -5263,47 +5273,51 @@ table#leasesetdebug th a, table#leasesetsummary a { padding-left: 10px; } -table#leasesetdebug th:first-child, table#leasesetsummary th:first-child { +#leasesetdebug th:first-child, #leasesetsummary th:first-child { text-align:left; white-space: nowrap; } -table#leasesetdebug th:last-child, table#leasesetsummary th:last-child { +#leasesetdebug th:last-child, #leasesetsummary th:last-child { text-align:right; white-space: nowrap; } -table#leasesetdebug td:nth-child(odd) { +#leasesetdebug td:nth-child(odd) { width: 200px; white-space: nowrap; text-align: right; border-right: 1px inset #120f35; } -table#leasesetdebug td:nth-child(even) { +#leasesetdebug td:nth-child(even) { text-align: left; white-space: nowrap; } -table#leasesetdebug td:nth-child(2) { +#leasesetdebug td:nth-child(2) { width: 10px; } -table#leasesetdebug th a:not(old), table#leasesetsummary th a:not(old) { +#leasesetdebug th a:not(old), #leasesetsummary th a:not(old) { font-size: 0; } -table#leasesetdebug th a::after, table#leasesetsummary th a::after { +#leasesetdebug th a::after, #leasesetsummary th a::after { content: url(/themes/console/images/buttons/floodfill.png); vertical-align: text-top; padding-right: 0; } -.leaseset tr:nth-child(2) td:last-child a:not(old) { +.addtobook { + text-align: right; +} + +.addtobook a:not(old) { font-size: 0; } -.leaseset tr:nth-child(2) td:last-child a::after { +.addtobook a::after { content: url(/themes/console/images/buttons/add_address.png); } @@ -5316,7 +5330,7 @@ a.viewfullentry::after { vertical-align: text-top; } -div#noleasesets { +#noleasesets { background: #000 url(/themes/console/images/info/infohelp.png) 12px center no-repeat !important; padding: 15px 15px 15px 50px !important; border: 1px solid #443da0; @@ -5324,13 +5338,13 @@ div#noleasesets { text-align: left; } -div#sybilnav, div#sybils_summary { +#sybilnav, #sybils_summary { border: 1px solid #443da0; padding: 10px; margin-bottom: 10px; } -div#sybilnav { +#sybilnav { -moz-columns: 4 200px; -webkit-columns: 4 200px; columns: 4 200px; @@ -5405,7 +5419,7 @@ div#sybilnav { /* end sybilnav */ -table.sybil_routerinfo { +.sybil_routerinfo { margin-bottom: 10px; } @@ -5417,7 +5431,7 @@ table.sybil_routerinfo { text-align: left; } -table.sybil_routerinfo:first-of-type th { +.sybil_routerinfo:first-of-type th { padding: 6px !important; } @@ -5560,10 +5574,6 @@ p#debugmode, p#sybilinfo { margin-top: -4px; } -p#gatherstats { - margin-top: 1px; -} - td.optionsave { text-align: right; border-top: 1px solid #443da0; @@ -5621,7 +5631,7 @@ h3#webappconfig { } p#webappconfigtext { - margin: 1px 0 -2px 0; + margin: 1px 0 15px 0; background: #000 url(/themes/console/images/info/java_edit.png) 12px center no-repeat !important; background-size: 28px 28px !important; } @@ -6191,7 +6201,7 @@ div.app { min-width: 138px; } -.app:hover { +div.app:hover { cursor: pointer; } diff --git a/router/java/src/net/i2p/router/transport/UPnP.java b/router/java/src/net/i2p/router/transport/UPnP.java index 767bc12ba84ebf5c7d77110d998a9113e0afe252..fee429bf353fb1dda758b60b0b833f92b6864221 100644 --- a/router/java/src/net/i2p/router/transport/UPnP.java +++ b/router/java/src/net/i2p/router/transport/UPnP.java @@ -676,7 +676,7 @@ public class UPnP extends ControlPoint implements DeviceChangeListener, EventLis /** warning - slow */ public String renderStatusHTML() { final StringBuilder sb = new StringBuilder(); - sb.append("<h3><a name=\"upnp\"></a>").append(_t("UPnP Status")).append("</h3>"); + sb.append("<h3 id=\"upnp\">").append(_t("UPnP Status")).append("</h3><div id=\"upnpscan\">"); synchronized(_otherUDNs) { if (!_otherUDNs.isEmpty()) { @@ -727,7 +727,7 @@ public class UPnP extends ControlPoint implements DeviceChangeListener, EventLis } } - sb.append("</p>"); + sb.append("</p></div>"); return sb.toString(); }