NedDb advanced lookup layout and theme improvements

This commit is contained in:
str4d
2017-01-15 14:08:29 +00:00
parent cca3f57373
commit d360ba4817
14 changed files with 685 additions and 108 deletions

View File

@ -233,7 +233,7 @@ public class NetDbHelper extends HelperBase {
}
if (!span)
buf.append("</center>");
buf.append("</div>");
buf.append("</div>\n");
_out.write(buf.toString());
}
@ -241,23 +241,25 @@ public class NetDbHelper extends HelperBase {
* @since 0.9.28
*/
private void renderLookupForm() throws IOException {
_out.write("<form action=\"/netdb\" method=\"GET\"><p><b>Pick One</b></p>\n" +
"Caps <input type=\"text\" name=\"caps\">e.g. f or XOfR<br>\n" +
"Cost <input type=\"text\" name=\"cost\"><br>\n" +
"Country code <input type=\"text\" name=\"c\">e.g. ru<br>\n" +
"Family <input type=\"text\" name=\"fam\"><br>\n" +
"Hash prefix <input type=\"text\" name=\"r\"><br>\n" +
"IP <input type=\"text\" name=\"ip\">host name, IPv4, or IPv6, /24,/16,/8 suffixes optional for IPv4<br>\n" +
"IPv6 Prefix <input type=\"text\" name=\"ipv6\"><br>\n" +
"MTU <input type=\"text\" name=\"mtu\"><br>\n" +
"Port <input type=\"text\" name=\"port\"><br>\n" +
"Sig Type <input type=\"text\" name=\"type\"><br>\n" +
"SSU Caps <input type=\"text\" name=\"ssucaps\"><br>\n" +
"Version <input type=\"text\" name=\"v\"><br>\n" +
"<p><b>Add Sybil analysis (must pick one above):</b></p>\n" +
"Sybil close to <input type=\"text\" name=\"sybil2\">Router hash, dest hash, b32, or from address book<br>\n" +
"or Sybil close to this router <input type=\"checkbox\" class=\"optbox\" value=\"1\" name=\"sybil\"><br>" +
"<p><input type=\"submit\" class=\"search\" value=\"Lookup\"></p>" +
"</form>\n");
_out.write("<form action=\"/netdb\" method=\"GET\">\n" +
"<table id=\"netdblookup\"><tr><th colspan=\"3\">Network Database Search</th></tr>\n" +
"<tr><td colspan=\"3\" class=\"subheading\"><b>Select one search field <i>only</i>:</b></td></tr>\n" +
"<tr><td>Capabilities:</td><td><input type=\"text\" name=\"caps\"></td><td>e.g. f or XOfR</td></tr>\n" +
"<tr><td>Cost:</td><td><input type=\"text\" name=\"cost\"></td><td></td></tr>\n" +
"<tr><td>Country Code:</td><td><input type=\"text\" name=\"c\"></td><td>e.g. ru</td></tr>\n" +
"<tr><td>Router Family:</td><td><input type=\"text\" name=\"fam\"></td><td></td></tr>\n" +
"<tr><td>Hash Prefix:</td><td><input type=\"text\" name=\"r\"></td><td></td></tr>\n" +
"<tr><td>IP or Hostname:</td><td><input type=\"text\" name=\"ip\"></td><td>host name, IPv4, or IPv6, /24,/16,/8 suffixes optional for IPv4</td></tr>\n" +
"<tr><td>IPv6 Prefix:</td><td><input type=\"text\" name=\"ipv6\"></td><td></td></tr>\n" +
"<tr><td>MTU:</td><td><input type=\"text\" name=\"mtu\"></td><td></td></tr>\n" +
"<tr><td>Port Number:</td><td><input type=\"text\" name=\"port\"></td><td></td></tr>\n" +
"<tr><td>Signature Type:</td><td><input type=\"text\" name=\"type\"></td><td></td></tr>\n" +
"<tr><td>SSU Capabilities:</td><td><input type=\"text\" name=\"ssucaps\"></td><td></td></tr>\n" +
"<tr><td>Router Version:</td><td><input type=\"text\" name=\"v\"></td><td></td></tr>\n" +
"<tr><td colspan=\"3\" class=\"subheading\"><b>Add Sybil analysis (must pick one above):</b></td></tr>\n" +
"<tr><td>Sybil close to:</td><td><input type=\"text\" name=\"sybil2\"></td><td>Router hash, dest hash, b32, or from address book</td>\n" +
"<tr><td>or Sybil close to this router:</td><td><input type=\"checkbox\" class=\"optbox\" value=\"1\" name=\"sybil\"></td><td></td></tr>\n" +
"<tr><td colspan=\"3\" class=\"optionsave\"><button type=\"submit\" class=\"search\" value=\"Lookup\">Lookup</button></td></tr>\n" +
"</table>\n</form>\n");
}
}

View File

