mirror of
https://github.com/i2p/i2p.i2p.git
synced 2024-12-06 19:27:00 +01:00
merge of '95d429bc46db23b3e3181caf4e622b763cff51eb'
and 'ca23007c18cf5894a1b6b4efa92207aa025473d2'
This commit is contained in:
@@ -88,8 +88,8 @@
|
||||
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
</target>
|
||||
|
||||
<target name="jarUpToDate">
|
||||
<uptodate property="jar.uptodate" targetfile="build/i2psnark.jar" >
|
||||
<srcfiles dir= "build/obj" includes="**/*.class" excludes="**/web/* **/messages_*.class" />
|
||||
@@ -137,13 +137,13 @@
|
||||
</manifest>
|
||||
</war>
|
||||
</target>
|
||||
|
||||
|
||||
<target name="warUpToDate">
|
||||
<uptodate property="war.uptodate" targetfile="../i2psnark.war" >
|
||||
<srcfiles dir= "." includes="build/obj/org/klomp/snark/web/*.class ../resources/**/* ../web.xml" />
|
||||
</uptodate>
|
||||
</target>
|
||||
|
||||
|
||||
<target name="bundle" depends="compile" unless="no.bundle">
|
||||
<mkdir dir="build/messages-src" />
|
||||
<!-- Update the messages_*.po files.
|
||||
@@ -155,7 +155,7 @@
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<!-- multi-lang is optional -->
|
||||
<!-- multi-lang is optional -->
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="false" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
@@ -242,51 +242,66 @@
|
||||
<copy todir="build/standalone-resources/.resources/themes/snark" >
|
||||
<fileset dir="../../../installer/resources/themes/snark/" />
|
||||
</copy>
|
||||
|
||||
<replace dir="build/standalone-resources/.resources/themes/snark"
|
||||
summary="true"
|
||||
token="url('/themes/"
|
||||
value="url('/i2psnark/.resources/themes/" >
|
||||
token="url(/themes/console/classic/images/"
|
||||
value="url(/i2psnark/.resources/themes/snark/classic/images/" >
|
||||
<include name="**/*.css" />
|
||||
</replace>
|
||||
<replace dir="build/standalone-resources/.resources/themes/snark"
|
||||
summary="true"
|
||||
token="url('../../console/images/"
|
||||
value="url('/i2psnark/.resources/themes/snark/ubergine/images/" >
|
||||
token="url(/themes/console/dark/images/"
|
||||
value="url(/i2psnark/.resources/themes/snark/dark/images/" >
|
||||
<include name="**/*.css" />
|
||||
</replace>
|
||||
<replace dir="build/standalone-resources/.resources/themes/snark"
|
||||
summary="true"
|
||||
token="url('../../console/dark/images/"
|
||||
value="url('/i2psnark/.resources/themes/snark/ubergine/images/" >
|
||||
token="url(../../console/light/images/"
|
||||
value="url(/i2psnark/.resources/themes/snark/light/images/" >
|
||||
<include name="**/*.css" />
|
||||
</replace>
|
||||
<replace dir="build/standalone-resources/.resources/themes/snark"
|
||||
summary="true"
|
||||
token="url('../../console/light/images/"
|
||||
value="url('/i2psnark/.resources/themes/snark/ubergine/images/" >
|
||||
token="url(/themes/console/light/images/"
|
||||
value="url(/i2psnark/.resources/themes/snark/light/images/" >
|
||||
<include name="**/*.css" />
|
||||
</replace>
|
||||
<replace dir="build/standalone-resources/.resources/themes/snark"
|
||||
summary="true"
|
||||
token="url('images/"
|
||||
value="url('/i2psnark/.resources/themes/snark/ubergine/images/" >
|
||||
token="url(/themes/console/images/transparent.gif"
|
||||
value="url(/i2psnark/.resources/themes/snark/ubergine/images/transparent.gif" >
|
||||
<include name="**/*.css" />
|
||||
</replace>
|
||||
<copy todir="build/standalone-resources/.resources/themes/snark/ubergine/images" >
|
||||
<!-- we really don't need all of these -->
|
||||
<fileset dir="../../../installer/resources/themes/console/images/" />
|
||||
</copy>
|
||||
<replace dir="build/standalone-resources/.resources/themes/snark"
|
||||
summary="true"
|
||||
token="url(/themes/console/images/info/"
|
||||
value="url(/i2psnark/.resources/themes/snark/ubergine/images/" >
|
||||
<include name="**/*.css" />
|
||||
</replace>
|
||||
|
||||
<!-- Rather than pulling in all the console theme images, let's just specify the ones we need -->
|
||||
<copy file="../../../installer/resources/themes/console/images/transparent.gif"
|
||||
todir="build/standalone-resources/.resources/themes/snark/ubergine/images" />
|
||||
<copy file="../../../installer/resources/themes/console/dark/images/header.png"
|
||||
todir="build/standalone-resources/.resources/themes/snark/dark/images" />
|
||||
<copy file="../../../installer/resources/themes/console/light/images/header.png"
|
||||
todir="build/standalone-resources/.resources/themes/snark/light/images" />
|
||||
<copy file="../../../installer/resources/themes/console/dark/images/camotile2.png"
|
||||
todir="build/standalone-resources/.resources/themes/snark/dark/images" />
|
||||
<copy file="../../../installer/resources/themes/console/images/info/errortriangle.png"
|
||||
todir="build/standalone-resources/.resources/themes/snark/ubergine/images" />
|
||||
<copy file="../../../installer/resources/themes/console/classic/images/bg0.png"
|
||||
todir="build/standalone-resources/.resources/themes/snark/classic/images" />
|
||||
|
||||
<mkdir dir="build/standalone-resources/.resources/js" />
|
||||
<copy file="../../routerconsole/jsp/js/ajax.js" todir="build/standalone-resources/.resources/js" />
|
||||
|
||||
<zip destfile="../i2psnark.war" update="true" duplicate="preserve" >
|
||||
<fileset dir="build/standalone-resources" />
|
||||
</zip>
|
||||
</target>
|
||||
|
||||
|
||||
<target name="standalone_prep" depends="standalone_jar, standalone_war">
|
||||
<delete dir="./dist" />
|
||||
<mkdir dir="./dist" />
|
||||
|
||||
@@ -850,7 +850,7 @@ public class SnarkManager implements CompleteListener, ClientApp {
|
||||
themes = new String[0];
|
||||
}
|
||||
} else {
|
||||
themes = new String[] { "light", "ubergine", "vanilla" };
|
||||
themes = new String[] { "classic", "dark", "light", "midnight", "ubergine", "vanilla" };
|
||||
}
|
||||
return themes;
|
||||
}
|
||||
|
||||
@@ -2560,7 +2560,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
buf.append("<tr class=\"knownTracker\"><td><input type=\"checkbox\" class=\"optbox\" id=\"").append(name).append("\" name=\"delete_")
|
||||
.append(name).append("\" title=\"").append(_t("Mark tracker for deletion")).append("\">" +
|
||||
"</td><td><label for=\"").append(name).append("\">").append(name)
|
||||
.append("</td><td>").append(urlify(homeURL, 35))
|
||||
.append("</label></td><td>").append(urlify(homeURL, 35))
|
||||
.append("</td><td><input type=\"radio\" class=\"optbox\" value=\"0\" tabindex=\"-1\" name=\"ttype_")
|
||||
.append(announceURL).append("\"");
|
||||
if (!(isOpen || isPrivate))
|
||||
|
||||
@@ -203,6 +203,7 @@ class NetDbRenderer {
|
||||
}
|
||||
}
|
||||
if (notFound) {
|
||||
buf.append("<div class=\"netdbnotfound\">");
|
||||
buf.append(_t("Router")).append(' ');
|
||||
if (routerPrefix != null)
|
||||
buf.append(routerPrefix);
|
||||
@@ -213,6 +214,7 @@ class NetDbRenderer {
|
||||
else if (family != null)
|
||||
buf.append(_t("Family")).append(' ').append(family);
|
||||
buf.append(' ').append(_t("not found in network database"));
|
||||
buf.append("</div>");
|
||||
}
|
||||
}
|
||||
out.write(buf.toString());
|
||||
@@ -303,6 +305,7 @@ class NetDbRenderer {
|
||||
}
|
||||
|
||||
long now = _context.clock().now();
|
||||
buf.append("<div class=\"leasesets_container\">");
|
||||
for (LeaseSet ls : leases) {
|
||||
Destination dest = ls.getDestination();
|
||||
Hash key = dest.calculateHash();
|
||||
@@ -312,7 +315,7 @@ class NetDbRenderer {
|
||||
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") + ' ');
|
||||
buf.append("<b>").append(_t("Unpublished")).append("</b> ");
|
||||
buf.append("<b>").append(_t("Destination")).append(":</b> ");
|
||||
TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(key);
|
||||
if (in != null && in.getDestinationNickname() != null)
|
||||
@@ -365,17 +368,17 @@ class NetDbRenderer {
|
||||
if (debug) {
|
||||
buf.append("<tr><td colspan=\"2\">");
|
||||
buf.append("<b>RAP?</b> ").append(ls.getReceivedAsPublished());
|
||||
buf.append(" <b>RAR?</b> ").append(ls.getReceivedAsReply());
|
||||
buf.append(" <b>RAR?</b> ").append(ls.getReceivedAsReply());
|
||||
BigInteger dist = HashDistance.getDistance(ourRKey, ls.getRoutingKey());
|
||||
if (ls.getReceivedAsPublished()) {
|
||||
if (c++ == medianCount)
|
||||
median = dist;
|
||||
}
|
||||
buf.append(" <b>Distance: </b><span id=\"distance\">").append(fmt.format(biLog2(dist))).append("</span>");
|
||||
buf.append(" <b>Distance: </b>").append(fmt.format(biLog2(dist)));
|
||||
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());
|
||||
buf.append(" <b>Encryption Key:</b> ").append(ls.getEncryptionKey().toBase64().substring(0, 20)).append("…");
|
||||
buf.append(" <b>Encryption Key:</b> ").append(ls.getEncryptionKey().toBase64().substring(0, 20)).append("…");
|
||||
buf.append("</td></tr>\n<tr><td colspan=\"2\">");
|
||||
buf.append("<b>Routing Key:</b> ").append(ls.getRoutingKey().toBase64());
|
||||
buf.append("</td></tr>");
|
||||
@@ -390,9 +393,9 @@ class NetDbRenderer {
|
||||
if (debug) {
|
||||
long exl = lease.getEndDate().getTime() - now;
|
||||
if (exl > 0)
|
||||
buf.append("<b>").append(_t("Expires in {0}", DataHelper.formatDuration2(exl))).append("</b>");
|
||||
buf.append("<b class=\"netdb_expiry\">").append(_t("Expires in {0}", DataHelper.formatDuration2(exl))).append("</b>");
|
||||
else
|
||||
buf.append("<b>").append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exl))).append("</b>");
|
||||
buf.append("<b class=\"netdb_expiry\">").append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exl))).append("</b>");
|
||||
}
|
||||
buf.append("</td></tr>\n");
|
||||
}
|
||||
@@ -400,6 +403,7 @@ class NetDbRenderer {
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
} // for each
|
||||
buf.append("</div>");
|
||||
} // !empty
|
||||
out.write(buf.toString());
|
||||
out.flush();
|
||||
@@ -427,18 +431,20 @@ class NetDbRenderer {
|
||||
*/
|
||||
public void renderStatusHTML(Writer out, int mode) throws IOException {
|
||||
if (!_context.netDb().isInitialized()) {
|
||||
out.write("<div id=\"notinitialized\">");
|
||||
out.write(_t("Not initialized"));
|
||||
out.write("</div>");
|
||||
out.flush();
|
||||
return;
|
||||
}
|
||||
Log log = _context.logManager().getLog(NetDbRenderer.class);
|
||||
long start = System.currentTimeMillis();
|
||||
|
||||
|
||||
boolean full = mode == 1;
|
||||
boolean shortStats = mode == 2;
|
||||
boolean showStats = full || shortStats; // this means show the router infos
|
||||
Hash us = _context.routerHash();
|
||||
|
||||
|
||||
StringBuilder buf = new StringBuilder(8192);
|
||||
if (showStats) {
|
||||
RouterInfo ourInfo = _context.router().getRouterInfo();
|
||||
@@ -446,11 +452,11 @@ class NetDbRenderer {
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
}
|
||||
|
||||
|
||||
ObjectCounter<String> versions = new ObjectCounter<String>();
|
||||
ObjectCounter<String> countries = new ObjectCounter<String>();
|
||||
int[] transportCount = new int[TNAMES.length];
|
||||
|
||||
|
||||
Set<RouterInfo> routers = new TreeSet<RouterInfo>(new RouterInfoComparator());
|
||||
routers.addAll(_context.netDb().getRouters());
|
||||
for (RouterInfo ri : routers) {
|
||||
@@ -475,7 +481,7 @@ class NetDbRenderer {
|
||||
if (log.shouldWarn())
|
||||
log.warn("part 1 took " + (end - start));
|
||||
start = end;
|
||||
|
||||
|
||||
//
|
||||
// don't bother to reindent
|
||||
//
|
||||
@@ -506,7 +512,7 @@ class NetDbRenderer {
|
||||
if (log.shouldWarn())
|
||||
log.warn("part 2 took " + (end - start));
|
||||
start = end;
|
||||
|
||||
|
||||
// transports table
|
||||
buf.append("<table id=\"netdbtransports\">\n");
|
||||
buf.append("<tr><th align=\"left\">" + _t("Transports") + "</th><th>" + _t("Count") + "</th></tr>\n");
|
||||
@@ -591,6 +597,7 @@ class NetDbRenderer {
|
||||
* Be careful to use stripHTML for any displayed routerInfo data
|
||||
* to prevent vulnerabilities
|
||||
*/
|
||||
|
||||
private void renderRouterInfo(StringBuilder buf, RouterInfo info, boolean isUs, boolean full) {
|
||||
String hash = info.getIdentity().getHash().toBase64();
|
||||
buf.append("<table class=\"netdbentry\">")
|
||||
@@ -599,6 +606,13 @@ class NetDbRenderer {
|
||||
buf.append("<a name=\"our-info\" ></a><b>" + _t("Our info") + ":</b> <code>").append(hash).append("</code></th><th>");
|
||||
} else {
|
||||
buf.append("<b>" + _t("Peer info for") + ":</b> <code>").append(hash).append("</code></th><th>");
|
||||
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("\"> ").append("</a>");
|
||||
}
|
||||
if (!full) {
|
||||
buf.append("<a title=\"").append(_t("View extended router info"))
|
||||
.append("\" class=\"viewfullentry\" href=\"netdb?r=").append(hash.substring(0, 6))
|
||||
@@ -609,43 +623,36 @@ class NetDbRenderer {
|
||||
long age = _context.clock().now() - info.getPublished();
|
||||
if (isUs && _context.router().isHidden()) {
|
||||
buf.append("<td><b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b></td>")
|
||||
.append("<td colspan=\"2\">")
|
||||
.append("<td colspan=\"2\"><span class=\"netdb_info\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age)))
|
||||
.append("</td>");
|
||||
.append("</span> ");
|
||||
} else if (age > 0) {
|
||||
buf.append("<td><b>").append(_t("Published")).append(":</b></td>")
|
||||
.append("<td colspan=\"2\">")
|
||||
.append("<td colspan=\"2\"><span class=\"netdb_info\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age)))
|
||||
.append("</td>");
|
||||
.append("</span> ");
|
||||
} else {
|
||||
// shouldnt happen
|
||||
buf.append("<td colspan=\"2\"><b>").append(_t("Published")).append(":</b> in ").append(DataHelper.formatDuration2(0-age)).append("???</td>");
|
||||
buf.append("<td><b>").append(_t("Published")).append("</td><td colspan=\"2\">:</b> in ")
|
||||
.append(DataHelper.formatDuration2(0-age)).append("<span class=\"netdb_info\">???</span> ");
|
||||
}
|
||||
buf.append("</tr>\n<tr><td>");
|
||||
buf.append("<b>").append(_t("Signing Key")).append(":</b> ")
|
||||
.append("</td><td colspan=\"2\">")
|
||||
.append(info.getIdentity().getSigningPublicKey().getType().toString());
|
||||
buf.append("</td></tr>\n<tr>")
|
||||
.append("<td><b>" + _t("Address(es)") + ":</b></td>")
|
||||
.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("\"> ").append("</a>");
|
||||
}
|
||||
.append("<td colspan=\"2\" class=\"netdb_addresses\">");
|
||||
for (RouterAddress addr : info.getAddresses()) {
|
||||
String style = addr.getTransportStyle();
|
||||
buf.append("<b>").append(DataHelper.stripHTML(style)).append(":</b> ");
|
||||
buf.append("<br><b class=\"netdb_transport\">").append(DataHelper.stripHTML(style)).append(":</b>");
|
||||
int cost = addr.getCost();
|
||||
if (!((style.equals("SSU") && cost == 5) || (style.equals("NTCP") && cost == 10)))
|
||||
buf.append('[').append(_t("cost")).append('=').append("" + cost).append("] ");
|
||||
buf.append(" <span class=\"netdb_name\">").append(_t("cost")).append("</span>: <span class=\"netdb_info\">").append("" + cost).append("</span> ");
|
||||
Map<Object, Object> p = addr.getOptionsMap();
|
||||
for (Map.Entry<Object, Object> e : p.entrySet()) {
|
||||
String name = (String) e.getKey();
|
||||
String val = (String) e.getValue();
|
||||
buf.append('[').append(_t(DataHelper.stripHTML(name))).append('=').append(DataHelper.stripHTML(val)).append("] ");
|
||||
buf.append(" <span class=\"nowrap\"><span class=\"netdb_name\">").append(_t(DataHelper.stripHTML(name)))
|
||||
.append(":</span> <span class=\"netdb_info\">").append(DataHelper.stripHTML(val)).append("</span></span> ");
|
||||
}
|
||||
}
|
||||
buf.append("</td></tr>\n");
|
||||
|
||||
@@ -271,11 +271,11 @@ class SybilRenderer {
|
||||
double p = pp.points;
|
||||
if (p < MIN_DISPLAY_POINTS)
|
||||
break; // sorted
|
||||
buf.append("<p class=\"threatpoints\"><b>Threat Points: " + fmt.format(p) + "</b><ul>");
|
||||
buf.append("<p class=\"threatpoints\"><b>Threat Points: " + fmt.format(p) + "</b></p><ul>");
|
||||
for (String s : pp.reasons) {
|
||||
buf.append("<li>").append(s).append("</li>");
|
||||
}
|
||||
buf.append("</ul></p>");
|
||||
buf.append("</ul>");
|
||||
renderRouterInfo(buf, ri, null, false, false);
|
||||
}
|
||||
}
|
||||
@@ -586,7 +586,7 @@ class SybilRenderer {
|
||||
}
|
||||
|
||||
private void renderIPGroupsFamily(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
|
||||
buf.append("<h3 id=\"samefamily\" class=\"sybils\">Floodfills in the Same Declared Family</h3>");
|
||||
buf.append("<h3 id=\"samefamily\" class=\"sybils\">Floodfills in the Same Declared Family</h3><div class=\"sybil_container\">");
|
||||
ObjectCounter<String> oc = new ObjectCounter<String>();
|
||||
for (RouterInfo info : ris) {
|
||||
String fam = info.getOption("family");
|
||||
@@ -602,7 +602,7 @@ class SybilRenderer {
|
||||
for (String s : foo) {
|
||||
int count = oc.count(s);
|
||||
String ss = DataHelper.escapeHTML(s);
|
||||
buf.append("<p class=\"family\"><b>").append(count).append(" floodfills in family: <a href=\"/netdb?fam=")
|
||||
buf.append("<p class=\"family\"><b>").append(count).append(" floodfills in family: <a href=\"/netdb?fam=")
|
||||
.append(ss).append("&sybil\">").append(ss).append("</a></b></p>");
|
||||
for (RouterInfo info : ris) {
|
||||
String fam = info.getOption("family");
|
||||
@@ -628,6 +628,7 @@ class SybilRenderer {
|
||||
}
|
||||
if (!found)
|
||||
buf.append("<p class=\"notfound\">None</p>");
|
||||
buf.append("</div>");
|
||||
out.write(buf.toString());
|
||||
out.flush();
|
||||
buf.setLength(0);
|
||||
@@ -754,7 +755,8 @@ class SybilRenderer {
|
||||
break;
|
||||
}
|
||||
double avg = tot / count;
|
||||
buf.append("<p id=\"sybil_totals\"><b>Totals for " + count + " floodfills: </b>MIN=" + fmt.format(min) + " AVG=" + fmt.format(avg) + " MEDIAN=" + fmt.format(median) + " MAX=" + fmt.format(max) + "</p>\n");
|
||||
buf.append("<p id=\"sybil_totals\"><b>Totals for " + count + " floodfills: </b><span class=\"netdb_name\">MIN:</span > " + fmt.format(min) + " <span class=\"netdb_name\">AVG:</span> " +
|
||||
fmt.format(avg) + " <span class=\"netdb_name\">MEDIAN:</span> " + fmt.format(median) + " <span class=\"netdb_name\">MAX:</span> " + fmt.format(max) + "</p>\n");
|
||||
out.write(buf.toString());
|
||||
out.flush();
|
||||
buf.setLength(0);
|
||||
@@ -789,36 +791,53 @@ class SybilRenderer {
|
||||
*/
|
||||
private double renderRouterInfo(StringBuilder buf, RouterInfo info, Hash us, boolean isUs, boolean full) {
|
||||
String hash = info.getIdentity().getHash().toBase64();
|
||||
buf.append("<table class=\"sybil_routerinfo\"><a name=\"").append(hash.substring(0, 6)).append("\" ></a><tr>");
|
||||
buf.append("<a name=\"").append(hash.substring(0, 6)).append("\"></a><table class=\"sybil_routerinfo\"><tr>");
|
||||
double distance = 0;
|
||||
if (isUs) {
|
||||
buf.append("<th colspan=\"4\"><a name=\"our-info\" ></a><b>" + _t("Our info") + ":</b> <code>").append(hash).append("</code></th></tr>\n");
|
||||
buf.append("<th colspan=\"2\"><a name=\"our-info\" ></a><b>" + _t("Our info") + ":</b> <code>").append(hash)
|
||||
.append("</code></th></tr>\n<tr><td class=\"sybilinfo_params\" colspan=\"2\"><div class=\"sybilinfo_container\">");
|
||||
} else {
|
||||
buf.append("<th colspan=\"2\"><b>" + _t("Router") + ":</b> <code>").append(hash).append("</code>\n");
|
||||
buf.append("<th><b>" + _t("Router") + ":</b> <code>").append(hash).append("</code>\n");
|
||||
|
||||
String country = _context.commSystem().getCountry(info.getIdentity().getHash());
|
||||
buf.append("</th><th>");
|
||||
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("\"> ").append("</a>");
|
||||
}
|
||||
if (!full) {
|
||||
buf.append("</th><th><a title=\"View extended router info\" class=\"viewfullentry\" href=\"netdb?r=").append(hash.substring(0, 6)).append("\" >[").append(_t("Full entry")).append("]</a></th><th>");
|
||||
buf.append("<a title=\"View extended router info\" class=\"viewfullentry\" href=\"netdb?r=")
|
||||
.append(hash.substring(0, 6)).append("\" >[").append(_t("Full entry")).append("]</a></th><th>");
|
||||
}
|
||||
buf.append("<img src=\"/imagegen/id?s=32&c=" + hash.replace("=", "%3d") + "\" height=\"32\" width=\"32\"> ");
|
||||
buf.append("</th></tr>\n");
|
||||
buf.append("</th></tr>\n<tr><td class=\"sybilinfo_params\" colspan=\"3\"><div class=\"sybilinfo_container\">");
|
||||
if (us != null) {
|
||||
BigInteger dist = HashDistance.getDistance(us, info.getHash());
|
||||
distance = biLog2(dist);
|
||||
buf.append("<tr><td><b>Hash Distance:</b></td><td colspan=\"3\">").append(fmt.format(distance)).append("</td></tr>\n");
|
||||
buf.append("<p><b>Hash Distance:</b> ").append(fmt.format(distance)).append("</p>\n");
|
||||
}
|
||||
}
|
||||
buf.append("<tr><td><b>Routing Key:</b></td><td colspan=\"3\">").append(info.getRoutingKey().toBase64()).append("</td></tr>\n");
|
||||
buf.append("<tr><td><b>Version:</b></td><td colspan=\"3\">").append(DataHelper.stripHTML(info.getVersion())).append("</td></tr>\n");
|
||||
buf.append("<tr><td><b>Caps:</b></td><td colspan=\"3\">").append(DataHelper.stripHTML(info.getCapabilities())).append("</td></tr>\n");
|
||||
String fam = info.getOption("family");
|
||||
if (fam != null)
|
||||
buf.append("<tr><td><b>Family:</b></td><td colspan=\"3\">").append(DataHelper.escapeHTML(fam)).append("</td></tr>\n");
|
||||
String kls = info.getOption("netdb.knownLeaseSets");
|
||||
if (kls != null)
|
||||
buf.append("<tr><td><b>Lease Sets:</b></td><td colspan=\"3\">").append(DataHelper.stripHTML(kls)).append("</td></tr>\n");
|
||||
buf.append("<p><b>Version:</b> ").append(DataHelper.stripHTML(info.getVersion())).append("</p>\n");
|
||||
buf.append("<p><b>Caps:</b> ").append(DataHelper.stripHTML(info.getCapabilities())).append("</p>\n");
|
||||
String kr = info.getOption("netdb.knownRouters");
|
||||
if (kr != null)
|
||||
buf.append("<tr><td><b>Routers:</b></td><td colspan=\"3\">").append(DataHelper.stripHTML(kr)).append("</td></tr>\n");
|
||||
|
||||
;
|
||||
if (kr != null) {
|
||||
buf.append("<p><b>Routers:</b> ").append(DataHelper.stripHTML(kr)).append("</p>");
|
||||
} else {
|
||||
buf.append("<p class=\"sybil_filler\"><b>Routers:</b> ").append(_t("n/a")).append("</p>");
|
||||
}
|
||||
String kls = info.getOption("netdb.knownLeaseSets");
|
||||
if (kls != null) {
|
||||
buf.append("<p class=\"sybilinfo_leasesets\"><b>Lease Sets:</b> ").append(DataHelper.stripHTML(kls)).append("</p>\n");
|
||||
} else {
|
||||
buf.append("<p class=\"sybilinfo_leasesets filler\"><b>Lease Sets:</b> ").append(_t("n/a")).append("</p>");
|
||||
}
|
||||
String fam = info.getOption("family");
|
||||
if (fam != null) {
|
||||
buf.append("<p><b>Family:</b> <span class=\"sybilinfo_familyname\">").append(DataHelper.escapeHTML(fam)).append("</span></p>\n");
|
||||
}
|
||||
long now = _context.clock().now();
|
||||
if (!isUs) {
|
||||
PeerProfile prof = _context.profileOrganizer().getProfileNonblocking(info.getHash());
|
||||
@@ -826,46 +845,53 @@ class SybilRenderer {
|
||||
long heard = prof.getFirstHeardAbout();
|
||||
if (heard > 0) {
|
||||
long age = Math.max(now - heard, 1);
|
||||
buf.append("<tr><td><b>First heard about:</b></td><td colspan=\"3\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
|
||||
buf.append("<p><b>First heard about:</b> ").append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</p>");
|
||||
} else {
|
||||
buf.append("<p class=\"sybil_filler\"><b>First heard about:</b> ").append(_t("n/a")).append("</p>");
|
||||
}
|
||||
heard = prof.getLastHeardAbout();
|
||||
if (heard > 0) {
|
||||
long age = Math.max(now - heard, 1);
|
||||
buf.append("<tr><td><b>Last heard about:</b></td><td colspan=\"3\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
|
||||
buf.append("<p><b>Last heard about:</b> ").append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</p>");
|
||||
} else {
|
||||
buf.append("<p class=\"sybil_filler\"><b>Last heard about:</b> ").append(_t("n/a")).append("</p>");
|
||||
}
|
||||
heard = prof.getLastHeardFrom();
|
||||
if (heard > 0) {
|
||||
long age = Math.max(now - heard, 1);
|
||||
buf.append("<tr><td><b>Last heard from:</b></td><td colspan=\"3\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
|
||||
buf.append("<p><b>Last heard from:</b> ").append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</p>\n");
|
||||
} else {
|
||||
buf.append("<p class=\"sybil_filler\"><b>Last heard from:</b> ").append(_t("n/a")).append("</p>");
|
||||
}
|
||||
DBHistory dbh = prof.getDBHistory();
|
||||
if (dbh != null) {
|
||||
heard = dbh.getLastLookupSuccessful();
|
||||
if (heard > 0) {
|
||||
long age = Math.max(now - heard, 1);
|
||||
buf.append("<tr><td><b>Last lookup successful:</b></td><td colspan=\"3\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
|
||||
buf.append("<p><b>Last lookup successful:</b> ").append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</p>");
|
||||
} else {
|
||||
buf.append("<p class=\"sybil_filler\"><b>Last lookup successful:</b> ").append(_t("n/a")).append("</p>");
|
||||
}
|
||||
heard = dbh.getLastLookupFailed();
|
||||
if (heard > 0) {
|
||||
long age = Math.max(now - heard, 1);
|
||||
buf.append("<tr><td><b>Last lookup failed:</b></td><td colspan=\"3\"> ")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
|
||||
buf.append("<p><b>Last lookup failed:</b> ").append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</p>");
|
||||
} else {
|
||||
buf.append("<p class=\"sybil_filler\"><b>Last lookup failed:</b> ").append(_t("n/a")).append("</p>");
|
||||
}
|
||||
heard = dbh.getLastStoreSuccessful();
|
||||
if (heard > 0) {
|
||||
long age = Math.max(now - heard, 1);
|
||||
buf.append("<tr><td><b>Last store successful:</b></td><td colspan=\"3\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
|
||||
buf.append("<p><b>Last store successful:</b> ").append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</p>");
|
||||
} else {
|
||||
buf.append("<p class=\"sybil_filler\"><b>Last store successful:</b> ").append(_t("n/a")).append("</p>");
|
||||
}
|
||||
heard = dbh.getLastStoreFailed();
|
||||
if (heard > 0) {
|
||||
long age = Math.max(now - heard, 1);
|
||||
buf.append("<tr><td><b>Last store failed:</b></td><td colspan=\"3\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
|
||||
buf.append("<p><b>Last store failed:</b> ").append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</p>");
|
||||
} else {
|
||||
buf.append("<p class=\"sybil_filler\"><b>Last store failed:</b> ").append(_t("n/a")).append("</p>");
|
||||
}
|
||||
}
|
||||
// any other profile stuff?
|
||||
@@ -873,25 +899,18 @@ class SybilRenderer {
|
||||
}
|
||||
long age = Math.max(now - info.getPublished(), 1);
|
||||
if (isUs && _context.router().isHidden()) {
|
||||
buf.append("<tr><td><b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b></td><td colspan=\"3\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
|
||||
buf.append("<p><b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b> ")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</p>\n");
|
||||
} else {
|
||||
buf.append("<tr><td><b>").append(_t("Published")).append(":</b></td><td colspan=\"3\">")
|
||||
.append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</td></tr>\n");
|
||||
}
|
||||
buf.append("<tr><td><b>").append(_t("Signing Key")).append(":</b></td><td colspan=\"3\">")
|
||||
.append(info.getIdentity().getSigningPublicKey().getType().toString()).append("</td></tr>\n");
|
||||
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("\"> ").append("</a>");
|
||||
buf.append("<p><b>").append(_t("Published")).append(":</b> ").append(_t("{0} ago", DataHelper.formatDuration2(age))).append("</p>\n");
|
||||
}
|
||||
buf.append("<p><b>").append(_t("Signing Key")).append(":</b> ")
|
||||
.append(info.getIdentity().getSigningPublicKey().getType().toString()).append("</p>\n");
|
||||
buf.append("<p class=\"sybil_filler\"> </p>");
|
||||
buf.append("</div></td></tr><tr><td class=\"sybil_addresses\" colspan=\"3\"><table><tr><td><b>" + _t("Addresses") + ":</b></td><td>");
|
||||
for (RouterAddress addr : info.getAddresses()) {
|
||||
String style = addr.getTransportStyle();
|
||||
buf.append("<b>").append(DataHelper.stripHTML(style)).append(":</b> ");
|
||||
buf.append("<br><b class=\"netdb_transport\">").append(DataHelper.stripHTML(style)).append(":</b> ");
|
||||
Map<Object, Object> p = addr.getOptionsMap();
|
||||
for (Map.Entry<Object, Object> e : p.entrySet()) {
|
||||
String name = (String) e.getKey();
|
||||
@@ -899,15 +918,12 @@ class SybilRenderer {
|
||||
name.startsWith("iport") || name.equals("mtu"))
|
||||
continue;
|
||||
String val = (String) e.getValue();
|
||||
buf.append('[').append(_t(DataHelper.stripHTML(name))).append('=');
|
||||
if (name.equals("host"))
|
||||
buf.append("<b>");
|
||||
buf.append(DataHelper.stripHTML(val)).append("] ");
|
||||
if (name.equals("host"))
|
||||
buf.append("</b>");
|
||||
buf.append(" <span class=\"nowrap\"><span class=\"netdb_name\">").append(_t(DataHelper.stripHTML(name))).append(":</span> <span class=\"netdb_info\">");
|
||||
buf.append(DataHelper.stripHTML(val));
|
||||
buf.append("</span></span> ");
|
||||
}
|
||||
}
|
||||
buf.append("</td></tr>\n");
|
||||
buf.append("</table></td></tr>\n");
|
||||
buf.append("</table>\n");
|
||||
return distance;
|
||||
}
|
||||
|
||||
@@ -212,8 +212,8 @@ class TunnelRenderer {
|
||||
Hash peer = info.getPeer(j);
|
||||
TunnelId id = (info.isInbound() ? info.getReceiveTunnelId(j) : info.getSendTunnelId(j));
|
||||
if (_context.routerHash().equals(peer)) {
|
||||
// Add empty content placeholders to force alignment. TODO tag "local" + tooltips for bandwidth tier / tunnel id for translation
|
||||
out.write(" <td class=\"cells\" align=\"center\"><span class=\"tunnel_peer tunnel_local\" title=\"Locally hosted tunnel\">local</span> "
|
||||
// Add empty content placeholders to force alignment. TODO tag tooltips for bandwidth tier / tunnel id for translation
|
||||
out.write(" <td class=\"cells\" align=\"center\"><span class=\"tunnel_peer tunnel_local\" title=\"Locally hosted tunnel\">" + _t("Local") + "</span> "
|
||||
+ "<span class=\"tunnel_id\" title=\"Tunnel identity\">" +
|
||||
(id == null ? "" : "" + id) + "</span><b class=\"tunnel_cap\" title=\"Bandwidth tier\"></b></td>");
|
||||
} else {
|
||||
|
||||
+24
@@ -1,3 +1,27 @@
|
||||
2017-07-01 str4d
|
||||
* Console:
|
||||
- /netdb:
|
||||
- All Routers/Leasesets/Sybil sections:
|
||||
- Each transport instance on own line
|
||||
- Better presentation of address characteristics
|
||||
- Place flag in table header
|
||||
- Container div for leasesets to allow 2 column display at wider viewport width
|
||||
- Increased spacing of lease information in leaseset tables
|
||||
- Add div for "not initialized" message
|
||||
- Reorganize content display in sybil database to reduce horizontal whitespace:
|
||||
- Conditional 2-column display of sybil families
|
||||
- Sybil router characteristics & threatpoints presented in multi-column view
|
||||
- Added empty (n/a) fields to maintain visual consistency in column view
|
||||
- /tunnels:
|
||||
- Tag "Local" for translation (and convert to lowercase in CSS)
|
||||
- Arabic: ensure our tunnel tables display correctly
|
||||
* I2PSnark:
|
||||
- Fix unclosed <label>
|
||||
- Standalone:
|
||||
- Better target the per-theme resources
|
||||
- List all available themes in config section
|
||||
- Themes: tidyups & further optimizations to reduce lag
|
||||
|
||||
2017-07-01 zzz
|
||||
* Fix family key export (ticket #2011)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,29 +1,23 @@
|
||||
/* Console Theme "Classic" - Mobile Override */
|
||||
|
||||
div.routersummaryouter {
|
||||
body {
|
||||
margin: 2px 1px !important;
|
||||
}
|
||||
|
||||
.routersummaryouter {
|
||||
float: none;
|
||||
margin: 0 !important;
|
||||
position: relative;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
div.routersummary {
|
||||
.routersummary {
|
||||
float: none;
|
||||
width: auto;
|
||||
max-width: 600px;
|
||||
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;
|
||||
}
|
||||
@@ -49,7 +43,11 @@ div.routersummary {
|
||||
font-size: 9pt !important;
|
||||
}
|
||||
|
||||
div.routersummary table, table[id^="sb_"] {
|
||||
.routersummary h3, .routersummary h3 a {
|
||||
font-size: 10.5pt !important;
|
||||
}
|
||||
|
||||
.routersummary table, table[id^="sb_"] {
|
||||
width: 100% !important;
|
||||
margin: -6px 0 -7px !important;
|
||||
}
|
||||
@@ -152,4 +150,16 @@ div.main {
|
||||
.sorry {
|
||||
margin: -1px 0 0 !important;
|
||||
}
|
||||
|
||||
.routersummary {
|
||||
width: 600px !important;
|
||||
}
|
||||
|
||||
.routersummary div[style="height: 36px;"] {
|
||||
margin-top: 2px !important;
|
||||
}
|
||||
|
||||
.routersummary table[id^="sb_"] {
|
||||
width: 600px !important;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -106,14 +106,6 @@ div.routersummary td:first-child {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.tunnels {
|
||||
padding: -3px 0 !important;
|
||||
}
|
||||
|
||||
div.tunnels table {
|
||||
margin: 0 -7px 0 5px !important;
|
||||
}
|
||||
|
||||
.langbox {
|
||||
float: left;
|
||||
text-align: left;
|
||||
@@ -154,25 +146,37 @@ span.newtab {
|
||||
/* lang selection */
|
||||
|
||||
.langselect img {
|
||||
margin-right: -61px;
|
||||
margin-right: -71px;
|
||||
}
|
||||
|
||||
.langselect .optbox:checked + img {
|
||||
margin-right: -63px;
|
||||
margin-right: -73px;
|
||||
}
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
.langselect img {
|
||||
margin-right: -9px;
|
||||
margin-top: -17px !important;
|
||||
}
|
||||
|
||||
.langselect input[name="lang"]:checked + img, .langselect input[name="lang"]:checked + #config_ui img[src="/flags.jsp?c=a1"] {
|
||||
margin-right: -10px;
|
||||
margin-top: -18px !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* theme selection */
|
||||
|
||||
.themechoice, .langselect {
|
||||
float: right !important;
|
||||
}
|
||||
}
|
||||
|
||||
.themechoice {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.themechoice .optbox {
|
||||
opacity: 0; /* hide the radio icon so we can use thumbnail img instead */
|
||||
opacity: 0;
|
||||
outline: 1px dotted #f00;
|
||||
position: absolute;
|
||||
padding: 2px;
|
||||
@@ -189,6 +193,8 @@ span.newtab {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
/* end theme selection */
|
||||
|
||||
h3#iptransport a, th#upnpconfig a, h3#bwlimiter a, #config_stats h3 a, #config_logging h3 a, h3#graphdisplay a, #logs h3 a, h3#advancedconfig a {
|
||||
float: left;
|
||||
}
|
||||
@@ -210,31 +216,31 @@ h3#iptransport a, th#upnpconfig a, h3#bwlimiter a, #config_stats h3 a, #config_l
|
||||
padding: 1px 3px 1px 1px !important;
|
||||
}
|
||||
|
||||
table#leasesetdebug th:first-child, table#leasesetsummary th:first-child {
|
||||
#leasesetdebug th:first-child, #leasesetsummary th:first-child {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
table#leasesetdebug th:last-child, table#leasesetsummary th:last-child {
|
||||
#leasesetdebug th:last-child, #leasesetsummary th:last-child {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
table#leasesetdebug th, table#leasesetsummary th {
|
||||
#leasesetdebug th, #leasesetsummary th {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
table.leaseset th {
|
||||
.leaseset th {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
table.leaseset th:first-child b {
|
||||
.leaseset th:first-child b {
|
||||
float: right;
|
||||
}
|
||||
|
||||
table.leaseset th:last-child, table.leaseset td:nth-child(2) {
|
||||
.leaseset th:last-child, .leaseset td:nth-child(2) {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#netdboverview th, table.netdbentry th, table#leasesetdebug td:nth-child(2n) {
|
||||
#netdboverview th, table.netdbentry th, #leasesetdebug td:nth-child(2n) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@@ -250,7 +256,7 @@ table.leaseset th:last-child, table.leaseset td:nth-child(2) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table.netdbentry th:last-child, table#leasesetdebug td:nth-child(2n+1) {
|
||||
table.netdbentry th:last-child, #leasesetdebug td:nth-child(2n+1) {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
@@ -258,11 +264,11 @@ table.netdbentry th:last-child, table#leasesetdebug td:nth-child(2n+1) {
|
||||
float: left;
|
||||
}
|
||||
|
||||
table#enviro td {
|
||||
#enviro td {
|
||||
padding: 5px 10px 5px 5px !important;
|
||||
}
|
||||
|
||||
table#enviro td:first-child {
|
||||
#enviro td:first-child {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
@@ -451,6 +457,37 @@ div[lang="ar"] ul, div[lang="ar"] p {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.tunnel_local {
|
||||
margin-right: -4px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.tunnel_id:empty + .tunnel_cap {
|
||||
display: inline-block;
|
||||
margin-left: 0;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.sybil_routerinfo th img[src^="/flags"], .netdbentry th a img {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.sybil_routerinfo th:last-child {
|
||||
padding: 1px !important;
|
||||
}
|
||||
|
||||
.sybil_info, .family {
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
.leaseset th:last-child, .leaseset td:last-child, .sybil_routerinfo th:last-child, .sybil_routerinfo td:last-child {
|
||||
border-right: none !important;
|
||||
}
|
||||
|
||||
a.viewfullentry::after, a[href^="viewprofile"]::after {
|
||||
margin-left: 3px !important;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1500px) {
|
||||
.main, .news, h1, .sorry {
|
||||
margin-right: 232px !important;
|
||||
@@ -497,4 +534,16 @@ div[lang="ar"], div[lang="ar"] code, div[lang="ar"] b {
|
||||
margin-left: 0;
|
||||
margin-right: -82px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) and (min-width: 1500px) {
|
||||
.langselect img {
|
||||
margin-right: -9px;
|
||||
margin-top: -18px !important;
|
||||
}
|
||||
|
||||
.langselect input[name="lang"]:checked + img, .langselect input[name="lang"]:checked + #config_ui img[src="/flags.jsp?c=a1"] {
|
||||
margin-right: -10px;
|
||||
margin-top: -19px !important;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -661,7 +661,7 @@ td.subheading {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
table.leaseset:last-child, table.netdbentry:last-child, #profile_defs {
|
||||
table.leaseset:last-child, .netdbentry:last-child, #profile_defs {
|
||||
margin-bottom: -10px;
|
||||
}
|
||||
|
||||
@@ -684,18 +684,26 @@ table#leasesetdebug td:first-child, table#leasesetsummary td:first-child {
|
||||
padding-right: 5px !important;
|
||||
}
|
||||
|
||||
table.netdbentry th:first-child {
|
||||
text-align: right;
|
||||
.netdbentry th:first-child {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
table.netdbentry th:last-child {
|
||||
.netdbentry th:last-child {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
table.netdbentry td:nth-child(2) {
|
||||
.netdbentry td:nth-child(2) {
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
.netdbentry th:last-child {
|
||||
border-left: 1px solid #7778bf !important;
|
||||
}
|
||||
|
||||
.netdbentry th a img {
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
#sybilnav li {
|
||||
background: url(images/eye.png) right 5px center no-repeat, linear-gradient(to right, #eef 30%, #fff);
|
||||
padding: 3px 24px 3px 3px;
|
||||
@@ -705,6 +713,10 @@ table.netdbentry td:nth-child(2) {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.leaseset th:last-child, .leaseset td:last-child, .sybil_routerinfo th:last-child, .sybil_routerinfo td:last-child {
|
||||
border-right: none !important;
|
||||
}
|
||||
|
||||
p#profiles_overview, #profiles .widescroll + h3, #thresholds + h3, #profiles #banlist {
|
||||
margin-right: -16px !important;
|
||||
}
|
||||
@@ -745,6 +757,10 @@ p#profiles_overview, #profiles .widescroll + h3, #thresholds + h3, #profiles #ba
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.sybil_routerinfo th img[src^="/flags"], .netdbentry th a img {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.wideload .confignav {
|
||||
margin-left: -3px !important;
|
||||
margin-right: -35px !important;
|
||||
@@ -877,6 +893,25 @@ table#bugreports td.infohelp {
|
||||
margin-right: -2px;
|
||||
}
|
||||
|
||||
.tunnel_local {
|
||||
margin-right: 0;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.tunnel_id:empty + .tunnel_cap {
|
||||
display: inline-block;
|
||||
margin-left: 0;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
#tunnel_defs td:nth-child(3) {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
#tunnels .cells {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1500px) {
|
||||
.main, .news, h1, .sorry {
|
||||
margin-right: 232px !important;
|
||||
|
||||
@@ -460,7 +460,7 @@ td.infohelp {
|
||||
}
|
||||
|
||||
.tunnelConfig td > b {
|
||||
margin-left: 5px;
|
||||
margin: 2px 0 2px 5px;
|
||||
min-width: 30px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ textarea[cols="70"], textarea[name="levels"] {
|
||||
width: calc(100% - 20px);
|
||||
}
|
||||
|
||||
button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="reset"]::-moz-focus-inner {
|
||||
button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="reset"]::-moz-focus-inner {
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
@@ -217,7 +217,7 @@ label {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
input[type="file"] {
|
||||
box-shadow: none;
|
||||
border: none;
|
||||
background: none;
|
||||
@@ -834,7 +834,7 @@ button.download.control:active {
|
||||
background: #652787 url(/themes/console/images/buttons/download.png) center center no-repeat !important;
|
||||
}
|
||||
|
||||
button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="reset"]::-moz-focus-inner {
|
||||
button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="reset"]::-moz-focus-inner {
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
@@ -2431,7 +2431,11 @@ h2, h3, h4, .confignav {
|
||||
}
|
||||
|
||||
.twocol {
|
||||
-moz-columns: 2 400px;
|
||||
-webkit-columns: 2 400px;
|
||||
columns: 2 400px;
|
||||
-moz-column-gap: 0 !important;
|
||||
-webkit-column-gap: 0 !important;
|
||||
column-gap: 0 !important;
|
||||
display: block;
|
||||
margin: 5px 0 -5px;
|
||||
@@ -2453,7 +2457,7 @@ p + .twocol, div[lang="de"] p + .twocol {
|
||||
.twocol li {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
-webkit-break-inside: avoid;
|
||||
-webkit-column-break-inside: avoid;
|
||||
}
|
||||
|
||||
.twocol li:first-child {
|
||||
@@ -2618,7 +2622,7 @@ table#schedjobs {
|
||||
padding-right: 8px !important;
|
||||
}
|
||||
|
||||
#schedjobs th:first-child, #schedjobs td:first-child, #jobstats th:first-child, #jobstats td:first-child {
|
||||
#schedjobs th:first-child, #schedjobs td:first-child, #jobstats th:first-child, #jobstats td:first-child {
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
font-weight: bold;
|
||||
@@ -4752,7 +4756,7 @@ table#profile_defs + hr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#floodfills th, #floodfills td {
|
||||
#floodfills th, #floodfills td {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
@@ -4761,11 +4765,11 @@ table#profile_defs + hr {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
#floodfills td {
|
||||
#floodfills td {
|
||||
padding: 3px !important;
|
||||
}
|
||||
|
||||
#floodfills th:first-child, #floodfills td:first-child {
|
||||
#floodfills th:first-child, #floodfills td:first-child {
|
||||
text-align: center !important;
|
||||
width: 52px;
|
||||
white-space: nowrap;
|
||||
@@ -4836,6 +4840,7 @@ table#jardump { /* /jars */
|
||||
|
||||
.main#jardump {
|
||||
padding: 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.main#jardump tt {
|
||||
@@ -5312,11 +5317,11 @@ span#distance {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.netdbentry th:first-child {
|
||||
.netdbentry th:first-child {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.netdbentry td:first-child {
|
||||
.netdbentry td:first-child {
|
||||
width: 80px;
|
||||
}
|
||||
|
||||
@@ -5433,10 +5438,11 @@ a.viewfullentry::after, a[href^="viewprofile"]::after {
|
||||
vertical-align: text-top;
|
||||
}
|
||||
|
||||
#noleasesets {
|
||||
#noleasesets, #notinitialized, .netdbnotfound {
|
||||
background: #000 url(/themes/console/images/info/infohelp.png) 12px center no-repeat !important;
|
||||
padding: 15px 15px 15px 50px !important;
|
||||
border: 1px solid #443da0;
|
||||
margin-top: -4px;
|
||||
margin-bottom: 10px;
|
||||
text-align: left;
|
||||
}
|
||||
@@ -5567,6 +5573,10 @@ p.sybil_info, p.family, p.threatpoints, p.hashdist, p#sybil_totals, p.notfound {
|
||||
box-shadow: inset 0 0 0 1px #080077;
|
||||
}
|
||||
|
||||
p#sybil_totals {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
p.sybil_info, p.hashdist, p.family {
|
||||
margin-top: -1px;
|
||||
}
|
||||
@@ -5575,7 +5585,7 @@ p.sybil_info + p.sybil_info, p.family + p.family {
|
||||
margin-top: -4px;
|
||||
}
|
||||
|
||||
p.sybil_info + a[name] + .sybil_routerinfo, p.hashdist + a[name] + .sybil_routerinfo {
|
||||
p.sybil_info + a[name] + .sybil_routerinfo, p.hashdist + a[name] + .sybil_routerinfo {
|
||||
margin-top: 10px !important;
|
||||
}
|
||||
|
||||
@@ -5589,6 +5599,14 @@ p.sybil_info + a[name] + .sybil_routerinfo, p.hashdist + a[name] + .sybil_router
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
|
||||
.sybil_routerinfo + .threatpoints + ul + a[name] + table {
|
||||
margin-top: -11px !important;
|
||||
}
|
||||
|
||||
.sybil_routerinfo + .threatpoints + ul {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* end netdb */
|
||||
|
||||
/* /confignet, /configadvanced */
|
||||
@@ -5704,6 +5722,10 @@ h3#pluginmanage {
|
||||
margin-bottom: -13px !important;
|
||||
}
|
||||
|
||||
.sybils#samefamily {
|
||||
margin-bottom: 10px !important;
|
||||
}
|
||||
|
||||
h3.tabletitle a {
|
||||
text-transform: lowercase;
|
||||
letter-spacing: normal;
|
||||
@@ -6153,6 +6175,548 @@ form[action="events"] {
|
||||
background-size: 28px 28px;
|
||||
}
|
||||
|
||||
/* network status */
|
||||
|
||||
.routersummary h4 a {
|
||||
width: auto !important;
|
||||
vertical-align: middle;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.routersummary .error, .routersummary .warn, .routersummary .testing, .routersummary .hidden,
|
||||
.routersummary .running, .routersummary .firewalled, .routersummary .vmcomm, .routersummary .clockskew, .tunnelBuildStatus {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
border: 1px solid rgba(52, 47, 127, 0.6);
|
||||
border-radius: 2px;
|
||||
padding: 6px 3px;
|
||||
width: 100%;
|
||||
margin: -3px -1px;
|
||||
box-shadow: inset 0 0 0 1px #000;
|
||||
text-shadow: 0 1px 1px #000;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.routersummary .firewalled {
|
||||
border: 1px dotted #342f7f;
|
||||
}
|
||||
|
||||
.routersummary .error {
|
||||
border: 1px dotted #700;
|
||||
}
|
||||
|
||||
.routersummary .warn, .routersummary .clockskew {
|
||||
border: 1px solid #550;
|
||||
}
|
||||
|
||||
.routersummary .testing {
|
||||
border: 1px dotted #4F4B1D;
|
||||
}
|
||||
|
||||
.routersummary .hidden, .routersummary .vmcomm {
|
||||
border: 1px dotted #777;
|
||||
}
|
||||
|
||||
.routersummary .running {
|
||||
border: 1px solid #342f7f;
|
||||
border: 1px solid rgba(52, 47, 127, 0.6);
|
||||
}
|
||||
|
||||
.routersummary .error::before, .routersummary .warn::before, .routersummary .testing::before, .routersummary .hidden::before,
|
||||
.routersummary .running::before, .routersummary .firewalled::before, .routersummary .vmcomm::before, .routersummary .clockskew::before {
|
||||
padding: 0 2px;
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
filter: drop-shadow(0 0 1px rgba(220,220,220,0.7));
|
||||
}
|
||||
|
||||
.routersummary .error::before, .routersummary .clockskew::before {
|
||||
content: url(/themes/console/images/info/network_status/network_error.png);
|
||||
}
|
||||
|
||||
.routersummary .warn::before {
|
||||
content: url(/themes/console/images/info/network_status/network_warning.png);
|
||||
}
|
||||
|
||||
.routersummary .testing::before {
|
||||
content: url(/themes/console/images/info/network_status/network_testing.png);
|
||||
}
|
||||
|
||||
.routersummary .hidden::before {
|
||||
content: url(/themes/console/images/info/network_status/network_hidden.png);
|
||||
padding: 0 3px;
|
||||
}
|
||||
|
||||
.routersummary .running::before {
|
||||
content: url(/themes/console/images/info/network_status/network_ok.png);
|
||||
}
|
||||
|
||||
.routersummary .firewalled::before {
|
||||
content: url(/themes/console/images/info/network_status/network_firewalled.png);
|
||||
}
|
||||
|
||||
.routersummary .vmcomm::before {
|
||||
content: url(/themes/console/images/info/network_status/network_vm.png);
|
||||
}
|
||||
|
||||
.routersummary .clockskew::before {
|
||||
content: url(/themes/console/images/info/network_status/network_clockskew.png);
|
||||
}
|
||||
|
||||
/* end network status */
|
||||
|
||||
#sb_services, #sb_internals, #sb_advanced {
|
||||
margin-top: -3px !important;
|
||||
margin-bottom: -5px !important;
|
||||
}
|
||||
|
||||
/* /tunnels */
|
||||
|
||||
tt a {
|
||||
letter-spacing: 0.07em;
|
||||
}
|
||||
|
||||
.tunnel_cap {
|
||||
background: rgba(0,0,140,0.4);
|
||||
color: #c9ceff;
|
||||
border: 1px solid rgba(0,0,64,0.2);
|
||||
border-radius: 2px;
|
||||
min-width: 12px;
|
||||
padding: 0 2px;
|
||||
display:inline-block;
|
||||
margin: 1px 2px 1px 8px;
|
||||
text-align: center !important;
|
||||
text-shadow: 0 1px 1px #000;
|
||||
}
|
||||
|
||||
.tunnel_cap:empty {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.tunnel_id {
|
||||
display: inline-block;
|
||||
min-width: 78px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.tunnel_id:empty {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.tunnel_id:empty + .tunnel_cap {
|
||||
margin-left: 12px !important;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.tunnel_peer {
|
||||
display: inline-block;
|
||||
min-width: 56px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.tunnel_local {
|
||||
font-size: 8pt;
|
||||
text-transform: lowercase;
|
||||
background: rgba(0,0,96,0.3);
|
||||
border-radius: 2px;
|
||||
text-align: center;
|
||||
padding: 2px 0;
|
||||
margin-left: -4px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.tunnel_peer:empty {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#tunnel_defs {
|
||||
margin-top: -1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#tunnel_defs td:first-child, #tunnel_defs td:nth-child(even) {
|
||||
width: 1%;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1100px) {
|
||||
.tunnel_id, .tunnel_peer {
|
||||
min-width: 0 !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.tunnel_local {
|
||||
margin-right: 5px;
|
||||
margin-left: 2px;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
.tunnel_peer:empty {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.tunnel_peer:empty::before {
|
||||
margin: 1px 6px 1px 2px;
|
||||
}
|
||||
|
||||
.tunnel_cap {
|
||||
margin-left: 5px !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1500px) {
|
||||
.tunnel_cap {
|
||||
margin-left: 10px;
|
||||
padding: 0 1px;
|
||||
min-width: 14px;
|
||||
}
|
||||
|
||||
.tunnel_id:empty {
|
||||
margin-right: -10px;
|
||||
}
|
||||
}
|
||||
|
||||
/* end tunnels */
|
||||
|
||||
/* /peers */
|
||||
|
||||
#ntcpconnections th:nth-child(6), #ntcpconnections th:nth-child(7), #ntcpconnections th:nth-child(8), #ntcpconnections th:nth-child(9), #ntcpconnections th:nth-child(10),
|
||||
#ntcpconnections td:nth-child(6), #ntcpconnections td:nth-child(7), #ntcpconnections td:nth-child(8), #ntcpconnections td:nth-child(9), #ntcpconnections td:nth-child(10),
|
||||
#udpconnections td:nth-child(6), #udpconnections td:nth-child(7), #udpconnections td:nth-child(9), #udpconnections td:nth-child(10), #udpconnections td:nth-child(11),
|
||||
#udpconnections td:nth-child(13), #udpconnections td:nth-child(14), #udpconnections td:nth-child(15), #udpconnections td:nth-child(16) {
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#ntcpconnections .tablefooter td:nth-child(3), #ntcpconnections .tablefooter td:nth-child(4), #ntcpconnections .tablefooter td:nth-child(5), #ntcpconnections .tablefooter td:nth-child(6),
|
||||
#udpconnections .tablefooter td:nth-child(3), #udpconnections .tablefooter td:nth-child(4), #udpconnections .tablefooter td:nth-child(7), #udpconnections .tablefooter td:nth-child(8),
|
||||
#udpconnections .tablefooter td:nth-child(10), #udpconnections .tablefooter td:nth-child(11), #udpconnections .tablefooter td:nth-child(12), #udpconnections .tablefooter td:nth-child(13) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#udpconnections .tablefooter td:nth-child(9) {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
#ntcpconnections td:nth-child(4), #ntcpconnections td:nth-child(5), #udpconnections td:nth-child(4),
|
||||
#udpconnections td:nth-child(5), #udpconnections td:nth-child(8), #udpconnections td:nth-child(12) {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#udpconnections .tablefooter td, #ntcpconnections .tablefooter td {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
#ntcpconnections th:nth-child(6), #ntcpconnections th:nth-child(7), #ntcpconnections th:nth-child(8), #ntcpconnections th:nth-child(9), #ntcpconnections th:nth-child(10) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#udpconnections th:nth-child(6), #udpconnections th:nth-child(7), #udpconnections th:nth-child(n+9) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#udpconnections th:nth-child(12) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.peersort {
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.right {
|
||||
text-align: right;
|
||||
margin: 0 1px;
|
||||
display: inline-block;
|
||||
width: 40%
|
||||
}
|
||||
|
||||
.left {
|
||||
text-align: left;
|
||||
margin: 0 1px;
|
||||
display: inline-block;
|
||||
width: 40%
|
||||
}
|
||||
|
||||
.peeripv6:empty {
|
||||
padding: 0;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.cwnd .left, .cwnd .right {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#udpconnections th:nth-child(n+13), #udpconnections .tablefooter th:nth-child(n+10),
|
||||
#udpconnections td:nth-child(n+13), #udpconnections .tablefooter td:nth-child(n+10) {
|
||||
padding-right: 1% !important;
|
||||
}
|
||||
|
||||
#peerdefs {
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
.peer_arrow {
|
||||
display: inline-block;
|
||||
width: 18px;
|
||||
text-align: center;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
/* end peers */
|
||||
|
||||
/* netdb router address info */
|
||||
|
||||
.leasesets_container {
|
||||
-moz-columns: 680px 2;
|
||||
-webkit-columns: 680px 2;
|
||||
columns: 680px 2;
|
||||
-moz-column-gap: 10px;
|
||||
-webkit-column-gap: 10px;
|
||||
column-gap: 10px;
|
||||
}
|
||||
|
||||
th code {
|
||||
-moz-user-select: all;
|
||||
-webkit-user-select: all;
|
||||
user-select: all;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1634px) {
|
||||
.leasesets_container {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
th code {
|
||||
font-size: 9pt !important;
|
||||
}
|
||||
}
|
||||
|
||||
.leasesets_container table:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.leasesets_container table {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
-webkit-column-break-inside: avoid;
|
||||
}
|
||||
|
||||
.netdb_addresses br:first-child, .sybil_routerinfo tr:last-child td br:first-child {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.netdbentry th:first-child::after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
min-height: 20px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.netdbentry th:last-child > *, .sybil_routerinfo th:nth-child(2) > * {
|
||||
display: inline-block;
|
||||
vertical-align: middle !important;
|
||||
}
|
||||
|
||||
.netdbentry th a img {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin-right: 1px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.netdbentry a.viewfullentry::after {
|
||||
display: inline-block;
|
||||
vertical-align: middle !important;
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.netdbentry td:first-child {
|
||||
text-align: right;
|
||||
min-width: 100px;
|
||||
padding-right: 5px !important
|
||||
}
|
||||
|
||||
b.netdb_transport {
|
||||
display: inline-block;
|
||||
width: 50px;
|
||||
text-align: right;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
#netdb code {
|
||||
font-weight: normal !important;
|
||||
}
|
||||
|
||||
.netdb_name {
|
||||
color: #dfe2ff;
|
||||
text-transform: capitalize;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.netdb_info {
|
||||
margin-right: 1px;
|
||||
}
|
||||
|
||||
.netdb_expiry {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.sybil_routerinfo th img[src^="/flags"] {
|
||||
height: 11px;
|
||||
width: 16px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.sybil_routerinfo b.netdb_transport {
|
||||
margin-left: -13px;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.sybil_routerinfo td:first-child, .netdbentry td:first-child {
|
||||
text-align: right !important;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.sybil_routerinfo td[colspan="3"] {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.sybil_container {
|
||||
-moz-columns: 680px 2;
|
||||
-webkit-columns: 680px 2;
|
||||
columns: 680px 2;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.sybil_container p {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
-webkit-column-break-inside: avoid;
|
||||
}
|
||||
|
||||
.sybil_container p:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.sybil_container p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* end netdb router address */
|
||||
|
||||
/* sybils */
|
||||
|
||||
.leaseset th:last-child, .leaseset td:last-child, .sybil_routerinfo th:last-child, .sybil_routerinfo td:last-child {
|
||||
border-right: 1px solid #443da0 !important;
|
||||
}
|
||||
|
||||
.sybil_routerinfo table td:last-child {
|
||||
border-right: none !important;
|
||||
}
|
||||
|
||||
.sybilinfo_params {
|
||||
padding: 0;
|
||||
border-bottom: 1px solid #443da0;
|
||||
}
|
||||
|
||||
.sybilinfo_container {
|
||||
columns: 240px auto;
|
||||
-moz-columns: 240px auto;
|
||||
-webkit-columns: 240px auto;
|
||||
-moz-column-gap: 0;
|
||||
-webkit-column-gap: 0;
|
||||
column-gap: 0;
|
||||
background: #00001a;
|
||||
padding: 4px 5px;
|
||||
}
|
||||
|
||||
.sybilinfo_container b {
|
||||
color: #bb3;
|
||||
}
|
||||
|
||||
.sybil_routerinfo tr:last-child {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.sybil_routerinfo p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 120%;
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
-webkit-column-break-inside: avoid;
|
||||
}
|
||||
|
||||
#sybils_summary {
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
.sybilinfo_familyname {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
max-width: 150px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.sybil_addresses td:first-child {
|
||||
max-width: 155px;
|
||||
font-weight: bold;
|
||||
padding-right: 9px;
|
||||
}
|
||||
|
||||
.sybil_addresses table {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.sybil_addresses {
|
||||
padding: 0;
|
||||
border-bottom: 1px solid #443da0
|
||||
}
|
||||
|
||||
.sybil_addresses table, .sybil_addresses td {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.threatpoints + ul {
|
||||
-moz-columns: auto 600px;
|
||||
-webkit-columns: auto 600px;
|
||||
columns: auto 600px;
|
||||
-moz-column-rule: 1px solid #443da0;
|
||||
-webkit-column-rule: 1px solid #443da0;
|
||||
column-rule: 1px solid #443da0;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
|
||||
.threatpoints + ul li:first-child {
|
||||
margin-top: 0 !important;
|
||||
padding-top: 0 !important;
|
||||
}
|
||||
|
||||
.threatpoints + ul li:last-child {
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.threatpoints + ul li {
|
||||
list-style: none;
|
||||
margin-left: 5px;
|
||||
line-height: 120%;
|
||||
break-inside: avoid !important;
|
||||
page-break-inside: avoid !important;
|
||||
-webkit-column-break-inside: avoid !important;
|
||||
}
|
||||
|
||||
.threatpoints + ul li a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* end sybils */
|
||||
|
||||
/* responsive layout */
|
||||
|
||||
@media screen and (max-width: 900px) {
|
||||
@@ -6590,286 +7154,3 @@ _:-ms-lang(x), table + .statusnotes {
|
||||
|
||||
/* end IE/Edge tweaks */
|
||||
|
||||
/* network status */
|
||||
|
||||
.routersummary h4 a {
|
||||
width: auto !important;
|
||||
vertical-align: middle;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.routersummary .error, .routersummary .warn, .routersummary .testing, .routersummary .hidden,
|
||||
.routersummary .running, .routersummary .firewalled, .routersummary .vmcomm, .routersummary .clockskew, .tunnelBuildStatus {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
border: 1px solid rgba(52, 47, 127, 0.6);
|
||||
border-radius: 2px;
|
||||
padding: 6px 3px;
|
||||
width: 100%;
|
||||
margin: -3px -1px;
|
||||
box-shadow: inset 0 0 0 1px #000;
|
||||
text-shadow: 0 1px 1px #000;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.routersummary .firewalled {
|
||||
border: 1px dotted #342f7f;
|
||||
}
|
||||
|
||||
.routersummary .error {
|
||||
border: 1px dotted #700;
|
||||
}
|
||||
|
||||
.routersummary .warn, .routersummary .clockskew {
|
||||
border: 1px solid #550;
|
||||
}
|
||||
|
||||
.routersummary .testing {
|
||||
border: 1px dotted #4F4B1D;
|
||||
}
|
||||
|
||||
.routersummary .hidden, .routersummary .vmcomm {
|
||||
border: 1px dotted #777;
|
||||
}
|
||||
|
||||
.routersummary .running {
|
||||
border: 1px solid #342f7f;
|
||||
border: 1px solid rgba(52, 47, 127, 0.6);
|
||||
}
|
||||
|
||||
.routersummary .error::before, .routersummary .warn::before, .routersummary .testing::before, .routersummary .hidden::before,
|
||||
.routersummary .running::before, .routersummary .firewalled::before, .routersummary .vmcomm::before, .routersummary .clockskew::before {
|
||||
padding: 0 2px;
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
filter: drop-shadow(0 0 1px rgba(220,220,220,0.7));
|
||||
}
|
||||
|
||||
.routersummary .error::before, .routersummary .clockskew::before {
|
||||
content: url(/themes/console/images/info/network_status/network_error.png);
|
||||
}
|
||||
|
||||
.routersummary .warn::before {
|
||||
content: url(/themes/console/images/info/network_status/network_warning.png);
|
||||
}
|
||||
|
||||
.routersummary .testing::before {
|
||||
content: url(/themes/console/images/info/network_status/network_testing.png);
|
||||
}
|
||||
|
||||
.routersummary .hidden::before {
|
||||
content: url(/themes/console/images/info/network_status/network_hidden.png);
|
||||
padding: 0 3px;
|
||||
}
|
||||
|
||||
.routersummary .running::before {
|
||||
content: url(/themes/console/images/info/network_status/network_ok.png);
|
||||
}
|
||||
|
||||
.routersummary .firewalled::before {
|
||||
content: url(/themes/console/images/info/network_status/network_firewalled.png);
|
||||
}
|
||||
|
||||
.routersummary .vmcomm::before {
|
||||
content: url(/themes/console/images/info/network_status/network_vm.png);
|
||||
}
|
||||
|
||||
.routersummary .clockskew::before {
|
||||
content: url(/themes/console/images/info/network_status/network_clockskew.png);
|
||||
}
|
||||
|
||||
/* end network status */
|
||||
|
||||
#sb_services, #sb_internals, #sb_advanced {
|
||||
margin-top: -2px !important;
|
||||
}
|
||||
|
||||
/* /tunnels */
|
||||
|
||||
tt a {
|
||||
letter-spacing: 0.07em;
|
||||
}
|
||||
|
||||
.tunnel_cap {
|
||||
background: rgba(0,0,140,0.4);
|
||||
color: #c9ceff;
|
||||
border: 1px solid rgba(0,0,64,0.2);
|
||||
border-radius: 2px;
|
||||
min-width: 12px;
|
||||
padding: 0 2px;
|
||||
display:inline-block;
|
||||
margin: 1px 2px 1px 8px;
|
||||
text-align: center !important;
|
||||
text-shadow: 0 1px 1px #000;
|
||||
}
|
||||
|
||||
.tunnel_cap:empty {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.tunnel_id {
|
||||
display: inline-block;
|
||||
min-width: 78px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.tunnel_id:empty {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.tunnel_id:empty + .tunnel_cap {
|
||||
margin-left: 12px !important;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.tunnel_peer {
|
||||
display: inline-block;
|
||||
min-width: 56px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.tunnel_local {
|
||||
font-size: 8pt;
|
||||
background: rgba(0,0,96,0.3);
|
||||
border-radius: 2px;
|
||||
text-align: center;
|
||||
padding: 2px 0;
|
||||
margin-left: -4px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.tunnel_peer:empty {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#tunnel_defs {
|
||||
margin-top: -1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1100px) {
|
||||
.tunnel_id, .tunnel_peer {
|
||||
min-width: 0 !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.tunnel_local {
|
||||
margin-right: 5px;
|
||||
margin-left: 2px;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
.tunnel_peer:empty {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.tunnel_peer:empty::before {
|
||||
margin: 1px 6px 1px 2px;
|
||||
}
|
||||
|
||||
.tunnel_cap {
|
||||
margin-left: 5px !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1500px) {
|
||||
.tunnel_cap {
|
||||
margin-left: 10px;
|
||||
padding: 0 1px;
|
||||
min-width: 14px;
|
||||
}
|
||||
|
||||
.tunnel_id:empty {
|
||||
margin-right: -10px;
|
||||
}
|
||||
}
|
||||
|
||||
/* end tunnels */
|
||||
|
||||
/* /peers */
|
||||
|
||||
#ntcpconnections th:nth-child(6), #ntcpconnections th:nth-child(7), #ntcpconnections th:nth-child(8), #ntcpconnections th:nth-child(9), #ntcpconnections th:nth-child(10),
|
||||
#ntcpconnections td:nth-child(6), #ntcpconnections td:nth-child(7), #ntcpconnections td:nth-child(8), #ntcpconnections td:nth-child(9), #ntcpconnections td:nth-child(10),
|
||||
#udpconnections td:nth-child(6), #udpconnections td:nth-child(7), #udpconnections td:nth-child(9), #udpconnections td:nth-child(10), #udpconnections td:nth-child(11),
|
||||
#udpconnections td:nth-child(13), #udpconnections td:nth-child(14), #udpconnections td:nth-child(15), #udpconnections td:nth-child(16) {
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#ntcpconnections .tablefooter td:nth-child(3), #ntcpconnections .tablefooter td:nth-child(4), #ntcpconnections .tablefooter td:nth-child(5), #ntcpconnections .tablefooter td:nth-child(6),
|
||||
#udpconnections .tablefooter td:nth-child(3), #udpconnections .tablefooter td:nth-child(4), #udpconnections .tablefooter td:nth-child(7), #udpconnections .tablefooter td:nth-child(8),
|
||||
#udpconnections .tablefooter td:nth-child(10), #udpconnections .tablefooter td:nth-child(11), #udpconnections .tablefooter td:nth-child(12), #udpconnections .tablefooter td:nth-child(13) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#udpconnections .tablefooter td:nth-child(9) {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
#ntcpconnections td:nth-child(4), #ntcpconnections td:nth-child(5), #udpconnections td:nth-child(4),
|
||||
#udpconnections td:nth-child(5), #udpconnections td:nth-child(8), #udpconnections td:nth-child(12) {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#udpconnections .tablefooter td, #ntcpconnections .tablefooter td {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
#ntcpconnections th:nth-child(6), #ntcpconnections th:nth-child(7), #ntcpconnections th:nth-child(8), #ntcpconnections th:nth-child(9), #ntcpconnections th:nth-child(10) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#udpconnections th:nth-child(6), #udpconnections th:nth-child(7), #udpconnections th:nth-child(n+9) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#udpconnections th:nth-child(12) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.peersort {
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.right {
|
||||
text-align: right;
|
||||
margin: 0 1px;
|
||||
display: inline-block;
|
||||
width: 40%
|
||||
}
|
||||
|
||||
.left {
|
||||
text-align: left;
|
||||
margin: 0 1px;
|
||||
display: inline-block;
|
||||
width: 40%
|
||||
}
|
||||
|
||||
.peeripv6:empty {
|
||||
padding: 0;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.cwnd .left, .cwnd .right {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#udpconnections th:nth-child(n+13), #udpconnections .tablefooter th:nth-child(n+10),
|
||||
#udpconnections td:nth-child(n+13), #udpconnections .tablefooter td:nth-child(n+10) {
|
||||
padding-right: 1% !important;
|
||||
}
|
||||
|
||||
#peerdefs {
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
.peer_arrow {
|
||||
display: inline-block;
|
||||
width: 18px;
|
||||
text-align: center;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
/* end peers */
|
||||
|
||||
@@ -218,6 +218,10 @@ h3#iptransport a, th#upnpconfig a, h3#bwlimiter a, #config_stats h3 a, #config_l
|
||||
padding: 1px 3px 1px 1px !important;
|
||||
}
|
||||
|
||||
.sybil_routerinfo th img[src^="/flags"], .netdbentry th a img {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
table#leasesetdebug th:first-child, table#leasesetsummary th:first-child {
|
||||
text-align: right;
|
||||
}
|
||||
@@ -242,6 +246,10 @@ table.leaseset th:last-child, table.leaseset td:nth-child(2) {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.leaseset th:last-child, .leaseset td:last-child, .sybil_routerinfo th:last-child, .sybil_routerinfo td:last-child {
|
||||
border-right: none !important;
|
||||
}
|
||||
|
||||
#netdboverview th, table.netdbentry th, table#leasesetdebug td:nth-child(2n) {
|
||||
text-align: right;
|
||||
}
|
||||
@@ -449,6 +457,21 @@ h4.app, h4.app2 {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.netdbentry th a img {
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.tunnel_local {
|
||||
margin-right: -4px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.tunnel_id:empty + .tunnel_cap {
|
||||
display: inline-block;
|
||||
margin-left: 0;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
/* responsive layout */
|
||||
|
||||
@media screen and (max-width: 1500px) {
|
||||
|
||||
@@ -120,6 +120,12 @@ hr {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
hr {
|
||||
height: 1px;
|
||||
}
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: none;
|
||||
margin: 40px 20px 0 60px;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
body {
|
||||
font: 9pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", Verdana, "Bitstream Vera Sans", "DejaVu Sans", "Lucida Grande", Helvetica, sans-serif;
|
||||
color: #0c153d;
|
||||
color: #2c354f;
|
||||
background: #eef url(/themes/console/classic/images/bg0.png) repeat scroll center bottom;
|
||||
background-size: 120px 120px;
|
||||
}
|
||||
@@ -173,7 +173,7 @@ body.iframed {
|
||||
/* screenlog */
|
||||
|
||||
.snarkMessages {
|
||||
overflow: auto;
|
||||
overflow: hidden;
|
||||
width: auto;
|
||||
height: 53px;
|
||||
margin: 0;
|
||||
@@ -186,6 +186,14 @@ body.iframed {
|
||||
box-shadow: inset 0 0 0 1px #ddf;
|
||||
}
|
||||
|
||||
.snarkMessages:hover, .snarkMessages:focus {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.snarkMessages:focus {
|
||||
box-shadow: inset 0 0 0 1px #f90;
|
||||
}
|
||||
|
||||
.snarkMessages ul {
|
||||
margin: -2px 0 2px 0;
|
||||
padding: 0 0 0 14px;
|
||||
@@ -772,7 +780,7 @@ th.headerdownloaded {
|
||||
td {
|
||||
font-size: 9pt;
|
||||
padding: 2px;
|
||||
color: #333 !important;
|
||||
color: #2c354f !important;
|
||||
}
|
||||
|
||||
td:first-child {
|
||||
@@ -835,12 +843,28 @@ td:first-child {
|
||||
font-size: 8.5pt;
|
||||
font-weight: bold;
|
||||
padding: 10px 5px;
|
||||
text-align: center !important;
|
||||
color: #4f2 !important;
|
||||
border-bottom: 1px solid #89f;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded td {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded i {
|
||||
display: inline-block;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded i::before {
|
||||
content: url(images/bullet.png);
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
margin: 1px 4px 0 0 !important;
|
||||
transform: scale(0.95);
|
||||
}
|
||||
|
||||
.snarkTorrentStatus {
|
||||
text-align: left !important;
|
||||
white-space: nowrap;
|
||||
|
||||
@@ -46,16 +46,13 @@ body.iframed {
|
||||
}
|
||||
|
||||
.page {
|
||||
color: #310;
|
||||
min-width: 890px !important;
|
||||
margin: 5px 0 0 0;
|
||||
margin: 5px 0 0;
|
||||
font-size: 9pt !important;
|
||||
line-height: 160% !important;
|
||||
text-align: center;
|
||||
opacity: 1;
|
||||
background: #000;
|
||||
background: repeating-linear-gradient(135deg, #010, #010 10px, #020 10px, #020 20px, #010 20px);
|
||||
box-shadow: inset 0 0 0 1px #000 !important;
|
||||
}
|
||||
|
||||
.iframed .page {
|
||||
@@ -63,7 +60,6 @@ body.iframed {
|
||||
background: none;
|
||||
padding: 0;
|
||||
margin: 5px 0;
|
||||
box-shadow: none;
|
||||
background: url(/themes/console/dark/images/camotile2.png) repeat scroll left top #000;
|
||||
background: linear-gradient(to right, #000, #020 50%, #000) !important;
|
||||
}
|
||||
@@ -225,7 +221,7 @@ body.iframed {
|
||||
text-align: left;
|
||||
margin: 0;
|
||||
padding: 3px 5px;
|
||||
overflow: auto;
|
||||
overflow: hidden;
|
||||
resize: none;
|
||||
color: #69f;
|
||||
height: 54px;
|
||||
@@ -236,6 +232,14 @@ body.iframed {
|
||||
background-blend-mode: screen;
|
||||
}
|
||||
|
||||
.snarkMessages:hover, .snarkMessages:focus {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.snarkMessages:focus {
|
||||
box-shadow: inset 0 0 0 1px #930;
|
||||
}
|
||||
|
||||
/* MS Edge fix */
|
||||
_:-ms-lang(x), .snarkMessages {
|
||||
background: url(/themes/snark/ubergine/images/hat.png) no-repeat scroll right bottom, linear-gradient(to bottom, #010, #000);
|
||||
@@ -252,7 +256,7 @@ _:-ms-lang(x), .snarkMessages {
|
||||
}
|
||||
|
||||
.snarkMessages ul {
|
||||
margin: -1px 0 2px 0;
|
||||
margin: -1px 0 2px;
|
||||
padding: 0 0 0 14px;
|
||||
list-style: none;
|
||||
}
|
||||
@@ -302,16 +306,6 @@ tt {
|
||||
margin-top: -10px !important;
|
||||
}
|
||||
|
||||
pre {
|
||||
width: 100%;
|
||||
font: 8pt "Droid Sans Mono", "Noto Mono", "Andale Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
|
||||
padding: 0;
|
||||
text-align: left !important;
|
||||
height: 8px;
|
||||
color: #35f;
|
||||
font-weight: bold !important;
|
||||
}
|
||||
|
||||
table {
|
||||
margin: 0 0 10px;
|
||||
border: 0;
|
||||
@@ -320,7 +314,6 @@ table {
|
||||
border-collapse: collapse;
|
||||
color: #323;
|
||||
width: 100%;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
thead, tfoot {
|
||||
@@ -398,24 +391,10 @@ tfoot th {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.SnarkTorrents th:first-child {
|
||||
text-align: center;
|
||||
width: 30px;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.SnarkTorrents th br {
|
||||
display: none; /* kill double height button display */
|
||||
}
|
||||
|
||||
.snarkTorrents tfoot th:nth-child(2) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.snarkTorrents tfoot th:nth-child(n+2) {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#pagenav, th.snarkTorrentETA, th.snarkTorrentDownloaded, th.snarkTorrentUploaded, th.snarkTorrentRateDown, th.snarkTorrentRateUp, th.SnarkTorrentAction {
|
||||
text-align: center;
|
||||
}
|
||||
@@ -425,10 +404,6 @@ tfoot th {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.snarkTorrents tfoot th:nth-child(3) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.snarkTorrents tfoot tr:first-child th {
|
||||
padding: 6px 4px !important;
|
||||
vertical-align: middle;
|
||||
@@ -455,10 +430,6 @@ tfoot th {
|
||||
font-size: 8pt !important;
|
||||
}
|
||||
|
||||
.snarkGraphicStatus {
|
||||
width: 24px !important;
|
||||
}
|
||||
|
||||
.snarkTrackerDetails, .SnarkTorrentDetails {
|
||||
width: 16px !important;
|
||||
padding: 0 !important;
|
||||
@@ -478,6 +449,10 @@ th.snarkTorrentStatus {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.snarkTorrentStatus a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.snarkTorrentETA, .snarkTorrentUploaded, .snarkTorrentRateDown, .snarkTorrentRateUp {
|
||||
width: 5%;
|
||||
min-width: 40px;
|
||||
@@ -488,7 +463,7 @@ th.snarkTorrentStatus {
|
||||
width: 0 !important;
|
||||
}
|
||||
|
||||
.snarkTorrents td[colspan="10"]{
|
||||
.snarkTorrents td[colspan="10"] {
|
||||
padding: 2px;
|
||||
color: #cc7 !important;
|
||||
}
|
||||
@@ -503,7 +478,7 @@ th.snarkTorrentStatus {
|
||||
background: #990;
|
||||
padding: 1px 2px;
|
||||
border-radius: 2px;
|
||||
margin: 1px 3px;
|
||||
margin: 1px 3px;
|
||||
font-size: 8pt;
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
@@ -565,13 +540,10 @@ th.snarkTorrentStatus {
|
||||
|
||||
.snarkTorrentInfo tr:nth-child(even) {
|
||||
background: #001000;
|
||||
color: #bb7;
|
||||
vertical-align: middle !important;
|
||||
}
|
||||
|
||||
.snarkTorrentInfo tr:nth-child(odd) {
|
||||
background: #001a00;
|
||||
color: #bb7;
|
||||
}
|
||||
|
||||
.SnarkDirInfo {
|
||||
@@ -662,7 +634,7 @@ td.subHeaderPriority, td.priority {
|
||||
td.subHeaderPriority {
|
||||
background: #020;
|
||||
font-weight: bold;
|
||||
background: url("images/snarktopnav.png") repeat-x scroll center center #110011;
|
||||
background: url(images/snarktopnav.png) repeat-x scroll center center #110011;
|
||||
background-image: linear-gradient(to bottom, #030 0%, #020 50%, #000 51%, #000 100%);
|
||||
text-align: center !important;
|
||||
padding: 0 1px !important;
|
||||
@@ -717,18 +689,13 @@ th.headerdownloaded {
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 1px;
|
||||
color: #ee9 !important;
|
||||
opacity: 1;
|
||||
font-size: 9pt;
|
||||
vertical-align: middle;
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
.mainsection td {
|
||||
color: #111;
|
||||
}
|
||||
|
||||
td:first-child {
|
||||
#configs td:first-child, .addtorrentsection td:first-child, .newtorrentsection td:first-child,
|
||||
.snarkCommentInfo td:first-child, .snarkComments td:first-child {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@@ -742,7 +709,7 @@ td:first-child {
|
||||
}
|
||||
|
||||
.snarkTorrentAction {
|
||||
padding: 1px 1px 1px 1px !important;
|
||||
padding: 1px !important;
|
||||
margin: 0 !important;
|
||||
text-align: center !important;
|
||||
width: 1% !important;
|
||||
@@ -751,22 +718,10 @@ td:first-child {
|
||||
|
||||
.snarkTorrentAction img {
|
||||
margin: 0 2px !important;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.snarkTorrentAction img:hover {
|
||||
box-shadow: 0 0 1px 1px #f90;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded {
|
||||
background: #000;
|
||||
font-size: 8.5pt;
|
||||
font-weight: bold;
|
||||
text-align: center !important;
|
||||
color: #4f2 !important;
|
||||
padding: 10px 5px;
|
||||
border-bottom: 1px solid #494;
|
||||
}
|
||||
|
||||
.snarkGraphicStatus {
|
||||
@@ -784,21 +739,8 @@ td:first-child {
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.snarkTorrentStatus:first-child {
|
||||
text-align: left !important;
|
||||
padding-left: 0;
|
||||
min-width: 48px;
|
||||
font-weight: bold;
|
||||
color: #dd9 !important;
|
||||
padding: 1px !important;
|
||||
}
|
||||
|
||||
.snarkTorrentStatus:first-child img {
|
||||
margin-right: 10px !important;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.snarkTorrentRateUp, .snarkTorrentRateDown, .snarkTorrentDownloaded, .snarkTorrentUploaded {
|
||||
color: #bb7 !important;
|
||||
padding: 0 3px;
|
||||
line-height: 90%;
|
||||
}
|
||||
@@ -814,18 +756,6 @@ td:first-child {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.snarkTorrentUploaded {
|
||||
color: #bb7 !important;
|
||||
}
|
||||
|
||||
.snarkTorrentRateUp {
|
||||
color: #bb7 !important;
|
||||
}
|
||||
|
||||
.snarkTorrentRateDown {
|
||||
color: #bb7 !important;
|
||||
}
|
||||
|
||||
.snarkTorrents img {
|
||||
padding: 4px 3px !important;
|
||||
}
|
||||
@@ -836,13 +766,6 @@ td:first-child {
|
||||
|
||||
.snarkTorrents tr:hover, .snarkDirInfo tr:hover {
|
||||
background: #030 !important;
|
||||
box-shadow: inset 0 0 1px 0 #494;
|
||||
}
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
.snarkTorrents tr:hover, .snarkDirInfo tr:hover {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
tr:hover .percentBarText {
|
||||
@@ -851,7 +774,6 @@ tr:hover .percentBarText {
|
||||
|
||||
/* MS Edge fix */
|
||||
_:-ms-lang(x), .snarkTorrents tr, .snarkTorrents tr:hover, .snarkDirInfo tr:hover {
|
||||
box-shadow: none !important;
|
||||
border-top: 1px solid #000 !important;
|
||||
border-bottom: 1px solid #000 !important;
|
||||
}
|
||||
@@ -860,27 +782,17 @@ _:-ms-lang(x), .snarkTorrents tr, .snarkTorrents tr:hover, .snarkDirInfo tr:hove
|
||||
color: #ee9 !important;
|
||||
}
|
||||
|
||||
.snarkTorrents tr:hover a, .snarkDirInfo tr:hover a {
|
||||
color: #9f9;
|
||||
}
|
||||
|
||||
.snarkDirInfo tr:hover .snarkFileStatus img {
|
||||
mix-blend-mode: normal;
|
||||
}
|
||||
|
||||
.snarkTorrents a:hover, td[onclick^="document.location"]:hover a, .snarkDirInfo a:hover {
|
||||
/*
|
||||
.snarkTorrents a:hover, .snarkDirInfo a:hover {
|
||||
color: #f40 !important;
|
||||
}
|
||||
*/
|
||||
|
||||
td[onclick^="document.location"]:hover {
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
.snarkTorrentEven {
|
||||
background: #001000;
|
||||
}
|
||||
|
||||
.snarkTorrentEven:nth-child(even) {
|
||||
.snarkTorrentEven, .snarkTorrentEven:nth-child(even) {
|
||||
background: #001000;
|
||||
}
|
||||
|
||||
@@ -896,7 +808,7 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
|
||||
border-bottom: 1px solid #000 !important;
|
||||
}
|
||||
|
||||
.snarkTorrentOdd {
|
||||
.snarkTorrentOdd, .snarkTorrentOdd:nth-child(odd) {
|
||||
background: #000800 !important;
|
||||
}
|
||||
|
||||
@@ -904,10 +816,6 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
|
||||
background: #001000 !important;
|
||||
}
|
||||
|
||||
.snarkTorrentOdd:nth-child(odd) {
|
||||
background: #000800 !important;
|
||||
}
|
||||
|
||||
.snarkTorrentOdd td, .snarkTorrentEven td {
|
||||
border-top: none !important;
|
||||
color: #bb7 !important;
|
||||
@@ -952,6 +860,23 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
|
||||
padding-right: 2px;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded {
|
||||
background: #000;
|
||||
font-size: 10pt;
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid #494;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded td {
|
||||
text-align: center !important;
|
||||
color: #ee9 !important;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded i {
|
||||
display: inline-block;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* download bars */
|
||||
|
||||
.snarkDirInfo .snarkFileStatus img {
|
||||
@@ -965,7 +890,6 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
|
||||
border: 1px solid #040;
|
||||
border-bottom: 1px solid #020;
|
||||
border-right: 1px solid #020;
|
||||
box-shadow: none;
|
||||
opacity: 1;
|
||||
box-shadow: 0 0 1px 1px rgba(0,0,0,0.8);
|
||||
margin: 1px auto;
|
||||
@@ -1004,11 +928,6 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
|
||||
transition: ease opacity 0.2s;
|
||||
}
|
||||
|
||||
.percentBarText:hover, .percentBarText:focus {
|
||||
opacity: 0.75;
|
||||
transition: ease opacity 0.2s;
|
||||
}
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
||||
.percentBarText {
|
||||
padding: 0;
|
||||
@@ -1019,22 +938,6 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
|
||||
}
|
||||
}
|
||||
|
||||
.percentBarOuterComplete .percentBarText {
|
||||
color: #ee9;
|
||||
font-weight: normal;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.snarkDirInfo .percentBarOuterComplete .percentBarText {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.percentBarOuterComplete, .percentBarComplete.percentBarInner {
|
||||
border: 1px solid transparent;
|
||||
background: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.priorityIndicator {
|
||||
width: 32px;
|
||||
float: left;
|
||||
@@ -1078,8 +981,8 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
|
||||
.snarkConfigTitle, .toggleview {
|
||||
font-size: 11pt;
|
||||
font-weight: bold;
|
||||
padding: 3px 1px 3px 1px;
|
||||
margin: 5px 0 10px 0 !important;
|
||||
padding: 3px 1px;
|
||||
margin: 5px 0 10px !important;
|
||||
letter-spacing: 0.2em;
|
||||
border: 1px solid #494;
|
||||
border-radius: 0;
|
||||
@@ -1087,11 +990,10 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
|
||||
background: #000 url(/themes/console/dark/images/header.png) repeat-x scroll center center !important;
|
||||
background: linear-gradient(to bottom, #1a261a 0%, #223022 7%, #212f21 9%, #172317 21%, #091109 49%, #050d05 50%, #020602 51%, #010301 53%, #000000 56%, #000000 100%) !important;
|
||||
font-variant: small-caps !important;
|
||||
filter: drop-shadow(0 2px 1px #000);
|
||||
display: inline-block;
|
||||
margin: 0 0 -3px !important;
|
||||
min-width: 260px;
|
||||
box-shadow: inset 0 0 0 1px #000;
|
||||
box-shadow: inset 0 0 0 1px #000, 0 1px 1px #000;
|
||||
}
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
@@ -1142,7 +1044,7 @@ _:-ms-lang(x), .snarkTorrentOdd, .SnarkTorrentEven {
|
||||
|
||||
.toggleview img:active, .toggleview:active img, .snarkConfigTitle a:active img {
|
||||
transform: rotate(90deg);
|
||||
transition: ease transform 0.3s 0s;
|
||||
transition: ease transform 0.3s;
|
||||
}
|
||||
|
||||
.configsectionpanel .snarkConfigTitle, .configsectionpanel .snarkConfigTitle:hover, .configsectionpanel .snarkConfigTitle:active {
|
||||
@@ -1189,7 +1091,7 @@ hr {
|
||||
height: 1px;
|
||||
border: 0 solid #444;
|
||||
width: 0%;
|
||||
margin: 5px 0 7px 0;
|
||||
margin: 5px 0 7px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@@ -1207,10 +1109,10 @@ a:visited {
|
||||
}
|
||||
|
||||
a:hover, a:focus {
|
||||
color: #f60 !important;
|
||||
color: #f40 !important;
|
||||
}
|
||||
|
||||
a:active, .snarkTorrents td a:active {
|
||||
a:active {
|
||||
color: #f90 !important;
|
||||
}
|
||||
|
||||
@@ -1289,21 +1191,15 @@ input.disabled, input.disabled:hover, input.disabled:focus, input.disabled:activ
|
||||
background: #000 !important;
|
||||
}
|
||||
|
||||
|
||||
input[type=image], thead img {
|
||||
padding: 0 !important;
|
||||
border-radius: 3px;
|
||||
border: 0 none transparent !important;
|
||||
margin: 0 2px;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
input[type="image"], a img {
|
||||
filter: drop-shadow(0 0 1px #000);
|
||||
}
|
||||
|
||||
input[type="image"]:hover, a img:hover, input[type="image"]:focus, a:focus img {
|
||||
filter: saturate(200%) drop-shadow(0 0 1px #f90) !important;
|
||||
filter: saturate(200%) drop-shadow(0 0 2px #f30) !important;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
@@ -1320,7 +1216,6 @@ thead a:active img {
|
||||
}
|
||||
|
||||
.snarkTorrentAction input[type="image"] {
|
||||
border: 1px solid #000 !important;
|
||||
border: 1px solid #151 !important;
|
||||
margin: 0 2px !important;
|
||||
padding: 4px !important;
|
||||
@@ -1329,7 +1224,6 @@ thead a:active img {
|
||||
box-shadow: inset 0 0 0 1px #000;
|
||||
border-radius: 2px;
|
||||
height: 9px;
|
||||
filter: drop-shadow(0 0 1px #000);
|
||||
}
|
||||
|
||||
.snarkTorrentAction input[type="image"]:hover, .snarkTorrentAction input[type="image"]:focus {
|
||||
@@ -1557,16 +1451,13 @@ a.control:hover img {
|
||||
|
||||
img {
|
||||
border: none;
|
||||
margin: 0 3px 1px 3px;
|
||||
margin: 0 3px 1px;
|
||||
vertical-align: middle;
|
||||
opacity: 1.0;
|
||||
line-height: 100%;
|
||||
filter: drop-shadow(0 0 1px #000);
|
||||
}
|
||||
|
||||
img:hover {
|
||||
border: none;
|
||||
opacity: 1;
|
||||
line-height: 100%;
|
||||
}
|
||||
|
||||
@@ -1612,7 +1503,7 @@ img[src$="magnet.png"] {
|
||||
border: 1px solid #131;
|
||||
width: 100% !important;
|
||||
width: calc(100% - 170px) !important;
|
||||
margin: 2px 5px 0 5px;
|
||||
margin: 2px 5px 0;
|
||||
}
|
||||
|
||||
#trackerselect tr:nth-child(even) {
|
||||
@@ -1703,13 +1594,6 @@ _:-ms-lang(x), #trackerselect tr:last-child {
|
||||
background: linear-gradient(to bottom, #001100, #000000) repeat scroll 0 0 #000000;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded td {
|
||||
background: #000;
|
||||
border-left: 1px solid #040;
|
||||
border-right: 1px solid #040;
|
||||
color: #ee9 !important;
|
||||
}
|
||||
|
||||
.snarkNewTorrent td {
|
||||
padding: 2px 3px;
|
||||
}
|
||||
@@ -1813,27 +1697,26 @@ _:-ms-lang(x), #trackerselect tr:last-child {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.section, .mainsection, .newtorrentsection, .addtorrentsection, .configsection, .configsectionpanel {
|
||||
background: #000;
|
||||
border: 1px solid #494;
|
||||
color: #ee9;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.newtorrentsection, .addtorrentsection, .configsection {
|
||||
box-shadow: inset 0 0 5px 2px #000;
|
||||
}
|
||||
|
||||
.section, .mainsection {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 1px solid #494;
|
||||
border-bottom: none;
|
||||
color: #ee9;
|
||||
box-shadow: inset 0 0 1px 0 #212;
|
||||
word-wrap: break-word;
|
||||
text-align: center;
|
||||
background: #000;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
.newtorrentsection {
|
||||
margin: -1px 0 10px;
|
||||
padding: 0 10px 0 10px;
|
||||
border: 1px solid #494;
|
||||
text-align: center;
|
||||
color: #ee9;
|
||||
box-shadow: inset 0 0 5px 2px #000;
|
||||
word-wrap: break-word;
|
||||
padding: 0 10px;
|
||||
background: #000 url(images/snark_create.png) no-repeat scroll right center;
|
||||
background: url(images/snark_create.png) center right no-repeat, linear-gradient(to bottom, rgba(0,40,0,0.3) 0%, rgba(0,15,0,0.5) 100%), url(/themes/console/dark/images/camotile2.png) top left repeat;
|
||||
background-size: 80px 80px, 100% 100%, 175px 175px;
|
||||
@@ -1842,11 +1725,6 @@ _:-ms-lang(x), #trackerselect tr:last-child {
|
||||
.addtorrentsection {
|
||||
margin: -1px 0 0;
|
||||
padding: 0 10px;
|
||||
border: 1px solid #494;
|
||||
text-align: center;
|
||||
color: #ee9;
|
||||
box-shadow: inset 0 0 5px 2px #000;
|
||||
word-wrap: break-word;
|
||||
background: #000 url(images/snark_add.png) no-repeat scroll right center;
|
||||
background: url(images/snark_add.png) 99% center no-repeat, linear-gradient(to bottom, rgba(0,40,0,0.3) 0%, rgba(0,15,0,0.5) 100%), url(/themes/console/dark/images/camotile2.png) top left repeat;
|
||||
background-size: 61px 61px, 100% 100%, 175px 175px;
|
||||
@@ -1854,27 +1732,14 @@ _:-ms-lang(x), #trackerselect tr:last-child {
|
||||
|
||||
.configsection {
|
||||
margin: -11px 0 0;
|
||||
padding: 0 10px 12px 10px;
|
||||
border: 1px solid #494;
|
||||
color: #ee9;
|
||||
box-shadow: inset 0 0 5px 2px #000;
|
||||
word-wrap: break-word;
|
||||
text-align: center;
|
||||
background: #000;
|
||||
font-weight: bold;
|
||||
padding: 0 10px 12px;
|
||||
background: url(images/configuration.png) 102% 30% no-repeat, linear-gradient(to bottom, rgba(0,40,0,0.3) 0%, rgba(0,15,0,0.5) 100%), url(/themes/console/dark/images/camotile2.png) top left repeat;
|
||||
background-size: 84px 82px, 100% 100%, 175px 175px;
|
||||
}
|
||||
|
||||
.configsectionpanel {
|
||||
margin: -1px 0 0 0;
|
||||
margin: -1px 0 0;
|
||||
padding: 0;
|
||||
border: 1px solid #494;
|
||||
color: #ee9;
|
||||
box-shadow: inset 0 0 5px 2px #000;
|
||||
word-wrap: break-word;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
background: #000 url(images/configuration.png) no-repeat scroll right center;
|
||||
background: linear-gradient(to bottom, #000 10%, rgba(0,40,0,0.3) 10%, rgba(0,15,0,0.5) 100%), url(/themes/console/dark/images/camotile2.png) top left repeat;
|
||||
}
|
||||
@@ -1889,7 +1754,6 @@ _:-ms-lang(x), #trackerselect tr:last-child {
|
||||
|
||||
.configsection table {
|
||||
color: #ffb;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.configsection a {
|
||||
@@ -1990,7 +1854,6 @@ input#toggle_addtorrent:checked + label + hr + table, input#toggle_createtorrent
|
||||
color: #7c7;
|
||||
}
|
||||
|
||||
|
||||
.peerinfo td:first-child {
|
||||
background: url(images/peer.png) center center no-repeat;
|
||||
background-size: 14px 14px;
|
||||
@@ -2390,7 +2253,7 @@ input[type="radio"]:checked::before {
|
||||
top: 25%;
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
background: #69EF68;
|
||||
background: #69ef68;
|
||||
}
|
||||
|
||||
input[type="checkbox"]:hover, input[type="radio"]:hover, input[type="checkbox"]:focus, input[type="radio"]:focus {
|
||||
@@ -2421,7 +2284,6 @@ input.toggle_input, input.toggle_input:checked { /* hide checkbox and use label
|
||||
/* end custom radios/checkboxes */
|
||||
|
||||
/* Comments Section */
|
||||
/* TODO: merge with other rules where applicable */
|
||||
|
||||
.snarkCommentInfo, .snarkComments {
|
||||
margin: 10px 0 0 !important;
|
||||
@@ -2490,7 +2352,7 @@ input.toggle_input, input.toggle_input:checked { /* hide checkbox and use label
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.snarkCommentInfo textarea { /* remember to set 10pt @ > 1400px */
|
||||
.snarkCommentInfo textarea {
|
||||
font-family: "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "DejaVu Sans", Verdana, "Lucida Grande", Helvetica, sans-serif;
|
||||
width: 100%;
|
||||
min-height: 64px;
|
||||
@@ -2536,10 +2398,6 @@ input.toggle_input, input.toggle_input:checked { /* hide checkbox and use label
|
||||
padding-right: 2px;
|
||||
}
|
||||
|
||||
.snarkCommentInfo td:last-child, .snarkComments td:last-child {
|
||||
/* width: 1% !important;*/
|
||||
}
|
||||
|
||||
.snarkComments td {
|
||||
white-space: nowrap;
|
||||
}
|
||||
@@ -2850,7 +2708,6 @@ textarea[name="i2cpOpts"] {
|
||||
.page {
|
||||
padding: 10px;
|
||||
border: 1px solid #494;
|
||||
box-shadow: inset 0 0 0 1px #000, inset 0 0 7px 3px #002900;
|
||||
}
|
||||
|
||||
#configs td:first-child::after {
|
||||
|
||||
@@ -203,7 +203,7 @@ button::-moz-focus-inner, input::-moz-focus-inner {
|
||||
margin: -2px 0 0;
|
||||
padding: 3px 5px 3px 5px;
|
||||
border-spacing: 0;
|
||||
overflow: auto;
|
||||
overflow: hidden;
|
||||
color: #339;
|
||||
height: 52px;
|
||||
width: auto;
|
||||
@@ -216,6 +216,14 @@ button::-moz-focus-inner, input::-moz-focus-inner {
|
||||
background-size: auto 100%, 100% 100%;
|
||||
}
|
||||
|
||||
.snarkMessages:hover, .snarkMessages:focus {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.snarkMessages:focus {
|
||||
box-shadow: inset 0 0 0 1px #f90;
|
||||
}
|
||||
|
||||
.snarkMessages a:link, .snarkMessages a:visited {
|
||||
color: #3b77bf !important;
|
||||
font-size: 8pt;
|
||||
@@ -562,11 +570,15 @@ th.snarkTorrentStatus {
|
||||
background: linear-gradient(to right, #eef, #fff, #eef) !important;
|
||||
box-shadow: inset 0 0 1px #fff;
|
||||
border-bottom: 1px solid #7778bf !important;
|
||||
padding: 10px !important;
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
text-align: center !important;
|
||||
color: #272e3f !important;
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded i {
|
||||
display: inline-block;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.snarkTorrentRateUp, .snarkTorrentRateDown, .snarkTorrentDownloaded, .snarkTorrentUploaded {
|
||||
|
||||
@@ -209,7 +209,7 @@ body.iframed {
|
||||
|
||||
.snarkMessages {
|
||||
font: normal 8pt "Droid Sans Mono", "Noto Mono", "DejaVu Sans Mono", "Lucida Console", monospace;
|
||||
overflow: auto;
|
||||
overflow: hidden;
|
||||
width: auto;
|
||||
height: 55px;
|
||||
margin: 0;
|
||||
@@ -228,6 +228,14 @@ body.iframed {
|
||||
margin-top: -5px;
|
||||
}
|
||||
|
||||
.snarkMessages:hover, .snarkMessages:focus {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.snarkMessages:focus {
|
||||
box-shadow: inset 0 0 0 1px #930;
|
||||
}
|
||||
|
||||
.snarkMessages a:active {
|
||||
color: #ff007c !important;
|
||||
}
|
||||
@@ -517,10 +525,14 @@ th.snarkTorrentStatus {
|
||||
text-align: center !important;
|
||||
font-weight: bold;
|
||||
color: #c9ceff !important;
|
||||
padding: 10px;
|
||||
background: #001;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded i {
|
||||
display: inline-block;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.snarkTorrentStatus {
|
||||
padding: 2px 5px 2px 2px !important;
|
||||
text-align: left !important;
|
||||
|
||||
@@ -425,11 +425,9 @@ tfoot td:first-child {
|
||||
padding-top: 3px !important;
|
||||
}
|
||||
|
||||
.snarkTorrents thead th {
|
||||
border-top: 1px solid transparent !important;
|
||||
}
|
||||
|
||||
.snarkTorrents thead th {
|
||||
border-top: 1px solid transparent !important;
|
||||
border-bottom: 1px solid #313 !important;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 6px;
|
||||
border-bottom: 1px solid #313;
|
||||
@@ -461,12 +459,14 @@ th.snarkTorrentStatus {
|
||||
}
|
||||
|
||||
.snarkTrackerDetails, .SnarkTorrentDetails {
|
||||
width: 16px;
|
||||
width: 1%;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.snarkTrackerDetails {
|
||||
text-align: right;
|
||||
padding-right: 2px;
|
||||
min-width: 36px;
|
||||
}
|
||||
|
||||
.snarkTorrentName {
|
||||
@@ -563,21 +563,42 @@ th.snarkTorrentAction input[type="image"]:hover, .snarkTorrentAction input[type=
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded {
|
||||
padding: 10px;
|
||||
background: #323;
|
||||
font-size: 8.5pt;
|
||||
font-weight: bold;
|
||||
text-align: center !important;
|
||||
color: #bbb !important;
|
||||
border-radius: 0 0 2px 2px;
|
||||
}
|
||||
|
||||
.snarkTorrents th:empty + th:empty, .snarkTorrents td:empty + td:empty, .snarkTorrentETA:empty, .snarkTorrentAction:empty, .snarkTorrentRateDown:empty {
|
||||
width: 0 !important;
|
||||
min-width: 0 !important;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded, .snarkTorrentNoneLoaded:hover td {
|
||||
background: #212 !important;
|
||||
background: linear-gradient(to bottom, #313, #101) !important;
|
||||
font-size: 8.5pt;
|
||||
font-weight: bold;
|
||||
border-radius: 0 0 2px 2px;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded td {
|
||||
text-align: center !important;
|
||||
color: #ddd !important;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded i {
|
||||
display: inline-block;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.choked {
|
||||
color: #f00000 !important;
|
||||
}
|
||||
|
||||
.unchoked {
|
||||
color: #34cf19 !important;
|
||||
}
|
||||
|
||||
.choked, .unchoked {
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* end main torrents listing */
|
||||
|
||||
td {
|
||||
@@ -586,10 +607,6 @@ td {
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
||||
.mainsection td {
|
||||
color: #111;
|
||||
}
|
||||
|
||||
td:first-child {
|
||||
text-align: right;
|
||||
}
|
||||
@@ -892,30 +909,12 @@ _:-ms-lang(x), .snarkDirInfo img, .snarkTorrents img {
|
||||
transition: ease opacity 0.2s;
|
||||
}
|
||||
|
||||
.percentBarText:hover, .percentBarText:focus {
|
||||
opacity: 1;
|
||||
transition: ease opacity 0.2s;
|
||||
}
|
||||
|
||||
.iframed .percentBarText, .iframed .percentBarText:hover, .iframed .percentBarText:focus {
|
||||
transition: none;
|
||||
}
|
||||
|
||||
/* end download bars */
|
||||
|
||||
.choked {
|
||||
color: #f00000 !important;
|
||||
}
|
||||
|
||||
.unchoked {
|
||||
color: #34CF19 !important;
|
||||
}
|
||||
|
||||
.choked, .unchoked {
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.thumb {
|
||||
max-width: 16px;
|
||||
transition: ease all 0.3s;
|
||||
@@ -1105,7 +1104,7 @@ label.toggleview img:hover, label.toggleview:hover img, .snarkConfigTitle:hover
|
||||
|
||||
label.toggleview img:active, label.toggleview:active img, .snarkConfigTitle:active a img {
|
||||
transform: rotate(90deg);
|
||||
transition: ease transform 0.3s 0s;
|
||||
transition: ease transform 0.3s;
|
||||
}
|
||||
|
||||
.configsection a, label.toggleview {
|
||||
@@ -1132,7 +1131,7 @@ label.toggleview img:active, label.toggleview:active img, .snarkConfigTitle:acti
|
||||
/* buttons & inputs */
|
||||
|
||||
input, a.control {
|
||||
font: 8pt "Droid Sans", "Noto Sans", "DejaVu Sans", Verdana, Helvetica, sans-serif;
|
||||
font: 8pt "Droid Sans", "Noto Sans", Ubuntu, "Segoe UI", "Lucida Grande", "DejaVu Sans", Verdana, sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@@ -1244,7 +1243,7 @@ input[type="text"], input.r, input[name="nofilter_dataDir"] {
|
||||
letter-spacing: 0.03em;
|
||||
background: url(images/graytile.png) #212;
|
||||
background-size: 96px 96px;
|
||||
transition: ease box-shadow 0.15s 0s, ease color 0.15s 0s;
|
||||
transition: ease box-shadow 0.15s, ease color 0.15s;
|
||||
}
|
||||
|
||||
textarea[name="i2cpOpts"] {
|
||||
@@ -1264,7 +1263,7 @@ input[type=text]:active, input[type=text]:focus, input.r:focus, input[name="nofi
|
||||
background: linear-gradient(to bottom, #d60, #c50);
|
||||
color: #fff;
|
||||
box-shadow: inset 0 0 0 1px #ffffcf;
|
||||
transition: ease box-shadow 0.15s 0s;
|
||||
transition: ease box-shadow 0.15s;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
@@ -1575,7 +1574,7 @@ textarea {
|
||||
border: 1px solid #000;
|
||||
font-size: 8pt;
|
||||
box-shadow: inset 1px 1px 2px 1px #101;
|
||||
transition: ease box-shadow 0.15s 0s;
|
||||
transition: ease box-shadow 0.15s;
|
||||
}
|
||||
|
||||
/* end buttons & inputs */
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
/* I2PSnark theme "Vanilla" by dr|z3d */
|
||||
/* Now with 100% more chocolate */
|
||||
|
||||
html {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #2f231a;
|
||||
background: repeating-linear-gradient(to bottom, #9f948b 1px, #6f5b4c 1px, #bfa285 3px);
|
||||
@@ -672,8 +676,16 @@ th.snarkTorrentStatus {
|
||||
width: 0 !important;
|
||||
}
|
||||
|
||||
.snarkTorrents thead th:nth-child(n+2) img {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.snarkTorrents thead th a img, .snarkTorrents thead th input[type="image"] {
|
||||
display: inline-block !important;
|
||||
}
|
||||
|
||||
.snarkTorrents tt {
|
||||
background: #7F654F;
|
||||
background: #7f654f;
|
||||
color: #fff;
|
||||
padding: 2px 3px;
|
||||
border-radius: 2px;
|
||||
@@ -685,19 +697,30 @@ th.snarkTorrentStatus {
|
||||
margin: 0 1px;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded {
|
||||
background: #5f4e41;
|
||||
font-weight: bold;
|
||||
text-align: center !important;
|
||||
color: #bbb !important;
|
||||
}
|
||||
|
||||
.snarkTorrents th:empty + th:empty, .snarkTorrents td:empty + td:empty, .snarkTorrentETA:empty,
|
||||
.snarkTorrentRateDown:empty, .snarkTorrentRateUp:empty, .snarkTorrentAction:empty {
|
||||
width: 0 !important;
|
||||
min-width: 0 !important;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded, .snarkTorrentNoneLoaded:hover td {
|
||||
background: #5f4e41 !important;
|
||||
}
|
||||
|
||||
.mainsection .snarkTorrentNoneLoaded td {
|
||||
font-weight: bold;
|
||||
text-align: center !important;
|
||||
color: #cfc7c2 !important;
|
||||
padding: 10px !important;
|
||||
}
|
||||
|
||||
.snarkTorrentNoneLoaded i::before {
|
||||
content: url(images/bullet.png);
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
margin: 1px 3px 0 0;
|
||||
}
|
||||
|
||||
/* end main torrents listing */
|
||||
|
||||
.snarkTorrentEven {
|
||||
@@ -2737,7 +2760,7 @@ body, .snarkTorrents td, .snarkAddInfo, th, td, .snarkFileName, a.control, input
|
||||
|
||||
.snarkNav:link {
|
||||
padding: 4px 8px 4px 26px !important;
|
||||
background-size: 16px auto, 100% 100%, 100% 100% !important !important;
|
||||
background-size: 16px auto, 100% 100%, 100% 100% !important;
|
||||
background-position: 8px center, center center, center center !important;
|
||||
}
|
||||
|
||||
|
||||
@@ -1058,6 +1058,7 @@ h3#config {
|
||||
.topbuttons input.firstpage, .topbuttons input[name="firstpage"], .topbuttons input.lastpage, .topbuttons input[name="lastpage"],
|
||||
.topbuttons input.list {
|
||||
height: 26px;
|
||||
width: 26px;
|
||||
margin: 2px;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user