@ -521,8 +521,9 @@ class NetDbRenderer {
buf.append("<tr><th align=\"left\">" + _t("Country") + "</th><th>" + _t("Count") + "</th></tr>\n");
for (String country : countryList) {
int num = countries.count(country);
buf.append("<tr><td><img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase(Locale.US)).append("\"");
buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> <a href=\"/netdb?c=").append(country).append("\">");
buf.append("<tr><td><a href=\"/netdb?c=").append(country).append("\">");
buf.append("<img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase(Locale.US)).append("\"");
buf.append(" src=\"/flags.jsp?c=").append(country).append("\">");
buf.append(getTranslatedCountry(country));
buf.append("</a></td><td align=\"center\">").append(num).append("</td></tr>\n");
}
@ -616,9 +617,10 @@ class NetDbRenderer {
.append("<td colspan=\"2\">");
String country = _context.commSystem().getCountry(info.getIdentity().getHash());
if(country != null) {
buf.append("<a href=\"/netdb?c=").append(country).append("\">");
buf.append("<img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase(Locale.US)).append('\"');
buf.append(" title=\"").append(getTranslatedCountry(country)).append('\"');
buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> ");
buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> ").append("</a>");
}
for (RouterAddress addr : info.getAddresses()) {
String style = addr.getTransportStyle();

View File

@ -832,7 +832,7 @@ public class SummaryHelper extends HelperBase {
if (allowReseed()) {
if (reseedInProgress) {
// While reseed occurring, show status message instead
buf.append("<i>").append(_context.netDb().reseedChecker().getStatus()).append("</i><br>");
buf.append("<div class=\"sb_notice\"><i>").append(_context.netDb().reseedChecker().getStatus()).append("</i></div>");
} else {
// While no reseed occurring, show reseed link
long nonce = _context.random().nextLong();
@ -849,7 +849,7 @@ public class SummaryHelper extends HelperBase {
if (!reseedInProgress) {
String reseedErrorMessage = _context.netDb().reseedChecker().getError();
if (reseedErrorMessage.length() > 0) {
buf.append("<i>").append(reseedErrorMessage).append("</i><br>");
buf.append("<div class=\"sb_notice\"><i>").append(reseedErrorMessage).append("</i></div>");
}
}
if (buf.length() <= 0)

View File

@ -218,12 +218,12 @@ class SybilRenderer {
// Distance to our router analysis
buf.append("<h3 id=\"ritoday\" class=\"sybils\">Closest Floodfills to Our Routing Key (Where we Store our RI)</h3>");
buf.append("<p><a href=\"/netdb?caps=f&amp;sybil\">See all</a></p>");
buf.append("<p class=\"sybil_info\"><a href=\"/netdb?caps=f&amp;sybil\">See all</a></p>");
renderRouterInfoHTML(out, buf, ourRKey, avgMinDist, ris, points);
RouterKeyGenerator rkgen = _context.routerKeyGenerator();
Hash nkey = rkgen.getNextRoutingKey(us);
buf.append("<h3 id=\"ritmrw\" class=\"sybils\">Closest Floodfills to Tomorrow's Routing Key (Where we will Store our RI)</h3>");
buf.append("<p><a href=\"/netdb?caps=f&amp;sybil\">See all</a></p>");
buf.append("<p class=\"sybil_info\"><a href=\"/netdb?caps=f&amp;sybil\">See all</a></p>");
renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
buf.append("<h3 id=\"dht\" class=\"sybils\">Closest Floodfills to Our Router Hash (DHT Neighbors if we are Floodfill)</h3>");
@ -247,11 +247,11 @@ class SybilRenderer {
TunnelPool in = clientInboundPools.get(client);
String name = (in != null) ? in.getSettings().getDestinationNickname() : client.toBase64().substring(0,4);
buf.append("<h3 class=\"sybils\">Closest floodfills to the Routing Key for " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>");
buf.append("<p><a href=\"/netdb?caps=f&amp;sybil=" + ls.getHash().toBase64() + "\">See all</a></p>");
buf.append("<p class=\"sybil_info\"><a href=\"/netdb?caps=f&amp;sybil=" + ls.getHash().toBase64() + "\">See all</a></p>");
renderRouterInfoHTML(out, buf, rkey, avgMinDist, ris, points);
nkey = rkgen.getNextRoutingKey(ls.getHash());
buf.append("<h3 class=\"sybils\">Closest floodfills to Tomorrow's Routing Key for " + DataHelper.escapeHTML(name) + " (where we will store our LS)</h3>");
buf.append("<p><a href=\"/netdb?caps=f&amp;sybil=" + ls.getHash().toBase64() + "\">See all</a></p>");
buf.append("<p class=\"sybil_info\"><a href=\"/netdb?caps=f&amp;sybil=" + ls.getHash().toBase64() + "\">See all</a></p>");
renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
}
@ -406,7 +406,7 @@ class SybilRenderer {
if (ip == null)
continue;
if (ip[0] == ourIP[0] && ip[1] == ourIP[1]) {
buf.append("<p id=\"sybil_floodfill\"><b>");
buf.append("<p id=\"sybil_info\"><b>");
if (ip[2] == ourIP[2]) {
if (ip[3] == ourIP[3]) {
buf.append("Same IP as us");
@ -457,7 +457,7 @@ class SybilRenderer {
int i2 = (i >> 8) & 0xff;
int i3 = i & 0xff;
String sip = i0 + "." + i1 + '.' + i2 + '.' + i3;
buf.append("<p class=\"sybil floodfill\"><b>").append(count).append(" floodfills with IP <a href=\"/netdb?ip=")
buf.append("<p class=\"sybil_info\"><b>").append(count).append(" floodfills with IP <a href=\"/netdb?ip=")
.append(sip).append("&amp;sybil\">").append(sip)
.append("</a>:</b></p>");
for (RouterInfo info : ris) {
@ -510,7 +510,7 @@ class SybilRenderer {
int i1 = (i >> 8) & 0xff;
int i2 = i & 0xff;
String sip = i0 + "." + i1 + '.' + i2 + ".0/24";
buf.append("<p class=\"sybil floodfill\"><b>").append(count).append(" floodfills with IP <a href=\"/netdb?ip=")
buf.append("<p class=\"sybil_info\"><b>").append(count).append(" floodfills with IP <a href=\"/netdb?ip=")
.append(sip).append("&amp;sybil\">").append(sip)
.append("</a>:</b></p>");
for (RouterInfo info : ris) {
@ -560,7 +560,7 @@ class SybilRenderer {
int i0 = i >> 8;
int i1 = i & 0xff;
String sip = i0 + "." + i1 + ".0/16";
buf.append("<p class=\"sybil floodfill\"><b>").append(count).append(" floodfills with IP <a href=\"/netdb?ip=")
buf.append("<p class=\"sybil_info\"><b>").append(count).append(" floodfills with IP <a href=\"/netdb?ip=")
.append(sip).append("&amp;sybil\">").append(sip)
.append("</a></b></p>");
for (RouterInfo info : ris) {
@ -728,11 +728,11 @@ class SybilRenderer {
if (i == 0) {
//buf.append("<p><b>Not to worry, but above router is closer than average minimum distance " + fmt.format(avgMinDist) + "</b></p>");
} else if (i == 1) {
buf.append("<p><b>Not to worry, but above routers are closer than average minimum distance " + fmt.format(avgMinDist) + "</b></p>");
buf.append("<p class=\"sybil_info\"><b>Not to worry, but above routers are closer than average minimum distance " + fmt.format(avgMinDist) + "</b></p>");
} else if (i == 2) {
buf.append("<p><b>Possible Sybil Warning - above routers are closer than average minimum distance " + fmt.format(avgMinDist) + "</b></p>");
buf.append("<p class=\"sybil_info\"><b>Possible Sybil Warning - above routers are closer than average minimum distance " + fmt.format(avgMinDist) + "</b></p>");
} else {
buf.append("<p><b>Major Sybil Warning - above router is closer than average minimum distance " + fmt.format(avgMinDist) + "</b></p>");
buf.append("<p class=\"sybil_info\"><b>Major Sybil Warning - above router is closer than average minimum distance " + fmt.format(avgMinDist) + "</b></p>");
}
}
// this is dumb because they are already sorted
@ -884,9 +884,10 @@ class SybilRenderer {
buf.append("<tr><td><b>" + _t("Addresses") + ":</b></td><td colspan=\"3\">");
String country = _context.commSystem().getCountry(info.getIdentity().getHash());
if(country != null) {
buf.append("<a href=\"/netdb?c=").append(country).append("\">");
buf.append("<img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase(Locale.US)).append('\"');
buf.append(" title=\"").append(getTranslatedCountry(country)).append('\"');
buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> ");
buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> ").append("</a>");
}
for (RouterAddress addr : info.getAddresses()) {
String style = addr.getTransportStyle();
@ -921,7 +922,7 @@ class SybilRenderer {
return;
final DecimalFormat fmt = new DecimalFormat("#0.00");
XORComparator<Hash> xor = new XORComparator<Hash>(Hash.FAKE_HASH);
out.write("<h3>Group Distances</h3><table><tr><th>Hash<th>Distance from previous</tr>\n");
out.write("<h3 class=\"tabletitle\">Group Distances</h3><table class=\"sybil_distance\"><tr><th>Hash<th>Distance from previous</tr>\n");
Collections.sort(sybils, xor);
Hash prev = null;
for (Hash h : sybils) {
@ -952,8 +953,8 @@ class SybilRenderer {
prev = null;
final int limit = Math.min(10, sybils.size());
for (int i = start; i <= days; i++) {
out.write("<h3>Distance for " + new Date(now) +
"</h3><table><tr><th>Hash<th>Distance<th>Distance from previous</tr>\n");
out.write("<h3 class=\"tabletitle\">Distance for " + new Date(now) +
"</h3><table class=\"sybil_distance\"><tr><th>Hash<th>Distance<th>Distance from previous</tr>\n");
Hash rkey = rkgen.getRoutingKey(from, now);
xor = new XORComparator<Hash>(rkey);
Collections.sort(sybils, xor);

View File

@ -765,7 +765,7 @@ public class KBucketSet<T extends SimpleDataStructure> {
@Override
public String toString() {
StringBuilder buf = new StringBuilder(1024);
buf.append("<b>Bucket set rooted on:</b> ").append(_us.toString())
buf.append("<hr><b>Bucket set rooted on:</b> ").append(_us.toString())
.append(" K=").append(BUCKET_SIZE)
.append(" B=").append(B_VALUE)
.append(" with ").append(size())
@ -775,7 +775,7 @@ public class KBucketSet<T extends SimpleDataStructure> {
int len = _buckets.size();
for (int i = 0; i < len; i++) {
KBucket<T> b = _buckets.get(i);
buf.append("<b>* Bucket ").append(i).append("/").append(len).append(":</b> ");
buf.append("<b>Bucket ").append(i).append("/").append(len).append(":</b> ");
buf.append(b.toString()).append("<br>\n");
}
} finally { releaseReadLock(); }

View File

@ -251,7 +251,7 @@ div.routersummary input[type=text] {
.routersummary button[type="submit"] {
min-width: 87px;
margin: 2px 2px 1px;
padding: 5px 2px !important;
/* padding: 5px 2px !important;*/
}
#xhr {
@ -380,6 +380,15 @@ div.routersummary td {
padding: 2px 2px 1px;
}
.sb_notice {
background: #fff;
border: 1px solid #89f;
border-radius: 2px;
box-shadow: 0 0 1px #bbb;
margin: 7px 5px -2px;
padding: 5px 3px;
}
div.routersummary form {
margin: -2px 0;
}
@ -546,6 +555,7 @@ input[type="radio"], input[type="checkbox"] {
min-width: 16px !important;
min-height: 16px !important;
vertical-align: middle;
background: none;
}
input[type="file"] {
@ -1035,22 +1045,56 @@ button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="re
.routersummary .download {
background: url(/themes/console/images/buttons/download.png) 3px center no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%);
background-size: 16px 16px, 100% 100% !important;
padding: 5px 3px 5px 17px !important;
padding: 5px 3px 5px 21px !important;
/* margin-top: -4px;*/
}
/* Show text on context specific buttons (eg deferred shutdown) */
.routersummary .reload[value="restartImmediate"], .routersummary .stop[value="shutdownImmediate"], .routersummary .reload[value="Reseed"] {
text-indent: 0;
text-align: left;
min-width: 0 !important;
padding-left: 21px !important;
}
.routersummary .reload[value="restartImmediate"] {
background: url(/themes/console/images/buttons/restart.png) center left 4px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
}
.routersummary .reload[value="restartImmediate"]:hover, .routersummary .reload[value="restartImmediate"]:focus, .routersummary .reload[value="restartImmediate"]:active {
background: url(/themes/console/images/buttons/restart_hover.png) center left 4px no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
}
.routersummary .stop[value="shutdownImmediate"] {
background: url(/themes/console/images/buttons/shutdown.png) center left 4px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
}
.routersummary .stop[value="shutdownImmediate"]:hover, .routersummary .stop[value="shutdownImmediate"]:focus, .routersummary .stop[value="shutdownImmediate"]:active {
background: url(/themes/console/images/buttons/shutdown_hover.png) center left 4px no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
}
.routersummary .reload[value="Reseed"] {
background: url(/themes/console/images/buttons/download.png) center left 4px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
}
.routersummary .reload[value="Reseed"]:hover, .routersummary .reload[value="Reseed"]:focus, .routersummary .reload[value="Reseed"]:active {
background: url(/themes/console/images/buttons/download.png) center left 4px no-repeat !important, linear-gradient(to bottom, #ddd 0%, #fff 100%);
}
.routersummary .download:hover, .routersummary .download:focus, .routersummary .download:active {
background: url(/themes/console/images/buttons/download.png) 4px center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%);
background-size: 16px 16px, 100% 100% !important;
padding: 5px 3px 5px 21px !important;
}
/*
@media screen and (-webkit-min-device-pixel-ratio:0) {
.routersummary .download, .routersummary .download:hover, .routersummary .download:focus, .routersummary .download:active {
padding-left: 19px !important;
}
}
.routersummary .download:hover, .routersummary .download:focus, .routersummary .download:active {
background: url(/themes/console/images/buttons/download.png) 3px center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%);
background-size: 16px 16px, 100% 100% !important;
padding: 5px 3px 5px 17px !important;
border: 1px solid #f60;
}
*/
/* end sidebar buttons */
/* end buttons & inputs */
@ -1193,7 +1237,7 @@ div.news {
border-right: 1px solid #89f;
text-align: right;
color: #331e0c;
min-width: 500px;
min-width: 520px;
padding: 3px 10px 3px 10px;
font-size: 8pt;
}
@ -2701,10 +2745,10 @@ p#enablefullstats {
}
.langbox {
margin: 5px 5px 0 5px;
margin: 4px 4px 0;
color: #001;
font-size: 7pt;
width: 312px;
width: 360px;
text-align: right;
float: right;
padding: 1px;
@ -3664,7 +3708,7 @@ div#sybilnav {
vertical-align: middle;
}
p.sybil_floodfill, p.family, p.threatpoints, p.hashdist {
p.sybil_info, p.family, p.threatpoints, p.hashdist {
border: 1px solid #89f;
padding: 5px 5px 5px 30px;
margin: 3px 0;
@ -3674,11 +3718,11 @@ p.sybil_floodfill, p.family, p.threatpoints, p.hashdist {
background: url(images/eye.png) 8px center no-repeat, linear-gradient(to right, #fff 0%, #dde1ff 70%);
}
p.family + p.family, p.sybil_floodfill + p.sybil_floodfill {
p.family + p.family, p.sybil_info + p.sybil_info {
margin-top: -4px;
}
p.sybil_floodfill + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sybil_routerinfo {
p.sybil_info + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sybil_routerinfo {
margin-top: 10px !important;
}
@ -3712,6 +3756,40 @@ p:empty { /* empty paragraph nuke */
display: none;
}
/* Advanced lookup */
#netdblookup {
margin-bottom: -8px;
}
#netdblookup th {
font-size: 11pt;
text-align: left;
padding: 10px;
}
#netdblookup td:first-child {
text-align: right;
width: 100px;
white-space: nowrap;
font-weight: bold;
}
#netdblookup td:nth-child(2) {
width: 100px;
}
.subheading {
text-align: left !important;
background: #fff;
padding: 10px;
border: 1px solid #89f;
}
.subheading b {
font-size: 10pt !important;
}
/* end netdb */
/* /stats */
@ -3879,6 +3957,25 @@ table#netdboverview {
padding: 5px;
}
#netdbcountrylist img {
margin-right: 5px;
text-align: right;
}
.sybil_distance th {
text-align: left;
padding: 5px;
}
.sybil_distance th:last-child, .sybil_distance td:last-child {
text-align: right;
}
.sybil_distance tr:nth-child(n+2):hover {
background: #ffe;
font-weight: bold;
}
/* /help */
div#volunteer, div#sidebarhelp, div#configurationhelp, div#reachabilityhelp, div#legal, div#changelog {
@ -4288,7 +4385,7 @@ div.news {
}
.routersummary button[value="cancelShutdown"] {
padding-left: 20px !important;
padding-left: 21px !important;
}
div.app {
@ -4359,4 +4456,8 @@ div.news {
div.joblog h3 {
margin-top: 8px;
}
.subheading b {
font-size: 10.5pt !important;
}
}

View File

@ -14,6 +14,16 @@ div.routersummary {
margin: 0 auto -6px;
}
@media screen and (min-width: 1500px) {
div.routersummary {
width: 600px !important;
}
.routersummary table[id^="sb_"] {
width: 600px !important;
}
}
#xhr {
margin-top: 9px !important;
}
@ -105,7 +115,7 @@ h1 {
}
div.news {
margin: 0 0 -10px;
margin: 0 0 -1px;
min-width: 500px;
}
@ -114,5 +124,25 @@ div.main {
min-width: 500px;
}
.confignav {
.sorry {
margin: -1px 0 0 !important;
}
@media screen and (min-width: 1500px) {
h1 {
margin: 9px 0 -1px !important;
}
div.news {
margin: -1px 0 0 !important;
}
div.main {
margin: -1px 0 !important;
}
.sorry {
margin: -1px 0 0 !important;
}
}

View File

@ -397,6 +397,19 @@ div.routersummary table {
line-height: 140%;
}
.sb_notice {
background: #010;
border: 1px solid #262;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #000;
margin: 10px -4px -2px;
padding: 5px 3px;
}
hr + .sb_notice {
margin-top: 7px;
}
div.routersummary tr {
background-image: none !important;
background-color: transparent !important;
@ -1440,6 +1453,7 @@ input[type="checkbox"], .optbox {
filter: invert(100%) sepia(100%) hue-rotate(70deg) saturate(200%); /* colorize radios and checkboxes */
-webkit-filter: invert(100%) sepia(100%) hue-rotate(70deg) saturate(200%);
vertical-align: middle;
background: none;
}
input[type="checkbox"]:hover, .optbox:hover, input[type="checkbox"]:focus, .optbox:focus {
@ -3237,6 +3251,11 @@ table#netdboverview {
margin-bottom: 0;
}
#netdbcountrylist img {
margin-right: 5px;
text-align: right;
}
#netdbtransports {
border-left: 1px solid transparent !important;
border-right: 1px solid transparent !important;
@ -3287,6 +3306,74 @@ th > img[src^="/imagegen"] { /* scale down header images */
border: 1px solid #000;
}
/* Advanced lookup */
#netdblookup {
margin-bottom: -4px;
}
#netdblookup th {
text-align: left;
font-size: 11pt;
letter-spacing: 0.08em;
padding: 10px;
text-transform: uppercase;
}
#netdblookup td:first-child {
text-align: right;
width: 100px;
white-space: nowrap;
font-weight: bold;
}
#netdblookup td:nth-child(2) {
width: 100px;
padding-left: 0;
}
.subheading {
text-align: left !important;
background: #000;
padding: 10px;
border: 1px solid #494;
}
.subheading b {
font-size: 10pt !important;
}
#netdblookup .optbox {
margin: 10px ;
}
#netdblookup .optionsave {
padding: 10px !important;
}
#netdb .tabletitle {
margin-bottom: -2px !important;
}
.sybil_distance th {
text-align: left;
padding: 5px;
}
.sybil_distance th:last-child, .sybil_distance td:last-child {
text-align: right;
}
.sybil_distance tr:nth-child(n+2):hover {
background: #000;
}
.sybil_distance:last-child {
margin-bottom: 8px;
}
/* end netdb */
/* logs */
#criticallogs ul { /* tidy router logs ul */
@ -4117,6 +4204,10 @@ table#leasesetdebug th a:hover, table#leasesetsummary th a:hover {
font-size: 10pt;
}
.main#debug h2 + hr {
display: none;
}
div.debugcontainer {
border: 1px solid #f00;
}
@ -4412,7 +4503,7 @@ table.sybil_routerinfo:first-of-type th {
font-size: 9pt;
}
p.sybil_floodfill, p.family, p.threatpoints, p.hashdist, p#sybil_totals {
p.sybil_info, p.family, p.threatpoints, p.hashdist, p#sybil_totals {
border: 1px solid #494;
padding: 5px 5px 5px 30px;
margin: 3px 0;
@ -4424,7 +4515,7 @@ p.sybil_floodfill, p.family, p.threatpoints, p.hashdist, p#sybil_totals {
box-shadow: inset 0 0 0 1px #300;
}
p.family + p.family, p.sybil_floodfill + p.sybil_floodfill {
p.family + p.family, p.sybil_info + p.sybil_info {
margin-top: -4px;
}
@ -4432,7 +4523,7 @@ p#sybilinfo {
line-height: 140%;
}
p.sybil_floodfill + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sybil_routerinfo {
p.sybil_info + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sybil_routerinfo {
margin-top: 10px !important;
}
@ -5028,7 +5119,7 @@ ul.statlist a[name], ul.statlist b, ul.statlist li b, ul.statlist a[name]:hover
}
.routersummary td, .routersummary a, .routersummary button, .routersummary h4, .routersummary h4 a,
#floodfill th, .applabel a, #jardump td {
#floodfill th, .applabel a, #jardump td, .statusnotes {
font-size: 9pt !important;
}
@ -5078,8 +5169,15 @@ div.joblog h3 {
margin-bottom: 12px !important;
}
#certs.main p + p:empty + h4 {
margin-top: -15px !important;
}
button.reload, button.stop {
min-width: 101px;
}
.subheading b {
font-size: 10.5pt !important;
}
}

View File

@ -23,6 +23,16 @@ div.routersummary {
margin: 0 auto;
}
@media screen and (min-width: 1500px) {
div.routersummary {
width: 600px !important;
}
.routersummary table[id^="sb_"] {
width: 600px !important;
}
}
div[style^='height'] + a {
display: inline-block;
padding-top: 8px !important;
@ -113,3 +123,21 @@ div.main {
min-width: 590px;
margin: -1px 0 5px;
}
.sorry {
margin: -1px 0 0 !important;
}
@media screen and (min-width: 1500px) {
div.news {
margin: -1px 0 0 !important;
}
div.main {
margin: -1px 0 5px !important;
}
.sorry {
margin: -1px 0 0 !important;
}
}

View File

@ -289,6 +289,20 @@ div.routersummary table {
display: inline-block;
}
.sb_notice {
background: #eef;
border: 1px solid #89f;
border-radius: 2px;
box-shadow: 0 0 1px #bbb, inset 0 0 0 1px #fff;
margin: 8px 0 -2px;
padding: 5px 3px;
line-height: 140%;
}
hr + .sb_notice {
margin-top: -2px;
}
div.routersummary tr {
background-image: none !important;
background-color: transparent !important;
@ -1967,7 +1981,7 @@ h1 {
margin: 0 0 10px 207px;
font-size: 18pt;
line-height: 90%;
letter-spacing: 0.08em;
letter-spacing: 0.12em;
text-transform: uppercase;
box-shadow: inset 0 0 0 1px #bbf;
white-space: normal;
@ -2140,7 +2154,7 @@ h4 {
padding: 2px 3px;
color: #001;
font-size: 7pt;
width: 350px;
width: 360px;
text-align: right;
float: right;
vertical-align: middle;
@ -2565,6 +2579,17 @@ button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="re
box-shadow: inset 2px 2px 2px #555;
}
.routersummary .reload[value="Reseed"] {
text-indent: 0;
text-align: left;
min-width: 0;
background: url(/themes/console/images/buttons/download.png) center left 4px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
}
.routersummary .reload[value="Reseed"]:hover, .routersummary .reload[value="Reseed"]:focus {
background: url(/themes/console/images/buttons/download.png) center left 4px no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
}
.routersummary .stop {
background: url(/themes/console/images/buttons/shutdown.png) center center no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%);
}
@ -2578,24 +2603,49 @@ button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="re
background: url(/themes/console/images/buttons/download.png) 3px center no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%);
background-size: 16px 16px, 100% 100% !important;
padding: 5px 3px 5px 17px !important;
/* margin-top: -4px;*/
}
.routersummary .cancel {
margin-top: 10px;
}
@media screen and (-webkit-min-device-pixel-ratio:0) {
.routersummary .download, .routersummary .download:hover, .routersummary .download:focus, .routersummary .download:active {
padding-left: 19px !important;
/* Show text on context specific buttons (eg deferred shutdown) */
.routersummary .reload[value="restartImmediate"], .routersummary .stop[value="shutdownImmediate"], .routersummary .reload[value="Reseed"] {
text-indent: 0;
text-align: left;
min-width: 0 !important;
padding-left: 21px !important;
}
.routersummary .reload[value="restartImmediate"] {
background: url(/themes/console/images/buttons/restart.png) center left 4px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
}
.routersummary .reload[value="restartImmediate"]:hover, .routersummary .reload[value="restartImmediate"]:focus, .routersummary .reload[value="restartImmediate"]:active {
background: url(/themes/console/images/buttons/restart_hover.png) center left 4px no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
}
.routersummary .stop[value="shutdownImmediate"] {
background: url(/themes/console/images/buttons/shutdown.png) center left 4px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
}
.routersummary .stop[value="shutdownImmediate"]:hover, .routersummary .stop[value="shutdownImmediate"]:focus, .routersummary .stop[value="shutdownImmediate"]:active {
background: url(/themes/console/images/buttons/shutdown_hover.png) center left 4px no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%) !important;
}
.routersummary .reload[value="Reseed"] {
background: url(/themes/console/images/buttons/download.png) center left 4px no-repeat, linear-gradient(to bottom, #fff 0%, #ddd 100%) !important;
}
.routersummary .reload[value="Reseed"]:hover, .routersummary .reload[value="Reseed"]:focus, .routersummary .reload[value="Reseed"]:active {
background: url(/themes/console/images/buttons/download.png) center left 4px no-repeat !important, linear-gradient(to bottom, #ddd 0%, #fff 100%);
}
.routersummary .download:hover, .routersummary .download:focus, .routersummary .download:active {
background: url(/themes/console/images/buttons/download.png) 3px center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%);
background: url(/themes/console/images/buttons/download.png) 4px center no-repeat, linear-gradient(to bottom, #ddd 0%, #fff 100%);
background-size: 16px 16px, 100% 100% !important;
padding: 5px 3px 5px 17px !important;
border: 1px solid #f60;
padding: 5px 3px 5px 21px !important;
}
/* end sidebar buttons */
@ -2625,6 +2675,7 @@ input[type="checkbox"], input[type="radio"] {
vertical-align: middle !important;
margin-top: 4px !important;
margin-bottom: 4px !important;
background: none;
}
input[type="checkbox"]:focus, input[type="radio"]:focus {
@ -3391,7 +3442,7 @@ table#leasesetdebug th a:hover, table#leasesetsummary th a:hover {
margin-top: 10px;
}
#netdboverview th {
#netdboverview th, #netdblookup th {
text-transform: uppercase;
font-size: 11pt;
letter-spacing: 0.08em;
@ -3441,6 +3492,11 @@ table#leasesetdebug th a:hover, table#leasesetsummary th a:hover {
border-left: 1px solid #447;
}
#netdbcountrylist img {
margin-right: 5px;
text-align: right;
}
#leasesetsummary td:first-child {
width: 50px;
white-space: nowrap;
@ -3611,7 +3667,7 @@ table.sybil_routerinfo:first-of-type th {
white-space: nowrap;
}
p.sybil_floodfill, p.family, p.threatpoints, p.hashdist, p#sybil_totals {
p.sybil_info, p.family, p.threatpoints, p.hashdist, p#sybil_totals {
border: 1px solid #7778bf;
padding: 5px 5px 5px 30px;
margin: 3px 0;
@ -3623,7 +3679,7 @@ p.family + p.family {
margin-top: -4px;
}
p.sybil_floodfill + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sybil_routerinfo, table.sybil_routerinfo + p {
p.sybil_info + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sybil_routerinfo, table.sybil_routerinfo + p {
margin-top: 10px !important;
}
@ -3650,8 +3706,49 @@ p:empty { /* empty paragraph nuke */
display: none;
}
/* end netdb */
/* Advanced lookup */
#netdblookup {
margin-bottom: -8px;
}
#netdblookup td:first-child {
text-align: right;
width: 100px;
white-space: nowrap;
font-weight: bold;
}
#netdblookup td:nth-child(2) {
width: 100px;
}
.subheading {
text-align: left !important;
background: #fff;
padding: 10px;
border: 1px solid #7778bf;
}
.subheading b {
font-size: 10pt !important;
}
.sybil_distance th {
text-align: left;
padding: 5px;
}
.sybil_distance th:last-child, .sybil_distance td:last-child {
text-align: right;
}
.sybil_distance tr:nth-child(n+2):hover {
background: #ffe;
font-weight: bold;
}
/* end netdb */
ul#banlist {
background: #fff;
@ -4125,7 +4222,7 @@ img.app, img.app2p {
@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,
#peerdefs, #profile_defs, #thresholds, #configinfo, .infohelp, .infowarn, button, input, select, textarea {
#peerdefs, #profile_defs, #thresholds, #configinfo, .infohelp, .infowarn, button, input, select, textarea, #configinfo th {
font-size: 10pt !important;
}
@ -4190,4 +4287,13 @@ h3#pluginconfig, h3#webappconfig, h3#i2pclientconfig, h3#pluginmanage, p#clientc
.sorry {
margin-left: 232px !important;
}
.routersummary .reload, .routersummary .stop {
min-width: 96px;
margin: 0 3px -5px;
}
.subheading b {
font-size: 10.5pt !important;
}
}

View File

@ -14,6 +14,16 @@ div.routersummary {
margin: 0 auto -6px;
}
@media screen and (min-width: 1500px) {
div.routersummary {
width: 600px !important;
}
.routersummary table[id^="sb_"] {
width: 600px !important;
}
}
#xhr {
margin-top: 9px !important;
}
@ -65,20 +75,44 @@ table[id^="sb_"] tr:nth-child(odd) td {
}
h1 {
margin: 14px 10px -1px 0;
margin: 14px 0 -1px;
min-width: 0;
}
div.news {
margin: 0 10px -11px 0;
margin: 0 0 -11px;
min-width: 0;
}
div.main {
margin: 10px 10px 20px 0;
margin: 10px 0 0;
min-width: 0;
}
.sorry {
margin-left: 0 !important;
}
@media screen and (min-width: 1500px) {
h1 {
margin: 14px 0 -1px !important;
}
div.news {
margin: 0 0 -11px !important;
}
div.main {
margin: 10px 0 0 !important;
min-width: 0;
}
.sorry {
margin-left: 0 !important;
}
}
.confignav {
padding-bottom: 10px !important;
}

View File

@ -191,6 +191,7 @@ input[type="checkbox"], .optbox {
vertical-align: sub;
filter: invert(100%) sepia(100%) hue-rotate(200deg) saturate(200%); /* colorize radios and checkboxes */
-webkit-filter: invert(100%) sepia(100%) hue-rotate(200deg) saturate(200%);
background: none;
}
input[type="checkbox"]:hover, .optbox:hover, input[type="checkbox"]:focus, .optbox:focus {
@ -845,6 +846,12 @@ button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="re
background-blend-mode: normal;
}
.routersummary .download {
background: url(/themes/console/images/buttons/download.png) 3px center no-repeat;
background-size: 16px 16px, 100% 100% !important;
padding: 5px 3px 5px 17px !important;
}
.routersummary .reload, .routersummary .stop {
text-indent: -99999px;
background-size: 16px 16px, 100% 100% !important;
@ -874,10 +881,49 @@ button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="re
background-size: 16px 16px, 100% 100% !important;
}
.routersummary .download {
background: url(/themes/console/images/buttons/download.png) 3px center no-repeat;
background-size: 16px 16px, 100% 100% !important;
padding: 5px 3px 5px 17px !important;
/* Show text on context specific buttons (eg deferred shutdown) */
.routersummary .reload[value="restartImmediate"], .routersummary .stop[value="shutdownImmediate"], .routersummary .reload[value="Reseed"] {
text-indent: 0;
text-align: left;
min-width: 0 !important;
padding-left: 21px !important;
}
.routersummary .reload[value="restartImmediate"] {
background: url(/themes/console/images/buttons/restart.png) center left 4px no-repeat, linear-gradient(to bottom, #1f1e32, #090812 50%, #000 50%) !important;
}
.routersummary .reload[value="restartImmediate"]:hover {
background: #000 url(/themes/console/images/buttons/restart.png) center left 4px no-repeat !important;
}
.routersummary .reload[value="restartImmediate"]:focus, .routersummary .reload[value="restartImmediate"]:active {
background: url(/themes/console/images/buttons/restart_hover.png) center left 4px no-repeat;
}
.routersummary .stop[value="shutdownImmediate"] {
background: url(/themes/console/images/buttons/shutdown.png) center left 4px no-repeat, linear-gradient(to bottom, #1f1e32, #090812 50%, #000 50%) !important;
}
.routersummary .stop[value="shutdownImmediate"]:hover {
background: #000 url(/themes/console/images/buttons/shutdown_hover.png) center left 4px no-repeat !important;
}
.routersummary .stop[value="shutdownImmediate"]:focus, .routersummary .stop[value="shutdownImmediate"]:active {
background: url(/themes/console/images/buttons/shutdown_hover.png) center left 4px no-repeat;
}
.routersummary .reload[value="Reseed"] {
background: url(/themes/console/images/buttons/download.png) center left 4px no-repeat, linear-gradient(to bottom, #1f1e32, #090812 50%, #000 50%) !important;
}
.routersummary .reload[value="Reseed"]:hover {
background: #000 url(/themes/console/images/buttons/download.png) center left 4px no-repeat !important;
}
.routersummary .reload[value="Reseed"]:focus, .routersummary .reload[value="Reseed"]:active {
background: #652787 url(/themes/console/images/buttons/download.png) center left 4px no-repeat !important;
}
@media screen and (-webkit-min-device-pixel-ratio:0) {
@ -1165,7 +1211,21 @@ div.logo hr {
line-height: 140%;
}
.sb_notice {
background: #001;
border: 1px solid #241f69;
border-radius: 2px;
box-shadow: inset 0 0 0 1px #000;
margin: 10px -4px -2px;
padding: 5px 3px;
}
hr + .sb_notice {
margin-top: 6px;
}
/* sidebar stacked tables fix */
#sb_localid + #sb_version {
margin-top: 6px !important;
margin-bottom: 5px !important;
@ -2028,7 +2088,10 @@ h2 a:visited {
h2 a:hover {
color: #652787;
text-shadow: 0 0 1px #652787;
}
h2 a[name]:hover, h2 a[name]:active {
color: #c9ceff !important;
}
h3, h3.welcome, div.news h3 {
@ -2067,11 +2130,11 @@ h2, h3, h4, .confignav {
}
.langbox {
margin: 3px 4px 2px 5px;
margin: 5px 4px 2px 5px;
padding: 0;
color: #c9ceff;
font-size: 7pt;
width: 350px;
width: 360px;
text-align: right;
float: right;
vertical-align: middle;
@ -2079,7 +2142,8 @@ h2, h3, h4, .confignav {
.langbox img {
opacity: 0.5;
padding: 1px 2px !important;
margin: 0 !important;
padding: 0;
}
.langbox img:hover {
@ -3510,6 +3574,7 @@ div#volunteer {
}
#changelog pre {
margin-top: 11px;
padding: 10px 10px 10px 20px;
max-height: 600px;
overflow-y: scroll;
@ -3570,6 +3635,11 @@ table#netdboverview {
margin-bottom: 0;
}
#netdbcountrylist img {
margin-right: 5px;
text-align: right;
}
#netdbtransports {
border-left: 1px solid transparent !important;
border-right: 1px solid transparent !important;
@ -3620,6 +3690,75 @@ th > img[src^="/imagegen"] { /* scale down header images */
border: 1px solid #000;
}
/* Advanced lookup */
#netdblookup {
margin-bottom: -4px;
}
#netdblookup th {
text-align: left;
font-size: 11pt;
letter-spacing: 0.08em;
padding: 10px;
text-transform: uppercase;
}
#netdblookup td:first-child {
text-align: right;
width: 100px;
white-space: nowrap;
font-weight: bold;
}
#netdblookup td:nth-child(2) {
width: 100px;
padding-left: 0;
}
.subheading {
text-align: left !important;
background: #000;
padding: 10px;
border: 1px solid #443da0;
}
.subheading b {
font-size: 10pt !important;
}
#netdblookup .optbox {
margin: 10px ;
}
#netdblookup .optionsave {
padding: 10px !important;
}
#netdb .tabletitle {
margin-bottom: -2px !important;
}
.sybil_distance th {
text-align: left;
padding: 5px;
}
.sybil_distance th:last-child, .sybil_distance td:last-child {
text-align: right;
}
.sybil_distance tr:nth-child(n+2):hover {
background: #002;
font-weight: bold;
}
.sybil_distance:last-child {
margin-bottom: 9px;
}
/* end netdb */
/* logs */
a[name="criticallogs"] + p + h3 + p + ul { /* tidy router logs ul */
@ -4016,6 +4155,10 @@ table#jardump { /* /jars */
margin-top: -13px;
}
.main#debug h2 + hr {
display: none;
}
div.footnote {
text-align: right;
color: #443da0;
@ -4046,7 +4189,7 @@ div.home {
}
h4.app, h4.app2 {
background: url(images/header.png) center center repeat-x;
background: linear-gradient(to bottom, #191729 0%, #201f33 7%, #1f1e32 9%, #161525 21%, #090812 49%, #05050e 50%, #020206 51%, #010103 53%, #000000 56%, #000000 100%) !important;
border: 1px solid #443da0;
font-size: 10.5pt;
font-variant: small-caps;
@ -4073,7 +4216,7 @@ div.ag2 {
div.app {
float: left;
padding: 2px 0 4px;
padding: 2px 0 0;
min-width: 70px;
border: 1px solid #443da0;
background: #000;
@ -4238,7 +4381,7 @@ td.app {
div.applabel {
font-size: 8pt;
margin: 2px 0 0;
padding: 5px 2px 2px;
padding: 5px 2px 6px;
text-align: center;
vertical-align: bottom;
line-height: 95%;
@ -4579,7 +4722,7 @@ table.sybil_routerinfo:first-of-type th {
white-space: nowrap;
}
p.sybil_floodfill, p.family, p.threatpoints, p.hashdist, p#sybil_totals {
p.sybil_info, p.family, p.threatpoints, p.hashdist, p#sybil_totals {
border: 1px solid #443da0;
padding: 5px 5px 5px 30px;
margin: 3px 0;
@ -4590,15 +4733,15 @@ p.sybil_floodfill, p.family, p.threatpoints, p.hashdist, p#sybil_totals {
box-shadow: inset 0 0 0 1px #080077;
}
p.sybil_floodfill, p.hashdist, p.family {
p.sybil_info, p.hashdist, p.family {
margin-top: -1px;
}
p.sybil_floodfill + p.sybil_floodfill, p.family + p.family {
p.sybil_info + p.sybil_info, p.family + p.family {
margin-top: -4px;
}
p.sybil_floodfill + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sybil_routerinfo {
p.sybil_info + a[name] + table.sybil_routerinfo, p.hashdist + a[name] + table.sybil_routerinfo {
margin-top: 10px !important;
}
@ -5172,4 +5315,8 @@ h4#updateplugins {
.sorry {
margin-left: 232px !important;
}
.subheading b {
font-size: 10.5pt !important;
}
}

View File

@ -23,6 +23,16 @@ div.routersummary {
margin: 0 auto;
}
@media screen and (min-width: 1500px) {
div.routersummary {
width: 600px !important;
}
.routersummary table[id^="sb_"] {
width: 600px !important;
}
}
div[style^='height'] + a {
display: inline-block;
padding-top: 8px !important;
@ -111,3 +121,21 @@ div.main {
min-width: 580px;
margin: -1px 0 !important;
}
.sorry {
margin: -1px 0 0;
}
@media screen and (min-width: 1500px) {
div.news {
margin: -1px 0 0 !important;
}
div.main {
margin: -1px 0 !important;
}
.sorry {
margin: -1px 0 0 !important;
}
}